AddRecordItem.vue 21 KB

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