recruitment-detail.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366
  1. <style scoped>
  2. .user-panel {
  3. margin: 10px auto;
  4. }
  5. </style>
  6. <template>
  7. <el-dialog
  8. :visible.sync="showDialog"
  9. :title="title"
  10. :modal-append-to-body="false"
  11. style="text-align: left"
  12. @close="closeDialog"
  13. :close-on-click-modal="false"
  14. >
  15. <div class="user-panel" v-loading="loading">
  16. <el-form
  17. ref="form"
  18. :model="formModel"
  19. :rules="ruleValidate"
  20. :label-width="'100px'"
  21. >
  22. <el-row>
  23. <el-col :span="12">
  24. <el-form-item label="企业" prop="companyId">
  25. <el-select-tree
  26. :props="companyProps"
  27. :options="companyResult"
  28. v-model="formModel.companyId"
  29. style="width:300px;"
  30. size="mediumn"
  31. ></el-select-tree>
  32. </el-form-item>
  33. </el-col>
  34. <el-col :span="12">
  35. <el-form-item label="招聘地区" prop="area">
  36. <el-select-tree
  37. :props="areaProps"
  38. :options="areaResult"
  39. v-model="formModel.area"
  40. style="width:300px;"
  41. size="mediumn"
  42. ></el-select-tree>
  43. </el-form-item>
  44. </el-col>
  45. </el-row>
  46. <el-row>
  47. <el-col :span="12">
  48. <el-form-item label="岗位" prop="title">
  49. <el-input
  50. v-model="formModel.title"
  51. placeholder="请输入岗位"
  52. style="width: 300px"
  53. ></el-input>
  54. </el-form-item>
  55. </el-col>
  56. <el-col :span="12">
  57. <el-form-item label="岗位分类" prop="workCategoryId">
  58. <el-select-tree
  59. :props="workCategoryProps"
  60. :options="workCategoryResult"
  61. v-model="formModel.workCategoryId"
  62. style="width:300px;"
  63. size="mediumn"
  64. ></el-select-tree>
  65. </el-form-item>
  66. </el-col>
  67. </el-row>
  68. <el-row>
  69. <el-col :span="12">
  70. <el-form-item label="招聘人数" prop="positionNumber">
  71. <el-input
  72. v-model="formModel.positionNumber"
  73. placeholder="请输入招聘人数"
  74. style="width: 300px"
  75. ></el-input>
  76. </el-form-item>
  77. </el-col>
  78. <el-col :span="12">
  79. <el-form-item label="工作年限" prop="workYear">
  80. <el-select v-model="formModel.workYear" filterable placeholder="请选择工作年限" style="width: 300px">
  81. <el-option v-for="workYear in workYearResult" :key="workYear.value" :label="workYear.name" :value="workYear.id"></el-option>
  82. </el-select>
  83. </el-form-item>
  84. </el-col>
  85. </el-row>
  86. <el-row>
  87. <el-col :span="12">
  88. <el-form-item label="学历要求" prop="education">
  89. <el-select
  90. v-model="formModel.education"
  91. filterable
  92. placeholder="请选择学历要求"
  93. style="width: 300px"
  94. >
  95. <el-option
  96. v-for="education in educationResult"
  97. :key="education.value"
  98. :label="education.name"
  99. :value="education.id"
  100. ></el-option>
  101. </el-select>
  102. </el-form-item>
  103. </el-col>
  104. <el-col :span="12">
  105. <el-form-item label="性别要求" prop="positionSex">
  106. <el-select
  107. v-model="formModel.positionSex"
  108. filterable
  109. placeholder="请选择性别要求"
  110. style="width: 300px"
  111. >
  112. <el-option
  113. v-for="positionSex in positionSexResult"
  114. :key="positionSex.value"
  115. :label="positionSex.name"
  116. :value="positionSex.id"
  117. ></el-option>
  118. </el-select>
  119. </el-form-item>
  120. </el-col>
  121. </el-row>
  122. <el-row>
  123. <el-col :span="12">
  124. <el-form-item label="薪资" prop="wageType">
  125. <el-select v-model="formModel.wageType" filterable placeholder="请选择薪资" style="width:300px">
  126. <el-option v-for="wageType in wageTypeResult" :key="wageType.value" :label="wageType.name" :value="wageType.id"></el-option>
  127. </el-select>
  128. </el-form-item>
  129. </el-col>
  130. <el-col :span="12">
  131. <el-form-item label="地址" prop="address">
  132. <el-input
  133. v-model="formModel.address"
  134. placeholder="请输入地址"
  135. style="width: 300px"
  136. ></el-input>
  137. </el-form-item>
  138. </el-col>
  139. </el-row>
  140. <el-row>
  141. <el-col :span="12">
  142. <el-form-item label="岗位描述" prop="positionMessage">
  143. <el-input
  144. type="textarea"
  145. :rows="4"
  146. v-model="formModel.positionMessage"
  147. placeholder="请输入岗位描述"
  148. style="width: 300px"
  149. ></el-input>
  150. </el-form-item>
  151. </el-col>
  152. <el-col :span="12">
  153. <el-form-item label="任职要求" prop="requirements">
  154. <el-input
  155. type="textarea"
  156. :rows="4"
  157. v-model="formModel.requirements"
  158. placeholder="请输入任职要求"
  159. style="width: 300px"
  160. ></el-input>
  161. </el-form-item>
  162. </el-col>
  163. </el-row>
  164. </el-form>
  165. </div>
  166. <span slot="footer" class="dialog-footer">
  167. <el-button @click="closeDialog">取 消</el-button>
  168. <el-button type="primary" @click="handleSubmit" :loading="submitting">确 定</el-button>
  169. </span>
  170. </el-dialog>
  171. </template>
  172. <script>
  173. import Constant from "@/constant";
  174. import recruitmentApi from "@/api/job/recruitment";
  175. import dataDictionaryApi from "@/api/sys/dataDictionary";
  176. import cityApi from "@/api/base/city";
  177. import companyApi from "@/api/base/company";
  178. import workCategoryApi from "@/api/job/workCategory";
  179. import SelectTree from "@/components/SelectTree";
  180. export default {
  181. props: ["businessKey", "title"],
  182. data() {
  183. return {
  184. formModel: {},
  185. ruleValidate: {
  186. wageType: [{ required: true, message: "薪资不能为空", trigger: "blur" }],
  187. workCategoryId: [{ required: true, message: "岗位分类不能为空", trigger: "blur" }],
  188. companyId: [{ required: true, message: "企业不能为空", trigger: "blur" }],
  189. title: [{ required: true, message: "岗位不能为空", trigger: "blur" }],
  190. area: [{ required: true, message: "招聘地区不能为空", trigger: "blur"}],
  191. address: [{ required: true, message: "地址不能为空", trigger: "blur" }],
  192. positionMessage: [{ required: true, message: "职位描述不能为空", trigger: "blur" }],
  193. requirements: [{ required: true, message: "任职要求不能为空", trigger: "blur" }],
  194. positionNumber: [{ required: true, message: "求职人数不能为空", trigger: "blur" }],
  195. workYear: [{ required: true, message: "工作年限不能为空", trigger: "blur" }],
  196. education: [{ required: true, message: "学历要求不能为空", trigger: "blur" }],
  197. positionSex: [{ required: true, message: "性别要求不能为空", trigger: "blur" }],
  198. contactPerson: [{ required: true, message: "联系人不能为空", trigger: "blur" }],
  199. tel: [{ required: true, message: "联系方式不能为空", trigger: "blur" }],
  200. status: [{ required: true, message: "状态(关闭,开启等)不能为空", trigger: "blur" }],
  201. },
  202. showDialog: true,
  203. loading: false,
  204. submitting: false,
  205. educationResult: [],
  206. positionSexResult: [],
  207. areaResult: [],
  208. companyResult: [],
  209. wageTypeResult: [],
  210. workYearResult: [],
  211. workCategoryResult: [],
  212. areaProps: {
  213. value: "id",
  214. label: "cityName"
  215. },
  216. companyProps: {
  217. value: "id",
  218. label: "name"
  219. },
  220. workCategoryProps: {
  221. value: "id",
  222. label: "name"
  223. },
  224. };
  225. },
  226. created() {
  227. dataDictionaryApi
  228. .findByCatalogName({
  229. catalogName: "学历",
  230. })
  231. .then((response) => {
  232. var jsonData = response.data;
  233. this.educationResult = jsonData.data;
  234. });
  235. dataDictionaryApi
  236. .findByCatalogName({
  237. catalogName: "性别",
  238. })
  239. .then((response) => {
  240. var jsonData = response.data;
  241. this.positionSexResult = jsonData.data;
  242. });
  243. dataDictionaryApi
  244. .findByCatalogName({
  245. catalogName: "月薪范围",
  246. })
  247. .then((response) => {
  248. var jsonData = response.data;
  249. this.wageTypeResult = jsonData.data;
  250. });
  251. dataDictionaryApi
  252. .findByCatalogName({
  253. catalogName: "工作经验",
  254. })
  255. .then((response) => {
  256. var jsonData = response.data;
  257. this.workYearResult = jsonData.data;
  258. });
  259. cityApi.list().then(response=>{
  260. var jsonData = response.data;
  261. if(jsonData.result){
  262. this.areaResult = jsonData.data;
  263. }
  264. else{
  265. this.$message.error(jsonData.message + "");
  266. }
  267. });
  268. companyApi.list().then(response=>{
  269. var jsonData = response.data;
  270. if(jsonData.result){
  271. this.companyResult = jsonData.data;
  272. }
  273. else{
  274. this.$message.error(jsonData.message + "");
  275. }
  276. });
  277. workCategoryApi.listSelectTree().then(response=>{
  278. var jsonData = response.data;
  279. if(jsonData.result){
  280. this.workCategoryResult = jsonData.data;
  281. }
  282. else{
  283. this.$message.error(jsonData.message + "");
  284. }
  285. });
  286. },
  287. methods: {
  288. closeDialog() {
  289. this.$emit("close", false);
  290. },
  291. handleSubmit() {
  292. var self = this;
  293. this.$refs["form"].validate((valid) => {
  294. if (valid) {
  295. (function () {
  296. var id = self.formModel.id;
  297. if (id == null || id.length == 0) {
  298. return recruitmentApi.add(self.formModel);
  299. } else {
  300. return recruitmentApi.update(self.formModel);
  301. }
  302. })().then(function (response) {
  303. var jsonData = response.data;
  304. if (jsonData.result) {
  305. self.$message({
  306. message: "保存成功!",
  307. type: "success",
  308. });
  309. self.$emit("close", true);
  310. } else {
  311. self.$message({
  312. message: jsonData.message + "",
  313. type: "warning",
  314. });
  315. self.$emit("close", false);
  316. }
  317. });
  318. }
  319. });
  320. },
  321. },
  322. mounted: function () {
  323. var self = this;
  324. (function () {
  325. if (self.businessKey.length == 0) {
  326. return recruitmentApi.create();
  327. } else {
  328. return recruitmentApi.edit(self.businessKey);
  329. }
  330. })()
  331. .then((response) => {
  332. var jsonData = response.data;
  333. self.loading = false;
  334. if (jsonData.result) {
  335. self.formModel = jsonData.data;
  336. } else {
  337. self.$message.error(jsonData.message + "");
  338. }
  339. })
  340. .catch((error) => {
  341. self.$message.error(error + "");
  342. });
  343. },
  344. components: {
  345. "el-select-tree": SelectTree
  346. },
  347. };
  348. </script>