Commit cdecb310 by 姜雷

合并冲突

parents 0e620b4f 408bd7d1
...@@ -20,21 +20,21 @@ ...@@ -20,21 +20,21 @@
"author": "", "author": "",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@tarojs/async-await": "1.3.4", "@tarojs/async-await": "1.3.14",
"@tarojs/components": "1.3.4", "@tarojs/components": "1.3.14",
"@tarojs/redux": "1.3.4", "@tarojs/redux": "1.3.14",
"@tarojs/redux-h5": "1.3.4", "@tarojs/redux-h5": "1.3.14",
"@tarojs/router": "1.3.4", "@tarojs/router": "1.3.14",
"@tarojs/taro": "1.3.4", "@tarojs/taro": "1.3.14",
"@tarojs/taro-alipay": "1.3.4", "@tarojs/taro-alipay": "1.3.14",
"@tarojs/taro-h5": "1.3.4", "@tarojs/taro-h5": "1.3.14",
"@tarojs/taro-swan": "1.3.4", "@tarojs/taro-swan": "1.3.14",
"@tarojs/taro-tt": "1.3.4", "@tarojs/taro-tt": "1.3.14",
"@tarojs/taro-weapp": "1.3.4", "@tarojs/taro-weapp": "1.3.14",
"crypto-js": "^3.1.9-1", "crypto-js": "^3.1.9-1",
"jsbarcode": "^3.11.0", "jsbarcode": "^3.11.0",
"nerv-devtools": "^1.4.3", "nerv-devtools": "^1.4.4",
"nervjs": "^1.4.3", "nervjs": "^1.4.4",
"npm": "^6.8.0", "npm": "^6.8.0",
"redux": "^4.0.0", "redux": "^4.0.0",
"redux-logger": "^3.0.6", "redux-logger": "^3.0.6",
...@@ -42,11 +42,11 @@ ...@@ -42,11 +42,11 @@
"wxbarcode": "^1.0.2" "wxbarcode": "^1.0.2"
}, },
"devDependencies": { "devDependencies": {
"@tarojs/plugin-babel": "1.3.4", "@tarojs/plugin-babel": "1.3.14",
"@tarojs/plugin-csso": "1.3.4", "@tarojs/plugin-csso": "1.3.14",
"@tarojs/plugin-sass": "1.3.4", "@tarojs/plugin-sass": "1.3.14",
"@tarojs/plugin-uglifyjs": "1.3.4", "@tarojs/plugin-uglifyjs": "1.3.14",
"@tarojs/webpack-runner": "1.3.4", "@tarojs/webpack-runner": "1.3.14",
"@types/react": "^16.4.8", "@types/react": "^16.4.8",
"@types/webpack-env": "^1.13.6", "@types/webpack-env": "^1.13.6",
"babel-eslint": "^8.2.3", "babel-eslint": "^8.2.3",
...@@ -57,10 +57,10 @@ ...@@ -57,10 +57,10 @@
"babel-preset-env": "^1.6.1", "babel-preset-env": "^1.6.1",
"cross-env": "^5.2.0", "cross-env": "^5.2.0",
"eslint": "^4.19.1", "eslint": "^4.19.1",
"eslint-config-taro": "1.3.4", "eslint-config-taro": "1.3.14",
"eslint-plugin-import": "^2.12.0", "eslint-plugin-import": "^2.12.0",
"eslint-plugin-react": "^7.8.2", "eslint-plugin-react": "^7.8.2",
"eslint-plugin-taro": "1.3.4", "eslint-plugin-taro": "1.3.14",
"eslint-plugin-typescript": "^0.12.0", "eslint-plugin-typescript": "^0.12.0",
"typescript": "^3.0.1" "typescript": "^3.0.1"
} }
......
import { customerFetch, ResponseDataEntity } from '.';
type FetchFeedbackListParams = {
pageNum: number;
customerId: number;
pageSize: number;
lastId?: number;
};
type CustomerFeedbackDetailVo = {
feedbackId: number;
replayAt: string;
replayContent: string;
};
export type FeedbackItem = {
content: string;
createDate: string;
id: number;
replayList: CustomerFeedbackDetailVo[];
};
export const fetchFeedbackList = (
params: FetchFeedbackListParams,
): Promise<ResponseDataEntity<FeedbackItem[]>> =>
customerFetch({
url: '/dcxy/customerFeedback/customerFeedback',
data: params,
});
type AddFeedbackParams = {
content: string;
customerId: number; // 会员id
deviceInfo?: string;
state?: number;
};
export const addFeedback = (params: AddFeedbackParams) =>
customerFetch({
url: '/dcxy/customerFeedback/customerFeedback',
method: 'POST',
data: params,
});
import { ResponseDataEntity, smaproFetch } from './index'; import { ResponseDataEntity, smaproFetch, appHomeFetch } from './index';
export enum ServiceTypeParams { export enum ServiceTypeParams {
wechatPublicV = 1, wechatPublicV = 1,
...@@ -22,3 +22,48 @@ export const fetchAreaService = ( ...@@ -22,3 +22,48 @@ export const fetchAreaService = (
smaproFetch({ smaproFetch({
url: `/smpro/areaServiceConfigs/${data.areaId}/${data.type}`, url: `/smpro/areaServiceConfigs/${data.areaId}/${data.type}`,
}); });
export enum PublishClient {
android = '1',
ios = '2',
wx = '3',
}
type NoticeParams = {
customerId: number;
publishClient: PublishClient;
};
enum NoticeState {
published = 1,
unpublished = 0,
}
export type AppHomeNoticeAppVo = {
content: string; // 内容
createAt: string; // 创建时间
id: number; // 主键ID
noticeCode: string; // 公告编码
noticeImgs: string; // 公告图片
noticeTitle: string; // 公告名称
noticeType: string; // 强弹类型 1是 2否
operateId: number; // 运营商ID
operator: string; // 操作人
publishClient: PublishClient; // 发布端
sortId: number; // 排序号
state: NoticeState; // 状态 1已发布 0未发布
updateAt: string; // 更新时间
whetherClicked: boolean; // 是否点击false为否true为是
};
export const fetchLastNotice = (
entity: NoticeParams,
): Promise<ResponseDataEntity<AppHomeNoticeAppVo>> =>
appHomeFetch({
url: '/app/home/module/newest/notice',
data: entity,
});
export const fetchNoticesData = (
entity: NoticeParams,
): Promise<ResponseDataEntity<AppHomeNoticeAppVo[]>> =>
appHomeFetch({
url: '/app/home/module/notice',
data: entity,
});
...@@ -3,13 +3,13 @@ import store from '../store/index'; ...@@ -3,13 +3,13 @@ import store from '../store/index';
import { import {
BASE_SERVER_URL, BASE_SERVER_URL,
CUSTOMER_SERVER_URL, CUSTOMER_SERVER_URL,
SCHOOL_MAIN_URL,
LogoutCode, LogoutCode,
SuccessCode, SuccessCode,
OLD_BASE_SERVER_URL, OLD_BASE_SERVER_URL,
SHOWER_APP_URL, SHOWER_APP_URL,
SMPRO_URL, SMPRO_URL,
GX_URL, GX_URL,
APP_HOME_URL,
} from '../constants/index'; } from '../constants/index';
export type ResponseDataEntity<T> = { export type ResponseDataEntity<T> = {
...@@ -62,7 +62,7 @@ const createFetch = (basePath: string) => { ...@@ -62,7 +62,7 @@ const createFetch = (basePath: string) => {
export const baseFetch = createFetch(BASE_SERVER_URL); export const baseFetch = createFetch(BASE_SERVER_URL);
export const oldBaseFetch = createFetch(OLD_BASE_SERVER_URL); export const oldBaseFetch = createFetch(OLD_BASE_SERVER_URL);
export const customerFetch = createFetch(CUSTOMER_SERVER_URL); export const customerFetch = createFetch(CUSTOMER_SERVER_URL);
export const schoolMainFetch = createFetch(SCHOOL_MAIN_URL); export const appHomeFetch = createFetch(APP_HOME_URL);
export const showerFetch = createFetch(SHOWER_APP_URL); export const showerFetch = createFetch(SHOWER_APP_URL);
export const smaproFetch = createFetch(SMPRO_URL); export const smaproFetch = createFetch(SMPRO_URL);
export const gxFetch = createFetch(GX_URL); export const gxFetch = createFetch(GX_URL);
......
.Message {
display: flex;
margin: 10px 32px;
&.user {
justify-content: flex-end;
.Message-Content {
background-color: #8c95fa;
border-radius: 20px 0 20px 20px;
color: #fff;
}
.Message-Content-time {
text-align: right;
}
}
&.replay {
.Message-Content {
background-color: #f7f7f7;
border-radius: 0 20px 20px 20px;
color: #333;
}
}
.Message-UserHeader {
width: 80px;
height: 80px;
.Message-UserHeader-img {
width: 100%;
height: 100%;
}
}
.Message-Content {
box-sizing: border-box;
width: 486px;
margin: 40px 20px 0;
padding: 20px;
font-size: 28px;
.Message-Content-time {
margin-top: 12px;
font-size: 24px;
}
}
}
import { View, Image } from '@tarojs/components';
import BoyIcon from '../../images/home/bg_touxiang_boy@2x.png';
import GirlIcon from '../../images/home/bg_touxiang_girl@2x.png';
import ReplayIcon from '../../images/home/ic_fankui_kefu@2x.png';
import './Message.scss';
import { CustomerSex } from '@/types/Customer/Customer';
export enum MessageType {
user = 'user',
replay = 'replay',
}
const Message = ({
type,
content,
time,
userData,
}: {
type: MessageType;
content: string;
time: string;
userData: {
customerHead: null | string;
customerSex: string;
};
}) => {
return (
<View
className={`Message ${type === MessageType.user ? 'user' : 'replay'}`}>
{type === MessageType.replay && (
<View className='Message-UserHeader'>
<Image className='Message-UserHeader-img' src={ReplayIcon} />
</View>
)}
<View className='Message-Content'>
<View className='Message-Content-msg'>{content}</View>
<View className='Message-Content-time'>{time}</View>
</View>
{type === MessageType.user && (
<View className='Message-UserHeader'>
{userData.customerHead ? (
<Image
className='Message-UserHeader-img'
src={userData.customerHead}
/>
) : userData.customerSex === CustomerSex.boy ? (
<Image className='Message-UserHeader-img' src={BoyIcon} />
) : (
<Image className='Message-UserHeader-img' src={GirlIcon} />
)}
</View>
)}
</View>
);
};
export default Message;
...@@ -7,7 +7,7 @@ export const ResendTime = 10; ...@@ -7,7 +7,7 @@ export const ResendTime = 10;
export const BASE_SERVER_URL = 'https://dcxy-base-app.dcrym.com'; export const BASE_SERVER_URL = 'https://dcxy-base-app.dcrym.com';
export const OLD_BASE_SERVER_URL = 'https://api-selfbase.dcrym.com'; export const OLD_BASE_SERVER_URL = 'https://api-selfbase.dcrym.com';
export const CUSTOMER_SERVER_URL = 'https://dcxy-customer-app.dcrym.com'; export const CUSTOMER_SERVER_URL = 'https://dcxy-customer-app.dcrym.com';
export const SCHOOL_MAIN_URL = 'https://api-schoolhome.dcrym.com'; export const APP_HOME_URL = 'https://dcxy-home-app.dcrym.com';
export const ANN_LINK_URL = 'https://wx.dcrym.com/announcement/'; export const ANN_LINK_URL = 'https://wx.dcrym.com/announcement/';
export const SHOWER_APP_URL = 'https://shower-app-server.dcrym.com'; export const SHOWER_APP_URL = 'https://shower-app-server.dcrym.com';
export const SOCKET_URL = 'wss://shower-wss1.dcrym.com:9443/ws'; export const SOCKET_URL = 'wss://shower-wss1.dcrym.com:9443/ws';
......
import Taro, { useEffect, useState } from '@tarojs/taro';
const useButtonPadding = () => {
const [state, setState] = useState(0);
useEffect(() => {
const res = Taro.getSystemInfoSync();
if (/iPhone X(\w)?/.test(res.model)) {
console.log('is iphone X');
setState(34);
}
}, []);
return state;
};
export default useButtonPadding;
import { useReducer } from '@tarojs/taro';
import Actions from '@/types/Store/Actions';
type Pagination = {
pageNum: number;
pageSize: number;
total: number;
};
const initState: Pagination = {
pageNum: 1,
pageSize: 10,
total: 0,
};
const reducer = (state: Pagination, action: Actions): Pagination => {
switch (action.type) {
case 'updatePagination':
return { ...state, ...action.payload };
default:
return state;
}
};
const usePagination = (
initData?: Pagination,
): [Pagination, (e: Pagination) => void] => {
const [state, dispatch] = useReducer(reducer, { ...initState, ...initData });
const updatePagination = (e: Pagination) => {
dispatch({ type: 'updatePagination', payload: e });
};
return [state, updatePagination];
};
export default usePagination;
import { useSelector, useDispatch } from '@tarojs/redux';
import Taro, { useEffect } from '@tarojs/taro';
import { updateSystemInfo } from '@/store/rootReducers/systemInfo';
const useSystemInfo = () => {
const systemInfo = useSelector(
(state: { systemInfo: Taro.getSystemInfo.Promised }) => state.systemInfo,
);
const dispatch = useDispatch();
useEffect(() => {
if (!systemInfo.SDKVersion) {
Taro.getSystemInfo().then(res => {
dispatch(updateSystemInfo(res));
});
}
}, []);
return systemInfo;
};
export default useSystemInfo;
...@@ -3,12 +3,16 @@ import { ComponentClass } from 'react'; ...@@ -3,12 +3,16 @@ import { ComponentClass } from 'react';
import { View, ScrollView, Image, Text, WebView } from '@tarojs/components'; import { View, ScrollView, Image, Text, WebView } from '@tarojs/components';
import AnnIcon from '../../images/icon/ann_tongzhi_icon@2x.png'; import AnnIcon from '../../images/icon/ann_tongzhi_icon@2x.png';
import { fetchAllAnn, AnnItem } from '../../api/announcement';
import { connect } from '@tarojs/redux'; import { connect } from '@tarojs/redux';
import './Announcement.scss'; import './Announcement.scss';
import { Customer } from '@/types/Customer/Customer'; import { Customer } from '@/types/Customer/Customer';
import { shareHandle } from '@/common/shareMethod'; import { shareHandle } from '@/common/shareMethod';
import {
fetchNoticesData,
PublishClient,
AppHomeNoticeAppVo,
} from '@/api/home';
type PageStateProps = { type PageStateProps = {
userinfo: Customer; userinfo: Customer;
...@@ -17,7 +21,7 @@ type PageOwnProps = {}; ...@@ -17,7 +21,7 @@ type PageOwnProps = {};
type PageState = { type PageState = {
pageNum: number; pageNum: number;
pageSize: number; pageSize: number;
list: AnnItem[]; list: AppHomeNoticeAppVo[];
linkUrl: string; linkUrl: string;
}; };
...@@ -43,24 +47,25 @@ class Announcement extends Component { ...@@ -43,24 +47,25 @@ class Announcement extends Component {
componentWillMount() { componentWillMount() {
const { userinfo } = this.props; const { userinfo } = this.props;
const { sectionId } = this.$router.params; fetchNoticesData({
fetchAllAnn({ customerId: userinfo.customerId,
campusId: userinfo.areaId, publishClient: PublishClient.wx,
sectionId: sectionId,
}) })
.then(res => { .then(res => {
const data = res.data; const data = res.data;
this.setState({ this.setState({
...data, list: data,
}); });
}) })
.catch(err => { .catch(err => {
console.log(err); console.log(err);
}); });
} }
geAnnDetail(id: number) { geAnnDetail(id: string) {
const { userinfo } = this.props;
Taro.navigateTo({ Taro.navigateTo({
url: `/pages/Content/Content?id=${id}`, url: `/pages/Content/Content?id=${id}&customerId=${userinfo.customerId}`,
}); });
} }
render() { render() {
...@@ -70,19 +75,16 @@ class Announcement extends Component { ...@@ -70,19 +75,16 @@ class Announcement extends Component {
{linkUrl && <WebView src={linkUrl} />} {linkUrl && <WebView src={linkUrl} />}
{list.map(annItem => ( {list.map(annItem => (
<View <View
key={annItem.id} key={annItem.noticeCode}
className='Announcement-item' className='Announcement-item'
onClick={() => this.geAnnDetail(annItem.id)}> onClick={() => this.geAnnDetail(annItem.noticeCode)}>
<Image <Image className='Announcement-item-img' src={annItem.noticeImgs} />
className='Announcement-item-img'
src={annItem.linkUrls[0]}
/>
<View className='Announcement-item-Content'> <View className='Announcement-item-Content'>
<Image className='Announcement-item-icon' src={AnnIcon} /> <Image className='Announcement-item-icon' src={AnnIcon} />
<Text className='Announcement-item-title'>{annItem.title}</Text> <Text className='Announcement-item-title'>
<Text className='Announcement-item-date'> {annItem.noticeTitle}
{annItem.updateTime}
</Text> </Text>
<Text className='Announcement-item-date'>{annItem.updateAt}</Text>
</View> </View>
</View> </View>
))} ))}
......
...@@ -4,6 +4,7 @@ import { WebView } from '@tarojs/components'; ...@@ -4,6 +4,7 @@ import { WebView } from '@tarojs/components';
import { connect } from '@tarojs/redux'; import { connect } from '@tarojs/redux';
import { ANN_LINK_URL } from '../../constants'; import { ANN_LINK_URL } from '../../constants';
import { shareHandle } from '@/common/shareMethod'; import { shareHandle } from '@/common/shareMethod';
import useNotices from '../Home/hooks/useNotices';
type PageOwnProps = { type PageOwnProps = {
token: string; token: string;
...@@ -32,14 +33,18 @@ class Content extends Component { ...@@ -32,14 +33,18 @@ class Content extends Component {
getLinkUrl() { getLinkUrl() {
const { token } = this.props; const { token } = this.props;
const { id } = this.$router.params; const { id, customerId } = this.$router.params;
console.log(id);
this.setState({ this.setState({
linkUrl: `${ANN_LINK_URL}?id=${id}&token=${token}`, linkUrl: `${ANN_LINK_URL}?id=${id}&token=${token}&customerId=${customerId}`,
}); });
} }
render() { render() {
const { linkUrl } = this.state; const { linkUrl } = this.state;
console.log(linkUrl);
return linkUrl && <WebView src={linkUrl} />; return linkUrl && <WebView src={linkUrl} />;
} }
} }
......
.Feedback { .Feedback {
box-sizing: border-box;
position: relative;
flex-direction: column;
height: 100%; height: 100%;
background-color: #eee;
.Feedback-input {
border-top: 1px solid #eee;
background-color: #fff; background-color: #fff;
padding-bottom: 112px;
.Feedback-Content-wrap {
// box-sizing: border-box;
height: 100%;
overflow-y: auto;
.Feedback-Content {
// height: 100%;
}
}
.Feedback-Footer {
position: fixed;
bottom: 0;
box-sizing: border-box; box-sizing: border-box;
padding: 20px; display: flex;
width: 100%; width: 100%;
height: 468px; padding: 0 32px;
line-height: 50px; height: 112px;
align-items: center;
.input-placeholder {
font-size: 28px;
color: #d4d7fd;
}
.Feedback-Footer-Input {
background-color: #8c95fa;
border-radius: 16px;
flex: 1;
height: 92px;
line-height: 92px;
color: #fff;
padding-left: 40px;
}
.Feedback-Footer-Btn {
width: 128px;
margin-left: 20px;
background-color: #ffab3e;
border-radius: 16px;
font-size: 28px; font-size: 28px;
height: 92px;
line-height: 92px;
} }
.Feedback-btn {
margin: 40px 32px 0;
} }
} }
import { ComponentClass } from 'react'; import Taro, {
import Taro, { Component, Config } from '@tarojs/taro'; useState,
import { View, Textarea, Button } from '@tarojs/components'; useEffect,
import { fetchFeedback } from '../../api/customer'; useShareAppMessage,
import { connect } from '@tarojs/redux'; clientRectElement,
} from '@tarojs/taro';
import { View, Button, Input, ScrollView } from '@tarojs/components';
import { useSelector } from '@tarojs/redux';
import './Feedback.scss'; import './Feedback.scss';
import { shareHandle } from '@/common/shareMethod'; import { shareHandle } from '@/common/shareMethod';
import useInputValue from '@/hooks/useInputValue';
import { Customer } from '@/types/Customer/Customer';
import useFeedbackList from './useFeedbackList';
import { addFeedback } from '@/api/feedback';
import useButtonPadding from '@/hooks/useButtonPadding';
import FeedbackItem from './components/FeedbackItem/FeedbackItem';
import { formatDate } from '@/utils/time';
import useSystemInfo from '@/hooks/useSystemInfo';
import { compareVersion } from '@/utils/version';
type PageProps = { function Feedback() {
areaId: number; useShareAppMessage(shareHandle);
areaName: string; const { value, onChange } = useInputValue('');
customerId: number; const userInfo = useSelector((state: any): Customer => state.userinfo);
customerName: string; const { list, fetchListHandle, pushNewMsg } = useFeedbackList(
customerPhone: string; userInfo.customerId,
}; );
type PageState = { const bottomHeight = useButtonPadding();
feedbackContent: string; const [showKeyboard, setShowKeyboard] = useState(false);
}; const addFeedbackHandle = () => {
interface Feedback {
props: PageProps;
state: PageState;
}
@connect(({ userinfo }) => ({
areaId: userinfo.areaId,
areaName: userinfo.areaName,
customerId: userinfo.customerId,
customerName: userinfo.customerName,
customerPhone: userinfo.customerPhone,
}))
class Feedback extends Component<PageProps, PageState> {
config: Config = {
navigationBarTitleText: '意见反馈',
};
constructor(props) {
super(props);
this.state = {
feedbackContent: '',
};
}
onShareAppMessage = shareHandle;
feedbackHandle() {
Taro.showLoading(); Taro.showLoading();
const { feedbackContent } = this.state; if (value) {
if (feedbackContent && feedbackContent.length >= 5) { addFeedback({
const { content: value,
areaId, customerId: userInfo.customerId,
areaName,
customerId,
customerName,
customerPhone,
} = this.props;
fetchFeedback({
areaId,
areaName,
customerId,
customerName,
customerPhone,
feedbackContent,
}) })
.then(res => { .then(res => {
Taro.hideLoading(); Taro.hideLoading();
console.log(res); console.log(res);
Taro.showToast({ onChange({
title: '反馈成功', type: '',
icon: 'success', detail: { value: '', cursor: 0, keyCode: 0 },
timeStamp: 0,
target: this,
currentTarget: this,
preventDefault: () => {},
stopPropagation: () => {},
});
pushNewMsg({
id: 0,
content: value,
createDate: formatDate(new Date()),
replayList: [],
}); });
setTimeout(() => {
Taro.navigateBack();
}, 2000);
}) })
.catch(err => { .catch(err => {
Taro.hideLoading(); Taro.hideLoading();
...@@ -85,29 +68,86 @@ class Feedback extends Component<PageProps, PageState> { ...@@ -85,29 +68,86 @@ class Feedback extends Component<PageProps, PageState> {
icon: 'none', icon: 'none',
}); });
} }
} };
const [scrollTop, setScrollTop] = useState(0);
const systemInfo = useSystemInfo();
render() { useEffect(() => {
return ( if (compareVersion(systemInfo.SDKVersion, '2.7.0')) {
<View className='Feedback'> wx.onKeyboardHeightChange(res => {
<Textarea console.log(res.height);
className='Feedback-input' if (res.height) {
value={this.state.feedbackContent} setShowKeyboard(true);
placeholder='反馈问题不超过50字' } else {
maxlength={50} setShowKeyboard(false);
onInput={({ detail: { value } }) => { }
this.setState({
feedbackContent: value.trim(),
}); });
return value.trim(); } else {
console.log('in focus');
}
}, []);
useEffect(() => {
Taro.createSelectorQuery()
.select('.Feedback-Content')
.boundingClientRect((rect: clientRectElement) => {
console.log(rect);
if (rect) setScrollTop(rect.height);
})
.exec();
}, [list.length]);
const scrollToUpperHandle = () => {
if (list.length) {
fetchListHandle(list[0].id);
}
};
return (
<View
className='Feedback'
style={`padding-bottom: ${Taro.pxTransform(112 + bottomHeight)}`}>
<ScrollView
className='Feedback-Content-wrap'
scrollY
scrollWithAnimation
upperThreshold={-40}
onScrollToUpper={scrollToUpperHandle}
scrollTop={scrollTop}>
<View className='Feedback-Content'>
{list.map(item => (
<FeedbackItem
key={item.id}
msgData={item}
userData={{
customerHead: userInfo.customerHead,
customerSex: userInfo.customerSex,
}} }}
/> />
<Button className='Feedback-btn' onClick={this.feedbackHandle}> ))}
提交 </View>
</ScrollView>
<View
className='Feedback-Footer'
style={`bottom: ${Taro.pxTransform(bottomHeight)}`}>
<Input
className='Feedback-Footer-Input'
value={value}
onInput={onChange}
placeholder='反馈问题不超过50字'
maxLength={50}
confirmType='send'
onConfirm={addFeedbackHandle}
/>
{!showKeyboard && (
<Button className='Feedback-Footer-Btn' onClick={addFeedbackHandle}>
发送
</Button> </Button>
)}
</View>
</View> </View>
); );
}
} }
export default Feedback as ComponentClass<PageProps, PageState>; Feedback.config = {
navigationBarTitleText: '意见反馈',
};
export default Feedback;
import { View } from '@tarojs/components';
import Message, { MessageType } from '../../../../components/Message/Message';
import { FeedbackItem } from '@/api/feedback';
const FeedbackItem = ({
msgData,
userData,
}: {
msgData: FeedbackItem;
userData: {
customerHead: null | string;
customerSex: string;
};
}) => {
return (
<View className='FeedbackItem'>
{msgData && (
<Message
type={MessageType.user}
content={msgData.content}
time={msgData.createDate}
userData={userData}
/>
)}
{msgData &&
msgData.replayList.map(replay => (
<Message
key={replay.feedbackId}
type={MessageType.replay}
content={replay.replayContent}
time={replay.replayAt}
userData={userData}
/>
))}
</View>
);
};
export default FeedbackItem;
import Taro, { useEffect, useState, useReducer } from '@tarojs/taro';
import { fetchFeedbackList, FeedbackItem } from '@/api/feedback';
import usePagination from '@/hooks/usePagination';
import Actions from '@/types/Store/Actions';
const reducer = (state: FeedbackItem[], action: Actions): FeedbackItem[] => {
switch (action.type) {
case 'getMoreList':
return [...action.payload, ...state];
case 'refreshList':
return action.payload;
case 'addNewMessage':
return [...state, action.payload];
default:
return state;
}
};
const initState: FeedbackItem[] = [];
const useFeedbackList = (customerId: number) => {
const [lastId, setLastId] = useState(0);
const [pagination, setPaination] = usePagination();
const fetchListHandle = (lastId: number) => setLastId(lastId);
const [feedbackList, dispatch] = useReducer(reducer, initState);
useEffect(() => {
Taro.showLoading();
fetchFeedbackList(
lastId
? {
pageNum: pagination.pageNum + 1,
pageSize: pagination.pageSize,
customerId,
lastId,
}
: {
pageNum: 1,
pageSize: pagination.pageSize,
customerId,
},
)
.then(res => {
console.log(res);
if (res.data.length) {
let list = res.data.map(item => ({
...item,
replayList: item.replayList.reverse(),
}));
if (lastId) {
dispatch({
type: 'getMoreList',
payload: list,
});
setPaination({ ...pagination, pageNum: pagination.pageNum + 1 });
} else {
dispatch({
type: 'refreshList',
payload: list,
});
}
}
Taro.hideLoading();
})
.catch(err => {
Taro.hideLoading();
Taro.showToast({
title: err.msg || '请求失败',
icon: 'none',
});
});
}, [lastId]);
const pushNewMsg = (msgData: FeedbackItem) =>
dispatch({
type: 'addNewMessage',
payload: msgData,
});
return { list: feedbackList, fetchListHandle, pushNewMsg };
};
export default useFeedbackList;
...@@ -29,9 +29,8 @@ import { ...@@ -29,9 +29,8 @@ import {
updateUserInfo, updateUserInfo,
INITIAL_STATE as userINitState, INITIAL_STATE as userINitState,
} from '../../store/rootReducers/userinfo'; } from '../../store/rootReducers/userinfo';
import { fetchAnn, SectionItem } from '../../api/announcement';
import { appLogout } from '../../api/customer'; import { appLogout } from '../../api/customer';
import { Customer } from '@/types/Customer/Customer'; import { Customer, CustomerSex } from '@/types/Customer/Customer';
import { shareHandle } from '@/common/shareMethod'; import { shareHandle } from '@/common/shareMethod';
import { fetchAreaService, ServiceTypeParams, Service } from '@/api/home'; import { fetchAreaService, ServiceTypeParams, Service } from '@/api/home';
import MenuIconNormal from '@/components/MenuIcon/normal/MenuIconNormal'; import MenuIconNormal from '@/components/MenuIcon/normal/MenuIconNormal';
...@@ -44,6 +43,7 @@ import { ...@@ -44,6 +43,7 @@ import {
ControllerResponse, ControllerResponse,
} from '@/api/shower'; } from '@/api/shower';
import { updateShowerControlConfig } from '@/store/rootReducers/shower'; import { updateShowerControlConfig } from '@/store/rootReducers/shower';
import useNotices from './hooks/useNotices';
type PageStateProps = { type PageStateProps = {
userinfo: Customer; userinfo: Customer;
...@@ -63,7 +63,6 @@ type BeanAccount = { ...@@ -63,7 +63,6 @@ type BeanAccount = {
type PageState = { type PageState = {
barMenuVisiable: boolean; barMenuVisiable: boolean;
beanAccount: BeanAccount[]; beanAccount: BeanAccount[];
annItem: SectionItem;
filterBeanList: BeanAccount[]; filterBeanList: BeanAccount[];
}; };
type IProps = PageStateProps & PageDispatchProps; type IProps = PageStateProps & PageDispatchProps;
...@@ -100,18 +99,6 @@ class Home extends Component { ...@@ -100,18 +99,6 @@ class Home extends Component {
barMenuVisiable: false, barMenuVisiable: false,
beanAccount: [], beanAccount: [],
filterBeanList: [], filterBeanList: [],
annItem: {
id: 0,
styleType: '',
name: '',
titleTypeRemark: '',
titleType: '',
titleContent: '',
sort: 0,
updateTime: 0,
itemsCount: 0,
items: [],
},
}; };
} }
...@@ -127,7 +114,6 @@ class Home extends Component { ...@@ -127,7 +114,6 @@ class Home extends Component {
getInitData() { getInitData() {
this.getServiceList(); this.getServiceList();
this.getAnn();
} }
getServiceList() { getServiceList() {
...@@ -142,24 +128,6 @@ class Home extends Component { ...@@ -142,24 +128,6 @@ class Home extends Component {
} }
} }
getAnn() {
const { userinfo } = this.props;
fetchAnn({
campusId: userinfo.areaId,
customerId: userinfo.customerId,
})
.then(res => {
if (res) {
this.setState({
annItem: res,
});
}
})
.catch(err => {
console.error(err);
});
}
goSetting() { goSetting() {
Taro.navigateTo({ Taro.navigateTo({
url: '/pages/UserSetting/UserSetting', url: '/pages/UserSetting/UserSetting',
...@@ -171,9 +139,9 @@ class Home extends Component { ...@@ -171,9 +139,9 @@ class Home extends Component {
url: '/pages/Feedback/Feedback', url: '/pages/Feedback/Feedback',
}); });
} }
goAnn(id: number) { goAnn(code: string) {
Taro.navigateTo({ Taro.navigateTo({
url: '/pages/Announcement/Announcement?sectionId=' + id, url: '/pages/Announcement/Announcement?sectionId=' + code,
}); });
} }
...@@ -249,10 +217,10 @@ class Home extends Component { ...@@ -249,10 +217,10 @@ class Home extends Component {
let newPhone = phone.replace(/([0-9]{3})([0-9]{4})([0-9]{4})/, '$1****$3'); let newPhone = phone.replace(/([0-9]{3})([0-9]{4})([0-9]{4})/, '$1****$3');
return newPhone; return newPhone;
}; };
geAnnDetail(id: number) { geAnnDetail(code: string) {
console.log(id); const { userinfo } = this.props;
Taro.navigateTo({ Taro.navigateTo({
url: `/pages/Content/Content?id=${id}`, url: `/pages/Content/Content?id=${code}&customerId=${userinfo.customerId}`,
}); });
} }
...@@ -265,8 +233,9 @@ class Home extends Component { ...@@ -265,8 +233,9 @@ class Home extends Component {
render() { render() {
const { userinfo, serviceList } = this.props; const { userinfo, serviceList } = this.props;
const { annItem, barMenuVisiable } = this.state; const { barMenuVisiable } = this.state;
const noticeData = useNotices();
return ( return (
<View className='Home'> <View className='Home'>
{barMenuVisiable ? ( {barMenuVisiable ? (
...@@ -300,7 +269,7 @@ class Home extends Component { ...@@ -300,7 +269,7 @@ class Home extends Component {
</View> </View>
<View className='Home-UserBox-addr'>{userinfo.areaName}</View> <View className='Home-UserBox-addr'>{userinfo.areaName}</View>
</View> </View>
{userinfo.customerSex === '2' ? ( {userinfo.customerSex === CustomerSex.girl ? (
<Image <Image
className='Home-UserBox-headimg' className='Home-UserBox-headimg'
src={UserHeaderF} src={UserHeaderF}
...@@ -436,30 +405,26 @@ class Home extends Component { ...@@ -436,30 +405,26 @@ class Home extends Component {
) : null} ) : null}
</View> </View>
{annItem.id ? ( {noticeData.noticeCode ? (
<View className='Home-Announcement'> <View className='Home-Announcement'>
<Image className='bg' src={AnnouncementBg} /> <Image className='bg' src={AnnouncementBg} />
<View className='Home-Announcement-title'> <View className='Home-Announcement-title'>
<Text>最新公告</Text> <Text>最新公告</Text>
<View <View
className='Home-Announcement-more' className='Home-Announcement-more'
onClick={() => this.goAnn(annItem.id)}> onClick={() => this.goAnn(noticeData.noticeCode)}>
更多 更多
<Image className='more-icon' src={MoreIcon} /> <Image className='more-icon' src={MoreIcon} />
</View> </View>
</View> </View>
{annItem.items.length && (
<View <View
className='Home-Announcement-Content' className='Home-Announcement-Content'
onClick={() => this.geAnnDetail(annItem.items[0].id)}> onClick={() => this.geAnnDetail(noticeData.noticeCode)}>
<Text className='Home-Announcement-Content-title'> <Text className='Home-Announcement-Content-title'>
{annItem.items[0].title} {noticeData.noticeTitle}
</Text>
<Text className='ContentDate'>
{annItem.items[0].updateTime}
</Text> </Text>
<Text className='ContentDate'>{noticeData.updateAt}</Text>
</View> </View>
)}
</View> </View>
) : null} ) : null}
</View> </View>
......
import { useEffect, useState } from '@tarojs/taro';
import { fetchLastNotice, PublishClient, AppHomeNoticeAppVo } from '@/api/home';
import { useSelector } from '@tarojs/redux';
import { Customer } from '@/types/Customer/Customer';
const initState: AppHomeNoticeAppVo = {
content: '', // 内容
createAt: '', // 创建时间
id: 0, // 主键ID
noticeCode: '', // 公告编码
noticeImgs: '', // 公告图片
noticeTitle: '', // 公告名称
noticeType: '', // 强弹类型 1是 2否
operateId: 0, // 运营商ID
operator: '', // 操作人
publishClient: PublishClient.wx, // 发布端
sortId: 0, // 排序号
state: 1, // 状态 1已发布 0未发布
updateAt: '', // 更新时间
whetherClicked: false, // 是否点击false为否true为是
};
const useNotices = (): AppHomeNoticeAppVo => {
const [state, setState] = useState(initState);
const userinfo = useSelector(
(state: { userinfo: Customer }) => state.userinfo,
);
useEffect(() => {
fetchLastNotice({
customerId: userinfo.customerId,
publishClient: PublishClient.wx,
})
.then(res => {
console.log(res);
setState(res.data);
})
.catch(err => {
console.log(err);
});
}, []);
return state;
};
export default useNotices;
...@@ -64,6 +64,8 @@ class OrderItem extends Component { ...@@ -64,6 +64,8 @@ class OrderItem extends Component {
const { const {
data: { orderState, createAt, serviceName, payableMoney }, data: { orderState, createAt, serviceName, payableMoney },
} = this.props; } = this.props;
let moneyStr = payableMoney.toFixed(2);
return ( return (
<View className='OrderItem' onClick={this.detailHandle}> <View className='OrderItem' onClick={this.detailHandle}>
<View className='OrderItem-text'> <View className='OrderItem-text'>
...@@ -83,7 +85,7 @@ class OrderItem extends Component { ...@@ -83,7 +85,7 @@ class OrderItem extends Component {
</View> </View>
<View <View
className={`OrderItem-price ${orderState === '1' ? 'topay' : ''}`}> className={`OrderItem-price ${orderState === '1' ? 'topay' : ''}`}>
{payableMoney.toFixed(2)} {moneyStr}
</View> </View>
</View> </View>
); );
......
...@@ -8,6 +8,7 @@ const RechargeItem = (props: { data: RechargeOrder }) => { ...@@ -8,6 +8,7 @@ const RechargeItem = (props: { data: RechargeOrder }) => {
const { const {
data: { createAt, rechargeRemark, actualAmount, orderNum }, data: { createAt, rechargeRemark, actualAmount, orderNum },
} = props; } = props;
let moneyStr = actualAmount.toFixed(2);
return ( return (
<View className='RechargeItem'> <View className='RechargeItem'>
...@@ -26,7 +27,7 @@ const RechargeItem = (props: { data: RechargeOrder }) => { ...@@ -26,7 +27,7 @@ const RechargeItem = (props: { data: RechargeOrder }) => {
</View> </View>
<View <View
className={`RechargeItem-price ${actualAmount >= 0 ? 'topay' : ''}`}> className={`RechargeItem-price ${actualAmount >= 0 ? 'topay' : ''}`}>
{actualAmount.toFixed(2)} {moneyStr}
</View> </View>
</View> </View>
); );
......
...@@ -8,6 +8,7 @@ import { connect } from '@tarojs/redux'; ...@@ -8,6 +8,7 @@ import { connect } from '@tarojs/redux';
import { updateUserInfo, UserState } from '../../store/rootReducers/userinfo'; import { updateUserInfo, UserState } from '../../store/rootReducers/userinfo';
import { appLogin } from '../../api/customer'; import { appLogin } from '../../api/customer';
import { shareHandle } from '@/common/shareMethod'; import { shareHandle } from '@/common/shareMethod';
import useSystemInfo from '@/hooks/useSystemInfo';
type PageDispatchProps = { type PageDispatchProps = {
updateUserInfo: (e: UserState | { token: string }) => void; updateUserInfo: (e: UserState | { token: string }) => void;
...@@ -97,6 +98,7 @@ class Index extends Component { ...@@ -97,6 +98,7 @@ class Index extends Component {
render() { render() {
const { errorText } = this.state; const { errorText } = this.state;
useSystemInfo();
return <View className='Index'>{errorText}</View>; return <View className='Index'>{errorText}</View>;
} }
} }
......
...@@ -5,6 +5,7 @@ import ShowerReducer from '@/pages/Shower/store'; ...@@ -5,6 +5,7 @@ import ShowerReducer from '@/pages/Shower/store';
import serviceList from './rootReducers/service'; import serviceList from './rootReducers/service';
import orderState from './rootReducers/orderState'; import orderState from './rootReducers/orderState';
import showerState from './rootReducers/shower'; import showerState from './rootReducers/shower';
import systemInfo from './rootReducers/systemInfo';
export default combineReducers({ export default combineReducers({
userinfo, userinfo,
...@@ -13,4 +14,5 @@ export default combineReducers({ ...@@ -13,4 +14,5 @@ export default combineReducers({
serviceList, serviceList,
orderState, orderState,
showerState, showerState,
systemInfo,
}); });
import Actions from '@/types/Store/Actions';
const INITIAL_STATE = {
brand: '',
model: '',
pixelRatio: '',
screenWidth: 0,
screenHeight: 0,
windowWidth: 0,
windowHeight: 0,
statusBarHeight: 0,
language: '',
version: '',
system: '',
platform: '',
fontSizeSetting: 0,
SDKVersion: '',
};
export const updateSystemInfo = (
entity: Taro.getSystemInfo.Promised,
): Actions => ({
type: 'UPDATE_SYSTEMINFO',
payload: entity,
});
export default function systemInfo(
state: Taro.getSystemInfo.Promised = INITIAL_STATE,
actions: Actions,
): Taro.getSystemInfo.Promised {
switch (actions.type) {
case 'UPDATE_SYSTEMINFO':
return {
...state,
...actions.payload,
};
default:
return state;
}
}
import Action from '../../types/Store/Actions'; import Action from '../../types/Store/Actions';
import { Customer } from '../../types/Customer/Customer'; import { Customer, CustomerSex } from '../../types/Customer/Customer';
export type UserState = StoreState<Customer & { code: string }>; export type UserState = StoreState<Customer & { code: string }>;
...@@ -14,7 +14,7 @@ export const INITIAL_STATE = { ...@@ -14,7 +14,7 @@ export const INITIAL_STATE = {
customerId: 0, customerId: 0,
customerName: '', customerName: '',
customerPhone: '', customerPhone: '',
customerSex: '', customerSex: CustomerSex.boy,
customerType: '', customerType: '',
email: '', email: '',
entranceDate: '', entranceDate: '',
......
export enum CustomerSex {
boy = '1',
girl = '0',
}
export type Customer = { export type Customer = {
areaId: number; areaId: number;
areaName: string; areaName: string;
...@@ -8,7 +12,7 @@ export type Customer = { ...@@ -8,7 +12,7 @@ export type Customer = {
customerId: number; customerId: number;
customerName: string; customerName: string;
customerPhone: string; customerPhone: string;
customerSex: string; customerSex: CustomerSex;
customerType: string; customerType: string;
email: string; email: string;
entranceDate: string; entranceDate: string;
......
export const formatDate = (date: Date, fmt = 'yyyy-MM-dd hh:mm:ss'): string => {
if (!date) {
return '无';
}
if (typeof date === 'string') {
date = new Date(date);
// date = new Date(date.replace('-', '/'));
}
if (/(y+)/.test(fmt)) {
fmt = fmt.replace(
RegExp.$1,
(date.getFullYear() + '').substr(4 - RegExp.$1.length),
);
}
let o = {
'M+': date.getMonth() + 1,
'd+': date.getDate(),
'h+': date.getHours(),
'm+': date.getMinutes(),
's+': date.getSeconds(),
};
for (let k in o) {
if (new RegExp(`(${k})`).test(fmt)) {
let str = o[k] + '';
fmt = fmt.replace(
RegExp.$1,
RegExp.$1.length === 1 ? str : ('00' + str).substr(str.length),
);
}
}
return fmt;
};
export function compareVersion(v1: string, v2: string): boolean {
let v1Arr = v1.split('.');
let v2Arr = v2.split('.');
const len = Math.max(v1.length, v2.length);
while (v1.length < len) {
v1Arr.push('0');
}
while (v2.length < len) {
v2Arr.push('0');
}
for (let i = 0; i < len; i++) {
const num1 = parseInt(v1[i]);
const num2 = parseInt(v2[i]);
if (num1 > num2) {
return true;
} else if (num1 < num2) {
return false;
}
}
return true;
}
...@@ -78,16 +78,18 @@ ...@@ -78,16 +78,18 @@
lodash "^4.2.0" lodash "^4.2.0"
to-fast-properties "^2.0.0" to-fast-properties "^2.0.0"
"@tarojs/async-await@1.3.4": "@tarojs/async-await@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/async-await/-/async-await-1.3.4.tgz#82dc0453c2288e248feced32f81352d2ac778b68" resolved "https://registry.yarnpkg.com/@tarojs/async-await/-/async-await-1.3.14.tgz#64b440c965848eed87d038cd601fd94681928cc1"
integrity sha512-ZKsuky6PWm7UUxHUM4Hgfj4kJV5lunXLZYr2oBn6OWc3IHKifpyI+0MV+eedjHWVjR0xYLPzUgkxjM0+ya7/6w==
dependencies: dependencies:
promise-polyfill "^7.1.2" promise-polyfill "^7.1.2"
regenerator-runtime "^0.11.1" regenerator-runtime "^0.11.1"
"@tarojs/components@1.3.4": "@tarojs/components@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/components/-/components-1.3.4.tgz#fd29268d5425c44d69b8ae906bb8f4a126396f94" resolved "https://registry.yarnpkg.com/@tarojs/components/-/components-1.3.14.tgz#4f79a8979c2df96eb38a323124709ccc2cb64886"
integrity sha512-CN2GSw2mg1XRd5/PtuylCkGEPHS48WORy3klctPcfLlHFWrMRLrCROc+0MiVIeq37hTXsJULN4UcSgpkuuaAdA==
dependencies: dependencies:
better-scroll "^1.14.1" better-scroll "^1.14.1"
classnames "^2.2.5" classnames "^2.2.5"
...@@ -96,70 +98,79 @@ ...@@ -96,70 +98,79 @@
swiper "^4.4.2" swiper "^4.4.2"
weui "^1.1.2" weui "^1.1.2"
"@tarojs/plugin-babel@1.3.4": "@tarojs/plugin-babel@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/plugin-babel/-/plugin-babel-1.3.4.tgz#59924f54a93f6f5bf3a2fd8f4183f34093ae5392" resolved "https://registry.yarnpkg.com/@tarojs/plugin-babel/-/plugin-babel-1.3.14.tgz#04b8b0a5f9e210418f19f7ca75f9543f1a9a6cbe"
integrity sha512-y5WI1H0KZW8d+sUYPn0zFaeSnCcwaAsHmGiDdel7RpbId0Yi0Sh92iv5HEvVbZL7FG0swExXMWtGL9AFXItWBw==
dependencies: dependencies:
babel-core "^6.26.0" babel-core "^6.26.0"
"@tarojs/plugin-csso@1.3.4": "@tarojs/plugin-csso@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/plugin-csso/-/plugin-csso-1.3.4.tgz#14d54e834fe83b1f0de5fe42d783a1fabd9171e1" resolved "https://registry.yarnpkg.com/@tarojs/plugin-csso/-/plugin-csso-1.3.14.tgz#73d534ae0ad6c42597faa2ffde8886bab9578bab"
integrity sha512-b58b2rlareN8v8pYgdiHg/pnp8DRtDQcZWYJzCD7r74rg9se8GA9/+26ko946ZgPHXA7i+BPikXBWayqOyOuiQ==
dependencies: dependencies:
csso "^3.5.0" csso "^3.5.0"
"@tarojs/plugin-sass@1.3.4": "@tarojs/plugin-sass@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/plugin-sass/-/plugin-sass-1.3.4.tgz#3c750a1c3b43ba1fe9f0aee7e01e4cd9f176eeec" resolved "https://registry.yarnpkg.com/@tarojs/plugin-sass/-/plugin-sass-1.3.14.tgz#7cf0350e71dd78790c01f97d48082bdec3599b08"
integrity sha512-yVpulnAt3qriSy8/PAnbgIosNH91yvLWCTsHihvmSyh2Gme8IeNNtEkm+zdmgT9q0/9dKlwYyBtPkJ/Plt6Lvg==
dependencies: dependencies:
node-sass "^4.12.0" node-sass "^4.12.0"
scss-bundle "^2.5.1" scss-bundle "^2.5.1"
"@tarojs/plugin-uglifyjs@1.3.4": "@tarojs/plugin-uglifyjs@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/plugin-uglifyjs/-/plugin-uglifyjs-1.3.4.tgz#fc3c6fb3ae4729aadd305effadab9c3e1d90240a" resolved "https://registry.yarnpkg.com/@tarojs/plugin-uglifyjs/-/plugin-uglifyjs-1.3.14.tgz#8c11157e724b7433c804f06422f3d4a8d74d81f0"
integrity sha512-rN4IjahEwDRvNB4v+96anoog2Xx/SMUfJgbHhaU5IByaHGyW/fWQb31v4xQ7DqbB/bINnTNmnhhGJUINYW9XSg==
dependencies: dependencies:
uglify-js "^3.3.24" uglify-js "^3.3.24"
"@tarojs/redux-h5@1.3.4": "@tarojs/redux-h5@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/redux-h5/-/redux-h5-1.3.4.tgz#8f73e8e7a4f9f0f0721f6a7738bc0ba5c936630d" resolved "https://registry.yarnpkg.com/@tarojs/redux-h5/-/redux-h5-1.3.14.tgz#cff2695df886d78a27dd0499bc71127d066e911a"
integrity sha512-JShfbU/bmXtXrieGgKtjJQW7+fTlNw3zE+jPVMAtkJ/IgTTY2cjJO+qj7R72IwyLksovjA15lDURHIHj0oEgmA==
dependencies: dependencies:
hoist-non-react-statics "^2.5.0" hoist-non-react-statics "^2.5.0"
invariant "^2.2.4" invariant "^2.2.4"
loose-envify "^1.1.0" loose-envify "^1.1.0"
prop-types "^15.6.1" prop-types "^15.6.1"
"@tarojs/redux@1.3.4": "@tarojs/redux@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/redux/-/redux-1.3.4.tgz#e122685603c8271e23a4196df4b0bcb5b7b83e9d" resolved "https://registry.yarnpkg.com/@tarojs/redux/-/redux-1.3.14.tgz#b4a502f2d09e0f06de3bd761cc555540436fc048"
integrity sha512-8+bkwhv/SEhCJ/YKt5s+qpRtCNR1IE0apjKa/Z9pDt5bKNk7Vez2oJhnLK8nXZ5GHfckPwh8XkI2EWJEbLskoA==
dependencies: dependencies:
"@tarojs/taro" "1.3.4" "@tarojs/taro" "1.3.14"
"@tarojs/utils" "1.3.4" "@tarojs/utils" "1.3.14"
"@tarojs/router@1.3.4": "@tarojs/router@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/router/-/router-1.3.4.tgz#5a7cadc1e88c65bc6730fe27ae5f895810e718f2" resolved "https://registry.yarnpkg.com/@tarojs/router/-/router-1.3.14.tgz#d90c053f7cd3ac9c135ac5360d0e900e958433f2"
integrity sha512-UEdWS/lcu5t4Ll9HJ464zJMKadVOPU10zcQZkbK0lCrYoxvwSAOIhd1Sm8Mt3NF2mEfZMSk/uNDvPZRDwzJZ4g==
dependencies: dependencies:
invariant "2.2.4" invariant "2.2.4"
lodash "4.17.11" lodash "4.17.13"
resolve-pathname "2.2.0" resolve-pathname "2.2.0"
rollup-plugin-alias "1.4.0" rollup-plugin-alias "1.4.0"
value-equal "0.4.0" value-equal "0.4.0"
warning "4.0.2" warning "4.0.2"
"@tarojs/taro-alipay@1.3.4": "@tarojs/taro-alipay@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/taro-alipay/-/taro-alipay-1.3.4.tgz#67e3cd1fd5ae4d644cc626c0d95d0c605b96bd22" resolved "https://registry.yarnpkg.com/@tarojs/taro-alipay/-/taro-alipay-1.3.14.tgz#2fc339f378160cec92fc5ad0cde9aef390a39536"
integrity sha512-IGaCygmhKngPf485s7ZxV11Zkm/ZJHGq++3jZP/JME1qqht4KzajLSMbvHbrxn0gjQip4XNYQDX9XQ39wYq8jQ==
dependencies: dependencies:
"@tarojs/taro" "1.3.4" "@tarojs/taro" "1.3.14"
"@tarojs/utils" "1.3.4" "@tarojs/utils" "1.3.14"
lodash "^4.17.10" lodash "^4.17.10"
prop-types "^15.6.1" prop-types "^15.6.1"
"@tarojs/taro-h5@1.3.4": "@tarojs/taro-h5@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/taro-h5/-/taro-h5-1.3.4.tgz#7c7751f5ccea928b4994df002ab8ae5cf3144a50" resolved "https://registry.yarnpkg.com/@tarojs/taro-h5/-/taro-h5-1.3.14.tgz#1f7966d106edc85b5b397fa197c978625f2cf7f8"
integrity sha512-Y8VA3merzwiZLW3umjxT5Pj2gwVEvsWNMV+iOP7RLoHrP31cwtFBvGe3gYXiiLquBVDgA2TrS7NqbjOG7DS91w==
dependencies: dependencies:
base64-js "^1.3.0" base64-js "^1.3.0"
jsonp-retry "^1.0.3" jsonp-retry "^1.0.3"
...@@ -167,52 +178,60 @@ ...@@ -167,52 +178,60 @@
raf "^3.4.1" raf "^3.4.1"
whatwg-fetch "^2.0.4" whatwg-fetch "^2.0.4"
"@tarojs/taro-swan@1.3.4": "@tarojs/taro-swan@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/taro-swan/-/taro-swan-1.3.4.tgz#4c802166622881e59783e7070478e707e6dff573" resolved "https://registry.yarnpkg.com/@tarojs/taro-swan/-/taro-swan-1.3.14.tgz#4655e03cb1fbe0ab43f9eceb053256406b65d7e6"
integrity sha512-6N/KyYubCPdGRHmwH5qxUTxQcRZFT079dUc33EptPNeIo7NcCsR3ozTby4DwTZkyhW4jjTFq7GWEyjXvkGFJFQ==
dependencies: dependencies:
"@tarojs/taro" "1.3.4" "@tarojs/taro" "1.3.14"
"@tarojs/utils" "1.3.4" "@tarojs/utils" "1.3.14"
lodash "^4.17.10" lodash "^4.17.10"
prop-types "^15.6.1" prop-types "^15.6.1"
"@tarojs/taro-tt@1.3.4": "@tarojs/taro-tt@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/taro-tt/-/taro-tt-1.3.4.tgz#9a5406fe399249454c29cb3fef9babe6425598a7" resolved "https://registry.yarnpkg.com/@tarojs/taro-tt/-/taro-tt-1.3.14.tgz#48e41ec38d440e68666c31a0a09d0fa71450b1ae"
integrity sha512-vE1PnOSsRlXOc5xoeByyFnbArL7BRyz7bTEbd6hLJf2XLhg01O/JuWZAEBy0LHK02J7dJDWa1Z7SIwqtHsoM7w==
dependencies: dependencies:
"@tarojs/taro" "1.3.4" "@tarojs/taro" "1.3.14"
"@tarojs/utils" "1.3.4" "@tarojs/utils" "1.3.14"
lodash "^4.17.10" lodash "^4.17.10"
prop-types "^15.6.1" prop-types "^15.6.1"
"@tarojs/taro-weapp@1.3.4": "@tarojs/taro-weapp@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/taro-weapp/-/taro-weapp-1.3.4.tgz#8a1d258cbc3d01364086c61fbd77497907411deb" resolved "https://registry.yarnpkg.com/@tarojs/taro-weapp/-/taro-weapp-1.3.14.tgz#7edd8e75b80e3481734c2f09f6f8ef28047dadb1"
integrity sha512-qCmW8NsjLpwcPKFHCIWpbu2ewGsIaP9Ez5APemARTPapKTfP45UaYVEtMe0V5zLejiNRCxeSvGBCgAxh7UryJw==
dependencies: dependencies:
"@tarojs/taro" "1.3.4" "@tarojs/taro" "1.3.14"
"@tarojs/utils" "1.3.4" "@tarojs/utils" "1.3.14"
lodash "^4.17.10" lodash "^4.17.10"
prop-types "^15.6.1" prop-types "^15.6.1"
"@tarojs/taro@1.3.4": "@tarojs/taro@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/taro/-/taro-1.3.4.tgz#a4fb58306ad8d1649243ff7a7f3853b756037d80" resolved "https://registry.yarnpkg.com/@tarojs/taro/-/taro-1.3.14.tgz#ed54fa30d9114624c11cd20d6302a83a9861cb6a"
integrity sha512-PhFf7+J3fzYqtS2Uz433U6DFa9Hdl8M+QcWLLDvtCt8z1Hiwxro+X9RxwgoJ/FEhJfzKtdXsTjY8w+XM14zaHw==
dependencies:
"@tarojs/utils" "1.3.14"
"@tarojs/utils@1.3.4": "@tarojs/utils@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/utils/-/utils-1.3.4.tgz#8e1a4cf6c90f3d3ad41d7b3fac8e07027b3c9928" resolved "https://registry.yarnpkg.com/@tarojs/utils/-/utils-1.3.14.tgz#b3574a8b0010d45164cf79eb4457fcc310a01b24"
integrity sha512-WchKu3qm0ef6jiAieqUxCjds5uRBcPZvXKUFjceT53y1UJjcxikx7I4EAcxJXKWEqPrgecPGsuMTYw831c28nA==
"@tarojs/webpack-runner@1.3.4": "@tarojs/webpack-runner@1.3.14":
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/@tarojs/webpack-runner/-/webpack-runner-1.3.4.tgz#a190065d0dc344a93ce915482a7c0d728a4c40cd" resolved "https://registry.yarnpkg.com/@tarojs/webpack-runner/-/webpack-runner-1.3.14.tgz#ef8a65470d7661d22092a51911cb50a67893f1ea"
integrity sha512-Qvb3/ECF9T6TBEwN0x1dGRCvbDxyMHcQ8gRNl6nFGKiTqD0vSaVw/afhtNKhhbvztaY+nYUR4lj37kSU6qe+Hg==
dependencies: dependencies:
"@tarojs/taro-h5" "1.3.4" "@tarojs/taro-h5" "1.3.14"
autoprefixer "8.6.4" autoprefixer "8.6.4"
babel-core "6.26.0" babel-core "6.26.0"
babel-loader "7.1.4" babel-loader "7.1.4"
babel-plugin-syntax-dynamic-import "6.18.0" babel-plugin-syntax-dynamic-import "6.18.0"
babel-plugin-transform-react-jsx "6.24.1" babel-plugin-transform-react-jsx "6.24.1"
babel-plugin-transform-taroapi "1.3.4" babel-plugin-transform-taroapi "1.3.14"
babel-types "6.26.0" babel-types "6.26.0"
chalk "2.4.2" chalk "2.4.2"
copy-webpack-plugin "^5.0.3" copy-webpack-plugin "^5.0.3"
...@@ -224,13 +243,13 @@ ...@@ -224,13 +243,13 @@
html-webpack-plugin "3.2.0" html-webpack-plugin "3.2.0"
less "3.0.4" less "3.0.4"
less-loader "4.1.0" less-loader "4.1.0"
lodash "4.17.11" lodash "4.17.13"
mini-css-extract-plugin "0.4.1" mini-css-extract-plugin "0.4.1"
opn "5.3.0" opn "5.3.0"
ora "2.1.0" ora "2.1.0"
postcss-loader "2.1.6" postcss-loader "2.1.6"
postcss-plugin-constparse "1.3.4" postcss-plugin-constparse "1.3.14"
postcss-pxtransform "1.3.4" postcss-pxtransform "1.3.14"
resolve "1.8.1" resolve "1.8.1"
resolve-url-loader "2.3.0" resolve-url-loader "2.3.0"
sass-loader "7.1.0" sass-loader "7.1.0"
...@@ -1202,9 +1221,10 @@ babel-plugin-transform-strict-mode@^6.24.1: ...@@ -1202,9 +1221,10 @@ babel-plugin-transform-strict-mode@^6.24.1:
babel-runtime "^6.22.0" babel-runtime "^6.22.0"
babel-types "^6.24.1" babel-types "^6.24.1"
babel-plugin-transform-taroapi@1.3.4: babel-plugin-transform-taroapi@1.3.14:
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-taroapi/-/babel-plugin-transform-taroapi-1.3.4.tgz#82cf9ff923794cd37d5b60dabb22a554aa9d7321" resolved "https://registry.yarnpkg.com/babel-plugin-transform-taroapi/-/babel-plugin-transform-taroapi-1.3.14.tgz#8aeb71e6d69bb357fbf1e69ca544d3ccb9331235"
integrity sha512-hNrD5T4VqMHUMeQxeBF2V7fc+7GI8suMzfrQp3mtePoz2Rxqs3O8D+MN1AbU/qktfuhCtIaenHjmZVuxP8RMhQ==
babel-preset-env@^1.6.1: babel-preset-env@^1.6.1:
version "1.7.0" version "1.7.0"
...@@ -2676,11 +2696,12 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: ...@@ -2676,11 +2696,12 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5" version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
eslint-config-taro@1.3.4: eslint-config-taro@1.3.14:
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/eslint-config-taro/-/eslint-config-taro-1.3.4.tgz#86f3227b54aef59fc159c50cdac8b2f8ad41b8f8" resolved "https://registry.yarnpkg.com/eslint-config-taro/-/eslint-config-taro-1.3.14.tgz#f9202c00ac108e3bbc856cf1221c9827f45133a6"
integrity sha512-DsdrRDH3m8u9sb03YrR6P7/k06d6Vu0LN/0HibhRmOzoWl2ofTS/Ftpa48y7YFRj/b0iBE9xXpExv9EDKAb6GA==
dependencies: dependencies:
eslint-plugin-taro "1.3.4" eslint-plugin-taro "1.3.14"
eslint-import-resolver-node@^0.3.2: eslint-import-resolver-node@^0.3.2:
version "0.3.2" version "0.3.2"
...@@ -2723,9 +2744,10 @@ eslint-plugin-react@^7.8.2: ...@@ -2723,9 +2744,10 @@ eslint-plugin-react@^7.8.2:
prop-types "^15.6.2" prop-types "^15.6.2"
resolve "^1.9.0" resolve "^1.9.0"
eslint-plugin-taro@1.3.4: eslint-plugin-taro@1.3.14:
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/eslint-plugin-taro/-/eslint-plugin-taro-1.3.4.tgz#4451fdfa0e82d4ee6365ea40e7e7b5b2807d3068" resolved "https://registry.yarnpkg.com/eslint-plugin-taro/-/eslint-plugin-taro-1.3.14.tgz#f5a060de82caaaac77bb1f5e9088f52ccdfe6d84"
integrity sha512-3bVgc4ETDKjSm9/ShBAq6XS4+KSSi+2TJOa5jNqO8xBK/VNyDnQFBQ+tlNQhuq+qy2KAo1wWr06E0hvtR894jw==
dependencies: dependencies:
has "^1.0.1" has "^1.0.1"
...@@ -4558,7 +4580,12 @@ lodash.without@~4.4.0: ...@@ -4558,7 +4580,12 @@ lodash.without@~4.4.0:
version "4.4.0" version "4.4.0"
resolved "http://registry.npm.taobao.org/lodash.without/download/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac" resolved "http://registry.npm.taobao.org/lodash.without/download/lodash.without-4.4.0.tgz#3cd4574a00b67bae373a94b748772640507b7aac"
lodash@4.17.11, lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.10: lodash@4.17.13:
version "4.17.13"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.13.tgz#0bdc3a6adc873d2f4e0c4bac285df91b64fc7b93"
integrity sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA==
lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0, lodash@~4.17.10:
version "4.17.11" version "4.17.11"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
...@@ -4956,13 +4983,14 @@ neo-async@^2.5.0: ...@@ -4956,13 +4983,14 @@ neo-async@^2.5.0:
version "2.6.0" version "2.6.0"
resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835"
nerv-devtools@^1.4.3: nerv-devtools@^1.4.4:
version "1.4.3" version "1.4.4"
resolved "https://registry.yarnpkg.com/nerv-devtools/-/nerv-devtools-1.4.3.tgz#b05cf54a9d9313c0831b10cf9db04254d60d9c3b" resolved "https://registry.yarnpkg.com/nerv-devtools/-/nerv-devtools-1.4.4.tgz#e558dd7b8049ae2292da437d25d8e8f570b784fb"
integrity sha512-76moXLtzneBe4FN7TOkNVeZzf/HRCRZ/ur8nqdJEhwywPWU190jmQrBwLPfGLf+vdb4qwe1j33+BWzAI+7Bc5w==
dependencies: dependencies:
nerv-shared "1.4.0" nerv-shared "1.4.0"
nerv-utils "1.4.3" nerv-utils "1.4.3"
nervjs "1.4.3" nervjs "1.4.4"
nerv-shared@1.4.0: nerv-shared@1.4.0:
version "1.4.0" version "1.4.0"
...@@ -4972,9 +5000,10 @@ nerv-utils@1.4.3: ...@@ -4972,9 +5000,10 @@ nerv-utils@1.4.3:
version "1.4.3" version "1.4.3"
resolved "https://registry.yarnpkg.com/nerv-utils/-/nerv-utils-1.4.3.tgz#5a23d109147f56f478beed24794ff942fe4e4927" resolved "https://registry.yarnpkg.com/nerv-utils/-/nerv-utils-1.4.3.tgz#5a23d109147f56f478beed24794ff942fe4e4927"
nervjs@1.4.3, nervjs@^1.4.3: nervjs@1.4.4, nervjs@^1.4.4:
version "1.4.3" version "1.4.4"
resolved "https://registry.yarnpkg.com/nervjs/-/nervjs-1.4.3.tgz#8ef7d610f6400fb81e7ca41f880612a62416a20b" resolved "https://registry.yarnpkg.com/nervjs/-/nervjs-1.4.4.tgz#a843f0a5b846707021a44490c361c8440e99027f"
integrity sha512-NlBOF3hxD5y4wY2tM8CSM6zfVCabxlKQ/ExI7k+AZquxNLita21icqaVEpr0CaDu1ZXbe/0uhvkY3E0hFmUW5w==
dependencies: dependencies:
nerv-shared "1.4.0" nerv-shared "1.4.0"
nerv-utils "1.4.3" nerv-utils "1.4.3"
...@@ -5845,9 +5874,10 @@ postcss-modules-values@^1.3.0: ...@@ -5845,9 +5874,10 @@ postcss-modules-values@^1.3.0:
icss-replace-symbols "^1.1.0" icss-replace-symbols "^1.1.0"
postcss "^6.0.1" postcss "^6.0.1"
postcss-plugin-constparse@1.3.4: postcss-plugin-constparse@1.3.14:
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/postcss-plugin-constparse/-/postcss-plugin-constparse-1.3.4.tgz#50a2e48eadd582f3b13f846da8fd3a99d9f7d208" resolved "https://registry.yarnpkg.com/postcss-plugin-constparse/-/postcss-plugin-constparse-1.3.14.tgz#d175a54c1abbc8817dc22ea6c6f9fd6974b63524"
integrity sha512-LS6KI/Sc2qFXqZ6//idro1xaQsCLHcZwfkqOuz9SdYsBjC+vduvvEl9eZMa91a45LeTWd2gguQaeqNib6kCX6A==
dependencies: dependencies:
postcss "^6.0.22" postcss "^6.0.22"
...@@ -5858,9 +5888,10 @@ postcss-pxtorem@^4.0.1: ...@@ -5858,9 +5888,10 @@ postcss-pxtorem@^4.0.1:
object-assign "^4.1.0" object-assign "^4.1.0"
postcss "^5.2.10" postcss "^5.2.10"
postcss-pxtransform@1.3.4: postcss-pxtransform@1.3.14:
version "1.3.4" version "1.3.14"
resolved "https://registry.yarnpkg.com/postcss-pxtransform/-/postcss-pxtransform-1.3.4.tgz#caeb62008078f3e227f8fb8229725aad8abfec34" resolved "https://registry.yarnpkg.com/postcss-pxtransform/-/postcss-pxtransform-1.3.14.tgz#1abc31ad95e2f2995ef0a6e38e3accde19e8f2de"
integrity sha512-9EvA5J7vCjqv28uJbGhc6eWfpi/eoy6Er7Wkt8pA9GcjI+8ITFBlO/UrT6Fud2ASfBXo1KrKoEhyItwQ6TVAmQ==
dependencies: dependencies:
postcss "^6.0.16" postcss "^6.0.16"
postcss-pxtorem "^4.0.1" postcss-pxtorem "^4.0.1"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment