Browse Source

1、HTML格式字符串解析与展示
2、【我发起的】【已审批】切换下一条

RaoMeng 5 years ago
parent
commit
87e6aebd62

+ 4 - 0
uas-office-web/wxuasapproval/src/components/approvalAdd/FormInput.jsx

@@ -94,6 +94,10 @@ export default class FormInput extends Component {
           <div style={{ flex: 1 }}></div>
         </DatePickerCustom>
       </DatePicker>
+    } else if (type === 'HTML') {
+      valueItem =
+        <div className='form-input-value'
+             dangerouslySetInnerHTML={{ __html: billModel.getValue() }}></div>
     } else {
       valueItem = <TextareaItem className='form-input-value' autoHeight
                                 placeholder={this.isSelect(billModel)

+ 5 - 1
uas-office-web/wxuasapproval/src/components/approvalAdd/formCommon.css

@@ -46,7 +46,11 @@
 
 .form-common-layout .am-list-line {
     padding-right: 8px;
-    border-bottom: none !important;
+}
+
+.form-common-layout .am-list-line::after {
+    /*去掉数字输入框的底部横线*/
+    display: none !important;
 }
 
 .form-common-layout .am-list .am-list-item.am-textarea-item {

+ 4 - 4
uas-office-web/wxuasapproval/src/components/pointsItem/PointsItem.jsx

@@ -14,7 +14,7 @@ export default class PointsItem extends Component {
 
     this.setState({
       mApproval: this.props.approval,
-      approvalStatus: this.props.approvalStatus,
+      approvalAble: this.props.approvalAble,
     })
     let options = []
     let datas = mApproval.datas
@@ -41,16 +41,16 @@ export default class PointsItem extends Component {
       selectList: [],
       inputValue: '',
       mApproval: new ApprovalBean(),
-      approvalStatus: 0,
+      approvalAble: true,
     }
   }
 
   render () {
     let valueItem = ''
     const dateFormat = 'YYYY-MM-DD'
-    const { inputValue, selectList, mApproval, approvalStatus } = this.state
+    const { inputValue, selectList, mApproval, approvalAble } = this.state
 
-    if (approvalStatus != 0) {
+    if (approvalAble == false) {
       valueItem = <div className='value-input'>{mApproval.values}</div>
     } else if (mApproval.isSelect()) {
       let placeHolder = ''

+ 8 - 6
uas-office-web/wxuasapproval/src/components/tableItem/TableItem.jsx

@@ -16,7 +16,7 @@ export default class TableItem extends Component {
 
     this.setState({
       mApproval: this.props.approval,
-      approvalStatus: this.props.approvalStatus,
+      approvalAble: this.props.approvalAble,
     })
     let options = []
     let datas = mApproval.datas
@@ -55,17 +55,18 @@ export default class TableItem extends Component {
       inputValue: '',
       radioValue: 1,
       mApproval: new ApprovalBean(),
-      approvalStatus: 0,//审批状态
+      approvalAble: true,//审批状态
     }
   }
 
   render () {
     let valueItem = ''
     const dateFormat = 'YYYY-MM-DD'
-    const { inputValue, radioValue, selectList, mApproval, approvalStatus } = this.state
+    const { inputValue, radioValue, selectList, mApproval, approvalAble } = this.state
 
-    if (approvalStatus != 0) {
-      valueItem = <div>{mApproval.values}</div>
+    if (approvalAble == false) {
+      valueItem =
+        <div dangerouslySetInnerHTML={{ __html: mApproval.values }}></div>
     } else if (mApproval.neerInput) {
       let placeHolder = ''
       if (mApproval.mustInput) {
@@ -165,7 +166,8 @@ export default class TableItem extends Component {
           <span style={{ color: '#f10813' }}>{mApproval.values}</span>
         </div>
       } else {
-        valueItem = <div>{mApproval.values}</div>
+        valueItem =
+          <div dangerouslySetInnerHTML={{ __html: mApproval.values }}></div>
       }
     }
 

+ 45 - 45
uas-office-web/wxuasapproval/src/components/tableItem/tableItem.css

@@ -1,45 +1,45 @@
-.table-parent {
-    width: 100%;
-    display: flex;
-    flex-direction: row;
-    align-items: center;
-    background: white;
-    padding: 4px 10px;
-    font-size: 13px;
-}
-
-.table-caption {
-    width: 100px;
-    color: #999999;
-}
-
-.table-value {
-    flex: 1;
-    color: #333333;
-    overflow: hidden;
-}
-
-.value-input {
-    height: 24px;
-    line-height: 24px;
-    color: #333333;
-    width: 100%;
-    margin-right: 10px;
-}
-
-DatePicker {
-    margin: 0px;
-    padding: 0px;
-}
-
-.selectItem {
-    height: 38px;
-    text-align: center;
-    line-height: 35px;
-    border-bottom: 1px solid #ccc;
-}
-
-.oldNewLayout {
-    display: flex;
-    flex-direction: column;
-}
+.table-parent {
+    width: 100%;
+    display: flex;
+    flex-direction: row;
+    /*align-items: center;*/
+    background: white;
+    padding: 4px 10px;
+    font-size: 13px;
+}
+
+.table-caption {
+    width: 100px;
+    color: #777777;
+}
+
+.table-value {
+    flex: 1;
+    color: #333333;
+    overflow: hidden;
+}
+
+.value-input {
+    height: 24px;
+    line-height: 24px;
+    color: #333333;
+    width: 100%;
+    margin-right: 10px;
+}
+
+DatePicker {
+    margin: 0px;
+    padding: 0px;
+}
+
+.selectItem {
+    height: 38px;
+    text-align: center;
+    line-height: 35px;
+    border-bottom: 1px solid #ccc;
+}
+
+.oldNewLayout {
+    display: flex;
+    flex-direction: column;
+}

+ 18 - 1
uas-office-web/wxuasapproval/src/configs/router.config.js

@@ -5,6 +5,7 @@ import {
   Redirect,
   Switch,
 } from 'react-router-dom'
+import { Modal } from 'antd-mobile'
 import BindPhone from '../pages/bindPhone/BindPhone'
 import BindResult from '../pages/bindPhone/BindResult'
 import RedirectPage from '../pages/RedirectPage'
@@ -20,6 +21,20 @@ const ApprovalHomePage = PageLoadable(import('@/pages/approval/ApprovalHome'))
 const ApprovalAddPage = PageLoadable(import('@/pages/approval/ApprovalAdd'))
 const ApprovalPage = PageLoadable(import('@/pages/approval/Approval'))
 
+const getConfirmation = (message: any, callback: any) => {
+  Modal.alert('提示', message, [
+    {
+      text: '取消', onPress: () => {
+        callback(false)
+      },
+    },
+    {
+      text: '确定', onPress: () => {
+        callback(true)
+      },
+    }])
+}
+
 export class Routes extends React.Component {
   componentWillUnmount () {
     let storage = window.localStorage
@@ -28,7 +43,8 @@ export class Routes extends React.Component {
 
   render () {
     return <Router
-      basename={(process.env.REACT_APP_ROUTER_BASE_NAME || '/ERP') + '/uas'}>
+      basename={(process.env.REACT_APP_ROUTER_BASE_NAME || '/ERP') + '/uas'}
+      getUserConfirmation={getConfirmation}>
       <div style={{ width: '100%', height: '100%' }}>
         <Switch>
           {/*U审批过渡页面(入口页面)*/}
@@ -62,6 +78,7 @@ export class Routes extends React.Component {
       </div>
     </Router>
   }
+
 }
 
 

+ 279 - 170
uas-office-web/wxuasapproval/src/pages/approval/Approval.jsx

@@ -28,12 +28,14 @@ import {
 // import FileViewer from 'react-file-viewer'
 // import Cookies from 'js-cookie'
 import EnclosureItem from '../../components/enclosureItem/EnclosureItem'
-import { saveReceiveState } from '../../redux/actions/homeState'
+import { clearSendState, saveReceiveState } from '../../redux/actions/homeState'
 import EmployeeItem from '../../components/employeeItem/EmployeeItem'
 
 const operation = Modal.operation
+const alert = Modal.alert
 //==============================================================================================
-let mMaster, mSessionId, mEmcode, mNodeId, mType, mCachePoints
+let mType//0或undefined:待审批; 1:已审批; 2:我发起的;
+let mMaster, mSessionId, mEmcode, mNodeId, mCachePoints
 let mApprovalRecord = new ApprovalRecordBean()
 let mTitleApproval = new ApprovalBean()
 let mParams = []
@@ -53,52 +55,55 @@ let mEmployeeList = []//组织架构
 
 let mBaseUrl
 
+const defaultApprovalState = {
+  approvalContent: '',
+  fastList: [
+    '赞',
+    'OK',
+    '加油',
+    '好的',
+    '请及时完成',
+  ],
+  fastModalOpen: false,
+  approvalIndex: 0,
+  loading: true,
+  finished: false,
+  finishSuccess: true,
+  finishMsg: '审批流程结束',
+
+  disagreeAble: true,//不同意按钮是否显示
+  agreeAble: true,//同意按钮是否显示
+  takeoverAble: false,//接管按钮是否显示
+  changeAble: false,//变更处理人按钮是否显示
+  optionAble: false,//底部审批操作布局是否显示
+  nodesTagAble: false,//审批节点切换是否显示
+  revokeAble: false,//撤回按钮是否显示
+
+  approvalStatus: 0,//审批状态 0:待审批;1:审批通过;2:审批不通过:3:异常结束
+
+  titleApproval: {
+    caption: '',
+  },
+  historyNodes: [],//历史审批
+  mainList: [],//主表
+  detailList: [],//从表
+  setuptasList: [],//历史审批要点
+  enclosureList: [],//附件
+  nodeList: [],//审批节点
+  pointsList: [],//要点
+
+  changeModalOpen: false,//变更处理人弹框是否显示
+  changeDataSource: new ListView.DataSource({
+    rowHasChanged: (row1, row2) => row1 !== row2,
+  }),//变更处理人列表
+}
+
 class Approval extends Component {
 
   constructor () {
     super()
 
-    this.state = {
-      approvalContent: '',
-      fastList: [
-        '赞',
-        'OK',
-        '加油',
-        '好的',
-        '请及时完成',
-      ],
-      fastModalOpen: false,
-      approvalIndex: 0,
-      loading: true,
-      finished: false,
-      finishSuccess: true,
-      finishMsg: '审批流程结束',
-
-      disagreeAble: true,//不同意按钮是否显示
-      agreeAble: true,//同意按钮是否显示
-      takeoverAble: false,//接管按钮是否显示
-      changeAble: false,//变更处理人按钮是否显示
-      optionAble: false,//底部审批操作布局是否显示
-      nodesTagAble: false,//审批节点切换是否显示
-
-      approvalStatus: 0,//审批状态 0:待审批;1:审批通过;2:审批不通过:3:异常结束
-
-      titleApproval: {
-        caption: '',
-      },
-      historyNodes: [],//历史审批
-      mainList: [],//主表
-      detailList: [],//从表
-      setuptasList: [],//历史审批要点
-      enclosureList: [],//附件
-      nodeList: [],//审批节点
-      pointsList: [],//要点
-
-      changeModalOpen: false,//变更处理人弹框是否显示
-      changeDataSource: new ListView.DataSource({
-        rowHasChanged: (row1, row2) => row1 !== row2,
-      }),//变更处理人列表
-    }
+    this.state = defaultApprovalState
   }
 
   componentDidMount () {
@@ -121,12 +126,6 @@ class Approval extends Component {
         mMaster = paramsJson.master
         mNodeId = paramsJson.nodeId
         mType = paramsJson.type
-        this.setState({
-          approvalStatus: (mType === undefined || mType == 0) ? 0 : 4,
-        })
-
-        // mSessionId = window.sessionId
-        // mEmcode = window.emcode
 
         this.getCurrentNode()
         // this.loginErp()
@@ -196,6 +195,7 @@ class Approval extends Component {
       agreeAble,//同意按钮是否显示
       takeoverAble,//接管按钮是否显示
       changeAble,//变更处理人按钮是否显示
+      revokeAble,//撤回按钮是否显示
       optionAble,
       titleApproval,
       nodesTagAble,
@@ -212,6 +212,8 @@ class Approval extends Component {
       changeDataSource,//变更处理人列表
     } = this.state
 
+    const approvalAble = (approvalStatus == 0 &&
+      (mType === undefined || mType == 0))
     //审批常用语
     let fastItems = []
     for (let i = 0; i < fastList.length; i++) {
@@ -225,7 +227,7 @@ class Approval extends Component {
     for (let i = 0; i < mainList.length; i++) {
       tableItems.push(<TableItem key={'main' + i} approval={mainList[i]}
                                  index={i}
-                                 approvalStatus={approvalStatus}
+                                 approvalAble={approvalAble}
                                  valueListener={this.childStateListener.bind(
                                    this)}></TableItem>)
     }
@@ -242,7 +244,7 @@ class Approval extends Component {
         } else {
           tableItems.push(<TableItem key={'detail' + i} approval={detailList[i]}
                                      index={i}
-                                     approvalStatus={approvalStatus}
+                                     approvalAble={approvalAble}
                                      valueListener={this.childStateListener.bind(
                                        this)}></TableItem>)
         }
@@ -261,7 +263,7 @@ class Approval extends Component {
         } else {
           tableItems.push(<TableItem key={'setup' + i}
                                      approval={setuptasList[i]} index={i}
-                                     approvalStatus={approvalStatus}
+                                     approvalAble={approvalAble}
                                      valueListener={this.childStateListener.bind(
                                        this)}></TableItem>)
         }
@@ -297,7 +299,7 @@ class Approval extends Component {
       } else {
         pointItems.push(<PointsItem key={'points' + i} approval={pointsList[i]}
                                     index={i}
-                                    approvalStatus={approvalStatus}
+                                    approvalAble={approvalAble}
                                     valueListener={this.childStateListener.bind(
                                       this)}></PointsItem>)
       }
@@ -399,77 +401,109 @@ class Approval extends Component {
           {approvalPoint}
         </div>
         {
-          approvalStatus === 0 &&
-          <div className={optionAble ? 'bottomMenu' : 'displayNone'}>
-            <div className='gray-line' style={{ height: '2px' }}></div>
-            <div className='editLayout'>
-              <Icon disabled name='edit'/>
-              <TextArea className='editInput'
-                        value={approvalContent}
-                        placeholder='请输入审批意见...'
-                        onChange={this.approvalEdit}/>
-              <Popover title='常用语' trigger='click'
-                       content={fastItems}
-                       visible={fastModalOpen}
-                       onVisibleChange={this.handleFastVisiable}>
-                <div className='fastWords' onClick={this.fastClick}>常</div>
-              </Popover>
-            </div>
-            <div className='gray-line' style={{ height: '6px' }}></div>
-            <div className='menuParent'>
-              <div className={takeoverAble ? 'menuItem' : 'displayNone'}
-                   onClick={this.approvalTakeover}>接管
-              </div>
-              <div className={takeoverAble ? '' : 'displayNone'}
-                   style={{
-                     background: '#cccccc',
-                     width: '1px',
-                     height: '24px',
-                   }}></div>
-
-              <div className={agreeAble ? 'menuItem' : 'displayNone'}
-                   onClick={this.approvalAgree}>同意
-              </div>
-              <div className={agreeAble ? '' : 'displayNone'}
-                   style={{
-                     background: '#cccccc',
-                     width: '1px',
-                     height: '24px',
-                   }}></div>
-
-              <div className={disagreeAble ? 'menuItem' : 'displayNone'}
-                   onClick={this.approvalDisagree}>不同意
-              </div>
-              <div className={disagreeAble ? '' : 'displayNone'}
-                   style={{
-                     background: '#cccccc',
-                     width: '1px',
-                     height: '24px',
-                   }}></div>
-
-              <div className={approvalStatus === 0 ? 'menuItem' : 'displayNone'}
-                   onClick={this.moreMenu}>更多
-              </div>
-
-              {/*<div className={(approvalStatus === 0 && !takeoverAble)
-                ? 'menuItem'
-                : 'displayNone'}
-                   onClick={this.approvalChange}>变更
-              </div>
-              <div className={(approvalStatus === 0 && !takeoverAble)
-                ? ''
-                : 'displayNone'}
-                   style={{
-                     background: '#cccccc',
-                     width: '1px',
-                     height: '24px',
-                   }}></div>
-
-              <div className={approvalStatus === 0 ? 'menuItem' : 'displayNone'}
-                   onClick={this.loadNextProcess}>下一条
-              </div>*/}
-            </div>
-          </div>
+          (approvalAble == true) ? (
+              //待审批,且可操作
+              <div className={optionAble ? 'bottomMenu' : 'displayNone'}>
+                <div className='gray-line' style={{ height: '2px' }}></div>
+                <div className='editLayout'>
+                  <Icon disabled name='edit'/>
+                  <TextArea className='editInput'
+                            value={approvalContent}
+                            placeholder='请输入审批意见...'
+                            onChange={this.approvalEdit}/>
+                  <Popover title='常用语' trigger='click'
+                           content={fastItems}
+                           visible={fastModalOpen}
+                           onVisibleChange={this.handleFastVisiable}>
+                    <div className='fastWords' onClick={this.fastClick}>常</div>
+                  </Popover>
+                </div>
+                <div className='gray-line' style={{ height: '6px' }}></div>
+                <div className='menuParent'>
+                  <div className={takeoverAble ? 'menuItem' : 'displayNone'}
+                       onClick={this.approvalTakeover}>接管
+                  </div>
+                  <div className={takeoverAble ? '' : 'displayNone'}
+                       style={{
+                         background: '#cccccc',
+                         width: '1px',
+                         height: '24px',
+                       }}></div>
+
+                  <div className={agreeAble ? 'menuItem' : 'displayNone'}
+                       onClick={this.approvalAgree}>同意
+                  </div>
+                  <div className={agreeAble ? '' : 'displayNone'}
+                       style={{
+                         background: '#cccccc',
+                         width: '1px',
+                         height: '24px',
+                       }}></div>
+
+                  <div className={disagreeAble ? 'menuItem' : 'displayNone'}
+                       onClick={this.approvalDisagree}>不同意
+                  </div>
+                  <div className={disagreeAble ? '' : 'displayNone'}
+                       style={{
+                         background: '#cccccc',
+                         width: '1px',
+                         height: '24px',
+                       }}></div>
+
+                  <div
+                    className={approvalStatus === 0 ? 'menuItem' : 'displayNone'}
+                    onClick={this.moreMenu}>更多
+                  </div>
+                </div>
+              </div>)
+            : ((mType == 2) ? (
+                //mType=2 我发起的单据 操作菜单
+                <div className={optionAble ? 'bottomMenu' : 'displayNone'}>
+                  <div className='gray-line' style={{ height: '2px' }}></div>
+                  <div className='menuParent'>
+                    {/*<div className={approvalStatus === 0
+                      ? 'menuItem'
+                      : 'displayNone'}
+                         onClick={this.urgeToApproval}>催办
+                    </div>
+                    <div className={approvalStatus === 0 ? '' : 'displayNone'}
+                         style={{
+                           background: '#cccccc',
+                           width: '1px',
+                           height: '24px',
+                         }}></div>
+
+                    <div className={revokeAble ? 'menuItem' : 'displayNone'}
+                         onClick={this.revokeApproval}>撤回
+                    </div>
+                    <div className={revokeAble ? '' : 'displayNone'}
+                         style={{
+                           background: '#cccccc',
+                           width: '1px',
+                           height: '24px',
+                         }}></div>*/}
+
+                    <div
+                      className={'menuItem'}
+                      onClick={this.loadNextMine}>下一条
+                    </div>
+                  </div>
+                </div>
+              ) : (
+                (mType == 1) ? (
+                  //【我的审批】-【已审批】
+                  <div className={optionAble ? 'bottomMenu' : 'displayNone'}>
+                    <div className='gray-line' style={{ height: '2px' }}></div>
+                    <div className='menuParent'>
+                      <div
+                        className={'menuItem'}
+                        onClick={this.loadNextMine}>下一条
+                      </div>
+                    </div>
+                  </div>
+                ) : ''
+              )
+            )
         }
         {/*变更处理人弹出框*/}
         {this.getChangeModal()}
@@ -578,38 +612,7 @@ class Approval extends Component {
 
   initPageState = () => {
     this.initData()
-    this.setState({
-        approvalContent: '',
-        fastModalOpen: false,
-        approvalIndex: 0,
-        loading: true,
-        finished: false,
-        finishSuccess: true,
-        finishMsg: '审批流程结束',
-        disagreeAble: true,//不同意按钮是否显示
-        agreeAble: true,//同意按钮是否显示
-        takeoverAble: false,//接管按钮是否显示
-        changeAble: false,//变更处理人按钮是否显示
-        optionAble: false,//底部审批操作布局是否显示
-        nodesTagAble: false,//审批节点切换是否显示
-
-        titleApproval: {
-          caption: '',
-        },
-        historyNodes: [],//历史审批
-        mainList: [],//主表
-        detailList: [],//从表
-        setuptasList: [],//历史审批要点
-        enclosureList: [],//附件
-        nodeList: [],//审批节点
-        pointsList: [],//要点
-
-        changeModalOpen: false,//变更处理人弹框是否显示
-        changeDataSource: new ListView.DataSource({
-          rowHasChanged: (row1, row2) => row1 !== row2,
-        }),//变更处理人列表
-      },
-    )
+    this.setState(defaultApprovalState)
   }
 
   childStateListener = (type, index, value, isDbfind) => {
@@ -641,6 +644,104 @@ class Approval extends Component {
     }
   }
 
+  /**
+   * 获取下一条我发起的/已审批单据
+   */
+  loadNextMine = () => {
+    Toast.loading('正在获取下一条单据', 0)
+    let type = 'alreadyDo'
+    if (mType == 1) {
+      type = 'alreadyDo'
+    } else if (mType == 2) {
+      type = 'alreadyLaunch'
+    }
+    fetchPost(mBaseUrl + '/uapproval/common/getNextApprovalProcess.action', {
+      taskId: mNodeId,
+      master: mMaster,
+      type: type,
+      _noc: 1,
+    }).then(response => {
+      Toast.hide()
+      let nextNode = getIntValue(response, 'nodeId')
+      if (nextNode > 0) {
+        mNodeId = nextNode
+        this.toNextNode()
+      } else {
+        message.warn('没有下一条单据')
+      }
+    }).catch(error => {
+      Toast.hide()
+      if (typeof error === 'string') {
+        message.error(error)
+      } else {
+        message.error('单据获取失败')
+      }
+    })
+  }
+
+  /**
+   * 催办
+   */
+  urgeToApproval = () => {
+    Toast.loading('正在催办', 0)
+    fetchPost(mBaseUrl + '/uapproval/common/urgedDeal.action', {
+      caller: mApprovalRecord.caller,
+      id: mApprovalRecord.id,
+    }).then(response => {
+      Toast.hide()
+      message.success('催办成功')
+    }).catch(error => {
+      Toast.hide()
+      if (typeof error === 'string') {
+        message.error(error)
+      } else {
+        message.error('催办失败')
+      }
+    })
+  }
+
+  /**
+   * 撤回单据
+   */
+  revokeApproval = () => {
+    alert('提示', '单据将反提交,确认撤回?', [
+      { text: '取消', onPress: () => {} },
+      {
+        text: '确定', onPress: () => {
+          Toast.loading('正在撤回单据', 0)
+          fetchPost(mBaseUrl + '/uapproval/common/cancelAprroval.action', {
+            caller: mApprovalRecord.caller,
+            id: mApprovalRecord.id,
+          }).then(response => {
+            Toast.hide()
+            message.success('单据撤回成功')
+            this.props.history.replace('/approvalAdd/'
+              + mApprovalRecord.caller
+              + '/' + mMaster
+              + '/' + mApprovalRecord.id)
+            clearSendState({
+              searchKey: this.props.homeState.sendState
+                ? ''
+                : this.props.homeState.sendState.searchKey,
+            })()
+          }).catch(error => {
+            Toast.hide()
+            if (typeof error === 'string') {
+              message.error(error)
+            } else {
+              message.error('单据撤回失败')
+            }
+          })
+        },
+      },
+    ])
+
+  }
+
+  /**
+   * 附件被选择
+   * @param index
+   */
   onEnclosureSelect = (index) => {
     const { enclosureList } = this.state
     if (!isObjEmpty(enclosureList) && enclosureList.length > index) {
@@ -774,9 +875,8 @@ class Approval extends Component {
               })
             } else {
               this.setState({
-                approvalStatus: ((mType === undefined || mType == 0)
-                  && (isObjEmpty(mApprovalRecord.currentNodeMan)
-                    || mEmcode == mApprovalRecord.currentNodeMan)) ? 0 : 4,
+                approvalStatus: ((isObjEmpty(mApprovalRecord.currentNodeMan)
+                  || mEmcode == mApprovalRecord.currentNodeMan)) ? 0 : 4,
               })
             }
           }
@@ -832,22 +932,23 @@ class Approval extends Component {
   }
 
   getformandgriddata = () => {
-    fetchGet(mBaseUrl + '/mobile/common/getformandgriddata.action',
+    fetchPost(mBaseUrl + '/uapproval/common/getformandgriddata.action',
       {
         'caller': mApprovalRecord.caller,
         'master': mMaster,
         'id': mApprovalRecord.id,
         'isprocess': 1,
         'config': 1,
-        // 'sessionId': mSessionId,
-        // 'sessionUser': mEmcode,
       }, {
         // 'Cookie': 'JSESSIONID=' + mSessionId
       }).then((response) => {
       let result = response
       let datas = result.datas
       if (!isObjNull(datas)) {
-
+        //单据是否允许【撤回】
+        this.setState({
+          revokeAble: datas.allowcancel,
+        })
         //主表数据
         let formdatas = datas.formdata
         let formconfigs = datas.formconfigs
@@ -2076,7 +2177,7 @@ class Approval extends Component {
   }
 
   /**
-   * 跳转下一条审批数据
+   * 跳转下一条审批数据
    */
   toNextNode () {
     message.loading('跳转下一条审批单据', 1)
@@ -2088,12 +2189,20 @@ class Approval extends Component {
       + '%22%7D')
     this.initPageState()
     this.getCurrentNode()
-    saveReceiveState({
-      scrollTop: 0,
-      listData: [],
-      hasMore1: true,
-      pageIndex: 1,
-    })()
+    if (mType == 0) {
+      saveReceiveState({
+        scrollTop: 0,
+        listData: [],
+        hasMore1: true,
+        pageIndex: 1,
+      })()
+    } else if (mType == 2) {
+      clearSendState({
+        searchKey: this.props.homeState.sendState
+          ? ''
+          : this.props.homeState.sendState.searchKey,
+      })()
+    }
   }
 
   /**

+ 47 - 6
uas-office-web/wxuasapproval/src/pages/approval/ApprovalAdd.jsx

@@ -11,6 +11,7 @@ import {
   strContain,
 } from '../../utils/common'
 import { message } from 'antd'
+import { Prompt } from 'react-router-dom'
 import {
   Toast,
   List,
@@ -56,8 +57,8 @@ let mShowBillModels, mFormBillModels, mUpdateBillModels, mAllBillModels
 let mBaseUrl = window.location.origin
   + (process.env.REACT_APP_ROUTER_BASE_NAME || '/ERP')
   // && 'http://yrkj.usoftchina.com:9443/uas'
-// && 'http://erp.yitoa.com:8888/ERP'
-// && 'http://29226oq576.qicp.vip/erp'
+  // && 'http://erp.yitoa.com:8888/ERP'
+  // && 'http://29226oq576.qicp.vip/erp'
 
 export default class ApprovalAdd extends Component {
 
@@ -71,6 +72,7 @@ export default class ApprovalAdd extends Component {
         rowHasChanged: (row1, row2) => row1 !== row2,
       }),
       selectModel: {},
+      promptAble: false,
     }
   }
 
@@ -82,6 +84,9 @@ export default class ApprovalAdd extends Component {
     if (isObjEmpty(mId)) {
       mId = 0
     }
+    this.setState({
+      promptAble: mId > 0,
+    })
     if (isObjEmpty(mCaller)) {
       message.error('单据caller为空,单据获取失败')
     } else {
@@ -93,6 +98,7 @@ export default class ApprovalAdd extends Component {
   componentWillUnmount () {
     Toast.hide()
     this.deleteAlert && this.deleteAlert.close()
+    this.promptAlert && this.promptAlert.close()
   }
 
   render () {
@@ -156,6 +162,8 @@ export default class ApprovalAdd extends Component {
     }
     return (
       <div className='approval-add-root'>
+        {/*<Prompt message={this.handlePrompt}*/}
+        {/*        when={this.state.promptAble}/>*/}
         <div className='approval-add-root' style={{ flex: 1 }}>
           <List>
             {formItems}
@@ -176,6 +184,39 @@ export default class ApprovalAdd extends Component {
     )
   }
 
+  /**
+   * 处理返回事件
+   * @param location
+   */
+  handlePrompt = location => {
+    if (mId > 0) {
+      this.promptAlert && this.promptAlert.close()
+      this.promptAlert = Modal.alert('提示', '退出后,当前单据将被删除,确定退出并删除?', [
+        {
+          text: '取消', onPress: () => {
+            this.setState({
+              promptAble: true,
+            })
+          },
+        },
+        {
+          text: '确定', onPress: () => {
+            fetchPost(mBaseUrl + '/uapproval/common/cancelOrder.action', {
+              caller: mCaller,
+              id: mId,
+            })
+            this.setState({
+              promptAble: false,
+            })
+            this.props.history.goBack()
+          },
+        }])
+      return false
+    } else {
+      return true
+    }
+  }
+
   /**
    * 放大镜弹框
    * @returns {*}
@@ -821,7 +862,7 @@ export default class ApprovalAdd extends Component {
       this.props.history.replace('/approval/%7B%22' +
         'master%22%3A%22' + mMaster
         + '%22%2C%22nodeId%22%3A' + nodeid
-        + '%2C%22type%22%3A' + 1
+        + '%2C%22type%22%3A' + 2
         + '%2C%22baseUrl%22%3A%22' + encodeURIComponent(mBaseUrl)
         + '%22%7D')
     }
@@ -1154,9 +1195,9 @@ export default class ApprovalAdd extends Component {
             }
           } else {
             let billGroupModel = new BillGroupModel()
-            billGroupModel.groupIndex = index + modelMap.keys.length
-            billGroupModel.gridIndex = modelMap.keys.length + 1
-            billGroupModel.group = `明细${modelMap.keys.length + 1}`
+            billGroupModel.groupIndex = index + Object.keys(modelMap).length
+            billGroupModel.gridIndex = Object.keys(modelMap).length + 1
+            billGroupModel.group = `明细${Object.keys(modelMap).length + 1}`
             billGroupModel.lastInType = true
             billGroupModel.form = false
 

+ 6 - 6
uas-office-web/wxuasapproval/src/pages/approval/ApprovalHome.jsx

@@ -38,9 +38,9 @@ let mSendIndex = 0
 
 let mBaseUrl = window.location.origin
   + (process.env.REACT_APP_ROUTER_BASE_NAME || '/ERP')
-// && 'http://yrkj.usoftchina.com:9443/uas'
-// && 'http://erp.yitoa.com:8888/ERP'
-// && 'http://29226oq576.qicp.vip/erp'
+  // && 'http://yrkj.usoftchina.com:9443/uas'
+  // && 'http://erp.yitoa.com:8888/ERP'
+  // && 'http://29226oq576.qicp.vip/erp'
 
 class ApprovalHome extends Component {
 
@@ -601,7 +601,7 @@ class ApprovalHome extends Component {
         ref={el => {
           this.todoTab = el
         }}
-        loadMore={this.loadTodoList.bind(this,undefined)}
+        loadMore={this.loadTodoList.bind(this, undefined)}
         hasMore={this.props.homeState.receiveState.hasMore1}
         loader={<LoadingMore/>}
         threshold={1}
@@ -629,7 +629,7 @@ class ApprovalHome extends Component {
         ref={el => {
           this.doneTab = el
         }}
-        loadMore={this.loadDoneList.bind(this,undefined)}
+        loadMore={this.loadDoneList.bind(this, undefined)}
         hasMore={this.props.homeState.receiveState.hasMore2}
         loader={<LoadingMore/>}
         threshold={1}
@@ -761,7 +761,7 @@ class ApprovalHome extends Component {
     this.props.history.push('/approval/%7B%22' +
       'master%22%3A%22' + currentmaster
       + '%22%2C%22nodeId%22%3A' + approval.JP_NODEID
-      + '%2C%22type%22%3A' + 1
+      + '%2C%22type%22%3A' + 2
       + '%2C%22baseUrl%22%3A%22' + encodeURIComponent(mBaseUrl)
       + '%22%7D')
   }