FieldMatch.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. <template>
  2. <div>
  3. <crumbs :title="title" :param="$route.params" linkTo="BaseField"></crumbs>
  4. <div class="contents">
  5. <div class="content">
  6. <el-form ref="form" :label-position="labelPosition" label-width="118px" :model="form" :rules="rules">
  7. <el-form-item label="所属医院:" prop="hospitalId">
  8. <el-select v-model="form.hospitalId"
  9. placeholder="请选择"
  10. @change="changeHospital"
  11. size="small">
  12. <el-option
  13. v-for="item in hisTypes"
  14. :key="item.val"
  15. :label="item.name"
  16. :value="Number(item.val)">
  17. </el-option>
  18. </el-select>
  19. </el-form-item>
  20. <el-form-item label="所属模块:" prop="modeId">
  21. <el-select v-model="form.modeId"
  22. placeholder="请选择"
  23. @change="changeModule"
  24. size="small">
  25. <el-option
  26. v-for="item in fieldTypes"
  27. :key="item.val"
  28. :label="item.name"
  29. :value="Number(item.val)">
  30. </el-option>
  31. </el-select>
  32. </el-form-item>
  33. <el-form-item label="备注:" prop="tagName">
  34. <el-input type="text" placeholder="请输入备注" v-model="form.tagName"></el-input>
  35. </el-form-item>
  36. <el-form-item label="显示名称:" prop="name">
  37. <el-input type="text" placeholder="请输入显示名称" v-model="form.name"></el-input>
  38. </el-form-item>
  39. <el-form-item label="取值字段:" prop="value">
  40. <el-input type="text" placeholder="请输入取值字段" v-model="form.val"></el-input>
  41. </el-form-item>
  42. <el-form-item label="关联缺陷条目:" prop="casesEntryIds">
  43. <el-select filterable
  44. multiple
  45. v-model="casesEIds"
  46. placeholder="请选择"
  47. class="big-select"
  48. size="small">
  49. <el-option
  50. v-for="item in flawList"
  51. :key="item.id"
  52. :label="item.name"
  53. :value="String(item.id)">
  54. </el-option>
  55. </el-select>
  56. </el-form-item>
  57. <el-form-item>
  58. <el-checkbox v-model="form.addLine" :true-label="Number(1)" :false-label="Number(0)">换行</el-checkbox>
  59. <el-checkbox v-model="form.position" :true-label="Number(1)" :false-label="Number(0)">靠右显示</el-checkbox>
  60. <el-checkbox v-model="form.bold" :true-label="Number(1)" :false-label="Number(0)">内容加粗</el-checkbox>
  61. <el-checkbox v-model="form.retract" :true-label="Number(1)" :false-label="Number(0)">缩进</el-checkbox>
  62. </el-form-item>
  63. <el-button class="disclButn" size="small" type="primary" :disabled = 'saveDisable' @click="comfirn('form')">确定</el-button>
  64. </el-form>
  65. </div>
  66. </div>
  67. </div>
  68. </template>
  69. <script type="text/javascript">
  70. import api from '@api/qualityControl.js';
  71. export default {
  72. name:'FieldMatch',
  73. data(){
  74. return{
  75. // data:{},
  76. list:[],
  77. labelPosition:'left',
  78. isFirst:true,
  79. title:'字段映射维护-添加字段映射',
  80. casesEIds:'',
  81. form:{
  82. tagType:1, //固定
  83. modeId:"",
  84. hospitalId:"",
  85. name:'',
  86. val:'',
  87. tagName:'',
  88. addLine:0,
  89. bold:0,
  90. position:0,
  91. retract:0,
  92. casesEntryIds:'',
  93. quesCasesEntryVOList:[]
  94. },
  95. id:null,
  96. rules:{
  97. hospitalId:{ required: true, message: '请选择所属医院', trigger: ['blur', 'change']},
  98. modeId:{ required: true, message: '请选择所属模块', trigger: ['blur', 'change']},
  99. tagName:{ required: true, message: '请输入备注', trigger: ['blur', 'change']},
  100. /*name:[{ required: true, message: '请输入显示名称',trigger: ['blur', 'change'] }],*/
  101. },
  102. copy:null,
  103. saveDisable: false, //保存按钮禁止点击
  104. flawList:[],
  105. hisTypes:[],
  106. fieldTypes:[],
  107. }
  108. },
  109. created(){
  110. this.getAllTypes();
  111. let {isCopy,info} = this.$route.params;
  112. this.copy=isCopy;
  113. if(info){
  114. const infoCopy = Object.assign({},info);
  115. isCopy?infoCopy.id="":"";
  116. // infoCopy.casesEntryIds?this.casesEIds = infoCopy.casesEntryIds.split(","):'';
  117. let tmpArr = [],tmpArr1 = []
  118. for(let i = 0;i < infoCopy.quesCasesEntryDTOList.length;i++){
  119. let obj = {
  120. name:infoCopy.quesCasesEntryDTOList[i].casesEntryName,
  121. casesEntryName:infoCopy.quesCasesEntryDTOList[i].casesEntryName,
  122. id:infoCopy.quesCasesEntryDTOList[i].casesEntryId,
  123. casesEntryId:infoCopy.quesCasesEntryDTOList[i].casesEntryId
  124. }
  125. tmpArr.push(""+infoCopy.quesCasesEntryDTOList[i].casesEntryId)
  126. tmpArr1.push(obj)
  127. }
  128. infoCopy.quesCasesEntryDTOList?this.casesEIds = tmpArr:'';
  129. infoCopy.quesCasesEntryVOList = [...tmpArr1];
  130. this.title=isCopy?"字段映射维护-复制字段映射":'字段映射维护-修改字段映射';
  131. this.form = infoCopy;
  132. this.getQcFlawList(tmpArr1);
  133. }/*else{
  134. let hospitalId = localStorage.getItem("qcSelectHospital")&&Number(localStorage.getItem("qcSelectHospital")) || "";
  135. let modeId = localStorage.getItem("qcSelectModule")&&Number(localStorage.getItem("qcSelectModule")) || "";
  136. let qcSelecttModuleNme = localStorage.getItem("qcSelectModuleName");
  137. this.form.hospitalId = hospitalId
  138. this.form.modeId = modeId
  139. this.form.tagName = qcSelecttModuleNme
  140. this.getQcFlawList()
  141. }*/
  142. },
  143. watch:{
  144. "casesEIds":function(val){
  145. this.form.casesEntryIds = val.join(",");
  146. let tmp = []
  147. for(let i = 0;i < val.length;i++){
  148. let obj = {
  149. casesEntryId:val[i],
  150. id:val[i],
  151. }
  152. tmp.push(obj)
  153. }
  154. this.form.quesCasesEntryVOList = tmp
  155. }
  156. },
  157. methods:{
  158. changeHospital(val){
  159. localStorage.setItem("qcSelectHospital",val);
  160. this.getQcFlawList()
  161. this.form.modeId=""
  162. this.form.quesCasesEntryDTOList =[]
  163. this.casesEIds=[]
  164. },
  165. changeModule(val){
  166. localStorage.setItem("qcSelectModule",val);
  167. const qcSelecttModuleNme = this.fieldTypes.find(item => Number(item.val) === val).name + '-'
  168. this.form.tagName = qcSelecttModuleNme
  169. localStorage.setItem("qcSelectModuleName",qcSelecttModuleNme);
  170. this.getQcFlawList()
  171. this.form.quesCasesEntryDTOList =[]
  172. this.casesEIds=[]
  173. },
  174. getQcFlawList(val){
  175. const { hospitalId, modeId } = this.form
  176. if(hospitalId === '' || modeId === ''){
  177. return
  178. }
  179. const param={modeId:modeId,hospitalId:hospitalId,name:"",filter:1,size:500};
  180. api.getQcFlawList(param).then((res)=>{
  181. if(res.data.code==="0") {
  182. const data = res.data.data;
  183. this.flawList = []
  184. this.flawList = data.records;
  185. let info = this.$route.params.info;
  186. if(info){
  187. const infoCopy = Object.assign({},this.form);
  188. for(let i = 0;i < infoCopy.quesCasesEntryDTOList.length;i++){
  189. let obj = {
  190. name:infoCopy.quesCasesEntryDTOList[i].casesEntryName,
  191. casesEntryName:infoCopy.quesCasesEntryDTOList[i].casesEntryName,
  192. id:infoCopy.quesCasesEntryDTOList[i].casesEntryId,
  193. casesEntryId:infoCopy.quesCasesEntryDTOList[i].casesEntryId
  194. }
  195. this.flawList.unshift(obj)
  196. }
  197. }
  198. }else{
  199. this.warning("获取缺陷条目失败");
  200. }
  201. });
  202. },
  203. getAllTypes(){
  204. if(localStorage.getItem("qcModuleTypes")){
  205. this.hisTypes = JSON.parse(localStorage.getItem("qcHospitalTypes"));
  206. this.fieldTypes = JSON.parse(localStorage.getItem("qcModuleTypes"));
  207. return ;
  208. }
  209. //获取枚举信息
  210. api.getQcTypes().then((res)=>{
  211. if(res.data.code==="0"){
  212. const data = res.data.data;
  213. localStorage.setItem("qcFieldTypes",JSON.stringify(data[11]));
  214. localStorage.setItem("qcModuleTypes",JSON.stringify(data[12]));
  215. localStorage.setItem("qcHospitalTypes",JSON.stringify(data[13]));
  216. }else{
  217. this.warning("获取枚举信息失败");
  218. }
  219. });
  220. },
  221. comfirn(form){
  222. /*if(!this.form.name.trim() || !this.form.refreshTime.trim()){
  223. this.$message({
  224. message:'请填写相关内容',
  225. type:'warning'
  226. });
  227. return
  228. }*/
  229. this.$refs[form].validate((valid) => {
  230. if (valid) {
  231. const { val } = this.form
  232. let regex = /(?<=【)(.+?)(?=】)/g;
  233. let regex2 = /[^\u4e00-\u9fa5|a-zA-Z0-9]+/
  234. const matchVal = val.match(regex) ||[]
  235. let illegalCode = false
  236. for(let i = 0; i < matchVal.length; i++){
  237. if(regex2.test(matchVal[i])){
  238. illegalCode = true
  239. }
  240. }
  241. if(illegalCode){
  242. this.warning("取值字段【】含有非法字符")
  243. return;
  244. }
  245. if(this.form.id){//修改
  246. const param = Object.assign({},this.form);
  247. this.saveDisable = true; //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
  248. api.addFieldMatch({questionWrapper:param}).then((res)=>{
  249. if(res.data.code==0){
  250. this.$message({
  251. message:"修改成功",
  252. type:'success'
  253. });
  254. //返回带搜索条件的首页
  255. this.$router.push({
  256. name: 'BaseField',
  257. params: Object.assign({}, this.$route.params, {currentPage: 1})
  258. });
  259. }else{
  260. this.$message({
  261. message:res.data.msg,
  262. type:'warning'
  263. });
  264. }
  265. this.saveDisable = false
  266. })
  267. }else{//添加
  268. const params = Object.assign({},this.form);
  269. this.saveDisable = true; //提交保存按钮不可点击,返回结果时才可点击,防止频繁发送请求
  270. api.addFieldMatch({questionWrapper:params}).then((res)=>{
  271. if(res.data.code==0){
  272. this.$message({
  273. message:"添加成功",
  274. type:'success'
  275. });
  276. this.$router.push({name: 'BaseField'});
  277. }else{
  278. this.$message({
  279. message:res.data.msg,
  280. type:'warning'
  281. });
  282. }
  283. this.saveDisable = false
  284. })
  285. }
  286. } else {
  287. return false;
  288. }
  289. });
  290. },
  291. warning(msg, type,time) {
  292. this.$message({
  293. showClose: true,
  294. message: msg,
  295. type: type || 'warning',
  296. duration:time || '3000'
  297. })
  298. },
  299. }
  300. }
  301. </script>
  302. <style lang="less" scoped>
  303. .content {
  304. background: #fff;
  305. padding: 20px 20px 50px;
  306. color: #545455;
  307. min-width: 980px;
  308. position: relative;
  309. }
  310. .el-form-item{
  311. width: 600px;
  312. }
  313. .el-select.big-select{
  314. width: 360px;
  315. }
  316. </style>