|
|
- <template>
- <view class="page">
- <view class="flex-rowl tab">
- <view class="size-28 color-ffb fw700 tab-item">
- 全部记录
- </view>
- </view>
- <view v-if="list.length">
- <view class="box" v-for="item in list" :key="item.id">
- <view class="flex-rowl box-top">
- <up-avatar :src="userInfo.userImage" size="126rpx"></up-avatar>
- <view class="box-info">
- <view class="row highlight">{{ userInfo.userName }}</view>
- <view class="row">{{ `服务时间:${dayjs(item.createTime).format('YYYY-MM-DD')}` }}</view>
- <view class="row">{{ `宠物:${getTypeDesc(item.typeIds)}` }}</view>
- </view>
- <view class="box-address">
- <text>{{ item.serviceSpot }}</text>
- </view>
- </view>
- <view class="box-text">
- {{ item.text }}
- </view>
- <view class="box-img">
- <view
- class="box-img-item"
- v-for="(url, imgIdx) in item.images"
- :key="`${item.id}-img-${imgIdx}`"
- >
- <up-image
- :src="url"
- :show-loading="true"
- width="154rpx"
- height="164rpx"
- ></up-image>
- </view>
- </view>
- <view class="flex-rowr box-tools">
- <button plain class="box-btn" @click="onEdit(item.id)">
- <view class="flex-rowc">
- <up-icon name="edit-pen" color="#707070" size="22rpx"></up-icon>
- <text>编辑</text>
- </view>
- </button>
- <button plain class="box-btn" @click="onDelete(item.id)">
- <view class="flex-rowc">
- <up-icon name="trash" color="#707070" size="22rpx"></up-icon>
- <text>删除</text>
- </view>
- </button>
- </view>
- </view>
- </view>
- <view v-else class="flex-rowc">
- <image class="img-empty" src="@/static/images/ydd/empy.png" mode="widthFix"></image>
- </view>
-
- <up-modal
- :show="deleteModal.show"
- :showConfirmButton="false"
- :showCancelButton="false"
- >
- <view class="modal">
- <view class="modal-content">确定要删除该条服务信息吗?</view>
- <view>
- <button plain class="modal-btn modal-btn-cancel" @click="onCancelDelete">取消</button>
- <button plain class="modal-btn modal-btn-confirm" @click="onConfirmDelete">确定</button>
- </view>
- </view>
- </up-modal>
-
- <view class="footer-btn">
- <view class="btn" @click="toUp">
- 立即上传
- </view>
- </view>
- </view>
- </template>
-
- <script setup>
- import { ref, reactive, computed } from 'vue'
- import { useStore } from 'vuex'
- import { onShow, onLoad } from '@dcloudio/uni-app'
- import { serviceLogList, deleteServiceLog } from '@/api/serviceLog'
- import dayjs from 'dayjs'
-
- const store = useStore()
-
- const userInfo = computed(() => {
- return store.getters.userInfo
- })
-
- const petTypeOptions = computed(() => {
- return store.getters.petTypeOptions
- })
- const getTypeDesc = (typeIds) => {
- if (!typeIds.length) {
- return ''
- }
-
- let descArr = typeIds.map(typeId => {
- return petTypeOptions.value.find(item => item.id == typeId)?.title || typeId
- })
-
- return descArr.join('、')
- }
-
- const list = ref([])
-
- const fetchLogList = async () => {
- try {
- list.value = await serviceLogList({ userId: store.getters.userInfo.userId })
- } catch (err) {
-
- }
- }
-
- const onEdit = (id) => {
- uni.setStorageSync('serviceLogData', list.value.find(item => item.id === id))
-
- uni.navigateTo({
- url: `/otherPages/authentication/serve/upload?id=${id}`
- })
- }
-
-
- const deleteModal = reactive({
- show: false,
- id: null,
- })
- const onDelete = (id) => {
- deleteModal.id = id
- deleteModal.show = true
- }
- const onCancelDelete = () => {
- deleteModal.show = false
- }
- const onConfirmDelete = async () => {
-
- try {
- await deleteServiceLog({ id: deleteModal.id })
- fetchLogList()
- deleteModal.show = false
- } catch (err) {
-
- }
-
- }
-
- const toUp = () => {
- uni.navigateTo({
- url: "/otherPages/authentication/serve/upload"
- })
- }
-
- onShow(async () => {
- await store.dispatch('fetchPetTypeOptions')
- fetchLogList()
- })
- </script>
-
- <style lang="scss" scoped>
- .page {
- min-height: 100vh;
- background-color: #F5F5F5;
-
- }
-
- .tab {
- padding: 9rpx 28rpx 16rpx 28rpx;
- background-color: #fff;
-
- &-item {
- padding-bottom: 9rpx;
- border-bottom: 4rpx solid #FFBF60;
- }
- }
-
- .box {
- margin-top: 6rpx;
- padding: 34rpx 43rpx 16rpx 28rpx;
- background-color: #fff;
-
- .img__view {
- flex-wrap: wrap;
- }
-
- &-top {
- align-items: start;
- }
-
- &-info {
- flex: 1;
- padding: 0 20rpx;
- color: rgba($color: #000000, $alpha: 0.5);
- font-size: 28rpx;
- line-height: 37rpx;
-
- .highlight {
- color: #000000;
- font-size: 30rpx;
- font-weight: 700;
- line-height: 40rpx;
- }
-
- .row + .row {
- margin-top: 6rpx;
- }
- }
-
- &-address {
- max-width: 200rpx;
- text-align: right;
- color: #FFBF60;
- font-size: 28rpx;
- line-height: 37rpx;
- }
-
- &-text {
- padding: 21rpx 32rpx 18rpx 16rpx;
- color: #000000;
- font-size: 30rpx;
- line-height: 40rpx;
- }
-
- &-img {
- &-item {
- display: inline-block;
- border-radius: 20rpx;
- overflow: hidden;
- margin-bottom: 16rpx;
- margin-left: 16rpx;
- }
- }
-
- &-btn {
- display: inline-block;
- border: none;
- padding: 0;
- margin: 0;
- color: #707070;
- font-size: 22rpx;
- line-height: 29rpx;
-
- & + & {
- margin-left: 44rpx;
- }
- }
- }
-
- .img-empty {
- width: 250rpx;
- margin-top: 20vh;
- }
-
- .modal {
- &-content {
- text-align: center;
- color: #000000;
- font-size: 30rpx;
- line-height: 40rpx;
- margin-bottom: 35rpx;
- }
-
- &-btn {
- display: inline-block;
- padding: 20rpx 89rpx;
- border: none;
- margin: 0;
- width: auto;
- height: auto;
- font-size: 30rpx;
- line-height: 40rpx;
- border-radius: 40rpx;
-
- & + & {
- margin-left: 25rpx;
- }
-
- &-cancel {
- background-color: #FFF4E6;
- color: #FFBF60;
- }
-
- &-confirm {
- background-color: #FFBF60;
- color: #FFFFFF;
- }
- }
- }
- </style>
|