article_list_content.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. import { connect } from 'dva/index';
  2. import React, { Component, Fragment } from 'react';
  3. import { Form, Spin } from 'antd';
  4. import {
  5. sldIconBtn,
  6. failTip,
  7. sucTip,
  8. sldPopConfirm,
  9. dragSldTableColumn,
  10. sldHandlePaginationData,
  11. list_com_page_size_10,
  12. formItemLayoutModal,
  13. validatorNumbe,
  14. sldComLanguage,
  15. sldPopConfirmDiy,
  16. sldtbaleOpeBtnText,
  17. getTableNum,
  18. } from '@/utils/utils';
  19. import Link from 'umi/link';
  20. import global from '@/global.less';
  21. import StandardTable from '@/components/StandardTable';
  22. import SldModal from '@/components/SldModal/SldModal';
  23. import Search from '@/components/Search/Search';
  24. let pageSize = list_com_page_size_10;
  25. @connect(({ article, share }) => ({
  26. article, share,
  27. }))
  28. @Form.create()
  29. export default class ArticleListContent extends Component {
  30. constructor(props) {
  31. super(props);
  32. this.state = {
  33. scrollBarToTop: 0,//StandardTable滚动条是否返回顶部的标识,默认为0,不返回,逐渐加1
  34. data: {},
  35. submiting: false,//按钮loading
  36. loading: false,//按钮loading
  37. selectedRows: [],
  38. selectedRowKeys: [],//selectedRows的key
  39. modalVisible: false,
  40. title: '',
  41. type: 'add',//'add'新增 'edit'编辑
  42. params: { pageSize: pageSize },//搜索条件
  43. curData: {},//编辑的数据
  44. addData: [{
  45. type: 'input',
  46. label: `${sldComLanguage('文章名称')}`,//文章名称
  47. name: 'name',
  48. placeholder: `${sldComLanguage('请输入')}${sldComLanguage('文章名称')}`,//请输入文章名称
  49. initialValue: '',
  50. maxLength: 20,
  51. rules: [{
  52. required: true,
  53. whitespace: true,
  54. message: `${sldComLanguage('请输入')}${sldComLanguage('文章名称')}`,//请输入文章名称
  55. }],
  56. }, {
  57. type: 'inputnum',
  58. label: `${sldComLanguage('排序')}`,//排序
  59. name: 'sort',
  60. extra: `${sldComLanguage('请输入0~255的数字,值越小,显示越靠前')}`,
  61. placeholder: `${sldComLanguage('请输入')}${sldComLanguage('排序')}`,//请输入排序
  62. initialValue: '',
  63. rules: [{
  64. required: true,
  65. message: `${sldComLanguage('请输入')}${sldComLanguage('排序')}`,//请输入排序
  66. }, { validator: (rule, value, callback) => validatorNumbe(rule, value, callback) }],
  67. }],//modal框的数据
  68. search_data: [{
  69. type: 'input',
  70. label: `${sldComLanguage('文章标题')}`,//文章标题
  71. name: 'title',
  72. placeholder: `${sldComLanguage('请输入')}${sldComLanguage('文章标题')}`,//请输入文章标题
  73. },
  74. {
  75. type: 'input',
  76. label: `${sldComLanguage('文章内容')}`,//文章内容
  77. name: 'content',
  78. placeholder: `${sldComLanguage('请输入')}${sldComLanguage('文章内容')}`,//请输入文章内容
  79. },
  80. ],
  81. cur_parent_id: '',//上级文章id
  82. columns: [
  83. {
  84. title: '序号',
  85. dataIndex: 'articleId',
  86. align: 'center',
  87. width: 30,
  88. render: (text, record, index) => getTableNum(this.state.params, pageSize, index),
  89. },
  90. {
  91. title: `文章标题`,
  92. width: 150,
  93. align: 'center',
  94. dataIndex: 'title',
  95. },
  96. {
  97. title: `${sldComLanguage('所属分类')}`,//所属分类
  98. align: 'center',
  99. dataIndex: 'categoryName',
  100. width: 100,
  101. },
  102. {
  103. title: `${sldComLanguage('是否显示')}`,//是否显示
  104. dataIndex: 'stateValue',
  105. align: 'center',
  106. width: 80,
  107. }, {
  108. title: `${sldComLanguage('排序')}`,//排序
  109. dataIndex: 'sort',
  110. align: 'center',
  111. width: 80,
  112. }, {
  113. title: `${sldComLanguage('创建时间')}`,//创建时间
  114. dataIndex: 'createTime',
  115. align: 'center',
  116. width: 150,
  117. },
  118. {
  119. title: `${sldComLanguage('操作')}`,//操作
  120. align: 'center',
  121. width: 100,
  122. render: (text, record) => (
  123. <Fragment>
  124. <Link to={{
  125. pathname: '/manage_article/article_lists_to_add',
  126. query: { id: record.articleId },
  127. }}>
  128. {
  129. sldtbaleOpeBtnText('编辑', null)
  130. }
  131. </Link>
  132. <span className={global.splitLine}></span>
  133. {/*删除后不可恢复,是否确定删除?*/}
  134. {sldPopConfirmDiy('leftBottom', `${sldComLanguage('删除后不可恢复,是否确定删除')}`, () => this.del_article(record.articleId), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`,
  135. sldtbaleOpeBtnText('删除', () => null))}
  136. </Fragment>
  137. ),
  138. },
  139. ],
  140. };
  141. }
  142. componentDidMount() {
  143. this.props.dispatch({
  144. type: 'share/getShareData',
  145. });
  146. this.get_list({ pageSize: pageSize });
  147. }
  148. componentWillReceiveProps(nextProps, nextContext) {
  149. if (nextProps.share.flag && nextProps.share.type == 'edit_article') {
  150. //编辑导致的页面更新数据
  151. const { params, formValues } = this.state;
  152. this.get_list({ ...params, ...formValues });
  153. this.props.dispatch({
  154. type: 'share/updateDate',
  155. payload: { flag: false, type: '', sldGlobalShareData: {} },
  156. });
  157. }
  158. }
  159. //获取数据列表
  160. get_list = (params) => {
  161. const { dispatch } = this.props;
  162. this.setState({ loading: true });
  163. dispatch({
  164. type: 'article/get_article_lists',
  165. payload: params,
  166. callback: (res) => {
  167. if (res.state == 200) {
  168. if (res.data.list.length == 0 && this.state.params.current > 1) {
  169. params.current = params.current - 1;
  170. this.get_list(params);
  171. } else {
  172. this.setState({
  173. data: res.data,
  174. isReset: false,
  175. });
  176. }
  177. }
  178. this.setState({ loading: false });
  179. },
  180. });
  181. };
  182. handleSelectRows = (rows, rowkeys) => {
  183. this.setState({
  184. selectedRows: rows,
  185. selectedRowKeys: rowkeys,
  186. });
  187. };
  188. handleTablePagination = (pagination, filtersArg, sorter, type = 'main') => {
  189. let { formValues, scrollBarToTop } = this.state;
  190. if (type == 'main') {
  191. const params = sldHandlePaginationData(pagination, filtersArg, sorter, formValues);
  192. pageSize = params.pageSize;
  193. scrollBarToTop = scrollBarToTop + 1;
  194. this.setState({ params, scrollBarToTop });
  195. this.get_list(params);
  196. }
  197. };
  198. //删除单条数据
  199. del_article = (val) => {
  200. this.del_article_com({ ids: val });
  201. };
  202. //批量删除数据
  203. del_article_more = () => {
  204. const { selectedRowKeys } = this.state;
  205. this.del_article_com({ ids: selectedRowKeys.join(',') });
  206. };
  207. //删除事件
  208. del_article_com = (payload) => {
  209. const { params } = this.state;
  210. let _this = this;
  211. const { dispatch } = this.props;
  212. dispatch({
  213. type: 'article/del_article',
  214. payload: payload,
  215. callback: (res) => {
  216. if (res.state == 200) {
  217. sucTip(res.msg);
  218. _this.get_list(params);
  219. this.setState({
  220. modalVisible: false,
  221. });
  222. } else {
  223. failTip(res.msg);
  224. }
  225. },
  226. });
  227. };
  228. sldHandleConfirm = (val) => {
  229. this.setState({ submiting: true });
  230. const { curData, params, type } = this.state;
  231. const { dispatch } = this.props;
  232. let dis_type = 'article/add_article_cat';
  233. if (type == 'edit') {
  234. val.articleId = curData.articleId;
  235. dis_type = 'article/edit_article_cat';
  236. }
  237. dispatch({
  238. type: dis_type,
  239. payload: val,
  240. callback: (res) => {
  241. if (res.state == 200) {
  242. sucTip(res.msg);
  243. this.get_list(params);
  244. this.setState({
  245. modalVisible: false,
  246. });
  247. } else {
  248. failTip(res.msg);
  249. }
  250. this.setState({ submiting: false });
  251. },
  252. });
  253. };
  254. sldHandleCancle = () => {
  255. this.setState({ modalVisible: false });
  256. };
  257. //搜索事件
  258. search = (data) => {
  259. const values = { ...data };
  260. for (let i in values) {
  261. if (values[i] == '') {
  262. delete values[i];
  263. }
  264. }
  265. this.setState({
  266. formValues: values,
  267. params: { pageSize: pageSize },
  268. });
  269. this.get_list({ pageSize: pageSize, ...values });
  270. };
  271. //搜索重置事件
  272. seaReset = () => {
  273. //搜索条件置为空
  274. this.setState({
  275. formValues: {},
  276. params: { pageSize: pageSize },
  277. });
  278. this.get_list({ pageSize: pageSize });
  279. };
  280. //表格拖动
  281. resizeTable = (index, size, type, data) => {
  282. let datas = dragSldTableColumn(index, size, data);
  283. this.setState({ [type]: datas });
  284. };
  285. render() {
  286. const { selectedRows, modalVisible, title, addData, columns, submiting, data, loading, selectedRowKeys, search_data, scrollBarToTop } = this.state;
  287. return (
  288. <Spin spinning={loading}>
  289. <div className={global.tableListForm}>
  290. <Search search_data={search_data} seaSubmit={(data) => this.search(data)}
  291. seaReset={() => this.seaReset()}/>
  292. </div>
  293. { /*公共功能条-start*/}
  294. <div className={global.operate_bg}>
  295. <Link to={{
  296. pathname: '/manage_article/article_lists_to_add',
  297. }}>
  298. {sldIconBtn(null, `${sldComLanguage('添加')}${sldComLanguage('文章')}`, 7, 0)}{/*添加文章*/}
  299. </Link>
  300. {selectedRowKeys.length == 0 ? sldIconBtn(() => {
  301. failTip(`${sldComLanguage('请先选中数据')}`);//请先选中数据
  302. //确认删除选中的数据吗?
  303. }, `${sldComLanguage('批量删除')}`, 7, 0, 15, 15, 4, 'shanchu', '#fa0920') : sldPopConfirm('leftBottom', `${sldComLanguage('确认删除选中的数据吗')}?`, () => this.del_article_more(), `${sldComLanguage('确定')}`, `${sldComLanguage('取消')}`, sldIconBtn(null, `${sldComLanguage('批量删除')}`, 7, 0, 15, 15, 4, 'shanchu', '#fa0920'), 0, 0, '#fa0920')}
  304. </div>
  305. { /*公共功能条-end*/}
  306. { /*标准表格-start*/}
  307. <StandardTable
  308. scrollBarToTop={scrollBarToTop}
  309. totalHeight={document.body.clientHeight - 195}
  310. selectedRows={selectedRows}
  311. data={data}
  312. rowKey={'articleId'}
  313. isCheck={true}
  314. columns={columns}
  315. onSelectRow={this.handleSelectRows}
  316. onChange={(pagination, filtersArg, sorter) => this.handleTablePagination(pagination, filtersArg, sorter, 'main')}
  317. resizeTable={(index, size) => this.resizeTable(index, size, 'columns', columns)}
  318. isColumnResize={true}
  319. />
  320. { /*标准表格-end*/}
  321. { /*新增/编辑对话框-start*/}
  322. <SldModal
  323. title={title}
  324. submiting={submiting}
  325. modalVisible={modalVisible}
  326. sldHandleConfirm={(val) => this.sldHandleConfirm(val)}
  327. sldHandleCancle={this.sldHandleCancle}
  328. formItemLayoutModal={formItemLayoutModal}
  329. content={addData}
  330. />
  331. { /*新增/编辑对话框-end*/}
  332. </Spin>
  333. );
  334. }
  335. }