PrintPlanManage.vue 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. <template>
  2. <div class="print-plan-manage">
  3. <div class="part-box part-box-filter part-box-flex">
  4. <el-form ref="FilterForm" label-position="left" label-width="85px" inline>
  5. <template v-if="checkPrivilege('condition', 'condition')">
  6. <el-form-item label="学期:">
  7. <semester-select
  8. v-model="filter.semesterId"
  9. default-select
  10. @default-selected="getList"
  11. ></semester-select>
  12. </el-form-item>
  13. <el-form-item label="考试:">
  14. <exam-select
  15. v-model="filter.examId"
  16. :semester-id="filter.semesterId"
  17. ></exam-select>
  18. </el-form-item>
  19. <el-form-item label="印刷计划:">
  20. <print-plan-select
  21. v-model.trim="filter.printPlanIdList"
  22. placeholder="印刷计划"
  23. multiple
  24. clearable
  25. :semester-id="filter.semesterId"
  26. :exam-id="filter.examId"
  27. style="width: 300px"
  28. ></print-plan-select>
  29. </el-form-item>
  30. <el-form-item label="计划状态:">
  31. <el-select
  32. v-model="filter.status"
  33. style="width: 142px"
  34. placeholder="计划状态"
  35. clearable
  36. >
  37. <el-option
  38. v-for="(val, key) in PRINT_PLAN_STATUS"
  39. :key="key"
  40. :value="key"
  41. :label="val"
  42. ></el-option>
  43. </el-select>
  44. </el-form-item>
  45. <el-form-item label="创建时间:">
  46. <el-date-picker
  47. v-model="createTime"
  48. type="datetimerange"
  49. :picker-options="pickerOptions"
  50. range-separator="至"
  51. start-placeholder="创建开始时间"
  52. end-placeholder="创建结束时间"
  53. value-format="timestamp"
  54. align="right"
  55. unlink-panels
  56. >
  57. </el-date-picker>
  58. </el-form-item>
  59. </template>
  60. <el-form-item label-width="0px">
  61. <el-button
  62. v-if="checkPrivilege('button', 'select')"
  63. type="primary"
  64. @click="search"
  65. >查询</el-button
  66. >
  67. </el-form-item>
  68. </el-form>
  69. <div class="part-box-action">
  70. <el-button
  71. v-if="checkPrivilege('button', 'add')"
  72. icon="el-icon-circle-plus-outline"
  73. type="primary"
  74. @click="toAdd"
  75. >
  76. 新建印刷计划
  77. </el-button>
  78. </div>
  79. </div>
  80. <div class="part-box part-box-pad">
  81. <el-table ref="TableList" :data="dataList">
  82. <el-table-column
  83. type="index"
  84. label="序号"
  85. width="70"
  86. :index="indexMethod"
  87. ></el-table-column>
  88. <el-table-column
  89. prop="name"
  90. label="印刷计划"
  91. min-width="200"
  92. ></el-table-column>
  93. <el-table-column
  94. prop="semesterName"
  95. label="学期"
  96. min-width="200"
  97. ></el-table-column>
  98. <el-table-column
  99. prop="examName"
  100. label="考试"
  101. min-width="200"
  102. ></el-table-column>
  103. <el-table-column prop="examStartTime" label="考试开始时间" width="170">
  104. <span slot-scope="scope">{{
  105. scope.row.examStartTime | timestampFilter
  106. }}</span>
  107. </el-table-column>
  108. <el-table-column prop="examEndTime" label="考试结束时间" width="170">
  109. <span slot-scope="scope">{{
  110. scope.row.examEndTime | timestampFilter
  111. }}</span>
  112. </el-table-column>
  113. <el-table-column
  114. prop="createName"
  115. label="创建人"
  116. min-width="100"
  117. ></el-table-column>
  118. <el-table-column prop="createTime" label="创建时间" width="170">
  119. <span slot-scope="scope">{{
  120. scope.row.createTime | timestampFilter
  121. }}</span>
  122. </el-table-column>
  123. <el-table-column prop="status" label="计划状态" width="100">
  124. <span slot-scope="scope">
  125. {{ scope.row.status | printPlanStatusFilter }}
  126. </span>
  127. </el-table-column>
  128. <el-table-column
  129. class-name="action-column"
  130. label="操作"
  131. width="140"
  132. fixed="right"
  133. >
  134. <template slot-scope="scope">
  135. <el-button
  136. v-if="checkPrivilege('link', 'preview')"
  137. class="btn-primary"
  138. type="text"
  139. @click="toPreview(scope.row)"
  140. >查看</el-button
  141. >
  142. <el-button
  143. class="btn-primary"
  144. type="text"
  145. @click="toEdit(scope.row)"
  146. v-if="
  147. scope.row.createId === curUserId &&
  148. scope.row.status === 'NEW' &&
  149. checkPrivilege('link', 'edit')
  150. "
  151. >修改</el-button
  152. >
  153. <el-button
  154. class="btn-danger"
  155. type="text"
  156. @click="toDelete(scope.row)"
  157. v-if="
  158. scope.row.createId === curUserId &&
  159. scope.row.status === 'NEW' &&
  160. checkPrivilege('link', 'delete')
  161. "
  162. >删除</el-button
  163. >
  164. <el-button
  165. class="btn-danger"
  166. type="text"
  167. @click="toFinish(scope.row)"
  168. v-if="
  169. scope.row.status !== 'END' && checkPrivilege('link', 'Finish')
  170. "
  171. >结束</el-button
  172. >
  173. </template>
  174. </el-table-column>
  175. </el-table>
  176. <div class="part-page">
  177. <el-pagination
  178. background
  179. layout="total, sizes, prev, pager, next, jumper"
  180. :pager-count="5"
  181. :current-page="current"
  182. :total="total"
  183. :page-size="size"
  184. @current-change="toPage"
  185. @size-change="pageSizeChange"
  186. >
  187. </el-pagination>
  188. </div>
  189. </div>
  190. <!-- ModifyPrintPlan -->
  191. <modify-print-plan
  192. v-if="checkPrivilege('link', 'edit') || checkPrivilege('button', 'add')"
  193. ref="ModifyPrintPlan"
  194. :instance="curPrintPlan"
  195. :edit-type="editType"
  196. @modified="getList"
  197. ></modify-print-plan>
  198. <!-- PrintPlanDetail -->
  199. <print-plan-detail
  200. v-if="checkPrivilege('link', 'preview')"
  201. ref="PrintPlanDetail"
  202. :plan="curPrintPlan"
  203. ></print-plan-detail>
  204. </div>
  205. </template>
  206. <script>
  207. import { printPlanListPage, removePrintPlan, finishPrintPlan } from "../api";
  208. import { PRINT_PLAN_STATUS } from "@/constants/enumerate";
  209. import pickerOptions from "@/constants/datePickerOptions";
  210. import ModifyPrintPlan from "../components/ModifyPrintPlan";
  211. import PrintPlanDetail from "../components/PrintPlanDetail.vue";
  212. export default {
  213. name: "print-plan-manage",
  214. components: { ModifyPrintPlan, PrintPlanDetail },
  215. data() {
  216. return {
  217. filter: {
  218. semesterId: "",
  219. examId: "",
  220. printPlanIdList: [],
  221. status: "",
  222. startTime: "",
  223. endTime: "",
  224. },
  225. current: 1,
  226. size: this.GLOBAL.pageSize,
  227. total: 0,
  228. dataList: [],
  229. curPrintPlan: {},
  230. editType: "ADD",
  231. PRINT_PLAN_STATUS,
  232. curUserId: this.$ls.get("user", { id: "" }).id,
  233. // date-picker
  234. createTime: [],
  235. pickerOptions,
  236. };
  237. },
  238. mounted() {
  239. // this.search();
  240. },
  241. methods: {
  242. async getList() {
  243. if (!this.checkPrivilege("list", "list")) return;
  244. const datas = {
  245. ...this.filter,
  246. pageNumber: this.current,
  247. pageSize: this.size,
  248. };
  249. if (this.createTime) {
  250. datas.startTime = this.createTime[0];
  251. datas.endTime = this.createTime[1];
  252. }
  253. const data = await printPlanListPage(datas);
  254. this.dataList = data.records;
  255. this.total = data.total;
  256. },
  257. toPage(page) {
  258. this.current = page;
  259. this.getList();
  260. },
  261. search() {
  262. this.toPage(1);
  263. },
  264. toAdd() {
  265. this.curPrintPlan = {};
  266. this.editType = "ADD";
  267. this.$refs.ModifyPrintPlan.open();
  268. },
  269. toEdit(row) {
  270. this.curPrintPlan = row;
  271. this.editType = "EDIT";
  272. this.$refs.ModifyPrintPlan.open();
  273. },
  274. toPreview(row) {
  275. this.curPrintPlan = row;
  276. this.$refs.PrintPlanDetail.open();
  277. },
  278. toDelete(row) {
  279. this.$confirm(`确定要删除印刷计划【${row.name}】吗?`, "提示", {
  280. type: "warning",
  281. })
  282. .then(async () => {
  283. await removePrintPlan(row.id);
  284. this.$message.success("删除成功!");
  285. this.deletePageLastItem();
  286. })
  287. .catch(() => {});
  288. },
  289. toFinish(row) {
  290. this.$confirm(`结束后状态无法回退,是否继续操作?`, "提示", {
  291. type: "warning",
  292. })
  293. .then(async () => {
  294. await finishPrintPlan(row.id);
  295. this.$message.success("操作成功!");
  296. this.getList();
  297. })
  298. .catch(() => {});
  299. },
  300. },
  301. };
  302. </script>