DeptPhones.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <template>
  2. <el-container>
  3. <el-header height="36px" style="margin-top: 8px">
  4. <span>快速查询:</span>
  5. <el-input v-model="search" placeholder="科室编码、名称、内线电话、外线电话" style="width: 260px" clearable></el-input>
  6. </el-header>
  7. <el-main>
  8. <el-table :data="cptData" :height="tableHeight" stripe highlight-current-row>
  9. <el-table-column prop="code" label="科室编码"></el-table-column>
  10. <el-table-column prop="name" label="科室名称"></el-table-column>
  11. <el-table-column prop="inPhone" label="内线电话"></el-table-column>
  12. <el-table-column prop="outPhone" label="外线电话"></el-table-column>
  13. <el-table-column label="操作">
  14. <template #default="scope">
  15. <el-button type="primary" icon="Edit" @click="edit(scope.row)">编辑</el-button>
  16. </template>
  17. </el-table-column>
  18. </el-table>
  19. </el-main>
  20. <el-dialog v-model="dialogVisible" title="编辑" width="300px">
  21. <div class="medit">科室编码:<el-input v-model="selectedRow.code" style="width: 130px" disabled></el-input></div>
  22. <div class="medit">科室名称:<el-input v-model="selectedRow.name" style="width: 130px" disabled></el-input></div>
  23. <div class="medit">内线电话:<el-input ref="inPhoneRef" v-model="selectedRow.inPhone" style="width: 130px" @keyup.enter="submit"></el-input></div>
  24. <div class="medit">外线电话:<el-input v-model="selectedRow.outPhone" style="width: 130px" @keyup.enter="submit"></el-input></div>
  25. <div>
  26. <el-button type="primary" size="small" icon="Check" style="width: 200px" @click="submit">确定</el-button>
  27. </div>
  28. </el-dialog>
  29. </el-container>
  30. </template>
  31. <script>
  32. import { computed, onMounted, ref } from 'vue'
  33. import { getDeptPhones, saveDeptPhone } from '@/api/settings/dept-phones'
  34. import store from '@/store'
  35. import { ElMessage } from 'element-plus'
  36. export default {
  37. setup() {
  38. const windowSize = store.state.app.windowSize
  39. const tableHeight = windowSize.h - 45
  40. const search = ref('')
  41. const data = ref([])
  42. const cptData = computed(() => {
  43. return data.value.filter((item) => {
  44. return (
  45. item.code.indexOf(search.value) !== -1 ||
  46. item.name.indexOf(search.value) !== -1 ||
  47. item.inPhone.indexOf(search.value) !== -1 ||
  48. item.outPhone.indexOf(search.value) !== -1
  49. )
  50. })
  51. })
  52. const inPhoneRef = ref(null)
  53. const selectedRow = ref({})
  54. const dialogVisible = ref(false)
  55. const edit = (row) => {
  56. selectedRow.value = row
  57. dialogVisible.value = true
  58. setTimeout(() => {
  59. inPhoneRef.value.focus()
  60. }, 100)
  61. }
  62. const submit = () => {
  63. saveDeptPhone(selectedRow.value).then(() => {
  64. ElMessage({
  65. message: '保存成功。',
  66. type: 'success',
  67. duration: 2500,
  68. showClose: true,
  69. })
  70. dialogVisible.value = false
  71. })
  72. }
  73. onMounted(() => {
  74. getDeptPhones().then((res) => {
  75. data.value = res
  76. })
  77. })
  78. return {
  79. tableHeight,
  80. search,
  81. data,
  82. cptData,
  83. inPhoneRef,
  84. selectedRow,
  85. dialogVisible,
  86. edit,
  87. submit,
  88. }
  89. },
  90. }
  91. </script>
  92. <style scoped>
  93. .medit {
  94. padding: 0 0 20px 0;
  95. }
  96. </style>