48d10fe49fb5aa8e900554cc18f41687a6f5e52b.svn-base 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565
  1. <template>
  2. <el-container>
  3. <el-header>
  4. <el-form :inline="true" size="mini" class="demo-form-inline">
  5. <el-form-item label="姓名">
  6. <el-input v-model="searchParam.persName" clearable placeholder="姓名" style="width: 130px;"></el-input>
  7. </el-form-item>
  8. <el-form-item label="是否在职">
  9. <el-select v-model="searchParam.isWork" clearable placeholder="是否在职" style="width: 130px;margin-left:10px;margin-right:15px">
  10. <el-option label="是" value="0"></el-option>
  11. <el-option label="否" value="1"></el-option>
  12. </el-select>
  13. </el-form-item>
  14. <el-form-item label="是否公务员(参公)">
  15. <el-select v-model="searchParam.isCvlSrvnts" clearable placeholder="是否公务员(参公)" style="width: 130px;margin-left:10px;margin-right:15px">
  16. <el-option label="是" value="1"></el-option>
  17. <el-option label="否" value="2"></el-option>
  18. </el-select>
  19. </el-form-item>
  20. <el-form-item label="从事专业">
  21. <el-input v-model="searchParam.specialty" clearable placeholder="从事专业" style="width: 130px;margin-left:10px;margin-right:15px"></el-input>
  22. </el-form-item>
  23. <el-form-item label="专家岗位">
  24. <el-select v-model="searchParam.expertPost" clearable placeholder="专家岗位" style="width: 130px;margin-left:10px;margin-right:15px">
  25. <el-option label="前期设计" value="1"></el-option>
  26. <el-option label="建设管理" value="2"></el-option>
  27. <el-option label="计划管理" value="3"></el-option>
  28. <el-option label="财务管理" value="4"></el-option>
  29. <el-option label="质量管理" value="5"></el-option>
  30. <el-option label="运行管理" value="6"></el-option>
  31. <el-option label="水土保持" value="7"></el-option>
  32. <el-option label="水文水资源" value="8"></el-option>
  33. <el-option label="安全生产" value="9"></el-option>
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item label="职称">
  37. <el-input v-model="searchParam.dppost" clearable placeholder="职称" style="width: 130px;margin-left:10px;margin-right:15px"></el-input>
  38. </el-form-item>
  39. <el-button type="primary" icon="el-icon-plus" style="float:right;margin-left:10px;" plain @click="showDialog">新增</el-button>
  40. <el-button type="primary" icon="el-icon-document" style="float:right;margin-left:10px;" plain @click="exportExcel">导出</el-button>
  41. <el-button type="primary" icon="el-icon-search" style="float:right;margin-left:10px;" plain @click="search">查询</el-button>
  42. </el-form>
  43. </el-header>
  44. <el-main class="main-container">
  45. <el-table
  46. :data="tableData"
  47. border
  48. v-loading="loading"
  49. ref="expert"
  50. style="width: 100%">
  51. <el-table-column align="center" type="index" label="序号" width="80">
  52. <template slot-scope="scope">{{ (pageIndex - 1) * pageSize + (scope.$index + 1) }}</template>
  53. </el-table-column>
  54. <el-table-column
  55. show-overflow-tooltip
  56. prop="persName"
  57. width="100"
  58. label="姓名"
  59. align="center">
  60. </el-table-column>
  61. <el-table-column
  62. show-overflow-tooltip
  63. prop="sex"
  64. label="性别"
  65. align="center"
  66. width="50">
  67. <template slot-scope="scope">
  68. <span v-if="scope.row.sex=='2'">女</span>
  69. <span v-if="scope.row.sex=='1'">男</span>
  70. </template>
  71. </el-table-column>
  72. <el-table-column
  73. show-overflow-tooltip
  74. width="80"
  75. prop="age"
  76. align="center"
  77. label="年龄">
  78. </el-table-column>
  79. <el-table-column
  80. show-overflow-tooltip
  81. prop="isWork"
  82. align="center"
  83. width="120"
  84. label="是否在职">
  85. <template slot-scope="scope">
  86. <span v-if="scope.row.isWork=='0'">在职</span>
  87. <span v-if="scope.row.isWork=='1'">不在职</span>
  88. </template>
  89. </el-table-column>
  90. <el-table-column
  91. show-overflow-tooltip
  92. prop="isCvlSrvnts"
  93. align="center"
  94. width="200"
  95. label="是否为公务员(参公)">
  96. <template slot-scope="scope">
  97. <span v-if="scope.row.isCvlSrvnts=='1'">是</span>
  98. <span v-if="scope.row.isCvlSrvnts=='2'">否</span>
  99. </template>
  100. </el-table-column>
  101. <el-table-column
  102. show-overflow-tooltip
  103. align="center"
  104. prop="specialty"
  105. width="200"
  106. label="从事专业">
  107. </el-table-column>
  108. <el-table-column
  109. show-overflow-tooltip
  110. align="center"
  111. prop="admDuty"
  112. width="160"
  113. label="职务">
  114. </el-table-column>
  115. <el-table-column
  116. show-overflow-tooltip
  117. align="center"
  118. prop="dppost"
  119. width="180"
  120. label="职称">
  121. </el-table-column>
  122. <el-table-column
  123. show-overflow-tooltip
  124. prop="dpnm"
  125. align="center"
  126. width="160"
  127. label="工作单位">
  128. </el-table-column>
  129. <el-table-column
  130. show-overflow-tooltip
  131. prop="expertPost"
  132. align="center"
  133. width="120"
  134. label="专家岗位">
  135. <template slot-scope="scope">
  136. <span>{{formatExpertPost(scope.row.expertPost)}}</span>
  137. </template>
  138. </el-table-column>
  139. <el-table-column
  140. show-overflow-tooltip
  141. prop="mobilenumb"
  142. align="center"
  143. width="160"
  144. label="本人电话">
  145. </el-table-column>
  146. <el-table-column
  147. show-overflow-tooltip
  148. prop="email"
  149. align="center"
  150. width="160"
  151. label="电子邮箱">
  152. </el-table-column>
  153. <el-table-column
  154. show-overflow-tooltip
  155. prop="remark"
  156. align="center"
  157. width="160"
  158. label="备注">
  159. </el-table-column>
  160. <el-table-column
  161. prop=""
  162. fixed="right"
  163. width="350"
  164. align="center"
  165. label="操作">
  166. <template slot-scope="scope">
  167. <el-button type="primary" size="mini" @click="editRow(scope.row)">编辑</el-button>
  168. <el-button type="danger" size="mini" @click="deleteRow(scope.row.id)">删除</el-button>
  169. </template>
  170. </el-table-column>
  171. </el-table>
  172. <el-pagination
  173. background
  174. layout="total,prev, pager, next"
  175. @size-change="handleSizeChange"
  176. @current-change="handleCurrentChange"
  177. :current-page.sync="pageIndex"
  178. :total="total">
  179. </el-pagination>
  180. </el-main>
  181. <el-dialog :title="dialogTitle+'计划'" :visible.sync="dialogVisible" width="800px">
  182. <el-form ref="form" :model="addObj" label-width="120px" size="mini" :rules="rule">
  183. <el-form-item label="姓名" prop="persName" required>
  184. <el-input v-model="addObj.persName" clearable class="item-width" ></el-input>
  185. </el-form-item>
  186. <el-form-item label="工作单位" prop="dpnm">
  187. <el-input v-model="addObj.dpnm" clearable class="item-width"></el-input>
  188. </el-form-item>
  189. <el-form-item label="性别" prop="sex">
  190. <el-select v-model="addObj.sex" clearable class="item-width">
  191. <el-option label="男" value="1"></el-option>
  192. <el-option label="女" value="2"></el-option>
  193. </el-select>
  194. </el-form-item>
  195. <el-form-item label="专家岗位" prop="expertPost">
  196. <el-select v-model="expertPostList" clearable class="item-width" multiple collapse-tags>
  197. <el-option label="前期设计" value="1"></el-option>
  198. <el-option label="建设管理" value="2"></el-option>
  199. <el-option label="计划管理" value="3"></el-option>
  200. <el-option label="财务管理" value="4"></el-option>
  201. <el-option label="质量管理" value="5"></el-option>
  202. <el-option label="运行管理" value="6"></el-option>
  203. <el-option label="水土保持" value="7"></el-option>
  204. <el-option label="水文水资源" value="8"></el-option>
  205. <el-option label="安全生产" value="9"></el-option>
  206. </el-select>
  207. </el-form-item>
  208. <el-form-item label="年龄" prop="age">
  209. <el-input v-model="addObj.age" clearable class="item-width"></el-input>
  210. </el-form-item>
  211. <el-form-item label="本人电话" prop="mobilenumb" required>
  212. <el-input v-model="addObj.mobilenumb" clearable class="item-width"></el-input>
  213. </el-form-item>
  214. <el-form-item label="是否在职" prop="isWork">
  215. <el-select v-model="addObj.isWork" clearable class="item-width">
  216. <el-option label="在职" value="0"></el-option>
  217. <el-option label="不在职" value="1"></el-option>
  218. </el-select>
  219. </el-form-item>
  220. <el-form-item label="电子邮箱" prop="email">
  221. <el-input v-model="addObj.email" clearable class="item-width"></el-input>
  222. </el-form-item>
  223. <el-form-item label="是否公务员(参公)" prop="isCvlSrvnts">
  224. <el-select v-model="addObj.isCvlSrvnts" clearable class="item-width">
  225. <el-option label="是" value="1"></el-option>
  226. <el-option label="否" value="2"></el-option>
  227. </el-select>
  228. </el-form-item>
  229. <el-form-item label="身份证号" prop="idNumber">
  230. <el-input v-model="addObj.idNumber" clearable class="item-width"></el-input>
  231. </el-form-item>
  232. <el-form-item label="从事专业" prop="specialty">
  233. <el-input v-model="addObj.specialty" clearable class="item-width"></el-input>
  234. </el-form-item>
  235. <el-form-item label="职务" prop="admDuty">
  236. <el-input v-model="addObj.admDuty" clearable class="item-width"></el-input>
  237. </el-form-item>
  238. <el-form-item label="职称" prop="dppost">
  239. <el-input v-model="addObj.dppost" clearable class="item-width"></el-input>
  240. </el-form-item>
  241. <el-form-item label="备注" prop="remark">
  242. <el-input type="textarea" v-model="addObj.remark" style="resize: none;" class="item-width"></el-input>
  243. </el-form-item>
  244. <el-form-item label="简历">
  245. <el-upload
  246. class="upload-demo"
  247. multiple
  248. ref="addUpload"
  249. :auto-upload="isAutoUpload"
  250. :show-file-list="isShowFile"
  251. :on-success="uploadSuccess"
  252. :on-change="changeFileList"
  253. :on-remove="removeFileList"
  254. :on-error="upError"
  255. :headers="header"
  256. :action="`/pdcApi/file/insert?bizId=${this.bizId}`">
  257. <el-button size="small" type="primary">点击上传</el-button>
  258. <div slot="tip" class="el-upload__tip"></div>
  259. </el-upload>
  260. </el-form-item>
  261. <div style="width:100%;height:120px;overflow:auto;" v-if="isAutoUpload">
  262. <el-table
  263. :data="fileList"
  264. border
  265. style="width: 100%">
  266. <el-table-column
  267. prop="fileName"
  268. label="文件名"
  269. align="center">
  270. </el-table-column>
  271. <el-table-column
  272. prop=""
  273. align="center"
  274. label="操作">
  275. <template slot-scope="scope">
  276. <span><a :href="scope.row.filePath" download style="color:#66b1ff">下载</a></span>&nbsp;&nbsp;
  277. <span style="color:palevioletred" @click="removeFile(scope.row.id)">删除</span>
  278. </template>
  279. </el-table-column>
  280. </el-table>
  281. </div>
  282. </el-form>
  283. <div slot="footer" class="dialog-footer" style="text-align: center">
  284. <el-button @click="dialogVisible = false" size="mini">取 消</el-button>
  285. <el-button type="primary" size="mini" @click="addExpert">确 定</el-button>
  286. </div>
  287. </el-dialog>
  288. </el-container>
  289. </template>
  290. <script>
  291. import request from '@util/gw_ajax_request'
  292. import {deleteFileById} from "@api/duChaAPI.js";
  293. import {exportModel} from "@util/gw_exportModel";
  294. export default {
  295. props: [],
  296. components: {
  297. },
  298. data() {
  299. return {
  300. header: {
  301. 'persId': localStorage.getItem('userid'),
  302. 'accessToken' : localStorage.getItem('accessToken')
  303. },
  304. expertList:[
  305. {label:"前期设计",value:"1"},
  306. {label:"建设管理", value:"2"},
  307. {label:"计划管理", value:"3"},
  308. {label:"财务管理", value:"4"},
  309. {label:"质量管理", value:"5"},
  310. {label:"运行管理", value:"6"},
  311. {label:"水土保持", value:"7"},
  312. {label:"水文水资源", value:"8"},
  313. {label:"安全生产", value:"9"}
  314. ],
  315. expertPostList:[],
  316. dialogTitle:"",
  317. dialogVisible:false,
  318. loading:false,
  319. tableData:[],
  320. pageIndex:1,
  321. pageSize:10,
  322. total:0,
  323. searchParam:{
  324. persName:"",
  325. isWork:"",
  326. isCvlSrvnts:"",
  327. specialty:"",
  328. expertPost:"",
  329. dppost:""
  330. },
  331. addObj:{
  332. },
  333. rule: {
  334. persName: [
  335. { required: true, message: '姓名不能为空', trigger: 'blur' }
  336. ],
  337. mobilenumb: [
  338. { required: true, message: '号码不能为空', trigger: 'blur' },
  339. { required: true,
  340. pattern: /^1[3|4|5|7|8][0-9]{9}$/,
  341. message: '请输入正确的号码',
  342. trigger: 'blur'
  343. }
  344. ]
  345. },
  346. bizId:"",
  347. isAutoUpload:false,
  348. isShowFile:false,
  349. fileList: [],
  350. fileCount:0,
  351. }
  352. },
  353. computed:{
  354. userId:function(){
  355. return localStorage.getItem("userid")? localStorage.getItem("userid"): '1098101939614724096'
  356. },
  357. },
  358. watch:{
  359. },
  360. mounted(){
  361. this.search();
  362. },
  363. methods:{
  364. async exportExcel() {
  365. let url = "/pdcApi/bis/insp/all/worker/pers/export";
  366. let type = "POST";
  367. let exportName = "专家库数据.xls"
  368. let result = await exportModel(type, url, exportName,JSON.stringify(this.searchParam));
  369. },
  370. formatExpertPost(val){
  371. var arr = [];
  372. if(!val){
  373. return "";
  374. }
  375. for(var i = 0;i<val.split(",").length;i++){
  376. for(var j = 0;j<this.expertList.length;j++){
  377. if(val.split(",")[i]==this.expertList[j].value){
  378. arr.push(this.expertList[j].label);
  379. }
  380. }
  381. }
  382. return arr.join(",");
  383. },
  384. deleteRow(id){
  385. var _self = this;
  386. this.$confirm('此操作将专家从列表中删除,确认删除该专家吗?', '提示', {
  387. confirmButtonText: '确定',
  388. cancelButtonText: '取消',
  389. type: 'warning'
  390. }).then(() => {
  391. request.post(`/bis/insp/all/worker/pers/delete/${id}`).then((res)=>{
  392. if(res.success){
  393. _self.search();
  394. _self.$message.success('删除成功')
  395. }else{
  396. _self.$message.error(res.message)
  397. }
  398. });
  399. })
  400. },
  401. addExpert(){
  402. var _self = this;
  403. this.addObj.expertPost = this.expertPostList.length>0?this.expertPostList.join(","):null;
  404. this.$refs["form"].validate(valid =>{
  405. if(valid){
  406. request.post(`/bis/insp/all/worker/pers`,this.addObj).then(res =>{
  407. if(res.success) {
  408. _self.bizId = res.data.id;
  409. _self.addObj = {};
  410. _self.dialogVisible = false;
  411. if(_self.fileList.length>0 && !_self.isAutoUpload){
  412. _self.$nextTick(() => {
  413. _self.$refs.addUpload.submit();
  414. });
  415. }else{
  416. _self.search();
  417. }
  418. }else{
  419. _self.$message.error(res.message);
  420. }
  421. })
  422. }else{
  423. return false;
  424. }
  425. })
  426. },
  427. editRow(row){
  428. this.bizId = row.id;
  429. this.isAutoUpload = true;
  430. this.isShowFile = false;
  431. this.addObj = {};
  432. this.expertPostList = [];
  433. this.dialogVisible = true;
  434. this.addObj = row;
  435. this.expertPostList = this.addObj.expertPost?this.addObj.expertPost.split(","):null;
  436. this.dialogTitle = "编辑专家";
  437. this.getFileList();
  438. },
  439. removeFile(id) {
  440. this.$confirm("此操作将永久删除该文件, 是否继续?", "提示", {
  441. confirmButtonText: "确定",
  442. cancelButtonText: "返回",
  443. type: "warning"
  444. }).then(
  445. res => {
  446. if (res === "confirm") {
  447. deleteFileById(id,this.userId).then(res => {
  448. if (res.success) {
  449. this.getFileList();
  450. } else {
  451. this.$message.error(res.message);
  452. }
  453. });
  454. }
  455. }
  456. );
  457. },
  458. getFileList(){
  459. let params = {
  460. bizId: this.bizId
  461. }
  462. request.post(`/file/findPageInfo`,params).then(res =>{
  463. if(res.success) {
  464. this.fileList = res.data.list;
  465. }
  466. })
  467. },
  468. init() {
  469. this.$refs.addUpload.clearFiles();
  470. this.fileCount = 0;
  471. this.fileList = [];
  472. },
  473. uploadSuccess(response, file, fileList){
  474. this.getFileList();
  475. this.fileCount++;
  476. if(this.fileCount==this.fileList.length){
  477. this.search();
  478. this.init();
  479. }
  480. },
  481. upError(err, file, fileList){
  482. this.$message.error("上传出错,请修改文件!");
  483. this.init();
  484. this.search();
  485. },
  486. changeFileList(file, fileList) {
  487. this.fileList = fileList;
  488. },
  489. removeFileList(file, fileList) {
  490. this.fileList = fileList;
  491. },
  492. showDialog(){
  493. this.addObj = {};
  494. this.isAutoUpload = false;
  495. this.isShowFile = true;
  496. this.fileList = [];
  497. this.expertPostList = [];
  498. this.dialogTitle = "添加专家";
  499. this.dialogVisible = true;
  500. },
  501. search(){
  502. var _self = this;
  503. this.loading = true;
  504. this.searchParam.pageNum = this.pageIndex;
  505. this.searchParam.pageSize = this.pageSize;
  506. request.post('/bis/insp/all/worker/pers/findPage',this.searchParam).then((res)=>{
  507. if(res.success){
  508. _self.tableData = res.data.list;
  509. _self.total = res.data.total;
  510. _self.loading = false;
  511. _self.$nextTick(()=>{
  512. _self.$refs.expert.doLayout();
  513. })
  514. }
  515. });
  516. },
  517. handleSizeChange(val){
  518. this.pageSize = val;
  519. this.search();
  520. },
  521. handleCurrentChange(val){
  522. this.pageIndex = val;
  523. this.search();
  524. },
  525. },
  526. activated() {
  527. }
  528. }
  529. </script>
  530. <style scoped>
  531. .el-container{
  532. height:100%;
  533. }
  534. .el-header{
  535. display: flex;
  536. align-items: center;
  537. }
  538. .main-container .el-table{
  539. height:calc(100% - 40px);
  540. }
  541. .main-container /deep/ .el-table__body-wrapper{
  542. height:calc(100% - 40px);
  543. overflow: auto;
  544. }
  545. .item-width{
  546. width:90%;
  547. }
  548. </style>