index.vue 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <template>
  2. <div id="index">
  3. <list-frame :title="mainTitle" @query="search" :total="total" :needFilter="false" :needAdd="false">
  4. <data-table :fields="fields" :data="list" :opera="opera" @edit="toEdit" @check="toCheck"></data-table>
  5. </list-frame>
  6. <el-dialog title="请假审批" :visible.sync="dialog" width="30%" center @close="toClose">
  7. <el-form label-width="120px">
  8. <el-form-item label="姓名">{{ operaObject.name }}</el-form-item>
  9. <el-form-item label="原因">{{ operaObject.reason }}</el-form-item>
  10. <el-form-item label="时间">{{ operaObject.time }}</el-form-item>
  11. <el-form-item>
  12. <el-row type="flex" justify="middle" align="center">
  13. <el-col :span="7">
  14. <el-button type="primary" size="mini" @click="setCheck('0')">通过</el-button>
  15. </el-col>
  16. <el-col :span="7">
  17. <el-button type="danger" size="mini" @click="setCheck('1')">拒绝</el-button>
  18. </el-col>
  19. </el-row>
  20. </el-form-item>
  21. </el-form>
  22. </el-dialog>
  23. </div>
  24. </template>
  25. <script>
  26. import listFrame from '@frame/layout/admin/list-frame';
  27. import dataTable from '@frame/components/data-table';
  28. import { createNamespacedHelpers } from 'vuex';
  29. const { mapActions } = createNamespacedHelpers('dept');
  30. export default {
  31. metaInfo: { title: '请假管理' },
  32. name: 'index',
  33. props: {},
  34. components: { listFrame, dataTable },
  35. data: () => ({
  36. opera: [
  37. {
  38. label: '查看学生详情',
  39. icon: 'el-icon-document',
  40. method: 'edit',
  41. },
  42. {
  43. label: '请假审核',
  44. icon: 'el-icon-s-check',
  45. method: 'check',
  46. },
  47. ],
  48. fields: [
  49. { label: '学生姓名', prop: 'name' },
  50. { label: '时间', prop: 'time' },
  51. { label: '理由', prop: 'reason' },
  52. ],
  53. list: [{ name: '测试学生1', time: '2020-05-01 - 2020-05-01', reason: '发烧' }],
  54. total: 0,
  55. dialog: false,
  56. operaObject: {},
  57. }),
  58. created() {},
  59. computed: {
  60. mainTitle() {
  61. let meta = this.$route.meta;
  62. let main = meta.title || '';
  63. let sub = meta.sub || '';
  64. return `${main}${sub}`;
  65. },
  66. keyWord() {
  67. let meta = this.$route.meta;
  68. let main = meta.title || '';
  69. return main;
  70. },
  71. },
  72. methods: {
  73. ...mapActions(['query', 'delete']),
  74. async search({ skip = 0, limit = 10, ...info } = {}) {
  75. const res = await this.query({ skip, limit, ...info });
  76. if (this.$checkRes(res)) {
  77. this.$set(this, `list`, res.data);
  78. this.$set(this, `total`, res.total);
  79. }
  80. },
  81. toEdit({ data }) {
  82. this.$router.push({ path: '/stud/detail', query: { id: data.id } });
  83. },
  84. toCheck({ data }) {
  85. this.$set(this, `operaObject`, data);
  86. this.dialog = true;
  87. },
  88. async setCheck(status) {
  89. //TODO 请假审核
  90. this.toClose();
  91. },
  92. toClose() {
  93. this.dialog = false;
  94. this.operaObject = {};
  95. },
  96. },
  97. };
  98. </script>
  99. <style lang="less" scoped></style>