|
|
@@ -1,32 +1,85 @@
|
|
|
<template>
|
|
|
<div class="entry-container">
|
|
|
- <div class="search-wrap" ref="searchWrapRef">
|
|
|
- <el-form :model="state.queryParams" ref="queryRef">
|
|
|
- <el-form-item prop="applyDate">
|
|
|
- <el-date-picker v-model="state.queryParams.applyDate" type="date" style="width: 100%" placeholder="申请时间"
|
|
|
- clearable @change="search" />
|
|
|
- </el-form-item>
|
|
|
+ <div
|
|
|
+ class="search-wrap"
|
|
|
+ ref="searchWrapRef"
|
|
|
+ >
|
|
|
+ <el-form
|
|
|
+ :model="state.queryParams"
|
|
|
+ ref="queryRef"
|
|
|
+ >
|
|
|
<el-form-item prop="isMyself">
|
|
|
- <el-select v-model="state.queryParams.isMyself" style="width: 100%" placeholder="申请人" clearable
|
|
|
- @change="search">
|
|
|
- <el-option label="我申请的" :value="1"></el-option>
|
|
|
- <el-option label="全部" :value="0"></el-option>
|
|
|
+ <el-select
|
|
|
+ v-model="state.queryParams.isMyself"
|
|
|
+ style="width: 100%"
|
|
|
+ placeholder="申请人"
|
|
|
+ clearable
|
|
|
+ @change="search"
|
|
|
+ >
|
|
|
+ <el-option
|
|
|
+ label="我申请的"
|
|
|
+ :value="1"
|
|
|
+ ></el-option>
|
|
|
+ <el-option
|
|
|
+ label="全部"
|
|
|
+ :value="0"
|
|
|
+ ></el-option>
|
|
|
</el-select>
|
|
|
</el-form-item>
|
|
|
+ <el-form-item prop="dateRange">
|
|
|
+ <el-input
|
|
|
+ v-model="dateRangeText"
|
|
|
+ placeholder="请选择申请时间范围"
|
|
|
+ readonly
|
|
|
+ style="width: 100%"
|
|
|
+ @click="showCalendar = true"
|
|
|
+ >
|
|
|
+ <template #suffix>
|
|
|
+ <el-icon
|
|
|
+ v-if="dateRangeText"
|
|
|
+ style="cursor: pointer; margin-right: 8px"
|
|
|
+ @click.stop="clearDateRange"
|
|
|
+ >
|
|
|
+ <Close />
|
|
|
+ </el-icon>
|
|
|
+ <el-icon
|
|
|
+ style="cursor: pointer"
|
|
|
+ @click.stop="showCalendar = true"
|
|
|
+ >
|
|
|
+ <Calendar />
|
|
|
+ </el-icon>
|
|
|
+ </template>
|
|
|
+ </el-input>
|
|
|
+ </el-form-item>
|
|
|
</el-form>
|
|
|
<div style="text-align: right">
|
|
|
- <el-button @click="handleExport" color="#2c78ff">
|
|
|
+ <el-button
|
|
|
+ @click="handleExport"
|
|
|
+ color="#2c78ff"
|
|
|
+ >
|
|
|
导出
|
|
|
</el-button>
|
|
|
- <el-button color="#2c78ff" @click="openCageApplicationModal()">
|
|
|
+ <el-button
|
|
|
+ color="#2c78ff"
|
|
|
+ @click="openCageApplicationModal()"
|
|
|
+ >
|
|
|
申请带离
|
|
|
</el-button>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<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>
|
|
|
<div class="list">
|
|
|
<header class="flex justify-between">
|
|
|
@@ -63,7 +116,7 @@
|
|
|
<p class="inst-title">
|
|
|
<span>动物类别</span>
|
|
|
<span class="title ml8">
|
|
|
- {{animalTypeList.find((type) => type.id === item.categoryId)?.name}}
|
|
|
+ {{ animalTypeList.find((type) => type.id === item.categoryId)?.name }}
|
|
|
</span>
|
|
|
</p>
|
|
|
<p class="inst-title">
|
|
|
@@ -75,19 +128,34 @@
|
|
|
<p class="inst-title">
|
|
|
<span>申请状态</span>
|
|
|
<span class="title ml8">
|
|
|
- <van-tag v-if="item.approveStatus == ApplyLeaveApproveStatus.SUBMIT" type="primary">
|
|
|
+ <van-tag
|
|
|
+ v-if="item.approveStatus == ApplyLeaveApproveStatus.SUBMIT"
|
|
|
+ type="primary"
|
|
|
+ >
|
|
|
提交
|
|
|
</van-tag>
|
|
|
- <van-tag v-else-if="item.approveStatus == ApplyLeaveApproveStatus.WAIT_APPROVE" type="primary">
|
|
|
+ <van-tag
|
|
|
+ v-else-if="item.approveStatus == ApplyLeaveApproveStatus.WAIT_APPROVE"
|
|
|
+ type="primary"
|
|
|
+ >
|
|
|
待审核
|
|
|
</van-tag>
|
|
|
- <van-tag v-else-if="item.approveStatus == ApplyLeaveApproveStatus.PASS" type="success">
|
|
|
+ <van-tag
|
|
|
+ v-else-if="item.approveStatus == ApplyLeaveApproveStatus.PASS"
|
|
|
+ type="success"
|
|
|
+ >
|
|
|
通过
|
|
|
</van-tag>
|
|
|
- <van-tag v-else-if="item.approveStatus == ApplyLeaveApproveStatus.REVOKE" type="success">
|
|
|
+ <van-tag
|
|
|
+ v-else-if="item.approveStatus == ApplyLeaveApproveStatus.REVOKE"
|
|
|
+ type="success"
|
|
|
+ >
|
|
|
撤回
|
|
|
</van-tag>
|
|
|
- <van-tag v-else-if="item.approveStatus == ApplyLeaveApproveStatus.REFUSE" type="danger">
|
|
|
+ <van-tag
|
|
|
+ v-else-if="item.approveStatus == ApplyLeaveApproveStatus.REFUSE"
|
|
|
+ type="danger"
|
|
|
+ >
|
|
|
审核不通过
|
|
|
</van-tag>
|
|
|
</span>
|
|
|
@@ -95,16 +163,25 @@
|
|
|
<p class="inst-title">
|
|
|
<span>带离状态</span>
|
|
|
<span class="title ml8">
|
|
|
- <van-tag v-if="item.approveStatus == ApplyLeaveApproveStatus.PASS" type="success">
|
|
|
+ <van-tag
|
|
|
+ v-if="item.approveStatus == ApplyLeaveApproveStatus.PASS"
|
|
|
+ type="success"
|
|
|
+ >
|
|
|
已带离
|
|
|
</van-tag>
|
|
|
- <van-tag v-else-if="
|
|
|
- item.approveStatus == ApplyLeaveApproveStatus.WAIT_APPROVE ||
|
|
|
- item.approveStatus === ApplyLeaveApproveStatus.REFUSE
|
|
|
- " type="primary">
|
|
|
+ <van-tag
|
|
|
+ v-else-if="
|
|
|
+ item.approveStatus == ApplyLeaveApproveStatus.WAIT_APPROVE ||
|
|
|
+ item.approveStatus === ApplyLeaveApproveStatus.REFUSE
|
|
|
+ "
|
|
|
+ type="primary"
|
|
|
+ >
|
|
|
待带离
|
|
|
</van-tag>
|
|
|
- <van-tag v-else-if="takeawayComplate(item)" type="success">
|
|
|
+ <van-tag
|
|
|
+ v-else-if="takeawayComplate(item)"
|
|
|
+ type="success"
|
|
|
+ >
|
|
|
已结束
|
|
|
</van-tag>
|
|
|
</span>
|
|
|
@@ -127,16 +204,27 @@
|
|
|
{{ item.returnFemaleNumber + item.returnMaleNumber }}
|
|
|
</span>
|
|
|
</p>
|
|
|
- <el-row class="mt16" :gutter="20">
|
|
|
+ <el-row
|
|
|
+ class="mt16"
|
|
|
+ :gutter="20"
|
|
|
+ >
|
|
|
<el-col :span="12">
|
|
|
- <el-button style="width: 100%" v-if="item.approveStatus === ApplyLeaveApproveStatus.PASS"
|
|
|
- type="primary" @click.stop="handleReturn(item)">
|
|
|
+ <el-button
|
|
|
+ style="width: 100%"
|
|
|
+ v-if="item.approveStatus === ApplyLeaveApproveStatus.PASS"
|
|
|
+ type="primary"
|
|
|
+ @click.stop="handleReturn(item)"
|
|
|
+ >
|
|
|
转回
|
|
|
</el-button>
|
|
|
</el-col>
|
|
|
<el-col :span="12">
|
|
|
- <el-button style="width: 100%" v-if="item.approveStatus === ApplyLeaveApproveStatus.PASS"
|
|
|
- type="primary" @click.stop="handleDie(item)">
|
|
|
+ <el-button
|
|
|
+ style="width: 100%"
|
|
|
+ v-if="item.approveStatus === ApplyLeaveApproveStatus.PASS"
|
|
|
+ type="primary"
|
|
|
+ @click.stop="handleDie(item)"
|
|
|
+ >
|
|
|
淘汰动物上报
|
|
|
</el-button>
|
|
|
</el-col>
|
|
|
@@ -147,240 +235,291 @@
|
|
|
</van-list>
|
|
|
</div>
|
|
|
</div>
|
|
|
- <AddEdit ref="addEditRef" @refresh="onLoad(true)" />
|
|
|
- <TurnBackModal ref="turnBackModalRef" @refresh="onLoad(true)" />
|
|
|
- <DieModal ref="dieModalRef" @refresh="onLoad(true)" />
|
|
|
+ <AddEdit
|
|
|
+ ref="addEditRef"
|
|
|
+ @refresh="onLoad(true)"
|
|
|
+ />
|
|
|
+ <TurnBackModal
|
|
|
+ ref="turnBackModalRef"
|
|
|
+ @refresh="onLoad(true)"
|
|
|
+ />
|
|
|
+ <DieModal
|
|
|
+ ref="dieModalRef"
|
|
|
+ @refresh="onLoad(true)"
|
|
|
+ />
|
|
|
+
|
|
|
+ <van-popup
|
|
|
+ v-model:show="showCalendar"
|
|
|
+ position="bottom"
|
|
|
+ :style="{ height: '80vh' }"
|
|
|
+ round
|
|
|
+ >
|
|
|
+ <van-calendar
|
|
|
+ v-model:show="showCalendar"
|
|
|
+ type="range"
|
|
|
+ :min-date="new Date(1900, 0, 1)"
|
|
|
+ @confirm="onDateRangeConfirm"
|
|
|
+ />
|
|
|
+ </van-popup>
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts" setup>
|
|
|
-import { ref, reactive, onMounted } from 'vue'
|
|
|
-import to from 'await-to-js'
|
|
|
-import dayjs from 'dayjs'
|
|
|
-
|
|
|
-import { usePlatAnimalCageApplicationApi } from '/@/api/platform/animal'
|
|
|
-import { ApplyLeaveApproveStatus, TakeawayList } from '/@/constants/pageConstants'
|
|
|
-import AddEdit from './components/addEdit.vue'
|
|
|
-import TurnBackModal from './components/turnBack.vue'
|
|
|
-import DieModal from './components/dieModal.vue'
|
|
|
-
|
|
|
-const platAnimalCageApplicationApi = usePlatAnimalCageApplicationApi()
|
|
|
-
|
|
|
-const addEditRef = ref<InstanceType<typeof AddEdit>>()
|
|
|
-const turnBackModalRef = ref<InstanceType<typeof TurnBackModal>>()
|
|
|
-const dieModalRef = ref<InstanceType<typeof DieModal>>()
|
|
|
-
|
|
|
-const animalTypeList = ref([])
|
|
|
-const dateTime = ref<any>([])
|
|
|
-
|
|
|
-const state = reactive({
|
|
|
- queryParams: {
|
|
|
- pageNum: 1,
|
|
|
- pageSize: 10,
|
|
|
- isMyself: 0,
|
|
|
- applyDate: '',
|
|
|
- startDate: '',
|
|
|
- endDate: '',
|
|
|
- },
|
|
|
- loading: true,
|
|
|
- list: [] as any[],
|
|
|
- finished: false,
|
|
|
-})
|
|
|
-
|
|
|
-const getDicts = () => {
|
|
|
- Promise.all([platAnimalCageApplicationApi.getAnimalTypeList({})]).then(([animalType]) => {
|
|
|
- animalTypeList.value = animalType.data
|
|
|
+ import { ref, reactive, onMounted, computed } from 'vue'
|
|
|
+ import to from 'await-to-js'
|
|
|
+ import dayjs from 'dayjs'
|
|
|
+ import { Calendar, Close } from '@element-plus/icons-vue'
|
|
|
+
|
|
|
+ import { usePlatAnimalCageApplicationApi } from '/@/api/platform/animal'
|
|
|
+ import { ApplyLeaveApproveStatus, TakeawayList } from '/@/constants/pageConstants'
|
|
|
+ import AddEdit from './components/addEdit.vue'
|
|
|
+ import TurnBackModal from './components/turnBack.vue'
|
|
|
+ import DieModal from './components/dieModal.vue'
|
|
|
+
|
|
|
+ const platAnimalCageApplicationApi = usePlatAnimalCageApplicationApi()
|
|
|
+
|
|
|
+ const addEditRef = ref<InstanceType<typeof AddEdit>>()
|
|
|
+ const turnBackModalRef = ref<InstanceType<typeof TurnBackModal>>()
|
|
|
+ const dieModalRef = ref<InstanceType<typeof DieModal>>()
|
|
|
+
|
|
|
+ const animalTypeList = ref([])
|
|
|
+ const dateTime = ref<any>([])
|
|
|
+ const showCalendar = ref(false)
|
|
|
+ const selectedDateRange = ref<[Date, Date] | null>(null)
|
|
|
+
|
|
|
+ const state = reactive({
|
|
|
+ queryParams: {
|
|
|
+ pageNum: 1,
|
|
|
+ pageSize: 10,
|
|
|
+ isMyself: 0,
|
|
|
+ takeawayDateStart: '',
|
|
|
+ takeawayDateEnd: '',
|
|
|
+ },
|
|
|
+ loading: true,
|
|
|
+ list: [] as any[],
|
|
|
+ finished: false,
|
|
|
})
|
|
|
-}
|
|
|
|
|
|
-const setListPayload = (isExport?: boolean) => {
|
|
|
- const payload = {
|
|
|
- ...state.queryParams,
|
|
|
- pageSize: isExport ? 99999 : state.queryParams.pageSize,
|
|
|
- }
|
|
|
+ const dateRangeText = computed(() => {
|
|
|
+ if (selectedDateRange.value && selectedDateRange.value.length === 2) {
|
|
|
+ const start = dayjs(selectedDateRange.value[0]).format('YYYY-MM-DD')
|
|
|
+ const end = dayjs(selectedDateRange.value[1]).format('YYYY-MM-DD')
|
|
|
+ return `${start} 至 ${end}`
|
|
|
+ }
|
|
|
+ return ''
|
|
|
+ })
|
|
|
|
|
|
- if (dateTime.value && dateTime.value[0]) {
|
|
|
- payload.startDate = dayjs(dateTime.value[0]).format('YYYY-MM-DD')
|
|
|
+ const getDicts = () => {
|
|
|
+ Promise.all([platAnimalCageApplicationApi.getAnimalTypeList({})]).then(([animalType]) => {
|
|
|
+ animalTypeList.value = animalType.data
|
|
|
+ })
|
|
|
}
|
|
|
|
|
|
- if (dateTime.value && dateTime.value[1]) {
|
|
|
- payload.endDate = dayjs(dateTime.value[1]).format('YYYY-MM-DD')
|
|
|
- }
|
|
|
+ const setListPayload = (isExport?: boolean) => {
|
|
|
+ const payload = {
|
|
|
+ ...state.queryParams,
|
|
|
+ pageSize: isExport ? 99999 : state.queryParams.pageSize,
|
|
|
+ }
|
|
|
|
|
|
- Object.entries(payload).forEach(([key, value]) => {
|
|
|
- if (value === '' || value === null) {
|
|
|
- delete payload[key as keyof typeof payload]
|
|
|
+ if (dateTime.value && dateTime.value[0]) {
|
|
|
+ payload.takeawayDateStart = dayjs(dateTime.value[0]).format('YYYY-MM-DD') + ' 00:00:00'
|
|
|
}
|
|
|
- })
|
|
|
|
|
|
- return payload
|
|
|
-}
|
|
|
-
|
|
|
-const onLoad = async (isSearch?: boolean) => {
|
|
|
- const [err, res]: ToResponse = await to(
|
|
|
- platAnimalCageApplicationApi.getAnimalTakeawayApplicationsList({
|
|
|
- ...setListPayload(),
|
|
|
- pageNum: isSearch ? 1 : state.queryParams.pageNum,
|
|
|
- }),
|
|
|
- )
|
|
|
- if (err) return
|
|
|
-
|
|
|
- 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)
|
|
|
+ if (dateTime.value && dateTime.value[1]) {
|
|
|
+ payload.takeawayDateEnd = dayjs(dateTime.value[1]).format('YYYY-MM-DD') + ' 23:59:59'
|
|
|
+ }
|
|
|
+
|
|
|
+ Object.entries(payload).forEach(([key, value]) => {
|
|
|
+ if (value === '' || value === null) {
|
|
|
+ delete payload[key as keyof typeof payload]
|
|
|
}
|
|
|
- state.queryParams.pageNum++
|
|
|
- if (list.length < state.queryParams.pageSize) {
|
|
|
- state.finished = true
|
|
|
+ })
|
|
|
+
|
|
|
+ return payload
|
|
|
+ }
|
|
|
+
|
|
|
+ const onLoad = async (isSearch?: boolean) => {
|
|
|
+ const [err, res]: ToResponse = await to(
|
|
|
+ platAnimalCageApplicationApi.getAnimalTakeawayApplicationsList({
|
|
|
+ ...setListPayload(),
|
|
|
+ pageNum: isSearch ? 1 : state.queryParams.pageNum,
|
|
|
+ }),
|
|
|
+ )
|
|
|
+ if (err) return
|
|
|
+
|
|
|
+ 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
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-const search = () => {
|
|
|
- onLoad(true)
|
|
|
-}
|
|
|
-
|
|
|
-const handleExport = async () => {
|
|
|
- const [err, res]: ToResponse = await to(
|
|
|
- platAnimalCageApplicationApi.getAnimalTakeawayApplicationsListExport({
|
|
|
- ...setListPayload(true),
|
|
|
- pageSize: 99999,
|
|
|
- base64Enable: 1,
|
|
|
- }),
|
|
|
- )
|
|
|
-
|
|
|
- if (err) return
|
|
|
-
|
|
|
- if (res && res.data) {
|
|
|
- const { base64, name } = res.data
|
|
|
- const link = document.createElement('a')
|
|
|
- link.href = `data:application/octet-stream;base64,${base64}`
|
|
|
- link.download = name
|
|
|
- link.style.display = 'none'
|
|
|
- document.body.appendChild(link)
|
|
|
- link.click()
|
|
|
- document.body.removeChild(link)
|
|
|
+
|
|
|
+ const search = () => {
|
|
|
+ onLoad(true)
|
|
|
}
|
|
|
-}
|
|
|
-
|
|
|
-const handleCheckDetail = (row: TakeawayList) => {
|
|
|
- addEditRef.value?.openDialog('detail', row)
|
|
|
-}
|
|
|
-
|
|
|
-const formatToChineseDate = (dateStr: string) => {
|
|
|
- const date = new Date(dateStr)
|
|
|
- const year = date.getFullYear()
|
|
|
- const month = String(date.getMonth() + 1).padStart(2, '0')
|
|
|
- const day = String(date.getDate()).padStart(2, '0')
|
|
|
-
|
|
|
- return `${year}年${month}月${day}日`
|
|
|
-}
|
|
|
-
|
|
|
-const takeawayComplate = (data: TakeawayList) => {
|
|
|
- const {
|
|
|
- dieFemaleNumber,
|
|
|
- dieMaleNumber,
|
|
|
- returnFemaleNumber,
|
|
|
- returnMaleNumber,
|
|
|
- takeawayMaleNumber,
|
|
|
- takewayFemaleNumber,
|
|
|
- } = data
|
|
|
-
|
|
|
- const total = takeawayMaleNumber + takewayFemaleNumber
|
|
|
- const returnTotal = returnFemaleNumber + returnMaleNumber
|
|
|
- const dieTotal = dieFemaleNumber + dieMaleNumber
|
|
|
-
|
|
|
- return returnTotal >= total || dieTotal >= total || returnTotal + dieTotal >= total
|
|
|
-}
|
|
|
-
|
|
|
-const openCageApplicationModal = () => {
|
|
|
- addEditRef.value.openDialog('add')
|
|
|
-}
|
|
|
-
|
|
|
-const handleReturn = (row: TakeawayList) => {
|
|
|
- turnBackModalRef.value?.openDialog(row)
|
|
|
-}
|
|
|
-
|
|
|
-const handleDie = (row: TakeawayList) => {
|
|
|
- dieModalRef.value?.openDialog(row)
|
|
|
-}
|
|
|
-
|
|
|
-onMounted(() => {
|
|
|
- getDicts()
|
|
|
- onLoad()
|
|
|
-})
|
|
|
-</script>
|
|
|
|
|
|
-<style lang="scss" scoped>
|
|
|
-.entry-container {
|
|
|
- position: relative;
|
|
|
- display: flex;
|
|
|
- flex-direction: column;
|
|
|
-
|
|
|
- .search-wrap {
|
|
|
- background: #fff;
|
|
|
- margin-bottom: 10px;
|
|
|
- padding: 15px;
|
|
|
+ const onDateRangeConfirm = (values: Date[]) => {
|
|
|
+ if (values && values.length === 2) {
|
|
|
+ selectedDateRange.value = [values[0], values[1]]
|
|
|
+ dateTime.value = [dayjs(values[0]).format('YYYY-MM-DD'), dayjs(values[1]).format('YYYY-MM-DD')]
|
|
|
+ showCalendar.value = false
|
|
|
+ search()
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
- .list-container {
|
|
|
- overflow-y: auto;
|
|
|
- padding: 10px;
|
|
|
- border-radius: 4px;
|
|
|
- flex: 1;
|
|
|
+ const clearDateRange = () => {
|
|
|
+ selectedDateRange.value = null
|
|
|
+ dateTime.value = []
|
|
|
+ state.queryParams.takeawayDateStart = ''
|
|
|
+ state.queryParams.takeawayDateEnd = ''
|
|
|
+ search()
|
|
|
}
|
|
|
|
|
|
- .van-list {
|
|
|
- .van-cell {
|
|
|
- background-color: #fff;
|
|
|
+ const handleExport = async () => {
|
|
|
+ const [err, res]: ToResponse = await to(
|
|
|
+ platAnimalCageApplicationApi.getAnimalTakeawayApplicationsListExport({
|
|
|
+ ...setListPayload(true),
|
|
|
+ pageSize: 99999,
|
|
|
+ base64Enable: 1,
|
|
|
+ }),
|
|
|
+ )
|
|
|
+
|
|
|
+ if (err) return
|
|
|
+
|
|
|
+ if (res && res.data) {
|
|
|
+ const { base64, name } = res.data
|
|
|
+ const link = document.createElement('a')
|
|
|
+ link.href = `data:application/octet-stream;base64,${base64}`
|
|
|
+ link.download = name
|
|
|
+ link.style.display = 'none'
|
|
|
+ document.body.appendChild(link)
|
|
|
+ link.click()
|
|
|
+ document.body.removeChild(link)
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- +.van-cell {
|
|
|
- margin-top: 10px;
|
|
|
- }
|
|
|
+ const handleCheckDetail = (row: TakeawayList) => {
|
|
|
+ addEditRef.value?.openDialog('detail', row)
|
|
|
+ }
|
|
|
|
|
|
- header,
|
|
|
- footer {
|
|
|
- color: #333;
|
|
|
- }
|
|
|
+ const formatToChineseDate = (dateStr: string) => {
|
|
|
+ const date = new Date(dateStr)
|
|
|
+ const year = date.getFullYear()
|
|
|
+ const month = String(date.getMonth() + 1).padStart(2, '0')
|
|
|
+ const day = String(date.getDate()).padStart(2, '0')
|
|
|
|
|
|
- .title {
|
|
|
- flex: 1;
|
|
|
- white-space: nowrap;
|
|
|
- overflow: hidden;
|
|
|
- text-overflow: ellipsis;
|
|
|
- text-align: left;
|
|
|
- }
|
|
|
+ return `${year}年${month}月${day}日`
|
|
|
+ }
|
|
|
|
|
|
- .inst-title {
|
|
|
- color: #333;
|
|
|
- text-align: left;
|
|
|
- flex: 1;
|
|
|
- overflow: hidden;
|
|
|
- white-space: nowrap;
|
|
|
- text-overflow: ellipsis;
|
|
|
- margin-top: 4px;
|
|
|
- }
|
|
|
+ const takeawayComplate = (data: TakeawayList) => {
|
|
|
+ const {
|
|
|
+ dieFemaleNumber,
|
|
|
+ dieMaleNumber,
|
|
|
+ returnFemaleNumber,
|
|
|
+ returnMaleNumber,
|
|
|
+ takeawayMaleNumber,
|
|
|
+ takewayFemaleNumber,
|
|
|
+ } = data
|
|
|
+
|
|
|
+ const total = takeawayMaleNumber + takewayFemaleNumber
|
|
|
+ const returnTotal = returnFemaleNumber + returnMaleNumber
|
|
|
+ const dieTotal = dieFemaleNumber + dieMaleNumber
|
|
|
+
|
|
|
+ return returnTotal >= total || dieTotal >= total || returnTotal + dieTotal >= total
|
|
|
+ }
|
|
|
+
|
|
|
+ const openCageApplicationModal = () => {
|
|
|
+ addEditRef.value.openDialog('add')
|
|
|
+ }
|
|
|
|
|
|
- .time {
|
|
|
- color: #f69a4d;
|
|
|
+ const handleReturn = (row: TakeawayList) => {
|
|
|
+ turnBackModalRef.value?.openDialog(row)
|
|
|
+ }
|
|
|
+
|
|
|
+ const handleDie = (row: TakeawayList) => {
|
|
|
+ dieModalRef.value?.openDialog(row)
|
|
|
+ }
|
|
|
+
|
|
|
+ onMounted(() => {
|
|
|
+ getDicts()
|
|
|
+ onLoad()
|
|
|
+ })
|
|
|
+</script>
|
|
|
+
|
|
|
+<style lang="scss" scoped>
|
|
|
+ .entry-container {
|
|
|
+ position: relative;
|
|
|
+ display: flex;
|
|
|
+ flex-direction: column;
|
|
|
+
|
|
|
+ .search-wrap {
|
|
|
+ background: #fff;
|
|
|
+ margin-bottom: 10px;
|
|
|
+ padding: 15px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .list-container {
|
|
|
+ overflow-y: auto;
|
|
|
+ padding: 10px;
|
|
|
+ border-radius: 4px;
|
|
|
+ flex: 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ .van-list {
|
|
|
+ .van-cell {
|
|
|
+ background-color: #fff;
|
|
|
+
|
|
|
+ + .van-cell {
|
|
|
+ margin-top: 10px;
|
|
|
+ }
|
|
|
+
|
|
|
+ header,
|
|
|
+ footer {
|
|
|
+ color: #333;
|
|
|
+ }
|
|
|
+
|
|
|
+ .title {
|
|
|
+ flex: 1;
|
|
|
+ white-space: nowrap;
|
|
|
+ overflow: hidden;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ text-align: left;
|
|
|
+ }
|
|
|
+
|
|
|
+ .inst-title {
|
|
|
+ color: #333;
|
|
|
+ text-align: left;
|
|
|
+ flex: 1;
|
|
|
+ overflow: hidden;
|
|
|
+ white-space: nowrap;
|
|
|
+ text-overflow: ellipsis;
|
|
|
+ margin-top: 4px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .time {
|
|
|
+ color: #f69a4d;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- .inst-title {
|
|
|
- :first-child {
|
|
|
- color: rgb(120, 120, 120);
|
|
|
+ .inst-title {
|
|
|
+ :first-child {
|
|
|
+ color: rgb(120, 120, 120);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
-}
|
|
|
|
|
|
-:deep(.van-tag) {
|
|
|
- color: #fff !important;
|
|
|
-}
|
|
|
+ :deep(.van-tag) {
|
|
|
+ color: #fff !important;
|
|
|
+ }
|
|
|
</style>
|