FieldMatch.vue 13 KB

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