微调
This commit is contained in:
@@ -8,10 +8,10 @@
|
|||||||
>
|
>
|
||||||
<!-- 采用 v-for 动态渲染 -->
|
<!-- 采用 v-for 动态渲染 -->
|
||||||
<el-option
|
<el-option
|
||||||
v-for="unit in timeUnits"
|
v-for='unit in timeUnits'
|
||||||
:key="unit.value"
|
:key='unit.value'
|
||||||
:label="unit.label"
|
:label='unit.label'
|
||||||
:value="unit.value"
|
:value='unit.value'
|
||||||
></el-option>
|
></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
|
|
||||||
@@ -22,8 +22,8 @@
|
|||||||
v-model='startDate'
|
v-model='startDate'
|
||||||
type='date'
|
type='date'
|
||||||
placeholder='起始时间'
|
placeholder='起始时间'
|
||||||
@change="emitDateChange"
|
@change='emitDateChange'
|
||||||
:disabled-date="disableStartDate"
|
:disabled-date='disableStartDate'
|
||||||
:readonly="timeUnit != '自定义'"
|
:readonly="timeUnit != '自定义'"
|
||||||
></el-date-picker>
|
></el-date-picker>
|
||||||
<el-text>~</el-text>
|
<el-text>~</el-text>
|
||||||
@@ -32,8 +32,8 @@
|
|||||||
v-model='endDate'
|
v-model='endDate'
|
||||||
type='date'
|
type='date'
|
||||||
placeholder='结束时间'
|
placeholder='结束时间'
|
||||||
@change="emitDateChange"
|
@change='emitDateChange'
|
||||||
:disabled-date="disableEndDate"
|
:disabled-date='disableEndDate'
|
||||||
:readonly="timeUnit !== '自定义'"
|
:readonly="timeUnit !== '自定义'"
|
||||||
></el-date-picker>
|
></el-date-picker>
|
||||||
</div>
|
</div>
|
||||||
@@ -43,11 +43,11 @@
|
|||||||
class='triangle-button'
|
class='triangle-button'
|
||||||
type='primary'
|
type='primary'
|
||||||
@click='prevPeriod'
|
@click='prevPeriod'
|
||||||
@change="emitDateChange"
|
@change='emitDateChange'
|
||||||
>
|
>
|
||||||
<div class='left_triangle'></div>
|
<div class='left_triangle'></div>
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button class='triangle-button' type='primary' @click='goToCurrent' >
|
<el-button class='triangle-button' type='primary' @click='goToCurrent'>
|
||||||
当前
|
当前
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
@@ -64,17 +64,17 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
|
<script setup lang='ts'>
|
||||||
|
import { ref, onMounted, defineProps, defineEmits } from 'vue'
|
||||||
|
|
||||||
<script setup lang="ts">
|
// 定义时间单位的类型
|
||||||
import { ref ,onMounted, defineProps, defineEmits } from 'vue';
|
|
||||||
|
|
||||||
// 定义时间单位的类型
|
|
||||||
interface TimeUnit {
|
interface TimeUnit {
|
||||||
label: string;
|
label: string;
|
||||||
value: string;
|
value: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 定义组件的props,包含包括和排除的时间单位
|
// 定义组件的props,包含包括和排除的时间单位
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
include: {
|
include: {
|
||||||
type: Array as () => string[],
|
type: Array as () => string[],
|
||||||
default: () => ['日', '周', '月', '季度', '年', '自定义'],
|
default: () => ['日', '周', '月', '季度', '年', '自定义'],
|
||||||
@@ -87,36 +87,36 @@ interface TimeUnit {
|
|||||||
type: String,
|
type: String,
|
||||||
default: '日',
|
default: '日',
|
||||||
},
|
},
|
||||||
});
|
})
|
||||||
|
|
||||||
// 定义事件
|
// 定义事件
|
||||||
const emit = defineEmits<{
|
const emit = defineEmits<{
|
||||||
(e: 'update-dates', startDate: Date, endDate: Date): void;
|
(e: 'update-dates', startDate: Date, endDate: Date): void;
|
||||||
}>();
|
}>()
|
||||||
const timeUnit = ref<string>(props.default); // 默认选择
|
const timeUnit = ref<string>(props.default) // 默认选择
|
||||||
const startDate = ref<Date>(new Date()); // 起始日期
|
const startDate = ref<Date>(new Date()) // 起始日期
|
||||||
const endDate = ref<Date>(new Date()); // 结束日期
|
const endDate = ref<Date>(new Date()) // 结束日期
|
||||||
const isNextDisabled = ref<boolean>(false); // 控制下一周期按钮的禁用状态
|
const isNextDisabled = ref<boolean>(false) // 控制下一周期按钮的禁用状态
|
||||||
const today = ref<Date>(new Date()); // 当前日期
|
const today = ref<Date>(new Date()) // 当前日期
|
||||||
// 过滤出可用的时间单位
|
// 过滤出可用的时间单位
|
||||||
const timeUnits = ref<TimeUnit[]>(
|
const timeUnits = ref<TimeUnit[]>(
|
||||||
props.include.filter(unit => !props.exclude.includes(unit)).map(unit => ({
|
props.include.filter(unit => !props.exclude.includes(unit)).map(unit => ({
|
||||||
label: unit,
|
label: unit,
|
||||||
value: unit,
|
value: unit,
|
||||||
}))
|
})),
|
||||||
);
|
)
|
||||||
|
|
||||||
// 发出日期变化事件
|
// 发出日期变化事件
|
||||||
const emitDateChange = () => {
|
const emitDateChange = () => {
|
||||||
emit('update-dates', startDate.value, endDate.value);
|
emit('update-dates', formatDate(startDate.value), formatDate(endDate.value))
|
||||||
//console.log('emitDateChange', startDate.value, endDate.value);
|
//console.log('emitDateChange', startDate.value, endDate.value);
|
||||||
};
|
}
|
||||||
|
|
||||||
// 在组件挂载时更新日期范围
|
// 在组件挂载时更新日期范围
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
updateDateRange();
|
updateDateRange()
|
||||||
});
|
})
|
||||||
const handleChange = (unit: string)=> {
|
const handleChange = (unit: string) => {
|
||||||
// 根据选择的时间单位处理日期变化
|
// 根据选择的时间单位处理日期变化
|
||||||
if (unit !== '自定义') {
|
if (unit !== '自定义') {
|
||||||
updateDateRange()
|
updateDateRange()
|
||||||
@@ -125,11 +125,11 @@ interface TimeUnit {
|
|||||||
startDate.value = new Date(new Date().setDate(new Date().getDate() - 1))
|
startDate.value = new Date(new Date().setDate(new Date().getDate() - 1))
|
||||||
endDate.value = new Date()
|
endDate.value = new Date()
|
||||||
}
|
}
|
||||||
timeUnit.value = unit;
|
timeUnit.value = unit
|
||||||
emitDateChange(); // 变化时也发出更新事件
|
emitDateChange() // 变化时也发出更新事件
|
||||||
updateNextButtonStatus()
|
updateNextButtonStatus()
|
||||||
}
|
}
|
||||||
const updateDateRange = () => {
|
const updateDateRange = () => {
|
||||||
|
|
||||||
// 根据选择的时间单位计算起始和结束日期
|
// 根据选择的时间单位计算起始和结束日期
|
||||||
if (timeUnit.value === '日') {
|
if (timeUnit.value === '日') {
|
||||||
@@ -150,22 +150,22 @@ interface TimeUnit {
|
|||||||
endDate.value = new Date(today.value.getFullYear(), 11, 31)
|
endDate.value = new Date(today.value.getFullYear(), 11, 31)
|
||||||
}
|
}
|
||||||
updateNextButtonStatus()
|
updateNextButtonStatus()
|
||||||
}
|
}
|
||||||
const getStartOfWeek =(date:Date)=> {
|
const getStartOfWeek = (date: Date) => {
|
||||||
const startOfWeek = new Date(date)
|
const startOfWeek = new Date(date)
|
||||||
const day = startOfWeek.getDay()
|
const day = startOfWeek.getDay()
|
||||||
const diff = day === 0 ? -6 : 1 - day // 星期天的情况
|
const diff = day === 0 ? -6 : 1 - day // 星期天的情况
|
||||||
startOfWeek.setDate(startOfWeek.getDate() + diff)
|
startOfWeek.setDate(startOfWeek.getDate() + diff)
|
||||||
return startOfWeek
|
return startOfWeek
|
||||||
}
|
}
|
||||||
const getEndOfWeek =(date:Date) =>{
|
const getEndOfWeek = (date: Date) => {
|
||||||
const endOfWeek = new Date(date)
|
const endOfWeek = new Date(date)
|
||||||
const day = endOfWeek.getDay()
|
const day = endOfWeek.getDay()
|
||||||
const diff = day === 0 ? 0 : 7 - day // 星期天的情况
|
const diff = day === 0 ? 0 : 7 - day // 星期天的情况
|
||||||
endOfWeek.setDate(endOfWeek.getDate() + diff)
|
endOfWeek.setDate(endOfWeek.getDate() + diff)
|
||||||
return endOfWeek
|
return endOfWeek
|
||||||
}
|
}
|
||||||
const prevPeriod =()=> {
|
const prevPeriod = () => {
|
||||||
const prevStartDate = new Date(startDate.value)
|
const prevStartDate = new Date(startDate.value)
|
||||||
const prevEndDate = new Date(endDate.value)
|
const prevEndDate = new Date(endDate.value)
|
||||||
|
|
||||||
@@ -189,13 +189,13 @@ interface TimeUnit {
|
|||||||
startDate.value = prevStartDate
|
startDate.value = prevStartDate
|
||||||
endDate.value = prevEndDate
|
endDate.value = prevEndDate
|
||||||
updateNextButtonStatus()
|
updateNextButtonStatus()
|
||||||
}
|
}
|
||||||
const goToCurrent =()=> {
|
const goToCurrent = () => {
|
||||||
if (timeUnit.value !== '自定义') {
|
if (timeUnit.value !== '自定义') {
|
||||||
updateDateRange() // 更新为当前选择时间单位的时间范围
|
updateDateRange() // 更新为当前选择时间单位的时间范围
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const nextPeriod = ()=> {
|
const nextPeriod = () => {
|
||||||
const nextStartDate = new Date(startDate.value)
|
const nextStartDate = new Date(startDate.value)
|
||||||
const nextEndDate = new Date(endDate.value)
|
const nextEndDate = new Date(endDate.value)
|
||||||
|
|
||||||
@@ -219,32 +219,39 @@ interface TimeUnit {
|
|||||||
startDate.value = nextStartDate
|
startDate.value = nextStartDate
|
||||||
endDate.value = nextEndDate
|
endDate.value = nextEndDate
|
||||||
updateNextButtonStatus()
|
updateNextButtonStatus()
|
||||||
}
|
}
|
||||||
const updateNextButtonStatus =()=> {
|
const updateNextButtonStatus = () => {
|
||||||
// 更新下一个按钮的禁用状态
|
// 更新下一个按钮的禁用状态
|
||||||
const maxDate = new Date() // 假设最新日期为今天
|
const maxDate = new Date() // 假设最新日期为今天
|
||||||
// 将 maxDate 设置为当天的开始时间
|
// 将 maxDate 设置为当天的开始时间
|
||||||
maxDate.setHours(0, 0, 0, 0);
|
maxDate.setHours(0, 0, 0, 0)
|
||||||
// 将 endDate 设置为当天的开始时间并进行比较
|
// 将 endDate 设置为当天的开始时间并进行比较
|
||||||
const endDateAdjusted = new Date(endDate.value);
|
const endDateAdjusted = new Date(endDate.value)
|
||||||
endDateAdjusted.setHours(0, 0, 0, 0);
|
endDateAdjusted.setHours(0, 0, 0, 0)
|
||||||
// 仅比较日期部分
|
// 仅比较日期部分
|
||||||
isNextDisabled.value = endDateAdjusted >= maxDate;
|
isNextDisabled.value = endDateAdjusted >= maxDate
|
||||||
emitDateChange(); // 变化时也发出更新事件
|
emitDateChange() // 变化时也发出更新事件
|
||||||
}
|
}
|
||||||
|
|
||||||
// 限制开始日期不能选择超过当前日期
|
// 限制开始日期不能选择超过当前日期
|
||||||
const disableStartDate = (date:Date)=> {
|
const disableStartDate = (date: Date) => {
|
||||||
return date > today.value;
|
return date > today.value
|
||||||
}
|
}
|
||||||
// 限制结束日期不能超过当前日期且必须大于开始日期
|
// 限制结束日期不能超过当前日期且必须大于开始日期
|
||||||
const disableEndDate = (date:Date)=> {
|
const disableEndDate = (date: Date) => {
|
||||||
if (timeUnit.value !== '自定义') return false; // 如果不是自定义时间单位,则不限制
|
if (timeUnit.value !== '自定义') return false // 如果不是自定义时间单位,则不限制
|
||||||
const start = new Date(startDate.value);
|
const start = new Date(startDate.value)
|
||||||
return date > today.value || (start && date <= start);
|
return date > today.value || (start && date <= start)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 格式化日期yyyy-mm-dd
|
||||||
|
function formatDate(date:Date) {
|
||||||
|
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}`;
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,7 @@
|
|||||||
<ProTable
|
<ProTable
|
||||||
ref='proTable'
|
ref='proTable'
|
||||||
:columns='columns'
|
:columns='columns'
|
||||||
:init-param="initParam"
|
:request-api='getTableList'
|
||||||
:request-api='getPqDevList'
|
|
||||||
>
|
>
|
||||||
<!-- :requestApi="getRoleList" -->
|
<!-- :requestApi="getRoleList" -->
|
||||||
<!-- 表格 header 按钮 -->
|
<!-- 表格 header 按钮 -->
|
||||||
@@ -12,7 +11,8 @@
|
|||||||
<el-button type='primary' :icon='CirclePlus' @click="openDialog('add')">新增</el-button>
|
<el-button type='primary' :icon='CirclePlus' @click="openDialog('add')">新增</el-button>
|
||||||
<el-button type='primary' :icon='Download' plain @click='downloadFile()'>批量导出</el-button>
|
<el-button type='primary' :icon='Download' plain @click='downloadFile()'>批量导出</el-button>
|
||||||
<el-button type='primary' :icon='Upload' plain @click='importFile()'>批量导入</el-button>
|
<el-button type='primary' :icon='Upload' plain @click='importFile()'>批量导入</el-button>
|
||||||
<el-button type='danger' :icon='Delete' plain :disabled='!scope.isSelected' @click='batchDelete(scope.selectedListIds)'>
|
<el-button type='danger' :icon='Delete' plain :disabled='!scope.isSelected'
|
||||||
|
@click='batchDelete(scope.selectedListIds)'>
|
||||||
批量删除
|
批量删除
|
||||||
</el-button>
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
@@ -24,35 +24,40 @@
|
|||||||
|
|
||||||
</ProTable>
|
</ProTable>
|
||||||
</div>
|
</div>
|
||||||
<DevicePopup :refresh-table='proTable?.getTableList' ref='devicePopup'/>
|
<DevicePopup :refresh-table='proTable?.getTableList' ref='devicePopup' />
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang='tsx' name='useRole'>
|
<script setup lang='tsx' name='useRole'>
|
||||||
import TimeControl from '@/components/TimeControl/index.vue'
|
import TimeControl from '@/components/TimeControl/index.vue'
|
||||||
import { type Device } from '@/api/device/interface'
|
import { type Device } from '@/api/device/interface'
|
||||||
import { useHandleData } from '@/hooks/useHandleData'
|
import { useHandleData } from '@/hooks/useHandleData'
|
||||||
import { useDownload } from '@/hooks/useDownload'
|
import { useDownload } from '@/hooks/useDownload'
|
||||||
import { useAuthButtons } from '@/hooks/useAuthButtons'
|
import { useAuthButtons } from '@/hooks/useAuthButtons'
|
||||||
import ProTable from '@/components/ProTable/index.vue'
|
import ProTable from '@/components/ProTable/index.vue'
|
||||||
import ImportExcel from '@/components/ImportExcel/index.vue'
|
import ImportExcel from '@/components/ImportExcel/index.vue'
|
||||||
import { type ProTableInstance, type ColumnProps } from '@/components/ProTable/interface'
|
import { type ProTableInstance, type ColumnProps } from '@/components/ProTable/interface'
|
||||||
import DevicePopup from '@/views/machine/device/components/devicePopup.vue'
|
import DevicePopup from '@/views/machine/device/components/devicePopup.vue'
|
||||||
import { CirclePlus, Delete, EditPen, Share, Download, Upload, View, Refresh } from '@element-plus/icons-vue'
|
import { CirclePlus, Delete, EditPen, Share, Download, Upload, View, Refresh } from '@element-plus/icons-vue'
|
||||||
import deviceDataList from '@/api/device/deviceData'
|
import deviceDataList from '@/api/device/deviceData'
|
||||||
import { useDictStore } from '@/stores/modules/dict'
|
import { useDictStore } from '@/stores/modules/dict'
|
||||||
import {getPqDevList,deletePqDev,exportPqDev,importPqDev} from '@/api/device/device.ts'
|
import { getPqDevList, deletePqDev, exportPqDev, importPqDev } from '@/api/device/device.ts'
|
||||||
import { reactive, ref } from 'vue'
|
import { reactive, ref } from 'vue'
|
||||||
const dictStore = useDictStore()
|
|
||||||
// ProTable 实例
|
|
||||||
const proTable = ref<ProTableInstance>()
|
|
||||||
const devicePopup = ref()
|
|
||||||
// 定义包含和排除的单位
|
|
||||||
const includedUnits = ['日', '周', '月', '自定义']; // 可以根据需要包含的单位
|
|
||||||
const excludedUnits = ['季度','年']; // 要排除的单位
|
|
||||||
const defaultUnits = '日'; // 默认的单位
|
|
||||||
|
|
||||||
// 表格配置项
|
const dictStore = useDictStore()
|
||||||
const columns = reactive<ColumnProps<Device.ResPqDev>[]>([
|
// ProTable 实例
|
||||||
|
const proTable = ref<ProTableInstance>()
|
||||||
|
const devicePopup = ref()
|
||||||
|
// 定义包含和排除的单位
|
||||||
|
|
||||||
|
const getTableList = (params: any) => {
|
||||||
|
let newParams = JSON.parse(JSON.stringify(params))
|
||||||
|
newParams.createTimeEnd = endDate.value
|
||||||
|
newParams.createTimeStart = startDate.value
|
||||||
|
return getPqDevList(newParams)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 表格配置项
|
||||||
|
const columns = reactive<ColumnProps<Device.ResPqDev>[]>([
|
||||||
{ type: 'selection', fixed: 'left', width: 70 },
|
{ type: 'selection', fixed: 'left', width: 70 },
|
||||||
{ type: 'index', fixed: 'left', width: 70, label: '序号' },
|
{ type: 'index', fixed: 'left', width: 70, label: '序号' },
|
||||||
{
|
{
|
||||||
@@ -99,9 +104,8 @@ const defaultUnits = '日'; // 默认的单位
|
|||||||
return (
|
return (
|
||||||
<div class='flx-flex-start'>
|
<div class='flx-flex-start'>
|
||||||
<TimeControl
|
<TimeControl
|
||||||
include={includedUnits}
|
include={['日', '周', '月', '自定义']}
|
||||||
exclude={excludedUnits}
|
default={'月'}
|
||||||
default={defaultUnits}
|
|
||||||
onUpdate-dates={handleDateChange}
|
onUpdate-dates={handleDateChange}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
@@ -110,35 +114,36 @@ const defaultUnits = '日'; // 默认的单位
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ prop: 'operation', label: '操作', fixed: 'right', width: 200 },
|
{ prop: 'operation', label: '操作', fixed: 'right', width: 200 },
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
// 处理日期变化的回调函数
|
||||||
|
const startDate = ref('')
|
||||||
// 处理日期变化的回调函数
|
const endDate = ref('')
|
||||||
const handleDateChange = (startDate: Date, endDate: Date) => {
|
const handleDateChange = (startDateTemp: string, endDateTemp: string) => {
|
||||||
console.log('Start Date:', startDate)
|
startDate.value = startDateTemp
|
||||||
console.log('End Date:', endDate)
|
endDate.value = endDateTemp
|
||||||
// 这里可以添加更多的逻辑处理
|
console.log(startDateTemp)
|
||||||
|
console.log(endDateTemp)
|
||||||
}
|
}
|
||||||
// 打开 drawer(新增、编辑)
|
// 打开 drawer(新增、编辑)
|
||||||
const openDialog = (titleType: string, row: Partial<Device.ResPqDev> = {}) => {
|
const openDialog = (titleType: string, row: Partial<Device.ResPqDev> = {}) => {
|
||||||
devicePopup.value?.open(titleType, row)
|
devicePopup.value?.open(titleType, row)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 批量删除字典类型
|
// 批量删除字典类型
|
||||||
const batchDelete = async (id: string[]) => {
|
const batchDelete = async (id: string[]) => {
|
||||||
await useHandleData(deletePqDev, id, '删除所选设备')
|
await useHandleData(deletePqDev, id, '删除所选设备')
|
||||||
proTable.value?.clearSelection()
|
proTable.value?.clearSelection()
|
||||||
proTable.value?.getTableList()
|
proTable.value?.getTableList()
|
||||||
}
|
}
|
||||||
|
|
||||||
// 删除字典类型
|
// 删除字典类型
|
||||||
const handleDelete = async (params: Device.ResPqDev) => {
|
const handleDelete = async (params: Device.ResPqDev) => {
|
||||||
await useHandleData(deletePqDev, [params.id], `删除【${params.name}】设备`)
|
await useHandleData(deletePqDev, [params.id], `删除【${params.name}】设备`)
|
||||||
proTable.value?.getTableList()
|
proTable.value?.getTableList()
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
Reference in New Issue
Block a user