AddRecordItem.vue 16 KB

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