AddForm.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269
  1. <template>
  2. <el-drawer
  3. v-model="dialogVisible"
  4. :title="title"
  5. resizable
  6. :close-on-click-modal="false"
  7. :close-on-press-escape="false"
  8. :destroy-on-close="true"
  9. size="70%"
  10. :before-close="handleClosed"
  11. >
  12. <div class="attack-risk-form">
  13. <h1 class="form-title">变更事项确认表</h1>
  14. <!-- 基本信息 -->
  15. <el-row :gutter="40">
  16. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="row">
  17. <text>长者姓名</text>
  18. <search-the-elderly
  19. ref="selectElderRef"
  20. :disabled="isDetail"
  21. @update_elder="elderUp"
  22. v-model="dataForm.elderName"
  23. :tId="dataForm.tenantId"
  24. />
  25. </el-col>
  26. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="row">
  27. <text>档案号</text>
  28. <el-input v-if="!isDetail" v-model="dataForm.contractNumber" disabled />
  29. <el-text v-else disabled="">{{ dataForm.contractNumber }}</el-text>
  30. </el-col>
  31. </el-row>
  32. <el-row :gutter="40">
  33. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="row">
  34. <text>入院日期</text>
  35. <el-input
  36. v-if="!isDetail"
  37. :model-value="
  38. dayjs(dataForm.checkInTime).format('YYYY-MM-DD') == 'Invalid Date'
  39. ? ''
  40. : dayjs(dataForm.checkInTime).format('YYYY-MM-DD')
  41. "
  42. disabled
  43. />
  44. <el-text v-else disabled="">{{
  45. dayjs(dataForm.checkInTime).format('YYYY-MM-DD')
  46. }}</el-text>
  47. </el-col>
  48. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="row">
  49. <text>床位号</text>
  50. <el-input v-if="!isDetail" v-model="dataForm.bedName" disabled />
  51. <el-text v-else disabled="">{{ dataForm.bedName }}</el-text>
  52. </el-col>
  53. </el-row>
  54. <el-row :gutter="40">
  55. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="row">
  56. <text>记录人</text>
  57. <el-input :disabled="isDetail" v-model="form.recorder" />
  58. </el-col>
  59. <el-col :xs="24" :sm="24" :md="24" :lg="12" :xl="12" class="row">
  60. <text>记录日期</text>
  61. <el-date-picker
  62. :disabled="isDetail"
  63. v-model="form.recordDate"
  64. type="date"
  65. style="width: 100%"
  66. />
  67. </el-col>
  68. </el-row>
  69. <!-- 内容区域 -->
  70. <div class="form-body">
  71. <ChangeConfirmationFormBody ref="bodyRef" v-model="changeForm" :is-text-mode="isDetail" />
  72. </div>
  73. </div>
  74. <template #footer>
  75. <el-button @click="handleClosed">关闭</el-button>
  76. <el-button
  77. style="margin-left: 22px; margin-right: 30px"
  78. v-loading="formLoading"
  79. type="primary"
  80. v-show="!isDetail"
  81. @click="submitForm"
  82. >确定</el-button
  83. >
  84. </template>
  85. </el-drawer>
  86. </template>
  87. <script lang="ts" setup>
  88. import { ref, reactive } from 'vue'
  89. import dayjs from 'dayjs'
  90. import ChangeConfirmationFormBody from '../components/ChangeConfirmationFormBody.vue'
  91. import {
  92. changeConfirmationForm_create,
  93. changeConfirmationForm_update,
  94. changeConfirmationForm_getById
  95. } from '@/api/elderly/contracts'
  96. const message = useMessage()
  97. const { t } = useI18n()
  98. const title = ref('')
  99. const dialogVisible = ref(false)
  100. const selectElderRef = ref()
  101. const bodyRef = ref()
  102. const isDetail = ref(false)
  103. const formLoading = ref(false)
  104. let dataForm = ref({
  105. id: undefined,
  106. elderName: '',
  107. elderId: '',
  108. bedName: '',
  109. checkInTime: '',
  110. contractNumber: '',
  111. tenantId: undefined
  112. })
  113. const changeForm = ref({})
  114. const form = reactive({
  115. recorder: '',
  116. recordDate: ''
  117. })
  118. const elderUp = (e) => {
  119. dataForm.value.elderName = e.elderName
  120. dataForm.value.elderId = e.id
  121. dataForm.value.bedName = e.bedName || ''
  122. dataForm.value.checkInTime = e.checkInTime
  123. dataForm.value.contractNumber = e.contractNumber || e.fileNumber
  124. changeForm.value.partyBName = e.elderName
  125. }
  126. const open = async (tenantId, id?: any, detail: boolean = false) => {
  127. resetForm()
  128. dialogVisible.value = true
  129. dataForm.value.tenantId = tenantId
  130. isDetail.value = detail
  131. if (id) {
  132. title.value = detail ? '详情-变更事项确认表' : '编辑-变更事项确认表'
  133. dataForm.value.id = id
  134. await loadAttachmentData(id)
  135. } else {
  136. title.value = '新增-变更事项确认表'
  137. }
  138. }
  139. const loadAttachmentData = async (id: number) => {
  140. try {
  141. const res = await changeConfirmationForm_getById(id)
  142. if (res) {
  143. dataForm.value.elderName = res.elderName || ''
  144. dataForm.value.elderId = res.elderId || ''
  145. dataForm.value.bedName = res.bedName || ''
  146. dataForm.value.contractNumber = res.contractNumber || res.fileNumber || ''
  147. dataForm.value.checkInTime = res.checkInTime || ''
  148. form.recorder = res.recorder || ''
  149. form.recordDate = res.recordDate ? dayjs(res.recordDate).toDate() : ''
  150. if (res.content) {
  151. try {
  152. const contentData = JSON.parse(res.content)
  153. changeForm.value = { ...changeForm.value, ...contentData }
  154. } catch (e) {
  155. console.error('解析变更事项确认表内容失败', e)
  156. }
  157. }
  158. await selectElderRef.value?.upData(res.elderName, res.elderId)
  159. }
  160. } catch (error) {
  161. message.error('加载数据失败')
  162. }
  163. }
  164. defineExpose({ open })
  165. const emit = defineEmits(['success'])
  166. const submitForm = async () => {
  167. if (formLoading.value) {
  168. return
  169. }
  170. formLoading.value = true
  171. try {
  172. const bodyForm = bodyRef.value?.form || changeForm.value
  173. const content = JSON.stringify({ ...bodyForm })
  174. const tempParams = {
  175. id: dataForm.value.id,
  176. elderId: dataForm.value.elderId,
  177. elderName: dataForm.value.elderName,
  178. bedName: dataForm.value.bedName,
  179. recorder: form.recorder,
  180. recordDate: form.recordDate ? dayjs(form.recordDate).format('YYYY-MM-DD') : '',
  181. content: content,
  182. signYi: bodyForm.partyBSign || '',
  183. signBing: bodyForm.partyCSign || '',
  184. signDate: bodyForm.signDate || '',
  185. tenantId: dataForm.value.tenantId
  186. }
  187. let res
  188. if (dataForm.value.id) {
  189. res = await changeConfirmationForm_update(tempParams)
  190. } else {
  191. res = await changeConfirmationForm_create(tempParams)
  192. }
  193. if (res) {
  194. message.success(dataForm.value.id ? t('common.updateSuccess') : t('common.createSuccess'))
  195. dialogVisible.value = false
  196. emit('success')
  197. }
  198. } finally {
  199. setTimeout(() => {
  200. formLoading.value = false
  201. }, 500)
  202. }
  203. }
  204. const resetForm = () => {
  205. dataForm.value = {
  206. id: undefined,
  207. elderName: '',
  208. elderId: '',
  209. bedName: '',
  210. checkInTime: '',
  211. contractNumber: '',
  212. tenantId: undefined
  213. }
  214. form.recorder = ''
  215. form.recordDate = ''
  216. changeForm.value = {}
  217. }
  218. const handleClosed = () => {
  219. dialogVisible.value = false
  220. resetForm()
  221. }
  222. </script>
  223. <style scoped lang="scss">
  224. .form-title {
  225. text-align: center;
  226. font-size: 20px;
  227. width: 100%;
  228. margin-bottom: 20px;
  229. }
  230. .attack-risk-form {
  231. max-width: 1200px;
  232. margin: 0 auto;
  233. background: #fff;
  234. .form-body {
  235. border: 1px solid #333;
  236. padding: 15px;
  237. }
  238. }
  239. .row {
  240. margin-bottom: 12px;
  241. display: flex;
  242. flex-direction: row;
  243. align-items: center;
  244. text {
  245. text-align: right;
  246. margin-right: 4px;
  247. width: 82px;
  248. }
  249. }
  250. </style>