import { View, Image, Text, Input, Textarea } from "@tarojs/components"; import { useSelector } from "react-redux"; import './timeline_detail.scss' import '@features/health/History.scss' import { useEffect, useState } from "react"; import Taro, { useRouter } from "@tarojs/taro"; import dayjs from "dayjs"; import { getThemeColor } from "@/features/health/hooks/health_hooks"; import { baseUrl } from "@/services/http/api"; import { checkAuthorized } from "@/utils/check_authorized"; import { createMoment, getEvents } from "@/services/health"; import NewButton, { NewButtonType } from "../base/new_button"; import { IconClose } from "@/components/basic/Icons"; import { rpxToPx } from "@/utils/tools"; import { MainColorType } from "@/context/themes/color"; import NewModal from "../base/new_modal"; import Card from "../components/card"; import ChooseDateTime from "../components/choose_date_time"; import TimeTitleDesc from "../components/time_title_desc"; import CoverList from "../components/cover_list"; import ListFooter from "../components/list_footer"; let timestamp = 0; let useRoute; let useNavigation; let scenario = ''; if (process.env.TARO_ENV == 'rn') { useRoute = require("@react-navigation/native").useRoute useNavigation = require("@react-navigation/native").useNavigation } export default function TimelineDetail() { const health = useSelector((state: any) => state.health); const user = useSelector((state: any) => state.user); const [list, setList] = useState([]) const [detail, setDetail] = useState(null) const [desc, setDesc] = useState('') const [imgUrl, setImgUrl] = useState('') const [btnDisable, setBtnDisable] = useState(true) const [showPop, setShowPop] = useState(false) const [publish, setPublish] = useState(null) const [bottom, setBottom] = useState(20) const [loaded, setLoaded] = useState(false) const [showTimePicker, setShowTimePicker] = useState(false) const [time, setTime] = useState(dayjs().format('HH:mm')) const [selTime, setSelTime] = useState(dayjs().format('HH:mm')) const [selDate, setSelDate] = useState(dayjs().format('YYYY-MM-DD')) let router let navigation; if (useNavigation) { navigation = useNavigation() } if (process.env.TARO_ENV == 'rn') { router = useRoute() } else { router = useRouter() } const { schedule_id, event_id } = router.params useEffect(() => { Taro.setNavigationBarColor({ backgroundColor: showPop ? '#191919' : '#ffffff', frontColor: '#000000' }) }, [showPop]) useEffect(() => { Taro.onKeyboardHeightChange(res => { setBottom(res.height > 0 ? res.height : 20) }) getDatas() }, []) useEffect(() => { if (desc.length > 0 || imgUrl.length > 0) { setBtnDisable(false) } else { setBtnDisable(true) } }, [desc, imgUrl]) function getDatas() { getEvents(event_id).then(res => { setLoaded(true) setDetail(res) setList((res as any).moments) setPublish((res as any).publish) }) } function addImage(isCamera: boolean) { Taro.chooseMedia({ count: 1, sizeType: ['compressed'], mediaType: ['image'], sourceType: [isCamera ? 'camera' : 'album'], success: function (res) { chooseSuccess(res, true) // checkAuthorized() }, fail: function (res) { } }) } async function chooseSuccess(res, isAlbum) { var params = { event: 'add_a_picture', value: isAlbum ? 'choose_from_album_confirm' : 'use_camera_confirm', } // saveFoodCache('create', params) var savedFilePath = process.env.TARO_ENV == 'rn' ? res.tempFiles[0].path : res.tempFiles[0].tempFilePath // var savedFilePath = res.savedFilePath await Taro.setStorage({ key: 'pic', data: savedFilePath }) setImgUrl(savedFilePath as any) uploadFile(savedFilePath, isAlbum ? 'album' : 'camera') } function uploadFile(path, source) { Taro.showLoading({ title: '加载中' }) var dot = path.lastIndexOf('.') var fileExt = dot > 0 ? path.substring(dot) : '' Taro.request({ method: 'GET', url: `${baseUrl}/api/thirdparty/aliyun/oss-form-upload`, header: { 'Authorization': 'bearer ' + global.token }, data: { type: 'FOOD_JOURNAL', file_ext: fileExt }, success: (rsp) => { if (rsp.statusCode != 200) { Taro.showToast({ title: '操作失败,请检查网络', icon: 'none' }) return } Taro.uploadFile({ url: rsp.data.upload_url, filePath: path, name: 'file', formData: rsp.data.fields, success: rlt => { setImgUrl(rsp.data.view_url) Taro.hideLoading() // createData(rsp.data.view_url, source) // uploadAvatar(rsp.data.view_url) // _this.changeAvatar(rsp.data.view_url); }, fail: rlt => { Taro.hideLoading() Taro.showModal({ content: rlt.errMsg }) } }) } }) } function tapPost() { if (desc.length == 0 && imgUrl.length == 0) { Taro.showToast({ icon: 'none', title: '请输入描述或添加图片' }) return } var dt = new Date(selDate + ' ' + time + ':00') var params: any = { schedule_id: schedule_id, description: desc, start: { date: dayjs(dt.getTime()).format('YYYYMMDD'), timestamp: dt.getTime() }, // real_end_time: meal.target_end_time, } if (imgUrl.length > 0) { params.media = [{ url: imgUrl, type: imgUrl.indexOf('mp4') != -1 ? 'video' : 'image', source: 'album' }] } params.event_id = event_id createMoment(params).then(res => { getDatas() setImgUrl('') setDesc('') global.refreshWindow() global.refreshHistory() setShowPop(false) }) } function mediaCount() { let count = 0; list && list.map(moment => { moment.media.map((obj) => { count++ }) }) return count; } function imgList() { var array: any = [] list && list.map(moment => { moment.media.map((obj) => { array.push(obj.url) }) }) return array; } if (!loaded) return return {user.nickname} { (detail.scenario != 'MEAL' && detail.scenario != 'ACTIVITY') && } { detail.scenario == 'ACTIVITY' && !list && } { list && list.map((item, index) => { return }) } {/* { { list && list.map(moment => { return moment.media.map((obj, j) => { return { }} src={obj.url} key={j * 10} /> }) }) } } */} { publish && 发布于{dayjs(publish.timestamp).format('MM-DD HH:mm')} } { health.mode != 'ACTIVE' && health.mode != 'EAT' && { timestamp = new Date().getTime() setShowPop(true) }} /> } { showPop && { setShowPop(false) }}> setShowTimePicker(true)} style={{ height: rpxToPx(88), marginTop: rpxToPx(120), width: rpxToPx(80), color: MainColorType.link }}>{time}