Elizabeth's proactive approach involves introducing urinal toilet attachment , an ingenious concept that optimizes space and functionality.

template_table.vue 28KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800
  1. <template>
  2. <div v-loading="saving">
  3. <div class="cell clearfix" v-if="template.id != 0">
  4. <el-input
  5. size="small"
  6. style="width: 400px;"
  7. class="filter-item"
  8. v-model.trim="keywords"
  9. placeholder="病人名称/透析号"
  10. @keyup.enter.native='search'
  11. />
  12. <el-button
  13. size="small"
  14. class="filter-item"
  15. type="primary"
  16. icon="el-icon-search"
  17. @click="search"
  18. >搜索
  19. </el-button
  20. >
  21. </div>
  22. <el-dialog :visible.sync="searchTableVisible" width="80%">
  23. <el-table
  24. :data="schedulePatients"
  25. :header-cell-style="{
  26. backgroundColor: 'rgb(245, 247, 250)',
  27. color: '#606266'
  28. }"
  29. :row-style="{ color: '#303133' }"
  30. style="width: 100%"
  31. border
  32. >
  33. <el-table-column label="姓名" width="120">
  34. <template slot-scope="scope">
  35. {{ scope.row.patient }}
  36. </template>
  37. </el-table-column>
  38. <el-table-column label="星期">
  39. <template slot-scope="scope">
  40. {{ getWeekDay(scope.row.weekday) }}
  41. </template>
  42. </el-table-column>
  43. <el-table-column label="分区">
  44. <template slot-scope="scope">
  45. {{ scope.row.number.zone.name }}
  46. </template>
  47. </el-table-column>
  48. <el-table-column label="班次" width="80">
  49. <template slot-scope="scope">
  50. {{ getSchedulesType(scope.row.time_type) }}
  51. </template>
  52. </el-table-column>
  53. <el-table-column label="机号" width="80">
  54. <template slot-scope="scope">
  55. {{ scope.row.number.number }}
  56. </template>
  57. </el-table-column>
  58. <el-table-column label="透析模式" width="100">
  59. <template slot-scope="scope">
  60. {{ getModeName(scope.row.treat_mode) }}
  61. </template>
  62. </el-table-column>
  63. <el-table-column label="操作" align="center" width="300">
  64. <template slot-scope="scope">
  65. <el-button
  66. v-if="scope.row.status == 1"
  67. size="mini"
  68. type="primary"
  69. @click="cancel_schedule_action_two(scope.row)"
  70. >
  71. 取消排班
  72. </el-button>
  73. </template>
  74. </el-table-column>
  75. </el-table>
  76. </el-dialog>
  77. <el-row v-show="editable">
  78. <el-col :span="24" style="text-align: left; margin-bottom: 10px;">
  79. <div v-show="editable && !is_editing">
  80. <el-button type="primary" size="small" @click="is_editing = true" icon="el-icon-edit-outline">编辑</el-button>
  81. </div>
  82. <div v-show="editable && is_editing">
  83. <el-button size="small" @click="is_editing = false" icon="el-icon-refresh">取消</el-button>
  84. <el-button type="primary" size="small" icon="el-icon-setting" @click="saveAction">保存</el-button>
  85. </div>
  86. </el-col>
  87. </el-row>
  88. <div id="table_data">
  89. <el-table :height="tableContainHeight" :header-cell-style="{ backgroundColor: 'rgb(245, 247, 250)'}" ref="table"
  90. :data="opera_device_numbers" :span-method="spanMethod"
  91. row-class-name="table-row-new-class schedule-table-row" @cell-click="itemClick">
  92. <el-table-column label="分区" width="80" align="center" fixed
  93. style="width: 100px; background-color: red; display: block;">
  94. <template slot-scope="scope">
  95. {{ scope.row.zone.name }}
  96. </template>
  97. </el-table-column>
  98. <el-table-column label="机号" width="80" align="center" fixed>
  99. <template slot-scope="scope">
  100. <div>{{scope.row.number}}</div>
  101. </template>
  102. </el-table-column>
  103. <el-table-column label="周一" width="215" align="center">
  104. <el-table-column prop="1_1" label="上" width="70" align="center">
  105. <template slot-scope="scope">
  106. <template-table-item :info="scope.row['1_1']"></template-table-item>
  107. </template>
  108. </el-table-column>
  109. <el-table-column prop="1_2" label="下" width="70" align="center">
  110. <template slot-scope="scope">
  111. <template-table-item :info="scope.row['1_2']"></template-table-item>
  112. </template>
  113. </el-table-column>
  114. <el-table-column prop="1_3" label="晚" width="70" align="center">
  115. <template slot-scope="scope">
  116. <template-table-item :info="scope.row['1_3']"></template-table-item>
  117. </template>
  118. </el-table-column>
  119. </el-table-column>
  120. <el-table-column label="周二" width="215" align="center">
  121. <el-table-column prop="2_1" label="上" width="70" align="center">
  122. <template slot-scope="scope">
  123. <template-table-item :info="scope.row['2_1']"></template-table-item>
  124. </template>
  125. </el-table-column>
  126. <el-table-column prop="2_2" label="下" width="70" align="center">
  127. <template slot-scope="scope">
  128. <template-table-item :info="scope.row['2_2']"></template-table-item>
  129. </template>
  130. </el-table-column>
  131. <el-table-column prop="2_3" label="晚" width="70" align="center">
  132. <template slot-scope="scope">
  133. <template-table-item :info="scope.row['2_3']"></template-table-item>
  134. </template>
  135. </el-table-column>
  136. </el-table-column>
  137. <el-table-column label="周三" width="215" align="center">
  138. <el-table-column prop="3_1" label="上" width="70" align="center">
  139. <template slot-scope="scope">
  140. <template-table-item :info="scope.row['3_1']"></template-table-item>
  141. </template>
  142. </el-table-column>
  143. <el-table-column prop="3_2" label="下" width="70" align="center">
  144. <template slot-scope="scope">
  145. <template-table-item :info="scope.row['3_2']"></template-table-item>
  146. </template>
  147. </el-table-column>
  148. <el-table-column prop="3_3" label="晚" width="70" align="center">
  149. <template slot-scope="scope">
  150. <template-table-item :info="scope.row['3_3']"></template-table-item>
  151. </template>
  152. </el-table-column>
  153. </el-table-column>
  154. <el-table-column label="周四" width="215" align="center">
  155. <el-table-column prop="4_1" label="上" width="70" align="center">
  156. <template slot-scope="scope">
  157. <template-table-item :info="scope.row['4_1']"></template-table-item>
  158. </template>
  159. </el-table-column>
  160. <el-table-column prop="4_2" label="下" width="70" align="center">
  161. <template slot-scope="scope">
  162. <template-table-item :info="scope.row['4_2']"></template-table-item>
  163. </template>
  164. </el-table-column>
  165. <el-table-column prop="4_3" label="晚" width="70" align="center">
  166. <template slot-scope="scope">
  167. <template-table-item :info="scope.row['4_3']"></template-table-item>
  168. </template>
  169. </el-table-column>
  170. </el-table-column>
  171. <el-table-column label="周五" width="215" align="center">
  172. <el-table-column prop="5_1" label="上" width="70" align="center">
  173. <template slot-scope="scope">
  174. <template-table-item :info="scope.row['5_1']"></template-table-item>
  175. </template>
  176. </el-table-column>
  177. <el-table-column prop="5_2" label="下" width="70" align="center">
  178. <template slot-scope="scope">
  179. <template-table-item :info="scope.row['5_2']"></template-table-item>
  180. </template>
  181. </el-table-column>
  182. <el-table-column prop="5_3" label="晚" width="70" align="center">
  183. <template slot-scope="scope">
  184. <template-table-item :info="scope.row['5_3']"></template-table-item>
  185. </template>
  186. </el-table-column>
  187. </el-table-column>
  188. <el-table-column label="周六" width="215" align="center">
  189. <el-table-column prop="6_1" label="上" width="70" align="center">
  190. <template slot-scope="scope">
  191. <template-table-item :info="scope.row['6_1']"></template-table-item>
  192. </template>
  193. </el-table-column>
  194. <el-table-column prop="6_2" label="下" width="70" align="center">
  195. <template slot-scope="scope">
  196. <template-table-item :info="scope.row['6_2']"></template-table-item>
  197. </template>
  198. </el-table-column>
  199. <el-table-column prop="6_3" label="晚" width="70" align="center">
  200. <template slot-scope="scope">
  201. <template-table-item :info="scope.row['6_3']"></template-table-item>
  202. </template>
  203. </el-table-column>
  204. </el-table-column>
  205. <el-table-column label="周日" min-width="215" align="center">
  206. <el-table-column prop="7_1" label="上" min-width="70" align="center">
  207. <template slot-scope="scope">
  208. <template-table-item :info="scope.row['7_1']"></template-table-item>
  209. </template>
  210. </el-table-column>
  211. <el-table-column prop="7_2" label="下" min-width="70" align="center">
  212. <template slot-scope="scope">
  213. <template-table-item :info="scope.row['7_2']"></template-table-item>
  214. </template>
  215. </el-table-column>
  216. <el-table-column prop="7_3" label="晚" min-width="70" align="center">
  217. <template slot-scope="scope">
  218. <template-table-item :info="scope.row['7_3']"></template-table-item>
  219. </template>
  220. </el-table-column>
  221. </el-table-column>
  222. <el-table-column prop="total" label="总数" width="60" align="center" fixed="right">
  223. <template slot-scope="scope">
  224. {{ scope.row.total }}
  225. </template>
  226. </el-table-column>
  227. </el-table>
  228. </div>
  229. <schedule-selector-dialog ref="selector_dialog" :patients="patients" @did_selected="will_add_schedule_action"
  230. @did_cancel="cancel_schedule_action"></schedule-selector-dialog>
  231. </div>
  232. </template>
  233. <script>
  234. import TemplateTableItem from './template_table_item'
  235. import ScheduleSelectorDialog from './template_schedule_selector_dialog'
  236. import {
  237. cancelScheduleTemplate,
  238. getTemplateScheduleSearchResult,
  239. updateSchedules
  240. } from '@/api/schedule_template/patient'
  241. var rowspanNoControl = -1
  242. export default {
  243. name: 'TemplateTable',
  244. components: {
  245. TemplateTableItem,
  246. ScheduleSelectorDialog
  247. },
  248. data() {
  249. return {
  250. keywords: '',
  251. schedulePatients: [],
  252. searchTableVisible: false,
  253. saving: false,
  254. zone_device_counts: {},
  255. treat_modes: {},
  256. is_editing: false,
  257. opera_device_numbers: [],
  258. origin_device_numbers: [],
  259. tableHeight: document.documentElement.clientHeight
  260. }
  261. },
  262. props: {
  263. editable: {
  264. type: Boolean,
  265. default: true
  266. },
  267. device_numbers: {
  268. type: Array
  269. },
  270. template: {
  271. type: Object
  272. },
  273. patients: {
  274. type: Array
  275. }
  276. },
  277. created() {
  278. this.treat_modes = this.$store.getters.treatment_mode
  279. // window.addEventListener('scroll', this.handleScroll)
  280. },
  281. watch: {
  282. 'device_numbers': function() {
  283. this.opera_device_numbers = this.makeDeviceNumbers(this.device_numbers)
  284. this.origin_device_numbers = this.makeDeviceNumbers(this.device_numbers)
  285. },
  286. 'template.items': function() {
  287. // 先清除所有已有 item
  288. this.$nextTick(() => {
  289. var weekdays = [1, 2, 3, 4, 5, 6, 7] // 周一-周日
  290. var time_types = [1, 2, 3] // 上下晚
  291. for (let d_n_i = 0; d_n_i < this.opera_device_numbers.length; d_n_i++) {
  292. const op_d_n = this.opera_device_numbers[d_n_i]
  293. const or_d_n = this.origin_device_numbers[d_n_i]
  294. op_d_n.total = 0
  295. or_d_n.total = 0
  296. for (let w_i = 0; w_i < weekdays.length; w_i++) {
  297. const weekday = weekdays[w_i]
  298. for (let t_i = 0; t_i < time_types.length; t_i++) {
  299. const time_type = time_types[t_i]
  300. var item_key = weekday + '_' + time_type
  301. var op_item = op_d_n[item_key]
  302. var or_item = or_d_n[item_key]
  303. op_item.pid = 0
  304. op_item.name = ''
  305. op_item.treat_mode_id = 0
  306. op_item.treat_mode = ''
  307. or_item.pid = 0
  308. or_item.name = ''
  309. or_item.treat_mode_id = 0
  310. or_item.treat_mode = ''
  311. }
  312. }
  313. }
  314. for (let index = 0; index < this.template.items.length; index++) {
  315. const template_item = this.template.items[index]
  316. if (template_item.patient == null) {
  317. continue
  318. }
  319. for (let d_i = 0; d_i < this.opera_device_numbers.length; d_i++) {
  320. const device_number = this.opera_device_numbers[d_i]
  321. if (device_number.id == template_item.device_number_id) {
  322. var weekday = template_item.weekday
  323. var time_type = template_item.time_type
  324. var cell_item = device_number[weekday + '_' + time_type]
  325. cell_item.pid = template_item.patient_id
  326. cell_item.name = template_item.patient.name
  327. cell_item.treat_mode_id = template_item.treat_mode
  328. cell_item.treat_mode = template_item.treat_mode ? this.treat_modes[template_item.treat_mode].name : ''
  329. device_number.total += 1
  330. // origin_device_numbers 初始化时数据应该是和 opera_device_numbers 一样的,这里就不再用一个 for 遍历 origin_device_numbers 重复 opera_device_numbers 的操作了
  331. const o_device_number = this.origin_device_numbers[d_i]
  332. var o_cell_item = o_device_number[weekday + '_' + time_type]
  333. o_cell_item.pid = template_item.patient_id
  334. o_cell_item.name = template_item.patient.name
  335. o_cell_item.treat_mode_id = template_item.treat_mode
  336. o_cell_item.treat_mode = template_item.treat_mode ? this.treat_modes[template_item.treat_mode].name : ''
  337. o_device_number.total += 1
  338. break
  339. }
  340. }
  341. }
  342. })
  343. // this.$refs.table.doLayout()
  344. },
  345. tableHeight(val) {
  346. if (!this.timer) {
  347. this.tableHeight = val
  348. this.timer = true
  349. const that = this
  350. setTimeout(function() {
  351. that.timer = false
  352. }, 400)
  353. }
  354. }
  355. },
  356. mounted() {
  357. const that = this
  358. window.onresize = () => {
  359. return (() => {
  360. window.fullHeight = document.documentElement.clientHeight
  361. if (window.fullHeight < 200) {
  362. that.tableHeight = 200
  363. } else {
  364. that.tableHeight = window.fullHeight - 200
  365. }
  366. })()
  367. }
  368. },
  369. mounted: function() {
  370. this.tableContainHeight = window.innerHeight - this.$refs.table.$el.offsetTop - 310
  371. },
  372. methods: {
  373. getWeekDay: function(week) {
  374. let week_name = ''
  375. switch (week) {
  376. case 1:
  377. week_name = '星期一'
  378. break
  379. case 2:
  380. week_name = '星期二'
  381. break
  382. case 3:
  383. week_name = '星期三'
  384. break
  385. case 4:
  386. week_name = '星期四'
  387. break
  388. case 5:
  389. week_name = '星期五'
  390. break
  391. case 6:
  392. week_name = '星期六'
  393. break
  394. case 7:
  395. week_name = '星期日'
  396. break
  397. }
  398. return week_name
  399. },
  400. getSchedulesType: function(type) {
  401. let type_name = ''
  402. switch (type) {
  403. case 1:
  404. type_name = '上午'
  405. break
  406. case 2:
  407. type_name = '下午'
  408. break
  409. case 3:
  410. type_name = '晚上'
  411. break
  412. }
  413. return type_name
  414. },
  415. getModeName: function(mode) {
  416. if (this.$store.getters.treatment_mode[mode] != undefined) {
  417. return this.$store.getters.treatment_mode[mode].name
  418. }
  419. return ''
  420. },
  421. // handleScroll: function() {
  422. // var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
  423. // console.log(scrollTop)
  424. // if (scrollTop >= 150) {
  425. // this.fixed_style = "background-color: red; position: fixed; top: 0px; left: 190px; right: 150px; z-index: 99;"
  426. // } else {
  427. // this.fixed_style = ""
  428. // }
  429. // },
  430. makeDeviceNumbers: function(device_numbers) {
  431. var maked_device_numbers = []
  432. var weekdays = [1, 2, 3, 4, 5, 6, 7] // 周一-周日
  433. var time_types = [1, 2, 3] // 上下晚
  434. for (let index = 0; index < device_numbers.length; index++) {
  435. const device_number = device_numbers[index]
  436. var zone = {
  437. id: device_number.zone.id,
  438. name: device_number.zone.name,
  439. type: device_number.zone.type
  440. }
  441. var device = {
  442. id: device_number.id,
  443. number: device_number.number,
  444. group_id: device_number.group_id,
  445. zone_id: device_number.zone_id,
  446. zone: zone
  447. }
  448. // 以 weekday_timetype 为 key,{pid: 0, name: "", treat_mode_id: 0, treat_mode: ""} 为 value,加入到 maked_device_numbers 中
  449. for (let w_i = 0; w_i < weekdays.length; w_i++) {
  450. const weekday = weekdays[w_i]
  451. for (let t_i = 0; t_i < time_types.length; t_i++) {
  452. const time_type = time_types[t_i]
  453. var defaultValue = {}
  454. this.$set(defaultValue, 'pid', 0)
  455. this.$set(defaultValue, 'name', '')
  456. this.$set(defaultValue, 'treat_mode_id', 0)
  457. this.$set(defaultValue, 'treat_mode', '')
  458. this.$set(device, weekday + '_' + time_type, defaultValue)
  459. }
  460. }
  461. this.$set(device, 'total', 0) // 每个床位号每周的排班总数
  462. maked_device_numbers.push(device)
  463. }
  464. console.log(maked_device_numbers)
  465. return maked_device_numbers
  466. },
  467. spanMethod({ row, column, rowIndex, columnIndex }) {
  468. if (columnIndex == 0) {
  469. if (rowIndex == 0) {
  470. rowspanNoControl = -1
  471. }
  472. var spanRowCount = this.zone_device_counts[row.zone_id]
  473. var isFirstRowInGroup = false
  474. if (spanRowCount == undefined) {
  475. var count = 0
  476. for (let index = 0; index < this.opera_device_numbers.length; index++) {
  477. const number = this.opera_device_numbers[index]
  478. if (number.zone_id == row.zone_id) {
  479. count++
  480. }
  481. }
  482. this.zone_device_counts[row.zone_id] = count
  483. spanRowCount = count + 0
  484. isFirstRowInGroup = true
  485. } else {
  486. isFirstRowInGroup = rowIndex == rowspanNoControl + 1
  487. if (rowspanNoControl + spanRowCount == rowIndex) {
  488. rowspanNoControl = rowIndex
  489. }
  490. }
  491. if (isFirstRowInGroup) {
  492. return {
  493. rowspan: spanRowCount,
  494. colspan: 1
  495. }
  496. } else {
  497. return {
  498. rowspan: 0,
  499. colspan: 0
  500. }
  501. }
  502. }
  503. },
  504. search: function() {
  505. const params = {
  506. keywords: this.keywords,
  507. template_id: this.template.id
  508. }
  509. getTemplateScheduleSearchResult(params).then(response => {
  510. if (response.data.state == 1) {
  511. this.schedulePatients = response.data.data.schdules
  512. console.log(this.schedulePatients)
  513. this.searchTableVisible = true
  514. }
  515. })
  516. },
  517. itemClick: function(row, column, cell, event) {
  518. if (this.editable == false || this.is_editing == false) {
  519. return
  520. }
  521. if (column.property == undefined || /^[1-7]_[1-3]$/.test(column.property) == false) {
  522. return
  523. }
  524. if (row[column.property] == undefined) {
  525. return
  526. }
  527. var item = row[column.property]
  528. var weekday_timetype = column.property.split('_')
  529. var weekday = weekday_timetype[0]
  530. var time_type = weekday_timetype[1]
  531. var device_number_id = row.id
  532. if (item.pid == 0) {
  533. this.$refs.selector_dialog.show(weekday, time_type, device_number_id)
  534. } else {
  535. this.$refs.selector_dialog.showWith(item.pid, item.treat_mode_id, weekday, time_type, device_number_id)
  536. }
  537. },
  538. will_add_schedule_action: function(patient_id, treat_mode, weekday, time_type, device_number_id) {
  539. var patient = null
  540. for (let index = 0; index < this.patients.length; index++) {
  541. const p = this.patients[index]
  542. if (p.id == patient_id) {
  543. patient = p
  544. break
  545. }
  546. }
  547. if (patient == null) {
  548. this.$message.error('患者不存在')
  549. return
  550. }
  551. for (let index = 0; index < this.opera_device_numbers.length; index++) {
  552. const device_number = this.opera_device_numbers[index]
  553. for (let t_y = 1; t_y <= 3; t_y++) {
  554. if (t_y == time_type && device_number_id == device_number.id) {
  555. continue
  556. }
  557. if (device_number[weekday + '_' + t_y].pid == patient_id) {
  558. this.$message.error('同位患者一天内不可有两次排班')
  559. return
  560. }
  561. }
  562. }
  563. for (let index = 0; index < this.opera_device_numbers.length; index++) {
  564. const device_number = this.opera_device_numbers[index]
  565. if (device_number.id == device_number_id) {
  566. var isDiseaseSame = false
  567. var havePatientDisease = patient.contagions.length > 0
  568. if (patient.contagions.length > 0 || device_number.zone.type != 1) {
  569. if (device_number.zone.type != 1) {
  570. for (let c_i = 0; c_i < patient.contagions.length; c_i++) {
  571. const contagion = patient.contagions[c_i]
  572. if (contagion.disease_id == device_number.zone.type) {
  573. isDiseaseSame = true
  574. }
  575. }
  576. }
  577. } else {
  578. isDiseaseSame = true
  579. }
  580. if (isDiseaseSame == false) {
  581. // 此患者没有传染病,与此透析机不匹配,确定在此排班吗?
  582. // 此患者有传染病,与此透析机不匹配,确定在此排班吗?
  583. var msg = havePatientDisease ? '此患者有传染病,与此透析机不匹配,确定在此排班吗?' : '此患者没有传染病,与此透析机不匹配,确定在此排班吗?'
  584. this.$confirm(msg, '提示', { confirmButtonText: '确 定', cancelButtonText: '取 消', type: 'warning' })
  585. .then(() => {
  586. this.add_schedule(patient, device_number, treat_mode, weekday, time_type)
  587. })
  588. } else {
  589. this.add_schedule(patient, device_number, treat_mode, weekday, time_type)
  590. }
  591. return
  592. }
  593. }
  594. this.$message.error('设备不存在')
  595. },
  596. cancel_schedule_action: function(weekday, time_type, device_number_id) {
  597. for (let index = 0; index < this.opera_device_numbers.length; index++) {
  598. const device_number = this.opera_device_numbers[index]
  599. if (device_number.id == device_number_id) {
  600. var item = device_number[weekday + '_' + time_type]
  601. item.pid = 0
  602. item.name = ''
  603. item.treat_mode_id = 0
  604. item.treat_mode = ''
  605. this.$refs.selector_dialog.hide()
  606. }
  607. }
  608. },
  609. cancel_schedule_action_two: function(row) {
  610. let params = {
  611. id: row.id
  612. }
  613. cancelScheduleTemplate(params).then(response => {
  614. if (response.data.state == 1) {
  615. for (let index = 0; index < this.schedulePatients.length; index++) {
  616. const sch = this.schedulePatients[index]
  617. if (sch.id == row.id) {
  618. this.schedulePatients.splice(index,1)
  619. }
  620. }
  621. for (let index = 0; index < this.opera_device_numbers.length; index++) {
  622. const device_number = this.opera_device_numbers[index]
  623. if (device_number.id == row.device_number_id) {
  624. var item = device_number[row.weekday + '_' + row.time_type]
  625. item.pid = 0
  626. item.name = ''
  627. item.treat_mode_id = 0
  628. item.treat_mode = ''
  629. }
  630. }
  631. // this.$emit('cancel_sch')
  632. }
  633. })
  634. },
  635. add_schedule: function(patient, device_number, treat_mode, weekday, time_type) {
  636. var item = device_number[weekday + '_' + time_type]
  637. var isNew = item.pid == 0
  638. item.pid = patient.id
  639. item.name = patient.name
  640. item.treat_mode_id = treat_mode
  641. item.treat_mode = this.treat_modes[treat_mode].name
  642. if (isNew) {
  643. device_number.total += 1
  644. }
  645. this.$refs.selector_dialog.hide()
  646. },
  647. saveAction: function() {
  648. this.saving = true
  649. var add_items = []
  650. var del_items = []
  651. var change_items = []
  652. var weekdays = [1, 2, 3, 4, 5, 6, 7] // 周一-周日
  653. var time_types = [1, 2, 3] // 上下晚
  654. for (let d_n_i = 0; d_n_i < this.opera_device_numbers.length; d_n_i++) {
  655. const op_d_n = this.opera_device_numbers[d_n_i]
  656. const or_d_n = this.origin_device_numbers[d_n_i]
  657. for (let w_i = 0; w_i < weekdays.length; w_i++) {
  658. const weekday = weekdays[w_i]
  659. for (let t_i = 0; t_i < time_types.length; t_i++) {
  660. const time_type = time_types[t_i]
  661. var item_key = weekday + '_' + time_type
  662. var op_item = op_d_n[item_key]
  663. var or_item = or_d_n[item_key]
  664. if (op_item.pid == 0 && or_item.pid == 0) {
  665. continue
  666. }
  667. if (op_item.pid == or_item.pid && op_item.treat_mode_id == or_item.treat_mode_id) {
  668. continue
  669. }
  670. if (op_item.pid == 0) {
  671. del_items.push({
  672. device_number_id: op_d_n.id,
  673. weekday: weekday,
  674. time_type: time_type
  675. })
  676. continue
  677. } else if (or_item.pid == 0) {
  678. add_items.push({
  679. device_number_id: op_d_n.id,
  680. patient_id: op_item.pid,
  681. mode: op_item.treat_mode_id,
  682. weekday: weekday,
  683. time_type: time_type
  684. })
  685. continue
  686. } else {
  687. if (op_item.pid != or_item.pid || op_item.treat_mode_id != or_item.treat_mode_id) {
  688. change_items.push({
  689. device_number_id: op_d_n.id,
  690. patient_id: op_item.pid,
  691. mode: op_item.treat_mode_id,
  692. weekday: weekday,
  693. time_type: time_type
  694. })
  695. }
  696. }
  697. }
  698. }
  699. }
  700. updateSchedules(this.template.id, JSON.stringify(add_items), JSON.stringify(del_items), JSON.stringify(change_items)).then(rs => {
  701. var resp = rs.data
  702. if (resp.state == 1) {
  703. this.$message({
  704. message: '已保存',
  705. type: 'success'
  706. })
  707. this.template.items = resp.data.items
  708. } else {
  709. this.$message.error(resp.msg)
  710. }
  711. this.saving = false
  712. this.is_editing = false
  713. })
  714. }
  715. }
  716. }
  717. </script>
  718. <style scoped>
  719. .schedule-table-row {
  720. background: #fff !important;
  721. }
  722. .schedule-table-row:hover {
  723. background: #fff !important;
  724. }
  725. .schedule-table-row td:hover {
  726. background: rgb(88, 162, 236) !important;
  727. }
  728. .schedule-table-row td .cell {
  729. font-size: 12px;
  730. white-space: nowrap !important;
  731. }
  732. #table_data {
  733. min-height: calc(100vh - 350px);
  734. }
  735. #table_data ::-webkit-scrollbar {
  736. height: 15px;
  737. }
  738. </style>