schedule.vue 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <template>
  2. <div class="mod-demo__schedule">
  3. <el-form :inline="true" :model="state.dataForm" @keyup.enter="state.getDataList()">
  4. <el-form-item>
  5. <el-input v-model="state.dataForm.schedule_name" placeholder="排班表名称" clearable></el-input>
  6. </el-form-item>
  7. <el-form-item>
  8. <el-date-picker
  9. v-model="state.dataForm.period_start"
  10. type="date"
  11. placeholder="开始日期"
  12. value-format="YYYY-MM-DD"
  13. style="width: 100%;"
  14. clearable
  15. ></el-date-picker>
  16. </el-form-item>
  17. <el-form-item>
  18. <el-date-picker
  19. v-model="state.dataForm.period_end"
  20. type="date"
  21. placeholder="结束日期"
  22. value-format="YYYY-MM-DD"
  23. style="width: 100%;"
  24. clearable
  25. ></el-date-picker>
  26. </el-form-item>
  27. <el-form-item>
  28. <el-select v-model="state.dataForm.status" placeholder="排班确认状态" clearable>
  29. <el-option :label="item.dictLabel" :value="item.dictValue" v-for="item in state.getDictByKey('scheduleStatus')"></el-option>
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item>
  33. <el-button @click="state.getDataList()">查询</el-button>
  34. </el-form-item>
  35. <el-form-item>
  36. <el-button v-if="state.hasPermission('emergency:schedule:save')" type="primary" @click="addOrUpdateHandle()">新增</el-button>
  37. </el-form-item>
  38. <el-form-item>
  39. <el-button v-if="state.hasPermission('emergency:schedule:delete')" type="danger" @click="state.deleteHandle()">删除</el-button>
  40. </el-form-item>
  41. <!-- 审阅 -->
  42. <el-form-item>
  43. <el-button v-if="state.hasPermission('emergency:schedule:review')" type="danger" @click="reviewHandle()">审阅</el-button>
  44. </el-form-item>
  45. </el-form>
  46. <el-table v-loading="state.dataListLoading" :data="state.dataList" border @selection-change="state.dataListSelectionChangeHandle" style="width: 100%">
  47. <el-table-column type="selection" header-align="center" align="center" width="50"></el-table-column>
  48. <!-- <el-table-column prop="id" label="排班ID" header-align="center" align="center"></el-table-column> -->
  49. <el-table-column prop="id" label="序号" header-align="center" align="center" width="70">
  50. <template v-slot="scope">{{ scope.$index+1 }}</template>
  51. </el-table-column>
  52. <el-table-column prop="scheduleName" label="排班表名称" header-align="center" align="center"></el-table-column>
  53. <el-table-column prop="periodStart" label="排班周期开始日期" header-align="center" align="center"></el-table-column>
  54. <el-table-column prop="periodEnd" label="排班周期结束日期" header-align="center" align="center"></el-table-column>
  55. <!-- <el-table-column prop="filePath" label="用户上传文件路径" header-align="center" align="center"></el-table-column> -->
  56. <el-table-column prop="status" label="是否确认" header-align="center" align="center">
  57. <template v-slot="scope">
  58. {{ state.getDictLabel("scheduleStatus", scope.row.status) }}
  59. </template>
  60. </el-table-column>
  61. <el-table-column prop="creator" label="创建人" header-align="center" align="center"></el-table-column>
  62. <el-table-column prop="createDate" label="创建时间" header-align="center" align="center"></el-table-column>
  63. <el-table-column prop="updater" label="更新人" header-align="center" align="center"></el-table-column>
  64. <el-table-column prop="updateDate" label="更新时间" header-align="center" align="center"></el-table-column>
  65. <el-table-column prop="remark" label="备注" header-align="center" align="center"></el-table-column>
  66. <el-table-column label="操作" fixed="right" header-align="center" align="center" width="180">
  67. <template v-slot="scope">
  68. <el-button v-if="state.hasPermission('emergency:schedule:update')" type="primary" link @click="addOrUpdateHandle(scope.row.id)">修改</el-button>
  69. <el-button v-if="state.hasPermission('emergency:schedule:delete')" type="primary" link @click="state.deleteHandle(scope.row.id)">删除</el-button>
  70. <el-button v-if="state.hasPermission('emergency:schedule:review')" type="primary" link @click="reviewHandle(scope.row.id)">审阅</el-button>
  71. </template>
  72. </el-table-column>
  73. </el-table>
  74. <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>
  75. <!-- 弹窗, 新增 / 修改 -->
  76. <add-or-update ref="addOrUpdateRef" @refreshDataList="state.getDataList">确定</add-or-update>
  77. </div>
  78. </template>
  79. <script lang="ts" setup>
  80. import useView from "@/hooks/useView";
  81. import { reactive, ref, toRefs } from "vue";
  82. import baseService from "@/service/baseService";
  83. import { ElMessage, ElMessageBox } from "element-plus";
  84. import { IObject } from "@/types/interface";
  85. import AddOrUpdate from "./schedule-add-or-update.vue";
  86. const view = reactive({
  87. deleteIsBatch: true,
  88. getDataListURL: "/emergency/schedule/page",
  89. getDataListIsPage: true,
  90. exportURL: "/emergency/schedule/export",
  91. deleteURL: "/emergency/schedule"
  92. });
  93. const state = reactive({ ...useView(view), ...toRefs(view) });
  94. const addOrUpdateRef = ref();
  95. const addOrUpdateHandle = (id?: number) => {
  96. addOrUpdateRef.value.init(id);
  97. };
  98. // 审阅
  99. const reviewHandle = (id?: string) => {
  100. if (!id && state.dataListSelections && state.dataListSelections.length <= 0) {
  101. return ElMessage({
  102. message: "请选择操作项",
  103. type: "warning",
  104. duration: 500
  105. });
  106. }
  107. const reviewData = id
  108. ? [Number(id)]
  109. : (state.dataListSelections || []).map((item: IObject) => {return item.id});
  110. ElMessageBox.confirm("确定进行[审阅]操作?", "提示", {
  111. confirmButtonText: "确定",
  112. cancelButtonText: "取消",
  113. type: "warning"
  114. })
  115. .then(() => {
  116. baseService.put("/emergency/schedule/review", reviewData).then((res) => {
  117. ElMessage.success({
  118. message: "审阅成功",
  119. duration: 500,
  120. onClose: () => {
  121. state.getDataList();
  122. }
  123. });
  124. });
  125. })
  126. .catch(() => {
  127. //
  128. });
  129. };
  130. </script>