Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
zhangzhonghua
/
BoneHouse_Business_APP
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
b0ecec3d
authored
Jan 12, 2021
by
Denglingling
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
新增器械消耗费用明细相关处理
parent
64a0d720
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
693 additions
and
97 deletions
app/Router.js
app/action/EquipAction.js
app/action/LoginAction.js
app/base/ActionTypes.js
app/base/BaseConstants.js
app/containers/common/listDataComponent/PageListArrow.js
app/containers/equipConsu/EquipConsuPage.js
app/containers/equipConsu/module/ChargeDetailsPage.js
app/containers/equipConsu/module/ConsumDetailsPage.js
app/containers/equipConsu/module/FillUnitPricePage.js
app/containers/equipConsu/module/ShowDetailPage.js
app/network/RequestUtils.js
app/reducers/module/equip.js
app/Router.js
View file @
b0ecec3d
...
...
@@ -10,7 +10,8 @@ import SelfOrderPage from './containers/selfOrder/SelfOrderPage';
import
ChooseProductPage
from
'./containers/selfOrder/module/ChooseProductPage'
;
import
EditThirdLevelPage
from
'./containers/selfOrder/module/EditThirdLevelPage'
;
import
EquipConsuPage
from
'./containers/equipConsu/EquipConsuPage'
;
import
ConsumDetailsPage
from
'./containers/equipConsu//module/ConsumDetailsPage'
;
import
ConsumDetailsPage
from
'./containers/equipConsu/module/ConsumDetailsPage'
;
import
ChargeDetailsPage
from
'./containers/equipConsu/module/ChargeDetailsPage'
;
import
FillUnitPricePage
from
'./containers/equipConsu/module/FillUnitPricePage'
;
import
ShowDetailPage
from
'./containers/equipConsu/module/ShowDetailPage'
;
import
QuickOrderPage
from
'./containers/quickOrder/QuickOrderPage'
;
...
...
@@ -31,7 +32,8 @@ const Router = createAppContainer(createStackNavigator({
ChooseProductPage
:
{
screen
:
ChooseProductPage
},
EditThirdLevelPage
:
{
screen
:
EditThirdLevelPage
},
EquipConsuPage
:
{
screen
:
EquipConsuPage
},
ConsumDetailsPage
:
{
screen
:
ConsumDetailsPage
},
ConsumDetailsPage
:
{
screen
:
ConsumDetailsPage
},
ChargeDetailsPage
:
{
screen
:
ChargeDetailsPage
},
FillUnitPricePage
:
{
screen
:
FillUnitPricePage
},
ShowDetailPage
:
{
screen
:
ShowDetailPage
},
QuickOrderPage
:
{
screen
:
QuickOrderPage
},
...
...
app/action/EquipAction.js
View file @
b0ecec3d
...
...
@@ -9,6 +9,7 @@ import {
EQUIP_SUBMIT_SUCCESS
,
EQUIP_SUBMIT_FAILURE
,
GET_SUB_DETAIL_OPTION
,
GET_CHARGE_DETAILS_OPTION
,
EQUIP_INIT_DATA
}
from
'../base/ActionTypes'
;
...
...
@@ -122,7 +123,7 @@ function requestListDataFail() {
}
}
//
获取
当前临时存储的明细
//
设置
当前临时存储的明细
export
function
getSubdetailOption
(
data
)
{
return
{
type
:
GET_SUB_DETAIL_OPTION
,
...
...
@@ -130,6 +131,14 @@ export function getSubdetailOption(data) {
}
}
// 设置当前费用明细
export
function
getCharDetailsOption
(
data
)
{
return
{
type
:
GET_CHARGE_DETAILS_OPTION
,
rawData
:
data
}
}
// 获取消耗明细 params={access_token:'', surgery_collect_number:''}
export
const
requestEquipDetails
=
async
(
global_domain_config
,
params
)
=>
{
return
await
GetRequest
(
global_domain_config
,
getUrlParams
(
'/surgery/collected_order_line/search'
,
params
))
...
...
app/action/LoginAction.js
View file @
b0ecec3d
...
...
@@ -7,15 +7,15 @@ import {
AUTO_LOGIN_FAILURE
,
SET_DOMAIN_CONFIGURATE
}
from
'../base/ActionTypes'
;
import
{
PostRequest
}
from
'../network/RequestUtils'
;
import
{
show
}
from
'../utils/Utils'
;
import
{
GetRequest
,
PostRequest
}
from
'../network/RequestUtils'
;
import
{
getUrlParams
,
show
}
from
'../utils/Utils'
;
export
function
requestLogin
(
params
)
{
return
(
dispatch
,
getState
)
=>
{
dispatch
(
logining
());
let
{
global_domain_config
}
=
getState
().
login
PostRequest
(
global_domain_config
,
'/access_token/password/search?app_code=MOBILE'
,
params
).
then
((
res
)
=>
{
console
.
log
(
'
res-------
'
,
res
)
console
.
log
(
'
登录 res=====
'
,
res
)
if
(
res
.
error_code
===
0
){
if
(
res
.
functions
&&
res
.
functions
.
length
)
{
show
(
'登录成功'
);
...
...
@@ -38,6 +38,7 @@ export function requestLogin(params) {
let
error_msg
=
err
.
error
||
'请求接口错误,请联系管理员'
show
(
error_msg
);
dispatch
(
loginFailure
())
console
.
error
(
err
)
})
}
}
...
...
@@ -86,6 +87,7 @@ export function autoLogin(params) {
return
(
dispatch
,
getState
)
=>
{
let
{
global_domain_config
}
=
getState
().
login
PostRequest
(
global_domain_config
,
'/access_token/password/search?app_code=MOBILE'
,
params
).
then
((
res
)
=>
{
console
.
log
(
'自动登录 res====='
,
res
)
if
(
res
.
error_code
===
0
){
if
(
res
.
functions
&&
res
.
functions
.
length
)
{
dispatch
(
autoLoginSuccess
(
res
));
...
...
@@ -102,6 +104,7 @@ export function autoLogin(params) {
}).
catch
((
err
)
=>
{
show
(
err
.
error
);
dispatch
(
autoLoginFailure
())
console
.
error
(
err
)
})
}
}
...
...
@@ -111,4 +114,14 @@ export function setDomainConfigurate(domainVal) {
type
:
SET_DOMAIN_CONFIGURATE
,
global_domain_config
:
domainVal
}
}
//系统配置文件查询接口 access_token profile_code
export
const
requestSysProfile
=
async
(
global_domain_config
,
params
)
=>
{
return
await
GetRequest
(
global_domain_config
,
getUrlParams
(
'/system/sys_profile/search'
,
params
))
}
//系统值集查询接口 access_token value_set_code
export
const
requestSysValueSet
=
async
(
global_domain_config
,
params
)
=>
{
return
await
GetRequest
(
global_domain_config
,
getUrlParams
(
'/system/value_set/search'
,
params
))
}
\ No newline at end of file
app/base/ActionTypes.js
View file @
b0ecec3d
...
...
@@ -39,6 +39,7 @@ export const EQUIP_SUBMIT_SUCCESS = "EQUIP_SUBMIT_SUCCESS"
export
const
EQUIP_SUBMIT_FAILURE
=
"EQUIP_SUBMIT_FAILURE"
export
const
EQUIP_INIT_DATA
=
"EQUIP_INIT_DATA"
export
const
GET_SUB_DETAIL_OPTION
=
"GET_SUB_DETAIL_OPTION"
export
const
GET_CHARGE_DETAILS_OPTION
=
"GET_CHARGE_DETAILS_OPTION"
//-----------historical order search---------------------
export
const
HISTOR_ORDER_SEARCH_NO
=
"HISTOR_ORDER_SEARCH_NO"
export
const
HISTOR_ORDER_SEARCH_DOING
=
"HISTOR_ORDER_SEARCH_DOING"
...
...
app/base/BaseConstants.js
View file @
b0ecec3d
// export const BaseUrl = "http://192.168.10.188:8200"; // https://obs.uat.sfrx.guke.tech https://sob-os.uat.sfrx.guke.tech
// export const BaseUrlOther = "http://192.168.10.188:8200"; //http://192.168.10.188:8200/v1/dingding/upload_media
// export const VERSION = '/v1'; // /api/latest
export
const
BaseUrl
=
"https://obs.uat.sfrx.guke.tech"
;
// https://obs.uat.sfrx.guke.tech https://sob-os.uat.sfrx.guke.tech
export
const
BaseUrlOther
=
"https://sob-os.uat.sfrx.guke.tech"
;
//http://192.168.10.188:8200/v1/dingding/upload_media
export
const
VERSION
=
'/api/latest'
;
//
export
const
BaseUrl
=
"https://obs.uat.guke.tech"
;
export
const
BaseUrlOther
=
"https://sob-os.uat.guke.tech"
;
export
const
VERSION
=
'/api/latest'
;
export
const
ACCESS_TOKEN
=
'201904091445193616b5e3d3a777848dda1de1a8123d0fdf9xw7t566c1S92U88'
;
//未获取到access_token时使用
// export let
\ No newline at end of file
app/containers/common/listDataComponent/PageListArrow.js
View file @
b0ecec3d
...
...
@@ -28,6 +28,7 @@ class PageListArrow extends Component {
isTitInputStyle
:
PropTypes
.
bool
,
listMaxLines
:
PropTypes
.
number
,
// 文本最大行数
listIsAudio
:
PropTypes
.
bool
,
listCellStyle
:
PropTypes
.
object
}
constructor
(
props
)
{
...
...
@@ -46,7 +47,7 @@ class PageListArrow extends Component {
render
()
{
let
{
listActOpa
,
listCallBack
,
listHasAster
,
listEditAble
,
listDefaValue
,
listItem
,
listTitle
,
listName
,
listValue
,
listHasArrow
,
listOtherInput
,
otherInput
,
otherInputCallBack
,
listInputPlace
,
inputCallBack
,
isTitInputStyle
,
listMaxLines
,
listIsAudio
}
=
this
.
props
inputCallBack
,
isTitInputStyle
,
listMaxLines
,
listIsAudio
,
listCellStyle
}
=
this
.
props
if
(
!
listMaxLines
){
listMaxLines
=
2
// 默认
}
...
...
@@ -56,7 +57,7 @@ class PageListArrow extends Component {
activeOpacity
=
{
listActOpa
}
onPress
=
{()
=>
{
return
listCallBack
?
listCallBack
()
:
''
}}
>
<
CellTextStyle
>
<
CellTextStyle
style
=
{
listCellStyle
?
listCellStyle
:
''
}
>
{
listHasAster
?
<
AsteriskTextStyle
>*<
/AsteriskTextStyle> : null
}
<
TitleTextStyle
style
=
{
isTitInputStyle
?
styles
.
cell_title
:
''
}
>
{
listItem
[
listTitle
]}
<
/TitleTextStyle
>
{
(
listEditAble
||
inputCallBack
)
?
<
ContInputTextStyle
...
...
app/containers/equipConsu/EquipConsuPage.js
View file @
b0ecec3d
...
...
@@ -144,21 +144,18 @@ class EquipConsuPage extends Component {
title
:
'耗材明细'
,
// 跳转
btnTit
:
'+添加消耗明细'
,
value
:
''
,
isJumpSubPage
:
true
,
// 跳转子页
isShowSub
:
true
,
// 是否展示子项
subOption
:
[
// {
// "id": "0",
// item_name: '人工髋关节假体-JS-HB ||| T',
// specification: '3g,Ytg-DG-SZGT',
// serial_number: '2001202001001774',
// sale_price: '360000',
// select: true
// }
]
subOption
:
[]
},
{
"id"
:
"13"
,
title
:
'费用明细'
,
// 跳转
btnTit
:
'+添加费用明细'
,
value
:
''
,
subOption
:
[]
},
{
"id"
:
"14"
,
title
:
'添加图片'
,
value
:
''
,
isAddImage
:
true
,
// 添加图片
...
...
@@ -192,11 +189,7 @@ class EquipConsuPage extends Component {
showTypePop
:
false
,
// 选择器弹窗
isSubLoding
:
false
,
// 加载中弹窗
lodingTitle
:
'加载中'
,
listCurrentOption
:
[
// 当前选择器数据
// {
// name: '测试1',
// value: '测试1'
// }
listCurrentOption
:
[
// 当前选择器数据
],
dateModelPop
:
false
,
// 日期选择器
sexTypeOption
:
[
// 性别
...
...
@@ -209,7 +202,6 @@ class EquipConsuPage extends Component {
}
],
localPhoOption
:
[
// 添加的图片
// 'file:///storage/emulated/0/Pictures/images/image-ea1a24b8-2d12-468f-ac23-e9aed20c6d31.jpg'
],
isShowImage
:
false
,
currShowImgIndex
:
0
...
...
@@ -821,6 +813,15 @@ class EquipConsuPage extends Component {
}
}
// 费用明细 点击
handleChargeDetailsCheck
()
{
let
{
listOptionData
}
=
this
.
state
this
.
props
.
navigation
.
navigate
(
'ChargeDetailsPage'
,
{
title
:
'器械消耗 - 添加明细'
,
// orderId: listOptionData[3].value
})
}
// 添加图片 点击
handleAddPicCheck
()
{
let
{
localPhoOption
,
listOptionData
}
=
this
.
state
...
...
@@ -905,7 +906,7 @@ class EquipConsuPage extends Component {
let
{
url
}
=
imgResult
.
data
localPhoOption
.
push
(
source
);
// 本地图片地址
listOptionData
[
1
3
].
uploadImgArr
.
push
(
url
)
// 服务器图片地址
listOptionData
[
1
4
].
uploadImgArr
.
push
(
url
)
// 服务器图片地址
that
.
setState
({
localPhoOption
,
listOptionData
...
...
@@ -929,7 +930,7 @@ class EquipConsuPage extends Component {
handleDelPickCheck
(
item
,
index
)
{
let
{
listOptionData
,
localPhoOption
}
=
this
.
state
localPhoOption
.
splice
(
index
,
1
)
// 删除本地地址
listOptionData
[
1
3
].
uploadImgArr
.
splice
(
index
,
1
)
// 删除服务器地址
listOptionData
[
1
4
].
uploadImgArr
.
splice
(
index
,
1
)
// 删除服务器地址
this
.
setState
({
listOptionData
,
localPhoOption
...
...
@@ -964,7 +965,7 @@ class EquipConsuPage extends Component {
return
item
})
}
tempSubOption
.
img_url
=
state
.
listOptionData
[
1
3
].
uploadImgArr
.
join
(
','
)
tempSubOption
.
img_url
=
state
.
listOptionData
[
1
4
].
uploadImgArr
.
join
(
','
)
let
params
=
{
access_token
:
props
.
token
,
data
:
{
...
tempSubOption
}
...
...
@@ -1312,57 +1313,22 @@ class EquipConsuPage extends Component {
{
state
.
listOptionData
[
12
].
subOption
.
length
?
<
View
// activeOpacity={1}
style
=
{
list_common_item
.
detail_sub_cont
}
>
<
View
style
=
{
list_common_item
.
detail_sub_tit
}
>
<
Text
style
=
{
list_common_item
.
detail_tit_text
}
>
耗材(
{
state
.
listOptionData
[
12
].
subOption
.
length
}
)
<
/Text
>
{
/* {
state.listOptionData[12].isShowSub ?
<TouchableOpacity
activeOpacity={.8}
style={list_common_item.detail_icon}
onPress={() => this.handleDetailBtmCheck()}
>
<Image style={[icon_style, list_common_item.detail_top_icon]} source={require('../../images/arr_btm.png')} />
</TouchableOpacity> :
<TouchableOpacity
activeOpacity={.8}
style={[list_common_item.detail_icon, list_common_item.detail_icon_rig]}
onPress={() => this.handleDetailRigCheck()}
>
<Image style={[icon_style, list_common_item.detail_top_icon]} source={require('../../images/arr_rig.png')} />
</TouchableOpacity>
} */
}
<
/View
>
{
state
.
listOptionData
[
12
].
isShowSub
?
<
View
style
=
{
list_common_item
.
detail_sub_inner
}
>
{
/* <ScrollView
style={list_common_item.detail_scroll}
onPress={() => {console.log('--触碰---')}}
onScrollBeginDrag={() => {console.log('--滚动---')}}
// showsVerticalScrollIndicator={false}
>
{
state.listOptionData[12].subOption.map((item, index) => {
return this.renderConDeSubItem(item, index)
})
}
</ScrollView> */
}
{
state
.
listOptionData
[
12
].
subOption
.
map
((
item
,
index
)
=>
{
return
this
.
renderConDeSubItem
(
item
,
index
)
})
}
{
state
.
listOptionData
[
12
].
subOption
.
map
((
item
,
index
)
=>
{
return
this
.
renderConDeSubItem
(
item
,
index
)
})}
<
/View> : nul
l
}
<
/View> : nul
l
}
<
View
style
=
{
list_common_item
.
detail_footer
}
>
<
TouchableOpacity
activeOpacity
=
{.
8
}
...
...
@@ -1394,6 +1360,27 @@ class EquipConsuPage extends Component {
)
}
// 返回费用明细
renderChargeDetailsItem
()
{
let
{
state
}
=
this
return
(
<
CellTextStyle
style
=
{
list_common_item
.
consu_detail
}
>
<
View
style
=
{
list_common_item
.
detail_inner
}
>
<
Text
style
=
{
list_common_item
.
detail_tit
}
>
{
state
.
listOptionData
[
13
].
title
}
<
/Text
>
<
View
style
=
{
list_common_item
.
detail_footer
}
>
<
TouchableOpacity
activeOpacity
=
{.
8
}
style
=
{
list_common_item
.
detail_btn_box
}
onPress
=
{()
=>
this
.
handleChargeDetailsCheck
()}
>
<
Text
style
=
{
list_common_item
.
detail_btn
}
>
{
state
.
listOptionData
[
13
].
btnTit
}
<
/Text
>
<
/TouchableOpacity
>
<
/View
>
<
/View
>
<
/CellTextStyle
>
)
}
// 返回添加图片
renderAddPicturesItem
()
{
let
{
state
}
=
this
...
...
@@ -1402,17 +1389,15 @@ class EquipConsuPage extends Component {
<
View
style
=
{
list_common_item
.
addpic_inner
}
>
<
Text
style
=
{
list_common_item
.
addpic_tit
}
>
添加图片
<
/Text
>
<
View
style
=
{
list_common_item
.
addpic_cont
}
>
{
state
.
localPhoOption
.
length
?
state
.
localPhoOption
.
map
((
item
,
index
)
=>
this
.
renderPicItem
(
item
,
index
)
)
:
null
}
{
state
.
localPhoOption
.
length
?
state
.
localPhoOption
.
map
((
item
,
index
)
=>
this
.
renderPicItem
(
item
,
index
)
)
:
null
}
<
TouchableOpacity
activeOpacity
=
{.
8
}
style
=
{
list_common_item
.
addpic_img_btn
}
onPress
=
{()
=>
this
.
handleAddPicCheck
()}
>
<
Image
style
=
{
icon_style
}
source
=
{
require
(
'../../images/add_icon_large.png'
)}
/
>
<
Image
style
=
{
icon_style
}
source
=
{
require
(
'../../images/add_icon_large.png'
)}
/
>
<
/TouchableOpacity
>
<
/View>
<
/View
>
...
...
@@ -1459,7 +1444,7 @@ class EquipConsuPage extends Component {
// }]
// 正式
let
zoomImages
=
[]
listOptionData
[
1
3
].
uploadImgArr
.
forEach
(
item
=>
{
listOptionData
[
1
4
].
uploadImgArr
.
forEach
(
item
=>
{
zoomImages
.
push
({
url
:
`
${
global_domain_config
}
/
${
item
}
`
})
...
...
@@ -1503,6 +1488,7 @@ class EquipConsuPage extends Component {
{
this
.
renderListItem
()}
{
this
.
renderRemarksItem
()}
{
this
.
renderConsumablesDetailsItem
()}
{
this
.
renderChargeDetailsItem
()}
{
this
.
renderAddPicturesItem
()}
{
this
.
renderZoomPicture
()}
<
FooterBtnStyle
...
...
@@ -1587,6 +1573,7 @@ const mapStateToProps = (state) => {
submit_equip_order_status
:
state
.
equip
.
submit_equip_order_status
,
equipOrderOption
:
state
.
equip
.
equipOrderOption
,
subDetOption
:
state
.
equip
.
subDetOption
,
charDetailOption
:
state
.
equip
.
charDetailOption
,
global_domain_config
:
state
.
login
.
global_domain_config
}
}
...
...
app/containers/equipConsu/module/ChargeDetailsPage.js
0 → 100644
View file @
b0ecec3d
import
React
,
{
Component
}
from
'react'
;
import
{
View
,
Text
,
StyleSheet
,
SafeAreaView
,
TouchableOpacity
,
ScrollView
,
FlatList
,
TextInput
}
from
'react-native'
;
import
{
home_background_color
,
promary_color
,
safe_view
,
list_common_item
,
placehold_text_color
,
second_text_size
,
promary_text_color
,
font_family_regular
,
font_family_medium
,
font_family_semibold
,
first_text_color
,
foundation_color
,
Width
,
pxSize
}
from
'../../../base/BaseStyle'
;
import
{
LOGIN_NO
}
from
'../../../base/ActionTypes'
;
import
StatusBarView
from
'../../common/StatusBarView'
;
import
HeadBackItem
from
'../../common/HeadBackItem'
;
import
DialogModel
from
'../../common/DialogModel'
;
import
{
show
}
from
'../../../utils/Utils'
;
import
{
getCharDetailsOption
}
from
'../../../action/EquipAction'
;
import
{
exitLoginStatus
,
requestSysValueSet
}
from
'../../../action/LoginAction'
;
import
{
connect
}
from
'react-redux'
;
import
PageListArrow
from
'../../common/listDataComponent/PageListArrow'
;
import
{
CellTextStyle
}
from
'../../common/CellTextStyle'
;
// 费用明细
class
ChargeDetailsPage
extends
Component
{
constructor
(
props
)
{
super
(
props
);
this
.
state
=
{
listOptionData
:
[
// 页面元素
{
title
:
'费用类型'
,
name
:
'请选择'
,
value
:
''
},
{
title
:
'费用金额'
,
value
:
''
},
{
title
:
'备注'
,
value
:
''
}],
charDetaOption
:
[
{
fee_type_title
:
'费用类型'
,
fee_type_name
:
'请选择'
,
fee_amount_title
:
'费用金额'
,
remark_title
:
'备注'
,
fee_type
:
''
,
fee_amount
:
''
,
remark
:
''
},
{
fee_type_title
:
'费用类型'
,
fee_type_name
:
'请选择'
,
fee_amount_title
:
'费用金额'
,
remark_title
:
'备注'
,
fee_type
:
''
,
fee_amount
:
''
,
remark
:
''
},
// {
// fee_type: '', // SUR_FEE_TYPE
// fee_amount: '',
// remark: ''
// },
// {
// fee_type: '', // SUR_FEE_TYPE
// fee_amount: '',
// remark: ''
// }
],
listCurrentOption
:
[],
// 当前选择器数据
showTypePop
:
false
,
currentItem
:
{
name
:
'请选择'
,
value
:
'-1'
},
currentTitle
:
'费用类型'
,
// 当前点击项
currentIndex
:
0
,
// 当前点击项
}
}
componentDidMount
()
{
this
.
getLocalSelectedData
()
this
.
getChargeType
()
}
// 获取费用类型
async
getChargeType
()
{
let
{
props
}
=
this
let
that
=
this
let
params
=
{
access_token
:
props
.
token
,
value_set_code
:
'SUR_FEE_TYPE'
}
console
.
log
(
'charRes---'
,
props
)
console
.
log
(
'charRes---'
,
params
)
let
charRes
=
await
requestSysValueSet
(
props
.
global_domain_config
,
params
)
console
.
log
(
'charRes---'
,
charRes
)
// that.props.callSupLoading(true)
if
(
charRes
.
error_code
==
0
)
{
// that.props.callSupLoading(false)
let
{
data
:
{
sys_values
}
}
=
charRes
if
(
sys_values
.
length
===
0
)
{
that
.
showErrorModel
(
`当前费用类型为空,联系管理员配置!`
)
return
}
let
resultArr
=
[]
sys_values
.
forEach
(
item
=>
{
let
obj
=
{}
obj
.
name
=
item
.
value_name
obj
.
value
=
item
.
value_code
resultArr
.
push
(
obj
)
})
tempOption
=
[...
resultArr
]
that
.
setState
({
// showTypePop: true,
listCurrentOption
:
[...
tempOption
]
})
}
else
if
(
charRes
.
error_code
==
41006
)
{
// that.props.callSupLoading(false)
that
.
showErrorModel
(
`登录过期,请重新登录`
)
props
.
exitLoginStatus
();
}
else
{
// that.props.callSupLoading(false)
let
error_msg
=
charRes
.
error_msg
||
charRes
.
message
that
.
showErrorModel
(
error_msg
);
}
}
// 获取选择的数据
getLocalSelectedData
()
{
let
{
charDetailOption
}
=
this
.
props
// let {localSelectOption} = this.props.navigation.state.params
this
.
setState
({
charDetaOption
:
charDetailOption
})
}
// 删除
handleDelListItem
(
curIndex
)
{
let
_this
=
this
let
{
charDetaOption
}
=
_this
.
state
console
.
log
(
'curLent---'
,
charDetaOption
.
length
)
if
(
charDetaOption
.
length
===
1
){
show
(
'至少添加一项费用明细!'
)
return
}
charDetaOption
.
splice
(
curIndex
,
1
)
_this
.
setState
({
charDetaOption
})
}
// 增加
handleAddListItem
()
{
let
_this
=
this
let
{
charDetaOption
}
=
_this
.
state
console
.
log
(
'curLent---'
,
charDetaOption
.
length
)
let
lastLen
=
charDetaOption
.
length
-
1
let
lastOpts
=
charDetaOption
[
lastLen
]
if
(
!
lastOpts
.
fee_type
.
trim
()){
show
(
`请选择费用明细(
${
lastLen
+
1
}
)的【费用类型】!`
)
return
}
else
if
(
!
lastOpts
.
fee_amount
.
trim
()){
show
(
`请输入费用明细(
${
lastLen
+
1
}
)的【费用金额】!`
)
return
}
charDetaOption
.
push
({
fee_type_title
:
'费用类型'
,
fee_type_name
:
'请选择'
,
fee_amount_title
:
'费用金额'
,
remark_title
:
'备注'
,
fee_type
:
''
,
fee_amount
:
''
,
remark
:
''
})
_this
.
setState
({
charDetaOption
})
// let cur_len = 360*(charDetaOption.length - 2)
let
cur_len
=
_this
.
curScrollItemY
console
.
log
(
'cur_len==='
,
cur_len
)
console
.
log
(
'cur_len==='
,
_this
.
refs
.
curScrollItem
)
console
.
log
(
'cur_len==='
,
_this
.
curScrollItemY
)
console
.
log
(
'cur_len==='
,
_this
.
_scrollDetailView
)
// _this.refs._scrollDetailView.measure((fx, fy, width, height, px, py) => {
// console.log('Component width is: ' + width)
// console.log('Component height is: ' + height)
// console.log('X offset to frame: ' + fx)
// console.log('Y offset to frame: ' + fy)
// console.log('X offset to page: ' + px)
// console.log('Y offset to page: ' + py)
// //然后用scrollTo跳转到对应位置
// //x是水平方向
// //y是垂直方向
// // this.myScrollView.scrollTo({ x: px, y: py, animated: true });
// });
setTimeout
(()
=>
{
_this
.
_scrollDetailView
.
scrollTo
({
x
:
cur_len
,
y
:
cur_len
,
animated
:
true
})
},
100
)
}
// 设置费用类型
handleSetChargeType
(
curDa
,
curIndex
)
{
let
_this
=
this
let
{
listCurrentOption
}
=
_this
.
state
_this
.
setState
({
currentIndex
:
curIndex
,
currentItem
:
{
name
:
curDa
.
name
,
value
:
curDa
.
value
}
},()
=>
{
if
(
listCurrentOption
&&
listCurrentOption
.
length
===
0
)
{
show
(
'当前数据为空!'
)
return
}
// 解决 IOS 弹窗显示问题
setTimeout
(()
=>
{
_this
.
handleCloseModal
(
true
)
},
500
)
})
}
// 设置费用金额
handleSetChargePrice
(
curIndex
,
curText
)
{
let
_this
=
this
let
{
charDetaOption
}
=
_this
.
state
charDetaOption
[
curIndex
].
fee_amount
=
curText
_this
.
setState
({
currentIndex
:
curIndex
,
charDetaOption
})
}
// 设置费用备注
handleSetChargeMark
(
curIndex
,
curText
)
{
let
_this
=
this
let
{
charDetaOption
}
=
_this
.
state
charDetaOption
[
curIndex
].
remark
=
curText
_this
.
setState
({
currentIndex
:
curIndex
,
charDetaOption
})
}
// 选择器弹窗回调函数
handleCallBack
(
item
,
itemTitle
)
{
let
_this
=
this
let
{
charDetaOption
,
currentIndex
}
=
_this
.
state
console
.
log
(
item
,
itemTitle
)
console
.
log
(
currentIndex
)
charDetaOption
[
currentIndex
].
fee_type_name
=
item
.
name
charDetaOption
[
currentIndex
].
fee_type
=
item
.
value
this
.
setState
({
charDetaOption
})
}
// 关闭 选择器弹窗
handleCloseModal
(
show
)
{
this
.
setState
({
showTypePop
:
show
})
}
// 确认明细 点击
handleSubmit
()
{
let
{
charDetaOption
}
=
this
.
state
// let canSubFlag = true
let
{
props
}
=
this
console
.
log
(
'charDetaOption-'
,
charDetaOption
)
// if(canSubFlag) {
// this.setState({
// charDetaOption
// })
// 存储于store中,并跳转
props
.
getCharDetailsOption
(
charDetaOption
)
props
.
navigation
.
navigate
(
'EquipConsuPage'
,
{
title
:
'器械消耗'
})
// }
}
// 返回主要元素
renderContItem
()
{
return
(
<
ScrollView
style
=
{
styles
.
cons_cont_scroll
}
ref
=
{
component
=>
this
.
_scrollDetailView
=
component
}
// showsVerticalScrollIndicator={false}
>
<
FlatList
style
=
{
styles
.
cons_cont
}
keyExtractor
=
{
item
=>
item
.
id
}
data
=
{
this
.
state
.
charDetaOption
}
extraData
=
{
this
.
state
}
renderItem
=
{({
item
,
index
})
=>
this
.
renderSubListItem
(
item
,
index
)}
/
>
{
this
.
renderAddBtnItem
()}
<
/ScrollView
>
)
}
// 返回每一列元素
renderSubListItem
(
item
,
index
)
{
let
{
listOptionData
}
=
this
.
state
return
(
<
View
style
=
{
styles
.
cons_sub_list
}
>
<
View
style
=
{
styles
.
cons_sub_inner
}
>
<
View
style
=
{
styles
.
sub_list_cont
}
>
<
Text
style
=
{
styles
.
sub_list_tit
}
>
费用明细
({
index
+
1
})
<
/Text
>
<
TouchableOpacity
activeOpacity
=
{.
8
}
style
=
{
styles
.
btn_del_list
}
onPress
=
{()
=>
this
.
handleDelListItem
(
index
)}
>
<
Text
style
=
{[
styles
.
sub_list_tit
,
styles
.
sub_del_tit
]}
>
删除
<
/Text
>
<
/TouchableOpacity
>
<
/View
>
<
PageListArrow
listActOpa
=
{.
8
}
listHasAster
=
{
true
}
// listItem={listOptionData[0]}
// listName={'name'}
// listTitle={'title'}
listItem
=
{
item
}
listName
=
{
'fee_type_name'
}
listTitle
=
{
'fee_type_title'
}
listCallBack
=
{()
=>
this
.
handleSetChargeType
(
item
,
index
)}
listHasArrow
=
{
true
}
listCellStyle
=
{
styles
.
list_cell_box
}
/
>
<
PageListArrow
listActOpa
=
{.
8
}
listHasAster
=
{
true
}
// listItem={listOptionData[1]}
// listDefaValue={'value'}
// listTitle={'title'}
listItem
=
{
item
}
listDefaValue
=
{
'fee_amount'
}
listTitle
=
{
'fee_amount_title'
}
listInputPlace
=
{
'请输入'
}
inputCallBack
=
{(
text
)
=>
this
.
handleSetChargePrice
(
index
,
text
)}
isTitInputStyle
=
{
true
}
listCellStyle
=
{
styles
.
list_cell_box
}
/
>
<
CellTextStyle
style
=
{[
list_common_item
.
remark_item
,
styles
.
list_cell_box
]}
>
<
View
style
=
{
list_common_item
.
rema_box
}
>
<
Text
style
=
{
list_common_item
.
rema_tit
}
>
{
item
.
remark_title
}
<
/Text
>
<
View
style
=
{
list_common_item
.
rema_Input_outer
}
>
<
TouchableOpacity
activeOpacity
=
{
1
}
style
=
{
list_common_item
.
rema_Input_inner
}
onPress
=
{()
=>
this
.
TextInput
.
focus
()}
>
<
TextInput
placeholder
=
{
`请输入
${
item
.
remark_title
}
信息`
}
placeholderTextColor
=
{
placehold_text_color
}
underlineColorAndroid
=
{
'transparent'
}
multiline
=
{
true
}
ref
=
{
textInput
=>
this
.
TextInput
=
textInput
}
numberOfLines
=
{
8
}
style
=
{
list_common_item
.
rema_Input
}
maxLength
=
{
140
}
onChangeText
=
{(
text
)
=>
this
.
handleSetChargeMark
(
index
,
text
)}
defaultValue
=
{
item
.
remark
}
/
>
<
/TouchableOpacity
>
<
/View
>
<
/View
>
<
/CellTextStyle
>
<
/View
>
<
/View
>
)
}
// 返回增加元素
renderAddBtnItem
()
{
return
(
<
View
style
=
{[
styles
.
add_btn_box
]}
ref
=
{
'curScrollItem'
}
onLayout
=
{
e
=>
{
this
.
curScrollItemY
=
e
.
nativeEvent
.
layout
.
y
}}
>
<
View
style
=
{[
styles
.
add_btn_inner
]}
>
<
TouchableOpacity
activeOpacity
=
{.
8
}
style
=
{[
styles
.
sub_list_tit
,
styles
.
add_btn_cont
]}
onPress
=
{()
=>
this
.
handleAddListItem
()}
>
<
Text
style
=
{[
styles
.
sub_list_tit
,
styles
.
sub_del_tit
,
styles
.
add_btn_txt
]}
>
{
'+添加'
}
<
/Text
>
<
/TouchableOpacity
>
<
/View
>
{
this
.
renderPickerModel
()}
<
/View
>
)
}
// 返回底部元素
renderFooterBtnItem
()
{
return
(
<
View
style
=
{
list_common_item
.
sub_box
}
>
<
View
style
=
{
list_common_item
.
sub_two_btn
}
>
<
TouchableOpacity
activeOpacity
=
{.
8
}
style
=
{[
list_common_item
.
rig_btn
,
styles
.
fot_btn
]}
onPress
=
{()
=>
this
.
handleSubmit
()}
>
<
Text
style
=
{
list_common_item
.
rig_tip
}
>
{
'确定费用'
}
<
/Text
>
<
/TouchableOpacity
>
<
/View
>
<
/View
>
)
}
// 返回选择器
renderPickerModel
()
{
let
{
listCurrentOption
,
currentItem
,
currentTitle
,
showTypePop
,
}
=
this
.
state
return
(
<
SafeAreaView
style
=
{
styles
.
item_container
}
>
<
DialogModel
entityList
=
{
listCurrentOption
}
callback
=
{(
item
,
itemTitle
)
=>
this
.
handleCallBack
(
item
,
itemTitle
)}
show
=
{
showTypePop
}
itemValue
=
{
currentItem
.
value
}
itemTitle
=
{
currentTitle
}
closeModal
=
{(
show
)
=>
this
.
handleCloseModal
(
show
)}
/
>
<
/SafeAreaView
>
)
}
render
()
{
let
{
navigation
}
=
this
.
props
let
{
title
}
=
navigation
.
state
.
params
return
(
<
View
style
=
{
styles
.
cu_dl_container
}
>
<
StatusBarView
isReactStackNavigator
=
{
true
}
backgroundColor
=
{
promary_color
}
barStyle
=
'light-content'
/>
<
SafeAreaView
style
=
{
safe_view
}
>
<
HeadBackItem
title
=
{
title
}
navigation
=
{
navigation
}
/
>
<
View
style
=
{
styles
.
cu_dl_main
}
>
{
this
.
renderContItem
()}
<
/View
>
{
this
.
renderFooterBtnItem
()}
<
/SafeAreaView
>
<
/View
>
);
}
}
const
styles
=
StyleSheet
.
create
({
cu_dl_container
:
{
flex
:
1
,
backgroundColor
:
home_background_color
,
padding
:
0
,
margin
:
0
},
cu_dl_main
:
{
flex
:
1
},
cons_cont_scroll
:
{},
cons_cont
:
{
paddingHorizontal
:
20
},
cons_sub_list
:
{
backgroundColor
:
foundation_color
,
borderRadius
:
10
,
marginVertical
:
16
,
paddingTop
:
16
// marginVertical: 10,
// padding: 10,
// borderColor: '#FFF',
// borderWidth: 10
},
cons_sub_inner
:
{
// backgroundColor: home_background_color,
},
sub_list_cont
:
{
display
:
'flex'
,
flexDirection
:
'row'
,
justifyContent
:
'space-between'
,
marginHorizontal
:
20
,
paddingBottom
:
10
,
borderBottomWidth
:
1
,
borderColor
:
'rgba(241, 241, 241, 0.87)'
,
backgroundColor
:
foundation_color
,
},
sub_list_tit
:
{
fontSize
:
second_text_size
,
fontFamily
:
font_family_semibold
,
color
:
first_text_color
},
sub_del_tit
:
{
color
:
promary_color
},
cont_tit
:
{
fontSize
:
second_text_size
,
color
:
promary_text_color
,
fontFamily
:
font_family_regular
},
cont_ser
:
{
fontSize
:
14
,
color
:
'#A3A3A3'
,
fontFamily
:
font_family_regular
},
cont_pri
:
{
flexDirection
:
'row'
,
alignItems
:
'center'
},
pri_icon
:
{
color
:
'#EC3A2E'
,
fontSize
:
16
,
fontFamily
:
font_family_medium
},
pri_inner
:
{
fontFamily
:
font_family_medium
,
fontSize
:
second_text_size
,
color
:
promary_text_color
},
cont_pri_box
:
{
flex
:
1
,
paddingRight
:
20
},
pri_txt
:
{
fontFamily
:
font_family_medium
,
fontSize
:
second_text_size
,
color
:
promary_text_color
},
fot_btn
:
{
width
:
'100%'
,
borderRadius
:
10
},
list_cell_box
:
{
marginBottom
:
0
,
borderBottomWidth
:
1
,
borderColor
:
'rgba(241, 241, 241, 0.87)'
,
backgroundColor
:
foundation_color
,
paddingHorizontal
:
0
,
marginHorizontal
:
20
},
add_btn_box
:
{
marginHorizontal
:
20
// width: Width() - 40,
// // marginLeft: 10
// marginHorizontal: 20,
// height: 60,
// marginBottom: 16,
// backgroundColor: null
},
add_btn_inner
:
{
// width: Width() - 40,
alignItems
:
'center'
,
justifyContent
:
'center'
,
backgroundColor
:
foundation_color
,
marginBottom
:
30
,
borderRadius
:
10
,
},
add_btn_cont
:
{
// textAlign: 'center'
},
add_btn_txt
:
{
height
:
46
,
lineHeight
:
46
}
})
const
mapStateToProps
=
(
state
)
=>
{
return
{
token
:
state
.
login
.
token
,
global_domain_config
:
state
.
login
.
global_domain_config
,
charDetailOption
:
state
.
equip
.
charDetailOption
}
}
const
mapDispatchToProps
=
(
dispatch
)
=>
{
return
{
exitLoginStatus
:
()
=>
{
dispatch
(
exitLoginStatus
())
},
getCharDetailsOption
:
(
data
)
=>
{
dispatch
(
getCharDetailsOption
(
data
))
}
}
}
export
default
connect
(
mapStateToProps
,
mapDispatchToProps
)(
ChargeDetailsPage
);
\ No newline at end of file
app/containers/equipConsu/module/ConsumDetailsPage.js
View file @
b0ecec3d
...
...
@@ -34,20 +34,13 @@ import { exitLoginStatus } from '../../../action/LoginAction';
const
CONSUM_SEARCH_VALUE_BAR_CODE
=
'CONSUM_SEARCH_VALUE_BAR_CODE'
;
// 耗材明细
class
ConsumDetailsPage
extends
Component
{
constructor
(
props
)
{
super
(
props
);
this
.
state
=
{
searchValue
:
''
,
conDetaOption
:
[
// {
// "id": "0",
// item_name: '人工髋关节假体-JS-HB ||| T',
// specification: '3g,Ytg-DG-SZGT',
// serial_number: '2001202001001774',
// select: false
// }
],
conDetaOption
:
[],
allConOption
:
[],
// 所有数据(未筛选过的)
selectShowPopup
:
false
,
// 共计已选弹窗
localSelectOption
:
[],
// 已选数据
...
...
app/containers/equipConsu/module/FillUnitPricePage.js
View file @
b0ecec3d
...
...
@@ -18,7 +18,7 @@ import { show } from '../../../utils/Utils';
import
{
getSubdetailOption
}
from
'../../../action/EquipAction'
;
import
{
connect
}
from
'react-redux'
;
// 可填写单价
class
FillUnitPricePage
extends
Component
{
constructor
(
props
)
{
super
(
props
);
...
...
app/containers/equipConsu/module/ShowDetailPage.js
View file @
b0ecec3d
...
...
@@ -18,7 +18,7 @@ import { show } from '../../../utils/Utils';
import
{
getSubdetailOption
}
from
'../../../action/EquipAction'
;
import
{
connect
}
from
'react-redux'
;
// 仅展示明细
class
ShowDetailPage
extends
Component
{
constructor
(
props
)
{
super
(
props
);
...
...
@@ -44,7 +44,6 @@ class ShowDetailPage extends Component {
// 获取选择的数据
getLocalSelectedData
()
{
let
{
localSelectOption
}
=
this
.
props
.
navigation
.
state
.
params
console
.
log
(
'localSelectOption----'
,
localSelectOption
)
this
.
setState
({
unitPriceOption
:
localSelectOption
})
...
...
@@ -192,9 +191,6 @@ const styles = StyleSheet.create({
fontSize
:
second_text_size
,
color
:
promary_text_color
},
fot_btn
:
{
width
:
'100%'
,
borderRadius
:
10
...
...
app/network/RequestUtils.js
View file @
b0ecec3d
// import {BaseUrl, BaseUrlOther, VERSION} from '../base/BaseConstants';
import
{
VERSION
}
from
'../base/BaseConstants'
;
//post方式请求
...
...
@@ -18,6 +17,7 @@ export const PostRequest = (BaseUrl, url, paramsObject) => {
.
then
(
response
=>
response
.
json
())
.
then
(
data
=>
data
)
.
catch
(
error
=>
{
console
.
error
(
error
)
return
{
error_code
:
-
3
,
error_msg
:
'请求异常,请重试'
}
})
}
...
...
@@ -36,6 +36,7 @@ export const GetRequest = (BaseUrl, url) => {
.
then
(
response
=>
response
.
json
())
.
then
(
data
=>
data
)
.
catch
(
error
=>
{
console
.
error
(
error
)
return
{
error_code
:
-
3
,
error_msg
:
'请求异常,请重试'
}
})
};
...
...
@@ -54,6 +55,7 @@ export const UploadRequest = (BaseUrl, url,datas) => {
.
then
(
response
=>
response
.
json
())
.
then
(
data
=>
data
)
.
catch
(
error
=>
{
console
.
error
(
error
)
return
{
error_code
:
-
3
,
error_msg
:
'请求异常,请重试'
}
})
};
\ No newline at end of file
app/reducers/module/equip.js
View file @
b0ecec3d
...
...
@@ -8,7 +8,8 @@ import {
EQUIP_SUBMIT_SUCCESS
,
EQUIP_SUBMIT_FAILURE
,
EQUIP_INIT_DATA
,
GET_SUB_DETAIL_OPTION
GET_SUB_DETAIL_OPTION
,
GET_CHARGE_DETAILS_OPTION
}
from
'../../base/ActionTypes'
;
// 器械消耗状态
...
...
@@ -17,6 +18,7 @@ const defaultState = {
submit_equip_order_status
:
EQUIP_SUBMIT_NO
,
// 提交订单状态
equipOrderOption
:
{},
// 当前选择器临时存储数据
subDetOption
:
[],
// 选择的消耗明细数据
charDetailOption
:
[],
// 选择的费用明细数据
}
export
default
equip
=
(
state
=
defaultState
,
action
)
=>
{
...
...
@@ -54,11 +56,16 @@ export default equip = (state = defaultState, action) => {
equip_list_status
:
EQUIP_CONSU_LIST_NO
,
submit_equip_order_status
:
EQUIP_SUBMIT_NO
,
equipOrderOption
:
{},
subDetOption
:
[]
subDetOption
:
[],
charDetailOption
:
[]
})
case
GET_SUB_DETAIL_OPTION
:
return
Object
.
assign
({},
state
,
{
subDetOption
:
action
.
rawData
})
case
GET_CHARGE_DETAILS_OPTION
:
return
Object
.
assign
({},
state
,
{
charDetailOption
:
action
.
rawData
})
default
:
return
state
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment