calendar.vue 32 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052
  1. <template>
  2. <div>
  3. <!-- <basic-block title=""> -->
  4. <!--
  5. <div class="tag-tip">
  6. <el-tag size="small" color="#f08f00">审核中</el-tag>
  7. <el-tag size="small" color="#6bb377">已审核</el-tag>
  8. <el-tag size="small" color="#999">已结算</el-tag>
  9. </div>
  10. -->
  11. <el-row type="flex" justify="space-between">
  12. <!--
  13. <el-col :span="4">
  14. <div class="room-content">
  15. <div class="room-title">会议室列表</div>
  16. <div class="room-list" :class="{'active-list': index === activeNum}"
  17. v-for="(item, index) in meetingRoomList" :key="index" @click="chooseRoom(index)">
  18. <span>{{ item.name }}</span>
  19. </div>
  20. </div>
  21. </el-col>
  22. -->
  23. <el-col :span="24">
  24. <div class="calendar-box">
  25. <!-- 日历菜单栏 -->
  26. <full-calendar
  27. ref="fullCalendar"
  28. style="height: 100%"
  29. :options="calendarOptions"
  30. id="calendar"
  31. alt=""
  32. >
  33. </full-calendar>
  34. </div>
  35. </el-col>
  36. </el-row>
  37. <el-dialog
  38. title="删除"
  39. :visible.sync="delStatus"
  40. width="30%"
  41. center
  42. :modal-append-to-body="false"
  43. >
  44. <span>是否确定删除</span>
  45. <span slot="footer" class="dialog-footer">
  46. <el-button @click="delStatus = false">取消</el-button>
  47. <el-button type="primary" @click="savedel()">确定</el-button>
  48. </span>
  49. </el-dialog>
  50. <!-- 悬停窗体 -->
  51. <div
  52. class="over"
  53. ref="ove"
  54. @mouseenter="showEwm(1)"
  55. @mouseleave="showEwm(0)"
  56. >
  57. <img src="../../../assets/close.png" class="fr" @click="closexuan" />
  58. <img src="../../../assets/del.png" class="fr" @click="delxuan" />
  59. <img src="../../../assets/xiugai.png" class="fr" @click="xiuxuan" />
  60. <div>
  61. <img src="../../../assets/POINT.png" /><span id="aaaa"></span>
  62. </div>
  63. <div><img src="../../../assets/time.png" /><span id="bbbb"></span></div>
  64. <div>
  65. <img src="../../../assets/steam.png" /><span id="cccc"></span>
  66. </div>
  67. <div>
  68. <img src="../../../assets/neirong.png" /><span id="dddd"></span>
  69. </div>
  70. </div>
  71. <!--日程新增弹窗start-->
  72. <el-dialog
  73. :title="titleNew"
  74. :visible.sync="dialogVisible"
  75. :before-close="close"
  76. :modal="false"
  77. width="45%"
  78. >
  79. <el-form
  80. :model="form"
  81. :rules="rules"
  82. ref="form"
  83. label-width="120px"
  84. size="small"
  85. class="demo-ruleForm"
  86. :disabled="auth ? false : 'disabled'"
  87. >
  88. <el-form-item label="会议名称" prop="title">
  89. <el-input v-model="form.title"></el-input>
  90. </el-form-item>
  91. <el-form-item label="参会角色" prop="orgId">
  92. <el-select
  93. v-model="form.orgId"
  94. style="width: 70%; overflow: hidden"
  95. clearable
  96. filterable
  97. placeholder="参会角色"
  98. multiple
  99. >
  100. <el-option
  101. v-for="item in roleNameList"
  102. :key="item.userId"
  103. :label="item.name"
  104. :value="item.userId"
  105. >
  106. </el-option>
  107. </el-select>
  108. </el-form-item>
  109. <el-form-item label="是否是党会" prop="isParty">
  110. <el-select
  111. v-model="form.isParty"
  112. clearable
  113. style="width: 70%"
  114. filterable
  115. placeholder="是否是党会"
  116. >
  117. <el-option
  118. v-for="item in isParrty"
  119. :key="item.is_party"
  120. :label="item.name"
  121. :value="item.is_party"
  122. >
  123. </el-option>
  124. </el-select>
  125. </el-form-item>
  126. <el-form-item label="发起科室" prop="leaderName">
  127. <el-input v-model="form.leaderName"></el-input>
  128. </el-form-item>
  129. <el-form-item label="会议开始时间" required>
  130. <el-col :span="11">
  131. <el-form-item prop="begindate" style="margin-bottom: 0">
  132. <el-date-picker
  133. type="date"
  134. disabled
  135. format="yyyy-MM-dd"
  136. value-format="yyyy-MM-dd"
  137. placeholder="选择日期"
  138. v-model="form.begindate"
  139. style="width: 100%"
  140. >
  141. </el-date-picker>
  142. </el-form-item>
  143. </el-col>
  144. <el-col class="line" :span="2">-</el-col>
  145. <el-col :span="11">
  146. <el-form-item prop="startTime" style="margin-bottom: 0">
  147. <el-select
  148. v-model="form.startTime"
  149. placeholder="选择时间"
  150. clearable
  151. >
  152. <el-option
  153. v-for="item in timeOptions"
  154. :key="item.time"
  155. :disabled="item.disabled"
  156. :label="item.time"
  157. :value="item.time"
  158. />
  159. </el-select>
  160. <!-- <el-time-select placeholder="选择时间"-->
  161. <!-- v-model="form.startTime"-->
  162. <!-- :picker-options="{-->
  163. <!-- start: '09:00',-->
  164. <!-- step: '00:30',-->
  165. <!-- end: '20:00 ',-->
  166. <!-- }"-->
  167. <!-- @change="onStartTime"-->
  168. <!-- style="width: 100%;">-->
  169. <!-- </el-time-select>-->
  170. </el-form-item>
  171. </el-col>
  172. </el-form-item>
  173. <el-form-item label="会议结束时间" required>
  174. <el-col :span="11">
  175. <el-form-item prop="enddate" style="margin-bottom: 0">
  176. <el-date-picker
  177. type="date"
  178. disabled
  179. format="yyyy-MM-dd"
  180. value-format="yyyy-MM-dd"
  181. placeholder="选择日期"
  182. v-model="form.enddate"
  183. style="width: 100%"
  184. >
  185. </el-date-picker>
  186. </el-form-item>
  187. </el-col>
  188. <el-col class="line" :span="2">-</el-col>
  189. <el-col :span="11">
  190. <el-form-item prop="endTime" style="margin-bottom: 0">
  191. <!-- <el-time-select placeholder="选择时间"-->
  192. <!-- v-model="form.endTime"-->
  193. <!-- :picker-options="{-->
  194. <!-- start: '00:00',-->
  195. <!-- step: '00:30',-->
  196. <!-- end: '23:30 ',-->
  197. <!-- minTime: form.startTime-->
  198. <!-- }"-->
  199. <!-- style="width: 100%;">-->
  200. <!-- </el-time-select>-->
  201. <el-select
  202. v-model="form.endTime"
  203. placeholder="选择时间"
  204. clearable
  205. >
  206. <el-option
  207. v-for="item in timeOptions"
  208. :key="item.time"
  209. :disabled="item.disabled"
  210. :label="item.time"
  211. :value="item.time"
  212. />
  213. </el-select>
  214. </el-form-item>
  215. </el-col>
  216. </el-form-item>
  217. <el-form-item label="会议备注" prop="remark">
  218. <el-input type="textarea" v-model="form.remark"></el-input>
  219. </el-form-item>
  220. <el-form-item>
  221. <el-button @click="resetForm('form')">取消</el-button>
  222. <el-button type="primary" @click="submitForm('form')"
  223. >提交</el-button
  224. >
  225. </el-form-item>
  226. </el-form>
  227. </el-dialog>
  228. <!--日程新增弹窗end-->
  229. <!-- </basic-block> -->
  230. </div>
  231. </template>
  232. <script>
  233. import _ from "lodash"; //导入loadsh插件
  234. // 引入日历组件
  235. import FullCalendar from "@fullcalendar/vue";
  236. import dayGridPlugin from "@fullcalendar/daygrid";
  237. import interactionPlugin from "@fullcalendar/interaction";
  238. // 引入js数据
  239. // import array from '@/utils/home'
  240. export default {
  241. name: "Home",
  242. components: {
  243. FullCalendar, // make the <FullCalendar> tag available
  244. },
  245. data() {
  246. return {
  247. activeNum: 0,
  248. dialogVisible: false,
  249. // meetingRoomList: [],
  250. subList: [],
  251. array: [],
  252. auth: false,
  253. roleNameList: [
  254. {
  255. userId: 1,
  256. name: "分管公司领导/部门负责人",
  257. },
  258. {
  259. userId: 2,
  260. name: "部门负责人",
  261. },
  262. {
  263. userId: 3,
  264. name: "部门分管线条领导/科室主任",
  265. },
  266. ],
  267. isParrty: [
  268. {
  269. is_party: "1",
  270. name: "是",
  271. },
  272. {
  273. is_party: "0",
  274. name: "否",
  275. },
  276. ],
  277. idx: "",
  278. xtop: "",
  279. xleft: "",
  280. calEventt: {},
  281. form: {
  282. title: "",
  283. userId: "",
  284. begindate: "",
  285. startTime: "",
  286. enddate: "",
  287. endTime: "",
  288. remark: "",
  289. leaderName: "",
  290. roleId: "",
  291. roleColor: "",
  292. id: "",
  293. isParty: "否",
  294. // roleName: '分管公司领导/部门负责人'
  295. // roleName: [],
  296. orgId: [2, 3],
  297. // orgIds: "[2,3]",
  298. },
  299. rules: {
  300. title: [{ required: true, message: "请输入会议主题", trigger: "blur" }],
  301. userid: [
  302. { required: true, message: "请选择会议室使用人", trigger: "change" },
  303. ],
  304. begindate: [
  305. { required: true, message: "请选择开始日期", trigger: "change" },
  306. ],
  307. startTime: [
  308. { required: true, message: "请选择开始时间", trigger: "change" },
  309. ],
  310. enddate: [
  311. { required: true, message: "请选择结束日期", trigger: "change" },
  312. ],
  313. endTime: [
  314. { required: true, message: "请选择结束时间", trigger: "change" },
  315. ],
  316. remark: [
  317. { required: true, message: "请填写会议备注", trigger: "blur" },
  318. ],
  319. leaderName: [{ required: true, message: "发起科室", trigger: "blur" }],
  320. isParty: [{ required: true, message: "是否是党会", trigger: "change" }],
  321. // roleName:[{required: true, message: '参会角色', trigger: 'change'}],
  322. orgId: [{ required: true, message: "参会角色", trigger: "change" }],
  323. // orgIds: [{required: true, message: '参会角色', trigger: 'change'}]
  324. },
  325. calendarOptions: {
  326. // timeGridPlugin 可显示每日时间段
  327. height: 700,
  328. plugins: [dayGridPlugin, interactionPlugin],
  329. headerToolbar: {
  330. left: "title",
  331. center: "",
  332. right: "today prev dayGridMonth,dayGridWeek,dayGrid next",
  333. // right: 'agendaWeek,dayGridWeek,dayGrid'
  334. },
  335. buttonText: {
  336. // 设置按钮
  337. today: "今天",
  338. month: "月",
  339. week: "周",
  340. dayGrid: "天",
  341. },
  342. // allDaySlot: false,
  343. editable: false,
  344. selectable: true,
  345. navLinks: true,
  346. // displayEventEnd: true,//所有视图显示结束时间
  347. initialView: "dayGridMonth", // 设置默认显示月,可选周、日
  348. dateClick: this.handleDateClick, //点击日历
  349. eventClick: this.handleEventClick, //日历日程点击
  350. eventsSet: this.handleEvents,
  351. select: this.handleDateSelect,
  352. eventMouseEnter: this.eventmouseover, //鼠标滑过
  353. eventMouseLeave: this.eventmouseout, //鼠标离开
  354. // timezone
  355. // 设置日程
  356. events: [
  357. // {
  358. // id: 1,
  359. // title: '09:30~11:30 小破孩',
  360. // start: '2020-12-11',
  361. // end: '2020-12-13',
  362. // color: '#f08f00',
  363. // },
  364. // {
  365. // id: 2,
  366. // title: '9:30~14:30 项目会议',
  367. // start: '2020-12-14',
  368. // end: '2020-12-14',
  369. // color: '#6bb377',
  370. // },
  371. ],
  372. eventColor: "", // 修改日程背景色
  373. locale: "zh-cn", // 设置语言
  374. weekNumberCalculation: "ISO", // 周数
  375. customButtons: {
  376. prev: {
  377. // this overrides the prev button
  378. text: "PREV",
  379. click: () => {
  380. this.prev();
  381. },
  382. },
  383. next: {
  384. // this overrides the next button
  385. text: "PREV",
  386. click: () => {
  387. this.next();
  388. },
  389. },
  390. today: {
  391. text: "今天",
  392. click: () => {
  393. this.today();
  394. },
  395. },
  396. },
  397. },
  398. // 时间选项
  399. timeOptions: [
  400. { time: "08:00" },
  401. { time: "08:30" },
  402. { time: "09:00" },
  403. { time: "09:30" },
  404. { time: "10:00" },
  405. { time: "10:30" },
  406. { time: "11:00" },
  407. { time: "11:30" },
  408. { time: "12:00" },
  409. { time: "12:30" },
  410. { time: "13:00" },
  411. { time: "13:30" },
  412. { time: "14:00" },
  413. { time: "14:30" },
  414. { time: "15:00" },
  415. { time: "15:30" },
  416. { time: "16:00" },
  417. { time: "16:30" },
  418. { time: "17:00" },
  419. { time: "17:30" },
  420. { time: "18:00" },
  421. ],
  422. // 备份
  423. backupTimeOptions: [
  424. { time: "08:00" },
  425. { time: "08:30" },
  426. { time: "09:00" },
  427. { time: "09:30" },
  428. { time: "10:00" },
  429. { time: "10:30" },
  430. { time: "11:00" },
  431. { time: "11:30" },
  432. { time: "12:00" },
  433. { time: "12:30" },
  434. { time: "13:00" },
  435. { time: "13:30" },
  436. { time: "14:00" },
  437. { time: "14:30" },
  438. { time: "15:00" },
  439. { time: "15:30" },
  440. { time: "16:00" },
  441. { time: "16:30" },
  442. { time: "17:00" },
  443. { time: "17:30" },
  444. { time: "18:00" },
  445. ],
  446. newfrom: [], //新获得过滤数字
  447. titleNew: "",
  448. delStatus: false,
  449. showEvmStatus: false,
  450. };
  451. },
  452. mounted() {
  453. // 获取用户信息
  454. this.calendarApi = this.$refs.fullCalendar.getApi();
  455. // this.meetingRoomList = this.array.meetingRoomList;
  456. // console.log('this.array', this.array)
  457. // this.getReservationList(this.array.scheduleList0);
  458. this.queryRole();
  459. this.getList();
  460. },
  461. methods: {
  462. // 获取会议信息
  463. getList() {
  464. this.$http({
  465. url: "/market/calendar/queryList",
  466. method: "post",
  467. headers: {
  468. "Content-Type": "application/json",
  469. },
  470. data: { isFile: "0" },
  471. }).then((res) => {
  472. // console.log("res", res);
  473. if (res.data && res.data.length > 0) {
  474. this.array = res.data;
  475. // this.getReservationList(this.array.scheduleList0);
  476. this.getReservationList(this.array);
  477. }
  478. });
  479. },
  480. // 获取会议信息
  481. queryRole() {
  482. this.$http({
  483. url: "/market/calendar/queryRole",
  484. method: "post",
  485. headers: {
  486. "Content-Type": "application/json",
  487. },
  488. data: { isFile: "0" },
  489. }).then((res) => {
  490. // console.log(res);
  491. // console.log('res====', typeof res.data)
  492. // console.log(res.data)
  493. this.auth = res.data;
  494. // console.log("res.data", res.data)
  495. });
  496. },
  497. getReservationList(arrayData) {
  498. // console.log(arrayData);
  499. let newArr = [];
  500. this.subList = arrayData;
  501. // let year = new Date(new Date()).getFullYear();
  502. // let month =
  503. // new Date(new Date()).getMonth() + 1 < 10
  504. // ? "0" + (new Date(new Date()).getMonth() + 1)
  505. // : new Date(new Date()).getMonth() + 1;
  506. // let date =
  507. // new Date(new Date()).getDate() < 10
  508. // ? "0" + new Date(new Date()).getDate()
  509. // : new Date(new Date()).getDate();
  510. // let hh =
  511. // new Date(new Date()).getHours() < 10
  512. // ? "0" + new Date(new Date()).getHours()
  513. // : new Date(new Date()).getHours();
  514. // let mm =
  515. // new Date(new Date()).getMinutes() < 10
  516. // ? "0" + new Date(new Date()).getMinutes()
  517. // : new Date(new Date()).getMinutes();
  518. // let nowday = year + "-" + month + "-" + date;
  519. // let nowtime = hh + ":" + mm;
  520. // let a = arrayData.filter((items) => {
  521. // return items.begindate.indexOf(nowday) > -1;
  522. // });
  523. // let b = arrayData.filter((items) => {
  524. // return items.begindate.indexOf(nowday) == -1;
  525. // });
  526. // console.log(a.length);
  527. // if (a.length == 1) {
  528. // a.map((item) => {
  529. // newArr.push({
  530. // newBeginTime: item.begindate.split(" ")[1].substr(0, 5),
  531. // newEndTime: item.enddate.split(" ")[1].substr(0, 5),
  532. // start: this.dealWithTime(item.begindate),
  533. // end: this.addDate(this.dealWithTime(item.enddate), 1),
  534. // textColor: item.roleColor,
  535. // id: item.id,
  536. // title: `${this.getTitle(
  537. // item.begindate,
  538. // item.enddate,
  539. // item.isParty
  540. // )} ${ item.title} ${"召集人:" + item.leaderName}`,
  541. // });
  542. // });
  543. // } else {
  544. // a.map((item) => {
  545. // if (
  546. // parseInt(nowtime) >=
  547. // parseInt(item.begindate.split(" ")[1].substr(0, 5)) - 1 &&
  548. // parseInt(nowtime) <
  549. // parseInt(item.enddate.split(" ")[1].substr(0, 5))
  550. // ) {
  551. // newArr.push({
  552. // newBeginTime: item.begindate.split(" ")[1].substr(0, 5),
  553. // newEndTime: item.enddate.split(" ")[1].substr(0, 5),
  554. // start: this.dealWithTime(item.begindate),
  555. // end: this.addDate(this.dealWithTime(item.enddate), 1),
  556. // textColor: item.roleColor,
  557. // id: item.id,
  558. // title: `${this.getTitle(
  559. // item.begindate,
  560. // item.enddate,
  561. // item.isParty
  562. // )} ${item.title} ${
  563. // "召集人:" + item.leaderName
  564. // }`,
  565. // });
  566. // }
  567. // });
  568. // }
  569. // b.map((item) => {
  570. // newArr.push({
  571. // newBeginTime: item.begindate.split(" ")[1].substr(0, 5),
  572. // newEndTime: item.enddate.split(" ")[1].substr(0, 5),
  573. // start: this.dealWithTime(item.begindate),
  574. // end: this.addDate(this.dealWithTime(item.enddate), 1),
  575. // textColor: item.roleColor,
  576. // id: item.id,
  577. // title: `${this.getTitle(
  578. // item.begindate,
  579. // item.enddate,
  580. // item.isParty
  581. // )} ${ item.title} ${"召集人:" + item.leaderName}`,
  582. // });
  583. // });
  584. arrayData.forEach((item) => {
  585. // console.log("item", item);
  586. newArr.push({
  587. newBeginTime: item.begindate.split(" ")[1].substr(0, 5),
  588. newEndTime: item.enddate.split(" ")[1].substr(0, 5),
  589. start: this.dealWithTime(item.begindate),
  590. end: this.addDate(this.dealWithTime(item.enddate), 1),
  591. textColor: item.roleColor,
  592. id: item.id,
  593. title: `${this.getTitle(
  594. item.begindate,
  595. item.enddate,
  596. item.isParty
  597. )} ${item.title} ${"召集人:" + item.leaderName}`,
  598. });
  599. });
  600. this.calendarOptions.events = newArr;
  601. // console.log(this.calendarOptions.events);
  602. // debugger
  603. },
  604. // 切换教室
  605. chooseRoom(index) {
  606. this.activeNum = index;
  607. // 查询该会议室下面的会议事件
  608. if (index === 0) {
  609. this.getReservationList(this.array.scheduleList0);
  610. } else if (index === 1) {
  611. this.getReservationList(this.array.scheduleList1);
  612. }
  613. },
  614. // 日期加1天
  615. addDate(date, days) {
  616. var d = new Date(date);
  617. d.setDate(d.getDate() + days);
  618. var mon =
  619. d.getMonth() + 1 < 10 ? "0" + (d.getMonth() + 1) : d.getMonth() + 1;
  620. let endD = d.getDate() < 10 ? "0" + d.getDate() : d.getDate();
  621. return `${d.getFullYear()}-${mon}-${endD}`;
  622. },
  623. // 获取会议事件title
  624. // getTitle(date1, date2) {
  625. // let start = date1.substring(11, 16);
  626. // let end = date2.substring(11, 16);
  627. // return `${start}~${end}`;
  628. // },
  629. // 获取会议事件title
  630. getTitle(date1, date2, isParty) {
  631. let start =
  632. isParty == "1"
  633. ? "★" + date1.substring(11, 16)
  634. : date1.substring(11, 16);
  635. let end = date2.substring(11, 16);
  636. return `${start}~${end}`;
  637. },
  638. getShowTime(beginDate, endDate) {
  639. this.form.begindate = this.dealWithTime(beginDate);
  640. this.form.startTime = this.getHoursMin(beginDate);
  641. this.form.enddate = this.dealWithTime(endDate);
  642. this.form.endTime = this.getHoursMin(endDate);
  643. // console.log(this.form);
  644. // this.$forceUpdate()
  645. this.form = { ...this.form };
  646. },
  647. // 获取时分时间
  648. getHoursMin(value) {
  649. return value.substring(11, 16);
  650. },
  651. // 处理会议时间格式
  652. dealWithTime(date) {
  653. let newDate = /\d{4}-\d{1,2}-\d{1,2}/g.exec(date)[0];
  654. return newDate;
  655. },
  656. showEwm(a) {
  657. if (a == 0) {
  658. this.showEvmStatus = false;
  659. this.closexuan();
  660. } else {
  661. //驶入
  662. this.showEvmStatus = true;
  663. }
  664. },
  665. //渲染窗体
  666. xuanchuang(calEvent, event) {
  667. // console.log(this.array, '鼠标经过arr');
  668. // console.log(calEvent, '鼠标经过cal');
  669. this.idx = calEvent.event.id;
  670. this.$refs.ove.style.opacity = 0.8;
  671. this.$refs.ove.style.display = "block";
  672. event = event || window.event;
  673. this.xtop = event.clientY + "px";
  674. this.xleft = event.clientX + "px";
  675. this.$refs.ove.style.left = event.clientX + "px";
  676. this.$refs.ove.style.top = event.clientY + "px";
  677. var j = 0;
  678. for (var i = 0; i < this.array.length; i++) {
  679. if (this.array[i].id == calEvent.event.id) {
  680. j = i;
  681. }
  682. }
  683. document.querySelector("#aaaa").innerHTML = this.array[j].title;
  684. document.querySelector("#bbbb").innerHTML =
  685. calEvent.event.startStr.substring(5, 7) +
  686. "月" +
  687. calEvent.event.startStr.substring(8) +
  688. "日" +
  689. calEvent.event._def.extendedProps.newBeginTime +
  690. "-" +
  691. calEvent.event._def.extendedProps.newEndTime;
  692. document.querySelector("#cccc").innerHTML = this.array[j].leaderName;
  693. document.querySelector("#dddd").innerHTML = this.array[j].remark;
  694. },
  695. //鼠标滑过事件
  696. eventmouseover(calEvent, event) {
  697. // console.log(123);
  698. this.xuanchuang(calEvent, event);
  699. },
  700. eventmouseout() {
  701. // setInterval(() =>{
  702. // if(this.showEvmStatus == false){
  703. // this.closexuan()
  704. // }
  705. // },3000)
  706. },
  707. //关闭悬停窗口
  708. closexuan() {
  709. this.$refs.ove.style.display = "none";
  710. },
  711. //悬停窗体修改按钮
  712. xiuxuan(events) {
  713. var j = 0;
  714. for (var i = 0; i < this.array.length; i++) {
  715. if (this.array[i].id == this.idx) {
  716. j = i;
  717. }
  718. }
  719. this.calEventt.event = this.array[j];
  720. var aa = this.calEventt;
  721. this.handleEventClick(aa);
  722. },
  723. //悬停窗体删除按钮
  724. delxuan() {
  725. if (!this.auth) {
  726. return;
  727. }
  728. this.delStatus = true;
  729. },
  730. // 点击日历
  731. handleDateClick: function (arg) {
  732. this.form.orgId = [];
  733. this.form.isParty = "";
  734. this.titleNew = "会议新增";
  735. if (!this.auth) {
  736. return;
  737. }
  738. // this.$forceUpdate();
  739. //开始时间
  740. this.form.begindate = arg.dateStr;
  741. //结束时间
  742. this.form.enddate = arg.dateStr;
  743. // this.$http({
  744. // url: "/market/calendar/queryNow",
  745. // method: "post",
  746. // headers: {
  747. // "Content-Type": "application/json",
  748. // },
  749. // data: { now: arg.dateStr },
  750. // }).then((res) => {
  751. // if (res.data) {
  752. // let result = [];
  753. // result = res.data;
  754. // result.map((item) => {
  755. // item.begindate = item.begindate.substring(10).substring(1, 6);
  756. // item.enddate = item.enddate.substring(10).substring(1, 6);
  757. // return result;
  758. // });
  759. // this.newfrom = result;
  760. // }
  761. // });
  762. this.dialogVisible = true;
  763. },
  764. // 日历日程点击事件
  765. handleEventClick(calEvent) {
  766. this.titleNew = "会议修改";
  767. this.dialogVisible = true;
  768. let id = calEvent.event.id;
  769. let info = this.subList.filter((item) => {
  770. return item.id == id;
  771. });
  772. this.$nextTick(() => {
  773. this.form = _.cloneDeep(info[0]);
  774. // 处理时间回显
  775. this.getShowTime(this.form.begindate, this.form.enddate);
  776. // this.gitPeople(this.form.roleName);
  777. this.orgId = this.form.roleName;
  778. // this.orgIds=this.form.roleName
  779. // this.roleNameList.userId=info[0].roleName
  780. });
  781. },
  782. // gitPeople(orgIds){
  783. // this.form.orgId = this.getPeoplee(orgIds);
  784. // },
  785. // getPeoplee(orgIds){
  786. // for(var i=0;i<this.roleNameList.length;i++){
  787. // if(orgIds==this.roleNameList[i].userId){
  788. // return this.roleNameList.name
  789. // }
  790. // }
  791. // },
  792. handleEvents(events) {
  793. // console.log(events, "事件3");
  794. },
  795. handleDateSelect(selectInfo) {
  796. // console.log(selectInfo, "限制");
  797. },
  798. // 切换上一个按钮
  799. prev() {
  800. this.calendarApi.prev();
  801. },
  802. // 切换下一个按钮事件
  803. next() {
  804. this.calendarApi.next();
  805. },
  806. // 点击今天按钮
  807. today() {
  808. this.calendarApi.today();
  809. },
  810. //提交删除后的数据
  811. savedel() {
  812. this.$http({
  813. url: "/market/calendar/del",
  814. method: "post",
  815. headers: {
  816. "Content-Type": "application/json",
  817. },
  818. data: {
  819. id: this.idx,
  820. },
  821. }).then((res) => {
  822. // console.log(res);
  823. location.reload();
  824. });
  825. },
  826. // 提交数据
  827. submitForm(formName) {
  828. this.$refs[formName].validate((valid) => {
  829. if (valid) {
  830. this.form.begindate = `${this.form.begindate} ${this.form.startTime}`;
  831. this.form.enddate = `${this.form.enddate} ${this.form.endTime}`;
  832. // console.log(this.form, "数据");
  833. this.dialogVisible = false;
  834. if (this.form.id === "") {
  835. this.form === "";
  836. }
  837. if (new Date(this.form.enddate) < new Date(this.form.begindate)) {
  838. this.$message({
  839. message: "会议时间填写错误",
  840. type: "error",
  841. });
  842. } else {
  843. this.$http({
  844. url:
  845. this.form.id === ""
  846. ? "/market/calendar/add"
  847. : "/market/calendar/update",
  848. method: "post",
  849. headers: {
  850. "Content-Type": "application/json",
  851. },
  852. data: this.form,
  853. }).then((res) => {
  854. // console.log(res);
  855. this.loadinged = false;
  856. if (res.data.result === 1) {
  857. this.$message({
  858. message: res.data.desc,
  859. type: "error",
  860. });
  861. } else {
  862. this.$message({
  863. message: "成功",
  864. type: "success",
  865. });
  866. location.reload();
  867. }
  868. });
  869. }
  870. } else {
  871. // console.log("error submit!!");
  872. return false;
  873. }
  874. });
  875. },
  876. resetForm(formName) {
  877. this.dialogVisible = false;
  878. this.$refs[formName].resetFields();
  879. },
  880. //关闭弹窗,重置表单
  881. close() {
  882. this.dialogVisible = false;
  883. this.$refs["form"].resetFields();
  884. },
  885. onStartTime(val) {
  886. // console.log("val", val);
  887. this.form.startTime = val;
  888. },
  889. //开始时间 option显示/隐藏
  890. handleBeginTimeOptionShow(_value) {
  891. if (_value) {
  892. let disabledOnOff = false;
  893. // 第一次过滤,过滤掉结束时间
  894. this.timeOptions = this.backupTimeOptions.map((_item) => {
  895. const result = { time: _item.time, disabled: _item.disabled };
  896. if (_item.time === this.form.endTime) {
  897. disabledOnOff = true;
  898. }
  899. if (disabledOnOff) {
  900. result.disabled = true;
  901. }
  902. return result;
  903. });
  904. // 第二次过滤,过滤掉后端返回的数据
  905. // console.log(this.newfrom);
  906. this.newfrom.map((_item) => {
  907. this.timeOptions = this.timeOptions.map((_timeOptionItem) => {
  908. // debugger
  909. // 开始
  910. if (_item.begindate === _timeOptionItem.time) {
  911. disabledOnOff = true;
  912. }
  913. // 结束
  914. if (_item.enddate === _timeOptionItem.time) {
  915. disabledOnOff = false;
  916. }
  917. if (disabledOnOff) {
  918. _timeOptionItem.disabled = true;
  919. }
  920. return _timeOptionItem;
  921. });
  922. });
  923. } else {
  924. this.timeOptions = this.backupTimeOptions;
  925. }
  926. },
  927. //结束时间 option显示/隐藏
  928. handleEndTimeOptionShow(_value) {
  929. // 下拉显示
  930. if (_value) {
  931. let disabledOnOff = true;
  932. if (this.form.startTime !== "") {
  933. // 第一次过滤,过滤掉开始时间
  934. this.timeOptions = this.backupTimeOptions.map((_item) => {
  935. const result = { time: _item.time, disabled: _item.disabled };
  936. if (disabledOnOff) {
  937. result.disabled = true;
  938. }
  939. if (_item.time === this.form.startTime) {
  940. disabledOnOff = false;
  941. }
  942. return result;
  943. });
  944. }
  945. // 第二次过滤,过滤掉后端返回的数据
  946. disabledOnOff = false;
  947. this.newfrom.map((_item) => {
  948. this.timeOptions = this.timeOptions.map((_timeOptionItem) => {
  949. // debugger
  950. if (disabledOnOff) {
  951. _timeOptionItem.disabled = true;
  952. }
  953. // 开始
  954. if (_item.begindate === _timeOptionItem.time) {
  955. disabledOnOff = true;
  956. }
  957. // 结束
  958. if (_item.enddate === _timeOptionItem.time) {
  959. disabledOnOff = false;
  960. }
  961. return _timeOptionItem;
  962. });
  963. });
  964. } else {
  965. this.timeOptions = this.backupTimeOptions;
  966. }
  967. },
  968. },
  969. };
  970. </script>
  971. <style lang="scss" scoped>
  972. @import "src/assets/calendar";
  973. .el-row--flex.is-justify-space-between {
  974. justify-content: center;
  975. }
  976. .over {
  977. position: absolute;
  978. width: 200px;
  979. height: 190px;
  980. background: #eee;
  981. border: 1px solid black;
  982. z-index: 100;
  983. padding: 10px;
  984. border-radius: 5px;
  985. top: 0;
  986. left: 0;
  987. opacity: 0;
  988. }
  989. .over img {
  990. width: 16px;
  991. height: 16px;
  992. margin-right: 5px;
  993. }
  994. .over div {
  995. margin: 20px 0px;
  996. height: 17px;
  997. }
  998. .over div img {
  999. height: 17px;
  1000. }
  1001. .over div span {
  1002. margin-left: 5px;
  1003. height: 17px;
  1004. padding-top: -62px;
  1005. font-size: 12px;
  1006. position: relative;
  1007. top: -4.5px;
  1008. }
  1009. .fr {
  1010. float: right;
  1011. }
  1012. ::v-deep .fc-sticky {
  1013. background-color: #fff !important;
  1014. border: 1px solid #fff !important;
  1015. font-size: 12px;
  1016. overflow: hidden;
  1017. text-overflow: ellipsis;
  1018. white-space: nowrap;
  1019. }
  1020. ::v-deep .fc-h-event {
  1021. border: none !important;
  1022. background-color: #fff !important;
  1023. }
  1024. ::v-deep .el-select__tags {
  1025. flex-flow: inherit;
  1026. overflow: hidden;
  1027. flex-wrap: inherit;
  1028. }
  1029. .calendar-box {
  1030. margin: 10px;
  1031. }
  1032. ::v-deep .fc-col-header-cell-cushion {
  1033. font-size: 18px;
  1034. line-height: 50px;
  1035. }
  1036. ::v-deep .fc .fc-daygrid-day-top {
  1037. justify-content: center;
  1038. margin-top: 5px;
  1039. }
  1040. </style>