feat:更新美食和旅游模块

This commit is contained in:
2026-02-09 23:16:19 +08:00
parent 45342fb55c
commit 1b8bd5a7e2
18 changed files with 179 additions and 41 deletions

View File

@@ -1,7 +1,8 @@
<template>
<div class="mobile-anniversary-detail common-mobile-view">
<el-form ref="formRef" :model="anniversaryStore.currentAnniversary"
:rules="rules" label-width="60px">
:rules="rules" label-position="top" label-width="60px"
class="form-item">
<el-form-item label="标题" prop="title">
<el-input v-model="anniversaryStore.currentAnniversary.title" autocomplete="off"
placeholder="请输入标题" clearable

View File

@@ -1,7 +1,8 @@
<template>
<div class="mobile-asset-detail common-mobile-view">
<el-form ref="formRef" :model="assetStore.currentAssetRecord"
:rules="rules" label-width="auto">
:rules="rules" label-position="top" label-width="auto"
class="form-item">
<el-form-item label="类别" prop="category">
<el-radio-group v-model="assetStore.currentAssetRecord.category"
@change="changeCategoryEvent">

View File

@@ -1,7 +1,8 @@
<template>
<div class="bill-detail-mobile common-mobile-view">
<el-form ref="formRef" :model="billStore.currentBillRecord"
:rules="rules" label-width="80px">
:rules="rules" label-position="top" label-width="80px"
class="form-item">
<el-form-item label="账本类型" prop="bookName">
<el-radio-group v-model="billStore.currentBillRecord.bookName"
@change="changeBillBookNameEvent">

View File

@@ -1,12 +1,13 @@
<template>
<div class="mobile-food-recipe-form common-mobile-view">
<el-form ref="formRef" :model="foodStore.currentFoodRecipe"
:rules=rules label-width="80px">
:rules=rules label-position="top" label-width="80px"
class="form-item">
<el-steps :active="activeStep" align-center
style="margin-bottom: 10px;" >
<el-step title="基础信息" />
<el-step title="Step 2" />
<el-step title="Step 3" />
<el-step title="食材信息" />
<el-step title="步骤信息" />
</el-steps>
<div v-if="activeStep === 0">
@@ -104,6 +105,7 @@ const confirmClick = () => {
formRef.value.validate().then(() => {
foodStore.handleFoodRecipeApi(foodStore.currentFoodRecipe)
history.back()
appStore.isShowMobileBack = false
})
}

View File

@@ -1,7 +1,8 @@
<template>
<div class="mobile-food-record-form common-mobile-view">
<el-form ref="formRef" :model="foodStore.currentFoodRecord"
:rules="rules" label-width="80">
:rules="rules" label-position="top" label-width="80"
class="form-item">
<el-form-item label="菜谱名称" prop="name">
<el-select
v-model="foodStore.currentFoodRecord.name"

107
src/views/food/timeline.vue Normal file
View File

@@ -0,0 +1,107 @@
<template>
<div class="mobile-food-timeline common-mobile-view ">
<div class="button-container">
<el-button :icon="CaretLeft" circle
type="primary" size="small"
@click="previousYearClick"/>
<el-date-picker
v-model="foodStore.queryRecord.year"
type="year" placeholder="请选择年份"
:editable="false"
style="width: 100px;"
@change="changeDateEvent"
/>
<el-button :icon="CaretRight" circle
type="primary" size="small"
@click="nextYearClick"/>
</div>
<el-timeline v-if="foodStore.foodRecordList.length > 0">
<el-timeline-item v-for="(item, index) in foodStore.foodRecordList"
:key="index" :timestamp="formatDate(item.date)"
placement="top">
<div class="timeline-info card-item">
<span>{{ item.name }}</span>
<el-image :src="AListUrl + item.imageUrl"
fit="contain" alt="暂无成果">
<template #error>
<div class="image-slot">
<span>暂无图片</span>
</div>
</template>
</el-image>
</div>
</el-timeline-item>
</el-timeline>
<el-empty v-else description="暂无记录"/>
</div>
</template>
<script setup lang="ts">
import { CaretLeft, CaretRight } from '@element-plus/icons-vue'
import { useFoodStore } from '@/store/food.ts'
import { formatDate, getLastDate, getNextDate } from 'vue3-common/utils/dateUtil'
import { AListUrl } from '@/utils'
import { onMounted } from 'vue'
const foodStore = useFoodStore()
onMounted(async () => {
foodStore.queryDateType = 'year'
await foodStore.queryFoodRecordList()
})
const changeDateEvent = async (value: Date) => {
foodStore.queryRecord.year = String(value.getFullYear())
await foodStore.queryFoodRecordList()
}
const previousYearClick = async () => {
const lastYear = getLastDate(foodStore.queryRecord.year, 1, 'years')
foodStore.queryRecord.year = String(new Date(lastYear).getFullYear())
await foodStore.queryFoodRecordList()
}
const nextYearClick = async () => {
const lastYear = getNextDate(foodStore.queryRecord.year, 1, 'years')
foodStore.queryRecord.year = String(new Date(lastYear).getFullYear())
await foodStore.queryFoodRecordList()
}
</script>
<style lang="scss">
.mobile-food-timeline {
display: flex;
flex-direction: column;
.button-container {
align-self: center;
display: flex;
align-items: center;
gap: 10px;
}
.el-timeline {
padding: 10px;
.el-timeline-item__timestamp {
font-weight: bold;
color: #000000;
}
.timeline-info {
padding: 10px;
display: flex;
flex-direction: column;
gap: 10px;
.el-image {
height: 300px;
}
}
}
}
</style>

View File

@@ -1,7 +1,8 @@
<template>
<div class="mobile-journal-detail common-mobile-view">
<el-form ref="formRef" :model="journalStore.currentJournal"
:rules="rules" label-width="60px">
:rules="rules" label-position="top" label-width="60px"
class="form-item">
<el-form-item label="日期" prop="date">
<el-date-picker
v-model="journalStore.currentJournal.date"

View File

@@ -1,7 +1,8 @@
<template>
<div class="mobile-ledger-detail common-mobile-view">
<el-form ref="formRef" :model="ledgerStore.currentLedgerRecord"
:rules="rules" label-width="auto">
:rules="rules" label-position="top" label-width="auto"
class="form-item">
<el-form-item label="账本" prop="book">
<el-input v-model="ledgerStore.currentLedgerRecord.book"
placeholder="请输入账本名称" clearable

View File

@@ -37,6 +37,10 @@ export const mobileHomeMeta: IRouteMetaConfig = {
title: '菜谱',
icon: ''
},
'/food/timeline': {
title: '时间轴',
icon: ''
},
'/food/record': {
title: '记录',
icon: ''

View File

@@ -1,7 +1,8 @@
<template>
<div class="mobile-product-detail common-mobile-view">
<el-form ref="formRef" :model="productStore.currentProduct"
:rules="rules" label-width="80px">
:rules="rules" label-position="top" label-width="80px"
class="form-item">
<el-form-item label="物品名称" prop="name">
<el-input v-model="productStore.currentProduct.name" autocomplete="off"
placeholder="请输入物品名称" clearable

View File

@@ -1,7 +1,8 @@
<template>
<div class="mobile-travel-record-form common-mobile-view">
<el-form ref="formRef" :model="travelStore.currentTravelRecord"
:rules="rules" label-width="80">
:rules="rules" label-position="top" label-width="auto"
class="form-item">
<el-form-item label="景点名称" prop="name">
<el-select
v-model="travelStore.currentTravelRecord.name"

View File

@@ -1,7 +1,8 @@
<template>
<div class="mobile-travel-spot-form common-mobile-view">
<el-form ref="formRef" :model="travelStore.currentTravelSpot"
:rules=rules label-width="100px">
:rules=rules label-position="top" label-width="auto"
class="form-item">
<el-form-item label="景点名称" prop="name">
<el-input
v-model="travelStore.currentTravelSpot.name"