OrderCard.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  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 } = props;
  31. const { id, payMethod, orderTime, userAddress, merchantStatus, user } =
  32. info || {};
  33. const Footer = (props) => (
  34. <Layout {...props} style={[props.style, styles.footerContainer]}>
  35. <Button
  36. style={styles.footerControl}
  37. appearance='outline'
  38. onPress={() => {
  39. showDialog({
  40. bodyText: overTips,
  41. status: "danger",
  42. cancelable: true,
  43. confirmCallback: () => {
  44. receivedOrder(id, false).then((res) => {
  45. updateInfo(res);
  46. });
  47. },
  48. });
  49. }}
  50. >
  51. {orderButton1}
  52. </Button>
  53. <Button
  54. style={styles.footerControl}
  55. onPress={() => {
  56. receivedOrder(id, true).then((res) => {
  57. updateInfo(res);
  58. });
  59. }}
  60. appearance='outline'
  61. >
  62. {orderButton2}
  63. </Button>
  64. </Layout>
  65. );
  66. return (
  67. <Card
  68. appearance='orderCard'
  69. disabled={true}
  70. style={[props.style]}
  71. footer={Footer}
  72. >
  73. <Text>{getWordsStr(merchantStatus)}</Text>
  74. <Layout style={styles.orderItem1}>
  75. <Text category='c2'>{id}</Text>
  76. <Text category='c2'>
  77. {orderInfo2}:{orderTime}
  78. </Text>
  79. </Layout>
  80. <Layout style={styles.orderItem1}>
  81. <Text category='h6'>{user.nickname}</Text>
  82. <Text category='h6'>{getWordsStr(payMethod)}</Text>
  83. </Layout>
  84. <Layout style={styles.orderItem1}>
  85. <Text category='c2'>{user.phone}</Text>
  86. <Button
  87. appearance='outline'
  88. onPress={() => {
  89. Linking.openURL("tel:+" + user.phone);
  90. }}
  91. >
  92. {orderInfo3}
  93. </Button>
  94. </Layout>
  95. <Layout style={styles.orderItem2}>
  96. <Text category='c2' style={styles.leftText}>
  97. {orderInfo4}
  98. </Text>
  99. <Text category='h1'>{userAddress}</Text>
  100. </Layout>
  101. <Layout style={styles.orderItem2}>
  102. <Text category='c2' style={styles.leftText}>
  103. {orderInfo5}
  104. </Text>
  105. <Layout style={styles.lay}>
  106. <MenuGroup
  107. appearance='orderProduct'
  108. title={() => MenuTitle("圣诞节副科", "¥9999.99")}
  109. style={styles.menuGroup}
  110. >
  111. <MenuItem
  112. disabled={true}
  113. style={styles.menuItem}
  114. title={lsitMenu}
  115. />
  116. </MenuGroup>
  117. </Layout>
  118. </Layout>
  119. <Layout style={styles.orderItem2}>
  120. <Text category='c2' style={styles.leftText}>
  121. {orderInfo6}:多放辣椒
  122. </Text>
  123. </Layout>
  124. </Card>
  125. );
  126. }
  127. const MenuTitle = (title, sub, num, index) => (
  128. <Layout style={styles.menuTitle} key={index || 0}>
  129. <Text category='h1' style={styles.sub}>
  130. {title}
  131. </Text>
  132. {num && (
  133. <Text category='h1' style={[styles.sub, styles.center]}>
  134. {num}
  135. </Text>
  136. )}
  137. <Text category='h1' style={[styles.sub, styles.right]}>
  138. {sub}
  139. </Text>
  140. </Layout>
  141. );
  142. const lsitMenu = () => {
  143. return (
  144. <Layout style={styles.menuItem}>
  145. {[1, 2].map((item, index) => {
  146. return MenuTitle("圣诞节副科" + item, "¥9999.99", 2, index + 1);
  147. })}
  148. </Layout>
  149. );
  150. };
  151. const styles = StyleSheet.create({
  152. orderItem1: {
  153. justifyContent: "space-between",
  154. flexDirection: "row",
  155. marginBottom: 10,
  156. },
  157. orderItem2: {
  158. alignItems: "flex-start",
  159. flexDirection: "row",
  160. marginBottom: 15,
  161. },
  162. leftText: {
  163. flexShrink: 0,
  164. marginRight: 8,
  165. minWidth: 60,
  166. },
  167. menuGroup: {
  168. padding: 0,
  169. margin: 0,
  170. },
  171. lay: {
  172. flex: 1,
  173. },
  174. menuTitle: {
  175. flexDirection: "row",
  176. flex: 1,
  177. },
  178. footerContainer: {
  179. flexDirection: "row",
  180. justifyContent: "flex-end",
  181. },
  182. footerControl: {
  183. width: 112,
  184. marginLeft: 5,
  185. },
  186. sub: {
  187. flex: 1,
  188. flexShrink: 0,
  189. },
  190. menuItem: {
  191. flex: 1,
  192. // paddingHorizontal: 0,
  193. // paddingVertical: 0,
  194. // paddingLeft: 0,
  195. // marginTop: 5,
  196. // marginHorizontal: 5,
  197. },
  198. right: {
  199. textAlign: "right",
  200. },
  201. center: {
  202. textAlign: "center",
  203. },
  204. });