manage.vue 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. <script setup lang="ts">
  2. defineOptions({
  3. name: "evaluateChangeManage"
  4. });
  5. import { useRouter } from "vue-router";
  6. import { ref, reactive } from "vue";
  7. import addExam from "./manage/addExam.vue";
  8. import { ElMessage, ElMessageBox } from "element-plus";
  9. import { Search } from "@element-plus/icons-vue";
  10. import manageObject from "./mould/manageObject.vue";
  11. import dayjs from "dayjs";
  12. import {
  13. getAssessmentPageList,
  14. getDelAssessment,
  15. postCopyAssessment
  16. } from "@/api/manage";
  17. import { assessmentStatus, getStateType } from "@/config/tag";
  18. const manageObjectRef = ref();
  19. const manageObjectShow = ref(false);
  20. const addExamRef = ref();
  21. const addExamShow = ref(false);
  22. const router = useRouter();
  23. const newAdd = () => {
  24. addExamRef.value.open();
  25. };
  26. const params = reactive({
  27. tableData: [],
  28. params: {
  29. pageNumber: 1,
  30. pageSize: 10,
  31. name: ""
  32. },
  33. total: 0
  34. });
  35. const getAssessmentPageListApi = async () => {
  36. const { code, msg, data } = await getAssessmentPageList(params.params);
  37. if (code === 200) {
  38. params.tableData = data.records;
  39. params.total = data.totalRow;
  40. } else {
  41. ElMessage.error(msg);
  42. }
  43. };
  44. getAssessmentPageListApi();
  45. const handleRowClick = (row: any) => {
  46. console.log(row);
  47. };
  48. const manageObjectItme = ref({});
  49. const setEdit = (row: any) => {
  50. // router.push({ path: "/evaluate/children/change/mould/manageObject" });\
  51. manageObjectShow.value = true;
  52. Object.assign(manageObjectItme.value, row);
  53. };
  54. // 删除
  55. const setDelete = (row: any) => {
  56. ElMessageBox.confirm("此操作将永久删除该考核, 是否继续?", "提示", {
  57. confirmButtonText: "确定",
  58. cancelButtonText: "取消",
  59. type: "warning"
  60. }).then(async () => {
  61. const { code, msg } = await getDelAssessment(row.id);
  62. if (code === 200) {
  63. getAssessmentPageListApi();
  64. ElMessage.success("删除成功");
  65. } else {
  66. ElMessage.error(msg);
  67. }
  68. });
  69. };
  70. const handleCurrentChange = (val: number) => {
  71. params.params.pageNumber = val;
  72. getAssessmentPageListApi();
  73. };
  74. const handleSizeChange = (val: number) => {
  75. params.params.pageSize = val;
  76. getAssessmentPageListApi();
  77. };
  78. // 复制考核
  79. const dialogVisibleCopy = ref(false);
  80. const copyTitle = ref("");
  81. const copyForm = reactive({ name: "" });
  82. const copyManage = (row: any) => {
  83. console.log(row);
  84. Object.assign(copyForm, row);
  85. copyTitle.value = row.name;
  86. dialogVisibleCopy.value = true;
  87. };
  88. const handleClose = () => {
  89. dialogVisibleCopy.value = false;
  90. };
  91. const saveCopy = async () => {
  92. const { code, msg } = await postCopyAssessment(copyForm);
  93. if (code === 200) {
  94. ElMessage.success("复制成功");
  95. dialogVisibleCopy.value = false;
  96. getAssessmentPageListApi();
  97. } else {
  98. ElMessage.error(msg);
  99. }
  100. };
  101. </script>
  102. <template>
  103. <div class="w-[100%]">
  104. <!-- 发起考核 -->
  105. <addExam
  106. ref="addExamRef"
  107. v-model="addExamShow"
  108. @addHandClick="getAssessmentPageListApi"
  109. />
  110. <manageObject v-if="manageObjectShow" :message="manageObjectItme" />
  111. <div v-else>
  112. <div class="mb-2 flex gap-2 justify-between flex-wrap">
  113. <div class="flex mt-2">
  114. <div class="flex mr-2">
  115. <el-input
  116. v-model="params.params.name"
  117. style="width: 500px"
  118. placeholder="搜索考核模板"
  119. :prefix-icon="Search"
  120. clearable
  121. @change="getAssessmentPageListApi"
  122. />
  123. </div>
  124. </div>
  125. <div class="flex pt-2 mr-6">
  126. <Auth :value="['发起考核']">
  127. <el-button type="primary" class="mr-8" @click="newAdd"
  128. >发起考核</el-button
  129. >
  130. </Auth>
  131. </div>
  132. </div>
  133. <div class="mt-8">
  134. <el-table
  135. :data="params.tableData"
  136. style="width: 100%"
  137. max-height="250"
  138. @row-click="handleRowClick"
  139. >
  140. <el-table-column prop="name" label="考核名称" width="300" fixed />
  141. <el-table-column prop="cycle" label="周期" />
  142. <el-table-column prop="cycleValue" label="执行期" />
  143. <el-table-column prop="name" label="考核模板" width="250" />
  144. <el-table-column prop="assessmentStatus" label="状态">
  145. <template #default="{ row }">
  146. <el-tag :type="getStateType(row.assessmentStatus)">
  147. {{ assessmentStatus(row.assessmentStatus) }}
  148. </el-tag>
  149. </template>
  150. </el-table-column>
  151. <el-table-column prop="createUser" label="创建人" />
  152. <el-table-column prop="updateTime" label="更新时间">
  153. <template #default="{ row }">
  154. <div v-if="row.updateTime">
  155. {{ dayjs(row.updateTime).format("YYYY-MM-DD HH:mm:ss") }}
  156. </div>
  157. </template>
  158. </el-table-column>
  159. <el-table-column label="操作" width="150" fixed="right">
  160. <template #default="{ row }">
  161. <!-- <el-button link :icon="Edit" /> -->
  162. <Auth :value="['编辑']">
  163. <el-dropdown trigger="click">
  164. <span class="el-dropdown-link navbar-bg-hover select-none">
  165. <el-icon @click="setEdit(row)"><Edit /></el-icon>
  166. </span>
  167. </el-dropdown>
  168. </Auth>
  169. <el-dropdown class="ml-2" trigger="click">
  170. <span class="el-dropdown-link navbar-bg-hover select-none">
  171. <el-icon><More /></el-icon>
  172. </span>
  173. <template #dropdown>
  174. <el-dropdown-menu class="setting">
  175. <Auth :value="['删除']">
  176. <el-dropdown-item @click="setDelete(row)">
  177. <el-text type="danger">删除</el-text>
  178. </el-dropdown-item>
  179. </Auth>
  180. <Auth :value="['复制']">
  181. <el-dropdown-item @click="copyManage(row)">
  182. 复制
  183. </el-dropdown-item>
  184. </Auth>
  185. </el-dropdown-menu>
  186. </template>
  187. </el-dropdown>
  188. </template>
  189. </el-table-column>
  190. </el-table>
  191. </div>
  192. <div class="flex justify-between item-center">
  193. <div class="float-left mt-5 ml-2 total">共{{ params.total }}条数据</div>
  194. <div class="float-right mt-8 mr-8">
  195. <el-pagination
  196. v-model:current-page="params.params.pageNumber"
  197. v-model:page-size="params.params.pageSize"
  198. background
  199. layout="prev, pager, next"
  200. :total="params.total"
  201. @size-change="handleSizeChange"
  202. @current-change="handleCurrentChange"
  203. />
  204. </div>
  205. </div>
  206. </div>
  207. <el-dialog
  208. v-model="dialogVisibleCopy"
  209. :title="'复制来源:' + copyTitle"
  210. width="500"
  211. >
  212. <el-form :model="copyForm" label-width="auto" style="max-width: 600px">
  213. <el-form-item label="名称" prop="name">
  214. <el-input v-model="copyForm.name" placeholder="请输入" />
  215. </el-form-item>
  216. </el-form>
  217. <template #footer>
  218. <div class="dialog-footer">
  219. <el-button @click="handleClose">取消</el-button>
  220. <el-button type="primary" @click="saveCopy"> 确认 </el-button>
  221. </div>
  222. </template>
  223. </el-dialog>
  224. </div>
  225. </template>
  226. <style scoped>
  227. .total {
  228. font-size: 14px;
  229. /* font-family: PingFangSC-Regular; */
  230. font-weight: 400;
  231. line-height: 22px;
  232. color: #0009;
  233. letter-spacing: 0;
  234. }
  235. </style>