fix: 首页日历功能bug修复,功能完善。
This commit is contained in:
@@ -33,10 +33,57 @@
|
|||||||
</div>
|
</div>
|
||||||
<!-- 月视图和周视图显示,列视图显示表格形式 -->
|
<!-- 月视图和周视图显示,列视图显示表格形式 -->
|
||||||
<div v-show="type !== '3'" ref="fullcalendar" class="card" />
|
<div v-show="type !== '3'" ref="fullcalendar" class="card" />
|
||||||
|
<!-- 信用卡账单 -->
|
||||||
|
<el-dialog :title="titleDealRecord" v-model="openDealRecord" width="1200px" append-to-body destroy-on-close>
|
||||||
|
<el-form :model="queryDealRecordParams" ref="queryDealRecordRef" inline>
|
||||||
|
<el-form-item label="日期" prop="time">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="queryDealRecordParams.time"
|
||||||
|
type="daterange"
|
||||||
|
disabled
|
||||||
|
range-separator="至"
|
||||||
|
start-placeholder="开始时间"
|
||||||
|
end-placeholder="结束时间"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="交易类型" style="width: 220px" prop="dealType">
|
||||||
|
<el-select v-model="queryDealRecordParams.dealType" placeholder="请选择交易类型" clearable>
|
||||||
|
<el-option v-for="dict in deal_type" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="交易类别" style="width: 220px" prop="dealCategory">
|
||||||
|
<el-select v-model="queryDealRecordParams.dealCategory" placeholder="请选择交易类别" clearable>
|
||||||
|
<el-option v-for="dict in deal_category" :key="dict.value" :label="dict.label" :value="dict.value" />
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="">
|
||||||
|
<el-button type="primary" icon="Search" @click="handleDealRecordQuery">搜索</el-button>
|
||||||
|
<el-button type="info" icon="Refresh" @click="resetDealRecordQuery">重置</el-button>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
<el-table v-loading="loadingDealRecord" :data="tableDealRecordData">
|
||||||
|
<el-table-column label="账户名称" align="center" width="200" prop="accountName" />
|
||||||
|
<el-table-column label="交易时间" align="center" prop="createTime" />
|
||||||
|
<el-table-column label="交易金额" align="center" width="100" prop="amount" />
|
||||||
|
<el-table-column label="当前余额" align="center" prop="currentBalance" />
|
||||||
|
<el-table-column label="交易类型" align="center" width="80" prop="dealType">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="deal_type" :value="scope.row.dealType" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="交易类别" align="center" prop="dealCategory">
|
||||||
|
<template #default="scope">
|
||||||
|
<dict-tag :options="deal_category" :value="scope.row.dealCategory" />
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="备注" align="center" width="300" prop="remark" />
|
||||||
|
</el-table>
|
||||||
|
<el-pagination small background layout="total, prev, pager, next" :total="dealRecordTotal" @current-change="handleCurrentDealRecordChange" />
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script setup name="PlanManagement">
|
||||||
import { reactive, toRefs, ref, onMounted, getCurrentInstance } from 'vue'
|
import { reactive, toRefs, ref, onMounted, getCurrentInstance } from 'vue'
|
||||||
import { Calendar } from '@fullcalendar/core'
|
import { Calendar } from '@fullcalendar/core'
|
||||||
import dayGridPlugin from '@fullcalendar/daygrid'
|
import dayGridPlugin from '@fullcalendar/daygrid'
|
||||||
@@ -45,34 +92,50 @@ import listPlugin from '@fullcalendar/list'
|
|||||||
import interactionPlugin from '@fullcalendar/interaction'
|
import interactionPlugin from '@fullcalendar/interaction'
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
import { getAccountCalendarInfo } from '@/api/invest/accountAnalysis.js'
|
import { getAccountCalendarInfo } from '@/api/invest/accountAnalysis.js'
|
||||||
export default {
|
import { listAccountDealRecord } from '@/api/invest/accountDealRecord'
|
||||||
name: 'PlanManagement',
|
|
||||||
components: {},
|
|
||||||
setup() {
|
|
||||||
const { proxy } = getCurrentInstance()
|
const { proxy } = getCurrentInstance()
|
||||||
const state = reactive({
|
const { account_state, account_type, deal_type, deal_category, debit_type, transfer_type, bill_state } = proxy.useDict(
|
||||||
calendarTitle: new Date().getFullYear() + '年' + Number(new Date().getMonth() + 1) + '月', // 日历头部显示文字
|
'account_state',
|
||||||
dialogVisiable: false,
|
'account_type',
|
||||||
|
'deal_type',
|
||||||
|
'deal_category',
|
||||||
|
'debit_type',
|
||||||
|
'transfer_type',
|
||||||
|
'bill_state'
|
||||||
|
)
|
||||||
|
const loading = ref(true)
|
||||||
|
const isShowBack = ref(false)
|
||||||
|
const infoList = ref([])
|
||||||
|
const type = ref('1')
|
||||||
|
|
||||||
|
const titleDealRecord = ref('')
|
||||||
|
const openDealRecord = ref(false)
|
||||||
|
const currentAccountId = ref(false)
|
||||||
|
const loadingDealRecord = ref(false)
|
||||||
|
const tableDealRecordData = ref([])
|
||||||
|
const dealRecordTotal = ref(0)
|
||||||
|
|
||||||
|
const queryDealRecordParams = ref({
|
||||||
|
time: '',
|
||||||
|
dealType: null,
|
||||||
|
dealCategory: null,
|
||||||
|
pageNum: 1,
|
||||||
|
pageSize: 10
|
||||||
|
})
|
||||||
|
const data = reactive({
|
||||||
|
calendarTitle: new Date().getFullYear() + '年' + Number(new Date().getMonth() + 1) + '月', // 日历头部显示文
|
||||||
showMonth: new Date(), // 显示月份
|
showMonth: new Date(), // 显示月份
|
||||||
loading: false,
|
|
||||||
isShowBack: false, // 是否显示回到当月或当周
|
|
||||||
planCategoryId: '', // 计划分类Id
|
|
||||||
type: '1',
|
|
||||||
dialogType: '',
|
|
||||||
detailInfo: {},
|
|
||||||
Tcalendar: null,
|
Tcalendar: null,
|
||||||
drawerVisiable: false,
|
fullcalendar: ref()
|
||||||
drawerType: '',
|
|
||||||
fullcalendar: ref(),
|
|
||||||
nowDate: new Date(),
|
|
||||||
infoList: [] // 日历显示的列信息
|
|
||||||
})
|
})
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
initCalendar()
|
initCalendar()
|
||||||
getCalendarList()
|
getCalendarList()
|
||||||
})
|
})
|
||||||
|
const { showMonth, fullcalendar, Tcalendar, calendarTitle } = toRefs(data)
|
||||||
const initCalendar = () => {
|
const initCalendar = () => {
|
||||||
state.Tcalendar = new Calendar(state.fullcalendar, {
|
Tcalendar.value = new Calendar(fullcalendar.value, {
|
||||||
plugins: [dayGridPlugin, timeGridPlugin, listPlugin, interactionPlugin],
|
plugins: [dayGridPlugin, timeGridPlugin, listPlugin, interactionPlugin],
|
||||||
initialView: 'dayGridMonth',
|
initialView: 'dayGridMonth',
|
||||||
aspectRatio: 2.2,
|
aspectRatio: 2.2,
|
||||||
@@ -113,14 +176,14 @@ export default {
|
|||||||
day: '日'
|
day: '日'
|
||||||
},
|
},
|
||||||
allDayText: '全天',
|
allDayText: '全天',
|
||||||
events: state.infoList,
|
events: infoList.value,
|
||||||
eventClassNames: function (arg) {
|
eventClassNames: function (arg) {
|
||||||
// 添加自定义class
|
// 添加自定义class
|
||||||
return [arg.event.extendedProps.class]
|
return [arg.event.extendedProps.class]
|
||||||
},
|
},
|
||||||
eventContent: function (arg) {
|
eventContent: function (arg) {
|
||||||
const italicEl = document.createElement('div')
|
const italicEl = document.createElement('div')
|
||||||
if (arg.event.extendedProps.startDateMinute && state.type === '1') {
|
if (arg.event.extendedProps.startDateMinute && type.value === '1') {
|
||||||
const childEl = document.createElement('span')
|
const childEl = document.createElement('span')
|
||||||
childEl.innerHTML = arg.event.extendedProps.startDateMinute
|
childEl.innerHTML = arg.event.extendedProps.startDateMinute
|
||||||
italicEl.append(childEl)
|
italicEl.append(childEl)
|
||||||
@@ -128,85 +191,213 @@ export default {
|
|||||||
italicEl.append(arg.event.title)
|
italicEl.append(arg.event.title)
|
||||||
italicEl.setAttribute('class', `plan_title ${arg.event.extendedProps.class}`)
|
italicEl.setAttribute('class', `plan_title ${arg.event.extendedProps.class}`)
|
||||||
return { domNodes: [italicEl] }
|
return { domNodes: [italicEl] }
|
||||||
|
},
|
||||||
|
eventClick: function (info) {
|
||||||
|
// 点击查看时触发
|
||||||
|
handleClick(info)
|
||||||
|
},
|
||||||
|
select: function (info) {
|
||||||
|
// 视图选择日期触发
|
||||||
|
handleSelectDate(info)
|
||||||
}
|
}
|
||||||
|
|
||||||
// select: function (info) {}
|
// select: function (info) {}
|
||||||
})
|
})
|
||||||
state.Tcalendar.render()
|
Tcalendar.value.render()
|
||||||
}
|
}
|
||||||
// 上一月、周、日
|
// 上一月、周、日
|
||||||
const getPrev = () => {
|
const getPrev = () => {
|
||||||
state.Tcalendar.prev()
|
Tcalendar.value.prev()
|
||||||
state.calendarTitle = state.Tcalendar.view.title
|
calendarTitle.value = Tcalendar.value.view.title
|
||||||
getCalendarList()
|
getCalendarList()
|
||||||
}
|
}
|
||||||
// 下一月、周、日
|
// 下一月、周、日
|
||||||
const getNext = () => {
|
const getNext = () => {
|
||||||
state.Tcalendar.next()
|
Tcalendar.value.next()
|
||||||
state.calendarTitle = state.Tcalendar.view.title
|
calendarTitle.value = Tcalendar.value.view.title
|
||||||
getCalendarList()
|
getCalendarList()
|
||||||
}
|
}
|
||||||
// 回到今天
|
// 回到今天
|
||||||
const getToday = () => {
|
const getToday = () => {
|
||||||
state.Tcalendar.today()
|
Tcalendar.value.today()
|
||||||
state.calendarTitle = state.Tcalendar.view.title
|
calendarTitle.value = Tcalendar.value.view.title
|
||||||
state.isShowBack = false
|
isShowBack.value = false
|
||||||
state.showMonth = new Date()
|
showMonth.value = new Date()
|
||||||
getCalendarList()
|
getCalendarList()
|
||||||
}
|
}
|
||||||
const getCalendarList = () => {
|
const getCalendarList = () => {
|
||||||
const currentEnd = dayjs(state.Tcalendar.view.currentEnd).add(-1, 'day')
|
const currentEnd = dayjs(Tcalendar.value.view.currentEnd).add(-1, 'day')
|
||||||
const params = {
|
const params = {
|
||||||
startTime: dayjs(state.Tcalendar.view.currentStart).format('YYYY-MM-DD'),
|
startTime: dayjs(Tcalendar.value.view.currentStart).format('YYYY-MM-DD'),
|
||||||
endTime: dayjs(currentEnd).format('YYYY-MM-DD'),
|
endTime: dayjs(currentEnd).format('YYYY-MM-DD'),
|
||||||
type: state.type
|
type: type.value
|
||||||
}
|
}
|
||||||
state.loading = true
|
loading.value = true
|
||||||
state.Tcalendar.getEventSources().forEach((item) => {
|
Tcalendar.value.getEventSources().forEach((item) => {
|
||||||
item.remove()
|
item.remove()
|
||||||
})
|
})
|
||||||
|
|
||||||
getAccountCalendarInfo(params).then((res) => {
|
getAccountCalendarInfo(params).then((res) => {
|
||||||
state.loading = false
|
loading.value = false
|
||||||
if (res) {
|
if (res) {
|
||||||
state.infoList = res.data
|
infoList.value = res.data
|
||||||
state.Tcalendar.addEventSource(state.infoList)
|
Tcalendar.value.addEventSource(infoList.value)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
// 切换视图类型
|
// 切换视图类型
|
||||||
const handleChangeType = (val) => {
|
const handleChangeType = (val) => {
|
||||||
if (val === '1') {
|
if (val === '1') {
|
||||||
state.Tcalendar.changeView('dayGridMonth')
|
Tcalendar.value.changeView('dayGridMonth')
|
||||||
state.showMonth = new Date()
|
showMonth.value = new Date()
|
||||||
} else if (val === '2') {
|
} else if (val === '2') {
|
||||||
state.Tcalendar.changeView('dayGridWeek')
|
Tcalendar.value.changeView('dayGridWeek')
|
||||||
}
|
}
|
||||||
state.isShowBack = false
|
isShowBack.value = false
|
||||||
state.calendarTitle = state.Tcalendar.view.title
|
calendarTitle.value = Tcalendar.value.view.title
|
||||||
getToday()
|
getToday()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 切换月份和日期
|
// 切换月份和日期
|
||||||
const changeDate = (date) => {
|
const changeDate = (date) => {
|
||||||
state.Tcalendar.gotoDate(date)
|
Tcalendar.value.gotoDate(date)
|
||||||
// 判断不是当前月份,显示返回当前月
|
// 判断不是当前月份,显示返回当前月
|
||||||
if (date.getMonth() !== new Date().getMonth() || new Date().getFullYear() !== new Date(date).getFullYear()) {
|
if (date.getMonth() !== new Date().getMonth() || new Date().getFullYear() !== new Date(date).getFullYear()) {
|
||||||
state.isShowBack = true
|
isShowBack.value = true
|
||||||
} else {
|
} else {
|
||||||
state.isShowBack = false
|
isShowBack.value = false
|
||||||
}
|
}
|
||||||
state.calendarTitle = state.Tcalendar.view.title
|
calendarTitle.value = Tcalendar.value.view.title
|
||||||
getCalendarList()
|
getCalendarList()
|
||||||
}
|
}
|
||||||
return {
|
// 点击计划查看
|
||||||
...toRefs(state),
|
const handleClick = (info) => {
|
||||||
changeDate,
|
const date = info.event.startStr
|
||||||
getPrev,
|
const type = info.event._def.extendedProps.type
|
||||||
getNext,
|
const accountId = info.event._def.extendedProps.accountId
|
||||||
getToday,
|
const billDatePeriod = info.event._def.extendedProps.billDatePeriod
|
||||||
getCalendarList,
|
//信用卡账单日
|
||||||
handleChangeType
|
if (type === 1) {
|
||||||
|
const _id = accountId
|
||||||
|
queryDealRecordParams.value.time = billDatePeriod.split('~')
|
||||||
|
queryDealRecordParams.value.dealType = ''
|
||||||
|
queryDealRecordParams.value.dealCategory = ''
|
||||||
|
titleDealRecord.value = info.event._def.title
|
||||||
|
currentAccountId.value = _id
|
||||||
|
getDealRecordList(1)
|
||||||
|
openDealRecord.value = true
|
||||||
}
|
}
|
||||||
|
//贷款已还
|
||||||
|
if (type === 4) {
|
||||||
|
const _id = accountId
|
||||||
|
queryDealRecordParams.value.time = [date, date]
|
||||||
|
queryDealRecordParams.value.dealType = '1'
|
||||||
|
queryDealRecordParams.value.dealCategory = '9'
|
||||||
|
titleDealRecord.value = info.event._def.title
|
||||||
|
currentAccountId.value = _id
|
||||||
|
getDealRecordList(1)
|
||||||
|
openDealRecord.value = true
|
||||||
|
}
|
||||||
|
//日常支出
|
||||||
|
if (type === 5) {
|
||||||
|
queryDealRecordParams.value.time = [date, date]
|
||||||
|
queryDealRecordParams.value.dealType = '2'
|
||||||
|
queryDealRecordParams.value.dealCategory = '1'
|
||||||
|
titleDealRecord.value = info.event._def.title
|
||||||
|
currentAccountId.value = null
|
||||||
|
getDealRecordList(1)
|
||||||
|
openDealRecord.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
//投资收益
|
||||||
|
if (type === 6) {
|
||||||
|
queryDealRecordParams.value.time = [date, date]
|
||||||
|
queryDealRecordParams.value.dealType = ''
|
||||||
|
queryDealRecordParams.value.dealCategory = '2'
|
||||||
|
titleDealRecord.value = info.event._def.title
|
||||||
|
currentAccountId.value = null
|
||||||
|
getDealRecordList(1)
|
||||||
|
openDealRecord.value = true
|
||||||
|
}
|
||||||
|
//POS机刷卡
|
||||||
|
if (type === 7) {
|
||||||
|
queryDealRecordParams.value.time = [date, date]
|
||||||
|
queryDealRecordParams.value.dealType = '2'
|
||||||
|
queryDealRecordParams.value.dealCategory = '5'
|
||||||
|
titleDealRecord.value = info.event._def.title
|
||||||
|
currentAccountId.value = null
|
||||||
|
getDealRecordList(1)
|
||||||
|
openDealRecord.value = true
|
||||||
|
}
|
||||||
|
|
||||||
|
//工资收入
|
||||||
|
if (type === 8) {
|
||||||
|
queryDealRecordParams.value.time = [date, date]
|
||||||
|
queryDealRecordParams.value.dealType = ''
|
||||||
|
queryDealRecordParams.value.dealCategory = '11'
|
||||||
|
titleDealRecord.value = info.event._def.title
|
||||||
|
currentAccountId.value = null
|
||||||
|
getDealRecordList(1)
|
||||||
|
openDealRecord.value = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const getDealRecordList = (num, id) => {
|
||||||
|
loadingDealRecord.value = true
|
||||||
|
|
||||||
|
const timeRange = queryDealRecordParams.value.time
|
||||||
|
let st = ''
|
||||||
|
let et = ''
|
||||||
|
if (timeRange && timeRange.length === 2) {
|
||||||
|
st = dayjs(timeRange[0]).format('YYYY-MM-DD')
|
||||||
|
et = dayjs(timeRange[1]).format('YYYY-MM-DD')
|
||||||
|
}
|
||||||
|
queryDealRecordParams.value.startTime = st
|
||||||
|
queryDealRecordParams.value.endTime = et
|
||||||
|
queryDealRecordParams.value.pageNum = num
|
||||||
|
queryDealRecordParams.value.accountId = currentAccountId.value
|
||||||
|
listAccountDealRecord(queryDealRecordParams.value).then((res) => {
|
||||||
|
loadingDealRecord.value = false
|
||||||
|
tableDealRecordData.value = res.rows
|
||||||
|
dealRecordTotal.value = res.total
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleDealRecordQuery = () => {
|
||||||
|
getDealRecordList(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
const resetDealRecordQuery = () => {
|
||||||
|
proxy.resetForm('queryDealRecordRef')
|
||||||
|
queryDealRecordParams.value.dealType = ''
|
||||||
|
queryDealRecordParams.value.dealCategory = ''
|
||||||
|
dealRecordTotal.value = 0
|
||||||
|
currentAccountId.value = null
|
||||||
|
getDealRecordList(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleCurrentDealRecordChange = (num) => {
|
||||||
|
getDealRecordList(num)
|
||||||
|
}
|
||||||
|
|
||||||
|
function isDateGreaterThanSpecifiedDate(date, specifiedDate) {
|
||||||
|
return date > specifiedDate
|
||||||
|
}
|
||||||
|
|
||||||
|
// 拖拽触发
|
||||||
|
const handleSelectDate = (info) => {
|
||||||
|
titleDealRecord.value = ''
|
||||||
|
queryDealRecordParams.value.dealType = ''
|
||||||
|
queryDealRecordParams.value.dealCategory = ''
|
||||||
|
const date = info.startStr
|
||||||
|
// 使用方法
|
||||||
|
const currentDate = new Date()
|
||||||
|
const specifiedDate = new Date(date)
|
||||||
|
const result = isDateGreaterThanSpecifiedDate(currentDate, specifiedDate)
|
||||||
|
if (result) {
|
||||||
|
queryDealRecordParams.value.time = [date, date]
|
||||||
|
currentAccountId.value = null
|
||||||
|
getDealRecordList(1)
|
||||||
|
openDealRecord.value = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Reference in New Issue
Block a user