1、日历调整,改为显示总场次,加入下钻

2、参会领导非必填
3、预约列表加入排序和会议室筛选
This commit is contained in:
471615499@qq.com 2024-10-28 21:51:05 +08:00
parent 9aee7cd51d
commit 614531e765
9 changed files with 268 additions and 17 deletions

View File

@ -36,6 +36,7 @@
"vue-clipboard2": "^0.2.1",
"vue-cropper": "0.4.9",
"vue-i18n": "^8.17.4",
"vue-qr": "^4.0.9",
"vue-quill-editor": "^3.0.6",
"vue-router": "^3.1.2",
"vue-svg-component-runtime": "^1.0.1",

View File

@ -11,7 +11,7 @@ import { axios } from '@/utils/request'
* @param parameter
* @returns {*}
*/
export function login (parameter) {
export function login(parameter) {
return axios({
url: '/login/slide',
method: 'post',
@ -19,7 +19,7 @@ export function login (parameter) {
})
}
export function getLoginSms (parameter) {
export function getLoginSms(parameter) {
return axios({
url: '/system/sms/send',
method: 'get',
@ -27,7 +27,7 @@ export function getLoginSms (parameter) {
})
}
export function getInfo () {
export function getInfo() {
return axios({
url: '/system/user/info',
method: 'get',
@ -37,7 +37,7 @@ export function getInfo () {
})
}
export function logout (token) {
export function logout(token) {
return axios({
url: '/login/logout',
method: 'post',
@ -49,7 +49,7 @@ export function logout (token) {
}
// 获取验证图片 以及token
export function getCaptcha (data) {
export function getCaptcha(data) {
return axios({
url: '/captcha/get',
method: 'post',
@ -58,10 +58,33 @@ export function getCaptcha (data) {
}
// 滑动或者点选验证
export function captchaCheck (data) {
export function captchaCheck(data) {
return axios({
url: '/captcha/check',
method: 'post',
data
})
}
/**
* 获取扫描登录二维码
* @returns {AxiosPromise}
*/
export function qrCode() {
return axios({
url: '/wxscan/get',
method: 'post'
})
}
/**
* 检测是否扫码登录
* @param unique
* @returns {AxiosPromise}
*/
export function loginByCode(unique) {
return axios({
url: '/wxscan/isLogin/' + unique,
method: 'get'
})
}

View File

@ -14,8 +14,14 @@ export const defaultRouterMap = [
export const constantRouterMap = [
{
path: '/',
name: 'index',
redirect: '/dashboard/Analysis' // 默认首页
},
{
path: '/user/loginCode',
name: 'loginCode',
component: () => import(/* webpackChunkName: "user" */ '@/views/user/LoginCode')
},
{
path: '/user',
component: UserLayout,

View File

@ -10,8 +10,9 @@ import { i18nRender } from '@/locales'
NProgress.configure({ showSpinner: false }) // NProgress Configuration
const allowList = ['login', 'register', 'registerResult', 'chart'] // no redirect allowList
const loginRoutePath = '/user/login'
const allowList = ['login', 'loginCode', 'register', 'registerResult', 'chart'] // no redirect allowList
// const loginRoutePath = '/user/login'
const loginRoutePath = '/user/loginCode'
const defaultRoutePath = '/dashboard/Analysis' // 登录跳转

View File

@ -71,8 +71,9 @@
<a-col :span='18'>
<a-card title='会议日历' bodyStyle='height: 780px'>
<a-calendar :header-render='headerRender' @select="onSelect">
<ul slot='dateCellRender' slot-scope='value' class='c_meeting' style='padding: 0'>
<a-popover @click.stop='return false' :title='item.title' v-for='item in getListData(value)'>
<ul slot='dateCellRender' slot-scope='value' class='c_meeting' style='padding: 0;text-align: center; font-size: 24px;font-weight: 700; margin-top: 10px'>
{{getListData(value).length == 0 ? '' : getListData(value).length}}
<a-popover style='display: none' @click.stop='showMeeting(item.id)' :title='item.title' v-for='item in getListData(value)'>
<template slot='content'>
<div>预约部门{{ item.org }}</div>
<div>会议时间{{ item.time }}</div>
@ -181,6 +182,7 @@
</a-card>
</a-col>
</a-row>
<RoomOrderDetail-modal ref='detailModal' />
</div>
</template>
<style>
@ -230,6 +232,7 @@
import * as echarts from 'echarts'
import moment from 'moment'
import { STable } from '@/components'
import RoomOrderDetailModal from '@/views/admin/meeting/modules/RoomOrderDetailModal.vue'
import {
getNum,
@ -239,10 +242,10 @@ import {
getChartData
} from '@/api/admin/meeting/count'
export default {
name: 'MeetingCount',
components: {
RoomOrderDetailModal,
STable
},
data() {
@ -428,6 +431,9 @@ export default {
this.nowMonthEnd = dateStringArr[1]
this.getChartCount()
},
showMeeting(rId) {
this.$refs.detailModal.show(rId)
},
/**
* 获取统计图数据
*/
@ -444,6 +450,10 @@ export default {
let chartUse = echarts.init(document.getElementById('chartUse'))
let useData = data.roomRank
let chartUseOp = {
tooltip: {
trigger: 'item',
formatter: '{b}<br />会议场次 : {c} 次'
},
yAxis: {
type: 'category',
data: useData.y
@ -596,6 +606,10 @@ export default {
let chartDep = echarts.init(document.getElementById('chartDep'))
let depData = data.orgMeeting
let chartDepOp = {
tooltip: {
trigger: 'item',
formatter: '{b}<br />会议场次 : {c} 次'
},
xAxis: {
type: 'category',
data: depData.x
@ -630,6 +644,10 @@ export default {
let chartMeeting = echarts.init(document.getElementById('chartMeeting'))
let meetingData = data.everyDay
let chartMeetingOp = {
tooltip: {
trigger: 'item',
formatter: '{b}<br />会议场次 : {c} 次'
},
xAxis: {
type: 'category',
boundaryGap: false,

View File

@ -33,6 +33,20 @@
</a-select>
</a-form-item>
</a-col>
<a-col :md='5' :sm='15'>
<a-form-item label='会议室'>
<a-select v-model='queryParam.name' show-search>
<a-select-option value=''>
所有会议室
</a-select-option>
<a-select-opt-group v-for='item in roomList' :label="item.name">
<a-select-option v-for='room in item.list' :value='room.name'>
{{room.name}}
</a-select-option>
</a-select-opt-group>
</a-select>
</a-form-item>
</a-col>
<a-col :md='5' :sm='15'>
<a-form-item label='会议名称'>
<a-input placeholder='请输入会议名称' v-model='queryParam.title' />
@ -63,6 +77,18 @@
<a-date-picker v-model='queryParam.chooseDate' @change='res => this.$forceUpdate()' />
</a-form-item>
</a-col>
<a-col :md='5' :sm='15'>
<a-form-item label='排序形式'>
<a-select v-model='queryParam.sort'>
<a-select-option value=''>
会议开始时间
</a-select-option>
<a-select-option value='create'>
创建时间
</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md='8' :sm='24'>
<span class='table-page-search-submitButtons'>
<a-button type='primary' @click='$refs.table.refresh(true)'>查询</a-button>
@ -71,7 +97,6 @@
@click='exportOrderList'>导出会议日程</a-button>
<a-button v-if='isAdmin' type='danger' style='margin-left: 8px'
@click='exportMonthOrder'>导出月度汇总</a-button>
</span>
</a-col>
</a-row>
@ -168,7 +193,7 @@ import {
cancelOrder,
approveOrder,
expMRByDate,
expMRByMonth
expMRByMonth, getAllRoom
} from '@/api/admin/meeting/meetingReservation'
import { checkPermission } from '@/utils/permissions'
@ -202,7 +227,9 @@ export default {
advanced: false,
//
queryParam: {
status: ''
status: '',
sort: '',
name: ''
},
//
columns: [
@ -348,6 +375,7 @@ export default {
showRejectReason: false,
rejectReason: '',
rejectId: '',
roomList: [],
isAdmin: checkPermission('meeting:admin')
}
},
@ -374,7 +402,7 @@ export default {
this.$router.replace({ query })
},
mounted() {
this.getAllRoomList()
},
methods: {
reset() {
@ -553,7 +581,33 @@ export default {
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
},
getAllRoomList() {
let param = {
min: 1, //
max: 1000, //
timeFormat: 1,
mrdate: moment().format('YYYY-MM-DD')
}
getAllRoom(param).then(res => {
const roomArr = {}
const valueObj = res.data
// eslint-disable-next-line no-unused-vars
for (const key in valueObj) {
const eachObj = valueObj[key]
if (eachObj['floorId'] in roomArr) {
} else {
roomArr[eachObj['floorId']] = {
name: eachObj['floor'],
list: []
}
}
roomArr[eachObj['floorId']]['list'].push(eachObj)
}
this.roomList = roomArr
console.log(this.roomList)
})
},
},
watch: {
/*

View File

@ -81,7 +81,7 @@
<a-col :span='10'>
<a-form-item label='参会领导' :labelCol='labelCol' :wrapperCol='wrapperCol'>
<a-input placeholder='参会领导'
v-decorator="['leader',{rules: [{ required: true, message: '输入参会领导' }]}]" />
v-decorator="['leader']" />
</a-form-item>
</a-col>
<a-col :span='10'>

View File

@ -0,0 +1,70 @@
<template>
<div class='main' style='text-align: center'>
<vue-qr
:text="loginUrl"
:size="250"
></vue-qr>
</div>
</template>
<script>
// eslint-disable-next-line no-unused-vars
import md5 from 'md5'
// eslint-disable-next-line no-unused-vars
import { loginByCode, qrCode } from '@/api/login'
import storage from 'store'
import { ACCESS_TOKEN } from '@/store/mutation-types'
import { timeFix } from '@/utils/util'
import VueQr from "vue-qr"
export default {
components: {
VueQr
},
data() {
return {
loginUrl: '',
unique: '',
isLogin: false
}
},
created() {
},
mounted() {
this.getLoginUrl()
},
beforeDestroy() {
clearInterval(this.intervalId)
},
methods: {
getLoginUrl() {
qrCode().then(res => {
if (res.code === 0) {
this.loginUrl = res.url
this.unique = res.unique
this.intervalId = setInterval(this.checkLogin, 1000)
} else {
this.$message.error(res.msg)
}
})
},
checkLogin() {
loginByCode(this.unique).then(res => {
if (res.code == 0) {
//
clearInterval(this.intervalId)
console.log('登录成功!')
storage.set(ACCESS_TOKEN, res.token, 14 * 24 * 60 * 60 * 1000) // 14
this.$router.push({ name: 'index' }, () => { //
this.$notification.success({
message: '欢迎',
description: `${timeFix()},欢迎回来`
})
})
}
})
}
}
}
</script>

View File

@ -3730,6 +3730,13 @@ brace-expansion@^1.1.7:
balanced-match "^1.0.0"
concat-map "0.0.1"
brace-expansion@^2.0.1:
version "2.0.1"
resolved "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
dependencies:
balanced-match "^1.0.0"
braces@^2.3.1, braces@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729"
@ -5214,6 +5221,13 @@ decode-uri-component@^0.2.0:
resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545"
integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=
decompress-response@^6.0.0:
version "6.0.0"
resolved "https://registry.npmmirror.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
dependencies:
mimic-response "^3.1.0"
deep-equal@^1.0.1, deep-equal@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
@ -6696,6 +6710,17 @@ glob@^7.1.4:
once "^1.3.0"
path-is-absolute "^1.0.0"
glob@^8.0.1:
version "8.1.0"
resolved "https://registry.npmmirror.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e"
integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^5.0.1"
once "^1.3.0"
globals@^11.1.0, globals@^11.7.0:
version "11.11.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e"
@ -8143,6 +8168,11 @@ js-beautify@^1.6.12, js-beautify@^1.6.14:
mkdirp "~0.5.0"
nopt "~4.0.1"
js-binary-schema-parser@^2.0.2:
version "2.0.3"
resolved "https://registry.npmmirror.com/js-binary-schema-parser/-/js-binary-schema-parser-2.0.3.tgz#3d7848748e8586e63b34e8911b643f59cfb6396e"
integrity sha512-xezGJmOb4lk/M1ZZLTR/jaBHQ4gG/lqQnJqdIv4721DMggsa1bDVlHXNeHYogaIEHD9vCRv0fcL4hMA+Coarkg==
js-cookie@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.0.tgz#1b2c279a6eece380a12168b92485265b35b1effb"
@ -8889,6 +8919,11 @@ mimic-fn@^2.1.0:
resolved "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=
mimic-response@^3.1.0:
version "3.1.0"
resolved "https://registry.npmmirror.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
mini-css-extract-plugin@^0.9.0:
version "0.9.0"
resolved "https://registry.npm.taobao.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.9.0.tgz?cache=0&sync_timestamp=1576856580721&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e"
@ -8916,6 +8951,13 @@ minimatch@^3.0.4:
dependencies:
brace-expansion "^1.1.7"
minimatch@^5.0.1:
version "5.1.6"
resolved "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96"
integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==
dependencies:
brace-expansion "^2.0.1"
minimist@0.0.8:
version "0.0.8"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
@ -9767,6 +9809,11 @@ parent-module@^1.0.0:
dependencies:
callsites "^3.0.0"
parenthesis@^3.1.5:
version "3.1.8"
resolved "https://registry.npmmirror.com/parenthesis/-/parenthesis-3.1.8.tgz#3457fccb8f05db27572b841dad9d2630b912f125"
integrity sha512-KF/U8tk54BgQewkJPvB4s/US3VQY68BRDpH638+7O/n58TpnwiwnOtGIOsT2/i+M78s61BBpeC83STB88d8sqw==
parse-asn1@^5.0.0:
version "5.1.4"
resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc"
@ -11491,6 +11538,20 @@ signal-exit@^3.0.0, signal-exit@^3.0.2:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=
simple-concat@^1.0.0:
version "1.0.1"
resolved "https://registry.npmmirror.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
simple-get@^4.0.1:
version "4.0.1"
resolved "https://registry.npmmirror.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543"
integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==
dependencies:
decompress-response "^6.0.0"
once "^1.3.1"
simple-concat "^1.0.0"
simple-statistics@~6.1.0:
version "6.1.1"
resolved "https://registry.yarnpkg.com/simple-statistics/-/simple-statistics-6.1.1.tgz#e3a0799ffc49914d6f421c5a4ac585f6a13e2bad"
@ -11842,6 +11903,13 @@ string-length@^3.1.0:
astral-regex "^1.0.0"
strip-ansi "^5.2.0"
string-split-by@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/string-split-by/-/string-split-by-1.0.0.tgz#53895fb3397ebc60adab1f1e3a131f5372586812"
integrity sha512-KaJKY+hfpzNyet/emP81PJA9hTVSfxNLS9SFTWxdCnnW1/zOOwiV248+EfoX7IQFcBaOp4G5YE6xTJMF+pLg6A==
dependencies:
parenthesis "^3.1.5"
string-width@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
@ -12812,6 +12880,16 @@ vue-loader@^15.8.3:
vue-hot-reload-api "^2.3.0"
vue-style-loader "^4.1.0"
vue-qr@^4.0.9:
version "4.0.9"
resolved "https://registry.npmmirror.com/vue-qr/-/vue-qr-4.0.9.tgz#6cb965dd0c5a0dff947e6ef582ef149b0780b986"
integrity sha512-pAISV94T0MNEYA3NGjykUpsXRE2QfaNxlu9ZhEL6CERgqNc21hJYuP3hRVzAWfBQlgO18DPmZTbrFerJC3+Ikw==
dependencies:
glob "^8.0.1"
js-binary-schema-parser "^2.0.2"
simple-get "^4.0.1"
string-split-by "^1.0.0"
vue-quill-editor@^3.0.6:
version "3.0.6"
resolved "https://registry.npm.taobao.org/vue-quill-editor/download/vue-quill-editor-3.0.6.tgz#1f85646211d68a31a80a72cb7f45bb2f119bc8fb"