Home.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. import React, {Component} from 'react';
  2. import {StyleSheet, View, Text, DeviceEventEmitter, ScrollView,TouchableOpacity, Dimensions} from 'react-native';
  3. import {Button} from '@ant-design/react-native';
  4. import ReadUHF from "../../utils/ReadUHF";
  5. import Barcode from "react-native-barcode-builder";
  6. import SyncStorage from 'sync-storage';
  7. let screenW = Dimensions.get('window').width;
  8. class DesktopHome extends Component {
  9. constructor(props) {
  10. super(props);
  11. this.state = {
  12. data: [],
  13. userData: [],
  14. error: 0,
  15. isStart: true,
  16. timerID: [],
  17. };
  18. }
  19. static navigationOptions = ({navigation}) => {
  20. return {
  21. headerRight: (
  22. <TouchableOpacity onPress={() => navigation.navigate("setPower")}>
  23. <Text style={{
  24. // fontSize: 22,
  25. color: '#fff',
  26. marginRight: 10
  27. }}>设置</Text>
  28. </TouchableOpacity>
  29. )
  30. };
  31. };
  32. componentDidMount() {
  33. ReadUHF.changeFlag(0)
  34. DeviceEventEmitter.addListener('MsgFromAndroid', this._addCode);
  35. DeviceEventEmitter.addListener('onKeyDown', this.onKeyDown);
  36. DeviceEventEmitter.addListener('pushPower', this.setPower);
  37. }
  38. componentWillUnmount() {
  39. ReadUHF.stopRead()
  40. }
  41. _addCode = (item) => {
  42. const str = JSON.parse(item)
  43. // 防止重复扫描
  44. let {data, userData, error} = this.state;
  45. const product_index = userData.indexOf(str['userData'])
  46. if (product_index < 0) {
  47. userData.push(str['userData'])
  48. data.unshift(str)
  49. if (str['error']) {
  50. error += 1
  51. }
  52. this.setState({data, userData, error})
  53. }
  54. }
  55. _start = () => {
  56. let {isStart} = this.state;
  57. ReadUHF.doRead()
  58. this.setState({isStart: !isStart})
  59. }
  60. _clear = () => {
  61. this.setState({userData: [], data: [], error: 0})
  62. }
  63. onKeyDown = () => {
  64. let {isStart} = this.state;
  65. this.setState({isStart: !isStart})
  66. }
  67. setPower = (power) => {
  68. SyncStorage.set('power', parseInt(power));
  69. }
  70. dianYaRender = (item, index) => {
  71. const assetID = item.assetID.slice(7, 21)
  72. const releaseDates = item.releaseDate.split('-')
  73. const releaseDate = releaseDates[0] + "年" + releaseDates[1] + "月"
  74. return (
  75. <View
  76. key={index}
  77. style={styles.mainView}
  78. >
  79. <Text style={styles.textColor}>计量{item.kind}</Text>
  80. <View style={styles.betweenView}>
  81. <Text style={styles.textColor3}>型号:{item.model}</Text>
  82. <View style={styles.centerWidth}>
  83. <Text style={styles.textColor3}>电压等级:{item.voltageLevel}</Text>
  84. </View>
  85. <Text style={styles.textColor3}>绕组数量:{item.secondWindingCount}</Text>
  86. </View>
  87. <View style={styles.betweenView}>
  88. <Text style={styles.textColor4}>二次电压</Text>
  89. <View style={styles.centerWidth}>
  90. <Text style={styles.textColor4}>准确等级</Text>
  91. </View>
  92. <View style={styles.rightWidth}>
  93. <Text style={styles.textColor4}>功率因数</Text>
  94. </View>
  95. <Text style={styles.textColor4}>生产日期</Text>
  96. </View>
  97. <View style={styles.betweenView}>
  98. <View style={styles.centerView}>
  99. <Text style={styles.textColor4}>{item.secondVoltage}</Text>
  100. </View>
  101. <View style={styles.centerWidth}>
  102. <Text style={styles.textColor4}>{item.accuracy}</Text>
  103. </View>
  104. <View style={styles.rightWidth}>
  105. <Text style={styles.textColor4}>{item.powerFactor}</Text>
  106. </View>
  107. <View style={styles.centerView}>
  108. <Text style={styles.textColor4}>{releaseDate}</Text>
  109. </View>
  110. </View>
  111. <View style={styles.betweenView}>
  112. <Text style={styles.textColor3}>安装场所:{item.place}</Text>
  113. <View style={styles.centerWidth}>
  114. <Text style={styles.textColor3}>额定负荷:{item.ratedLoad}</Text>
  115. </View>
  116. <Text style={styles.textColor3}>电压因数:{item.voltageFactor}</Text>
  117. </View>
  118. <View style={styles.betweenView}>
  119. <View style={styles.centerView}>
  120. <Text style={styles.textColor3}>{item.manufacturer}</Text>
  121. </View>
  122. <View style={{
  123. width: (screenW - 10) / 3 * 2,
  124. borderLeftWidth: 0.5,
  125. borderLeftColor: '#7b7b7b',
  126. }}>
  127. <View style={{
  128. flexDirection: 'row',
  129. marginHorizontal: 3,
  130. }}>
  131. <View style={{
  132. flex: 1,
  133. }}>
  134. <Text style={[styles.textColor, {textAlign: 'left'}]}>{item.districtText}</Text>
  135. </View>
  136. <Text style={[styles.textColor, {textAlign: 'right', paddingRight: 5}]}>NO.{assetID}</Text>
  137. </View>
  138. <View style={{
  139. marginHorizontal: 5,
  140. }}>
  141. <Barcode value={item.assetID} format="CODE128" height={35} width={1.1}/>
  142. <Text style={styles.textColor}>{item.assetID}</Text>
  143. </View>
  144. </View>
  145. </View>
  146. </View>
  147. )
  148. }
  149. dianLiuRender = (item, index) => {
  150. const assetID = item.assetID.slice(7, 21)
  151. const releaseDates = item.releaseDate.split('-')
  152. const releaseDate = releaseDates[0] + "年" + releaseDates[1] + "月"
  153. return (
  154. <View
  155. key={index}
  156. style={styles.mainView}
  157. >
  158. <Text style={styles.textColor}>计量{item.kind}</Text>
  159. <View style={styles.betweenView}>
  160. <Text style={styles.textColor3}>型号:{item.model}</Text>
  161. <View style={styles.centerWidth}>
  162. <Text style={styles.textColor3}>电压等级:{item.voltageLevel}</Text>
  163. </View>
  164. <Text style={styles.textColor3}>绕组数量:{item.secondWindingCount}</Text>
  165. </View>
  166. <View style={styles.betweenView}>
  167. <Text style={styles.textColor4}>一次电流</Text>
  168. <View style={styles.centerWidth}>
  169. <Text style={styles.textColor4}>二次电流</Text>
  170. </View>
  171. <View style={styles.rightWidth}>
  172. <Text style={styles.textColor4}>功率因数</Text>
  173. </View>
  174. <Text style={styles.textColor4}>生产日期</Text>
  175. </View>
  176. <View style={styles.betweenView}>
  177. <View style={styles.centerView}>
  178. <Text style={styles.textColor4}>{item.firstCurrent}</Text>
  179. </View>
  180. <View style={styles.centerWidth}>
  181. <Text style={styles.textColor4}>{item.senondCurrent}</Text>
  182. </View>
  183. <View style={styles.rightWidth}>
  184. <Text style={styles.textColor4}>{item.powerFactor}</Text>
  185. </View>
  186. <View style={styles.centerView}>
  187. <Text style={styles.textColor4}>{releaseDate}</Text>
  188. </View>
  189. </View>
  190. <View style={styles.betweenView}>
  191. <Text style={styles.textColor3}>安装场所:{item.place}</Text>
  192. <View style={styles.centerWidth}>
  193. <Text style={styles.textColor3}>额定负荷:{item.ratedLoad}</Text>
  194. </View>
  195. <Text style={styles.textColor3}>准确等级:{item.accuracy}</Text>
  196. </View>
  197. <View style={styles.betweenView}>
  198. <View style={styles.centerView}>
  199. <Text style={styles.textColor3}>{item.manufacturer}</Text>
  200. </View>
  201. <View style={{
  202. width: (screenW - 10) / 3 * 2,
  203. borderLeftWidth: 0.5,
  204. borderLeftColor: '#7b7b7b',
  205. }}>
  206. <View style={{
  207. flexDirection: 'row',
  208. marginHorizontal: 3,
  209. }}>
  210. <View style={{
  211. flex: 1,
  212. }}>
  213. <Text style={[styles.textColor, {textAlign: 'left'}]}>{item.districtText}</Text>
  214. </View>
  215. <Text style={[styles.textColor, {textAlign: 'right', paddingRight: 5}]}>NO.{assetID}</Text>
  216. </View>
  217. <View style={{
  218. marginHorizontal: 5,
  219. }}>
  220. <Barcode value={item.assetID} format="CODE128" height={35} width={1.1}/>
  221. <Text style={styles.textColor}>{item.assetID}</Text>
  222. </View>
  223. </View>
  224. </View>
  225. </View>
  226. )
  227. }
  228. errorRender = (item, index) => {
  229. return (
  230. <View
  231. key={index}
  232. style={[styles.mainView, {padding: 10}]}
  233. >
  234. <Text style={{color: 'red'}}>{item.error_msg}</Text>
  235. </View>
  236. )
  237. }
  238. render() {
  239. let {isStart} = this.state;
  240. const start_text = isStart ? '开始识别' : '停止识别'
  241. return (
  242. <View style={styles.container}>
  243. <ScrollView style={styles.container}>
  244. {
  245. this.state.data.map((item, index) => {
  246. if (item.error) {
  247. return this.errorRender(item, index)
  248. }
  249. else if (item.kind.indexOf('电压') > -1) {
  250. return this.dianYaRender(item, index)
  251. }
  252. else if (item.kind.indexOf('电流') > -1) {
  253. return this.dianLiuRender(item, index)
  254. }
  255. })
  256. }
  257. </ScrollView>
  258. <Text
  259. style={{marginLeft: 10, color: '#f77b22'}}>合计:{this.state.data.length} 失败:{this.state.error}</Text>
  260. <View style={{flexDirection: 'row'}}>
  261. <Button onPress={() => this._start()}
  262. type="primary"
  263. style={[styles.button, {
  264. backgroundColor: isStart ? '#0099FF' : 'red',
  265. width: '65%'
  266. }]}
  267. >
  268. <Text style={{color: '#fff'}}>
  269. {start_text}
  270. </Text>
  271. </Button>
  272. <Button onPress={() => this._clear()}
  273. type="warning"
  274. style={{
  275. width: '25%',
  276. borderRadius: 5,
  277. marginHorizontal: 10,
  278. marginTop: 5,
  279. marginBottom: 2,
  280. borderWidth: 0,
  281. backgroundColor: "#de7642"
  282. }}
  283. >
  284. <Text style={{color: '#fff'}}>
  285. 清除
  286. </Text>
  287. </Button>
  288. </View>
  289. </View>
  290. );
  291. }
  292. }
  293. const styles = StyleSheet.create({
  294. container: {
  295. flex: 1
  296. },
  297. button: {
  298. borderRadius: 5,
  299. marginHorizontal: 10,
  300. marginBottom: 2,
  301. marginTop: 5,
  302. borderWidth: 0,
  303. backgroundColor: "#2b90ea"
  304. },
  305. textColor: {
  306. color: '#333',
  307. textAlign: 'center',
  308. },
  309. textColor3: {
  310. color: '#333',
  311. textAlign: 'center',
  312. width: (screenW - 9) / 3,
  313. },
  314. textColor4: {
  315. color: '#333',
  316. textAlign: 'center',
  317. width: (screenW - 8) / 4,
  318. },
  319. textColor2: {
  320. color: '#333',
  321. textAlign: 'center',
  322. width: (screenW - 10) / 2,
  323. },
  324. mainView: {
  325. margin: 5,
  326. borderWidth: 0.5,
  327. borderColor: '#7b7b7b',
  328. },
  329. betweenView: {
  330. flexDirection: 'row',
  331. justifyContent: 'space-between',
  332. borderTopWidth: 0.5,
  333. borderTopColor: '#7b7b7b',
  334. },
  335. centerWidth: {
  336. borderLeftWidth: 0.5,
  337. borderRightWidth: 0.5,
  338. borderLeftColor: '#7b7b7b',
  339. borderRightColor: '#7b7b7b',
  340. alignItems: 'center',
  341. flexDirection: 'row',
  342. },
  343. centerView: {
  344. alignItems: 'center',
  345. flexDirection: 'row',
  346. },
  347. rightWidth: {
  348. borderRightWidth: 0.5,
  349. borderRightColor: '#7b7b7b',
  350. alignItems: 'center',
  351. flexDirection: 'row',
  352. },
  353. })
  354. export default DesktopHome;