index.jsx 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281
  1. import React from 'react';
  2. import ajax from 'jquery/src/ajax/xhr.js';
  3. import $ from 'jquery/src/ajax';
  4. import moment from 'moment';
  5. import '@/manageCenter/financialManage/distribute/public.less';
  6. import { Button, Input, Spin, Table,Select, Switch, message, DatePicker,Upload} from 'antd';
  7. import {getNewOrderType,beforeUploadFile} from '@/tools';
  8. import {newOrderType} from '@/dataDic';
  9. import { exportExcel } from 'xlsx-oc';
  10. const Order = React.createClass({
  11. departmentList() {
  12. this.setState({
  13. loading: true
  14. });
  15. $.ajax({
  16. method: "post",
  17. dataType: "json",
  18. crossDomain: false,
  19. url: globalConfig.context + "/api/admin/organization/listOrganizationManagement",
  20. data: {
  21. pageNo:1,
  22. pageSize:999,
  23. type:1
  24. },
  25. success: function(data) {
  26. let thedata = data.data.list;
  27. let theArr=[];
  28. if(!thedata) {
  29. if(data.error && data.error.length) {
  30. message.warning(data.error[0].message);
  31. };
  32. thedata = {};
  33. }else{
  34. thedata.map(function(item,index){
  35. theArr.push({
  36. key:index,
  37. name:item.name,
  38. id:item.id,
  39. })
  40. })
  41. }
  42. this.setState({
  43. departmentArr:theArr,
  44. })
  45. }.bind(this),
  46. }).always(function() {
  47. this.setState({
  48. loading: false
  49. });
  50. }.bind(this));
  51. },
  52. loadData(pageNo) {
  53. this.state.data = [];
  54. this.setState({
  55. page:pageNo,
  56. loading: true
  57. });
  58. $.ajax({
  59. method: "post",
  60. dataType: "json",
  61. crossDomain: false,
  62. url: globalConfig.context + "/api/admin/order/listAllSettlement",
  63. data: {
  64. pageNo: pageNo || 1,
  65. pageSize:999,
  66. signName: this.state.signName,//客户名称
  67. departmentId:this.state.departmenttList,
  68. orderType:this.state.orderType,
  69. startDate: this.state.releaseDate[0],
  70. endDate: this.state.releaseDate[1],
  71. },
  72. success: function (data) {
  73. let theArr = [];
  74. if (!data.data || !data.data.list) {
  75. if (data.error && data.error.length) {
  76. message.warning(data.error[0].message);
  77. };
  78. } else {
  79. for (let i = 0; i < data.data.list.length; i++) {
  80. let thisdata = data.data.list[i];
  81. theArr.push({
  82. key: i+1,
  83. orderNo: thisdata.orderNo,
  84. department:thisdata.department,
  85. orderType:thisdata.orderType,
  86. signName:thisdata.signName,
  87. signNumber:thisdata.signNumber,
  88. signTotalAmount:thisdata.signTotalAmount
  89. });
  90. };
  91. }
  92. this.state.pagination.current = data.data.pageNo;
  93. this.state.pagination.total = data.data.totalCount;
  94. if(data.data&&data.data.list&&!data.data.list.length){
  95. this.state.pagination.current=0
  96. this.state.pagination.total=0
  97. }
  98. this.setState({
  99. dataSource: theArr,
  100. pagination: this.state.pagination
  101. });
  102. }.bind(this),
  103. }).always(function () {
  104. this.setState({
  105. loading: false
  106. });
  107. }.bind(this));
  108. },
  109. getInitialState() {
  110. return {
  111. searchMore: true,
  112. releaseDate: [],
  113. RowData:{},
  114. selectedRowKeys: [],
  115. selectedRows: [],
  116. proofData:{},
  117. loading: false,
  118. pagination: {
  119. defaultCurrent: 1,
  120. defaultPageSize: 10,
  121. showQuickJumper: true,
  122. pageSize: 10,
  123. onChange: function (page) {
  124. this.loadData(page);
  125. }.bind(this),
  126. showTotal: function (total) {
  127. return '共' + total + '条数据';
  128. }
  129. },
  130. columns: [
  131. {
  132. title: '序号',
  133. dataIndex: 'key',
  134. key: 'key',
  135. width:100
  136. },
  137. {
  138. title: '订单部门',
  139. dataIndex: 'department',
  140. key: 'department',
  141. width:200
  142. },
  143. {
  144. title: '订单类型',
  145. dataIndex: 'orderType',
  146. key: 'orderType',
  147. render:text=>{
  148. return getNewOrderType(text)
  149. },
  150. width:200
  151. },
  152. {
  153. title: '签单人员',
  154. dataIndex: 'signName',
  155. key: 'signName',
  156. width:200
  157. },
  158. {
  159. title: '签单数量',
  160. dataIndex: 'signNumber',
  161. key: 'signNumber',
  162. width:200
  163. },
  164. {
  165. title: '累计签单金额(万)',
  166. dataIndex: 'signTotalAmount',
  167. key: 'signTotalAmount',
  168. width:200
  169. },
  170. ],
  171. dataSource: [],
  172. searchTime: [,]
  173. }
  174. },
  175. componentWillMount() {
  176. this.loadData();
  177. this.departmentList();
  178. },
  179. search() {
  180. this.loadData();
  181. },
  182. reset() {
  183. this.state.signName='';
  184. this.state.releaseDate = [];
  185. this.state.departmenttList=undefined;
  186. this.state.orderType='';
  187. this.loadData();
  188. },
  189. searchSwitch() {
  190. this.setState({
  191. searchMore: !this.state.searchMore
  192. });
  193. },
  194. //导出exec
  195. exec(){
  196. var _headers = [{ k: 'key', v: '序号' }, { k: 'department', v: '订单部门' },
  197. { k: 'orderType', v: '订单类型' }, { k: 'signName', v: '签单人员' },{k:'signNumber',v:'签单数量'},{k:'signTotalAmount',v:'累计签单金额'}]
  198. exportExcel(_headers,this.state.dataSource);
  199. },
  200. render() {
  201. const { RangePicker } = DatePicker;
  202. let departmentArr = this.state.departmentArr || [];
  203. return ( <div className="user-content">
  204. <div className="content-title">
  205. <span>订单统计报表</span>
  206. </div>
  207. <div className="user-search">
  208. <Select placeholder="部门机构"
  209. style={{ width: 150 ,marginRight:10}}
  210. value={this.state.departmenttList}
  211. onChange={(e) => { this.setState({ departmenttList: e }) }}>
  212. {
  213. departmentArr.map(function (item) {
  214. return <Select.Option key={item.id} >{item.name}</Select.Option>
  215. })
  216. }
  217. </Select>
  218. <Input placeholder="签单人员"
  219. value={this.state.signName}
  220. onChange={(e) => { this.setState({ signName: e.target.value }); }} />
  221. <Select placeholder="订单类型"
  222. style={{ width: 150 ,marginRight:10}}
  223. value={this.state.orderType}
  224. onChange={(e) => { this.setState({ orderType: e }) }}>
  225. {
  226. newOrderType.map(function (item) {
  227. return <Select.Option key={item.value} >{item.key}</Select.Option>
  228. })
  229. }
  230. </Select>
  231. <Button type="primary" onClick={this.search}>搜索</Button>
  232. <Button onClick={this.reset}>重置</Button>
  233. <div style={{float:'right'}}>
  234. <Upload
  235. action={globalConfig.context + "/api/admin/achievement/uploadTemplate"}
  236. data={{ 'sign': 'achievement_template' }}
  237. beforeUpload={beforeUploadFile}
  238. showUploadList={false}
  239. onChange={(info) => {
  240. if (info.file.status !== 'uploading') {
  241. }
  242. if (info.file.status === 'done') {
  243. if (!info.file.response.error.length) {
  244. message.success(`${info.file.name} 文件上传成功!`);
  245. } else {
  246. message.warning(info.file.response.error[0].message);
  247. return;
  248. };
  249. } else if (info.file.status === 'error') {
  250. message.error(`${info.file.name} 文件上传失败。`);
  251. };
  252. }} >
  253. <Button>导入年度销售数据</Button>
  254. </Upload>
  255. <Button type="primary" onClick={this.exec} style={{margin:'0 10px'}}>导出到exec</Button>
  256. </div>
  257. <span>更多搜索<Switch defaultChecked={false} onChange={this.searchSwitch.bind(this)} /></span>
  258. <div className="search-more" style={this.state.searchMore ? { display: 'none' } : {}}>
  259. <span>起止时间 :</span>
  260. <RangePicker
  261. value={[this.state.releaseDate[0] ? moment(this.state.releaseDate[0]) : null,
  262. this.state.releaseDate[1] ? moment(this.state.releaseDate[1]) : null]}
  263. onChange={(data, dataString) => { this.setState({ releaseDate: dataString }); }} />
  264. </div>
  265. </div>
  266. <div className="patent-table" id="table">
  267. <Spin spinning={this.state.loading}>
  268. <Table columns={this.state.columns}
  269. dataSource={this.state.dataSource}
  270. scroll={{y:500}}
  271. pagination={false}
  272. />
  273. </Spin>
  274. </div>
  275. </div> )
  276. }
  277. })
  278. export default Order;