ChronicDiseaseRegister.vue 48 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959
  1. <template>
  2. <PageLayer>
  3. <template #header class="hd-cl">
  4. <el-input v-model="keyCode" placeholder="请输入证件号/门诊号/住院号/体检号" style="width: 320px;">
  5. <template #prepend>关键字</template>
  6. </el-input>
  7. <el-button type="primary" icon="Search" @click="queryCmr" style="margin-left: 10px">查询慢病信息
  8. </el-button>
  9. <el-button type="primary" icon="Search" @click="queryBrInfo" style="margin-left: 10px">获取基本信息
  10. </el-button>
  11. <el-button type="primary" icon="Plus" @click="addForm(ruleFormRef)" style="margin-left: 10px">新增
  12. </el-button>
  13. <el-button type="primary" icon="Edit" @click="editForm(ruleFormRef)" style="margin-left: 10px">编辑
  14. </el-button>
  15. <el-button type="primary" icon="Select" @click="submitForm(ruleFormRef)" style="margin-left: 10px">保存
  16. </el-button>
  17. <el-button type="primary" icon="Refresh" @click="resetForm(ruleFormRef)" style="margin-left: 10px">重置
  18. </el-button>
  19. </template>
  20. <template #main>
  21. <span style="text-align: center;">
  22. <h2>长沙泰和医院慢病患者信息首次登记表</h2>
  23. </span>
  24. <div class="demo-collapse">
  25. <el-form ref="ruleFormRef" :model="ruleForm" :rules="rulesAll" label-width="160px" class="demo-ruleForm"
  26. :size="formSize" status-icon :disabled="isEditForm">
  27. <el-input type="hidden" v-model="ruleForm.pId" />
  28. <el-collapse v-model="activeName">
  29. <el-collapse-item title="基本资料" name="1" disabled>
  30. <el-row>
  31. <el-col :span="6">
  32. <el-form-item label="门诊号" prop="hisMzNo">
  33. <el-input v-model="ruleForm.hisMzNo" maxlength="20" show-word-limit
  34. placeholder="请填写门诊号" />
  35. </el-form-item>
  36. </el-col>
  37. <el-col :span="6">
  38. <el-form-item label="住院号" prop="hisZyNo">
  39. <el-input v-model="ruleForm.hisZyNo" maxlength="20" show-word-limit
  40. placeholder="请填写住院号" />
  41. </el-form-item>
  42. </el-col>
  43. <el-col :span="6">
  44. <el-form-item label="病案号" prop="hisBaNo">
  45. <el-input v-model="ruleForm.hisBaNo" maxlength="12" show-word-limit
  46. placeholder="请填写病案号" />
  47. </el-form-item>
  48. </el-col>
  49. <el-col :span="6">
  50. <el-form-item label="体检号" prop="hisTjNo">
  51. <el-input v-model="ruleForm.hisTjNo" maxlength="20" show-word-limit
  52. placeholder="请填写体检号" />
  53. </el-form-item>
  54. </el-col>
  55. </el-row>
  56. <el-row>
  57. <el-col :span="6">
  58. <el-form-item label="用户名称" prop="pName">
  59. <el-input v-model="ruleForm.pName" minlength="1" maxlength="20" show-word-limit
  60. placeholder="请填写用户名称" />
  61. </el-form-item>
  62. </el-col>
  63. <el-col :span="6">
  64. <el-form-item label="性别" prop="sex">
  65. <el-select v-model="ruleForm.sex" placeholder="请选择性别" clearable style="width: 100%">
  66. <el-option v-for="item in dics.getSexCode" :key="item.code" :label="item.name"
  67. :value="item.code" />
  68. </el-select>
  69. </el-form-item>
  70. </el-col>
  71. <el-col :span="6">
  72. <el-form-item label="年龄" prop="age">
  73. <el-input v-model="ruleForm.age" minlength="1" maxlength="6" show-word-limit
  74. placeholder="请填写年龄" />
  75. </el-form-item>
  76. </el-col>
  77. <el-col :span="6">
  78. <el-form-item label="出生日期" prop="birthDate">
  79. <el-date-picker v-model="ruleForm.birthDate" type="date" label="出生日期"
  80. placeholder="请选择出生日期" style="width: 100%" />
  81. </el-form-item>
  82. </el-col>
  83. </el-row>
  84. <el-row>
  85. <el-col :span="8">
  86. <el-form-item label="证件号" prop="socialNo">
  87. <el-input v-model="ruleForm.socialNo" minlength="1" maxlength="20" show-word-limit
  88. placeholder="请填写证件号" />
  89. </el-form-item>
  90. </el-col>
  91. <el-col :span="8">
  92. <el-form-item label="证件类型" prop="certificateType">
  93. <el-select v-model="ruleForm.certificateType" placeholder="请选择证件类型" clearable
  94. style="width: 100%">
  95. <el-option v-for="item in dics.getPsnCertType" :key="item.code"
  96. :label="item.name" :value="item.code" />
  97. </el-select>
  98. </el-form-item>
  99. </el-col>
  100. <!-- <el-col :span="6">
  101. <el-form-item label="卡号" prop="cardNo">
  102. <el-input v-model="ruleForm.cardNo" maxlength="20" show-word-limit
  103. placeholder="请填写卡号" />
  104. </el-form-item>
  105. </el-col> -->
  106. <el-col :span="8">
  107. <el-form-item label="病人来源" prop="pType">
  108. <el-select v-model="ruleForm.pType" placeholder="请选择病人来源" clearable
  109. style="width: 100%">
  110. <el-option v-for="item in dics.getAdmissWay" :key="item.code" :label="item.name"
  111. :value="item.code" />
  112. </el-select>
  113. </el-form-item>
  114. </el-col>
  115. </el-row>
  116. <el-row>
  117. <el-col :span="6">
  118. <el-form-item label="本人电话" prop="relTel">
  119. <el-input v-model="ruleForm.relTel" maxlength="20" show-word-limit
  120. placeholder="请填写本人电话" />
  121. </el-form-item>
  122. </el-col>
  123. <!-- <el-col :span="6">
  124. <el-form-item label="联系电话2" prop="relTel2">
  125. <el-input v-model="ruleForm.relTel2" maxlength="20" show-word-limit
  126. placeholder="请填写联系电话2" />
  127. </el-form-item>
  128. </el-col> -->
  129. <el-col :span="6">
  130. <el-form-item label="联系人或家属电话" prop="relNameTel">
  131. <el-input v-model="ruleForm.relNameTel" maxlength="20" show-word-limit
  132. placeholder="请填写联系人或家属电话" />
  133. </el-form-item>
  134. </el-col>
  135. <el-col :span="6">
  136. <el-form-item label="联系人姓名" prop="relName">
  137. <el-input v-model="ruleForm.relName" maxlength="30" show-word-limit
  138. placeholder="请填写联系人姓名" />
  139. </el-form-item>
  140. </el-col>
  141. <el-col :span="6">
  142. <el-form-item label="联系人关系" prop="relCode">
  143. <el-select v-model="ruleForm.relCode" placeholder="请选择联系人关系" style="width: 100%">
  144. <el-option v-for="item in dics.getRelations" :key="item.code" :label="item.name"
  145. :value="item.code" />
  146. </el-select>
  147. </el-form-item>
  148. </el-col>
  149. </el-row>
  150. <!-- <el-row>
  151. <el-col :span="6">
  152. <el-form-item label="联系人关系" prop="relCode">
  153. <el-select v-model="ruleForm.relCode" placeholder="请选择联系人关系" style="width: 100%">
  154. <el-option label="" value="0" hidden />
  155. <el-option label="本人" value="1" />
  156. <el-option label="父子" value="2" />
  157. <el-option label="母子" value="3" />
  158. <el-option label="其他" value="4" />
  159. </el-select>
  160. </el-form-item>
  161. </el-col>
  162. <el-col :span="12">
  163. <el-form-item label="联系人地址" prop="relStreet">
  164. <el-input v-model="ruleForm.relStreet" maxlength="30" show-word-limit
  165. placeholder="请填写联系人地址" />
  166. </el-form-item>
  167. </el-col>
  168. <el-col :span="6">
  169. <el-form-item label="联系人邮编" prop="relZip">
  170. <el-input v-model="ruleForm.relZip" maxlength="6" show-word-limit
  171. placeholder="请填写联系人邮编" />
  172. </el-form-item>
  173. </el-col>
  174. </el-row> -->
  175. <el-row>
  176. <el-col :span="18">
  177. <el-form-item label="慢病类型" prop="chronicDiseaseTypeArr">
  178. <el-select v-model="ruleForm.chronicDiseaseTypeArr" multiple
  179. :multiple-limit="chronicDiseaseNo" collapse-tags collapse-tags-tooltip
  180. :max-collapse-tags="5" placeholder="请选择慢病类型" clearable style="width: 100%">
  181. <el-option v-for="item in dics.getCrmClass" :key="item.code" :label="item.name"
  182. :value="item.code" />
  183. </el-select>
  184. </el-form-item>
  185. </el-col>
  186. <el-col :span="6">
  187. <el-form-item label="确诊时间" prop="lastDate">
  188. <el-date-picker v-model="ruleForm.lastDate" type="date" label="确诊时间"
  189. value-format="YYYY-MM-DD" placeholder="请选择确诊时间" style="width: 100%" />
  190. </el-form-item>
  191. </el-col>
  192. </el-row>
  193. <el-row>
  194. <el-col :span="24">
  195. <el-form-item label="患者重点随访监测事项" prop="pComment">
  196. <el-input v-model="ruleForm.pComment" maxlength="50" show-word-limit
  197. placeholder="请填写患者重点随访监测事项" />
  198. </el-form-item>
  199. </el-col>
  200. </el-row>
  201. </el-collapse-item>
  202. <!-- <el-collapse-item title="患者信息" name="3">
  203. <el-row>
  204. <el-col :span="6">
  205. <el-form-item label="婚姻状况" prop="marryCode">
  206. <el-select v-model="ruleForm.marryCode" placeholder="请选择婚姻状况" style="width: 100%">
  207. <el-option label="" value="" hidden />
  208. <el-option label="未婚" value="1" />
  209. <el-option label="已婚" value="2" />
  210. <el-option label="离异" value="3" />
  211. </el-select>
  212. </el-form-item>
  213. </el-col>
  214. <el-col :span="6">
  215. <el-form-item label="国籍" prop="countryCode">
  216. <el-select v-model="ruleForm.countryCode" placeholder="请选择国籍" style="width: 100%">
  217. <el-option label="" value="" hidden />
  218. <el-option label="湖南" value="1" />
  219. <el-option label="长沙" value="2" />
  220. <el-option label="开福区" value="3" />
  221. </el-select>
  222. </el-form-item>
  223. </el-col>
  224. <el-col :span="6">
  225. <el-form-item label="民族" prop="nationCode">
  226. <el-select v-model="ruleForm.nationCode" placeholder="请选择民族" style="width: 100%">
  227. <el-option label="" value="" hidden />
  228. <el-option label="汉族" value="1" />
  229. <el-option label="少数民族" value="2" />
  230. </el-select>
  231. </el-form-item>
  232. </el-col>
  233. <el-col :span="6">
  234. <el-form-item label="职业" prop="occupationCode">
  235. <el-select v-model="ruleForm.occupationCode" placeholder="请选择职业"
  236. style="width: 100%">
  237. <el-option label="" value="" hidden />
  238. <el-option label="工人" value="1" />
  239. <el-option label="农民" value="2" />
  240. <el-option label="其他" value="3" />
  241. </el-select>
  242. </el-form-item>
  243. </el-col>
  244. </el-row>
  245. <el-row>
  246. <el-col :span="6">
  247. <el-form-item label="行业" prop="vocationCode">
  248. <el-select v-model="ruleForm.vocationCode" placeholder="请选择行业" style="width: 100%">
  249. <el-option label="农业" value="1" />
  250. <el-option label="林业" value="2" />
  251. <el-option label="畜牧业" value="3" />
  252. </el-select>
  253. </el-form-item>
  254. </el-col>
  255. <el-col :span="6">
  256. <el-form-item label="所属企业" prop="entId">
  257. <el-input v-model="ruleForm.entId" maxlength="12" show-word-limit
  258. placeholder="请填写所属企业" />
  259. </el-form-item>
  260. </el-col>
  261. <el-col :span="6">
  262. <el-form-item label="区县编码" prop="districtCode">
  263. <el-input v-model="ruleForm.districtCode" maxlength="6" show-word-limit
  264. placeholder="请填写区县编码" />
  265. </el-form-item>
  266. </el-col>
  267. <el-col :span="6">
  268. <el-form-item label="邮编" prop="eMail">
  269. <el-input v-model="ruleForm.eMail" maxlength="20" show-word-limit
  270. placeholder="请填写区县邮编" />
  271. </el-form-item>
  272. </el-col>
  273. </el-row>
  274. <el-row>
  275. <el-col :span="6">
  276. <el-form-item label="家庭电话" prop="homeTel">
  277. <el-input v-model="ruleForm.homeTel" maxlength="20" show-word-limit
  278. placeholder="请填写家庭电话" />
  279. </el-form-item>
  280. </el-col>
  281. <el-col :span="12">
  282. <el-form-item label="家庭住址" prop="homeStreet">
  283. <el-input v-model="ruleForm.homeStreet" maxlength="30" show-word-limit
  284. placeholder="请填写家庭住址" />
  285. </el-form-item>
  286. </el-col>
  287. <el-col :span="6">
  288. <el-form-item label="家庭邮编" prop="homeZip">
  289. <el-input v-model="ruleForm.homeZip" maxlength="6" show-word-limit
  290. placeholder="请填写家庭邮编" />
  291. </el-form-item>
  292. </el-col>
  293. </el-row>
  294. <el-row>
  295. <el-col :span="6">
  296. <el-form-item label="单位电话" prop="empTel">
  297. <el-input v-model="ruleForm.empTel" maxlength="20" show-word-limit
  298. placeholder="请填写单位电话" />
  299. </el-form-item>
  300. </el-col>
  301. <el-col :span="6">
  302. <el-form-item label="单位名称" prop="empName">
  303. <el-input v-model="ruleForm.empName" maxlength="30" show-word-limit
  304. placeholder="请填写单位名称" />
  305. </el-form-item>
  306. </el-col>
  307. <el-col :span="6">
  308. <el-form-item label="单位住址" prop="empStreet">
  309. <el-input v-model="ruleForm.empStreet" maxlength="30" show-word-limit
  310. placeholder="请填写单位住址" />
  311. </el-form-item>
  312. </el-col>
  313. <el-col :span="6">
  314. <el-form-item label="单位邮编" prop="empZip">
  315. <el-input v-model="ruleForm.empZip" maxlength="6" show-word-limit
  316. placeholder="请填写单位邮编" />
  317. </el-form-item>
  318. </el-col>
  319. </el-row>
  320. </el-collapse-item> -->
  321. <el-collapse-item title="其他信息" name="2" disabled>
  322. <!-- <el-row>
  323. <el-col :span="6">
  324. <el-form-item label="最近一次医疗方式" prop="lastType">
  325. <el-select v-model="ruleForm.lastType" placeholder="请选择医疗方式" style="width: 100%">
  326. <el-option label="门诊" value="1" />
  327. <el-option label="住院" value="2" />
  328. <el-option label="体检" value="3" />
  329. </el-select>
  330. </el-form-item>
  331. </el-col>
  332. <el-col :span="6">
  333. <el-form-item label="最近一次医疗时间" prop="lastDate">
  334. <el-date-picker v-model="ruleForm.lastDate" type="datetime" label="医疗时间"
  335. placeholder="请选择医疗时间" style="width: 100%" />
  336. </el-form-item>
  337. </el-col>
  338. <el-col :span="6">
  339. <el-form-item label="等级描述" prop="importComment">
  340. <el-input v-model="ruleForm.importComment" maxlength="30" show-word-limit
  341. placeholder="请填写病人等级描述" />
  342. </el-form-item>
  343. </el-col>
  344. </el-row> -->
  345. <!-- <el-row>
  346. <el-col :span="6">
  347. <el-form-item label="潜在问题" prop="quLevel">
  348. <el-select v-model="ruleForm.quLevel" placeholder="请选择潜在问题" style="width: 100%">
  349. <el-option label="初级问题" value="1" />
  350. <el-option label="高级问题" value="2" />
  351. <el-option label="特级问题" value="3" />
  352. </el-select>
  353. </el-form-item>
  354. </el-col>
  355. <el-col :span="6">
  356. <el-form-item label="潜在问题说明" prop="quComment">
  357. <el-input v-model="ruleForm.quComment" maxlength="30" show-word-limit
  358. placeholder="请填写潜在问题说明" />
  359. </el-form-item>
  360. </el-col>
  361. </el-row> -->
  362. <el-row>
  363. <el-col :span="6">
  364. <el-form-item label="病人等级" prop="importLevel">
  365. <el-select v-model="ruleForm.importLevel" placeholder="请选择病人等级" clearable
  366. style="width: 100%">
  367. <el-option label="未住院患者" value="1" />
  368. <el-option label="住院一次患者" value="2" />
  369. <el-option label="住院两次及以上" value="3" />
  370. </el-select>
  371. </el-form-item>
  372. </el-col>
  373. <el-col :span="6">
  374. <el-form-item label="省" prop="provinceCode">
  375. <el-select v-model="ruleForm.provinceCode" placeholder="请选择省" style="width: 100%"
  376. filterable @change="provinceCharge" clearable>
  377. <el-option v-for="item in provinceData" :key="item.code" :label="item.name"
  378. :value="item.code" />
  379. </el-select>
  380. </el-form-item>
  381. </el-col>
  382. <el-col :span="6">
  383. <el-form-item label="市" prop="cityCode">
  384. <el-select v-model="ruleForm.cityCode" placeholder="请选择市" style="width: 100%"
  385. filterable @change="cityCharge" clearable>
  386. <el-option v-for="item in cityData" :key="item.code" :label="item.name"
  387. :value="item.code" />
  388. </el-select>
  389. </el-form-item>
  390. </el-col>
  391. <el-col :span="6">
  392. <el-form-item label="区" prop="areaCode">
  393. <el-select v-model="ruleForm.areaCode" placeholder="请选择区" style="width: 100%"
  394. filterable clearable>
  395. <el-option v-for="item in countyData" :key="item.code" :label="item.name"
  396. :value="item.code" />
  397. </el-select>
  398. </el-form-item>
  399. </el-col>
  400. </el-row>
  401. <el-row>
  402. <el-col :span="24">
  403. <el-form-item label="详细地址" prop="detailAdress">
  404. <el-input v-model="ruleForm.detailAdress" maxlength="50" show-word-limit
  405. placeholder="请填写详细地址" />
  406. </el-form-item>
  407. </el-col>
  408. </el-row>
  409. </el-collapse-item>
  410. <el-collapse-item title="体征信息" name="3" disabled>
  411. <el-row>
  412. <el-col :span="6">
  413. <el-form-item label="身高" prop="height">
  414. <el-input v-model="ruleForm.height" type="number" placeholder="请填写身高">
  415. <template #append>cm</template>
  416. </el-input>
  417. </el-form-item>
  418. </el-col>
  419. <el-col :span="6">
  420. <el-form-item label="体重" prop="weight">
  421. <el-input v-model="ruleForm.weight" type="number" placeholder="请填写体重">
  422. <template #append>kg</template>
  423. </el-input>
  424. </el-form-item>
  425. </el-col>
  426. <el-col :span="6">
  427. <el-form-item label="体温" prop="temperature">
  428. <el-input v-model="ruleForm.temperature" type="number" placeholder="请填写体温">
  429. <template #append>°C</template>
  430. </el-input>
  431. </el-form-item>
  432. </el-col>
  433. <el-col :span="6">
  434. <el-form-item label="心率" prop="heartRate">
  435. <el-input v-model="ruleForm.heartRate" placeholder="请填写心率"
  436. oninput="value=value.replace(/^(0+)|[^\d]+/g,'')">
  437. <template #append>次</template>
  438. </el-input>
  439. </el-form-item>
  440. </el-col>
  441. </el-row>
  442. <el-row>
  443. <el-col :span="6">
  444. <el-form-item label="收缩压" prop="bloodPressureHigh">
  445. <el-input v-model="ruleForm.bloodPressureHigh" placeholder="请填写收缩压"
  446. oninput="value=value.replace(/^(0+)|[^\d]+/g,'')">
  447. <template #append>mmHg</template>
  448. </el-input>
  449. </el-form-item>
  450. </el-col>
  451. <el-col :span="6">
  452. <el-form-item label="舒张压" prop="bloodPressureLow">
  453. <el-input v-model="ruleForm.bloodPressureLow" placeholder="请填写舒张压"
  454. oninput="value=value.replace(/^(0+)|[^\d]+/g,'')">
  455. <template #append>mmHg</template>
  456. </el-input>
  457. </el-form-item>
  458. </el-col>
  459. <el-col :span="6">
  460. <el-form-item label="血糖" prop="bloodSugar">
  461. <el-input v-model="ruleForm.bloodSugar" type="number" placeholder="请填写血糖">
  462. <template #append>mmol/L</template>
  463. </el-input>
  464. </el-form-item>
  465. </el-col>
  466. <el-col :span="6">
  467. <el-form-item label="血氧" prop="bloodOxygen">
  468. <el-input v-model="ruleForm.bloodOxygen" placeholder="请填写血氧">
  469. <template #append>%</template>
  470. </el-input>
  471. </el-form-item>
  472. </el-col>
  473. </el-row>
  474. </el-collapse-item>
  475. <el-collapse-item title="创建信息" name="4" disabled>
  476. <el-row>
  477. <el-col :span="6">
  478. <el-form-item label="主管医生" prop="referPhysician">
  479. <el-select-v2 v-model="ruleForm.referPhysician" clearable remote style="width: 100%"
  480. filterable :options="empList" :remote-method="empMethod" placeholder="请选择主管医生">
  481. <template #default="{ item }">
  482. <span style="margin-right: 8px">{{ item.label }}</span>
  483. <span style="color: var(--el-text-color-secondary); font-size: 13px">
  484. {{ item.value }}
  485. </span>
  486. </template>
  487. </el-select-v2>
  488. </el-form-item>
  489. </el-col>
  490. <el-col :span="6">
  491. <el-form-item label="建档医生" prop="creatId">
  492. <div v-if="ruleForm.creatId !== '99999'">
  493. <el-select-v2 disabled v-model="ruleForm.creatId" clearable remote
  494. style="width: 100%" filterable :options="empList" :remote-method="empMethod"
  495. placeholder="请选择建档医生">
  496. <template #default="{ item }">
  497. <span style="margin-right: 8px">{{ item.label }}</span>
  498. <span style="color: var(--el-text-color-secondary); font-size: 13px">
  499. {{ item.value }}
  500. </span>
  501. </template>
  502. </el-select-v2>
  503. </div>
  504. <div v-else>
  505. <el-select-v2 v-model="ruleForm.creatId" clearable remote style="width: 100%"
  506. filterable :options="empList" :remote-method="empMethod"
  507. placeholder="请选择建档医生">
  508. <template #default="{ item }">
  509. <span style="margin-right: 8px">{{ item.label }}</span>
  510. <span style="color: var(--el-text-color-secondary); font-size: 13px">
  511. {{ item.value }}
  512. </span>
  513. </template>
  514. </el-select-v2>
  515. </div>
  516. </el-form-item>
  517. </el-col>
  518. <el-col :span="6">
  519. <el-form-item label="建卡时间" prop="createDate">
  520. <el-input :value="ruleForm.createDate" readonly placeholder="默认当前时间为建卡时间" />
  521. </el-form-item>
  522. </el-col>
  523. <el-col :span="6">
  524. <el-form-item label="下次随访时间" prop="visitDate">
  525. <el-date-picker v-model="ruleForm.visitDate" type="date" label="随访时间"
  526. value-format="YYYY-MM-DD" placeholder="请选择下次随访时间" style="width: 100%" />
  527. </el-form-item>
  528. </el-col>
  529. <!-- <el-col :span="6">
  530. <el-form-item label="最近一次随访次数" prop="visitTimes">
  531. <el-input v-model="ruleForm.visitTimes" maxlength="10" show-word-limit
  532. placeholder="请填写最近一次随访次数" />
  533. </el-form-item>
  534. </el-col>
  535. <el-col :span="6">
  536. <el-form-item label="最近一次随访时间" prop="visitDate">
  537. <el-date-picker v-model="ruleForm.visitDate" type="datetime" label="随访时间"
  538. placeholder="请选择最近一次随访时间" style="width: 100%" />
  539. </el-form-item>
  540. </el-col> -->
  541. </el-row>
  542. </el-collapse-item>
  543. </el-collapse>
  544. </el-form>
  545. </div>
  546. </template>
  547. </PageLayer>
  548. </template>
  549. <script lang="ts" setup name="ChronicDiseaseRegister">
  550. import { reactive, ref, onMounted, nextTick } from 'vue'
  551. import store from '@/store'
  552. import { clone } from '@/utils/clone'
  553. import PageLayer from '../../../layout/PageLayer.vue'
  554. import type { FormInstance, FormRules } from 'element-plus'
  555. import { ElMessage } from 'element-plus'
  556. import { getDatetime } from '../../../utils/date'
  557. import { getCrmDictionary, saveCrmPatientMi, selectCrmPatientMiByCode, selectBrInfoByCode } from "@/api/chronic-disease/chronic-disease"
  558. import { employeeList } from "@/api/zhu-yuan-yi-sheng/pat-info-query"
  559. import { provinceList, cityList, countyList, cityFilter, countyFilter } from "@/data/area.js"
  560. const activeName = ref(['1', '2', '3', '4', '5', '6', '7'])
  561. const userCode = store.state.user.info.code
  562. const userName = store.state.user.info.name
  563. let dics: any = ref({})
  564. const empList = ref([])
  565. const provinceData = ref([{ code: '', name: '' }])
  566. const cityData = ref([{ code: '', name: '' }])
  567. const countyData = ref([{ code: '', name: '' }])
  568. onMounted(async () => {
  569. await nextTick(async () => {
  570. dics.value = await getCrmDictionary()
  571. provinceData.value = provinceList
  572. cityData.value = cityList
  573. countyData.value = countyList
  574. empMethod('')
  575. ruleForm.value.creatId = userCode
  576. })
  577. })
  578. const empMethod = async (val: string) => {
  579. await employeeList(val).then((res: any) => {
  580. empList.value = res
  581. })
  582. }
  583. interface RuleForm {
  584. pId: string
  585. pName: string
  586. sex: string
  587. birthDate: string
  588. hisMzNo: string
  589. hisZyNo: string
  590. hisBaNo: string
  591. hisTjNo: string
  592. socialNo: string
  593. cardNo: string
  594. pType: string
  595. entId: string
  596. marryCode: string
  597. countryCode: string
  598. nationCode: string
  599. occupationCode: string
  600. vocationCode: string
  601. districtCode: string
  602. eMail: string
  603. homeTel: string
  604. homeStreet: string
  605. homeZip: string
  606. empTel: string
  607. empName: string
  608. empStreet: string
  609. empZip: string
  610. relTel: string
  611. relTel2: string
  612. relNameTel: string
  613. relName: string
  614. relCode: string
  615. relStreet: string
  616. relZip: string
  617. lastType: string
  618. lastDate: string
  619. pComment: string
  620. importLevel: string
  621. importComment: string
  622. quLevel: string
  623. quComment: string
  624. certificateType: string
  625. chronicDiseaseType: string
  626. chronicDiseaseTypeArr: string[]
  627. createDate: string
  628. creatId: string
  629. userName: string
  630. provinceCode: string
  631. cityCode: string
  632. detailAdress: string
  633. referPhysician: string
  634. referPhysicianName: string
  635. visitTimes: number
  636. visitDate: string
  637. age: string
  638. areaCode: string
  639. height: string
  640. weight: string
  641. temperature: string
  642. bloodPressureLow: string
  643. bloodPressureHigh: string
  644. heartRate: string
  645. bloodSugar: string
  646. bloodOxygen: string
  647. }
  648. const keyCode = ref('')
  649. const formSize = ref('default')
  650. const isEditForm = ref(false)
  651. const chronicDiseaseNo = ref(20)
  652. let now = getDatetime()
  653. const ruleFormRef = ref<FormInstance>()
  654. const ruleForm = ref<RuleForm>({
  655. pId: '',
  656. pName: '',
  657. sex: '',
  658. birthDate: '',
  659. hisMzNo: '',
  660. hisZyNo: '',
  661. hisBaNo: '',
  662. hisTjNo: '',
  663. socialNo: '',
  664. cardNo: '',
  665. pType: '',
  666. entId: '',
  667. marryCode: '',
  668. countryCode: '',
  669. nationCode: '',
  670. occupationCode: '',
  671. vocationCode: '',
  672. districtCode: '',
  673. eMail: '',
  674. homeTel: '',
  675. homeStreet: '',
  676. homeZip: '',
  677. empTel: '',
  678. empName: '',
  679. empStreet: '',
  680. empZip: '',
  681. relTel: '',
  682. relTel2: '',
  683. relNameTel: '',
  684. relName: '',
  685. relCode: '',
  686. relStreet: '',
  687. relZip: '',
  688. lastType: '',
  689. lastDate: '',
  690. pComment: '',
  691. importLevel: '',
  692. importComment: '',
  693. quLevel: '',
  694. quComment: '',
  695. certificateType: '',
  696. chronicDiseaseType: '',
  697. chronicDiseaseTypeArr: [],
  698. createDate: now,
  699. creatId: '',
  700. userName: '',
  701. provinceCode: '430000',
  702. cityCode: '430100',
  703. detailAdress: '',
  704. referPhysician: '',
  705. referPhysicianName: '',
  706. visitTimes: 0,
  707. visitDate: '',
  708. age: '',
  709. areaCode: '',
  710. height: '',
  711. weight: '',
  712. temperature: '',
  713. bloodPressureLow: '',
  714. bloodPressureHigh: '',
  715. heartRate: '',
  716. bloodSugar: '',
  717. bloodOxygen: '',
  718. })
  719. const rulesAll = reactive<FormRules<RuleForm>>({
  720. pName: [
  721. { required: true, message: '请填写用户名称', trigger: 'blur' },
  722. { min: 1, max: 20, message: '不超过20个字', trigger: 'blur' },
  723. ],
  724. sex: [
  725. { required: true, message: '请选择性别', trigger: 'change' },
  726. ],
  727. age: [
  728. { required: true, message: '请填写年龄', trigger: 'blur' },
  729. ],
  730. socialNo: [
  731. { required: true, message: '请填写证件号', trigger: 'blur' },
  732. ],
  733. certificateType: [
  734. { required: true, message: '请选择证件类型', trigger: 'change' },
  735. ],
  736. pType: [
  737. { required: true, message: '请选择病人来源', trigger: 'change' },
  738. ],
  739. relTel: [
  740. { required: true, message: '请填写本人电话', trigger: 'blur' },
  741. ],
  742. chronicDiseaseTypeArr: [
  743. { required: true, message: '请选择慢病类型', trigger: 'change' },
  744. ],
  745. lastDate: [
  746. { required: true, message: '请选择确诊时间', trigger: 'change' },
  747. ],
  748. importLevel: [
  749. { required: true, message: '请选择病人等级', trigger: 'change' },
  750. ],
  751. provinceCode: [
  752. { required: true, message: '请选择省', trigger: 'change' },
  753. ],
  754. cityCode: [
  755. { required: true, message: '请选择市', trigger: 'change' },
  756. ],
  757. areaCode: [
  758. { required: true, message: '请选择区', trigger: 'change' },
  759. ],
  760. referPhysician: [
  761. { required: true, message: '请选择主管医生', trigger: 'change' },
  762. ],
  763. creatId: [
  764. { required: true, message: '请选择建档医生', trigger: 'change' },
  765. ],
  766. createDate: [
  767. { required: true, message: '请选择建卡时间', trigger: 'change' },
  768. ],
  769. visitDate: [
  770. { required: true, message: '请选择下次随访时间', trigger: 'change' },
  771. ],
  772. height: [
  773. { max: 10, message: '不超过10个字符', trigger: 'blur' },
  774. ],
  775. weight: [
  776. { max: 10, message: '不超过10个字符', trigger: 'blur' },
  777. ],
  778. temperature: [
  779. { max: 10, message: '不超过10个字符', trigger: 'blur' },
  780. ],
  781. bloodSugar: [
  782. { max: 10, message: '不超过10个字符', trigger: 'blur' },
  783. ],
  784. heartRate: [
  785. { max: 10, message: '不超过10个字符', trigger: 'blur' },
  786. ],
  787. bloodPressureLow: [
  788. { max: 10, message: '不超过10个字符', trigger: 'blur' },
  789. ],
  790. bloodPressureHigh: [
  791. { max: 10, message: '不超过10个字符', trigger: 'blur' },
  792. ],
  793. })
  794. const isQueryBrInfo = ref(true)
  795. const queryCmr = async () => {
  796. let code = keyCode.value
  797. if (!code) {
  798. ElMessage({
  799. type: "info",
  800. message: '查询关键字不能为空',
  801. duration: 2500,
  802. showClose: true,
  803. });
  804. return
  805. }
  806. ruleForm.value = {} as RuleForm
  807. isEditForm.value = true
  808. isQueryBrInfo.value = false
  809. try {
  810. await selectCrmPatientMiByCode(code).then((res: any) => {
  811. console.log(res)
  812. ruleForm.value = res
  813. })
  814. } catch (error) {
  815. console.log(error)
  816. }
  817. }
  818. const brInfoData = ref({})
  819. const queryBrInfo = async () => {
  820. let code = keyCode.value
  821. if (ruleForm.value.pId) {
  822. isQueryBrInfo.value = true
  823. }
  824. if (!code) {
  825. ElMessage({
  826. type: "info",
  827. message: '查询关键字不能为空',
  828. duration: 2500,
  829. showClose: true,
  830. });
  831. return
  832. }
  833. if (isQueryBrInfo.value) {
  834. ElMessage({
  835. type: "info",
  836. message: '请预先查询是否存在慢病信息或者已经存在慢病信息!',
  837. duration: 2500,
  838. showClose: true,
  839. });
  840. return
  841. }
  842. if (isEditForm.value === true) {
  843. isEditForm.value = false
  844. }
  845. try {
  846. await selectBrInfoByCode(code).then((res: any) => {
  847. if (!res.mi) {
  848. ElMessage({
  849. type: "warning",
  850. message: '未找到病人基本信息',
  851. duration: 2500,
  852. showClose: true,
  853. });
  854. return
  855. }
  856. brInfoData.value = res.mi
  857. if (brInfoData.value) {
  858. ruleForm.value = clone(brInfoData.value)
  859. ruleForm.value.createDate = now
  860. ruleForm.value.creatId = userCode
  861. ruleForm.value.visitTimes = 0
  862. }
  863. })
  864. } catch (error) {
  865. console.log(error)
  866. }
  867. }
  868. const addForm = (formEl: FormInstance | undefined) => {
  869. if (!formEl) return
  870. formEl.resetFields()
  871. if (isEditForm.value === true) {
  872. isEditForm.value = false
  873. }
  874. keyCode.value = ''
  875. ruleForm.value.creatId = userCode
  876. }
  877. const editForm = (formEl: FormInstance | undefined) => {
  878. if (!formEl) return
  879. if (ruleForm.value.creatId !== '99999' && ruleForm.value.creatId !== userCode) {
  880. ElMessage({
  881. type: "info",
  882. message: '您没有权限修改他人登记的病人信息!',
  883. duration: 2500,
  884. showClose: true,
  885. });
  886. return
  887. }
  888. if (isEditForm.value === true) {
  889. isEditForm.value = false
  890. }
  891. }
  892. const submitForm = async (formEl: FormInstance | undefined) => {
  893. if (!formEl) return
  894. await formEl.validate((valid, fields) => {
  895. if (valid) {
  896. ruleForm.value.chronicDiseaseType = ruleForm.value.chronicDiseaseTypeArr.toString()
  897. saveCrmPatientMi(ruleForm.value).then((res: any) => {
  898. if (res.cg) {
  899. ElMessage({
  900. type: "success",
  901. message: res.cg,
  902. duration: 2500,
  903. showClose: true,
  904. });
  905. if (isEditForm.value === false) {
  906. isEditForm.value = true
  907. }
  908. }
  909. });
  910. } else {
  911. ElMessage({
  912. type: "info",
  913. message: '未完成必填项或者填写项不符合,请检查',
  914. duration: 2500,
  915. showClose: true,
  916. });
  917. }
  918. })
  919. }
  920. const resetForm = (formEl: FormInstance | undefined) => {
  921. if (!formEl) return
  922. formEl.resetFields()
  923. if (isEditForm.value === true) {
  924. isEditForm.value = false
  925. }
  926. keyCode.value = ''
  927. ruleForm.value.creatId = userCode
  928. }
  929. const provinceCharge = async () => {
  930. let province = ruleForm.value.provinceCode
  931. cityData.value = await cityFilter(province)
  932. }
  933. const cityCharge = async () => {
  934. let city = ruleForm.value.cityCode
  935. countyData.value = await countyFilter(city)
  936. }
  937. </script>