Home.js 13 KB

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