leaveapplication.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. <template>
  2. <div class="mod-demo__leaveapplication">
  3. <el-form :inline="true" :model="state.dataForm" @keyup.enter="state.getDataList()">
  4. <el-form-item>
  5. <el-select v-model="state.dataForm.leave_type" placeholder="请假类型" clearable>
  6. <el-option :label="item.dictLabel" :value="item.dictValue" v-for="item in state.getDictByKey('askLeave')"></el-option>
  7. </el-select>
  8. </el-form-item>
  9. <el-form-item>
  10. <el-button @click="state.getDataList()">查询</el-button>
  11. </el-form-item>
  12. <el-form-item>
  13. <el-button v-if="state.hasPermission('emergency:leaveapplication:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>
  14. </el-form-item>
  15. <el-form-item>
  16. <el-button v-if="state.hasPermission('emergency:leaveapplication:delete')" type="danger" @click="state.deleteHandle()">删除</el-button>
  17. </el-form-item>
  18. <!-- 审阅 -->
  19. <el-form-item>
  20. <el-button v-if="state.hasPermission('emergency:leaveapplication:review')" type="danger" @click="reviewHandle()">审阅</el-button>
  21. </el-form-item>
  22. <el-form-item>
  23. <el-button v-if="state.hasPermission('emergency:leaveapplication:export')" type="info" @click="state.exportHandle()">导出</el-button>
  24. </el-form-item>
  25. </el-form>
  26. <el-table v-loading="state.dataListLoading" :data="state.dataList" border @selection-change="state.dataListSelectionChangeHandle" style="width: 100%">
  27. <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
  28. <el-table-column prop="id" label="序号" header-align="center" align="center" width="70">
  29. <template v-slot="scope">{{ scope.$index+1 }}</template>
  30. </el-table-column>
  31. <el-table-column prop="leaveType" label="请假类型" header-align="center" align="center">
  32. <template v-slot="scope">
  33. {{ state.getDictLabel("askLeave", scope.row.leaveType) }}
  34. </template>
  35. </el-table-column>
  36. <el-table-column prop="startTime" label="开始时间" header-align="center" align="center"></el-table-column>
  37. <el-table-column prop="endTime" label="结束时间" header-align="center" align="center"></el-table-column>
  38. <el-table-column prop="status" label="审批状态" header-align="center" align="center">
  39. <template v-slot="scope">
  40. {{ state.getDictLabel("approvalStatus", scope.row.status) }}
  41. </template>
  42. </el-table-column>
  43. <el-table-column prop="approvalComment" label="审批意见" header-align="center" align="center"></el-table-column>
  44. <el-table-column prop="creatorName" label="创建人" header-align="center" align="center"></el-table-column>
  45. <el-table-column prop="createDate" label="创建时间" header-align="center" align="center"></el-table-column>
  46. <el-table-column prop="updaterName" label="更新人" header-align="center" align="center"></el-table-column>
  47. <el-table-column prop="updateDate" label="更新时间" header-align="center" align="center"></el-table-column>
  48. <el-table-column prop="remark" label="备注" header-align="center" align="center"></el-table-column>
  49. <el-table-column label="操作" fixed="right" header-align="center" align="center" width="180">
  50. <template v-slot="scope">
  51. <el-button v-if="state.hasPermission('emergency:leaveapplication:update')" type="primary" link @click="addOrUpdateHandle(scope.row.id)">修改</el-button>
  52. <el-button v-if="state.hasPermission('emergency:leaveapplication:delete')" type="primary" link @click="state.deleteHandle(scope.row.id)">删除</el-button>
  53. <el-button v-if="state.hasPermission('emergency:leaveapplication:review')" type="primary" link @click="reviewHandle(scope.row.id)">审阅</el-button>
  54. </template>
  55. </el-table-column>
  56. </el-table>
  57. <el-pagination :current-page="state.page" :page-sizes="[10, 20, 50, 100]" :page-size="state.limit" :total="state.total" layout="total, sizes, prev, pager, next, jumper" @size-change="state.pageSizeChangeHandle" @current-change="state.pageCurrentChangeHandle"> </el-pagination>
  58. <!-- 弹窗, 新增 / 修改 -->
  59. <add-or-update ref="addOrUpdateRef" @refreshDataList="state.getDataList">确定</add-or-update>
  60. </div>
  61. </template>
  62. <script lang="ts" setup>
  63. import useView from "@/hooks/useView";
  64. import { reactive, ref, toRefs } from "vue";
  65. import baseService from "@/service/baseService";
  66. import { ElMessage, ElMessageBox } from "element-plus";
  67. import AddOrUpdate from "./leaveapplication-add-or-update.vue";
  68. const view = reactive({
  69. deleteIsBatch: true,
  70. getDataListURL: "/emergency/leaveapplication/page",
  71. getDataListIsPage: true,
  72. exportURL: "/emergency/leaveapplication/export",
  73. deleteURL: "/emergency/leaveapplication"
  74. });
  75. const state = reactive({ ...useView(view), ...toRefs(view) });
  76. const addOrUpdateRef = ref();
  77. const addOrUpdateHandle = (id?: number) => {
  78. addOrUpdateRef.value.init(id);
  79. };
  80. // 审阅
  81. const reviewHandle = (id?: string) => {
  82. if (!id && state.dataListSelections && state.dataListSelections.length <= 0) {
  83. return ElMessage({
  84. message: "请选择操作项",
  85. type: "warning",
  86. duration: 500
  87. });
  88. }
  89. const reviewData = id
  90. ? [id]
  91. : (state.dataListSelections || []).map((item: IObject) => {return item.id});
  92. ElMessageBox.confirm("确定进行[审阅]操作?", "提示", {
  93. confirmButtonText: "确定",
  94. cancelButtonText: "取消",
  95. type: "warning"
  96. })
  97. .then(() => {
  98. baseService.put("/emergency/leaveapplication/review", reviewData).then((res) => {
  99. ElMessage.success({
  100. message: "审阅成功",
  101. duration: 500,
  102. onClose: () => {
  103. state.getDataList();
  104. }
  105. });
  106. });
  107. })
  108. .catch(() => {
  109. //
  110. });
  111. };
  112. </script>