mirror of
https://github.com/1Panel-dev/1Panel.git
synced 2025-11-09 19:20:56 +08:00
fix: 解决网站按过期时间排序之后导致的日期控件错误问题 (#5846)
This commit is contained in:
parent
ed599265e4
commit
ca0c96cb12
1 changed files with 64 additions and 39 deletions
|
|
@ -128,25 +128,31 @@
|
||||||
prop="protocol"
|
prop="protocol"
|
||||||
width="90px"
|
width="90px"
|
||||||
></el-table-column>
|
></el-table-column>
|
||||||
<el-table-column :label="$t('website.expireDate')" prop="expireDate" sortable>
|
<el-table-column
|
||||||
<template #default="{ row, $index }">
|
:label="$t('website.expireDate')"
|
||||||
<div v-show="row.showdate">
|
prop="expireDate"
|
||||||
|
:sortable="'custom'"
|
||||||
|
min-width="120px"
|
||||||
|
>
|
||||||
|
<template #default="{ row }">
|
||||||
|
<div v-if="row.showdate">
|
||||||
<el-date-picker
|
<el-date-picker
|
||||||
style="width: 120px"
|
:key="row.id"
|
||||||
|
class="p-w-100"
|
||||||
v-model="row.expireDate"
|
v-model="row.expireDate"
|
||||||
type="date"
|
type="date"
|
||||||
:disabled-date="checkDate"
|
:disabled-date="checkDate"
|
||||||
:shortcuts="shortcuts"
|
:shortcuts="shortcuts"
|
||||||
:clearable="false"
|
:clearable="false"
|
||||||
:default-value="setDate(row.expireDate)"
|
|
||||||
:ref="(el) => setdateRefs(el, $index)"
|
|
||||||
@change="submitDate(row)"
|
@change="submitDate(row)"
|
||||||
|
:ref="(el) => setdateRefs(el)"
|
||||||
@visible-change="(visibility:boolean) => pickerVisibility(visibility, row)"
|
@visible-change="(visibility:boolean) => pickerVisibility(visibility, row)"
|
||||||
size="small"
|
size="small"
|
||||||
|
:mounted="initDatePicker(row)"
|
||||||
></el-date-picker>
|
></el-date-picker>
|
||||||
</div>
|
</div>
|
||||||
<div v-show="!row.showdate">
|
<div v-else>
|
||||||
<el-link type="primary" :underline="false" @click="openDatePicker(row, $index)">
|
<el-link type="primary" :underline="false" @click.stop="openDatePicker(row)">
|
||||||
<span v-if="isEver(row.expireDate)">
|
<span v-if="isEver(row.expireDate)">
|
||||||
{{ $t('website.neverExpire') }}
|
{{ $t('website.neverExpire') }}
|
||||||
</span>
|
</span>
|
||||||
|
|
@ -166,7 +172,7 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<fu-table-operations
|
<fu-table-operations
|
||||||
:ellipsis="10"
|
:ellipsis="10"
|
||||||
width="400px"
|
width="300px"
|
||||||
:buttons="buttons"
|
:buttons="buttons"
|
||||||
:label="$t('commons.table.operate')"
|
:label="$t('commons.table.operate')"
|
||||||
:fixed="mobile ? false : 'right'"
|
:fixed="mobile ? false : 'right'"
|
||||||
|
|
@ -201,7 +207,7 @@ import GroupDialog from '@/components/group/index.vue';
|
||||||
import AppStatus from '@/components/app-status/index.vue';
|
import AppStatus from '@/components/app-status/index.vue';
|
||||||
import i18n from '@/lang';
|
import i18n from '@/lang';
|
||||||
import router from '@/routers';
|
import router from '@/routers';
|
||||||
import { onMounted, reactive, ref, computed } from '@vue/runtime-core';
|
import { onMounted, reactive, ref, computed } from 'vue';
|
||||||
import { OpWebsite, SearchWebsites, UpdateWebsite } from '@/api/modules/website';
|
import { OpWebsite, SearchWebsites, UpdateWebsite } from '@/api/modules/website';
|
||||||
import { Website } from '@/api/interface/website';
|
import { Website } from '@/api/interface/website';
|
||||||
import { App } from '@/api/interface/app';
|
import { App } from '@/api/interface/app';
|
||||||
|
|
@ -247,8 +253,8 @@ const uploadRef = ref();
|
||||||
const dialogBackupRef = ref();
|
const dialogBackupRef = ref();
|
||||||
const defaultRef = ref();
|
const defaultRef = ref();
|
||||||
const data = ref();
|
const data = ref();
|
||||||
let dateRefs: Map<number, any> = new Map();
|
|
||||||
let groups = ref<Group.GroupInfo[]>([]);
|
let groups = ref<Group.GroupInfo[]>([]);
|
||||||
|
const dataRef = ref();
|
||||||
|
|
||||||
const paginationConfig = reactive({
|
const paginationConfig = reactive({
|
||||||
cacheSizeKey: 'website-page-size',
|
cacheSizeKey: 'website-page-size',
|
||||||
|
|
@ -270,8 +276,17 @@ const mobile = computed(() => {
|
||||||
|
|
||||||
const changeSort = ({ prop, order }) => {
|
const changeSort = ({ prop, order }) => {
|
||||||
if (order) {
|
if (order) {
|
||||||
req.orderBy = prop == 'primaryDomain' ? 'primary_domain' : prop;
|
switch (prop) {
|
||||||
req.orderBy = prop == 'expireDate' ? 'expire_date' : prop;
|
case 'primaryDomain':
|
||||||
|
prop = 'primary_domain';
|
||||||
|
break;
|
||||||
|
case 'expireDate':
|
||||||
|
prop = 'expire_date';
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
req.orderBy = prop;
|
||||||
req.order = order;
|
req.order = order;
|
||||||
} else {
|
} else {
|
||||||
req.orderBy = 'created_at';
|
req.orderBy = 'created_at';
|
||||||
|
|
@ -285,6 +300,7 @@ const search = async () => {
|
||||||
req.pageSize = paginationConfig.pageSize;
|
req.pageSize = paginationConfig.pageSize;
|
||||||
|
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
|
data.value = [];
|
||||||
await SearchWebsites(req)
|
await SearchWebsites(req)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
data.value = res.data.items;
|
data.value = res.data.items;
|
||||||
|
|
@ -317,40 +333,50 @@ const isBeforeNow = (time: string) => {
|
||||||
return new Date() > new Date(time);
|
return new Date() > new Date(time);
|
||||||
};
|
};
|
||||||
|
|
||||||
const setDate = (time: string) => {
|
const refreshData = () => {
|
||||||
if (isEver(time)) {
|
for (let i = 0; i < data.value.length; i++) {
|
||||||
return new Date();
|
if (data.value[i].showdate) {
|
||||||
} else {
|
data.value[i].showdate = false;
|
||||||
return new Date(time);
|
if (data.value[i].oldExpireDate) {
|
||||||
}
|
data.value[i].expireDate = data.value[i].oldExpireDate;
|
||||||
};
|
data.value[i].oldExpireDate = undefined;
|
||||||
|
}
|
||||||
const openDatePicker = (row: any, index: number) => {
|
|
||||||
row.showdate = true;
|
|
||||||
const ref = dateRefs.get(index);
|
|
||||||
if (ref != undefined) {
|
|
||||||
if (isBeforeNow(row.expireDate)) {
|
|
||||||
row.oldExpireDate = row.expireDate;
|
|
||||||
const date = new Date().toLocaleDateString();
|
|
||||||
row.expireDate = date;
|
|
||||||
}
|
}
|
||||||
ref.handleOpen();
|
}
|
||||||
|
if (dataRef.value) {
|
||||||
|
dataRef.value.handleClose();
|
||||||
|
dataRef.value = undefined;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const setdateRefs = (ref: any, index: number) => {
|
const openDatePicker = (row: any) => {
|
||||||
dateRefs.set(index, ref);
|
refreshData();
|
||||||
|
row.showdate = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const setdateRefs = (ref: any) => {
|
||||||
|
dataRef.value = ref;
|
||||||
|
if (dataRef.value != undefined) {
|
||||||
|
dataRef.value.handleOpen();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const initDatePicker = (row: any) => {
|
||||||
|
if (dataRef.value == undefined && row.oldExpireDate == undefined && isBeforeNow(row.expireDate)) {
|
||||||
|
row.oldExpireDate = row.expireDate;
|
||||||
|
const date = new Date().toLocaleDateString();
|
||||||
|
row.expireDate = date;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const pickerVisibility = (visibility: boolean, row: any) => {
|
const pickerVisibility = (visibility: boolean, row: any) => {
|
||||||
if (!visibility) {
|
if (!visibility) {
|
||||||
row.showdate = false;
|
dataRef.value = undefined;
|
||||||
if (!row.change) {
|
if (row.oldExpireDate) {
|
||||||
if (row.oldExpireDate) {
|
row.expireDate = row.oldExpireDate;
|
||||||
row.expireDate = row.oldExpireDate;
|
row.oldExpireDate = undefined;
|
||||||
}
|
|
||||||
row.change = false;
|
|
||||||
}
|
}
|
||||||
|
row.showdate = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -366,7 +392,6 @@ const submitDate = (row: any) => {
|
||||||
};
|
};
|
||||||
|
|
||||||
UpdateWebsite(req).then(() => {
|
UpdateWebsite(req).then(() => {
|
||||||
row.change = true;
|
|
||||||
MsgSuccess(i18n.global.t('commons.msg.updateSuccess'));
|
MsgSuccess(i18n.global.t('commons.msg.updateSuccess'));
|
||||||
search();
|
search();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue