addDiag.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. import React, {
  2. useState,useContext,useEffect
  3. } from 'react';
  4. import { Form, Input, Select, message } from 'antd';
  5. import apiObj from '@api/index';
  6. import { getCookie,setCookie } from '@utils/index';
  7. import './index.less'
  8. import {Modal} from "antd/lib/index";
  9. const { post, api } = apiObj;
  10. function AddDiag({formData,matchChange,visible,cancel,onOk,title,termSType,termType,flag}) {
  11. const [form] = Form.useForm();
  12. const { Option } = Select;
  13. const [unsaved, setUnsaved] = useState(false);//修改未保存弹窗
  14. const [icdcode,setIcdcode] = useState((formData||{}).code);
  15. const [dataList, setDataList] = useState([]);//当前页列表数据
  16. const [formList, setFormList] = useState([]);//当前页列表数据
  17. const [source, setSource] = useState(0);//来源
  18. //const TREMTYPE=100; //常亮,术语类型1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作
  19. useEffect(() => {
  20. form.setFieldsValue(formData)
  21. }, [formData]);
  22. //标准术语搜索
  23. function handleSearch(val){
  24. const txt = val.trim();
  25. if(txt===""){
  26. const list = []
  27. setDataList(list);
  28. }else{
  29. post(api.termMatching, {inputStr:txt,type:termSType}).then((res) => {
  30. if (res.data.code === "0") {
  31. const list = res.data.data||[];
  32. setDataList(list);
  33. }
  34. })
  35. }
  36. }
  37. //剂型搜索
  38. function handleSearch1(val){
  39. const txt = val.trim();
  40. if(txt===""){
  41. const list = []
  42. setFormList(list);
  43. }else{
  44. post(api.termMatching, {inputStr:txt,type:102}).then((res) => {
  45. if (res.data.code === "0") {
  46. const list = res.data.data||[];
  47. setFormList(list);
  48. }
  49. })
  50. }
  51. }
  52. //选中(修改)标准词时
  53. function handleChange(val,item){
  54. console.log(33,item)
  55. setSource(item.source)
  56. setIcdcode(item.code);
  57. }
  58. //选中(修改)剂型时
  59. function handleChange1(val,item){
  60. }
  61. //保存匹配,先验证输入
  62. function saveMatching(){
  63. form.validateFields().then(function(values){
  64. console.log('values:',values,form.getFieldsValue())
  65. const hospitalId = getCookie('hospitalId')
  66. const param={
  67. conceptId:parseFloat(values.uniqueName)||formData.conceptId,
  68. formConceptId:parseFloat(values.form)||formData.formConceptId,
  69. type:termType,
  70. hospitalId:parseInt(hospitalId),
  71. source:source==0?formData.source:source,
  72. hisName:values.hisName
  73. }
  74. if(flag===3){
  75. param.id=formData.id
  76. }
  77. console.log(param)
  78. onOk(param)
  79. form.resetFields();
  80. })
  81. }
  82. //关闭新增/编辑弹窗
  83. function saveCancel(){
  84. //有未保存修改时弹窗提醒
  85. const newFormData = form.getFieldsValue();
  86. const isChange = newFormData.hisName!==formData.hisName||newFormData.conceptId!==formData.conceptId;//form.isFieldsTouched(['hisName','conceptId']);
  87. if(isChange){
  88. setUnsaved(true);
  89. }else{
  90. cancel();
  91. form.resetFields(); //清空表单值
  92. }
  93. }
  94. //不保存当前修改,退出弹窗
  95. function unsavedOk() {
  96. setUnsaved(false);
  97. cancel(); //关闭新增/修改弹窗
  98. form.resetFields(); //清空表单值
  99. }
  100. //未保存提醒弹窗关闭
  101. function unsavedCancel() {
  102. setUnsaved(false)
  103. }
  104. return (
  105. <Modal
  106. title={title}
  107. okText='确定'
  108. cancelText='关闭'
  109. width={'65%'}
  110. visible={visible}
  111. onOk={saveMatching}
  112. onCancel={saveCancel}
  113. forceRender={true}
  114. initialValues={formData}
  115. >
  116. <Form
  117. labelCol={{ span: 7 }}
  118. wrapperCol={{ span: 15 }}
  119. className='clearfix'
  120. form={form}
  121. name="register"
  122. >
  123. <div className="his-info info-box">
  124. <p className='title'>医院术语</p>
  125. <div className="item-box">
  126. <Form.Item
  127. name="hisName"
  128. label={termType==4?'医院诊断名称': termType==5?'医院药品名称':'手术/操作名称'}
  129. rules={[
  130. {
  131. required: true,
  132. message: '不能为空',
  133. },{ max: 30,message:'不能超过30个字符'}
  134. ]}
  135. >
  136. <Input placeholder="请输入" autoComplete='off'/>
  137. </Form.Item>
  138. </div>
  139. </div>
  140. <div className="lt-info info-box">
  141. <p className='title'>标准术语</p>
  142. <div className="item-box">
  143. <Form.Item
  144. name="uniqueName"
  145. label={termType==4?'标准诊断名称': termType==5?'标准药品名称':'手术/操作名称'}
  146. rules={[
  147. {
  148. required: true,
  149. message: '不能为空',
  150. },{ max: 30,message:'不能超过30个字符'}
  151. ]}
  152. >
  153. <Select placeholder="请输入"
  154. autoComplete='off'
  155. onSearch={handleSearch}
  156. onChange={handleChange}
  157. filterOption={false}
  158. showSearch>
  159. {dataList.map(d => <Option key={d.id} source={d.source} code={d.code}>{d.name}</Option>)}
  160. </Select>
  161. </Form.Item>
  162. {termType==5?
  163. <Form.Item
  164. name="form"
  165. label="药品剂型"
  166. >
  167. <Select placeholder="请输入"
  168. autoComplete='off'
  169. onSearch={handleSearch1}
  170. onChange={handleChange1}
  171. filterOption={false}
  172. showSearch>
  173. {formList.map(d => <Option key={d.id} source={d.source} code={d.code}>{d.name}</Option>)}
  174. </Select>
  175. </Form.Item>
  176. :
  177. <Form.Item label={termType==4?'ICD-10编码':'手术/操作代码'}>
  178. {icdcode}
  179. </Form.Item>}
  180. </div>
  181. </div>
  182. <p className='linked-term'>已关联标准术语:{(formData||{}).uniqueName}</p>
  183. </Form>
  184. <Modal
  185. maskClosable={false}
  186. title="提示"
  187. okText='确定'
  188. cancelText='关闭'
  189. width={400}
  190. visible={unsaved}
  191. onOk={unsavedOk}
  192. onCancel={unsavedCancel}
  193. >
  194. <p>当前数据未保存 是否确认关闭?</p>
  195. </Modal>
  196. </Modal>
  197. );
  198. }
  199. export default AddDiag;