AddRecordItem.vue 18 KB

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