AddRecordItem.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517
  1. <template>
  2. <div class="addRecordItemWrapper">
  3. <crumbs :title="title" :param="$route.params" linkTo="RecordItemList"></crumbs>
  4. <div class="contents">
  5. <div class="content">
  6. <el-form :rules="rules" ref="form" :label-position="labelPosition" label-width="125px" class="add-record-form" :model="form">
  7. <el-form-item label="条目名称:" prop="itemName">
  8. <el-input v-model.trim="form.itemName" maxlength="200" placeholder="请输入条目名称"></el-input>
  9. </el-form-item>
  10. <el-form-item label="所属模块:" prop="brbaxx">
  11. <el-select v-model="form.casesId"
  12. placeholder="请选择模块"
  13. @change="changeModule"
  14. >
  15. <el-option
  16. v-for="item in caseLIst"
  17. :key="item.id"
  18. :label="item.name"
  19. :value="item.id">
  20. </el-option>
  21. </el-select>
  22. </el-form-item>
  23. <!-- <el-form-item label="条目编码:" prop="brbarh">
  24. <el-input v-model="form.itemCode" placeholder="请输入条目编码"></el-input>
  25. </el-form-item> -->
  26. <!-- <el-form-item label="层级定义:" prop="remark">
  27. <el-input v-model="form.levelNo" placeholder="请输入层级定义"></el-input>
  28. </el-form-item> -->
  29. <el-form-item label="医院数据模块:" prop="remark">
  30. <el-select v-model="form.hospitalModuleId"
  31. placeholder="请选择医院数据模块"
  32. >
  33. <el-option
  34. v-for="item in hospitalModuleList"
  35. :key="item.id"
  36. :label="item.name"
  37. :value="item.id">
  38. </el-option>
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item label="条目类型:" prop="ruleType">
  42. <el-select v-model="form.ruleType"
  43. placeholder="请选择条目类型"
  44. >
  45. <el-option
  46. v-for="item in ruleTypeList"
  47. :key="item.val"
  48. :label="item.name"
  49. :value="Number(item.val)">
  50. </el-option>
  51. </el-select>
  52. </el-form-item>
  53. <el-form-item label="备注:" prop="remark">
  54. <el-input v-model="form.remark" maxlength="200" placeholder="请输入备注"></el-input>
  55. </el-form-item>
  56. <el-form-item label="前置条件:" prop="remark" class="procent">
  57. <el-input v-model="form.precond" maxlength="200" placeholder="请输入前置条件"></el-input>
  58. </el-form-item>
  59. <el-form-item label="医院列表:" prop="hospitalList">
  60. <div>
  61. <el-table
  62. ref="multipleTable"
  63. :data="tableData"
  64. tooltip-effect="light"
  65. style="width: 100%"
  66. @selection-change="handleSelectionChange">
  67. <el-table-column
  68. type="selection"
  69. width="120">
  70. </el-table-column>
  71. <el-table-column
  72. label="医院名称"
  73. prop="hospitalName"
  74. width="240">
  75. </el-table-column>
  76. <el-table-column
  77. prop="name"
  78. label="扣分值"
  79. width="120">
  80. <template slot-scope="scope">
  81. <el-input class="scoreInp" v-model.trim="scope.row.value" oninput="if(value.length>5)value=value.slice(0,5)" type="number" placeholder=""></el-input>
  82. </template>
  83. </el-table-column>
  84. <el-table-column
  85. prop="address"
  86. label="提示信息"
  87. width="240"
  88. show-overflow-tooltip>
  89. <template slot-scope="scope">
  90. <el-input class="tipsMsg" v-model.trim="scope.row.tipMsg" maxlength="200" placeholder="请输入提示信息"></el-input>
  91. </template>
  92. </el-table-column>
  93. <el-table-column
  94. prop="address"
  95. label="是否启用"
  96. width="120"
  97. show-overflow-tooltip>
  98. <template slot-scope="scope">
  99. <el-checkbox v-model="scope.row.isUsed" :checked="scope.row.isUsed=='1'" :disabled="getIsUsed(scope.row)" true-label="1" false-label="0"></el-checkbox>
  100. </template>
  101. </el-table-column>
  102. </el-table>
  103. </div>
  104. </el-form-item>
  105. <p class="oper">
  106. <el-button style="margin-right: 30px" size="small" type="primary" :style="{'opacity':canSave?1:0.5}" @click="comfirn('form')">确定</el-button>
  107. <el-button size="small" @click="cancel">取消</el-button>
  108. </p>
  109. </el-form>
  110. </div>
  111. </div>
  112. </div>
  113. </template>
  114. <script type="text/javascript">
  115. import api from '@api/records.js';
  116. export default {
  117. name:'AddRecordItem',
  118. data(){
  119. return{
  120. // data:{},
  121. labelPosition:'left',
  122. canSave:true,
  123. /*zybljlList:[
  124. {name:'aaa',content:'333333'},
  125. {name:'vvv',content:'333sa'}
  126. ],*/
  127. modifier:'',
  128. hospitalList:[],
  129. ruleTypeList:[],
  130. caseLIst:[],
  131. hospitalModuleList:[], //医院数据模块列表
  132. title:'病历条目-新增',
  133. form:{
  134. itemName:'',
  135. casesId:'',
  136. itemCode:'',
  137. ruleType:'',
  138. remark:'',
  139. levelNo:'',
  140. precond:'',
  141. hospitalModuleId:''
  142. },
  143. tableData:[],
  144. selectHospital:[],
  145. multipleSelection: [],
  146. id:null,
  147. isEdit: false,
  148. rules: {
  149. itemName: [
  150. { required: true, message: ' ', trigger: 'change' }
  151. ],
  152. brbaxx: [
  153. { required: true, message: ' ', trigger: 'change' }
  154. ]
  155. },
  156. }
  157. },
  158. created(){
  159. let {isEdit, data,ruleTypeList} = this.$route.params;
  160. const userLoginDTO = JSON.parse(localStorage.getItem('userLoginDTO'))
  161. this.modifier = userLoginDTO && userLoginDTO.linkman
  162. this.ruleTypeList=ruleTypeList;
  163. if(isEdit){
  164. this.title = '病历条目-修改'
  165. this.isEdit = isEdit
  166. this.id = data.id
  167. this.form.itemName = data.name
  168. this.form.ruleType = data.ruleType
  169. this.form.itemCode = data.code
  170. this.form.casesId = data.casesId
  171. this.form.remark = data.remark
  172. // this.form.levelNo = data.levelNo
  173. this.form.hospitalModuleId = data.modeId
  174. this.form.precond = data.precond
  175. this.selectHospital = data.getUpdateInfoDetialDTOS || []
  176. }
  177. this.getRecordInpModule()
  178. this.getRecordHopitalList()
  179. this.gethospitalModuleList()
  180. },
  181. methods:{
  182. handleSelectionChange(val) {
  183. this.multipleSelection = val;
  184. },
  185. toggleSelection(rows) {
  186. setTimeout(()=>{
  187. if (rows) {
  188. rows.forEach(row => {
  189. this.$refs.multipleTable.toggleRowSelection(row);
  190. });
  191. } else {
  192. this.$refs.multipleTable.clearSelection();
  193. }
  194. })
  195. },
  196. getIsUsed(row){
  197. if(this.multipleSelection.findIndex(it => it.hospitalId ==row.hospitalId) > -1){
  198. return false
  199. } else{
  200. return true
  201. }
  202. },
  203. changeModule(val){
  204. this.form.itemCode = this.caseLIst.find(item => item.id === val).prefix
  205. },
  206. getRecordHopitalList(){
  207. return api.getRecordHopitalList({}).then((res)=>{
  208. const result = res.data;
  209. if(result.code==0){
  210. this.hospitalList = result.data
  211. const tableData = []
  212. for(let i = 0; i < this.hospitalList.length; i++){
  213. tableData.push({
  214. hospitalId: this.hospitalList[i].id,
  215. hospitalName: this.hospitalList[i].name,
  216. value: '',
  217. tipMsg:'',
  218. isUsed: '0'
  219. })
  220. }
  221. for(let i = 0; i < this.selectHospital.length; i++){
  222. const selectItem = this.selectHospital[i]
  223. let item = tableData.find(item => item.hospitalName === selectItem.hospitalName)
  224. if(item) {
  225. item.value = selectItem.score
  226. item.tipMsg = selectItem.msg
  227. item.isUsed = selectItem.isUsed
  228. this.multipleSelection.push(item)
  229. }
  230. }
  231. this.tableData = tableData
  232. this.toggleSelection(this.multipleSelection)
  233. }else{
  234. this.$message({
  235. message:result.msg,
  236. type:'warning',
  237. showClose: true
  238. });
  239. }
  240. })
  241. },
  242. gethospitalModuleList(){
  243. return api.gethospitalModuleList({}).then((res)=>{
  244. const result = res.data;
  245. if(result.code==0){
  246. this.hospitalModuleList = result.data
  247. }else{
  248. this.$message({
  249. message:result.msg,
  250. type:'warning',
  251. showClose: true
  252. });
  253. }
  254. })
  255. },
  256. getRecordInpModule(){
  257. return api.getRecordCases({}).then((res)=>{
  258. const result = res.data;
  259. if(result.code==0){
  260. this.caseLIst = result.data
  261. }else{
  262. this.$message({
  263. message:result.msg,
  264. type:'warning',
  265. showClose: true
  266. });
  267. }
  268. })
  269. },
  270. cancel(){
  271. this.$router.push({
  272. name: 'RecordItemList',
  273. params: Object.assign({}, this.$route.params)
  274. });
  275. },
  276. comfirn(form){
  277. if(!this.canSave){
  278. return
  279. }
  280. this.canSave = false
  281. const {itemName,casesId,itemCode,remark,levelNo,precond,hospitalModuleId,ruleType} = this.form
  282. if(!itemName){
  283. this.$message({
  284. message:"请输入条目名称",
  285. type:'warning',
  286. showClose: true
  287. })
  288. this.canSave = true
  289. return
  290. }
  291. if(!itemCode){
  292. this.$message({
  293. message:"请选择所属模块",
  294. type:'warning',
  295. showClose: true
  296. })
  297. this.canSave = true
  298. return
  299. }
  300. let casesEntryHospitals = []
  301. for(let i = 0; i < this.multipleSelection.length; i++){
  302. const item = this.multipleSelection[i]
  303. if(item.value ===''){
  304. this.$message({
  305. message:"请填写所选医院扣分值",
  306. type:'warning',
  307. showClose: true
  308. })
  309. this.canSave = true
  310. returnxiaoyudengy
  311. }
  312. var reg = new RegExp(/^\d+(\.\d)?$/);
  313. if(!reg.test(item.value) || item.value > 100){
  314. this.$message({
  315. message:'扣分值请输入≥0且≤100的数字,最多保留小数点后1位',
  316. type:'warning',
  317. showClose: true
  318. });
  319. this.canSave = true
  320. return
  321. }
  322. if(item.tipMsg ===''){
  323. this.$message({
  324. message:"请填写所选医院提示信息",
  325. type:'warning',
  326. showClose: true
  327. })
  328. this.canSave = true
  329. return
  330. }
  331. casesEntryHospitals.push({
  332. creator: '0',
  333. score: item.value,
  334. remark: '',
  335. modifier:this.modifier,
  336. hospitalId: item.hospitalId,
  337. msg: item.tipMsg,
  338. isUsed: item.isUsed
  339. })
  340. }
  341. let params = {
  342. id:this.id,
  343. name:itemName,
  344. modeId: hospitalModuleId,
  345. ruleType:ruleType,
  346. remark: remark,
  347. code: itemCode,
  348. precond:precond,
  349. casesId: casesId,
  350. casesName: this.caseLIst.find(item => item.id === casesId).name,
  351. modifier:this.modifier,
  352. creator: '0',
  353. casesEntryHospitals:casesEntryHospitals
  354. }
  355. api.addRecordItem(params).then((res)=>{
  356. this.canSave = true
  357. if(res.data.code==0){
  358. this.$message({
  359. message:this.isEdit?"修改成功":"添加成功",
  360. type:'success',
  361. showClose: true
  362. })
  363. // this.$router.push({path: 'LT-GBBXXWH-BBXXWH'});
  364. this.$router.push({name: 'RecordItemList'});
  365. }else{
  366. this.$message({
  367. message:res.data.msg,
  368. type:'warning',
  369. showClose: true
  370. });
  371. }
  372. }).catch(()=>{
  373. this.canSave = true
  374. })
  375. // return
  376. // if(this.basyid){//修改
  377. // const param = Object.assign({},this.form,{basyid:this.basyid,brzyid:this.brzyid});
  378. // api.saveRecord(param).then((res)=>{
  379. // if(res.data.code==0){
  380. // this.$message({
  381. // message:"修改成功",
  382. // type:'success'
  383. // });
  384. // //返回带搜索条件的首页
  385. // this.$router.push({
  386. // name: 'RecordManager',
  387. // params: Object.assign({}, this.$route.params)
  388. // });
  389. // }else{
  390. // this.$message({
  391. // message:res.data.msg,
  392. // type:'warning'
  393. // });
  394. // }
  395. // })
  396. // }else{//添加
  397. // // 复制时把list多余字段过滤掉,如id等
  398. // const detail = this.list;
  399. // let copyDetail=[];
  400. // let item={};
  401. // if(detail && detail.length>0){
  402. // for(let i=0; i<detail.length; i++){
  403. // item.title = detail[i].title;
  404. // item.description = detail[i].description;
  405. // copyDetail.push(item);
  406. // item={};
  407. // }
  408. // }
  409. // const params = Object.assign({},this.form);
  410. // // api.addVersInfo(this.form).then((res)=>{
  411. // api.saveRecord(params).then((res)=>{
  412. // if(res.data.code==0){
  413. // this.$message({
  414. // message:"添加成功",
  415. // type:'success'
  416. // })
  417. // // this.$router.push({path: 'LT-GBBXXWH-BBXXWH'});
  418. // this.$router.push({name: 'RecordManager'});
  419. // }else{
  420. // this.$message({
  421. // message:res.data.msg,
  422. // type:'warning'
  423. // });
  424. // }
  425. // })
  426. // }
  427. },
  428. }
  429. }
  430. </script>
  431. <style lang="less" scoped>
  432. @import "../../less/admin.less";
  433. .addRecordItemWrapper{
  434. .content{
  435. background: #fff;
  436. padding: 20px 20px 50px;
  437. color: #545455;
  438. min-width: 980px;
  439. position: relative;
  440. .short-inp{
  441. width: 200px;
  442. }
  443. .sub-title{
  444. font-weight: bold;
  445. font-size: 16px;
  446. margin-bottom: 20px;
  447. }
  448. .oper{
  449. text-align: right;
  450. }
  451. /deep/.el-input{
  452. width: 200px;
  453. .el-input__inner{
  454. border: 1px solid #333;
  455. color: #000;
  456. height: 30px;
  457. line-height: 30px;
  458. }
  459. }
  460. .procent{
  461. /deep/.el-input{
  462. width: 800px;
  463. }
  464. }
  465. /deep/.el-form-item{
  466. margin: 20px 0 0 0;
  467. }
  468. // /deep/.el-checkbox__inner{
  469. // border: 1px solid #333;
  470. // }
  471. /deep/.el-table{
  472. min-width: 0;
  473. }
  474. /deep/.el-input.tipsMsg{
  475. .el-input__inner{
  476. width:200px;
  477. height: 30px;
  478. display: inline-block;
  479. }
  480. }
  481. /deep/.scoreInp.el-input{
  482. width:80px;
  483. .el-input__inner{
  484. width:80px;
  485. height: 30px;
  486. display: inline-block;
  487. box-sizing: border-box;
  488. }
  489. }
  490. /deep/.el-table .cell, .el-table th div, .el-table--border td:first-child .cell, .el-table--border th:first-child .cell {
  491. padding: 0;
  492. }
  493. /deep/.el-input input::-webkit-outer-spin-button,
  494. /deep/.el-input input::-webkit-inner-spin-button {
  495. -webkit-appearance: none;
  496. }
  497. /deep/.el-input input[type="number"]{
  498. -moz-appearance: textfield;
  499. line-height: 20px;
  500. }
  501. }
  502. }
  503. </style>