|
@@ -1,10 +1,27 @@
|
|
|
<template>
|
|
<template>
|
|
|
<div class="entry-container">
|
|
<div class="entry-container">
|
|
|
- <div class="search-wrap" ref="searchWrapRef">
|
|
|
|
|
- <el-form :model="state.queryParams" ref="queryRef">
|
|
|
|
|
|
|
+ <div
|
|
|
|
|
+ class="search-wrap"
|
|
|
|
|
+ ref="searchWrapRef"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-form
|
|
|
|
|
+ :model="state.queryParams"
|
|
|
|
|
+ ref="queryRef"
|
|
|
|
|
+ >
|
|
|
<el-form-item prop="serialNo">
|
|
<el-form-item prop="serialNo">
|
|
|
- <el-select v-model="state.queryParams.approveStatus" style="width: 100%" placeholder="审批状态" clearable @change="search">
|
|
|
|
|
- <el-option v-for="item in ApproveStatusList" :key="item.id" :label="item.name" :value="item.id"></el-option>
|
|
|
|
|
|
|
+ <el-select
|
|
|
|
|
+ v-model="state.queryParams.approveStatus"
|
|
|
|
|
+ style="width: 100%"
|
|
|
|
|
+ placeholder="审批状态"
|
|
|
|
|
+ clearable
|
|
|
|
|
+ @change="search"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-option
|
|
|
|
|
+ v-for="item in ApproveStatusList"
|
|
|
|
|
+ :key="item.id"
|
|
|
|
|
+ :label="item.name"
|
|
|
|
|
+ :value="item.id"
|
|
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
</el-select>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
<el-form-item prop="serialNo">
|
|
<el-form-item prop="serialNo">
|
|
@@ -18,30 +35,81 @@
|
|
|
@change="search"
|
|
@change="search"
|
|
|
/>
|
|
/>
|
|
|
</el-form-item>
|
|
</el-form-item>
|
|
|
- <el-form-item prop="serialNo">
|
|
|
|
|
- <el-select v-model="state.queryParams.isMyself" placeholder="申请人" clearable @change="search">
|
|
|
|
|
- <el-option label="我申请的" :value="1"></el-option>
|
|
|
|
|
- <el-option label="全部" :value="0"></el-option>
|
|
|
|
|
|
|
+ <!-- <el-form-item prop="serialNo">
|
|
|
|
|
+ <el-select
|
|
|
|
|
+ v-model="state.queryParams.isMyself"
|
|
|
|
|
+ placeholder="申请人"
|
|
|
|
|
+ clearable
|
|
|
|
|
+ @change="search"
|
|
|
|
|
+ >
|
|
|
|
|
+ <el-option
|
|
|
|
|
+ label="我申请的"
|
|
|
|
|
+ :value="1"
|
|
|
|
|
+ ></el-option>
|
|
|
|
|
+ <el-option
|
|
|
|
|
+ label="全部"
|
|
|
|
|
+ :value="0"
|
|
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
</el-select>
|
|
|
- </el-form-item>
|
|
|
|
|
|
|
+ </el-form-item> -->
|
|
|
</el-form>
|
|
</el-form>
|
|
|
<div style="text-align: right">
|
|
<div style="text-align: right">
|
|
|
- <el-button @click="handleExport" style="height: 25px" type="primary">导出</el-button>
|
|
|
|
|
|
|
+ <el-button
|
|
|
|
|
+ @click="handleExport"
|
|
|
|
|
+ style="height: 25px"
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ >
|
|
|
|
|
+ 导出
|
|
|
|
|
+ </el-button>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div class="list-container">
|
|
<div class="list-container">
|
|
|
- <van-list v-model:loading="state.loading" :finished="state.finished" finished-text="没有更多了" @load="onLoad">
|
|
|
|
|
- <van-cell v-for="item in state.list" :key="item" @click="handleCheckDetail(item)">
|
|
|
|
|
|
|
+ <van-list
|
|
|
|
|
+ v-model:loading="state.loading"
|
|
|
|
|
+ :finished="state.finished"
|
|
|
|
|
+ finished-text="没有更多了"
|
|
|
|
|
+ @load="onLoad"
|
|
|
|
|
+ >
|
|
|
|
|
+ <van-cell
|
|
|
|
|
+ v-for="item in state.list"
|
|
|
|
|
+ :key="item"
|
|
|
|
|
+ @click="handleCheckDetail(item)"
|
|
|
|
|
+ >
|
|
|
<template #default>
|
|
<template #default>
|
|
|
<div class="list">
|
|
<div class="list">
|
|
|
<header class="flex justify-between">
|
|
<header class="flex justify-between">
|
|
|
<strong class="title">{{ `${item.userName}的笼位申请` }}</strong>
|
|
<strong class="title">{{ `${item.userName}的笼位申请` }}</strong>
|
|
|
- <van-tag v-if="item.approveStatus == ApproveStatus.WAIT_SUBMIT" type="warning">待提交</van-tag>
|
|
|
|
|
- <van-tag v-else-if="item.approveStatus == ApproveStatus.APPROVING" type="primary">审核中</van-tag>
|
|
|
|
|
- <van-tag v-else-if="item.approveStatus == ApproveStatus.PASS" type="success">通过</van-tag>
|
|
|
|
|
- <van-tag v-else-if="item.approveStatus == ApproveStatus.REVOKE" type="success">撤销</van-tag>
|
|
|
|
|
- <van-tag v-else-if="item.approveStatus == ApproveStatus.REFUSE" type="danger">拒绝</van-tag>
|
|
|
|
|
|
|
+ <van-tag
|
|
|
|
|
+ v-if="item.approveStatus == ApproveStatus.WAIT_SUBMIT"
|
|
|
|
|
+ type="warning"
|
|
|
|
|
+ >
|
|
|
|
|
+ 待提交
|
|
|
|
|
+ </van-tag>
|
|
|
|
|
+ <van-tag
|
|
|
|
|
+ v-else-if="item.approveStatus == ApproveStatus.APPROVING"
|
|
|
|
|
+ type="primary"
|
|
|
|
|
+ >
|
|
|
|
|
+ 审核中
|
|
|
|
|
+ </van-tag>
|
|
|
|
|
+ <van-tag
|
|
|
|
|
+ v-else-if="item.approveStatus == ApproveStatus.PASS"
|
|
|
|
|
+ type="success"
|
|
|
|
|
+ >
|
|
|
|
|
+ 通过
|
|
|
|
|
+ </van-tag>
|
|
|
|
|
+ <van-tag
|
|
|
|
|
+ v-else-if="item.approveStatus == ApproveStatus.REVOKE"
|
|
|
|
|
+ type="success"
|
|
|
|
|
+ >
|
|
|
|
|
+ 撤销
|
|
|
|
|
+ </van-tag>
|
|
|
|
|
+ <van-tag
|
|
|
|
|
+ v-else-if="item.approveStatus == ApproveStatus.REFUSE"
|
|
|
|
|
+ type="danger"
|
|
|
|
|
+ >
|
|
|
|
|
+ 拒绝
|
|
|
|
|
+ </van-tag>
|
|
|
</header>
|
|
</header>
|
|
|
<p class="inst-title">
|
|
<p class="inst-title">
|
|
|
<span>课题名称</span>
|
|
<span>课题名称</span>
|
|
@@ -106,8 +174,9 @@
|
|
|
style="height: 25px"
|
|
style="height: 25px"
|
|
|
type="primary"
|
|
type="primary"
|
|
|
@click="handleRefundable(item)"
|
|
@click="handleRefundable(item)"
|
|
|
- >退还</el-button
|
|
|
|
|
>
|
|
>
|
|
|
|
|
+ 退还
|
|
|
|
|
+ </el-button>
|
|
|
</span>
|
|
</span>
|
|
|
<span class="time">{{ formatDate(new Date(item.createdTime), 'YYYY-mm-dd') }}</span>
|
|
<span class="time">{{ formatDate(new Date(item.createdTime), 'YYYY-mm-dd') }}</span>
|
|
|
</footer>
|
|
</footer>
|
|
@@ -117,11 +186,28 @@
|
|
|
</van-list>
|
|
</van-list>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
- <ApplicationModal ref="cageApplicationModalRef" @refresh="handleRefresh" />
|
|
|
|
|
- <DetailModal :showDialog="showDetailDialog" :isReturnCageList="false" ref="detailModalRef" @close="() => (showDetailDialog = false)" />
|
|
|
|
|
- <ReturnCageDialog ref="returnCageDialogRef" :currentRefundableItemNumber="currentRefundableItemNumber" :getTableData="handleRefresh" />
|
|
|
|
|
|
|
+ <ApplicationModal
|
|
|
|
|
+ ref="cageApplicationModalRef"
|
|
|
|
|
+ @refresh="handleRefresh"
|
|
|
|
|
+ />
|
|
|
|
|
+ <DetailModal
|
|
|
|
|
+ :showDialog="showDetailDialog"
|
|
|
|
|
+ :isReturnCageList="false"
|
|
|
|
|
+ ref="detailModalRef"
|
|
|
|
|
+ @close="() => (showDetailDialog = false)"
|
|
|
|
|
+ />
|
|
|
|
|
+ <ReturnCageDialog
|
|
|
|
|
+ ref="returnCageDialogRef"
|
|
|
|
|
+ :currentRefundableItemNumber="currentRefundableItemNumber"
|
|
|
|
|
+ :getTableData="handleRefresh"
|
|
|
|
|
+ />
|
|
|
|
|
|
|
|
- <van-floating-bubble v-model:offset="offset" icon="plus" @click="handleApplication" axis="y" />
|
|
|
|
|
|
|
+ <van-floating-bubble
|
|
|
|
|
+ v-model:offset="offset"
|
|
|
|
|
+ icon="plus"
|
|
|
|
|
+ @click="handleApplication"
|
|
|
|
|
+ axis="y"
|
|
|
|
|
+ />
|
|
|
</div>
|
|
</div>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
@@ -129,22 +215,22 @@
|
|
|
import { ref, reactive, onMounted, defineAsyncComponent } from 'vue'
|
|
import { ref, reactive, onMounted, defineAsyncComponent } from 'vue'
|
|
|
import to from 'await-to-js'
|
|
import to from 'await-to-js'
|
|
|
import dayjs from 'dayjs'
|
|
import dayjs from 'dayjs'
|
|
|
- import { storeToRefs } from 'pinia'
|
|
|
|
|
import { useRouter, useRoute } from 'vue-router'
|
|
import { useRouter, useRoute } from 'vue-router'
|
|
|
|
|
|
|
|
import { formatDate } from '/@/utils/formatTime'
|
|
import { formatDate } from '/@/utils/formatTime'
|
|
|
- import { useUserInfo } from '/@/stores/userInfo'
|
|
|
|
|
import { usePlatAnimalCageApplicationApi } from '/@/api/platform/animal'
|
|
import { usePlatAnimalCageApplicationApi } from '/@/api/platform/animal'
|
|
|
import { ApproveStatus, ReturnStatus, LeavelList, ApproveStatusList } from '/@/constants/pageConstants'
|
|
import { ApproveStatus, ReturnStatus, LeavelList, ApproveStatusList } from '/@/constants/pageConstants'
|
|
|
|
|
+ import { useUserInfos } from '/@/hooks/useUserInfos'
|
|
|
|
|
|
|
|
const ApplicationModal = defineAsyncComponent(() => import('/@/view/animal/application/components/Application.vue'))
|
|
const ApplicationModal = defineAsyncComponent(() => import('/@/view/animal/application/components/Application.vue'))
|
|
|
const DetailModal = defineAsyncComponent(() => import('/@/view/animal/application/components/Detail.vue'))
|
|
const DetailModal = defineAsyncComponent(() => import('/@/view/animal/application/components/Detail.vue'))
|
|
|
- const ReturnCageDialog = defineAsyncComponent(() => import('/@/view/animal/application/components/ReturnCageDialog.vue'))
|
|
|
|
|
|
|
+ const ReturnCageDialog = defineAsyncComponent(
|
|
|
|
|
+ () => import('/@/view/animal/application/components/ReturnCageDialog.vue'),
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
const platAnimalCageApplicationApi = usePlatAnimalCageApplicationApi()
|
|
const platAnimalCageApplicationApi = usePlatAnimalCageApplicationApi()
|
|
|
- const stores = useUserInfo()
|
|
|
|
|
- const { userInfos } = storeToRefs(stores)
|
|
|
|
|
|
|
|
|
|
|
|
+ const { userInfos } = useUserInfos()
|
|
|
const router = useRouter()
|
|
const router = useRouter()
|
|
|
const route = useRoute()
|
|
const route = useRoute()
|
|
|
|
|
|
|
@@ -166,11 +252,11 @@
|
|
|
startDate: '',
|
|
startDate: '',
|
|
|
endDate: '',
|
|
endDate: '',
|
|
|
approveStatus: '',
|
|
approveStatus: '',
|
|
|
- isMyself: 0
|
|
|
|
|
|
|
+ isMyself: userInfos.value.userRoles === 'project_group_member' ? 1 : 0,
|
|
|
},
|
|
},
|
|
|
finished: false,
|
|
finished: false,
|
|
|
loading: true,
|
|
loading: true,
|
|
|
- list: [] as any[]
|
|
|
|
|
|
|
+ list: [] as any[],
|
|
|
})
|
|
})
|
|
|
const currentRefundableItemNumber = ref<number>(0)
|
|
const currentRefundableItemNumber = ref<number>(0)
|
|
|
|
|
|
|
@@ -186,7 +272,7 @@
|
|
|
startDate: '',
|
|
startDate: '',
|
|
|
endDate: '',
|
|
endDate: '',
|
|
|
approveStatus: '',
|
|
approveStatus: '',
|
|
|
- isMyself: 0
|
|
|
|
|
|
|
+ isMyself: userInfos.value.userRoles === 'project_group_member' ? 1 : 0,
|
|
|
}
|
|
}
|
|
|
;(state.finished = false), (state.loading = true), (state.list = [] as any[])
|
|
;(state.finished = false), (state.loading = true), (state.list = [] as any[])
|
|
|
}
|
|
}
|
|
@@ -194,7 +280,7 @@
|
|
|
const setListPayload = (isExport?: boolean) => {
|
|
const setListPayload = (isExport?: boolean) => {
|
|
|
const payload = {
|
|
const payload = {
|
|
|
...state.queryParams,
|
|
...state.queryParams,
|
|
|
- pageSize: isExport ? 99999 : state.queryParams.pageSize
|
|
|
|
|
|
|
+ pageSize: isExport ? 99999 : state.queryParams.pageSize,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (dateTime.value && dateTime.value[0]) {
|
|
if (dateTime.value && dateTime.value[0]) {
|
|
@@ -231,23 +317,26 @@
|
|
|
const [err, res]: ToResponse = await to(
|
|
const [err, res]: ToResponse = await to(
|
|
|
platAnimalCageApplicationApi.getList({
|
|
platAnimalCageApplicationApi.getList({
|
|
|
...setListPayload(),
|
|
...setListPayload(),
|
|
|
- pageNum: isSearch ? 1 : state.queryParams.pageNum
|
|
|
|
|
- })
|
|
|
|
|
|
|
+ pageNum: isSearch ? 1 : state.queryParams.pageNum,
|
|
|
|
|
+ }),
|
|
|
)
|
|
)
|
|
|
if (err) return
|
|
if (err) return
|
|
|
- const list = res?.data?.list || []
|
|
|
|
|
- state.loading = false
|
|
|
|
|
|
|
|
|
|
- if (!isSearch) {
|
|
|
|
|
- for (const item of list) {
|
|
|
|
|
- state.list.push(item)
|
|
|
|
|
- }
|
|
|
|
|
- state.queryParams.pageNum++
|
|
|
|
|
- if (list.length < state.queryParams.pageSize) {
|
|
|
|
|
- state.finished = true
|
|
|
|
|
|
|
+ if (res && res.data && res.data.list) {
|
|
|
|
|
+ const list = res.data.list || []
|
|
|
|
|
+ state.loading = false
|
|
|
|
|
+
|
|
|
|
|
+ if (!isSearch) {
|
|
|
|
|
+ for (const item of list) {
|
|
|
|
|
+ state.list.push(item)
|
|
|
|
|
+ }
|
|
|
|
|
+ state.queryParams.pageNum++
|
|
|
|
|
+ if (list.length < state.queryParams.pageSize) {
|
|
|
|
|
+ state.finished = true
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ state.list = list
|
|
|
}
|
|
}
|
|
|
- } else {
|
|
|
|
|
- state.list = list
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -275,7 +364,9 @@
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const handleExport = async () => {
|
|
const handleExport = async () => {
|
|
|
- const [err, res]: ToResponse = await to(platAnimalCageApplicationApi.getApplicationListExport({ ...setListPayload(true), base64Enable: 1 }))
|
|
|
|
|
|
|
+ const [err, res]: ToResponse = await to(
|
|
|
|
|
+ platAnimalCageApplicationApi.getApplicationListExport({ ...setListPayload(true), base64Enable: 1 }),
|
|
|
|
|
+ )
|
|
|
|
|
|
|
|
if (err) return
|
|
if (err) return
|
|
|
|
|
|