OrderCard.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. import React from "react";
  2. import { StyleSheet, Dimensions } from "react-native";
  3. import {
  4. Modal,
  5. Card,
  6. Text,
  7. Button,
  8. Layout,
  9. Avatar,
  10. MenuGroup,
  11. MenuItem,
  12. Menu,
  13. } from "@ui-kitten/components";
  14. import { Linking } from "expo";
  15. import { useModel } from "flooks";
  16. export default function OrderCard(props) {
  17. const {
  18. orderInfo2,
  19. orderInfo3,
  20. orderInfo4,
  21. orderInfo5,
  22. orderInfo6,
  23. getWordsStr,
  24. orderButton1,
  25. orderButton2,
  26. overTips,
  27. } = useModel("wordsModel");
  28. const { showDialog } = useModel("dialogModel");
  29. const { receivedOrder } = useModel("orderInfoModel");
  30. const { info, updateInfo } = props;
  31. const {
  32. id,
  33. payMethod,
  34. orderTime,
  35. userAddress,
  36. merchantStatus,
  37. user,
  38. riderStatus,
  39. } = info || {};
  40. const Footer = (props) => {
  41. if (riderStatus) {
  42. return (
  43. <Layout
  44. {...props}
  45. style={[props.style]}
  46. >
  47. <Layout style={styles.orderItem1}>
  48. <Text category='c2'>骑手:胖齐齐</Text>
  49. <Button
  50. appearance='outline'
  51. onPress={() => {
  52. Linking.openURL("tel:+" + user.phone);
  53. }}
  54. >
  55. 联系骑手
  56. </Button>
  57. </Layout>
  58. <Layout style={styles.orderItem1}>
  59. <Text category='c2'>
  60. 预计送达时间:2019-12-31 13:17
  61. </Text>
  62. </Layout>
  63. {riderStatus == "CARRY_OUT" && (
  64. <Layout style={styles.orderItem1}>
  65. <Text category='c2'>
  66. 实际送达时间:2019-12-31 13:17
  67. </Text>
  68. </Layout>
  69. )}
  70. </Layout>
  71. );
  72. } else if (merchantStatus == "NOT_RECEIVED") {
  73. return (
  74. <Layout
  75. {...props}
  76. style={[props.style, styles.footerContainer]}
  77. >
  78. <Button
  79. style={styles.footerControl}
  80. appearance='outline'
  81. onPress={() => {
  82. showDialog({
  83. bodyText: overTips,
  84. status: "danger",
  85. cancelable: true,
  86. confirmCallback: () => {
  87. receivedOrder(id, false).then((res) => {
  88. updateInfo(res);
  89. });
  90. },
  91. });
  92. }}
  93. >
  94. {orderButton1}
  95. </Button>
  96. <Button
  97. style={styles.footerControl}
  98. onPress={() => {
  99. receivedOrder(id, true).then((res) => {
  100. updateInfo(res);
  101. });
  102. }}
  103. appearance='outline'
  104. >
  105. {orderButton2}
  106. </Button>
  107. </Layout>
  108. );
  109. } else {
  110. return null;
  111. }
  112. };
  113. return (
  114. <Card
  115. appearance='orderCard'
  116. disabled={true}
  117. style={[props.style]}
  118. footer={Footer}
  119. >
  120. {riderStatus ? (
  121. <Text>骑手{getWordsStr(riderStatus)}</Text>
  122. ) : (
  123. <Text>商家{getWordsStr(merchantStatus)}</Text>
  124. )}
  125. <Layout style={styles.orderItem1}>
  126. <Text category='c2'>{id}</Text>
  127. <Text category='c2'>
  128. {orderInfo2}:{orderTime}
  129. </Text>
  130. </Layout>
  131. <Layout style={styles.orderItem1}>
  132. <Text category='h6'>{user.nickname}</Text>
  133. <Text category='h6'>{getWordsStr(payMethod)}</Text>
  134. </Layout>
  135. <Layout style={styles.orderItem1}>
  136. <Text category='c2'>{user.phone}</Text>
  137. <Button
  138. appearance='outline'
  139. onPress={() => {
  140. Linking.openURL("tel:+" + user.phone);
  141. }}
  142. >
  143. {orderInfo3}
  144. </Button>
  145. </Layout>
  146. <Layout style={styles.orderItem2}>
  147. <Text category='c2' style={styles.leftText}>
  148. {orderInfo4}
  149. </Text>
  150. <Text category='h1'>{userAddress}</Text>
  151. </Layout>
  152. <Layout style={styles.orderItem2}>
  153. <Text category='c2' style={styles.leftText}>
  154. {orderInfo5}
  155. </Text>
  156. <Layout style={styles.lay}>
  157. <MenuGroup
  158. appearance='orderProduct'
  159. title={() => MenuTitle("圣诞节副科", "¥9999.99")}
  160. style={styles.menuGroup}
  161. >
  162. <MenuItem
  163. disabled={true}
  164. style={styles.menuItem}
  165. title={lsitMenu}
  166. />
  167. </MenuGroup>
  168. </Layout>
  169. </Layout>
  170. <Layout style={styles.orderItem2}>
  171. <Text category='c2' style={styles.leftText}>
  172. {orderInfo6}:
  173. </Text>
  174. <Text category='h1'>多放辣椒</Text>
  175. </Layout>
  176. </Card>
  177. );
  178. }
  179. const MenuTitle = (title, sub, num, index) => (
  180. <Layout style={styles.menuTitle} key={index || 0}>
  181. <Text category='h1' style={styles.sub}>
  182. {title}
  183. </Text>
  184. {num && (
  185. <Text category='h1' style={[styles.sub, styles.center]}>
  186. {num}
  187. </Text>
  188. )}
  189. <Text category='h1' style={[styles.sub, styles.right]}>
  190. {sub}
  191. </Text>
  192. </Layout>
  193. );
  194. const lsitMenu = () => {
  195. return (
  196. <Layout style={styles.menuItem}>
  197. {[1, 2].map((item, index) => {
  198. return MenuTitle("圣诞节副科" + item, "¥9999.99", 2, index + 1);
  199. })}
  200. </Layout>
  201. );
  202. };
  203. const styles = StyleSheet.create({
  204. orderItem1: {
  205. justifyContent: "space-between",
  206. flexDirection: "row",
  207. marginBottom: 10,
  208. },
  209. orderItem2: {
  210. alignItems: "flex-start",
  211. flexDirection: "row",
  212. marginBottom: 15,
  213. },
  214. leftText: {
  215. flexShrink: 0,
  216. marginRight: 8,
  217. minWidth: 60,
  218. },
  219. menuGroup: {
  220. padding: 0,
  221. margin: 0,
  222. },
  223. lay: {
  224. flex: 1,
  225. },
  226. menuTitle: {
  227. flexDirection: "row",
  228. flex: 1,
  229. },
  230. footerContainer: {
  231. flexDirection: "row",
  232. justifyContent: "flex-end",
  233. },
  234. footerControl: {
  235. width: 112,
  236. marginLeft: 5,
  237. },
  238. sub: {
  239. flex: 1,
  240. flexShrink: 0,
  241. },
  242. menuItem: {
  243. flex: 1,
  244. // paddingHorizontal: 0,
  245. // paddingVertical: 0,
  246. // paddingLeft: 0,
  247. // marginTop: 5,
  248. // marginHorizontal: 5,
  249. },
  250. right: {
  251. textAlign: "right",
  252. },
  253. center: {
  254. textAlign: "center",
  255. },
  256. });