feat:更新UI
This commit is contained in:
@@ -21,9 +21,6 @@ const foodStore = useFoodStore()
|
|||||||
const appStore = useAppStore()
|
const appStore = useAppStore()
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
foodStore.queryDateType = 'month'
|
|
||||||
await foodStore.refreshInfo()
|
|
||||||
|
|
||||||
const { month } = foodStore.queryRecord
|
const { month } = foodStore.queryRecord
|
||||||
calendarRef.value.move(new Date(month))
|
calendarRef.value.move(new Date(month))
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -1,16 +1,27 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="food-timeline">
|
<div class="food-timeline">
|
||||||
|
<div class="button-container">
|
||||||
|
<el-button :icon="CaretLeft" circle
|
||||||
|
type="primary" size="small"
|
||||||
|
@click="previousYearClick"/>
|
||||||
|
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
v-model="currentYear"
|
v-model="foodStore.queryRecord.year"
|
||||||
type="year" placeholder="请选择年份"
|
type="year" placeholder="请选择年份"
|
||||||
:editable="false"
|
:editable="false"
|
||||||
style="width: 100px;"
|
style="width: 100px;"
|
||||||
@change="changeDateEvent"
|
@change="changeDateEvent"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<el-button :icon="CaretRight" circle
|
||||||
|
type="primary" size="small"
|
||||||
|
@click="nextYearClick"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<el-timeline v-if="foodStore.recordList.length > 0">
|
<el-timeline v-if="foodStore.recordList.length > 0">
|
||||||
<el-timeline-item v-for="(item, index) in foodStore.recordList"
|
<el-timeline-item v-for="(item, index) in foodStore.recordList"
|
||||||
:key="index" :timestamp="formatDate(item.date)" placement="top">
|
:key="index" :timestamp="formatDate(item.date)"
|
||||||
|
placement="top" color='var(--el-color-primary)'>
|
||||||
<div class="timeline-info card-item">
|
<div class="timeline-info card-item">
|
||||||
<span>{{ item.name }}</span>
|
<span>{{ item.name }}</span>
|
||||||
<el-image :src="serviceFileRootPath + item.imageUrl"
|
<el-image :src="serviceFileRootPath + item.imageUrl"
|
||||||
@@ -30,23 +41,32 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
import { CaretLeft, CaretRight } from '@element-plus/icons-vue'
|
||||||
import { useFoodStore } from '@/store/food.ts'
|
import { useFoodStore } from '@/store/food.ts'
|
||||||
import { onMounted, ref } from 'vue'
|
import { onMounted, ref } from 'vue'
|
||||||
import { formatDate } from 'vue3-common/utils/dateUtil'
|
import { formatDate, getLastDate, getNextDate } from 'vue3-common/utils/dateUtil'
|
||||||
import { serviceFileRootPath } from '@/utils'
|
import { serviceFileRootPath } from '@/utils'
|
||||||
|
|
||||||
const currentYear = ref(new Date())
|
const currentYear = ref(new Date())
|
||||||
const foodStore = useFoodStore()
|
const foodStore = useFoodStore()
|
||||||
|
|
||||||
onMounted(async () => {
|
|
||||||
foodStore.queryDateType = 'year'
|
|
||||||
await foodStore.refreshInfo()
|
|
||||||
})
|
|
||||||
|
|
||||||
const changeDateEvent = async (value: Date) => {
|
const changeDateEvent = async (value: Date) => {
|
||||||
foodStore.queryRecord.year = String(value.getFullYear())
|
foodStore.queryRecord.year = String(value.getFullYear())
|
||||||
await foodStore.refreshInfo()
|
await foodStore.refreshInfo()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const previousYearClick = async () => {
|
||||||
|
const lastYear = getLastDate(foodStore.queryRecord.year, 1, 'years')
|
||||||
|
foodStore.queryRecord.year = String(new Date(lastYear).getFullYear())
|
||||||
|
await foodStore.refreshInfo()
|
||||||
|
}
|
||||||
|
|
||||||
|
const nextYearClick = async () => {
|
||||||
|
const lastYear = getNextDate(foodStore.queryRecord.year, 1, 'years')
|
||||||
|
foodStore.queryRecord.year = String(new Date(lastYear).getFullYear())
|
||||||
|
await foodStore.refreshInfo()
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
@@ -54,13 +74,21 @@ const changeDateEvent = async (value: Date) => {
|
|||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
|
||||||
.el-date-editor {
|
.button-container {
|
||||||
align-self: center;
|
align-self: center;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.el-timeline {
|
.el-timeline {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
|
|
||||||
|
.el-timeline-item__timestamp {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
.timeline-info {
|
.timeline-info {
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@@ -1,32 +1,28 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="common-mobile-view food-record">
|
<div class="common-mobile-view food-record">
|
||||||
<div class="food-segment card-item">
|
<div class="food-query">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="foodInfo.query"
|
v-model="foodInfo.query"
|
||||||
placeholder="请输入菜谱名称" :prefix-icon="Search" clearable
|
placeholder="搜索菜友食谱" :prefix-icon="Search" clearable
|
||||||
:maxlength="20" show-word-limit
|
:maxlength="20" show-word-limit
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<div class="query-item">
|
|
||||||
<span>查看类型:</span>
|
|
||||||
<el-segmented v-model="foodStore.recordSegment"
|
|
||||||
:options="recordSegmentList"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<hr style="width: 100%;"/>
|
<hr style="width: 100%;"/>
|
||||||
|
|
||||||
<div v-if="foodStore.recordSegment === 'recipe'" class="food-calendar">
|
<el-tabs v-model="foodStore.recordSegment"
|
||||||
|
stretch class="record-tabs"
|
||||||
|
@tab-click="handleClick">
|
||||||
|
<el-tab-pane label="菜谱" name="recipe">
|
||||||
<food-recipe />
|
<food-recipe />
|
||||||
</div>
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="日历" name="daily">
|
||||||
<div v-if="foodStore.recordSegment === 'daily'" class="food-calendar">
|
|
||||||
<food-daily />
|
<food-daily />
|
||||||
</div>
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="时间轴" name="timeline">
|
||||||
<div v-if="foodStore.recordSegment === 'timeline'" class="food-calendar">
|
|
||||||
<food-timeline />
|
<food-timeline />
|
||||||
</div>
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -37,6 +33,7 @@ import FoodTimeline from '@/components/Food/FoodTimeline.vue'
|
|||||||
import { Search } from '@element-plus/icons-vue'
|
import { Search } from '@element-plus/icons-vue'
|
||||||
import { reactive } from 'vue'
|
import { reactive } from 'vue'
|
||||||
import { useFoodStore } from '@/store/food'
|
import { useFoodStore } from '@/store/food'
|
||||||
|
import { TabsPaneContext } from 'element-plus'
|
||||||
|
|
||||||
const foodStore = useFoodStore()
|
const foodStore = useFoodStore()
|
||||||
|
|
||||||
@@ -56,6 +53,23 @@ const recordSegmentList = [{
|
|||||||
label: '时间轴',
|
label: '时间轴',
|
||||||
value: 'timeline'
|
value: 'timeline'
|
||||||
}]
|
}]
|
||||||
|
|
||||||
|
const handleClick = async (tab: TabsPaneContext, event: Event) => {
|
||||||
|
switch (tab.paneName) {
|
||||||
|
case 'recipe':
|
||||||
|
break
|
||||||
|
case 'daily':
|
||||||
|
foodStore.queryDateType = 'month'
|
||||||
|
await foodStore.refreshInfo()
|
||||||
|
break
|
||||||
|
case 'timeline':
|
||||||
|
foodStore.queryDateType = 'year'
|
||||||
|
await foodStore.refreshInfo()
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
@@ -64,11 +78,11 @@ const recordSegmentList = [{
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 5px;
|
gap: 5px;
|
||||||
|
|
||||||
.food-segment {
|
.food-query {
|
||||||
padding: 5px 10px;
|
}
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
.record-tabs {
|
||||||
gap: 10px;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user