AddMedicinePrompt.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. <template>
  2. <div class="NoiseTemplateWrapper TemplateWrapper">
  3. <div class="groupTitle"><i
  4. class="el-icon-back"
  5. @click="back"
  6. ></i> 医学静态知识--{{isEdit?'修改':'添加'}}</div>
  7. <div class="info-container">
  8. <el-form :rules="rules"
  9. :model="form"
  10. label-width="130px"
  11. ref="groups">
  12. <el-form-item v-if="!isEdit" label="选择术语标签:" prop="selectedTerm">
  13. <el-select v-model="form.selectedTerm"
  14. filterable
  15. remote
  16. clearable
  17. value-key="libId"
  18. ref="termName"
  19. placeholder="搜索术语"
  20. :remote-method="searchTerms">
  21. <el-option v-for="term in terms" :key="term.libId" :label="term.name" :value="term" ></el-option>
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item label="已选择术语标签:">
  25. {{form.selectedTermName}}
  26. </el-form-item>
  27. <el-form-item label="添加静态知识">
  28. </el-form-item>
  29. <InfoParagraph v-for="(f,i) in form.prags"
  30. :data="f"
  31. :index="i"
  32. :isEdit = "isEdit"
  33. @change="getPgValues"
  34. @add="addParagraph"
  35. @del="delParagraph" ref="subForm"></InfoParagraph>
  36. </el-form>
  37. <div class="btn">
  38. <el-button
  39. type="primary"
  40. @click="submitForm"
  41. >确 定</el-button>
  42. </div>
  43. </div>
  44. </div>
  45. </template>
  46. <script>
  47. /**
  48. *
  49. */
  50. import api from '@api/icss.js';
  51. import InfoParagraph from './InfoParagraph';
  52. export default {
  53. name: 'AddMedicinePrompt',
  54. components: {
  55. InfoParagraph
  56. },
  57. data() {
  58. return {
  59. isEdit:false,
  60. terms:[], //术语列表
  61. editData:{
  62. selectedTerm:'',
  63. prags:[]
  64. },
  65. form:{
  66. selectedTerm:'', //术语标签
  67. selectedTermName:'',
  68. prags:[{ //单个段落相关
  69. title:'',
  70. content:'',
  71. isReason:0,
  72. orderNo:0,
  73. position:[],
  74. text:''}]
  75. },
  76. rules: {
  77. selectedTerm: [
  78. { required: true, message: '请选择术语标签', trigger: 'change' }
  79. ]
  80. }
  81. }
  82. },
  83. watch:{
  84. 'form.selectedTerm':function(newVal){
  85. const name = newVal.name;
  86. this.editData.selectedTermName = name;
  87. }
  88. },
  89. created:function(){
  90. const {isEdit,data} = this.$route.params;
  91. if(isEdit){
  92. this.isEdit = isEdit;
  93. this.form.selectedTermName = data.name;
  94. this.form.prags[0].content = data.content;
  95. this.form.prags[0].position=this.mapStringToNum(data.position);
  96. this.form.prags[0].title = data.title;
  97. }
  98. },
  99. methods: {
  100. back() { this.$router.go(-1) },
  101. searchTerms(query){
  102. //搜索术语列表
  103. api.getConceptInfo({term:query,type:''}).then((res) =>{
  104. if(res.data.code === '0') {
  105. this.terms = res.data.data;
  106. }else{
  107. this.warning("数据获取失败");
  108. }
  109. })
  110. },
  111. mapStringToNum(str){
  112. return str.split(",").map((it)=>{
  113. return +it;
  114. })
  115. },
  116. parseData(info){
  117. let detail = [];
  118. info.details.forEach((it)=>{
  119. detail.push(Object.assign({},it,{position:this.mapStringToNum(it.position)}));
  120. });
  121. return {
  122. name:info.name,
  123. tagFor:info.questionList[0].type+'',
  124. selectedTags:info.questionList,
  125. prags:detail
  126. };
  127. },
  128. addParagraph(){
  129. this.form.prags.push({title:'',
  130. content:'',
  131. isReason:0,
  132. orderNo:0,
  133. position:[],
  134. text:''});
  135. },
  136. delParagraph(i){
  137. if(this.form.prags.length==1){
  138. this.warning('只剩一个段落,不能再删啦!');
  139. return;
  140. }
  141. this.showConfirmDialog('确定要删除该段落?', () => {
  142. this.form.prags.splice(i,1);
  143. });
  144. },
  145. getPgValues(i,data){
  146. this.form.prags[i] = data;
  147. //console.log(data,this.form.prags);
  148. },
  149. submitForm() {
  150. //验证外层表单
  151. let goOn=true,it=null;
  152. this.$refs.groups.validate((valid) =>{
  153. if(!valid){
  154. goOn = false;
  155. return false;
  156. }
  157. });
  158. //验证段落表单
  159. for(let i=0;i<this.$refs.subForm.length;i++){
  160. it=this.$refs.subForm[i];
  161. it.$refs.form.validate((valid) =>{
  162. if(!valid){
  163. goOn = false;
  164. }
  165. });
  166. };
  167. if(!goOn){
  168. return;
  169. }
  170. //通过必填验证,提交保存
  171. const param = {
  172. name:this.form.selectedTerm.libId,
  173. detailVOList:Object.assign(this.form.prags)
  174. };
  175. console.log(param);
  176. this.showSaveDialog(param);
  177. },
  178. showSaveDialog(param) {
  179. this.showConfirmDialog('是否保存该静态知识?', () => {
  180. api.saveTermPrompts(param).then((res) => {
  181. if (res.data.code === '0') {
  182. this.warning(res.data.msg || '保存成功', 'success');
  183. this.$router.push("/admin/LT-YXSYKWH-YXSYJTZSWH");
  184. } else {
  185. this.warning(res.data.msg)
  186. }
  187. }).catch((err) => {
  188. this.warning(err);
  189. })
  190. });
  191. },
  192. showConfirmDialog(msg, resolve) {
  193. this.$alert(msg, '提示', {
  194. confirmButtonText: '确定',
  195. type: 'warning'
  196. }).then(() => {
  197. resolve();
  198. }).catch(() => {});
  199. },
  200. warning(msg, type) {
  201. this.$message({
  202. showClose: true,
  203. message: msg,
  204. type: type || 'warning'
  205. })
  206. },
  207. }
  208. }
  209. </script>
  210. <style lang="less">
  211. @import "../../less/common.less";
  212. .info-container{
  213. background: #fff;
  214. padding: 20px;
  215. margin: 20px 20px -20px 20px;
  216. .el-input__inner{
  217. width: 200px;
  218. }
  219. .el-form-item__label{
  220. text-align: left;
  221. }
  222. .add-prg .el-form-item{
  223. margin-bottom: 20px;
  224. }
  225. }
  226. .line{
  227. border-top:1px #dcdfe6 solid;
  228. margin-bottom: 25px;
  229. }
  230. .NoiseTemplateWrapper .info-container .el-input__inner{
  231. width: 250px;
  232. }
  233. .NoiseTemplateWrapper .el-select .el-input .el-icon-circle-close{
  234. display: inherit!important;
  235. }
  236. </style>