Browse Source

uas手机版
通用列表缓存滚动位置

RaoMeng 5 years ago
parent
commit
fbe5d7ad71

+ 9 - 2
uas-office-web/uas-mobile/src/components/common/currencyDetail/CurrencyDetail.jsx

@@ -93,8 +93,15 @@ class CurrencyDetail extends Component {
     if (isObjEmpty(mCaller)) {
       message.error('单据caller为空,单据获取失败')
     } else {
-      Toast.loading('正在获取单据', 0)
-      this.loadFormandGridDetail()
+      const { formData } = this.props
+      if (!isObjEmpty(formData)) {
+        this.setState({
+          billGroupList: formData,
+        })
+      } else {
+        Toast.loading('正在获取单据', 0)
+        this.loadFormandGridDetail()
+      }
     }
   }
 

+ 28 - 29
uas-office-web/uas-mobile/src/components/common/currencyList/CurrencyList.jsx

@@ -24,11 +24,8 @@ import CurrencyTabItem
   from './CurrencyTabItem'
 import { saveListState } from '../../../redux/actions/listState'
 import { LIST_PAGE_SIZE } from '../../../configs/constans.config'
-import { GlobalEvent } from '../../../utils/common/eventbus/eventbus'
-import { CURRENCY_DETAIL_DATA_REFRESH } from '../../../utils/common/eventbus/events.types'
-import { refreshFormState } from '../../../redux/actions/formState'
-import { FILTER_STATE } from '../../../redux/constants/actionTypes'
 import CurrencyDetail from '../currencyDetail/CurrencyDetail'
+import { refreshFormState } from '../../../redux/actions/formState'
 
 class CurrencyList extends Component {
 
@@ -46,11 +43,8 @@ class CurrencyList extends Component {
   }
 
   componentDidMount () {
+    this.props.onRef && this.props.onRef(this)
     const hei = this.state.height - ReactDOM.findDOMNode(this.lv).offsetTop
-    //将标识设置为FILTER_STATE,保证数据不错乱
-    refreshFormState({
-      stateType: FILTER_STATE,
-    })
     this.setState({
       height: hei,
       refreshing: false,
@@ -63,33 +57,19 @@ class CurrencyList extends Component {
     const {
       requestList,
       requestTab,
-      requestSearchConfig,
-      formState: { filterGroupList },
-      listState: { tabList, listData, scrollTop },
+      listState: { tabList, listData },
     } = this.props
 
-    if (isObjEmpty(tabList) && !isObjNull(requestTab)) {
+    if (isObjEmpty(tabList) && isObjEmpty(listData) && !isObjNull(requestTab)) {
       requestTab()
     } else if (isObjEmpty(listData) && !isObjNull(requestList)) {
       saveListState({
         pageIndex: 0,
       })
       requestList()
+    } else {
+      this.recoveryScroll()
     }
-
-    if (isObjEmpty(filterGroupList) && !isObjNull(requestSearchConfig)) {
-      requestSearchConfig()
-    }
-    GlobalEvent.on(CURRENCY_DETAIL_DATA_REFRESH, (billGroupModelList) => {
-      saveListState({
-        filterGroupList: billGroupModelList,
-      })
-      setTimeout(() => {
-        this.forceUpdate()
-      }, 0)
-    }, this)
-
-    ReactDOM.findDOMNode(this.lv).scrollTop = scrollTop
   }
 
   componentWillUnmount () {
@@ -97,7 +77,7 @@ class CurrencyList extends Component {
   }
 
   render () {
-    const { listState: { tabList, tabSelect, listData }, rowCount, addAble } = this.props
+    const { listState: { tabList, tabSelect, listData, pageIndex }, rowCount, addAble } = this.props
     const { listDataSource, height, hasNextPage, filterOpen } = this.state
 
     const refreshLayout = this.getRefreshLayout()
@@ -141,7 +121,7 @@ class CurrencyList extends Component {
         <ListView
           ref={el => this.lv = el}
           dataSource={listDataSource.cloneWithRows(listData)}
-          initialListSize={LIST_PAGE_SIZE}
+          initialListSize={(pageIndex + 1) * LIST_PAGE_SIZE}
           renderFooter={() => {
             return hasNextPage && <LoadingMore/>
           }}
@@ -154,6 +134,9 @@ class CurrencyList extends Component {
           style={{
             height,
           }}
+          onContentSizeChange={() => {
+            console.log('onContentSizeChange', 'onContentSizeChange')
+          }}
           pullToRefresh={refreshLayout}
           onEndReachedThreshold={10}
           onEndReached={hasNextPage ? this.loadDataList : null}
@@ -171,6 +154,13 @@ class CurrencyList extends Component {
     )
   }
 
+  recoveryScroll = () => {
+    const { listState: { scrollTop } } = this.props
+    setTimeout(() => {
+    }, 0)
+    ReactDOM.findDOMNode(this.lv).scrollTop = scrollTop
+  }
+
   getRefreshLayout () {
     const { refreshing } = this.state
     return <PullToRefresh
@@ -189,7 +179,9 @@ class CurrencyList extends Component {
   }
 
   getFilterLayout = () => {
-    const { params } = this.props
+    const {
+      params, formState: { filterGroupList },
+    } = this.props
     return (
       <div
         className='currency-list-content-filter-content'>
@@ -197,6 +189,7 @@ class CurrencyList extends Component {
           onRef={ref => this.cd = ref}
           caller={params.caller}
           id={params.id}
+          formData={filterGroupList}
         >
           <div className='currency-list-content-filter-func'>
             <Button
@@ -245,6 +238,9 @@ class CurrencyList extends Component {
     saveListState({
       scrollTop: ReactDOM.findDOMNode(this.lv).scrollTop,
     })
+    refreshFormState({
+      filterGroupList: this.cd && this.cd.state.billGroupList,
+    })
     const { onItemClick } = this.props
     onItemClick && onItemClick(rowData)
   }
@@ -259,6 +255,9 @@ class CurrencyList extends Component {
     saveListState({
       scrollTop: ReactDOM.findDOMNode(this.lv).scrollTop,
     })
+    refreshFormState({
+      filterGroupList: this.cd && this.cd.state.billGroupList,
+    })
     const { onDocAdd } = this.props
     onDocAdd && onDocAdd()
   }

+ 1 - 0
uas-office-web/uas-mobile/src/pages/private/homePage/HomePage.jsx

@@ -35,6 +35,7 @@ class HomePage extends Component {
   componentDidMount () {
     document.title = 'UAS系统'
     clearListState()
+    clearFormState()
 
     //刷新应用红点
     GlobalEvent.on(EVENT_DOC_FUNC_COUNT, onDocFuncCountRefresh, this)

+ 2 - 1
uas-office-web/uas-mobile/src/pages/private/report/ReportSearch.jsx

@@ -110,7 +110,8 @@ class ReportSearch extends Component {
 
   onSubItemClick = (reportObj) => {
     this.props.history.push(
-      '/reportList/' + reportObj.caller + '/' + reportObj.name)
+      '/reportList/' + reportObj.caller + '/' + reportObj.id + '/' +
+      reportObj.name)
   }
 }
 

+ 1 - 2
uas-office-web/uas-mobile/src/pages/private/service/ServiceAdd.jsx

@@ -6,10 +6,9 @@
 import React, { Component } from 'react'
 import { connect } from 'react-redux'
 import './service.less'
-import { getFormAndGrid } from '../../../utils/common/form.util'
+import { getFormAndGrid } from '../../../utils/common/form.request'
 import CurrencyDetail
   from '../../../components/common/currencyDetail/CurrencyDetail'
-import { Button } from 'antd-mobile'
 
 class ServiceAdd extends Component {
 

+ 1 - 0
uas-office-web/uas-mobile/src/pages/private/service/ServiceList.jsx

@@ -38,6 +38,7 @@ class ServiceList extends Component {
     return (
       <div>
         <CurrencyList
+          onRef={el => this.cl = el}
           requestList={this.requestList.bind(this)}
           requestTab={this.requestTab.bind(this)}
           requestSearchConfig={this.requestSearchConfig.bind(this)}

+ 114 - 2
uas-office-web/uas-mobile/src/utils/common/form.request.js

@@ -1,10 +1,11 @@
 /**
  * Created by RaoMeng on 2020/12/11
- * Desc: 通用表单接口数据处理
+ * Desc: 通用表单数据处理
  */
-import { isObjEmpty } from './common.util'
+import { isObjEmpty, isObjNull } from './common.util'
 import BillGroupModel from '../../model/common/BillGroupModel'
 import BillModel from '../../model/common/BillModel'
+import { message } from 'antd'
 
 export function analysisFormData (formData, isDetail) {
   let billGroupList = []
@@ -96,3 +97,114 @@ export function getBillGroup (groupItem, groupIndex, isDetail) {
 
   return billGroup
 }
+
+/**
+ * 解析拼接单据数据
+ * @param billGroupModelList
+ * @returns {{form: *, grid: (null|[])}}
+ */
+export function getFormAndGrid (billGroupModelList) {
+  if (!isObjEmpty(billGroupModelList)) {
+    let formFields = [], gridGroupFields = []
+    for (let i = 0; i < billGroupModelList.length; i++) {
+      let billGroup = billGroupModelList[i]
+      if (isObjNull(billGroup)) {
+        continue
+      }
+      if (billGroup.isForm) {
+        if (!isObjEmpty(billGroup.showBillFields)) {
+          formFields = formFields.concat(billGroup.showBillFields)
+        }
+        if (!isObjEmpty(billGroup.hideBillFields)) {
+          formFields = formFields.concat(billGroup.hideBillFields)
+        }
+      } else {
+        let gridFields = []
+        if (!isObjEmpty(billGroup.showBillFields)) {
+          gridFields = gridFields.concat(billGroup.showBillFields)
+        }
+        if (!isObjEmpty(billGroup.hideBillFields)) {
+          gridFields = gridFields.concat(billGroup.hideBillFields)
+        }
+        gridGroupFields.push(gridFields)
+      }
+    }
+    let formStore = analysisForm(formFields)
+    if (isObjNull(formStore)) {
+      return
+    }
+    let gridStoreList = analysisGrid(gridGroupFields)
+    if (isObjNull(gridStoreList)) {
+      return
+    }
+
+    return {
+      form: formStore,
+      grid: gridStoreList,
+    }
+  }
+}
+
+/**
+ * 判断主表字段必填情况,拼接主表字段
+ * @param formFields
+ * @returns {null}
+ */
+function analysisForm (formFields) {
+  if (!isObjNull(formFields)) {
+    let formStore = {}
+    for (let i = 0; i < formFields.length; i++) {
+      let billModel = formFields[i]
+      if (isObjNull(billModel)) {
+        continue
+      }
+      if (isObjEmpty(getValue(billModel)) &&
+        (billModel.allowBlank === 'necessaryField'
+          || billModel.allowBlank === 'F')) {
+        message.error(`${billModel.caption}为必填项`)
+        return null
+      }
+      //Todo 附件上传
+
+      formStore[billModel.field] = getDisplay(billModel)
+    }
+    return formStore
+  } else {
+    return null
+  }
+}
+
+function analysisGrid (gridBillMap) {
+  let gridStoreList = []
+  if (!isObjNull(gridBillMap)) {
+    for (let i = 0; i < gridBillMap.length; i++) {
+      let gridFields = gridBillMap[i]
+      if (!isObjEmpty(gridFields)) {
+        let gridStore = {}
+        for (let j = 0; j < gridFields.length; j++) {
+          let billModel = gridFields[j]
+          if (isObjEmpty(getValue(billModel))
+            && (billModel.allowBlank === 'necessaryField'
+              || billModel.allowBlank === 'F')) {
+            message.error(`${billModel.caption}为必填项`)
+            return null
+          }
+          //Todo 附件上传
+
+          gridStore[billModel.field] = getDisplay(billModel)
+        }
+        gridStoreList.push(gridStore)
+      }
+    }
+  }
+  return gridStoreList
+}
+
+function getValue (billModel) {
+  return billModel.value || billModel.defValue || ''
+}
+
+function getDisplay (billModel) {
+  return billModel.display || getValue(billModel)
+}
+

+ 2 - 138
uas-office-web/uas-mobile/src/utils/common/form.util.js

@@ -61,8 +61,6 @@ export function getFormItems (billGroupModelList) {
                                key={g + 'formInput' + i}
                                onTextChange={onTextChange.bind(this,
                                  billGroupModelList)}
-                               onInputClick={onInputClick.bind(this,
-                                 billGroupModelList)}
                     />,
                   )
                   break
@@ -79,7 +77,7 @@ export function getFormItems (billGroupModelList) {
               }
             }
           }
-          if (billGroup.isForm == false && billGroup.lastInType == true) {
+          /*if (billGroup.isForm == false && billGroup.lastInType == true) {
             //如果是最后一个从表,则添加【新增】按钮
             formItems.push(
               <FormAdd billModel={getAddModel(g)}
@@ -88,7 +86,7 @@ export function getFormItems (billGroupModelList) {
                        key={'formAdd' + g}
               />,
             )
-          }
+          }*/
         }
       }
     }
@@ -275,132 +273,6 @@ function onTextChange (
   }
 }
 
-function onInputClick (billGroupModelList, groupIndex, childIndex) {
-  if (!isObjEmpty(billGroupModelList, billGroupModelList[groupIndex])) {
-    let billGroup = billGroupModelList[groupIndex]
-    if (!isObjNull(billGroup.showBillFields) &&
-      !isObjNull(billGroup.showBillFields[childIndex])) {
-      let billModel = billGroup.showBillFields[childIndex]
-      if (isObjNull(billModel)) {
-        return
-      }
-      billModel.childIndex = childIndex
-      this.setState({
-        selectModel: billModel,
-      })
-      Toast.loading('数据请求中', 0)
-      let type = billModel.type
-      if (type === 'C') {
-        //单项选择
-        this.getComboValue(billModel)
-      } else if (type === 'SF' || type === 'DF') {
-        //DBFind选择
-        this.getDbfindList(billModel, billGroup)
-      } else if (type === 'MF') {
-        //多项选择
-
-      }
-    }
-  }
-}
-
-export function getFormAndGrid (billGroupModelList) {
-  if (!isObjEmpty(billGroupModelList)) {
-    let formFields = [], gridGroupFields = []
-    for (let i = 0; i < billGroupModelList.length; i++) {
-      let billGroup = billGroupModelList[i]
-      if (isObjNull(billGroup)) {
-        continue
-      }
-      if (billGroup.isForm) {
-        if (!isObjEmpty(billGroup.showBillFields)) {
-          formFields = formFields.concat(billGroup.showBillFields)
-        }
-        if (!isObjEmpty(billGroup.hideBillFields)) {
-          formFields = formFields.concat(billGroup.hideBillFields)
-        }
-      } else {
-        let gridFields = []
-        if (!isObjEmpty(billGroup.showBillFields)) {
-          gridFields = gridFields.concat(billGroup.showBillFields)
-        }
-        if (!isObjEmpty(billGroup.hideBillFields)) {
-          gridFields = gridFields.concat(billGroup.hideBillFields)
-        }
-        gridGroupFields.push(gridFields)
-      }
-    }
-    let formStore = analysisForm(formFields)
-    if (isObjNull(formStore)) {
-      return
-    }
-    let gridStoreList = analysisGrid(gridGroupFields)
-    if (isObjNull(gridStoreList)) {
-      return
-    }
-
-    return {
-      form: formStore,
-      grid: gridStoreList,
-    }
-  }
-}
-
-/**
- * 判断主表字段必填情况,拼接主表字段
- * @param formFields
- * @returns {null}
- */
-function analysisForm (formFields) {
-  if (!isObjNull(formFields)) {
-    let formStore = {}
-    for (let i = 0; i < formFields.length; i++) {
-      let billModel = formFields[i]
-      if (isObjNull(billModel)) {
-        continue
-      }
-      if (isObjEmpty(getValue(billModel)) &&
-        (billModel.allowBlank === 'necessaryField'
-          || billModel.allowBlank === 'F')) {
-        message.error(`${billModel.caption}为必填项`)
-        return null
-      }
-      //Todo 附件上传
-
-      formStore[billModel.field] = getDisplay(billModel)
-    }
-    return formStore
-  } else {
-    return null
-  }
-}
-
-function analysisGrid (gridBillMap) {
-  let gridStoreList = []
-  if (!isObjNull(gridBillMap)) {
-    for (let i = 0; i < gridBillMap.length; i++) {
-      let gridFields = gridBillMap[i]
-      if (!isObjEmpty(gridFields)) {
-        let gridStore = {}
-        for (let j = 0; j < gridFields.length; j++) {
-          let billModel = gridFields[j]
-          if (isObjEmpty(getValue(billModel))
-            && (billModel.allowBlank === 'necessaryField'
-              || billModel.allowBlank === 'F')) {
-            message.error(`${billModel.caption}为必填项`)
-            return null
-          }
-          //Todo 附件上传
-
-          gridStore[billModel.field] = getDisplay(billModel)
-        }
-        gridStoreList.push(gridStore)
-      }
-    }
-  }
-  return gridStoreList
-}
-
 function refreshFromData (billGroupModelList) {
   const stateType = store.getState().formState.stateType
   if (stateType === FILTER_STATE) {
@@ -414,12 +286,4 @@ function refreshFromData (billGroupModelList) {
   }
 }
 
-function getValue (billModel) {
-  return billModel.value || billModel.defValue || ''
-}
-
-function getDisplay (billModel) {
-  return billModel.display || getValue(billModel)
-}
-