index.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <template>
  2. <div class="app-container">
  3. <div class="filter-container">
  4. <div class="filter-control">
  5. <span>培训师姓名:</span>
  6. <el-input v-model="listQuery.doctorName" placeholder="培训师姓名" @keyup.enter.native="handleFilter" />
  7. </div>
  8. <div class="filter-control">
  9. <span>从业资格证编号:</span>
  10. <el-input v-model="listQuery.certificateNo" placeholder="从业资格证编号" @keyup.enter.native="handleFilter" />
  11. </div>
  12. <div class="filter-control">
  13. <span>审核状态:</span>
  14. <el-select v-model="listQuery.auditStatus" placeholder="审核状态" clearable @change="getList">
  15. <el-option label="全部" value="" />
  16. <el-option label="待审核" :value="2" />
  17. <el-option label="审核通过" :value="1" />
  18. <el-option label="审核未通过" :value="0" />
  19. </el-select>
  20. </div>
  21. <div class="filter-control">
  22. <el-button type="primary" @click="getList">查询</el-button>
  23. </div>
  24. </div>
  25. <!-- 表格区域 -->
  26. <el-table
  27. :key="tableKey"
  28. :data="list"
  29. border
  30. fit
  31. highlight-current-row
  32. style="width: 100%"
  33. header-row-class-name="tableHeader"
  34. >
  35. <el-table-column label="序号" :index="indexMethod" type="index" align="center" width="80" />
  36. <el-table-column label="医生姓名" align="center" prop="doctorName" />
  37. <el-table-column label="从业资格证编号" align="center" prop="certificateNo" />
  38. <el-table-column label="审核状态" width="120px" align="center">
  39. <template slot-scope="{ row }">
  40. <audit-status :status="row.auditStatus" :reason="row.invalidReason" />
  41. </template>
  42. </el-table-column>
  43. <el-table-column label="审核时间" width="160px" align="center">
  44. <template slot-scope="{ row }">
  45. <span v-if="row.auditStatus !== 2">{{ row.auditTime | formatTime }}</span>
  46. <span v-else>—</span>
  47. </template>
  48. </el-table-column>
  49. <el-table-column label="审核人" align="center" width="280px">
  50. <template slot-scope="{ row }">
  51. <span v-if="row.auditStatus !== 2">{{ row.auditBy }}</span>
  52. <span v-else>—</span>
  53. </template>
  54. </el-table-column>
  55. <!-- <el-table-column v-if="false" label="创建人" width="180px" align="center" prop="createBy" /> -->
  56. <el-table-column label="操作" align="center" width="160px" class-name="small-padding fixed-width">
  57. <template slot-scope="{ row }">
  58. <audit-button-group
  59. :review="row.auditStatus !== 2"
  60. :type="row.auditStatus === 1 ? 'result' : 'audit'"
  61. :is-dot="row.checkFlag === 0"
  62. :margin-right="false"
  63. @click="onClick(row, $event)"
  64. />
  65. </template>
  66. </el-table-column>
  67. </el-table>
  68. <!-- 页码 -->
  69. <pagination :total="total" :page.sync="listQuery.pageNum" :limit.sync="listQuery.pageSize" @pagination="getList" />
  70. <!-- 审核弹窗 -->
  71. <el-dialog title="驳回" :visible.sync="resultVisible" width="30%" @close="onDialogClose">
  72. <div class="auth-info">
  73. <el-form ref="formRef" :model="dialogData" label-width="80px" :rules="rules">
  74. <el-form-item label="原因:" prop="invalidReason">
  75. <el-input v-model="dialogData.invalidReason" type="textarea" rows="4" placeholder="请说明原因" />
  76. </el-form-item>
  77. </el-form>
  78. </div>
  79. <div slot="footer">
  80. <el-button @click="resultVisible = false">取 消</el-button>
  81. <el-button type="primary" @click="onSubmit">确 定</el-button>
  82. </div>
  83. </el-dialog>
  84. </div>
  85. </template>
  86. <script>
  87. import { mapGetters } from 'vuex'
  88. import { auditDoctor, fetchDoctorList } from '@/api/doctor'
  89. export default {
  90. name: 'AuditTrainingDoctorList',
  91. data() {
  92. return {
  93. // 是否显示dialog
  94. resultVisible: false,
  95. tableKey: 0,
  96. total: 0,
  97. listQuery: {
  98. authUserId: '',
  99. listType: 2,
  100. auditStatus: '',
  101. certificateNo: '',
  102. doctorName: '',
  103. doctorType: 2,
  104. status: '',
  105. pageNum: 1,
  106. pageSize: 10
  107. },
  108. list: [],
  109. dialogData: {
  110. doctorId: '', // 授权机构id
  111. auditStatus: 0, // 审核状态
  112. invalidReason: '' // 审核信息
  113. },
  114. rules: {
  115. invalidReason: [{ required: true, message: '不通过原因不能为空', tigger: 'blur' }]
  116. }
  117. }
  118. },
  119. computed: {
  120. ...mapGetters(['authUserId', 'proxyInfo'])
  121. },
  122. created() {
  123. this.listQuery.authUserId = parseInt(this.$route.query.authUserId)
  124. this.getList()
  125. },
  126. activated() {
  127. this.listQuery.authUserId = parseInt(this.$route.query.authUserId)
  128. this.getList()
  129. },
  130. methods: {
  131. // 获取列表
  132. getList() {
  133. this.listQuery.pageNum = 1
  134. this.list = []
  135. this.fetchDoctorList()
  136. },
  137. async fetchDoctorList() {
  138. try {
  139. const res = await fetchDoctorList(this.listQuery)
  140. this.list = res.data.list
  141. this.total = res.data.total
  142. } catch (error) {
  143. console.log(error)
  144. }
  145. },
  146. // 按钮组点击事件
  147. onClick(row, type) {
  148. const actions = {
  149. review: this.onReview,
  150. result: this.onResult,
  151. audit: this.onAudit
  152. }
  153. actions[type](row)
  154. },
  155. // 预览
  156. onReview(row) {
  157. this.$router.push(`doctor-detail?id=${row.doctorId}&type=review`)
  158. },
  159. // 驳回
  160. onResult(row) {
  161. this.resultVisible = true
  162. this.dialogData.doctorId = row.doctorId
  163. },
  164. // 审核
  165. onAudit(row) {
  166. this.$router.push(`doctor-detail?id=${row.doctorId}&type=audit`)
  167. },
  168. // 审核
  169. async onSubmit() {
  170. try {
  171. await this.$refs.formRef.validate()
  172. await this.onAuthResult()
  173. } catch (error) {
  174. console.log(error)
  175. }
  176. },
  177. // 驳回
  178. async onAuthResult() {
  179. try {
  180. await auditDoctor(this.dialogData)
  181. this.$message.success('驳回成功')
  182. this.getList()
  183. this.resultVisible = false
  184. } catch (error) {
  185. console.log(error)
  186. }
  187. },
  188. onDialogClose() {
  189. this.$refs.formRef.resetFields()
  190. },
  191. // 表格索引
  192. indexMethod(index) {
  193. return index + this.listQuery.pageSize * (this.listQuery.pageNum - 1) + 1
  194. }
  195. }
  196. }
  197. </script>
  198. <style lang="scss" scoped></style>