You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

526 lines
17 KiB

<template>
<view class="app-wallpaper" :style="{
backgroundImage:'url('+staticImage.wallpaperBgImage+')'
}">
<view class="feed-top">
<view class="feed-container">
<view class="feed-content">
<view class="top-img">
<u-image class="img" mode="aspectFill" width="100%" height="600" :src="detail.avatar || staticImage.banner">
</u-image>
</view>
<view class="top-content row">
<view class="content-item col-6 row">
<view class="item-title">爱称</view>
<view class="item-content">{{ detail.name }}</view>
</view>
<view class="content-item col-6 row">
<view class="item-title">性别</view>
<view class="item-content">{{ detail.sex }}</view>
</view>
<view class="content-item col-6 row">
<view class="item-title">体重</view>
<view class="item-content">{{ detail.weight }}kg</view>
</view>
<view class="content-item col-6 row">
<view class="item-title">种类</view>
<view class="item-content">{{ detail.type_name }}</view>
</view>
</view>
</view>
<view class="feed-background">
<view class="feed-background-content"></view>
</view>
</view>
</view>
<view class="feed-bottom">
<view class="feed-container">
<view class="feed-gun">
<image class="img" mode="heightFix" :src="staticImage.feedGun"/>
</view>
<view class="feed-content">
<u-collapse :value="collapseValue">
<u-collapse-item
name="collapse"
title="水碗饭碗"
>
<u-textarea border="none" :disabled="(type !== 'create')" v-model="detail.feedlist.meal"
placeholder="请输入内容"></u-textarea>
<uv-upload
custom-style="margin-top:10rpx;"
width="160rpx"
height="160rpx"
accept="media"
:fileList="images.meal_imgs"
name="1"
multiple
:maxCount="(type === 'create')?10:images.meal_imgs.length"
:disabled="(type !== 'create')"
:deletable="(type === 'create')"
@delete="(res) => {uploadDel(res,'meal_imgs')}"
@afterRead="(res) => {uploadPut(res,'meal_imgs')}"
>
<u-image :src="staticImage.feedUpload"
mode="widthFix" width="130rpx" height="130rpx"></u-image>
</uv-upload>
</u-collapse-item>
</u-collapse>
<u-collapse :value="collapseValue">
<u-collapse-item
name="collapse"
title="主食情况"
>
<u-textarea border="none" :disabled="(type !== 'create')" v-model="detail.feedlist.food"
placeholder="请输入内容"></u-textarea>
<uv-upload
custom-style="margin-top:10rpx;"
width="160rpx"
height="160rpx"
accept="media"
:fileList="images.food_imgs"
name="1"
multiple
:maxCount="(type === 'create')?10:images.food_imgs.length"
:disabled="(type !== 'create')"
:deletable="(type === 'create')"
@delete="(res) => {uploadDel(res,'food_imgs')}"
@afterRead="(res) => {uploadPut(res,'food_imgs')}"
>
<u-image :src="staticImage.feedUpload"
mode="widthFix" width="130rpx" height="130rpx"></u-image>
</uv-upload>
</u-collapse-item>
</u-collapse>
<u-collapse :value="collapseValue">
<u-collapse-item
name="collapse"
title="零食小吃"
>
<u-textarea border="none" :disabled="(type !== 'create')" v-model="detail.feedlist.snack"
placeholder="请输入内容"></u-textarea>
<uv-upload
custom-style="margin-top:10rpx;"
width="160rpx"
height="160rpx"
accept="media"
:fileList="images.snack_imgs"
name="1"
multiple
:maxCount="(type === 'create')?10:images.snack_imgs.length"
:disabled="(type !== 'create')"
:deletable="(type === 'create')"
@delete="(res) => {uploadDel(res,'snack_imgs')}"
@afterRead="(res) => {uploadPut(res,'snack_imgs')}"
>
<u-image :src="staticImage.feedUpload"
mode="widthFix" width="130rpx" height="130rpx"></u-image>
</uv-upload>
</u-collapse-item>
</u-collapse>
<u-collapse :value="collapseValue">
<u-collapse-item
name="collapse"
title="喂药擦药"
>
<u-textarea border="none" :disabled="(type !== 'create')" v-model="detail.feedlist.drug"
placeholder="请输入内容"></u-textarea>
<uv-upload
custom-style="margin-top:10rpx;"
width="160rpx"
height="160rpx"
accept="media"
:fileList="images.drug_imgs"
name="1"
multiple
:maxCount="(type === 'create')?10:images.drug_imgs.length"
:disabled="(type !== 'create')"
:deletable="(type === 'create')"
@delete="(res) => {uploadDel(res,'drug_imgs')}"
@afterRead="(res) => {uploadPut(res,'drug_imgs')}"
>
<u-image :src="staticImage.feedUpload"
mode="widthFix" width="130rpx" height="130rpx"></u-image>
</uv-upload>
</u-collapse-item>
</u-collapse>
<u-collapse :value="collapseValue">
<u-collapse-item
name="collapse"
title="需要注意"
>
<u-textarea border="none" :disabled="(type !== 'create')" v-model="detail.feedlist.note"
placeholder="请输入内容"></u-textarea>
<uv-upload
custom-style="margin-top:10rpx;"
width="160rpx"
height="160rpx"
accept="media"
:fileList="images.note_imgs"
name="1"
multiple
:maxCount="(type === 'create')?10:images.note_imgs.length"
:disabled="(type !== 'create')"
:deletable="(type === 'create')"
@delete="(res) => {uploadDel(res,'note_imgs')}"
@afterRead="(res) => {uploadPut(res,'note_imgs')}"
>
<u-image :src="staticImage.feedUpload"
mode="widthFix" width="130rpx" height="130rpx"></u-image>
</uv-upload>
</u-collapse-item>
</u-collapse>
<u-collapse :value="collapseValue">
<u-collapse-item
name="collapse"
title="用品位置"
>
<u-textarea border="none" :disabled="(type !== 'create')" v-model="detail.feedlist.goods"
placeholder="请输入内容"></u-textarea>
<uv-upload
custom-style="margin-top:10rpx;"
width="160rpx"
height="160rpx"
accept="media"
:fileList="images.goods_imgs"
name="1"
multiple
:maxCount="(type === 'create')?10:images.goods_imgs.length"
:disabled="(type !== 'create')"
:deletable="(type === 'create')"
@delete="(res) => {uploadDel(res,'goods_imgs')}"
@afterRead="(res) => {uploadPut(res,'goods_imgs')}"
>
<u-image :src="staticImage.feedUpload"
mode="widthFix" width="130rpx" height="130rpx"></u-image>
</uv-upload>
</u-collapse-item>
</u-collapse>
<u-collapse :value="collapseValue">
<u-collapse-item
name="collapse"
title="外出路线"
>
<u-textarea border="none" :disabled="(type !== 'create')" v-model="detail.feedlist.line"
placeholder="请输入内容"></u-textarea>
<uv-upload
custom-style="margin-top:10rpx;"
width="160rpx"
height="160rpx"
accept="media"
:fileList="images.line_imgs"
name="1"
multiple
:maxCount="(type === 'create')?10:images.line_imgs.length"
:disabled="(type !== 'create')"
:deletable="(type === 'create')"
@delete="(res) => {uploadDel(res,'line_imgs')}"
@afterRead="(res) => {uploadPut(res,'line_imgs')}"
>
<u-image :src="staticImage.feedUpload"
mode="widthFix" width="130rpx" height="130rpx"></u-image>
</uv-upload>
</u-collapse-item>
</u-collapse>
<u-collapse :value="collapseValue">
<u-collapse-item
name="collapse"
title="其它事项"
>
<u-textarea border="none" :disabled="(type !== 'create')" v-model="detail.feedlist.other"
placeholder="请输入内容"></u-textarea>
<uv-upload
custom-style="margin-top:10rpx;"
width="160rpx"
height="160rpx"
accept="media"
:fileList="images.other_imgs"
name="1"
multiple
:maxCount="(type === 'create')?10:images.other_imgs.length"
:disabled="(type !== 'create')"
:deletable="(type === 'create')"
@delete="(res) => {uploadDel(res,'other_imgs')}"
@afterRead="(res) => {uploadPut(res,'other_imgs')}"
>
<u-image :src="staticImage.feedUpload"
mode="widthFix" width="130rpx" height="130rpx"></u-image>
</uv-upload>
</u-collapse-item>
</u-collapse>
</view>
<view class="feed-background">
<view class="feed-background-content"></view>
</view>
</view>
</view>
</view>
<view v-if="show_button">
<view class="footer-menu row" v-if="(type === 'detail')">
<view class="footer-button col-12">
<MzButton
title="修改"
button-color="#4DC3B8"
font-color="#FFFFFF"
button-width="250rpx"
@click="redirtTo('/pages/FeedLog/index?type=create&pet_id='+pet_id)"
>
</MzButton>
</view>
</view>
<view class="footer-menu row" v-if="(type === 'create')">
<view class="footer-button col-6">
<MzButton
title="取消"
button-color="#ffffff"
font-color="##262626"
button-width="250rpx"
@click="redirtTo('/pages/FeedLog/index?type=detail&pet_id='+pet_id)"
>
</MzButton>
</view>
<view class="footer-button col-6">
<MzButton
title="保存"
button-color="#4DC3B8"
font-color="#FFFFFF"
button-width="250rpx"
@click="submit"
>
</MzButton>
</view>
</view>
</view>
<u-overlay :show="imageShow" @click="imageShow = false">
<view class="" style="display:flex;align-items: center;justify-content:center;width:100%;height:100vh;">
<u-image mode="widthFix" :src="imageUrl" height="auto" width="100vw"></u-image>
</view>
</u-overlay>
</template>
<script>
import {
imghost
} from '@/config/host.js'
import MzButton from '@/components/MzButton/Index.vue';
import api from '@/utils/functions.js';
import {editFeed, feedLog} from "@/api/pet";
export default {
components: {
MzButton
},
props: {
pet_id: {
type: Number,
default: 0,
},
type: {
type: String,
default: 'detail',
},
show_button: {
type: Boolean,
default: true,
},
},
data() {
return {
collapseValue: [],
imageShow: false,
imageUrl: '',
title: 'Hello',
loading: true,
staticImage: {
screenActiveImg: imghost + '/order-screen-active.png',
orderCardBackground: imghost + '/order-card-background.png',
wallpaperBgImage: imghost + '/background.png',
petGun: imghost + '/pet_gun.png',
feedGun: imghost + '/feed-gun.png',
addPet: imghost + '/add-pet.png',
banner: imghost + '/banner.png',
feedUpload: imghost + '/feed-upload.png',
},
// pet_id:0,
detail: {
name: '',
sex: '',
weight: '',
type_name: '',
avatar: '',
feedlist: {
meal: '',
meal_imgs: [],
food: '',
food_imgs: [],
snack: '',
snack_imgs: [],
drug: '',
drug_imgs: [],
goods: '',
goods_imgs: [],
line: '',
line_imgs: [],
note: '',
note_imgs: [],
other: '',
other_imgs: [],
},
},
images: {
meal_imgs: [],
food_imgs: [],
snack_imgs: [],
drug_imgs: [],
goods_imgs: [],
line_imgs: [],
note_imgs: [],
other_imgs: [],
},
}
},
methods: {
showImage(url) {
this.imageUrl = url;
this.imageShow = true;
},
redirtTo(url) {
uni.redirectTo({
url: url
})
},
uploadSubmit(data, fileName = '') {
this.detail.feedlist[fileName] = data.map(item => {
return {url: item.url, type: item.type, thumb:(item.thumb || item.url)};
})
},
uploadShow(data, fileName = '') {
let result = [];
try {
data.forEach(item => {
result.push({url: item.url, type: item.type,thumb:(item.thumb || item.url)})
})
} catch (e) {
this.images[fileName] = [];
}
this.images[fileName] = result;
},
async uploadPut(event, fileName = '') {
let lists = [].concat(event.file);
let fileListLen = this.images[fileName].length;
lists.map((item) => {
this.images[fileName].push({
...item,
status: 'uploading',
message: '上传中',
});
});
for (let i = 0; i < lists.length; i++) {
const fileType = api.getFileType(lists[i].url);
let thumb;
const file = await api.uploadOssFile(lists[i].url);
if (fileType === 'video') thumb = await api.uploadOssFile(lists[i].thumb);
let item = this.images[fileName][fileListLen];
this.images[fileName].splice(fileListLen, 1, {
...item,
status: 'success',
message: '',
url: file.show_path,
thumb: thumb?.show_path ? thumb.show_path : file.show_path,
type: fileType
});
fileListLen++;
}
},
uploadDel(fileIndex, fileName = '') {
this.images[fileName].splice(fileIndex.index, 1);
},
navTo(url) {
uni.navigateTo({
url: url
})
},
getFeedLog(pet_id) {
let that = this;
feedLog(pet_id).then(data => {
let feedlist = this.detail.feedlist;
this.detail = data.data;
if (data.data.feedlist.length === 0) {
this.detail.feedlist = feedlist;
}
this.detail = data.data;
// if(this.type !== 'detail'){
let images = [
'meal_imgs',
'food_imgs',
'snack_imgs',
'drug_imgs',
'goods_imgs',
'line_imgs',
'note_imgs',
'other_imgs'
];
images.forEach((item, index) => {
that.uploadShow(data.data.feedlist[item], item);
});
this.collapseValue = ['collapse'];
// }
})
},
submit() {
let that = this;
let data = [
'meal_imgs',
'food_imgs',
'snack_imgs',
'drug_imgs',
'goods_imgs',
'line_imgs',
'note_imgs',
'other_imgs'
];
new Promise((resolve, reject) => {
data.forEach((item, index) => {
that.uploadSubmit(this.images[item], item);
if (index === data.length - 1) {
resolve()
}
});
}).then(res => {
console.log('this.detail.feedlist', this.detail.feedlist)
this.detail.feedlist.pet_id = this.pet_id
editFeed(this.detail.feedlist).then(res => {
console.log(res)
api.success('保存成功').then(() => {
uni.navigateBack();
})
})
});
},
},
mounted() {
this.getFeedLog(this.pet_id);
},
watch: {
pet_id(newValue) {
if (this.type === 'detail') {
this.getFeedLog(newValue);
}
}
}
}
</script>
<style lang="scss">
@import './index.scss';
</style>