User.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493
  1. <template>
  2. <div>
  3. <div class="communal-list">
  4. <div class="communal-title">
  5. <div>员工列表</div>
  6. <div class="communal-box">
  7. <el-input @input="Inquireclick()" placeholder="公司/部门/岗位/姓名" v-model="input" clearable>
  8. </el-input>
  9. <el-button @click="Inquireclick()" type="primary"><i class="icon-sousuo"></i></el-button>
  10. </div>
  11. </div>
  12. <template>
  13. <el-table :data="tableDatas.slice((currentPage - 1) * pageSize, currentPage * pageSize)" border
  14. style="width: 100%">
  15. <el-table-column prop="num" label="序 号" width="55">
  16. <template slot-scope="scope">
  17. {{ (currentPage - 1) * pageSize + scope.$index + 1 }}
  18. </template>
  19. </el-table-column>
  20. <el-table-column prop="number" label="工号" width="80">
  21. </el-table-column>
  22. <el-table-column prop="cnName" label="姓名" width="200">
  23. </el-table-column>
  24. <el-table-column prop="companyName" label="公司名称" width="250">
  25. </el-table-column>
  26. <el-table-column prop="depName" label="部门名称" width="100">
  27. </el-table-column>
  28. <el-table-column prop="jobName" label="职位" width="140">
  29. </el-table-column>
  30. <el-table-column prop="ext" label="分机号" width="80">
  31. </el-table-column>
  32. <el-table-column prop="phone" label="手机号" width="180">
  33. </el-table-column>
  34. <el-table-column label="人事审核" prop="hrAudit">
  35. <template slot-scope="hrAudit">
  36. <span v-if="hrAudit.row.hrAudit == 1">审核通过</span>
  37. <span v-else-if="hrAudit.row.hrAudit == 2">审核未通过</span>
  38. <span v-else>
  39. <a style="color: cornflowerblue;" @click="hrAuditBtn(hrAudit.row.id, 1)">通过</a>
  40. <a style="color: red;" @click="hrAuditBtn(hrAudit.row.id, 2)">拒绝</a>
  41. </span>
  42. </template>
  43. </el-table-column>
  44. <el-table-column label="操作" width="180">
  45. <template slot-scope="scope">
  46. <el-button size="mini" @click="upDate(scope.$index, scope.row)">编辑</el-button>
  47. <el-button size="mini" type="danger" @click="del(scope.$index, scope.row)">删除</el-button>
  48. </template>
  49. </el-table-column>
  50. </el-table>
  51. </template>
  52. <div class="block">
  53. <el-pagination align='center' @size-change="handleSizeChange" @current-change="handleCurrentChange"
  54. :current-page="currentPage" :page-sizes="[10, 15, 20]" :page-size="pageSize"
  55. layout="total, sizes, prev, pager, next" :total="tableDatas.length">
  56. </el-pagination>
  57. </div>
  58. </div>
  59. <el-dialog title="修改员工" :visible.sync="upUserVisible" width="30%" :before-close="handleClose">
  60. <div>
  61. <el-form :model="upData" :rules="rules" ref="upData" label-width="100px" class="demo-ruleForm">
  62. <el-form-item label="姓名" prop="cnName">
  63. <el-input placeholder="" v-model="upData.cnName" :disabled="true">
  64. </el-input>
  65. </el-form-item>
  66. <el-form-item label="工号" prop="Number">
  67. <el-input placeholder="请输入内容" v-model="upData.Number">
  68. </el-input>
  69. </el-form-item>
  70. <el-form-item label="分机号" prop="Ext">
  71. <el-input placeholder="请输入内容" v-model="upData.Ext">
  72. </el-input>
  73. </el-form-item>
  74. <el-form-item label="公司" prop="CompanyId">
  75. <el-select v-model="upData.CompanyId" filterable placeholder="请选择公司" @change="companyChange">
  76. <el-option v-for="item in companyData" :key="item.id" :label="item.companyName"
  77. :value="item.id">
  78. </el-option>
  79. </el-select>
  80. </el-form-item>
  81. <el-form-item label="部门" prop="DepId">
  82. <el-select v-model="upData.DepId" filterable placeholder="请选择部门" @change="depChange">
  83. <el-option v-for="item in depData" :key="item.id" :label="item.depName" :value="item.id">
  84. </el-option>
  85. </el-select>
  86. </el-form-item>
  87. <el-form-item label="职位" prop="JobPostId">
  88. <el-select v-model="upData.JobPostId" filterable placeholder="请选择职位">
  89. <el-option v-for="item in JobData" :key="item.id" :label="item.jobName" :value="item.id">
  90. </el-option>
  91. </el-select>
  92. </el-form-item>
  93. <el-form-item label="试用期" prop="UsePeriod">
  94. <el-input type="textarea" :rows="3" placeholder="请输入内容" v-model="upData.UsePeriod"></el-input>
  95. </el-form-item>
  96. <el-form-item label="人事审核" prop="HrAudit">
  97. <el-select v-model="upData.HrAudit" filterable placeholder="请选择状态">
  98. <el-option v-for="item in HrAuditSelect" :key="item.value" :label="item.label"
  99. :value="item.value">
  100. </el-option>
  101. </el-select>
  102. </el-form-item>
  103. </el-form>
  104. </div>
  105. <span slot="footer" class="dialog-footer">
  106. <el-button @click="upUserVisible = false">取 消</el-button>
  107. <el-button type="primary" @click="upBtn">确 定</el-button>
  108. </span>
  109. </el-dialog>
  110. </div>
  111. </template>
  112. <script>
  113. import { co, el } from '@fullcalendar/core/internal-common';
  114. import { del } from 'vue';
  115. export default {
  116. data() {
  117. return {
  118. rules: {
  119. Number: [
  120. { required: true, message: '请输入工号', trigger: 'blur' },
  121. ],
  122. CompanyId: [
  123. { required: true, message: '请选择所属公司', trigger: 'blur' },
  124. ],
  125. DepId: [
  126. { required: true, message: '请选择所属部门', trigger: 'change' }
  127. ],
  128. JobPostId: [
  129. { required: true, message: '请选择所属职位', trigger: 'change' }
  130. ],
  131. },
  132. tableDatas: [],
  133. tableData: [],
  134. companyData: [],
  135. depData: [],
  136. JobData: [],
  137. currentPage: 1, // 当前页码
  138. pageSize: 15,// 每页的数据条数
  139. input: '',
  140. token: '',
  141. userId: 0,
  142. upUserVisible: false,
  143. upData: {
  144. Id: 0,
  145. Number: '',
  146. CompanyId: 0,
  147. DepId: 0,
  148. JobPostId: 0,
  149. Ext: '',
  150. UsePeriod: '',
  151. HrAudit: 0
  152. },
  153. HrAuditSelect: [{
  154. value: 0,
  155. label: '未审核'
  156. },
  157. {
  158. value: 1,
  159. label: '已通过'
  160. },
  161. {
  162. value: 2,
  163. label: '已拒绝'
  164. },]
  165. }
  166. },
  167. methods: {
  168. //每页条数改变时触发 选择一页显示多少行
  169. handleSizeChange(val) {
  170. this.currentPage = 1;
  171. this.pageSize = val;
  172. },
  173. //当前页改变时触发 跳转其他页
  174. handleCurrentChange(val) {
  175. this.currentPage = val;
  176. },
  177. //部门数据查询
  178. Department(companyId) {
  179. var url = "/api/System/QueryDepartmentList"
  180. var that = this
  181. that.depData = [];
  182. that.$axios({
  183. method: 'post',
  184. url: url,
  185. headers: {
  186. Authorization: 'Bearer ' + this.token
  187. },
  188. data: {
  189. portType: 1,
  190. CompanyId: companyId
  191. }
  192. }).then(function (res) {
  193. if (res.data.code == 200) {
  194. that.depData = res.data.data;
  195. }
  196. })
  197. },
  198. //公司数据查询
  199. company() {
  200. var url = "/api/System/getCompanyList"
  201. var that = this
  202. that.$axios({
  203. method: 'post',
  204. url: url,
  205. headers: {
  206. Authorization: 'Bearer ' + this.token
  207. },
  208. data: {
  209. portType: 1,
  210. }
  211. }).then(function (res) {
  212. if (res.data.code == 200) {
  213. that.companyData = res.data.data;
  214. }
  215. })
  216. },
  217. companyChange(event) {
  218. this.upData.DepId = null;
  219. this.upData.JobPostId = null;
  220. this.Department(event)
  221. this.Job(event, 0)
  222. },
  223. depChange(event) {
  224. this.upData.JobPostId = null;
  225. this.Job(this.upData.CompanyId, event)
  226. },
  227. //职位数据查询
  228. Job(companyId, depId) {
  229. var url = "/api/System/QueryJobPost"
  230. var that = this
  231. that.JobData = [];
  232. that.$axios({
  233. method: 'post',
  234. url: url,
  235. headers: {
  236. Authorization: 'Bearer ' + this.token
  237. },
  238. data: {
  239. portType: 1,
  240. CompanyId: companyId,
  241. DepId: depId
  242. }
  243. }).then(function (res) {
  244. if (res.data.code == 200) {
  245. that.JobData = res.data.data;
  246. }
  247. })
  248. },
  249. user() {
  250. var url = "/api/System/QueryUserList"
  251. var that = this
  252. this.$axios({
  253. method: 'post',
  254. url: url,
  255. headers: {
  256. Authorization: 'Bearer ' + this.token
  257. },
  258. data: {
  259. portType: 1,
  260. }
  261. }).then(function (res) {
  262. console.log(res)
  263. if (res.data.code == 200) {
  264. that.tableDatas = res.data.data;
  265. that.tableData = that.tableDatas
  266. if (that.tableDatas.slice((that.currentPage - 1) * that.pageSize, that.currentPage * that.pageSize).length == 0) {
  267. if (that.currentPage > 1) {
  268. that.currentPage = that.currentPage - 1;
  269. }
  270. }
  271. }
  272. })
  273. },
  274. Inquireclick() {
  275. var newarr = [];
  276. if (this.input == "") {
  277. newarr = this.tableData;
  278. } else {
  279. for (var i = 0; i < this.tableData.length; i++) {
  280. if (this.tableData[i].cnName.indexOf(this.input) != -1) {
  281. newarr.push(this.tableData[i]);
  282. } else if (this.tableData[i].companyName.indexOf(this.input) != -1) {
  283. newarr.push(this.tableData[i]);
  284. } else if (this.tableData[i].depName.indexOf(this.input) != -1) {
  285. newarr.push(this.tableData[i]);
  286. } else if (this.tableData[i].jobName.indexOf(this.input) != -1) {
  287. newarr.push(this.tableData[i]);
  288. }
  289. }
  290. }
  291. this.tableDatas = newarr;
  292. this.currentPage = 1;
  293. },
  294. //#region 修改操作
  295. upDate(index, row) {
  296. this.upUserVisible = true;
  297. this.upData.cnName = row.cnName;
  298. this.upData.Id = row.id;
  299. this.upData.Number = row.number;
  300. this.upData.CompanyId = row.companyId;
  301. this.upData.DepId = row.depId;
  302. this.upData.JobPostId = row.jobPostId;
  303. this.upData.Ext = row.ext;
  304. this.upData.UsePeriod = row.usePeriod;
  305. this.upData.HrAudit = row.hrAudit;
  306. this.Job(row.companyId, row.depId)
  307. },
  308. upBtn() {
  309. this.$refs.upData.validate((valid) => {
  310. if (valid) {
  311. var that = this
  312. if (that.upData.DepId == "" || that.upData.DepId == undefined) {
  313. that.$message.error("部门不能为空");
  314. return
  315. }
  316. if (that.upData.CompanyId == "") {
  317. that.$message.error("公司不能为空");
  318. return
  319. }
  320. if (that.upData.JobPostId == "") {
  321. that.$message.error("岗位不能为空");
  322. return
  323. }
  324. if (that.upData.Number == "") {
  325. that.$message.error("工号不能为空");
  326. return
  327. }
  328. console.log(that.upData.Ext)
  329. if (that.upData.Ext == null || that.upData.Ext == undefined) that.upData.Ext = ""
  330. if (that.upData.UsePeriod == null || that.upData.UsePeriod == undefined) that.upData.UsePeriod = ""
  331. var url = "/api/System/EditUser"
  332. that.$axios({
  333. method: 'post',
  334. url: url,
  335. headers: {
  336. Authorization: 'Bearer ' + that.token
  337. },
  338. data: that.upData
  339. }).then(function (res) {
  340. console.log(res)
  341. if (res.data.code == 200) {
  342. that.$message({
  343. message: '修改成功',
  344. type: 'success'
  345. });
  346. that.upUserVisible = false;
  347. that.user();
  348. } else {
  349. that.$message.error('修改失败!');
  350. }
  351. })
  352. } else {
  353. this.$message.error('请完善信息在保存!');
  354. return false;
  355. }
  356. })
  357. },
  358. //关闭修改框
  359. handleClose(done) {
  360. done();
  361. },
  362. //#endregion
  363. del(index, row) {
  364. this.$confirm('此操作将删除该员工, 是否继续?', '提示', {
  365. confirmButtonText: '确定',
  366. cancelButtonText: '取消',
  367. type: 'warning'
  368. }).then(() => {
  369. var url = "/api/System/PostUserDelById"
  370. var that = this
  371. this.$axios({
  372. method: 'post',
  373. url: url,
  374. headers: {
  375. Authorization: 'Bearer ' + this.token
  376. },
  377. data: {
  378. Id: row.id,
  379. }
  380. }).then(function (res) {
  381. console.log(res)
  382. if (res.data.code == 200) {
  383. that.$message({
  384. type: 'success',
  385. message: '删除成功!'
  386. });
  387. that.user();
  388. } else {
  389. that.$message.error(res.data.msg);
  390. }
  391. })
  392. }).catch(() => {
  393. this.$message({
  394. type: 'info',
  395. message: '操作已取消!'
  396. });
  397. });
  398. },
  399. hrAuditBtn(id, HrAudit) {
  400. debugger
  401. this.$confirm('是否进行此操作?', '提示', {
  402. confirmButtonText: '确定',
  403. cancelButtonText: '取消',
  404. type: 'warning'
  405. }).then(() => {
  406. var url = "/api/System/PersonnelAudit"
  407. var that = this
  408. this.$axios({
  409. method: 'post',
  410. url: url,
  411. headers: {
  412. Authorization: 'Bearer ' + this.token
  413. },
  414. data: {
  415. Id: id,
  416. isAudit: HrAudit
  417. }
  418. }).then(function (res) {
  419. console.log(res)
  420. if (res.data.code == 200) {
  421. that.$message({
  422. type: 'success',
  423. message: '操作成功!'
  424. });
  425. that.user();
  426. } else {
  427. that.$message.error(res.data.msg);
  428. }
  429. })
  430. }).catch(() => {
  431. debugger
  432. this.$message({
  433. type: 'info',
  434. message: '操作已取消!'
  435. });
  436. });
  437. }
  438. //#endregion
  439. },
  440. mounted() {
  441. this.token = JSON.parse(localStorage.getItem('userinif')).token;
  442. this.userId = JSON.parse(localStorage.getItem('userinif')).userInfo.userId
  443. console.log(this.token)
  444. this.Department(0);
  445. this.company();
  446. //this.Job();
  447. this.user();
  448. }
  449. }
  450. </script>
  451. <style>
  452. .communal-list {
  453. background-color: #fff;
  454. padding: 10px;
  455. box-shadow: 0 0 5px #0005;
  456. border-radius: 10px;
  457. }
  458. .communal-title {
  459. display: flex;
  460. font-size: 17px;
  461. font-weight: 600;
  462. color: #555;
  463. margin-top: 8px;
  464. margin-bottom: 2px;
  465. justify-content: space-between;
  466. align-items: center;
  467. }
  468. .communal-box {
  469. display: flex;
  470. }
  471. .communal-box>button {
  472. margin-left: 10px;
  473. padding: 8px 20px;
  474. }
  475. </style>