htreat.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658
  1. <template>
  2. <div class="htreat">
  3. <el-container>
  4. <el-header>
  5. <div class="rect" style="padding-bottom: 10px">
  6. <el-form
  7. :inline="true"
  8. :model="searchForm"
  9. size="mini">
  10. <el-form-item style="width: 200px">
  11. <el-input placeholder="耳标" style="width: 200px" v-model="searchForm.earTag"></el-input>
  12. </el-form-item>
  13. <el-form-item style="width: 140px">
  14. <el-select v-model="searchForm.sympotomName" placeholder="症状">
  15. <el-option v-for="item in symptomList" :key="item.id" :label="item.sympotomName" :value="item.sympotomName"></el-option>
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item style="width: 140px">
  19. <el-select v-model="searchForm.causeName" placeholder="病因">
  20. <el-option v-for="item in causeList" :key="item.id" :label="item.causeName" :value="item.causeName"></el-option>
  21. </el-select>
  22. </el-form-item>
  23. <el-form-item style="width: 140px">
  24. <el-select v-model="searchForm.diseaseName" placeholder="疾病名称">
  25. <el-option v-for="item in illnesList" :key="item.id" :label="item.idseaseName" :value="item.idseaseName"></el-option>
  26. </el-select>
  27. </el-form-item>
  28. <el-form-item style="width: 140px">
  29. <el-select v-model="searchForm.doctor" placeholder="医生">
  30. <el-option v-for="item in manList" :key="item.id" :label="item.name" :value="item.name"></el-option>
  31. </el-select>
  32. </el-form-item>
  33. <el-form-item style="width: 140px">
  34. <el-select v-model="searchForm.treatmentPlan" placeholder="治疗方案">
  35. <el-option v-for="item in tmentplanList" :key="item.id" :label="item.medicantName" :value="item.medicantName"></el-option>
  36. </el-select>
  37. </el-form-item>
  38. <el-form-item>
  39. <el-button icon="el-icon-search" @click="search">查 询</el-button>
  40. </el-form-item>
  41. <el-form-item>
  42. <el-button icon="el-icon-circle-close" @click="clearAll">清 空</el-button>
  43. </el-form-item>
  44. </el-form>
  45. </div>
  46. </el-header>
  47. <el-main>
  48. <div class="rect" style="margin-top: 20px">
  49. <el-form size="mini" :inline="true">
  50. <el-form-item>
  51. <!-- <el-button-->
  52. <!-- icon="el-icon-plus"-->
  53. <!-- @click="visible = true">-->
  54. <!-- 新 增-->
  55. <!-- </el-button>-->
  56. <el-button
  57. icon="el-icon-delete"
  58. @click="delAll"
  59. type="danger"
  60. :disabled="selectList.length <= 0">
  61. 删 除
  62. </el-button>
  63. <el-button
  64. icon="el-icon-warning"
  65. @click="dieOrRecoveryHandle(2)"
  66. type="danger"
  67. :disabled="selectList.length <= 0">
  68. 死 亡
  69. </el-button>
  70. <el-button
  71. icon="el-icon-view"
  72. @click="dieOrRecoveryHandle(1)"
  73. type="danger"
  74. :disabled="selectList.length <= 0">
  75. 康 复
  76. </el-button>
  77. </el-form-item>
  78. </el-form>
  79. <el-table
  80. id="select"
  81. height="530"
  82. :data="tableData"
  83. @selection-change="selectionChangeHandle"
  84. v-loading="dataListLoading"
  85. style="width: 100%"
  86. ref="table"
  87. stripe
  88. border
  89. :header-cell-style="{background:'rgb(245,245,245)',color:'#000',height: '45px',fontSize: '13px',fontWeight: 'normal',borderBottom: '1px solid #ccc'}"
  90. :cell-style="{color: '#888',fontSize: '13px'}"
  91. size="mini">
  92. <el-table-column
  93. type="selection"
  94. header-align="center"
  95. align="center"
  96. width="50">
  97. </el-table-column>
  98. <el-table-column
  99. prop="pigId"
  100. header-align="center"
  101. align="center"
  102. label="猪只耳标">
  103. </el-table-column>
  104. <el-table-column
  105. prop="diseaseName"
  106. header-align="center"
  107. align="center"
  108. label="疾病名称">
  109. </el-table-column>
  110. <el-table-column
  111. prop="diseaseTime"
  112. header-align="center"
  113. align="center"
  114. label="发病时间">
  115. </el-table-column>
  116. <el-table-column
  117. prop="symptomName"
  118. header-align="center"
  119. align="center"
  120. label="症 状">
  121. </el-table-column>
  122. <el-table-column
  123. prop="causeName"
  124. header-align="center"
  125. align="center"
  126. label="病 因">
  127. </el-table-column>
  128. <el-table-column
  129. prop="diagnosisTime"
  130. header-align="center"
  131. align="center"
  132. label="诊断时间">
  133. </el-table-column>
  134. <el-table-column
  135. prop="doctor"
  136. header-align="center"
  137. align="center"
  138. label="兽医姓名">
  139. </el-table-column>
  140. <el-table-column
  141. prop="treatmentPlan"
  142. header-align="center"
  143. align="center"
  144. label="治疗方案">
  145. </el-table-column>
  146. <el-table-column
  147. header-align="center"
  148. align="center"
  149. label="治疗结果">
  150. <template slot-scope="scope">
  151. <span v-if="scope.row.result === 1">康 复</span>
  152. <span v-else-if="scope.row.result === 2">死亡(无害化处理)</span>
  153. <span v-else-if="scope.row.result === 3">治疗中</span>
  154. </template>
  155. </el-table-column>
  156. <!-- <el-table-column-->
  157. <!-- header-align="center"-->
  158. <!-- align="center"-->
  159. <!-- label="隔离状态">-->
  160. <!-- <template slot-scope="scope">-->
  161. <!-- <span v-if="scope.row.isolationStatus === 1">未隔离</span>-->
  162. <!-- <span v-else-if="scope.row.isolationStatus === 2">隔 离</span>-->
  163. <!-- </template>-->
  164. <!-- </el-table-column>-->
  165. <!-- <el-table-column-->
  166. <!-- prop="offTime"-->
  167. <!-- header-align="center"-->
  168. <!-- align="center"-->
  169. <!-- label="出栏时间">-->
  170. <!-- </el-table-column>-->
  171. <el-table-column
  172. header-align="center"
  173. align="center"
  174. label="操作">
  175. <template slot-scope="scope">
  176. <el-button
  177. v-if="isAuth('sys:user:update')"
  178. type="text"
  179. size="medium"
  180. @click="addOrUpdateHandle(scope.row)"
  181. style="color: rgb(24,144,255)">
  182. 修改
  183. </el-button>
  184. <el-button
  185. v-if="isAuth('sys:user:delete')"
  186. type="text"
  187. size="medium"
  188. @click="deleteHandle(scope.row.id)"
  189. style="color: rgb(24,144,255)">
  190. 删除
  191. </el-button>
  192. </template>
  193. </el-table-column>
  194. </el-table>
  195. <el-pagination
  196. @size-change="sizeChange"
  197. @current-change="pageChange"
  198. :current-page="page"
  199. :page-sizes="[10, 20, 50, 100]"
  200. :page-size="limit"
  201. :total="total"
  202. layout="total, sizes, prev, pager, next, jumper">
  203. </el-pagination>
  204. </div>
  205. <!-- 弹框 -->
  206. <el-dialog
  207. :title="!dataForm.id ? '新增' : '修改'"
  208. :close-on-click-modal="false"
  209. :visible.sync="visible"
  210. width="600px">
  211. <el-form
  212. :model="dataForm"
  213. :rules="dataRule"
  214. ref="dataForm"
  215. @keyup.enter.native="dataFormSubmit()"
  216. label-width="80px"
  217. size="mini"
  218. style="margin-left: 20px;width: 500px">
  219. <el-form-item label="猪只耳标" prop="pigId">
  220. <el-input
  221. type="text"
  222. placeholder="请输入耳标号"
  223. v-model="dataForm.pigId"
  224. :disabled="dataForm.id? true: false">
  225. </el-input>
  226. </el-form-item>
  227. <el-form-item label="疾病名称" prop="diseaseName" >
  228. <el-select v-model="dataForm.diseaseName" disabled>
  229. <el-option v-for="item in illnesList" :key="item.id" :value="item.idseaseName" :label="item.idseaseName"></el-option>
  230. </el-select>
  231. </el-form-item>
  232. <el-form-item label="发病时间" prop="diseaseName">
  233. <el-date-picker
  234. disabled
  235. v-model="dataForm.diseaseTime"
  236. type="datetime"
  237. placeholder="选择日期时间"
  238. value-format="yyyy-MM-dd HH:mm:ss"
  239. >
  240. </el-date-picker>
  241. </el-form-item>
  242. <el-form-item label="症 状">
  243. <el-select v-model="dataForm.sympotomName" disabled>
  244. <el-option v-for="item in symptomList" :key="item.id" :label="item.sympotomName" :value="item.sympotomName"></el-option>
  245. </el-select>
  246. </el-form-item>
  247. <el-form-item label="病 因" prop="causeName">
  248. <el-select v-model="dataForm.causeName" disabled>
  249. <el-option v-for="item in causeList" :key="item.id" :value="item.causeName" :label="item.causeName"></el-option>
  250. </el-select>
  251. </el-form-item>
  252. <el-form-item label="兽医姓名" prop="doctorId">
  253. <el-select
  254. @change="onChangeMan($event)"
  255. v-model="dataForm.doctorId" disabled>
  256. <el-option
  257. v-for="item in manList"
  258. :key="item.id"
  259. :label="item.name"
  260. :value="item.id">
  261. </el-option>
  262. </el-select>
  263. </el-form-item>
  264. <el-form-item label="诊断时间">
  265. <el-date-picker
  266. disabled
  267. v-model="dataForm.diagnosisTime"
  268. type="date"
  269. placeholder="选择日期时间"
  270. value-format="yyyy-MM-dd"
  271. >
  272. </el-date-picker>
  273. </el-form-item>
  274. <el-form-item label="治疗方案" >
  275. <el-select v-model="dataForm.treatmentPlan" disabled>
  276. <el-option v-for="item in tmentplanList" :key="item.id" :label="item.medicantName" :value="item.medicantName"></el-option>
  277. </el-select>
  278. </el-form-item>
  279. <el-form-item label="治疗结果">
  280. <el-select v-model="dataForm.result">
  281. <el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id"></el-option>
  282. </el-select>
  283. </el-form-item>
  284. <!-- <el-form-item label="隔离状态">-->
  285. <!-- <el-select v-model="dataForm.isolationStatus">-->
  286. <!-- <el-option v-for="item in options1" :key="item.id" :label="item.name" :value="item.id"></el-option>-->
  287. <!-- </el-select>-->
  288. <!-- </el-form-item>-->
  289. <!-- <el-form-item label="出栏时间">-->
  290. <!-- <el-date-picker-->
  291. <!-- v-model="dataForm.offTime"-->
  292. <!-- type="date"-->
  293. <!-- placeholder="选择日期时间"-->
  294. <!-- value-format="yyyy-MM-dd"-->
  295. <!-- >-->
  296. <!-- </el-date-picker>-->
  297. <!-- </el-form-item>-->
  298. </el-form>
  299. <span slot="footer" class="dialog-footer">
  300. <el-button size="mini" @click="onCancel">关闭</el-button>
  301. <el-button size="mini" type="primary" @click="dataFormSubmit()">确定</el-button>
  302. </span>
  303. </el-dialog>
  304. </el-main>
  305. </el-container>
  306. </div>
  307. </template>
  308. <script>
  309. import TableFooter from '../../../components/TableFooter'
  310. import {mapActions, mapState} from 'vuex'
  311. export default {
  312. name: 'htreat',
  313. data () {
  314. return {
  315. searchForm: {
  316. earTag: '',
  317. causeName: '',
  318. diseaseName: '',
  319. doctor: '',
  320. treatmentPlan: ''
  321. },
  322. dataListLoading: false,
  323. page: 1,
  324. limit: 20,
  325. tableData: [],
  326. total: 0,
  327. visible: false,
  328. selectList: [],
  329. dataForm: {
  330. id: '',
  331. pigId: '',
  332. isolationStatus: '',
  333. doctorId: '',
  334. doctor: '',
  335. diseaseName: '',
  336. diseaseTime: '',
  337. diagnosisTime: '',
  338. treatmentPlan: '',
  339. causeName: '',
  340. sympotomName: '',
  341. result: 1,
  342. offTime: ''
  343. },
  344. options: [
  345. {
  346. id: 1,
  347. name: '康复'
  348. },
  349. {
  350. id: 2,
  351. name: '死亡(无害化处理)'
  352. },
  353. {
  354. id: 3,
  355. name: '治疗中'
  356. }
  357. ],
  358. options1: [
  359. {
  360. id: 1,
  361. name: '未隔离'
  362. },
  363. {
  364. id: 2,
  365. name: '隔离'
  366. }
  367. ],
  368. dataRule: {}
  369. }
  370. },
  371. components: {
  372. TableFooter
  373. },
  374. computed: {
  375. ...mapState(['manList', 'causeList', 'illnesList', 'symptomList', 'tmentplanList'])
  376. },
  377. methods: {
  378. ...mapActions(['getManList', 'getTmentplan', 'getSymptom', 'getCause', 'getIllnes']),
  379. search () {
  380. this.init()
  381. },
  382. clearAll () {
  383. this.searchForm.earTag = ''
  384. this.searchForm.causeName = ''
  385. this.searchForm.diseaseName = ''
  386. this.searchForm.doctor = ''
  387. this.searchForm.treatmentPlan = ''
  388. this.searchForm.sympotomName = ''
  389. },
  390. init () {
  391. let params = {
  392. page: this.page,
  393. limit: this.limit,
  394. eartag: this.searchForm.earTag,
  395. diseaseName: this.searchForm.diseaseName,
  396. causeName: this.searchForm.causeName,
  397. doctor: this.searchForm.doctor,
  398. treatmentPlan: this.searchForm.treatmentPlan,
  399. symptomName: this.searchForm.sympotomName
  400. }
  401. this.dataListLoading = true
  402. this.$http({
  403. url: this.$http.adornUrl('/management/healthmedicalrecord/list'),
  404. method: 'get',
  405. params: this.$http.adornParams(params)
  406. })
  407. .then(res => {
  408. if (res.data.code === 0) {
  409. this.tableData = res.data.page.list
  410. this.total = res.data.page.totalCount
  411. }
  412. }).finally(() => {
  413. this.dataListLoading = false
  414. })
  415. },
  416. // 修改size
  417. sizeChange (val) {
  418. this.limit = val
  419. this.init()
  420. },
  421. // 修改页数
  422. pageChange (val) {
  423. this.page = val
  424. this.init()
  425. },
  426. // 批量死亡 or 康复
  427. dieOrRecoveryHandle (result) {
  428. let ids = this.selectList.map(item => item.id)
  429. let eartags = this.selectList.map(item => item.pigId)
  430. if (this.selectList.length > 0) {
  431. let that = this
  432. this.$confirm(`确定批量修改耳标号${eartags.join(',')}的猪只的治疗结果为${result === 1? '康复': '死亡'}?`, '提示', {
  433. confirmButtonText: '确定',
  434. cancelButtonText: '取消',
  435. type: 'warning'
  436. }).then(() => {
  437. that.$http({
  438. url: that.$http.adornUrl('/management/healthmedicalrecord/updateCureResult'),
  439. method: 'post',
  440. data: that.$http.adornData({ ids, result }, false)
  441. }).then(res => {
  442. if (res.data.code === 0) {
  443. this.$message.success('修改成功!')
  444. this.init()
  445. this.selectList = []
  446. } else {
  447. this.$message.error(res.data.msg)
  448. }
  449. })
  450. }).catch(() => {
  451. this.$message({
  452. type: 'info',
  453. message: '已取消修改'
  454. })
  455. })
  456. } else {
  457. this.$message.error('请选择要修改的数据!')
  458. }
  459. },
  460. // 批量删除
  461. delAll () {
  462. let ids = this.selectList.map(item => item.id)
  463. let eartags = this.selectList.map(item => item.pigId)
  464. if (this.selectList.length > 0) {
  465. let that = this
  466. this.$confirm(`确定批量删除耳标号${eartags.join(',')}的猪只的治疗结果?`, '提示', {
  467. confirmButtonText: '确定',
  468. cancelButtonText: '取消',
  469. type: 'warning'
  470. }).then(() => {
  471. that.$http({
  472. url: that.$http.adornUrl('/management/healthmedicalrecord/delete'),
  473. method: 'post',
  474. data: that.$http.adornData(ids, false)
  475. }).then(res => {
  476. if (res.data.code === 0) {
  477. this.$message.success('删除成功!')
  478. this.init()
  479. this.selectList = []
  480. } else {
  481. this.$message.error(res.data.msg)
  482. }
  483. })
  484. }).catch(() => {
  485. this.$message({
  486. type: 'info',
  487. message: '已取消删除'
  488. })
  489. })
  490. } else {
  491. this.$message.error('请选择要删除的数据!')
  492. }
  493. },
  494. selectionChangeHandle (val) {
  495. this.selectList = val
  496. // val.forEach(item => {
  497. // this.selectList.push(item.id)
  498. // })
  499. },
  500. addOrUpdateHandle (row) {
  501. this.visible = true
  502. this.dataForm = {
  503. id: row.id,
  504. pigId: row.pigId,
  505. isolationStatus: row.isolationStatus,
  506. doctorId: row.doctorId,
  507. doctor: row.doctor,
  508. diseaseName: row.diseaseName,
  509. diseaseTime: row.diseaseTime,
  510. diagnosisTime: row.diagnosisTime,
  511. treatmentPlan: row.treatmentPlan,
  512. causeName: row.causeName,
  513. sympotomName: row.symptomName,
  514. result: row.result,
  515. offTime: row.offTime
  516. }
  517. },
  518. deleteHandle (id) {
  519. let ids = [id]
  520. let eartag = this.tableData.filter(item => item.id === id)[0].pigId
  521. let that = this
  522. this.$confirm(`确定删除耳标号${eartag}的猪只的疾病诊断?`, '提示', {
  523. confirmButtonText: '确定',
  524. cancelButtonText: '取消',
  525. type: 'warning'
  526. }).then(() => {
  527. that.$http({
  528. url: that.$http.adornUrl('/management/healthmedicalrecord/delete'),
  529. method: 'post',
  530. data: that.$http.adornData(ids, false)
  531. })
  532. .then(res => {
  533. if (res.data.code === 0) {
  534. this.$message.success('删除成功!')
  535. this.init()
  536. } else {
  537. this.$message.error(res.data.msg)
  538. }
  539. })
  540. }).catch(() => {
  541. this.$message({
  542. type: 'info',
  543. message: '已取消删除'
  544. })
  545. })
  546. },
  547. onChangeMan (id) {
  548. let man = {}
  549. man = this.manList.find(item => {
  550. return item.id === id
  551. })
  552. this.dataForm.doctor = man.name
  553. },
  554. // 取消
  555. onCancel () {
  556. this.reset()
  557. this.visible = false
  558. },
  559. dataFormSubmit () {
  560. this.$refs['dataForm'].validate((valid) => {
  561. if (valid) {
  562. let params = {
  563. id: this.dataForm.id == '' ? undefined : this.dataForm.id,
  564. pigId: this.dataForm.pigId,
  565. isolationStatus: this.dataForm.isolationStatus,
  566. doctorId: this.dataForm.doctorId,
  567. doctor: this.dataForm.doctor,
  568. diseaseName: this.dataForm.diseaseName,
  569. diseaseTime: this.dataForm.diseaseTime,
  570. diagnosisTime: this.dataForm.diagnosisTime,
  571. treatmentPlan: this.dataForm.treatmentPlan,
  572. causeName: this.dataForm.causeName,
  573. result: this.dataForm.result,
  574. offTime: this.dataForm.offTime,
  575. symptomName: this.dataForm.sympotomName
  576. }
  577. this.$http({
  578. url: this.$http.adornUrl(`${!this.dataForm.id ? '/management/healthmedicalrecord/save' : '/management/healthmedicalrecord/update'}`),
  579. method: 'post',
  580. data: this.$http.adornData(params, true)
  581. }).then(({data}) => {
  582. if (data && data.code === 0) {
  583. this.visible = false
  584. this.$message({
  585. message: '操作成功',
  586. type: 'success',
  587. duration: 1500
  588. })
  589. this.init()
  590. } else {
  591. this.$message.error(data.msg)
  592. }
  593. })
  594. }
  595. })
  596. },
  597. reset () {
  598. this.dataForm = {
  599. id: '',
  600. pigId: '',
  601. isolationStatus: '',
  602. doctorId: '',
  603. doctor: '',
  604. diseaseName: '',
  605. diseaseTime: '',
  606. diagnosisTime: '',
  607. treatmentPlan: '',
  608. causeName: '',
  609. sympotomName: '',
  610. result: 3,
  611. offTime: ''
  612. }
  613. }
  614. },
  615. created () {
  616. this.getIllnes()
  617. this.getManList()
  618. this.getTmentplan()
  619. this.getSymptom()
  620. this.getCause()
  621. },
  622. activated () {
  623. this.init()
  624. }
  625. }
  626. </script>
  627. <style scoped>
  628. .rect {
  629. background-color: #fff;
  630. padding: 30px 15px;
  631. border-radius: 5px;
  632. border: 1px solid #e8e8e8;
  633. }
  634. /deep/ .el-table--mini td, .el-table--mini th {
  635. padding: 3px 0 !important;
  636. height: 20px !important;
  637. }
  638. /deep/ .el-checkbox__input.is-checked+.el-checkbox__label {
  639. color: rgb(24,144,255);
  640. background-color: rgb(24,144,255);
  641. border-color: rgb(24,144,255);
  642. }
  643. /deep/.el-table .el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner {
  644. background-color: rgb(24,144,255);
  645. border-color: rgb(24,144,255);
  646. }
  647. /deep/.el-table .el-checkbox__inner:hover {
  648. border-color: rgb(24,144,255);
  649. }
  650. /deep/.el-table .el-checkbox__input.is-focus .el-checkbox__inner {
  651. border-color: rgb(24,144,255);
  652. }
  653. /deep/.el-table #select .cell .el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner {
  654. background-color: rgb(24,144,255);
  655. border-color: rgb(24,144,255);
  656. }
  657. </style>