recruitment-list.vue 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. <template>
  2. <div>
  3. <el-breadcrumb separator=">">
  4. <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
  5. <el-breadcrumb-item>
  6. <a href="#">系统管理</a>
  7. </el-breadcrumb-item>
  8. <el-breadcrumb-item>
  9. <a href="/job/recruitment">招聘岗位管理</a>
  10. </el-breadcrumb-item>
  11. </el-breadcrumb>
  12. <el-divider></el-divider>
  13. <!--
  14. 要resetFields起作用,必须配置:model和prop
  15. -->
  16. <el-form
  17. ref="queryForm"
  18. :model="queryModel"
  19. inline
  20. class="demo-form-inline"
  21. >
  22. <el-form-item label="企业" prop="companyId">
  23. <el-input
  24. type="text"
  25. size="mini"
  26. v-model="queryModel.companyId"
  27. ></el-input>
  28. </el-form-item>
  29. <el-form-item label="标题" prop="title">
  30. <el-input type="text" size="mini" v-model="queryModel.title"></el-input>
  31. </el-form-item>
  32. <el-form-item label="招聘所属地区" prop="area">
  33. <el-input type="text" size="mini" v-model="queryModel.area"></el-input>
  34. </el-form-item>
  35. <el-form-item label="审批状态" prop="approveStatus">
  36. <el-input
  37. type="text"
  38. size="mini"
  39. v-model="queryModel.approveStatus"
  40. ></el-input>
  41. </el-form-item>
  42. <el-form-item>
  43. <el-button
  44. type="primary"
  45. size="mini"
  46. icon="ios-search"
  47. @click="changePage(1)"
  48. :loading="loading"
  49. >查询</el-button
  50. >&nbsp;
  51. <el-button
  52. type="info"
  53. size="mini"
  54. style="margin-left: 8px"
  55. @click="handleReset('queryForm')"
  56. >重置</el-button
  57. >&nbsp;
  58. </el-form-item>
  59. </el-form>
  60. <el-divider></el-divider>
  61. <el-row class="button-group">
  62. <el-button
  63. type="primary"
  64. size="small"
  65. plain
  66. icon="el-icon-circle-plus"
  67. @click="handleAdd"
  68. >新增</el-button
  69. >
  70. <el-button
  71. type="primary"
  72. size="small"
  73. plain
  74. icon="el-icon-circle-plus"
  75. :disabled="multipleSelection.length == 0"
  76. @click="handleBatchDelete"
  77. >删除选中项</el-button
  78. >
  79. </el-row>
  80. <el-table
  81. :data="tableData"
  82. style="min-height: 400px"
  83. v-loading="loading"
  84. stripe
  85. @sort-change="sortChange"
  86. @selection-change="handleSelectionChange"
  87. >
  88. <el-table-column type="selection" width="55"></el-table-column>
  89. <el-table-column prop="companyName" label="企业" width="180"></el-table-column>
  90. <el-table-column prop="title" label="岗位" width="180"></el-table-column>
  91. <el-table-column prop="positionNumber" label="招聘人数" width="180"></el-table-column>
  92. <el-table-column prop="workYearName" label="工作年限" width="180"></el-table-column>
  93. <el-table-column prop="educationName" label="学历要求" width="180"></el-table-column>
  94. <el-table-column prop="wageTypeName" label="薪资" width="180"></el-table-column>
  95. <el-table-column prop="contactPerson" label="联系人" width="180"></el-table-column>
  96. <el-table-column prop="tel" label="联系方式" width="180"></el-table-column>
  97. <el-table-column label="操作">
  98. <template slot-scope="{row}">
  99. <el-button size="mini" type="warning" @click="handleEdit(row)">编辑</el-button>
  100. <el-button size="mini" type="danger" @click="handleDelete(row)">删除</el-button>
  101. </template>
  102. </el-table-column>
  103. </el-table>
  104. <el-pagination
  105. :current-page.sync="pageIndex"
  106. :total="totalElements"
  107. :page-sizes="pageSizeList"
  108. @current-change="changePage"
  109. @size-change="pageSizeChange"
  110. layout="total, sizes, prev, pager, next, jumper"
  111. ></el-pagination>
  112. <recruitment-detail
  113. v-if="showModal"
  114. :businessKey="businessKey"
  115. :title="modalTitle"
  116. @close="onDetailModalClose"
  117. ></recruitment-detail>
  118. </div>
  119. </template>
  120. <script>
  121. import Constant from "@/constant";
  122. import RecruitmentDetail from "./recruitment-detail";
  123. import recruitmentApi from "@/api/job/recruitment";
  124. import NProgress from "nprogress"; // progress bar
  125. import "nprogress/nprogress.css"; // progress bar style
  126. export default {
  127. data() {
  128. var self = this;
  129. return {
  130. queryModel: {
  131. id: "",
  132. companyId: "",
  133. title: "",
  134. area: "",
  135. address: "",
  136. position: "",
  137. positionMessage: "",
  138. requirements: "",
  139. positionNumber: "",
  140. workYear: "",
  141. education: "",
  142. positionSex: "",
  143. readTimes: "",
  144. wageType: "",
  145. isDiscussPersonally: "",
  146. contactPerson: "",
  147. tel: "",
  148. status: "",
  149. approveStatus: "",
  150. readingTimes: "",
  151. collectionTimes: "",
  152. deliveryTimes: "",
  153. createBy: "",
  154. createTime: "",
  155. updateBy: "",
  156. updateTime: "",
  157. delFlag: "",
  158. },
  159. loading: false,
  160. tableData: [],
  161. pageIndex: 1,
  162. pageSize: 10,
  163. totalPages: 0,
  164. totalElements: 0,
  165. field: "",
  166. direction: "",
  167. pageSizeList: [10, 20, 30],
  168. multipleSelection: [],
  169. showModal: false,
  170. modalTitle: "",
  171. businessKey: "",
  172. };
  173. },
  174. methods: {
  175. changePage(pageIndex) {
  176. var self = this;
  177. self.loading = true;
  178. self.pageIndex = pageIndex;
  179. var formData = new FormData();
  180. formData.append("pageIndex", self.pageIndex);
  181. formData.append("pageSize", self.pageSize);
  182. formData.append("id", self.queryModel.id);
  183. formData.append("companyId", self.queryModel.companyId);
  184. formData.append("title", self.queryModel.title);
  185. formData.append("area", self.queryModel.area);
  186. formData.append("address", self.queryModel.address);
  187. formData.append("position", self.queryModel.position);
  188. formData.append("positionMessage", self.queryModel.positionMessage);
  189. formData.append("requirements", self.queryModel.requirements);
  190. formData.append("positionNumber", self.queryModel.positionNumber);
  191. formData.append("workYear", self.queryModel.workYear);
  192. formData.append("education", self.queryModel.education);
  193. formData.append("positionSex", self.queryModel.positionSex);
  194. formData.append("readTimes", self.queryModel.readTimes);
  195. formData.append("wageType", self.queryModel.wageType);
  196. formData.append(
  197. "isDiscussPersonally",
  198. self.queryModel.isDiscussPersonally
  199. );
  200. formData.append("contactPerson", self.queryModel.contactPerson);
  201. formData.append("tel", self.queryModel.tel);
  202. formData.append("status", self.queryModel.status);
  203. formData.append("approveStatus", self.queryModel.approveStatus);
  204. formData.append("readingTimes", self.queryModel.readingTimes);
  205. formData.append("collectionTimes", self.queryModel.collectionTimes);
  206. formData.append("deliveryTimes", self.queryModel.deliveryTimes);
  207. formData.append("createBy", self.queryModel.createBy);
  208. formData.append("createTime", self.queryModel.createTime);
  209. formData.append("updateBy", self.queryModel.updateBy);
  210. formData.append("updateTime", self.queryModel.updateTime);
  211. formData.append("delFlag", self.queryModel.delFlag);
  212. if (this.field != null) {
  213. formData.append("field", this.field);
  214. }
  215. if (this.direction != null) {
  216. formData.append("direction", this.direction);
  217. }
  218. recruitmentApi
  219. .pageList(formData)
  220. .then(function (response) {
  221. self.loading = false;
  222. var jsonData = response.data.data;
  223. self.tableData = jsonData.data;
  224. self.totalPages = jsonData.totalPages;
  225. self.totalElements = jsonData.recordsTotal;
  226. })
  227. .catch((error) => {
  228. self.loading = false;
  229. // self.$message.error(error + "");
  230. });
  231. },
  232. pageSizeChange(pageSize) {
  233. this.pageSize = pageSize;
  234. this.$nextTick(() => {
  235. this.changePage(this.pageIndex);
  236. });
  237. },
  238. sortChange(data) {
  239. this.field = data.column.field;
  240. this.direction = data.order;
  241. this.changePage(this.pageIndex);
  242. },
  243. handleSelectionChange(val) {
  244. this.multipleSelection = val;
  245. },
  246. handleReset(name) {
  247. this.$refs[name].resetFields();
  248. },
  249. handleAdd() {
  250. this.modalTitle = "新增";
  251. this.businessKey = "";
  252. this.showModal = true;
  253. },
  254. handleEdit(record) {
  255. this.modalTitle = "编辑";
  256. this.businessKey = record.id;
  257. this.showModal = true;
  258. },
  259. handleDelete(record) {
  260. var self = this;
  261. self
  262. .$confirm("是否确认删除?", "提示", {
  263. confirmButtonText: "确定",
  264. cancelButtonText: "取消",
  265. type: "warning",
  266. })
  267. .then(() => {
  268. recruitmentApi.remove(record.id).then(function (response) {
  269. var jsonData = response.data;
  270. if (jsonData.result) {
  271. // var index = self.tableData.indexOf(record);
  272. // self.tableData.splice(index, 1);
  273. self.changePage(self.pageIndex);
  274. self.$message({
  275. type: "success",
  276. message: "删除成功!",
  277. });
  278. }
  279. });
  280. });
  281. },
  282. handleBatchDelete() {
  283. var self = this;
  284. var idList = this.multipleSelection.map((record) => {
  285. return record.id;
  286. });
  287. this.$confirm("是否确认删除选中项?", "提示", {
  288. confirmButtonText: "确定",
  289. cancelButtonText: "取消",
  290. type: "warning",
  291. }).then(() => {
  292. recruitmentApi.batchRemove(idList).then(function (response) {
  293. var jsonData = response.data;
  294. if (jsonData.result) {
  295. self.changePage(self.pageIndex);
  296. self.$message({
  297. type: "success",
  298. message: "删除成功!",
  299. });
  300. }
  301. });
  302. });
  303. },
  304. onDetailModalClose(refreshed) {
  305. //保存成功后回调
  306. this.showModal = false;
  307. if (refreshed) {
  308. this.changePage(this.pageIndex);
  309. }
  310. },
  311. },
  312. mounted: function () {
  313. this.changePage(1);
  314. },
  315. components: {
  316. "recruitment-detail": RecruitmentDetail,
  317. },
  318. };
  319. </script>
  320. <style lang="scss" scoped>
  321. .el-breadcrumb {
  322. margin: 10px;
  323. line-height: 20px;
  324. }
  325. .el-divider {
  326. margin: 5px 0;
  327. }
  328. .demo-form-inline {
  329. margin-left: 10px;
  330. text-align: left;
  331. }
  332. .button-group {
  333. margin-left: 10px;
  334. text-align: left;
  335. }
  336. </style>