f57b0d25a67bf6a0f22a4f22b146e5160183bcc4.svn-base 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587
  1. <!-- -->
  2. <template>
  3. <div>
  4. <el-header style="height: 100%;">
  5. <h5 style="margin-top:10px;">{{"地点:" + meetingInfoRow.address}}</h5>
  6. </el-header>
  7. <el-main style="padding:0 20px;">
  8. <el-row>
  9. <el-col :span="12">
  10. <h5 style="margin-top:10px;">签到、签退基准:</h5>
  11. </el-col>
  12. <el-col :span="12" style="text-align: right;">
  13. <el-button style="padding: 5px;" size="mini" type="success" icon="el-icon-plus" circle @click="toAddSgin"></el-button>
  14. </el-col>
  15. </el-row>
  16. <el-table
  17. :data="tableDataSgin"
  18. :height="ycTableHeight"
  19. stripe
  20. border
  21. style="width: 100%;margin-top:10px;">
  22. <el-table-column
  23. prop="type"
  24. show-overflow-tooltip
  25. :formatter="typeFormatter"
  26. label="类型">
  27. </el-table-column>
  28. <el-table-column
  29. prop="stTm"
  30. show-overflow-tooltip
  31. label="基准开始时间"
  32. >
  33. </el-table-column>
  34. <el-table-column
  35. prop="enTm"
  36. show-overflow-tooltip
  37. label="基准结束时间"
  38. >
  39. </el-table-column>
  40. <!-- <el-table-column
  41. prop="sginCount"
  42. show-overflow-tooltip
  43. label="签到率"
  44. >
  45. <template slot-scope="scope">
  46. <el-progress
  47. :text-inside="true"
  48. :stroke-width="18"
  49. :percentage="parseInt((scope.row.sginCount/scope.row.meetCount)*100)">
  50. </el-progress>
  51. </template>
  52. </el-table-column> -->
  53. <el-table-column
  54. width="180"
  55. label="操作">
  56. <template slot-scope="scope">
  57. <!-- <el-button
  58. style="color:#67c23a"
  59. size="mini"
  60. type="text"
  61. icon="el-icon-document"
  62. @click.stop="sginDetails(scope.$index, scope.row)">详情</el-button> -->
  63. <el-button
  64. style="color:#409eff"
  65. size="mini"
  66. type="text"
  67. icon="el-icon-edit"
  68. @click.stop="editDataSgin(scope.$index, scope.row)">编辑</el-button>
  69. <el-button
  70. style="color:#e6a23c"
  71. size="mini"
  72. type="text"
  73. icon="el-icon-delete"
  74. @click.stop="handleDeleteSgin(scope.$index, scope.row)">删除</el-button>
  75. </template>
  76. </el-table-column>
  77. </el-table>
  78. <el-pagination
  79. style="text-align:center;"
  80. @size-change="handleSizeChangeSgin"
  81. @current-change="handleCurrentChangeSgin"
  82. :current-page.sync="pageNumSgin"
  83. :page-sizes="[10, 20, 30, 40, 50, 100]"
  84. :page-size="pageSizeSgin"
  85. small
  86. layout="prev, pager, next"
  87. :total="totalSgin">
  88. </el-pagination>
  89. <!-- <el-row style="">
  90. <el-col :span="10">
  91. <h5 style="float:left;margin-top:10px;">{{"参会人数: " + checkin + '/' + notCheckin}}</h5>
  92. </el-col>
  93. <el-col :span="14">
  94. <div style="width:20%;float:left;margin-top:10px;">
  95. <h5>签到率:</h5>
  96. </div>
  97. <div style="width:80%;float:left;margin-top:10px;">
  98. <el-progress :text-inside="true" :stroke-width="18" :percentage="checkinRate"></el-progress>
  99. </div>
  100. </el-col>
  101. </el-row> -->
  102. <el-row>
  103. <el-col :span="12">
  104. <h5 style="margin-top:10px;">会议人员管理:</h5>
  105. </el-col>
  106. <el-col :span="12" style="text-align: right;">
  107. </el-col>
  108. </el-row>
  109. <el-row style="margin-top: 5px;">
  110. <el-form :inline="true" :model="formInline" class="demo-form-inline">
  111. <el-form-item style="margin-bottom: 0;">
  112. <el-input style="width:10vw;" size="mini" v-model="formInline.name" placeholder="请输入姓名" clearable ></el-input>
  113. </el-form-item>
  114. <el-form-item style="margin-bottom: 0;">
  115. <el-input style="width:10vw;" size="mini" v-model="formInline.mbleNum" placeholder="请输入手机号" clearable ></el-input>
  116. </el-form-item>
  117. <el-form-item style="margin-bottom: 0;float: right;">
  118. <el-button style="padding: 5px;" size="mini" type="primary" icon="el-icon-search" circle @click="toSearchData"></el-button>
  119. <el-button style="padding: 5px;" size="mini" type="success" icon="el-icon-plus" circle @click="toAddPeo"></el-button>
  120. </el-form-item>
  121. </el-form>
  122. </el-row>
  123. <el-table
  124. :data="tableData"
  125. :height="ryTableHeight"
  126. stripe
  127. border
  128. style="width: 100%;margin-top:10px;">
  129. <el-table-column
  130. prop="name"
  131. show-overflow-tooltip
  132. label="姓名"
  133. width="130"
  134. >
  135. </el-table-column>
  136. <!-- <el-table-column
  137. prop="signTm"
  138. show-overflow-tooltip
  139. label="签到时间"
  140. >
  141. </el-table-column> -->
  142. <el-table-column
  143. prop="unit"
  144. show-overflow-tooltip
  145. label="单位">
  146. </el-table-column>
  147. <el-table-column
  148. prop="mbleNum"
  149. show-overflow-tooltip
  150. label="手机号"
  151. width="120">
  152. </el-table-column>
  153. <!-- <el-table-column
  154. align="center"
  155. label="是否签到"
  156. prop="signState">
  157. <template slot-scope="scope">
  158. <i
  159. :style="scope.row.ishave == 1 ? 'color:#67c23a':'color:#f56c6c'"
  160. :class="scope.row.ishave == 1 ? 'el-icon-success':'el-icon-error'">
  161. </i>
  162. </template>
  163. </el-table-column> -->
  164. <el-table-column
  165. width="150"
  166. label="操作">
  167. <template slot-scope="scope">
  168. <el-button
  169. style="color:#409eff"
  170. size="mini"
  171. type="text"
  172. icon="el-icon-edit"
  173. @click.stop="editData(scope.$index, scope.row)">编辑</el-button>
  174. <el-button
  175. style="color:#e6a23c"
  176. size="mini"
  177. type="text"
  178. icon="el-icon-delete"
  179. @click.stop="handleDelete(scope.$index, scope.row)">删除</el-button>
  180. </template>
  181. </el-table-column>
  182. </el-table>
  183. <el-pagination
  184. style="text-align:center;"
  185. @size-change="handleSizeChange"
  186. @current-change="handleCurrentChange"
  187. :current-page.sync="pageNum"
  188. :page-sizes="[10, 20, 30, 40, 50, 100]"
  189. :page-size="pageSize"
  190. small
  191. layout="prev, pager, next"
  192. :total="total">
  193. </el-pagination>
  194. </el-main>
  195. <!-- <el-footer style="margin-top:5px;text-align:right;">
  196. <el-button @click="beginMetting" :disabled="beginButton" type="primary" size="mini" style="padding: 5px 10px;">会议开始</el-button>
  197. <el-button @click="endMetting" :disabled="endButton" type="primary" size="mini" style="padding: 5px 10px;">会议结束</el-button>
  198. <el-button @click="closeMetting" :disabled="closeButton" type="primary" size="mini" style="padding: 5px 10px;">会议关闭</el-button>
  199. </el-footer> -->
  200. <addMeetingPeople
  201. v-if="addPeoVisiual"
  202. :meetingInfoRow="meetingInfoRow"
  203. :editFormData="editFormData"
  204. @cancelHandler="cancelHandler"
  205. @addSuccessStatus="addSuccessStatusEvent"
  206. ></addMeetingPeople>
  207. <addSgin
  208. v-if="addSginVisiual"
  209. :meetingInfoRow="meetingInfoRow"
  210. :editFormDataSgin="editFormDataSgin"
  211. @cancelHandler="cancelHandlerSgin"
  212. @addSuccessStatus="addSuccessStatusEventSgin"
  213. ></addSgin>
  214. <sginDetalis
  215. v-if="sginDetalisVisiual"
  216. :meetingInfoRow="meetingInfoRow"
  217. :sginId="sginId"
  218. @cancelHandler="cancelHandlerSginDetails"
  219. ></sginDetalis>
  220. </div>
  221. </template>
  222. <script>
  223. //这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
  224. //例如:import 《组件名称》 from '《组件路径》';
  225. import { getPeoLists,deletePeople,getSginLists,deleteSgin,addMeetingBase } from "../../api/meetingAPI.js";
  226. import addMeetingPeople from './addMeetingPeople'
  227. import addSgin from './addSgin'
  228. import sginDetalis from './sginDetalis'
  229. export default {
  230. //import引入的组件需要注入到对象中才能使用
  231. components: {
  232. addMeetingPeople,
  233. addSgin,
  234. sginDetalis,
  235. },
  236. props:['meetingInfoRow'],
  237. data() {
  238. //这里存放数据
  239. return {
  240. // ryTableHeight:window.innerHeight -600,
  241. sginId:'',
  242. sginDetalisVisiual:false,
  243. addPeoVisiual:false,
  244. addSginVisiual:false,
  245. search:'',
  246. formInline:{
  247. name:'',
  248. mbleNum:'',
  249. },
  250. readyPeo:0,
  251. allpeo:35,
  252. meetingPlace:'北京市西城区广安门内大街水利综合楼433',
  253. meetingStatus:'进行中',
  254. tableData: [],
  255. pageNum:1,
  256. pageSize:10,
  257. total:0,
  258. editFormData:{},
  259. editFormDataSgin:{},
  260. checkin:0,
  261. notCheckin:0,
  262. checkinRate:0,
  263. pageNumSgin:1,
  264. pageSizeSgin:10,
  265. totalSgin:0,
  266. tableDataSgin: [],
  267. };
  268. },
  269. //监听属性 类似于data概念
  270. computed: {
  271. ycTableHeight(){
  272. if(window.innerWidth <= 1366){
  273. return window.innerHeight - 500;
  274. }else{
  275. return window.innerHeight - 660;
  276. }
  277. },
  278. ryTableHeight(){
  279. if(window.innerWidth <= 1366){
  280. return window.innerHeight - 500;
  281. }else{
  282. return window.innerHeight - 660;
  283. }
  284. },
  285. beginButton(){
  286. if(this.meetingInfoRow.state == '1'){
  287. return false;
  288. }else{
  289. return true;
  290. }
  291. },
  292. endButton(){
  293. if(this.meetingInfoRow.state == '2'){
  294. return false;
  295. }else{
  296. return true;
  297. }
  298. },
  299. closeButton(){
  300. if(this.meetingInfoRow.state == '3'){
  301. return false;
  302. }else{
  303. return true;
  304. }
  305. },
  306. },
  307. //监控data中的数据变化
  308. watch: {
  309. // meetingInfoRow(n,o){
  310. // this.meetingInfoRow = n
  311. // }
  312. },
  313. //方法集合
  314. methods: {
  315. handleSizeChange(val) {
  316. console.log(`每页 ${val} 条`);
  317. this.pageSize = val;
  318. this.getPeoTableData();
  319. },
  320. handleCurrentChange(val) {
  321. console.log(`当前页: ${val}`);
  322. this.pageNum = val;
  323. this.getPeoTableData();
  324. },
  325. handleSizeChangeSgin(val) {
  326. console.log(`每页 ${val} 条`);
  327. this.pageSizeSgin = val;
  328. this.getPeoTableData();
  329. },
  330. handleCurrentChangeSgin(val) {
  331. console.log(`当前页: ${val}`);
  332. this.pageNumSgin = val;
  333. this.getPeoTableData();
  334. },
  335. //展示添加资料弹窗
  336. toAddPeo(){
  337. this.editFormData = {};
  338. this.addPeoVisiual = true
  339. },
  340. toAddSgin(){
  341. this.editFormDataSgin = {};
  342. this.addSginVisiual = true
  343. },
  344. cancelHandler(){
  345. this.addPeoVisiual = false
  346. this.getPeoTableData();
  347. },
  348. cancelHandlerSgin(){
  349. this.addSginVisiual = false
  350. this.getSginTableData();
  351. },
  352. cancelHandlerSginDetails(){
  353. this.sginDetalisVisiual = false
  354. },
  355. //添加人员后冒上来的事件
  356. addSuccessStatusEvent(item){
  357. if(item.success = true){
  358. this.cancelHandler();
  359. this.$message.success('操作成功!');
  360. }else{
  361. this.$message.error(res.message);
  362. }
  363. },
  364. //添加人员后冒上来的事件
  365. addSuccessStatusEventSgin(item){
  366. if(item.success = true){
  367. this.cancelHandlerSgin();
  368. this.$message.success('操作成功!');
  369. }else{
  370. this.$message.error(res.message);
  371. }
  372. },
  373. //获取会议人员数据
  374. getPeoTableData(){
  375. var _self = this;
  376. let obj = {
  377. "pageNum":_self.pageNum,
  378. "pageSize":_self.pageSize,
  379. "meetingId":_self.meetingInfoRow.id,
  380. "name":_self.formInline.name,
  381. "mbleNum":_self.formInline.mbleNum,
  382. }
  383. getPeoLists(obj).then(response => {
  384. _self.tableData = response.data.list;
  385. _self.tableData.forEach((element, index) => {
  386. if(element.signState == "1"){
  387. _self.checkin ++ ;
  388. }
  389. });
  390. _self.total = response.data.total;
  391. if(_self.total == 0){
  392. _self.checkinRate = 0
  393. }else{
  394. _self.notCheckin = _self.total - _self.checkin;//未签到
  395. _self.checkinRate = parseInt((_self.checkin /_self.total)*100);
  396. }
  397. // alert(typeof _self.checkinRate)
  398. });
  399. },
  400. //获取签到基准数据
  401. getSginTableData(){
  402. var _self = this;
  403. let obj = {
  404. "pageNum":_self.pageNumSgin,
  405. "pageSize":_self.pageSizeSgin,
  406. "meetId":_self.meetingInfoRow.id,
  407. }
  408. getSginLists(obj).then(response => {
  409. _self.tableDataSgin = response.data.list;
  410. _self.totalSgin = response.data.total;
  411. });
  412. },
  413. toSearchData(){
  414. this.getPeoTableData();
  415. },
  416. editData(index,row){
  417. this.editFormData = row;
  418. this.addPeoVisiual = true;
  419. },
  420. handleDelete(index,row) {
  421. var _self = this;
  422. this.$confirm('此操作将删除该人员, 是否继续?', '提示', {
  423. confirmButtonText: '确定',
  424. cancelButtonText: '取消',
  425. type: 'warning'
  426. }).then(() => {
  427. deletePeople(row.id).then(response => {
  428. if(response.success == true){
  429. _self.$message.success('删除成功!');
  430. _self.getPeoTableData();
  431. }else{
  432. _self.$message.error(item.message);
  433. }
  434. });
  435. }).catch(() => {
  436. this.$message({
  437. type: 'info',
  438. message: '已取消删除'
  439. });
  440. });
  441. },
  442. editDataSgin(index,row){
  443. this.editFormDataSgin = row;
  444. this.addSginVisiual = true;
  445. },
  446. handleDeleteSgin(index,row) {
  447. var _self = this;
  448. this.$confirm('此操作将删除该基准, 是否继续?', '提示', {
  449. confirmButtonText: '确定',
  450. cancelButtonText: '取消',
  451. type: 'warning'
  452. }).then(() => {
  453. deleteSgin(row.id).then(response => {
  454. if(response.success == true){
  455. _self.$message.success('删除成功!');
  456. _self.getSginTableData();
  457. }else{
  458. _self.$message.error(item.message);
  459. }
  460. });
  461. }).catch(() => {
  462. this.$message({
  463. type: 'info',
  464. message: '已取消删除'
  465. });
  466. });
  467. },
  468. typeFormatter:function(row, column){
  469. return row.type == "1" ? '签到':'签退'
  470. },
  471. beginMetting(){
  472. var _self = this;
  473. this.$confirm('此操作将开始此会议, 是否继续?', '提示', {
  474. confirmButtonText: '确定',
  475. cancelButtonText: '取消',
  476. type: 'warning'
  477. }).then(() => {
  478. let obj = {
  479. "id":_self.meetingInfoRow.id,
  480. "state":"2",
  481. };
  482. addMeetingBase(obj).then(response => {
  483. if(response.success == true){
  484. _self.$message.success('会议开始!');
  485. _self.meetingInfoRow.state = '2';
  486. }else{
  487. _self.$message.error(item.message);
  488. }
  489. });
  490. }).catch(() => {
  491. this.$message({
  492. type: 'info',
  493. message: '已取消开始'
  494. });
  495. });
  496. },
  497. // endMetting
  498. // closeMetting
  499. endMetting(){
  500. var _self = this;
  501. this.$confirm('此操作将结束此会议, 是否继续?', '提示', {
  502. confirmButtonText: '确定',
  503. cancelButtonText: '取消',
  504. type: 'warning'
  505. }).then(() => {
  506. let obj = {
  507. "id":_self.meetingInfoRow.id,
  508. "state":"3",
  509. };
  510. addMeetingBase(obj).then(response => {
  511. if(response.success == true){
  512. _self.$message.success('会议结束!');
  513. _self.meetingInfoRow.state = '3';
  514. }else{
  515. _self.$message.error(item.message);
  516. }
  517. });
  518. }).catch(() => {
  519. this.$message({
  520. type: 'info',
  521. message: '已取消开始'
  522. });
  523. });
  524. },
  525. closeMetting(){
  526. var _self = this;
  527. this.$confirm('此操作将关闭此会议, 是否继续?', '提示', {
  528. confirmButtonText: '确定',
  529. cancelButtonText: '取消',
  530. type: 'warning'
  531. }).then(() => {
  532. let obj = {
  533. "id":_self.meetingInfoRow.id,
  534. "state":"4",
  535. };
  536. addMeetingBase(obj).then(response => {
  537. if(response.success == true){
  538. _self.$message.success('会议结束!');
  539. _self.meetingInfoRow.state = '4';
  540. }else{
  541. _self.$message.error(item.message);
  542. }
  543. });
  544. }).catch(() => {
  545. this.$message({
  546. type: 'info',
  547. message: '已取消开始'
  548. });
  549. });
  550. },
  551. sginDetails(index,row){
  552. this.sginDetalisVisiual = true;
  553. this.sginId = row.id;
  554. }
  555. },
  556. //生命周期 - 创建完成(可以访问当前this实例)
  557. created() {
  558. },
  559. //生命周期 - 挂载完成(可以访问DOM元素)
  560. mounted() {
  561. this.getPeoTableData();
  562. this.getSginTableData();
  563. },
  564. beforeCreate() {}, //生命周期 - 创建之前
  565. beforeMount() {}, //生命周期 - 挂载之前
  566. beforeUpdate() {}, //生命周期 - 更新之前
  567. updated() {}, //生命周期 - 更新之后
  568. beforeDestroy() {}, //生命周期 - 销毁之前
  569. destroyed() {}, //生命周期 - 销毁完成
  570. activated() {}, //如果页面有keep-alive缓存功能,这个函数会触发
  571. }
  572. </script>
  573. <style scoped>
  574. </style>