addDiag.js 5.4 KB

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