index.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <template>
  2. <!-- 搜索 -->
  3. <ContentWrap>
  4. <!-- 搜索工作栏 -->
  5. <el-form
  6. class="-mb-15px"
  7. :model="queryParams"
  8. ref="queryFormRef"
  9. :inline="true"
  10. label-width="80px"
  11. >
  12. <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
  13. <el-form-item label="长者姓名" prop="elderName">
  14. <el-input
  15. @keyup.enter="handleQuery"
  16. v-model="queryParams.elderName"
  17. placeholder="请输入长者姓名"
  18. class="!w-240px"
  19. />
  20. </el-form-item>
  21. <el-form-item label="合同状态" prop="type">
  22. <el-select v-model="queryParams.type" placeholder="请选择" class="!w-240px">
  23. <el-option
  24. v-for="(dict, index) in getIntDictOptions(DICT_TYPE.CONTRACT_TYPE)"
  25. :key="index"
  26. :label="dict.label"
  27. :value="dict.value"
  28. />
  29. </el-select>
  30. </el-form-item>
  31. <el-form-item label="是否已上传合同" prop="hasExtra" label-width="120px">
  32. <el-select v-model="queryParams.hasExtra" placeholder="请选择" class="!w-240px">
  33. <el-option
  34. v-for="(dict, index) in getIntDictOptions(DICT_TYPE.COMMON_STATUS6)"
  35. :key="index"
  36. :label="dict.label"
  37. :value="dict.value"
  38. />
  39. </el-select>
  40. </el-form-item>
  41. <el-form-item label="入住类型" prop="inStatusType">
  42. <el-select v-model="queryParams.inStatusType" placeholder="请选择" class="!w-240px">
  43. <el-option
  44. v-for="(dict, index) in getStrDictOptions(DICT_TYPE.IN_STATUS_TYPE)"
  45. :key="index"
  46. :label="dict.label"
  47. :value="dict.value"
  48. />
  49. </el-select>
  50. </el-form-item>
  51. <el-form-item>
  52. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  53. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  54. </el-form-item>
  55. </el-form>
  56. </ContentWrap>
  57. <!-- 列表 -->
  58. <ContentWrap>
  59. <TabBarBtn />
  60. <Table2
  61. v-loading="loading"
  62. :data="list"
  63. :columns="ContractColumns"
  64. :queryParams="queryParams"
  65. :opWidth="240"
  66. @edit="(arg) => handleRenewal(arg, 1)"
  67. @upload="openForm"
  68. @detail="openDetail"
  69. >
  70. <!-- @check="(arg) => handleRenewal(arg, 2)" -->
  71. <template #pre="{ scope }">
  72. <el-button
  73. link
  74. type="primary"
  75. @click="handleRenewal(scope, 2)"
  76. v-hasPermi="['contract:check']"
  77. v-show="scope.status == 1"
  78. >
  79. 办理
  80. </el-button>
  81. </template>
  82. </Table2>
  83. <!-- 分页 -->
  84. <Pagination
  85. :total="total"
  86. v-model:page="queryParams.pageNo"
  87. v-model:limit="queryParams.pageSize"
  88. @pagination="getList"
  89. />
  90. </ContentWrap>
  91. <Form ref="formRef" @success="getList" />
  92. <Renewal ref="renewalRef" @success="getList" />
  93. <Detail ref="detailRef" />
  94. </template>
  95. <script lang="ts" setup>
  96. import { DICT_TYPE, getIntDictOptions, getStrDictOptions } from '@/utils/dict'
  97. import { getElderlyContract, getElderlyContract2 } from '@/api/elderly/elder/contract'
  98. import { ContractColumns } from '../column'
  99. import Form from './Form.vue'
  100. import Renewal from './Renewal.vue'
  101. import Detail from './Detail.vue'
  102. import { useUserStore } from '@/store/modules/user'
  103. import { formatTimestampYMD } from '@/utils/dateUtil'
  104. defineOptions({ name: 'Contract' })
  105. const userStore = useUserStore()
  106. const message = useMessage() // 消息弹窗
  107. const loading = ref(true) // 列表的加载中
  108. const total = ref(0) // 列表的总页数
  109. const list = ref([]) // 列表的数据
  110. const queryParams = reactive({
  111. pageNo: 1,
  112. pageSize: 10,
  113. elderName: undefined,
  114. type: undefined,
  115. hasExtra: undefined,
  116. inStatusType: undefined,
  117. tenantIds: userStore.orgTenantId
  118. })
  119. const queryFormRef = ref() // 搜索的表单
  120. /** 查询列表 */
  121. const getList = async () => {
  122. loading.value = true
  123. try {
  124. const data = await getElderlyContract(queryParams)
  125. list.value = data.list
  126. total.value = data.total
  127. } finally {
  128. loading.value = false
  129. }
  130. }
  131. /** 搜索按钮操作 */
  132. const handleQuery = async () => {
  133. if (!queryFormRef.value) return
  134. const valid = await queryFormRef.value.validate()
  135. if (!valid) return
  136. queryParams.pageNo = 1
  137. getList()
  138. }
  139. /** 重置按钮操作 */
  140. const resetQuery = () => {
  141. queryFormRef.value.resetFields()
  142. handleQuery()
  143. }
  144. /** 添加/修改操作 */
  145. const formRef = ref()
  146. const openForm = (row: any = {}, type: number = 1) => {
  147. formRef.value.open(row, type)
  148. }
  149. // 变更/续签
  150. const renewalRef = ref()
  151. const handleRenewal = (row: any = {}, type: number = 1) => {
  152. renewalRef.value.open(row, type)
  153. }
  154. // 详情
  155. const detailRef = ref()
  156. const openDetail = (row: any = {}) => {
  157. detailRef.value.open(row.id)
  158. }
  159. const queryParamsContract = reactive({
  160. pageNo: 1,
  161. pageSize: 100,
  162. elderName: undefined,
  163. type: 0,
  164. inStatusType: undefined,
  165. tenantIds: userStore.orgTenantId
  166. })
  167. //合同过期
  168. const getContractList = async () => {
  169. loading.value = true
  170. try {
  171. const data = await getElderlyContract2(queryParamsContract)
  172. if (data && data.length > 0) {
  173. if ((window as any).$showContractNotification) {
  174. ;(window as any).$showContractNotification({
  175. title: '合同过期提醒',
  176. message: `检测到 ${data.length} 位长者的合同已过期,请及时处理!`,
  177. contracts: data.map((item: any) => ({
  178. elderName: item.elderName || item.name,
  179. expireDate: formatTimestampYMD(item.expireTime)
  180. }))
  181. })
  182. }
  183. }
  184. } finally {
  185. loading.value = false
  186. }
  187. }
  188. const route = useRoute()
  189. /** 初始化 **/
  190. onMounted(() => {
  191. // 通知跳转过来的直接打开办理弹窗
  192. if (route.query && route.query.id) {
  193. openForm({ elderId: route.query.id, tenantId: route.query.tenantId }, 2)
  194. }
  195. getList()
  196. getContractList()
  197. })
  198. </script>