You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

294 lines
10 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. <template>
  2. <div style="margin-top: -15px;">
  3. <el-tabs v-model="tabChoosed" style="height: 510px;">
  4. <el-tab-pane label="基本信息" name="0">
  5. <OccDiseaseBase />
  6. </el-tab-pane>
  7. <el-tab-pane label="既往病史" name="1">
  8. <OccDiseasePrevious />
  9. </el-tab-pane>
  10. <el-tab-pane label="接害因素" name="2">
  11. <OccDiseasePoison :height="465" />
  12. </el-tab-pane>
  13. <el-tab-pane label="职业史" name="3">
  14. <OccDiseaseHistory />
  15. </el-tab-pane>
  16. <el-tab-pane label="症状" name="4">
  17. <OccDiseaseSymptom />
  18. </el-tab-pane>
  19. <el-tab-pane label="体征" name="5">
  20. <CheckDetails />
  21. </el-tab-pane>
  22. <el-tab-pane label="图文报告" name="6">
  23. <ImageTextReport />
  24. </el-tab-pane>
  25. <el-tab-pane label="职业健康检查结论" name="7">
  26. <OccDiseaseConclusion />
  27. </el-tab-pane>
  28. </el-tabs>
  29. <div style="display: flex;justify-content: space-between;">
  30. <div></div>
  31. <div>
  32. <el-button v-if="false" @click="btnTest">测试</el-button>
  33. <el-button class="deleteButton" @click="btnDel"
  34. :disabled="dataTransOpts.tableS.patient_register.completeFlag == '3'">删除</el-button>
  35. <el-button class="commonbutton" @click="btnOk">确定</el-button>
  36. <el-button class="commonbutton" @click="btnClose">关闭</el-button>
  37. </div>
  38. </div>
  39. </div>
  40. </template>
  41. <script>
  42. import { mapState } from "vuex";
  43. import { getapi, postapi, putapi, deletapi } from "@/api/api";
  44. import { dddw, deepCopy } from "../../utlis/proFunc";
  45. import OccDiseaseBase from "./OccDiseaseBase.vue";
  46. import OccDiseasePrevious from "./OccDiseasePrevious.vue";
  47. import OccDiseasePoison from "./OccDiseasePoison.vue";
  48. import OccDiseaseHistory from "./OccDiseaseHistory.vue";
  49. import OccDiseaseSymptom from "./OccDiseaseSymptom.vue";
  50. import CheckDetails from "./CheckDetails.vue";
  51. import ImageTextReport from "./ImageTextReport.vue";
  52. import OccDiseaseConclusion from "./OccDiseaseConclusion.vue";
  53. export default {
  54. components: {
  55. OccDiseaseBase,
  56. OccDiseasePrevious,
  57. OccDiseasePoison,
  58. OccDiseaseHistory,
  59. OccDiseaseSymptom,
  60. CheckDetails,
  61. ImageTextReport,
  62. OccDiseaseConclusion
  63. },
  64. props: ["patientRegisterId"],
  65. data() {
  66. return {
  67. tabChoosed: "0",
  68. };
  69. },
  70. created() {
  71. },
  72. //挂载完成
  73. async mounted() {
  74. await this.dictInit();
  75. this.initOccDiseaseData()
  76. },
  77. computed: {
  78. ...mapState([
  79. "window",
  80. "dict",
  81. "dataTransOpts",
  82. "dialogWin"
  83. ]),
  84. },
  85. methods: {
  86. //数据初始化
  87. async dictInit() {
  88. //职业病 接害因素
  89. let res = await postapi("/api/app/Poison/GetPoisonWithTypeList")
  90. if (res.code > -1) {
  91. this.dict.poison = res.data;
  92. this.dict.poisonList = []
  93. this.dict.poison.forEach(e => {
  94. e.poisonDtos.forEach(e2 => {
  95. this.dict.poisonList.push({
  96. poisonTypeName: e.poisonTypeName,
  97. id: e2.id,
  98. displayName: e2.displayName,
  99. simpleCode: e2.simpleCode
  100. })
  101. });
  102. });
  103. }
  104. // 职业病--症状列表
  105. let res2 = await postapi("/api/app/Symptom/GetList")
  106. if (res2.code > -1) {
  107. this.dict.symptom = res2.data;
  108. }
  109. },
  110. initOccDiseaseData() {
  111. let patientRegisterId = this.dataTransOpts.tableS.patient_register.id
  112. postapi('/api/app/OccupationalDisease/GetOccupationalDiseaseWithDetailByPatientRegisterId', { patientRegisterId })
  113. .then(res => {
  114. if (res.code > -1) {
  115. this.dataTransOpts.tableS.patient_occupational_disease = deepCopy(res.data['patientOccupationalDisease']) || { patientRegisterId }
  116. this.dataTransOpts.tableM.patient_past_medical_history = deepCopy(res.data['patientPastMedicalHistoryDtos'])
  117. this.dataTransOpts.tableM.patient_occupational_medical_history = deepCopy(res.data['patientOccupationalMedicalHistoryDtos'])
  118. this.dataTransOpts.tableM.patient_poison = deepCopy(res.data['patientPoisonDtos'])
  119. // this.dataTransOpts.tableM.patient_poison.forEach(e => {
  120. // e.poisonName = dddw(this.dict.poisonList,'id',e.poisonId,'displayName')
  121. // });
  122. this.dataTransOpts.tableM.patient_occupational_history = deepCopy(res.data['patientOccupationalHistoryDtos'])
  123. if (Array.isArray(res.data['patientSymptomDtos']) && res.data['patientSymptomDtos'].length > 0) {
  124. this.dataTransOpts.tableM.patient_symptom = deepCopy(res.data['patientSymptomDtos'])
  125. } else {
  126. this.dataTransOpts.tableM.patient_symptom = []
  127. this.dict.symptom.forEach(e => {
  128. // 男性 不显示月经/经期相关症状
  129. if (!(this.dataTransOpts.tableS.patient_register.sexId != 'F' && (e.displayName.indexOf('月经') > -1 || e.displayName.indexOf('经期') > -1))) {
  130. this.dataTransOpts.tableM.patient_symptom.push({ symptomId: e.id, symptomName: e.displayName, degree: '-' })
  131. }
  132. });
  133. }
  134. }
  135. })
  136. },
  137. btnTest() {
  138. console.log('this.dataTransOpts.tableS.patient_occupational_disease', this.dataTransOpts.tableS.patient_occupational_disease)
  139. console.log('this.dataTransOpts.tableM.patient_poison', this.dataTransOpts.tableM.patient_poison)
  140. console.log('this.dataTransOpts.tableM.patient_occupational_history', this.dataTransOpts.tableM.patient_occupational_history)
  141. console.log('this.dataTransOpts.tableM.patient_symptom', this.dataTransOpts.tableM.patient_symptom)
  142. },
  143. btnDel() {
  144. this.$confirm("此操作确定后将永久删除该记录, 是否继续?", "提示", {
  145. confirmButtonText: "是",
  146. cancelButtonText: "否",
  147. type: "warning",
  148. }).then(() => {
  149. return postapi('/api/app/OccupationalDisease/DeleteOccupationalDiseaseWithDetail', { patientRegisterId: this.dataTransOpts.tableS.patient_register.id })
  150. }).then(res => {
  151. if (res && res.code > -1) {
  152. this.dialogWin.OccDisease = false
  153. }
  154. })
  155. },
  156. // 数据验证
  157. validiteData(){
  158. let err = ''
  159. let disease = this.dataTransOpts.tableS.patient_occupational_disease
  160. if(!disease.ocCheckTypeId){
  161. err = '请填写 检查类别'
  162. return err
  163. }
  164. if(!disease.jobType){
  165. err = '请填写 工种'
  166. return err
  167. }
  168. if(!disease.riskFactors){
  169. err = '请填写 基本信息-接害因素'
  170. return err
  171. }
  172. if(disease.smokeFlag && disease.smokeFlag != '0'){
  173. if(!disease.smokeNum){
  174. err = '请填写 吸烟频次'
  175. return err
  176. }
  177. if(!disease.smokeYears){
  178. err = '请填写 烟龄'
  179. return err
  180. }
  181. }
  182. if(disease.drinkFlag && disease.drinkFlag != '0'){
  183. if(!disease.drinkNum){
  184. err = '请填写 饮酒频次'
  185. return err
  186. }
  187. if(!disease.drinkYears){
  188. err = '请填写 酒龄'
  189. return err
  190. }
  191. }
  192. this.dataTransOpts.tableM.patient_poison.forEach((e, i) => {
  193. if (!e.poisonId) err = `接害因素,第 ${i + 1} 行,不能为空`
  194. if (!e.occupationalAbnormalId) e.occupationalAbnormalId = null
  195. });
  196. // 日期为空串的,换成 null
  197. this.dataTransOpts.tableM.patient_past_medical_history.forEach(e => {
  198. if(!e.diagnosisDate) e.diagnosisDate = null
  199. });
  200. this.dataTransOpts.tableM.patient_occupational_medical_history.forEach(e => {
  201. if(!e.diagnosisDate) e.diagnosisDate = null
  202. });
  203. this.dataTransOpts.tableM.patient_occupational_history.forEach(e => {
  204. if(!e.beginDate) e.beginDate = null
  205. if(!e.endDate) e.endDate = null
  206. });
  207. return err
  208. },
  209. // 点击确定
  210. btnOk() {
  211. let message = this.validiteData()
  212. // console.log('this.dataTransOpts.tableM.patient_poison', this.dataTransOpts.tableM.patient_poison)
  213. if (message) {
  214. this.$message.warning({ showClose: true, message })
  215. return
  216. }
  217. let body = {
  218. patientRegisterId: this.dataTransOpts.tableS.patient_register.id,
  219. patientOccupationalDisease: this.dataTransOpts.tableS.patient_occupational_disease,
  220. patientPastMedicalHistorys: this.dataTransOpts.tableM.patient_past_medical_history,
  221. patientOccupationalMedicalHistorys: this.dataTransOpts.tableM.patient_occupational_medical_history,
  222. patientPoisons: this.dataTransOpts.tableM.patient_poison,
  223. patientOccupationalHistorys: this.dataTransOpts.tableM.patient_occupational_history,
  224. patientSymptoms: this.dataTransOpts.tableM.patient_symptom
  225. }
  226. postapi('/api/app/OccupationalDisease/CreateOccupationalDiseaseWithDetail', body)
  227. .then(res => {
  228. if (res.code > -1) {
  229. this.$message.success({ showClose: true, message: "操作成功!" })
  230. this.dataTransOpts.tableS.patient_occupational_disease.patientRegisterId = this.dataTransOpts.tableS.patient_register.id
  231. return postapi('/api/app/OccupationalDisease/UpdateOccupationalDiseaseInspectionConclusion', this.dataTransOpts.tableS.patient_occupational_disease)
  232. } else {
  233. this.$message.warning({ showClose: true, message: res.message })
  234. }
  235. }).then(res => {
  236. if (res && res.code > -1) {
  237. this.dataTransOpts.plus.OccDisease++
  238. }
  239. })
  240. },
  241. // 点击关闭
  242. btnClose() {
  243. this.dialogWin.OccDisease = false
  244. },
  245. },
  246. //监听事件()
  247. watch: {
  248. "dataTransOpts.plus.OccDisease": {
  249. // immediate:true,
  250. handler(newVal, oldVal) {
  251. console.log(`watch 职业病 newVal: ${newVal}, oldVal: ${oldVal} `);
  252. if (newVal != oldVal) this.initOccDiseaseData()
  253. }
  254. },
  255. },
  256. };
  257. </script>
  258. <style scoped>
  259. @import '../../assets/css/global_card.css';
  260. @import '../../assets/css/global_input.css';
  261. @import '../../assets/css/global_table.css';
  262. @import '../../assets/css/global.css';
  263. </style>