OrderCard.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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 { 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. <Text>商家{getWordsStr(merchantStatus)}</Text>
  75. <Layout style={styles.orderItem1}>
  76. <Text category='c2'>{id}</Text>
  77. <Text category='c2'>
  78. {orderInfo2}:{orderTime}
  79. </Text>
  80. </Layout>
  81. <Layout style={styles.orderItem1}>
  82. <Text category='h6'>{user.nickname}</Text>
  83. <Text category='h6'>{getWordsStr(payMethod)}</Text>
  84. </Layout>
  85. <Layout style={styles.orderItem1}>
  86. <Text category='c2'>{user.phone}</Text>
  87. <Button
  88. appearance='outline'
  89. onPress={() => {
  90. Linking.openURL("tel:+" + user.phone);
  91. }}
  92. >
  93. {orderInfo3}
  94. </Button>
  95. </Layout>
  96. <Layout style={styles.orderItem2}>
  97. <Text category='c2' style={styles.leftText}>
  98. {orderInfo4}
  99. </Text>
  100. <Text category='h1'>{userAddress}</Text>
  101. </Layout>
  102. <Layout style={styles.orderItem2}>
  103. <Text category='c2' style={styles.leftText}>
  104. {orderInfo5}
  105. </Text>
  106. <Layout style={styles.lay}>
  107. <MenuGroup
  108. appearance='orderProduct'
  109. title={() => MenuTitle("圣诞节副科", "¥9999.99")}
  110. style={styles.menuGroup}
  111. >
  112. <MenuItem
  113. disabled={true}
  114. style={styles.menuItem}
  115. title={lsitMenu}
  116. />
  117. </MenuGroup>
  118. </Layout>
  119. </Layout>
  120. <Layout style={styles.orderItem2}>
  121. <Text category='c2' style={styles.leftText}>
  122. {orderInfo6}:
  123. </Text>
  124. <Text category='h1'>多放辣椒</Text>
  125. </Layout>
  126. </Card>
  127. );
  128. }
  129. const MenuTitle = (title, sub, num, index) => (
  130. <Layout style={styles.menuTitle} key={index || 0}>
  131. <Text category='h1' style={styles.sub}>
  132. {title}
  133. </Text>
  134. {num && (
  135. <Text category='h1' style={[styles.sub, styles.center]}>
  136. {num}
  137. </Text>
  138. )}
  139. <Text category='h1' style={[styles.sub, styles.right]}>
  140. {sub}
  141. </Text>
  142. </Layout>
  143. );
  144. const lsitMenu = () => {
  145. return (
  146. <Layout style={styles.menuItem}>
  147. {[1, 2].map((item, index) => {
  148. return MenuTitle("圣诞节副科" + item, "¥9999.99", 2, index + 1);
  149. })}
  150. </Layout>
  151. );
  152. };
  153. const styles = StyleSheet.create({
  154. orderItem1: {
  155. justifyContent: "space-between",
  156. flexDirection: "row",
  157. marginBottom: 10,
  158. },
  159. orderItem2: {
  160. alignItems: "flex-start",
  161. flexDirection: "row",
  162. marginBottom: 15,
  163. },
  164. leftText: {
  165. flexShrink: 0,
  166. marginRight: 8,
  167. minWidth: 60,
  168. },
  169. menuGroup: {
  170. padding: 0,
  171. margin: 0,
  172. },
  173. lay: {
  174. flex: 1,
  175. },
  176. menuTitle: {
  177. flexDirection: "row",
  178. flex: 1,
  179. },
  180. footerContainer: {
  181. flexDirection: "row",
  182. justifyContent: "flex-end",
  183. },
  184. footerControl: {
  185. width: 112,
  186. marginLeft: 5,
  187. },
  188. sub: {
  189. flex: 1,
  190. flexShrink: 0,
  191. },
  192. menuItem: {
  193. flex: 1,
  194. // paddingHorizontal: 0,
  195. // paddingVertical: 0,
  196. // paddingLeft: 0,
  197. // marginTop: 5,
  198. // marginHorizontal: 5,
  199. },
  200. right: {
  201. textAlign: "right",
  202. },
  203. center: {
  204. textAlign: "center",
  205. },
  206. });