|
|
@@ -4,9 +4,22 @@
|
|
|
*/
|
|
|
|
|
|
import React, { Component } from 'react'
|
|
|
-import { isObjEmpty, isObjNull } from '../../utils/common'
|
|
|
+import {
|
|
|
+ getParenthesesStr,
|
|
|
+ isObjEmpty,
|
|
|
+ isObjNull,
|
|
|
+ strContain,
|
|
|
+} from '../../utils/common'
|
|
|
import { message } from 'antd'
|
|
|
-import { Toast, List, Button, Modal, Checkbox } from 'antd-mobile'
|
|
|
+import {
|
|
|
+ Toast,
|
|
|
+ List,
|
|
|
+ Button,
|
|
|
+ Modal,
|
|
|
+ Checkbox,
|
|
|
+ ListView,
|
|
|
+ SearchBar,
|
|
|
+} from 'antd-mobile'
|
|
|
import { fetchGet, fetchPost } from '../../utils/fetchRequest'
|
|
|
import BillModel, {
|
|
|
TYPE_ADD,
|
|
|
@@ -19,10 +32,13 @@ import FormInput from '../../components/approvalAdd/FormInput'
|
|
|
import FormTitle from '../../components/approvalAdd/FormTitle'
|
|
|
import FormAdd from '../../components/approvalAdd/FormAdd'
|
|
|
import FormImage from '../../components/approvalAdd/FormImage'
|
|
|
+import EmployeeItem from '../../components/employeeItem/EmployeeItem'
|
|
|
|
|
|
const alert = Modal.alert
|
|
|
const CheckboxItem = Checkbox.CheckboxItem
|
|
|
|
|
|
+const SELECT_APPROVAL = 'select_approval'
|
|
|
+
|
|
|
let mCaller//当前单据的Caller
|
|
|
let mId//当前单据拥有的id,新增默认为0 如果mid为-1,说明保存时候使用更新的接口
|
|
|
let mMaster
|
|
|
@@ -33,12 +49,15 @@ let mStatusField//状态字段
|
|
|
let mDetailMainKeyField//从表
|
|
|
let mDefaultMap
|
|
|
|
|
|
+let mModalList = []
|
|
|
+
|
|
|
let mShowBillModels, mFormBillModels, mUpdateBillModels, mAllBillModels
|
|
|
|
|
|
let mBaseUrl = window.location.origin
|
|
|
+ (process.env.REACT_APP_ROUTER_BASE_NAME || '/ERP')
|
|
|
- // && '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'
|
|
|
|
|
|
export default class ApprovalAdd extends Component {
|
|
|
|
|
|
@@ -48,7 +67,9 @@ export default class ApprovalAdd extends Component {
|
|
|
this.state = {
|
|
|
billGroupModelList: [],
|
|
|
modalOpen: false,
|
|
|
- modalList: [],
|
|
|
+ modalDataSource: new ListView.DataSource({
|
|
|
+ rowHasChanged: (row1, row2) => row1 !== row2,
|
|
|
+ }),
|
|
|
selectModel: {},
|
|
|
}
|
|
|
}
|
|
|
@@ -75,8 +96,7 @@ export default class ApprovalAdd extends Component {
|
|
|
}
|
|
|
|
|
|
render () {
|
|
|
- const { billGroupModelList, modalOpen, modalList, selectModel } = this.state
|
|
|
- let selectType = selectModel.type
|
|
|
+ const { billGroupModelList } = this.state
|
|
|
let formItems = []
|
|
|
if (!isObjEmpty(billGroupModelList)) {
|
|
|
//从表的起始Groupindex
|
|
|
@@ -118,11 +138,6 @@ export default class ApprovalAdd extends Component {
|
|
|
childIndex={i}/>,
|
|
|
)
|
|
|
break
|
|
|
- // case 110:
|
|
|
- // formItems.push(
|
|
|
- // <FormAdd/>,
|
|
|
- // )
|
|
|
- break
|
|
|
default:
|
|
|
break
|
|
|
}
|
|
|
@@ -156,51 +171,137 @@ export default class ApprovalAdd extends Component {
|
|
|
}}
|
|
|
onClick={this.onSubmitClick}>提交</Button>}
|
|
|
|
|
|
- <Modal visible={modalOpen}
|
|
|
- animationType={'slide-up'}
|
|
|
- onClose={() => {
|
|
|
- this.setState({
|
|
|
- modalOpen: false,
|
|
|
- })
|
|
|
- }}
|
|
|
- title={selectModel.caption}
|
|
|
- popup
|
|
|
- >
|
|
|
- <List className='form-common-modal-root'>
|
|
|
- {modalList && (
|
|
|
- modalList.map((modalObj, index) => (
|
|
|
- (selectType === 'MF')
|
|
|
- ? (<CheckboxItem key={index}
|
|
|
- checked={modalObj.isSelected == true}
|
|
|
- onChange={e => {
|
|
|
- let checked = e.target.checked
|
|
|
- modalList[index].isSelected = checked
|
|
|
- this.setState({
|
|
|
- modalList,
|
|
|
- })
|
|
|
- }}>{modalObj.value}</CheckboxItem>)
|
|
|
- : (<List.Item key={index}
|
|
|
- wrap
|
|
|
- onClick={this.onDbfindSelect.bind(this,
|
|
|
- selectModel,
|
|
|
- index)}>{modalObj.value}</List.Item>)
|
|
|
-
|
|
|
- ))
|
|
|
- )}
|
|
|
- </List>
|
|
|
- </Modal>
|
|
|
+ {this.getDbfindModal()}
|
|
|
</div>
|
|
|
)
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 放大镜弹框
|
|
|
+ * @returns {*}
|
|
|
+ */
|
|
|
+ getDbfindModal () {
|
|
|
+ const { modalOpen, modalDataSource, selectModel } = this.state
|
|
|
+ let selectType = selectModel.type
|
|
|
+ return <Modal visible={modalOpen}
|
|
|
+ animationType={'slide-up'}
|
|
|
+ onClose={() => {
|
|
|
+ this.setState({
|
|
|
+ modalOpen: false,
|
|
|
+ })
|
|
|
+ if (selectModel.nodeId) {
|
|
|
+ this.toApprovalDetail(selectModel.nodeId)
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ title={selectModel.caption}
|
|
|
+ popup
|
|
|
+ >
|
|
|
+ <SearchBar
|
|
|
+ placeholder={'搜索'}
|
|
|
+ maxLength={16}
|
|
|
+ onChange={value => {
|
|
|
+ if (isObjEmpty(value)) {
|
|
|
+ this.setState({
|
|
|
+ modalDataSource: modalDataSource.cloneWithRows(
|
|
|
+ mModalList),
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ let searchList = []
|
|
|
+ if (!isObjEmpty(mModalList)) {
|
|
|
+ mModalList.forEach(item => {
|
|
|
+ if (!isObjNull(item)
|
|
|
+ && (
|
|
|
+ strContain(item.value, value)
|
|
|
+ || strContain(item.display, value)
|
|
|
+ || strContain(item.name, value)
|
|
|
+ )) {
|
|
|
+ searchList.push(item)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ this.setState({
|
|
|
+ modalDataSource: modalDataSource.cloneWithRows(
|
|
|
+ searchList),
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ onClear={value => {
|
|
|
+ this.setState({
|
|
|
+ modalDataSource: modalDataSource.cloneWithRows(
|
|
|
+ mModalList),
|
|
|
+ })
|
|
|
+ }}
|
|
|
+ onCancel={() => {
|
|
|
+ this.setState({
|
|
|
+ modalDataSource: modalDataSource.cloneWithRows(
|
|
|
+ mModalList),
|
|
|
+ })
|
|
|
+ }}
|
|
|
+ />
|
|
|
+ <ListView
|
|
|
+ dataSource={modalDataSource}
|
|
|
+ renderRow={(rowData, sectionID, rowID) => {
|
|
|
+ switch (selectType) {
|
|
|
+ case SELECT_APPROVAL:
|
|
|
+ return <List.Item
|
|
|
+ key={rowID}
|
|
|
+ wrap
|
|
|
+ onClick={this.onEmployeeSelect.bind(this,
|
|
|
+ rowData)}>
|
|
|
+ <EmployeeItem employee={rowData}/>
|
|
|
+ </List.Item>
|
|
|
+ case 'MF':
|
|
|
+ return <CheckboxItem
|
|
|
+ key={rowID}
|
|
|
+ checked={rowData.isSelected == true}
|
|
|
+ onChange={e => {
|
|
|
+ let checked = e.target.checked
|
|
|
+ rowData.isSelected = checked
|
|
|
+ this.setState({
|
|
|
+ modalDataSource,
|
|
|
+ })
|
|
|
+ }}>{rowData.value}</CheckboxItem>
|
|
|
+ default:
|
|
|
+ return <List.Item
|
|
|
+ key={rowID}
|
|
|
+ wrap
|
|
|
+ onClick={this.onDbfindSelect.bind(this,
|
|
|
+ selectModel,
|
|
|
+ rowData)}>{rowData.value}</List.Item>
|
|
|
+ }
|
|
|
+ }}
|
|
|
+ style={{
|
|
|
+ height: '72vh',
|
|
|
+ overflow: 'auto',
|
|
|
+ }}
|
|
|
+ pageSize={10}
|
|
|
+ onScroll={() => {}}
|
|
|
+ scrollRenderAheadDistance={500}
|
|
|
+ />
|
|
|
+ </Modal>
|
|
|
+ }
|
|
|
+
|
|
|
+ onEmployeeSelect = rowData => {
|
|
|
+ this.setState({
|
|
|
+ modalOpen: false,
|
|
|
+ modalDataSource: new ListView.DataSource({
|
|
|
+ rowHasChanged: (row1, row2) => row1 !== row2,
|
|
|
+ }),
|
|
|
+ selectModel: {},
|
|
|
+ })
|
|
|
+ let emcode = rowData.EM_CODE
|
|
|
+ let nodeId = rowData.nodeId
|
|
|
+ this.approvalTakeover(emcode, nodeId)
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 放大镜选项选中
|
|
|
*/
|
|
|
- onDbfindSelect = (selectModel, index) => {
|
|
|
- const { billGroupModelList, modalList } = this.state
|
|
|
+ onDbfindSelect = (selectModel, rowData) => {
|
|
|
+ const { billGroupModelList } = this.state
|
|
|
let groupIndex = selectModel.groupIndex
|
|
|
let childIndex = selectModel.childIndex
|
|
|
- let selectData = modalList[index]
|
|
|
+ let selectData = rowData
|
|
|
if (selectModel.type === 'C') {
|
|
|
if (!isObjEmpty(billGroupModelList) &&
|
|
|
!isObjNull(billGroupModelList[groupIndex])) {
|
|
|
@@ -270,6 +371,30 @@ export default class ApprovalAdd extends Component {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //接管单据
|
|
|
+ approvalTakeover = (emcode, nodeId) => {
|
|
|
+ Toast.loading('正在指定审批人', 0)
|
|
|
+ fetchPost(mBaseUrl + '/common/takeOverTask.action', {
|
|
|
+ em_code: emcode,
|
|
|
+ nodeId: nodeId,
|
|
|
+ master: mMaster,
|
|
|
+ _noc: 1,
|
|
|
+ }, {
|
|
|
+ // 'Cookie': 'JSESSIONID=' + mSessionId
|
|
|
+ }).then(response => {
|
|
|
+ Toast.hide()
|
|
|
+ message.success('指定审批人成功')
|
|
|
+ this.toApprovalDetail(nodeId)
|
|
|
+ }).catch(error => {
|
|
|
+ Toast.hide()
|
|
|
+ if (typeof error === 'string') {
|
|
|
+ message.error(error)
|
|
|
+ } else {
|
|
|
+ message.error('指定审批人失败')
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 添加明细组
|
|
|
* @param groupIndex
|
|
|
@@ -506,12 +631,13 @@ export default class ApprovalAdd extends Component {
|
|
|
localData.obj = jsonMap
|
|
|
dbList.push(localData)
|
|
|
})
|
|
|
-
|
|
|
+ mModalList = dbList
|
|
|
if (dbList.length === 0) {
|
|
|
message.error('选项数据为空')
|
|
|
} else {
|
|
|
this.setState({
|
|
|
- modalList: dbList,
|
|
|
+ modalDataSource: this.state.modalDataSource.cloneWithRows(
|
|
|
+ mModalList),
|
|
|
modalOpen: true,
|
|
|
})
|
|
|
}
|
|
|
@@ -564,11 +690,13 @@ export default class ApprovalAdd extends Component {
|
|
|
}
|
|
|
combList.push(comb)
|
|
|
}
|
|
|
+ mModalList = combList
|
|
|
if (combList.length === 0) {
|
|
|
message.error('选项数据为空')
|
|
|
} else {
|
|
|
this.setState({
|
|
|
- modalList: combList,
|
|
|
+ modalDataSource: this.state.modalDataSource.cloneWithRows(
|
|
|
+ mModalList),
|
|
|
modalOpen: true,
|
|
|
})
|
|
|
}
|
|
|
@@ -651,31 +779,21 @@ export default class ApprovalAdd extends Component {
|
|
|
}).then(response => {
|
|
|
Toast.hide()
|
|
|
if (response && response.success == true) {
|
|
|
+ let nodeid = response.nodeId
|
|
|
if (mId <= 0) {
|
|
|
mId = response[mKeyField] || response.keyvalue
|
|
|
let formcode = response.formcode
|
|
|
let isSave = response.isSave
|
|
|
if (isSave == true || isSave == 'true') {
|
|
|
-
|
|
|
+ this.toApprovalDetail(nodeid)
|
|
|
} else {
|
|
|
-
|
|
|
+ this.judgeApproval(nodeid, mId, formcode)
|
|
|
}
|
|
|
message.success('单据提交成功')
|
|
|
} else {
|
|
|
+ this.judgeApproval(nodeid, mId, '')
|
|
|
message.success('单据提交成功')
|
|
|
}
|
|
|
- let nodeid = response.nodeId
|
|
|
- this.props.history.goBack()
|
|
|
- if (!isObjEmpty(nodeid)) {
|
|
|
- setTimeout(() => {
|
|
|
- this.props.history.push('/approval/%7B%22' +
|
|
|
- 'master%22%3A%22' + mMaster
|
|
|
- + '%22%2C%22nodeId%22%3A' + nodeid
|
|
|
- + '%2C%22type%22%3A' + 1
|
|
|
- + '%2C%22baseUrl%22%3A%22' + encodeURIComponent(mBaseUrl)
|
|
|
- + '%22%7D')
|
|
|
- }, 100)
|
|
|
- }
|
|
|
} else {
|
|
|
message.error('单据提交失败')
|
|
|
}
|
|
|
@@ -694,6 +812,67 @@ export default class ApprovalAdd extends Component {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ toApprovalDetail (nodeid) {
|
|
|
+ if (!isObjEmpty(nodeid)) {
|
|
|
+ this.props.history.replace('/approval/%7B%22' +
|
|
|
+ 'master%22%3A%22' + mMaster
|
|
|
+ + '%22%2C%22nodeId%22%3A' + nodeid
|
|
|
+ + '%2C%22type%22%3A' + 1
|
|
|
+ + '%2C%22baseUrl%22%3A%22' + encodeURIComponent(mBaseUrl)
|
|
|
+ + '%22%7D')
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ judgeApproval = (oldNodeId, keyvalue, formcode) => {
|
|
|
+ Toast.loading('正在触发审批流', 0)
|
|
|
+ fetchGet(mBaseUrl + '/uapproval/common/getMultiNodeAssigns.action', {
|
|
|
+ condition: '1=1',
|
|
|
+ caller: mCaller,
|
|
|
+ id: keyvalue,
|
|
|
+ }).then(response => {
|
|
|
+ Toast.hide()
|
|
|
+ if (!isObjEmpty(response.assigns)) {
|
|
|
+ let assignArray = response.assigns
|
|
|
+ let assignObj = assignArray[0]
|
|
|
+ let nodeid = assignObj ? (assignObj.JP_NODEID || '') : ''
|
|
|
+ let candidates = assignObj ? (assignObj.JP_CANDIDATES || []) : []
|
|
|
+ if (!isObjEmpty(nodeid) && !isObjEmpty(candidates)) {
|
|
|
+ let candidateList = []
|
|
|
+ candidates.forEach(item => {
|
|
|
+ let candidate = item
|
|
|
+ candidate.id = keyvalue
|
|
|
+ candidate.formcode = formcode
|
|
|
+ candidate.nodeId = nodeid
|
|
|
+
|
|
|
+ candidateList.push(candidate)
|
|
|
+ })
|
|
|
+ this.setState({
|
|
|
+ modalDataSource: this.state.modalDataSource.cloneWithRows(
|
|
|
+ candidateList),
|
|
|
+ selectModel: {
|
|
|
+ caption: '选择审批人',
|
|
|
+ type: SELECT_APPROVAL,
|
|
|
+ nodeId: nodeid,
|
|
|
+ },
|
|
|
+ modalOpen: true,
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ message.success('审批流触发成功')
|
|
|
+ this.toApprovalDetail(nodeid)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ this.toApprovalDetail(oldNodeId)
|
|
|
+ }
|
|
|
+ }).catch(error => {
|
|
|
+ Toast.hide()
|
|
|
+ if (typeof error === 'string') {
|
|
|
+ message.error(error)
|
|
|
+ } else {
|
|
|
+ message.error('审批流触发失败')
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 判断主表字段必填情况,拼接主表字段
|
|
|
* @param formFields
|