index.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. <template>
  2. <ContentWrap>
  3. <!-- 跌倒风险评估表 -->
  4. <el-form
  5. class="-mb-15px"
  6. :model="queryParams"
  7. ref="queryFormRef"
  8. :inline="true"
  9. label-width="110px"
  10. >
  11. <el-form-item label="长者姓名">
  12. <el-input
  13. v-model="queryParams.elderName"
  14. placeholder="长者姓名"
  15. class="!w-240px"
  16. clearable
  17. />
  18. </el-form-item>
  19. <el-form-item label="评估人">
  20. <el-input v-model="queryParams.assessor" placeholder="评估人" class="!w-240px" clearable />
  21. </el-form-item>
  22. <el-form-item label="记录日期">
  23. <el-date-picker
  24. size="default"
  25. ref="selectRef"
  26. class="!w-240px"
  27. v-model="queryParams.assessDate"
  28. type="daterange"
  29. :clearable="true"
  30. :editable="false"
  31. placeholder="选择记录日期"
  32. value-format="YYYY-MM-DD"
  33. format="YYYY-MM-DD"
  34. date-format="YYYY-MM-DD"
  35. />
  36. </el-form-item>
  37. <el-form-item>
  38. <el-button @click="handleQuery" style="margin-left: 2vw"
  39. ><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button
  40. >
  41. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  42. </el-form-item>
  43. </el-form>
  44. </ContentWrap>
  45. <!-- 列表 -->
  46. <ContentWrap>
  47. <div class="mb-10px">
  48. <ButtonAdd @click="openForm(undefined)" />
  49. </div>
  50. <el-table v-loading="loading" :data="list" :header-cell-style="tableHeaderColor">
  51. <el-table-column header-align="center" align="center" label="序号" width="60">
  52. <template #default="scope">
  53. {{
  54. scope.$index + (queryParams.pageNo * queryParams.pageSize - queryParams.pageSize) + 1
  55. }}
  56. </template>
  57. </el-table-column>
  58. <el-table-column
  59. label="机构名称"
  60. v-if="userStore.getUser.id == 1"
  61. type="index"
  62. width="150"
  63. align="center"
  64. >
  65. <template #default="{ row }">
  66. {{ findLabelById(userStore.getOrgTenant.options, row.tenantId) }}
  67. </template>
  68. </el-table-column>
  69. <el-table-column
  70. prop="elderName"
  71. header-align="center"
  72. align="center"
  73. label="长者姓名"
  74. min-width="150"
  75. show-overflow-tooltip
  76. />
  77. <el-table-column
  78. prop="assessor"
  79. header-align="center"
  80. align="center"
  81. label="评估人"
  82. min-width="150"
  83. show-overflow-tooltip
  84. />
  85. <el-table-column
  86. prop="assessDate"
  87. header-align="center"
  88. align="center"
  89. label="记录日期"
  90. min-width="150"
  91. show-overflow-tooltip
  92. />
  93. <el-table-column
  94. prop="assessScore"
  95. header-align="center"
  96. align="center"
  97. label="评估总得分"
  98. min-width="120"
  99. show-overflow-tooltip
  100. />
  101. <el-table-column
  102. prop="riskLevel"
  103. header-align="center"
  104. align="center"
  105. label="风险等级"
  106. min-width="120"
  107. show-overflow-tooltip
  108. >
  109. <template #default="scope">
  110. <el-tag :type="getRiskLevelType(scope.row.riskLevel)">
  111. {{ getRiskLevelText(scope.row.riskLevel) }}
  112. </el-tag>
  113. </template>
  114. </el-table-column>
  115. <el-table-column
  116. prop="creator"
  117. header-align="center"
  118. align="center"
  119. label="记录人"
  120. min-width="150"
  121. show-overflow-tooltip
  122. />
  123. <el-table-column label="操作" align="center" width="200">
  124. <template #default="scope">
  125. <el-button link type="primary" @click="openFormEdit(scope.row, scope.row.id)">
  126. 编辑
  127. </el-button>
  128. <el-button link type="warning" @click="openFormDetail(scope.row, scope.row.id)">
  129. 详情
  130. </el-button>
  131. <el-button link type="danger" @click="openClose(scope.row)"> 删除 </el-button>
  132. </template>
  133. </el-table-column>
  134. </el-table>
  135. <!-- 分页 -->
  136. <Pagination
  137. :total="total"
  138. v-model:page="queryParams.pageNo"
  139. v-model:limit="queryParams.pageSize"
  140. @pagination="getList"
  141. />
  142. </ContentWrap>
  143. <AddForm ref="formRef" @success="getList" />
  144. </template>
  145. <script setup lang="ts">
  146. import AddForm from './AddForm.vue'
  147. import ButtonAdd from '@/components/ButtonAdd/src/ButtonAdd.vue'
  148. import { useUserStore } from '@/store/modules/user'
  149. import { getCurrentMonthRange } from '@/utils/dateUtil'
  150. import {
  151. entertainmentDelete,
  152. entertainmentPage,
  153. fallDownDelete,
  154. fallDownPage
  155. } from '@/api/social-work'
  156. import { findLabelById } from '@/utils/dict'
  157. const message = useMessage()
  158. const { t } = useI18n()
  159. const userStore = useUserStore()
  160. const loading = ref(true)
  161. const total = ref(0)
  162. const list = ref([])
  163. // 状态管理
  164. const showBatchExport = ref(false)
  165. const exportConfig = ref({
  166. title: '',
  167. batchMin: 1,
  168. batchMax: 999,
  169. countMin: 1,
  170. countMax: 200,
  171. defaultBatch: 1,
  172. defaultCount: 200,
  173. description: [] as string[]
  174. })
  175. const exportLoading = ref(false)
  176. let queryParams = reactive({
  177. pageNo: 1,
  178. pageSize: 10,
  179. elderName: '',
  180. assessor: '',
  181. // assessDate: getCurrentMonthRange(),
  182. assessDate: [],
  183. tenantIds: userStore.orgTenantId
  184. })
  185. const queryFormRef = ref()
  186. // 处理批量导出
  187. const handleBatchExport = async (batch: number, count: number) => {
  188. exportLoading.value = true
  189. console.log(batch, count)
  190. }
  191. /** 查询列表 */
  192. const getList = async () => {
  193. loading.value = true
  194. try {
  195. const data = await entertainmentPage(queryParams)
  196. list.value = data.list
  197. total.value = data.total
  198. } finally {
  199. loading.value = false
  200. }
  201. }
  202. /** 搜索按钮操作 */
  203. const handleQuery = async () => {
  204. if (!queryFormRef.value) return
  205. const valid = await queryFormRef.value.validate()
  206. if (!valid) return
  207. queryParams.pageNo = 1
  208. await getList()
  209. }
  210. /** 重置按钮操作 */
  211. const resetQuery = () => {
  212. queryParams.elderName = ''
  213. queryParams.assessor = ''
  214. queryParams.tenantIds = userStore.orgTenantId
  215. // queryParams.assessDate = getCurrentMonthRange()
  216. queryParams.assessDate = []
  217. queryFormRef.value.resetFields()
  218. handleQuery()
  219. }
  220. /** 添加/修改操作 */
  221. const formRef = ref()
  222. const openForm = (id?: number) => {
  223. if (queryParams.tenantIds.length == 0 || queryParams.tenantIds.length > 1) {
  224. message.error('新增只能选择一个机构')
  225. return
  226. }
  227. formRef.value.open(queryParams.tenantIds[0], id, false)
  228. }
  229. const openFormEdit = (row: any = {}, id?: number) => {
  230. formRef.value.open(row.tenantId, id, false)
  231. }
  232. const openFormDetail = (row: any = {}, id?: number) => {
  233. formRef.value.open(row.tenantId, id, true)
  234. }
  235. const openClose = async (item: any) => {
  236. try {
  237. const res = await message.confirm('确定要删除吗?', '提示')
  238. if (res == 'confirm') {
  239. try {
  240. const res = await entertainmentDelete(item.id)
  241. if (res) {
  242. message.success(t('common.updateSuccess'))
  243. await getList()
  244. }
  245. } catch (err) {}
  246. }
  247. } catch {}
  248. }
  249. /** 取消按钮操作 */
  250. const cancelDelete = async (id: number) => {
  251. try {
  252. await message.cancelConfirm()
  253. message.success(t('common.delSuccess'))
  254. await getList()
  255. } catch {}
  256. }
  257. const route = useRoute()
  258. /** 初始化 **/
  259. onMounted(() => {
  260. if (route.query && route.query.elderName) {
  261. queryParams.elderName = route.query.elderName as string
  262. }
  263. getList()
  264. })
  265. // 表头格式
  266. const tableHeaderColor = ({ rowIndex }: any) => {
  267. if (rowIndex === 0) {
  268. return {
  269. backgroundColor: '#f8f8f9',
  270. color: '#666666',
  271. fontWeight: 'bold'
  272. }
  273. }
  274. }
  275. // 获取风险等级类型
  276. const getRiskLevelType = (riskLevel: string) => {
  277. switch (riskLevel) {
  278. case 'none':
  279. return 'success'
  280. case 'low':
  281. return 'info'
  282. case 'medium':
  283. return 'warning'
  284. case 'high':
  285. return 'danger'
  286. default:
  287. return ''
  288. }
  289. }
  290. // 获取风险等级文本
  291. const getRiskLevelText = (riskLevel: string) => {
  292. switch (riskLevel) {
  293. case 'none':
  294. return '无风险'
  295. case 'low':
  296. return '低风险'
  297. case 'medium':
  298. return '中风险'
  299. case 'high':
  300. return '高风险'
  301. default:
  302. return '-'
  303. }
  304. }
  305. </script>
  306. <style scoped lang="scss"></style>