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

outpatientRecord.vue 20KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
  1. <template>
  2. <div class="main-contain incomeStatistics">
  3. <div class="position">
  4. <bread-crumb :crumbs='crumbs'></bread-crumb>
  5. </div>
  6. <div class="app-container">
  7. <div style="display: flex;justify-content: space-between;margin-bottom:10px;">
  8. <div>
  9. <el-input size="small" style="width:150px;" v-model="keywords"
  10. class="filter-item"/>
  11. <el-button size="small" style="margin-left:10px;" class="filter-item" type="primary"
  12. @click="searchAction">
  13. 搜索
  14. </el-button>
  15. <!--<el-select v-model="is_put_on_record" style="width:160px;" placeholder="请选择" @change="changeStatus">-->
  16. <!--<el-option-->
  17. <!--v-for="item,index in datas"-->
  18. <!--:key="index"-->
  19. <!--:label="item.name"-->
  20. <!--:value="item.id">-->
  21. <!--</el-option>-->
  22. <!--</el-select>-->
  23. </div>
  24. <!--<el-button size="small" type="primary" @click="dialogFormVisible = t 。rue">医保对账</el-button>-->
  25. </div>
  26. <el-table :data="tableData" border style="width: 100%;" :row-style="{ color: '#303133' }"
  27. :header-cell-style="{backgroundColor: 'rgb(245, 247, 250)',color: '#606266'}"
  28. v-loading="patientLoading"
  29. highlight-current-row>
  30. <el-table-column
  31. prop="date"
  32. label="序号"
  33. width="60"
  34. align="center"
  35. type="index"
  36. >
  37. </el-table-column>
  38. <el-table-column align="center" prop="name" label="流水号">
  39. <template slot-scope="scope">{{scope.row.record.trt_dcla_detl_sn}}</template>
  40. </el-table-column>
  41. <el-table-column align="center" prop="name" label="时间">
  42. <template slot-scope="scope" v-if="scope.row.record.ctime > 0">{{getTimes(scope.row.record.ctime)}}</template>
  43. </el-table-column>
  44. <el-table-column align="center" prop="name" label="姓名">
  45. <template slot-scope="scope">{{scope.row.name}}</template>
  46. </el-table-column>
  47. <el-table-column align="center" prop="name" label="人员编号">
  48. <template slot-scope="scope">
  49. <div>{{scope.row.record.psn_no}}</div>
  50. </template>
  51. </el-table-column>
  52. <el-table-column align="center" prop="name" label="联系电话">
  53. <template slot-scope="scope">{{scope.row.phone}}</template>
  54. </el-table-column>
  55. <el-table-column align="center" prop="name" label="地址">
  56. <template slot-scope="scope">
  57. {{scope.row.home_address}}
  58. </template>
  59. </el-table-column>
  60. <el-table-column align="center" prop="name" width="160" label="鉴定定点医药机构">
  61. <template slot-scope="scope">
  62. {{$store.getters.xt_user.org.org_name}}
  63. </template>
  64. </el-table-column>
  65. <el-table-column align="center" prop="name" label="医生">
  66. <template slot-scope="scope">
  67. <el-select v-model="scope.row.record.doctor_id" placeholder="请选择"
  68. @change="changeDoctor(scope.row,scope.row.record.doctor_id)">
  69. <el-option
  70. v-for="(item,index) in doctorList"
  71. :key="index"
  72. :label="item.user_name"
  73. :value="item.admin_user_id">
  74. </el-option>
  75. </el-select>
  76. </template>
  77. </el-table-column>
  78. <el-table-column align="center" prop="name" label="科室">
  79. <template slot-scope="scope">
  80. <el-select style="margin-right:5px;width:140px;" v-model="scope.row.record.department_id"
  81. placeholder="请选择">
  82. <el-option
  83. v-for="(item,index) in department"
  84. :key="index"
  85. :label="item.name"
  86. :value="item.id">
  87. </el-option>
  88. </el-select>
  89. </template>
  90. </el-table-column>
  91. <el-table-column align="center" prop="name" label="险种类型">
  92. <template slot-scope="scope">
  93. <div v-if="scope.row.record.insutype == '310'">职工基本医疗保险</div>
  94. <div v-if="scope.row.record.insutype == '320'">公务员医疗补助</div>
  95. <div v-if="scope.row.record.insutype == '330'">大额医疗费用补助</div>
  96. <div v-if="scope.row.record.insutype == '340'">离休人员医疗保障</div>
  97. <div v-if="scope.row.record.insutype == '390'">城乡居民基本医疗保险</div>
  98. <div v-if="scope.row.record.insutype == '392'">城乡居民大病医疗保险</div>
  99. <div v-if="scope.row.record.insutype == '510'">生育保险</div>
  100. </template>
  101. </el-table-column>
  102. <el-table-column align="center" prop="name" label="疾病类型">
  103. <template slot-scope="scope">
  104. <el-select style="width:100%;" v-model="scope.row.record.sick_type" placeholder="请选择">
  105. <el-option
  106. v-for="(item,index) in sick"
  107. :key="index"
  108. :label="item.class_name"
  109. :value="item.id">
  110. </el-option>
  111. </el-select>
  112. </template>
  113. </el-table-column>
  114. <el-table-column prop="date" label="操作" width="80" align="center" fixed="right">
  115. <template slot-scope="scope">
  116. <el-button type="primary" size="small" icon="el-icon-tickets" v-if="scope.row.record.is_cancel == 0 ||scope.row.record.is_cancel == 2" >
  117. <span @click="putOnRecord(1,scope.row)">备案</span>
  118. </el-button>
  119. <el-button type="danger" size="small" icon="el-icon-tickets" v-if="scope.row.record.is_cancel == 1" >
  120. <span @click="putOnRecord(2,scope.row)">撤消</span>
  121. </el-button>
  122. </template>
  123. </el-table-column>
  124. </el-table>
  125. <el-dialog title="备案" :visible.sync="dialogFormVisible">
  126. <el-form :model="form" label-width="100px">
  127. <el-form-item label="险种类型" :label-width="formLabelWidth">
  128. <el-select v-model="insutype_value" placeholder="请选择" style="width: 200px;">
  129. <el-option
  130. v-for="item in insutypes"
  131. :key="item.value"
  132. :label="item.label"
  133. :value="item.value">
  134. </el-option>
  135. </el-select>
  136. </el-form-item>
  137. </el-form>
  138. <div slot="footer" class="dialog-footer">
  139. <el-button @click="dialogFormVisible = false">取 消</el-button>
  140. <el-button type="primary" @click="confirm">确 定</el-button>
  141. </div>
  142. </el-dialog>
  143. </div>
  144. <el-pagination
  145. @size-change="handleSizeChange"
  146. @current-change="handleCurrentChange"
  147. :page-sizes="[10, 50, 100]"
  148. :page-size="10"
  149. background
  150. style="margin-top:20px;float: right"
  151. layout="total, sizes, prev, pager, next, jumper"
  152. :total="total"
  153. >
  154. </el-pagination>
  155. </div>
  156. </template>
  157. <script>
  158. import BreadCrumb from '@/xt_pages/components/bread-crumb'
  159. import { getAllDoctorList, getInitData, getRecordList } from '@/api/his/his'
  160. import { uParseTime } from '@/utils/tools'
  161. import { fetchAllAdminUsers } from '@/api/doctor'
  162. import axios from 'axios'
  163. export default {
  164. components: {
  165. BreadCrumb
  166. },
  167. data() {
  168. return {
  169. is_put_on_record:0,
  170. datas: [
  171. {
  172. id: 0,
  173. name: '全部'
  174. }, {
  175. id: 1,
  176. name: '已备案'
  177. }, {
  178. id: 2,
  179. name: '未备案'
  180. }
  181. ],
  182. currentObject: null,
  183. crumbs: [
  184. { path: false, name: '门诊收费' },
  185. { path: false, name: '医保费用对照' }
  186. ],
  187. tableData: [],
  188. doctorList: [],
  189. department: [],
  190. patientLoading: false,
  191. sick: [],
  192. limit: 10,
  193. insutype_value:"",
  194. psn_no:"",
  195. page: 1,
  196. dialogFormVisible: false,
  197. total: 0,
  198. adminUserOptions: [],
  199. start_time: '',
  200. end_time: '',
  201. insutype: '',
  202. check_type: '',
  203. keywords: '',
  204. options: [
  205. {
  206. value: 1,
  207. label: '总账'
  208. }, {
  209. value: 2,
  210. label: '明细'
  211. }
  212. ],
  213. insutype_arr: [
  214. {
  215. value: '310',
  216. label: '职工基本医疗保险'
  217. }, {
  218. value: '320',
  219. label: '公务员医疗补助'
  220. }, {
  221. value: '330',
  222. label: '大额医疗费用补助'
  223. }, {
  224. value: '340',
  225. label: '离休人员医疗保障'
  226. },
  227. {
  228. value: '390',
  229. label: '城乡居民基本医疗保险'
  230. }, {
  231. value: '392',
  232. label: '城乡居民大病医疗保险'
  233. }, {
  234. value: '510',
  235. label: '生育保险'
  236. }
  237. ],
  238. insutypes: [
  239. {
  240. value: '310',
  241. label: '职工基本医疗保险'
  242. }, {
  243. value: '320',
  244. label: '公务员医疗补助'
  245. }, {
  246. value: '330',
  247. label: '大额医疗费用补助'
  248. }, {
  249. value: '340',
  250. label: '离休人员医疗保障'
  251. },
  252. {
  253. value: '390',
  254. label: '城乡居民基本医疗保险'
  255. }, {
  256. value: '392',
  257. label: '城乡居民大病医疗保险'
  258. }, {
  259. value: '510',
  260. label: '生育保险'
  261. }
  262. ]
  263. }
  264. },
  265. methods: {
  266. changeStatus(id){
  267. this.keywords = ""
  268. this.getList()
  269. },
  270. getName(value){
  271. console.log(value)
  272. for(let i = 0; i < this.insutype_arr.length; i++){
  273. console.log(this.insutype_arr[i].value)
  274. if(this.insutype_arr[i].value == value){
  275. return this.insutype_arr[i].label
  276. }
  277. }
  278. return "未知"
  279. },
  280. getGdybPatientInfo(){
  281. let params ={
  282. id_card_no:this.currentObject.id_card_no,
  283. admin_user_id: this.$store.getters.xt_user.user.id,
  284. }
  285. var that = this
  286. axios.get('http://127.0.0.1:9532/api/patient/info', {
  287. params: params
  288. })
  289. .then(function(response) {
  290. if (response.data.state == 0) {
  291. that.$message.error(response.data.msg)
  292. return false
  293. } else {
  294. if(response.data.data.failed_code == -10){
  295. that.$message.error(response.data.data.msg)
  296. }else{
  297. that.dialogFormVisible = true
  298. that.insutypes = []
  299. that.psn_no = response.data.data.info.output.baseinfo.psn_no
  300. for (let i =0; i < response.data.data.info.output.insuinfo.length; i++){
  301. let obj = {
  302. value:response.data.data.info.output.insuinfo[i].insutype,
  303. label:""
  304. }
  305. for(let b = 0; b < that.insutype_arr.length; b++){
  306. if(that.insutype_arr[b].value == response.data.data.info.output.insuinfo[i].insutype){
  307. obj.label = that.insutype_arr[b].label
  308. }
  309. }
  310. that.insutypes.push(obj)
  311. }
  312. }
  313. }
  314. })
  315. .catch(function(error) {
  316. })
  317. },
  318. putOnRecord(type, row) {
  319. if (type == 1) {
  320. this.currentObject = row
  321. this.getGdybPatientInfo()
  322. } else {
  323. this.$confirm('是否撤销备案', '撤销备案', {
  324. confirmButtonText: '确 定',
  325. cancelButtonText: '取 消',
  326. type: 'warning'
  327. }).then(() => {
  328. let params = {
  329. 'id': row.record.id,
  330. 'admin_user_id': this.$store.getters.xt_user.user.id
  331. }
  332. var that = this
  333. axios.get('http://127.0.0.1:9532/api/psn/ncds/unputonrecord', {
  334. params: params
  335. })
  336. .then(function(response) {
  337. if (response.data.state == 0) {
  338. that.$message.error(response.data.msg)
  339. return false
  340. } else {
  341. if(response.data.data.failed_code == -10){
  342. that.$message.error(response.data.data.msg)
  343. }else{
  344. row.record.is_cancel = 2
  345. that.$message({ message: '撤销成功', type: 'success' })
  346. }
  347. }
  348. })
  349. .catch(function(error) {
  350. })
  351. }).catch(() => {
  352. })
  353. }
  354. },
  355. changeDoctor(row, id) {
  356. for (let i = 0; i < this.doctorList.length; i++) {
  357. if (id == this.doctorList[i].admin_user_id) {
  358. if (this.doctorList[i].department_id == 0) {
  359. row.record.department_id = ''
  360. } else {
  361. row.record.department_id = this.doctorList[i].department_id
  362. }
  363. }
  364. }
  365. },
  366. getInitData() {
  367. getInitData().then(response => {
  368. if (response.data.state == 0) {
  369. this.$message.error(response.data.msg)
  370. return false
  371. } else {
  372. this.doctorList = response.data.data.doctors
  373. this.department = response.data.data.department
  374. this.sick = response.data.data.sick
  375. }
  376. })
  377. },
  378. getSickName(id) {
  379. },
  380. confirm() {
  381. if(this.currentObject.record.doctor_id == '' || this.currentObject.record.doctor_id == 0){
  382. this.$message.error("请选择医生")
  383. return
  384. }
  385. if(this.currentObject.record.department_id == '' || this.currentObject.record.department_id == 0){
  386. this.$message.error("请选择科室")
  387. return
  388. }
  389. if(this.currentObject.record.sick_type == '' || this.currentObject.record.sick_type == 0){
  390. this.$message.error("请选择疾病类型")
  391. return
  392. }
  393. if(this.currentObject.record.insutype_value == '' || this.currentObject.record.insutype_value == 0){
  394. this.$message.error("请选择险种")
  395. return
  396. }
  397. let params = {
  398. record_type: 0,
  399. patient_id: this.currentObject.id,
  400. insutype: this.insutype_value,
  401. psn_no: this.psn_no,
  402. sick_id: this.currentObject.record.sick_type,
  403. doctor_id: this.currentObject.record.doctor_id,
  404. department_id:this.currentObject.record.department_id,
  405. admin_user_id: this.$store.getters.xt_user.user.id
  406. }
  407. var that = this
  408. axios.get('http://127.0.0.1:9532/api/psn/ncds/putonrecord', {
  409. params: params
  410. })
  411. .then(function(response) {
  412. if (response.data.state == 0) {
  413. that.$message.error(response.data.msg)
  414. return false
  415. } else {
  416. if(response.data.data.failed_code == -10){
  417. that.$message.error(response.data.data.msg)
  418. }else{
  419. that.$message.success("备案成功")
  420. that.dialogFormVisible = false
  421. for (let i = 0; i < that.tableData.length; i++) {
  422. if (that.tableData[i].id == that.currentObject.id) {
  423. that.tableData[i].record.is_cancel =response.data.data.result.is_cancel
  424. that.tableData[i].record.id = response.data.data.result.id
  425. that.tableData[i].record.trt_dcla_detl_sn = response.data.data.result.trt_dcla_detl_sn
  426. that.tableData[i].record.psn_no = response.data.data.result.psn_no
  427. that.tableData[i].record.doctor_id = response.data.data.result.doctor_id
  428. that.tableData[i].record.department_id = response.data.data.result.department_id
  429. that.tableData[i].record.ctime = response.data.data.result.ctime
  430. that.tableData[i].record.insutype = response.data.data.result.insutype
  431. that.tableData[i].record.sick_type = response.data.data.result.sick_type
  432. }
  433. }
  434. }
  435. }
  436. })
  437. .catch(function(error) {
  438. })
  439. },
  440. getInsutype(type) {
  441. },
  442. fetchAllAdminUsers() {
  443. fetchAllAdminUsers().then(response => {
  444. if (response.data.state == 1) {
  445. this.adminUserOptions = response.data.data.users
  446. }
  447. })
  448. },
  449. getName(admin_user_id) {
  450. for (let i = 0; i < this.adminUserOptions.length; i++) {
  451. if (this.adminUserOptions[i].id == admin_user_id) {
  452. return this.adminUserOptions[i].name
  453. }
  454. }
  455. },
  456. getTimes(time) {
  457. return uParseTime(time, '{y}-{m}-{d}')
  458. },
  459. getList() {
  460. let params = {
  461. 'page': this.page,
  462. 'limit': this.limit,
  463. 'keywords': this.keywords,
  464. 'is_put_on_record':this.is_put_on_record
  465. }
  466. this.tableData = []
  467. this.patientLoading = true
  468. getRecordList(params).then(response => {
  469. if (response.data.state == 0) {
  470. this.patientLoading = false
  471. this.$message.error(response.data.msg)
  472. return false
  473. } else {
  474. this.patientLoading = false
  475. this.tableData = response.data.data.list
  476. this.total = response.data.data.total
  477. for (let i = 0; i < this.tableData.length; i++) {
  478. if (this.tableData[i].record.doctor_id == 0) {
  479. this.tableData[i].record.doctor_id = ''
  480. }
  481. if (this.tableData[i].record.department_id == 0) {
  482. this.tableData[i].record.department_id = ''
  483. }
  484. if (this.tableData[i].record.sick_type == 0) {
  485. this.tableData[i].record.sick_type = ''
  486. }
  487. }
  488. }
  489. })
  490. },
  491. handleSizeChange(limit) {
  492. this.limit = limit
  493. this.getList()
  494. },
  495. handleCurrentChange(page) {
  496. this.page = page
  497. this.getList()
  498. }, searchAction() {
  499. this.getList()
  500. }
  501. },
  502. created() {
  503. this.getList()
  504. this.getInitData()
  505. this.fetchAllAdminUsers()
  506. }
  507. }
  508. </script>