Generalindex.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615
  1. <template>
  2. <div>
  3. <!-- <div class="num-ul">
  4. <div class="num-li">
  5. <div class="num-tlite">
  6. <div>2442</div>
  7. <p>市场客户总数量</p>
  8. <p>4% Higher than last week</p>
  9. </div>
  10. <div class="num-icon">
  11. <i class="iconfont icon-renminbi"></i>
  12. </div>
  13. </div>
  14. <div class="num-li">
  15. <div class="num-tlite">
  16. <div>2442</div>
  17. <p>当月需对接客户数量</p>
  18. <p>1% Higher than last week</p>
  19. </div>
  20. <div class="num-icon">
  21. <i class="iconfont icon-fuwuqi"></i>
  22. </div>
  23. </div>
  24. <div class="num-li">
  25. <div class="num-tlite">
  26. <div>2442</div>
  27. <p>当月出团数量</p>
  28. <p>3% Higher than last week</p>
  29. </div>
  30. <div class="num-icon">
  31. <i class="iconfont icon-HCplanshuliang"></i>
  32. </div>
  33. </div>
  34. <div class="num-li">
  35. <div class="num-tlite">
  36. <div>2442</div>
  37. <p>至今未收款项(团组数)</p>
  38. <p>5% Higher than last week</p>
  39. </div>
  40. <div class="num-icon">
  41. <i class="iconfont icon-tongjitu"></i>
  42. </div>
  43. </div>
  44. </div> -->
  45. <div class="tabular-all">
  46. <div class="list-groups">
  47. <div class="groups-list">
  48. <div class="list-title">
  49. <div>团组列表</div>
  50. <div class="search-box">
  51. <el-input
  52. placeholder="请输入内容"
  53. v-model="input"
  54. @input="Inquireclick()"
  55. clearable>
  56. </el-input>
  57. <!-- <el-button type="primary"><i class="icon-sousuo"></i></el-button> -->
  58. </div>
  59. </div>
  60. <template>
  61. <el-table
  62. :data="groupDatas.slice((currentPage-1)*pageSize,currentPage*pageSize)"
  63. border
  64. style="width: 100%">
  65. <el-table-column
  66. prop="teamName"
  67. label="团组名"
  68. width="350">
  69. </el-table-column>
  70. <el-table-column
  71. prop="clientUnit"
  72. label="团组单位">
  73. </el-table-column>
  74. <el-table-column
  75. width="120"
  76. prop="visitDate"
  77. :formatter="filteryear"
  78. label="出访时间">
  79. </el-table-column>
  80. <el-table-column width="80" label="管控">
  81. <template slot-scope="scope">
  82. <el-button type="primary" size="mini" @click="handleEdit(scope.$index, scope.row)">
  83. <i class="iconfont icon-xianchangguankong"></i>
  84. </el-button>
  85. </template>
  86. </el-table-column>
  87. </el-table>
  88. </template>
  89. <div class="block">
  90. <el-pagination align='center'
  91. @size-change="handleSizeChange"
  92. @current-change="handleCurrentChange"
  93. :current-page="currentPage"
  94. :page-sizes="[8,10,15,20]"
  95. :page-size="pageSize"
  96. layout="total, sizes, prev, pager, next"
  97. :total="groupDatas.length">
  98. </el-pagination>
  99. </div>
  100. </div>
  101. <div class="sources-ul">
  102. <div class="sources-li" @click="shortcutlink('/MCR')">
  103. <div class="sources-tlite">
  104. <p>市场客户资源</p>
  105. </div>
  106. <div class="sources-icon">
  107. <i class="iconfont icon-shichangbu"></i>
  108. </div>
  109. </div>
  110. <div class="sources-li" @click="shortcutlink('/LocalGuide')">
  111. <div class="sources-tlite">
  112. <p>车导地接资源</p>
  113. </div>
  114. <div class="sources-icon">
  115. <i class="iconfont icon-dijie"></i>
  116. </div>
  117. </div>
  118. <div class="sources-li">
  119. <div class="sources-tlite">
  120. <p>策划活动资源</p>
  121. </div>
  122. <div class="sources-icon">
  123. <i class="iconfont icon-xiangmucehua"></i>
  124. </div>
  125. </div>
  126. </div>
  127. </div>
  128. <div class="schedule-box">
  129. <div class="schedule">
  130. <!-- 代办任务 日程表 -->
  131. <div class="top" style="background: #fff; padding: 8px 6px">
  132. <div class="modelBox">
  133. <span class="radis"></span>
  134. </div>
  135. <div class="tabs" style="width: 100%">
  136. <FullCalendar ref="fullCalendar" :options="calendarOptions" class="demo-app-calendar" />
  137. </div>
  138. </div>
  139. </div>
  140. </div>
  141. </div>
  142. <div class="skip-text">
  143. <div v-if="userId==21" class="text-go">{{wshcount}}条未审核日常付款申请&nbsp;&nbsp;<span @click="shortcutlink('/DailyFeePayment')" style="color:#409eff;cursor: pointer;">前往审核</span></div>
  144. </div>
  145. </div>
  146. </template>
  147. <script>
  148. import FullCalendar from '@fullcalendar/vue'
  149. import dayGridPlugin from '@fullcalendar/daygrid'
  150. import timeGridPlugin from '@fullcalendar/timegrid'
  151. import interactionPlugin from '@fullcalendar/interaction'
  152. import zhCnLocale from '@fullcalendar/core/locales/zh-cn'
  153. import tippy from 'tippy.js';
  154. export default {
  155. components:{
  156. FullCalendar
  157. },
  158. data() {
  159. return {
  160. groupData: [
  161. ],
  162. groupDatas:[],
  163. currentPage: 1, // 当前页码
  164. pageSize: 8 ,// 每页的数据条数
  165. //日程数据
  166. calendarOptions: {
  167. plugins: [
  168. // 加载插件,V5采用插件模块方式加入
  169. dayGridPlugin,
  170. timeGridPlugin,
  171. interactionPlugin, // needed for dateClick
  172. ],
  173. height: 660, //日历高度
  174. width: 600,
  175. headerToolbar: {
  176. // 头部toolba
  177. left: 'prev,next today',
  178. center: 'title',
  179. right: 'timeGridDay,timeGridWeek,dayGridMonth',
  180. // right: 'dayGridMonth'
  181. },
  182. handleWindowResize: true, //随浏览器窗口变化
  183. initialView: 'dayGridMonth', // 初始化插件显示
  184. // initialDate:""//初始化日期
  185. // initialEvents: INITIAL_EVENTS, // alternatively, use the `events` setting to fetch from a feed
  186. //editable: true, //是否可编辑
  187. // droppable: true,//可拖拽的
  188. // timeZone: 'local',//采用时区
  189. selectable: true,
  190. // selectMirror: true,
  191. dayMaxEvents: true,
  192. // weekends: true, // 是否显示一周七天
  193. // select: this.handleDateSelect,
  194. // eventClick: this.handleEventClick, // 日程点击事件
  195. eventMouseEnter: this.handleEventMouseEnter, // 用户将鼠标悬停在事件上时触发
  196. // eventsSet: this.handleEvents,
  197. dateClick: this.handleDateClick,//日期方格点击事件
  198. eventClick: this.handleEventClick, //日程点击事件
  199. locale: zhCnLocale,
  200. nextDayThreshold: '01:00:00',
  201. events: [
  202. //日程事件的json
  203. { title: '雷怡', date: '2023-03-24 12:00:00',color:'#ff9900'},
  204. { title: '雷怡', date: '2023-03-24 15:00:00',color:'#ff9900'},
  205. { title: 'event 1', start: '2023-03-25 10:59:23',end:'2023-03-26 14:59:23' },
  206. { title: 'event 3', date: '2023-03-25 08:23:00' },
  207. { title: 'event 4', date: '2023-03-25 09:30:00' },
  208. { title: 'event 5', date: '2023-03-26 12:00:00' },
  209. { title: 'event 2', date: '2023-03-26 15:00:00' }
  210. ],
  211. // datesSet: this.handleDateSet,
  212. /* you can update a remote database when these fire:
  213. eventAdd:
  214. eventChange:
  215. eventRemove:
  216. */
  217. },
  218. input: '',
  219. wshcount:0,
  220. userId:'',
  221. }
  222. },
  223. methods:{
  224. //每页条数改变时触发 选择一页显示多少行
  225. handleSizeChange(val) {
  226. this.currentPage = 1;
  227. this.pageSize = val;
  228. },
  229. //当前页改变时触发 跳转其他页
  230. handleCurrentChange(val) {
  231. this.currentPage = val;
  232. },
  233. handleEventMouseEnter(info) {
  234. console.log(info, 'yyyy')
  235. let col = info.event.borderColor
  236. let eve = info.event._def.extendedProps
  237. let category = info.event._def.extendedProps.category
  238. tippy(info.el, {
  239. // content:"<div style='width: 280px;background-color:#FAFAFA;padding:5px;font-size:14px;z-index:99999'>" +
  240. // "<div style='color: #666666;overflow: hidden;'><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议名称:" + info.event.title+"</div>" +
  241. // "<div style='color: #666666;overflow: hidden;'><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议类型:"+eve.type+"</div>" +
  242. // "<div style='color: #666666;overflow: hidden;'><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议时间:"+eve.times+"</div>" +
  243. // "<div style='color: #666666;overflow: hidden;'><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议状态:"+eve.status+"</div>" +
  244. // "</div>",
  245. content: `<div style='width: 260px;background-color:#FAFAFA;padding:5px;font-size:14px;z-index:99999;'>
  246. <div style='display:flex;color: #666666;overflow: hidden;' class="${ eve.category == 1 ? 'hidden' : ''}">
  247. <div><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议名称: </div>
  248. <div style="width:161px;white-space:normal;overflow: auto;table-layout:fixed; word-break: break-all; height:auto;display:inner-block">${info.event.title}</div>
  249. </div>
  250. <div style='color: #666666;overflow: hidden;' class="${ eve.category == 1 ? 'hidden' : ''}"><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议类型:${eve.type}</div>
  251. <div style='color: #666666;overflow: hidden;' class="${ eve.category == 1 ? 'hidden' : ''}"><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议时间:${eve.times}</div>
  252. <div style='color: #666666;overflow: hidden;' class="${ eve.category == 1 ? 'hidden' : ''}"><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>会议状态:${eve.status}</div>
  253. <div style='color: #666666;overflow: hidden;' class="${ eve.category == 0 ? 'hidden' : ''}"><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>年份:${eve.year}</div>
  254. <div style='color: #666666;overflow: hidden;' class="${ eve.category == 0 ? 'hidden' : ''}"><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>领域角色:${eve.depRoleName}</div>
  255. <div style='color: #666666;overflow: hidden;' class="${ eve.category == 0 ? 'hidden' : ''}"><span style='display:inline-block;width:6px;height:6px;background-color:#318DDE;border-radius:50%;margin:0 5px;'></span>姓名:${eve.name}</div>
  256. </div>`,
  257. theme: 'light', //主题选取
  258. // trigger: 'click', //触发类型
  259. interactive: true, //可交互的
  260. placement: 'top-start', //悬浮框位置
  261. allowHTML: true, //是否允许html文本
  262. zIndex: 99999,
  263. })
  264. },
  265. handleEventClick(info){
  266. console.log(info)
  267. },
  268. handleDateClick(inif){
  269. // console.log(info)
  270. },
  271. //快捷跳转
  272. shortcutlink(val){
  273. if(val=='/DailyFeePayment'){
  274. localStorage.setItem("Permissions",JSON.stringify([{"funid":1,"functionCode":"F00001","functionName":"查看"},{"funid":2,"functionCode":"F00002","functionName":"删除"},{"funid":3,"functionCode":"F00003","functionName":"编辑"},{"funid":4,"functionCode":"F00004","functionName":"下载"},{"funid":5,"functionCode":"F00005","functionName":"上传"},{"funid":11,"functionCode":"F00010","functionName":"添加"},{"funid":12,"functionCode":"F00006","functionName":"审核"}]))
  275. }
  276. this.$router.push({ path: "/home" + val });
  277. },
  278. Grouplist(){
  279. var url="/api/Groups/GetGroupList"
  280. var that=this
  281. that.fullscreenLoading = true;
  282. this.$axios({
  283. method: 'post',
  284. url:url,
  285. headers:{
  286. Authorization:'Bearer '+this.token
  287. },
  288. data:{
  289. portType: 1,
  290. }
  291. }).then(function(res){
  292. if(res.data.code==200){
  293. that.groupData=res.data.data
  294. that.groupData.forEach(item=>{
  295. if(item.clientName==null){
  296. item.clientName = ''
  297. }
  298. if(item.clientUnit==null){
  299. item.clientUnit = ''
  300. }
  301. if(item.id==null){
  302. item.id = ''
  303. }
  304. if(item.isSure==null){
  305. item.isSure = ''
  306. }
  307. if(item.jietuanOperator==null){
  308. item.jietuanOperator = ''
  309. }
  310. if(item.salesQuoteNo==null){
  311. item.salesQuoteNo = ''
  312. }
  313. if(item.teamName==null){
  314. item.teamName = ''
  315. }
  316. if(item.teamType==null){
  317. item.teamType = ''
  318. }
  319. if(item.tourCode==null){
  320. item.tourCode = ''
  321. }
  322. if(item.visitDate==null){
  323. item.visitDate = ''
  324. }
  325. if(item.visitDays==null){
  326. item.visitDays = ''
  327. }
  328. if(item.visitPNumber==null){
  329. item.visitPNumber = ''
  330. }
  331. })
  332. that.groupDatas=that.groupData;
  333. console.log(that.groupData)
  334. that.fullscreenLoading = false;
  335. }
  336. })
  337. },
  338. //获取张总未审核条数
  339. DailyPaymentGMUnAudited(){
  340. var url="/api/Financial/DailyPaymentGMUnAudited"
  341. var that=this
  342. this.$axios({
  343. method: 'GET',
  344. url:url,
  345. headers:{
  346. Authorization:'Bearer '+that.token
  347. },
  348. }).then(function(res){
  349. if(res.data.code==200){
  350. that.wshcount=res.data.data;
  351. }
  352. })
  353. },
  354. Inquireclick() {
  355. var newarr = [];
  356. if (this.input == "") {
  357. newarr = this.groupData;
  358. } else {
  359. for (var i = 0; i < this.groupData.length; i++) {
  360. if (this.groupData[i].teamName.indexOf(this.input) != -1) {
  361. newarr.push(this.groupData[i]);
  362. }
  363. else if (this.groupData[i].clientUnit.indexOf(this.input) != -1) {
  364. newarr.push(this.groupData[i]);
  365. }
  366. else if (this.groupData[i].visitDate.indexOf(this.input) != -1) {
  367. newarr.push(this.groupData[i]);
  368. }
  369. }
  370. }
  371. this.groupDatas = newarr;
  372. this.currentPage = 1;
  373. },
  374. filteryear(val){
  375. let gstime=val.visitDate.split(' ')[0]
  376. return gstime;
  377. },
  378. handleEdit(index, row) {
  379. console.log(index, row);
  380. localStorage.setItem('OPid', row.grpScheduleId);
  381. this.$router.push({name:'Controltree'})
  382. },
  383. },
  384. mounted(){
  385. this.userId=JSON.parse(localStorage.getItem('userinif')).userInfo.userId;
  386. this.Grouplist();
  387. this.DailyPaymentGMUnAudited();
  388. // this.calendarOptions.events.push({
  389. // color: '#ff9900',
  390. // title: "kljkl",
  391. // date: "yuuyjyu",
  392. // status: "jtyjtyj",
  393. // type: "hfghfghfg",
  394. // times: "gererg",
  395. // category: "wefwefw"
  396. // // title: element.name,
  397. // // date: element.time,
  398. // // status: this.statusName,
  399. // // type: element.type,
  400. // // times: element.time,
  401. // // category: element.category
  402. // })
  403. }
  404. }
  405. </script>
  406. <style>
  407. .num-ul{
  408. display: flex;
  409. justify-content: space-between;
  410. margin-bottom: 20px;
  411. }
  412. .num-li{
  413. width: 21%;
  414. display: flex;
  415. justify-content: space-between;
  416. align-items: center;
  417. border-radius: 10px;
  418. padding: 25px 20px;
  419. }
  420. .num-li:nth-child(1){
  421. background-color: #6bafbd !important;
  422. }
  423. .num-li:nth-child(2){
  424. background-color: #fc8675 !important;
  425. }
  426. .num-li:nth-child(3){
  427. background-color: #f3ce85 !important;
  428. }
  429. .num-li:nth-child(4){
  430. background-color: #65cea7 !important;
  431. }
  432. .num-icon i{
  433. width: 70px;
  434. height: 90px;
  435. display: inline-block;
  436. font-size: 70px;
  437. display: flex;
  438. align-items: center;
  439. color: #fff8;
  440. }
  441. .num-tlite div{
  442. font-size: 30px;
  443. color: #fff;
  444. }
  445. .num-tlite p:nth-child(2){
  446. font-size: 14px;
  447. margin: 5px 0px;
  448. color: #fff;
  449. }
  450. .num-tlite p:nth-child(3){
  451. font-size: 12px;
  452. color: #fff;
  453. }
  454. .list-groups{
  455. width: 60%;
  456. }
  457. .groups-list{
  458. background-color: #fff;
  459. padding: 10px;
  460. border-radius: 10px;
  461. box-shadow: 0 0 5px #0003;
  462. min-height: 520px;
  463. }
  464. .list-groups .block{
  465. margin-top: 20px;
  466. }
  467. .list-title{
  468. display: flex;
  469. font-size: 17px;
  470. font-weight:600 ;
  471. color: #555;
  472. margin-top: 8px;
  473. margin-bottom: 2px;
  474. justify-content: space-between;
  475. align-items: center;
  476. }
  477. .sources-ul{
  478. margin-top: 25px;
  479. display: flex;
  480. justify-content: space-between;
  481. }
  482. .sources-li{
  483. cursor: pointer;
  484. width: 30%;
  485. display: flex;
  486. justify-content: space-between;
  487. align-items: center;
  488. border-radius: 10px;
  489. padding: 14px 0px;
  490. }
  491. .sources-icon i{
  492. width: 70px;
  493. height: 90px;
  494. display: inline-block;
  495. font-size: 70px;
  496. display: flex;
  497. align-items: center;
  498. color: #fff8;
  499. }
  500. .sources-tlite{
  501. width: 70%;
  502. }
  503. .sources-icon{
  504. margin-right: 20px;
  505. }
  506. .sources-tlite p{
  507. text-align: center;
  508. color: #fff;
  509. font-size: 24px;
  510. font-weight: 600;
  511. }
  512. .sources-li:nth-child(1){
  513. background-color: #6bafbd !important;
  514. }
  515. .sources-li:nth-child(2){
  516. background-color: #f3ce85 !important;
  517. }
  518. .sources-li:nth-child(3){
  519. background-color: #65cea7 !important;
  520. }
  521. .tabular-all{
  522. display: flex;
  523. justify-content: space-between;
  524. }
  525. .schedule-box{
  526. width: 39%;
  527. }
  528. .schedule{
  529. padding: 10px;
  530. background-color: #fff;
  531. border-radius: 10px;
  532. box-shadow: 0 0 5px #0005;
  533. }
  534. .fc-toolbar-chunk .fc-toolbar-title{
  535. color: #555;
  536. }
  537. .search-box{
  538. display: flex;
  539. }
  540. .search-box>button{
  541. margin-left: 10px;
  542. padding: 8px 20px;
  543. }
  544. .icon-shichangbu{
  545. font-size: 58px;
  546. }
  547. .groups-list .el-table .el-table__cell{
  548. padding: 8px 0;
  549. }
  550. .fc .fc-button-primary{
  551. background-color: #5EADFF;
  552. border-color: #5EADFF;
  553. }
  554. .fc .fc-button-primary:hover{
  555. background-color: #108dff;
  556. border-color: #108dff;
  557. }
  558. .fc .fc-button-primary:not(:disabled):active:focus {
  559. box-shadow: none;
  560. }
  561. .fc .fc-button-primary:not(:disabled):active {
  562. background-color: #108dff;
  563. border-color: #108dff;
  564. }
  565. .fc .fc-button-primary:focus {
  566. box-shadow: none;
  567. }
  568. .fc .fc-button-primary:disabled {
  569. background-color: #5EADFF;
  570. border-color: #5EADFF;
  571. }
  572. .fc .fc-button-primary:not(:disabled).fc-button-active:focus{
  573. box-shadow:none;
  574. }
  575. .fc .fc-button-primary:not(:disabled).fc-button-active{
  576. background-color: #108dff;
  577. border-color: #108dff;
  578. }
  579. .fc .fc-toolbar.fc-header-toolbar{
  580. margin-bottom: 0.1em;
  581. }
  582. .skip-text{
  583. display: flex;
  584. justify-content: end;
  585. margin-top: 20px;
  586. color: #606266;
  587. font-size:16px ;
  588. }
  589. .text-go{
  590. padding: 20px;
  591. box-shadow: 0 0 10px #0005;
  592. background-color:#fff;
  593. border-radius: 5px;
  594. width: 20%;
  595. text-align: center;
  596. }
  597. @media screen and (max-width: 1600px) {
  598. .tabular-all{
  599. display: inline-block;
  600. width:100% ;
  601. }
  602. .list-groups{
  603. width:100% ;
  604. }
  605. .schedule-box{
  606. margin-top: 20px;
  607. width: 100%;
  608. }
  609. }
  610. </style>