From ab1adcfa3dfed3c2f8bb4ef00d91ca101a095db0 Mon Sep 17 00:00:00 2001 From: 0xJacky Date: Wed, 29 Nov 2023 22:04:30 +0800 Subject: [PATCH] fix: resolved all vue-tsc errors --- api/analytic/analytic.go | 140 +++++------------- api/analytic/nodes.go | 70 +++++++++ api/analytic/type.go | 52 +++++++ api/certificate/dns_credential.go | 10 +- app/src/api/analytic.ts | 113 +++++++++++++- app/src/api/auth.ts | 2 +- app/src/api/auto_cert.ts | 9 +- app/src/api/environment.ts | 7 + app/src/api/template.ts | 6 +- app/src/api/upgrade.ts | 9 ++ app/src/components/Chart/RadialBarChart.vue | 2 +- app/src/components/Chart/types.d.ts | 4 +- .../components/NodeSelector/NodeSelector.vue | 10 +- app/src/components/PageHeader/PageHeader.vue | 9 +- .../components/SetLanguage/SetLanguage.vue | 2 +- .../StdDesign/StdDataDisplay/StdCurd.vue | 14 +- .../StdDesign/StdDataDisplay/StdTable.vue | 40 ++--- .../StdDataDisplay/methods/exportCsv.ts | 8 +- .../StdDesign/StdDataEntry/StdDataEntry.vue | 4 +- .../StdDesign/StdDataEntry/StdFormItem.vue | 4 +- .../StdDataEntry/components/StdPassword.vue | 4 +- .../StdDataEntry/components/StdSelector.vue | 18 +-- .../StdDesign/StdDataEntry/index.tsx | 9 +- app/src/components/StdDesign/types.d.ts | 10 +- app/src/layouts/HeaderLayout.vue | 2 +- app/src/layouts/SideBar.vue | 10 +- app/src/routes/index.ts | 2 +- app/src/version.json | 2 +- app/src/views/cert/Cert.vue | 20 +-- app/src/views/cert/DNSChallenge.vue | 19 ++- app/src/views/cert/DNSCredential.vue | 10 +- app/src/views/config/ConfigEdit.vue | 7 +- app/src/views/dashboard/Environments.vue | 29 ++-- app/src/views/dashboard/ServerAnalytic.vue | 69 +++++---- app/src/views/domain/DomainAdd.vue | 8 +- app/src/views/domain/DomainEdit.vue | 22 +-- app/src/views/domain/DomainList.vue | 15 +- app/src/views/domain/cert/CertInfo.vue | 2 +- app/src/views/domain/cert/ChangeCert.vue | 25 ++-- app/src/views/domain/cert/IssueCert.vue | 13 +- .../cert/components/AutoCertStepOne.vue | 39 +++-- .../domain/cert/components/DNSChallenge.vue | 16 +- .../domain/cert/components/ObtainCert.vue | 58 ++++---- app/src/views/domain/components/Deploy.vue | 2 +- .../views/domain/components/RightSettings.vue | 12 +- .../views/domain/components/SiteDuplicate.vue | 10 +- .../views/domain/ngx_conf/LocationEditor.vue | 4 +- app/src/views/domain/ngx_conf/LogEntry.vue | 4 +- .../views/domain/ngx_conf/NgxConfigEditor.vue | 25 ++-- .../config_template/ConfigTemplate.vue | 4 +- .../ngx_conf/config_template/TemplateForm.vue | 6 +- .../config_template/TemplateFormItem.vue | 2 +- .../ngx_conf/directive/DirectiveAdd.vue | 3 +- .../directive/DirectiveEditorItem.vue | 4 +- app/src/views/environment/Environment.vue | 19 ++- app/src/views/nginx_log/NginxLog.vue | 12 +- app/src/views/other/Error.vue | 13 +- app/src/views/other/Login.vue | 2 +- app/src/views/pty/Terminal.vue | 6 +- app/src/views/system/Upgrade.vue | 25 +--- app/version.json | 2 +- internal/analytic/analytic.go | 25 ++-- internal/analytic/record.go | 12 +- internal/analytic/stat.go | 10 +- 64 files changed, 675 insertions(+), 451 deletions(-) create mode 100644 api/analytic/nodes.go create mode 100644 api/analytic/type.go diff --git a/api/analytic/analytic.go b/api/analytic/analytic.go index 600a0a21..60158b68 100644 --- a/api/analytic/analytic.go +++ b/api/analytic/analytic.go @@ -2,7 +2,7 @@ package analytic import ( "fmt" - analytic2 "github.com/0xJacky/Nginx-UI/internal/analytic" + "github.com/0xJacky/Nginx-UI/internal/analytic" "github.com/0xJacky/Nginx-UI/internal/logger" "github.com/shirou/gopsutil/v3/cpu" "github.com/shirou/gopsutil/v3/host" @@ -17,22 +17,6 @@ import ( "github.com/gorilla/websocket" ) -type CPUStat struct { - User float64 `json:"user"` - System float64 `json:"system"` - Idle float64 `json:"idle"` - Total float64 `json:"total"` -} - -type Stat struct { - Uptime uint64 `json:"uptime"` - LoadAvg *load.AvgStat `json:"loadavg"` - CPU CPUStat `json:"cpu"` - Memory analytic2.MemStat `json:"memory"` - Disk analytic2.DiskStat `json:"disk"` - Network net.IOCountersStat `json:"network"` -} - func Analytic(c *gin.Context) { var upGrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { @@ -51,7 +35,7 @@ func Analytic(c *gin.Context) { var stat Stat for { - stat.Memory, err = analytic2.GetMemoryStat() + stat.Memory, err = analytic.GetMemoryStat() if err != nil { logger.Error(err) @@ -76,7 +60,7 @@ func Analytic(c *gin.Context) { stat.LoadAvg, _ = load.Avg() - stat.Disk, err = analytic2.GetDiskStat() + stat.Disk, err = analytic.GetDiskStat() if err != nil { logger.Error(err) @@ -103,20 +87,24 @@ func Analytic(c *gin.Context) { } func GetAnalyticInit(c *gin.Context) { - cpuInfo, _ := cpu.Info() - network, _ := net.IOCounters(false) - memory, err := analytic2.GetMemoryStat() - + cpuInfo, err := cpu.Info() if err != nil { logger.Error(err) - return } - diskStat, err := analytic2.GetDiskStat() - + network, err := net.IOCounters(false) + if err != nil { + logger.Error(err) + } + + memory, err := analytic.GetMemoryStat() + if err != nil { + logger.Error(err) + } + + diskStat, err := analytic.GetDiskStat() if err != nil { logger.Error(err) - return } var _net net.IOCountersStat @@ -132,86 +120,30 @@ func GetAnalyticInit(c *gin.Context) { hostInfo.Platform = "CentOS" } - loadAvg, _ := load.Avg() + loadAvg, err := load.Avg() - c.JSON(http.StatusOK, gin.H{ - "host": hostInfo, - "cpu": gin.H{ - "info": cpuInfo, - "user": analytic2.CpuUserRecord, - "total": analytic2.CpuTotalRecord, + if err != nil { + logger.Error(err) + } + + c.JSON(http.StatusOK, InitResp{ + Host: hostInfo, + CPU: CPURecords{ + Info: cpuInfo, + User: analytic.CpuUserRecord, + Total: analytic.CpuTotalRecord, }, - "network": gin.H{ - "init": _net, - "bytesRecv": analytic2.NetRecvRecord, - "bytesSent": analytic2.NetSentRecord, + Network: NetworkRecords{ + Init: _net, + BytesRecv: analytic.NetRecvRecord, + BytesSent: analytic.NetSentRecord, }, - "disk_io": gin.H{ - "writes": analytic2.DiskWriteRecord, - "reads": analytic2.DiskReadRecord, + DiskIO: DiskIORecords{ + Writes: analytic.DiskWriteRecord, + Reads: analytic.DiskReadRecord, }, - "memory": memory, - "disk": diskStat, - "loadavg": loadAvg, + Memory: memory, + Disk: diskStat, + LoadAvg: loadAvg, }) } - -func GetNodeStat(c *gin.Context) { - var upGrader = websocket.Upgrader{ - CheckOrigin: func(r *http.Request) bool { - return true - }, - } - // upgrade http to websocket - ws, err := upGrader.Upgrade(c.Writer, c.Request, nil) - if err != nil { - logger.Error(err) - return - } - - defer ws.Close() - - for { - // write - err = ws.WriteJSON(analytic2.GetNodeStat()) - if err != nil || websocket.IsUnexpectedCloseError(err, - websocket.CloseGoingAway, - websocket.CloseNoStatusReceived, - websocket.CloseNormalClosure) { - logger.Error(err) - break - } - - time.Sleep(10 * time.Second) - } -} - -func GetNodesAnalytic(c *gin.Context) { - var upGrader = websocket.Upgrader{ - CheckOrigin: func(r *http.Request) bool { - return true - }, - } - // upgrade http to websocket - ws, err := upGrader.Upgrade(c.Writer, c.Request, nil) - if err != nil { - logger.Error(err) - return - } - - defer ws.Close() - - for { - // write - err = ws.WriteJSON(analytic2.NodeMap) - if err != nil || websocket.IsUnexpectedCloseError(err, - websocket.CloseGoingAway, - websocket.CloseNoStatusReceived, - websocket.CloseNormalClosure) { - logger.Error(err) - break - } - - time.Sleep(10 * time.Second) - } -} diff --git a/api/analytic/nodes.go b/api/analytic/nodes.go new file mode 100644 index 00000000..313b3c05 --- /dev/null +++ b/api/analytic/nodes.go @@ -0,0 +1,70 @@ +package analytic + +import ( + "github.com/0xJacky/Nginx-UI/internal/analytic" + "github.com/0xJacky/Nginx-UI/internal/logger" + "github.com/gin-gonic/gin" + "github.com/gorilla/websocket" + "net/http" + "time" +) + +func GetNodeStat(c *gin.Context) { + var upGrader = websocket.Upgrader{ + CheckOrigin: func(r *http.Request) bool { + return true + }, + } + // upgrade http to websocket + ws, err := upGrader.Upgrade(c.Writer, c.Request, nil) + if err != nil { + logger.Error(err) + return + } + + defer ws.Close() + + for { + // write + err = ws.WriteJSON(analytic.GetNodeStat()) + if err != nil || websocket.IsUnexpectedCloseError(err, + websocket.CloseGoingAway, + websocket.CloseNoStatusReceived, + websocket.CloseNormalClosure) { + logger.Error(err) + break + } + + time.Sleep(10 * time.Second) + } +} + +func GetNodesAnalytic(c *gin.Context) { + var upGrader = websocket.Upgrader{ + CheckOrigin: func(r *http.Request) bool { + return true + }, + } + // upgrade http to websocket + ws, err := upGrader.Upgrade(c.Writer, c.Request, nil) + if err != nil { + logger.Error(err) + return + } + + defer ws.Close() + + for { + // write + err = ws.WriteJSON(analytic.NodeMap) + if err != nil || websocket.IsUnexpectedCloseError(err, + websocket.CloseGoingAway, + websocket.CloseNoStatusReceived, + websocket.CloseNormalClosure) { + logger.Error(err) + break + } + + time.Sleep(10 * time.Second) + } +} diff --git a/api/analytic/type.go b/api/analytic/type.go new file mode 100644 index 00000000..101e6cdb --- /dev/null +++ b/api/analytic/type.go @@ -0,0 +1,52 @@ +package analytic + +import ( + "github.com/0xJacky/Nginx-UI/internal/analytic" + "github.com/shirou/gopsutil/v3/cpu" + "github.com/shirou/gopsutil/v3/host" + "github.com/shirou/gopsutil/v3/load" + "github.com/shirou/gopsutil/v3/net" +) + +type CPUStat struct { + User float64 `json:"user"` + System float64 `json:"system"` + Idle float64 `json:"idle"` + Total float64 `json:"total"` +} + +type Stat struct { + Uptime uint64 `json:"uptime"` + LoadAvg *load.AvgStat `json:"loadavg"` + CPU CPUStat `json:"cpu"` + Memory analytic.MemStat `json:"memory"` + Disk analytic.DiskStat `json:"disk"` + Network net.IOCountersStat `json:"network"` +} + +type CPURecords struct { + Info []cpu.InfoStat `json:"info"` + User []analytic.Usage[float64] `json:"user"` + Total []analytic.Usage[float64] `json:"total"` +} + +type NetworkRecords struct { + Init net.IOCountersStat `json:"init"` + BytesRecv []analytic.Usage[uint64] `json:"bytesRecv"` + BytesSent []analytic.Usage[uint64] `json:"bytesSent"` +} + +type DiskIORecords struct { + Writes []analytic.Usage[uint64] `json:"writes"` + Reads []analytic.Usage[uint64] `json:"reads"` +} + +type InitResp struct { + Host *host.InfoStat `json:"host"` + CPU CPURecords `json:"cpu"` + Network NetworkRecords `json:"network"` + DiskIO DiskIORecords `json:"disk_io"` + Memory analytic.MemStat `json:"memory"` + Disk analytic.DiskStat `json:"disk"` + LoadAvg *load.AvgStat `json:"loadavg"` +} diff --git a/api/certificate/dns_credential.go b/api/certificate/dns_credential.go index 0c3a9709..2a02f148 100644 --- a/api/certificate/dns_credential.go +++ b/api/certificate/dns_credential.go @@ -3,7 +3,7 @@ package certificate import ( "github.com/0xJacky/Nginx-UI/api" "github.com/0xJacky/Nginx-UI/internal/cert/dns" - model2 "github.com/0xJacky/Nginx-UI/model" + "github.com/0xJacky/Nginx-UI/model" "github.com/0xJacky/Nginx-UI/query" "github.com/gin-gonic/gin" "github.com/spf13/cast" @@ -21,7 +21,7 @@ func GetDnsCredential(c *gin.Context) { return } type apiDnsCredential struct { - model2.Model + model.Model Name string `json:"name"` dns.Config } @@ -35,7 +35,7 @@ func GetDnsCredential(c *gin.Context) { func GetDnsCredentialList(c *gin.Context) { d := query.DnsCredential provider := c.Query("provider") - var data []*model2.DnsCredential + var data []*model.DnsCredential var err error if provider != "" { data, err = d.Where(d.Provider.Eq(provider)).Find() @@ -65,7 +65,7 @@ func AddDnsCredential(c *gin.Context) { } json.Config.Name = json.Provider - dnsCredential := model2.DnsCredential{ + dnsCredential := model.DnsCredential{ Name: json.Name, Config: &json.Config, Provider: json.Provider, @@ -99,7 +99,7 @@ func EditDnsCredential(c *gin.Context) { } json.Config.Name = json.Provider - _, err = d.Where(d.ID.Eq(dnsCredential.ID)).Updates(&model2.DnsCredential{ + _, err = d.Where(d.ID.Eq(dnsCredential.ID)).Updates(&model.DnsCredential{ Name: json.Name, Config: &json.Config, Provider: json.Provider, diff --git a/app/src/api/analytic.ts b/app/src/api/analytic.ts index 997dd53e..3a4d0538 100644 --- a/app/src/api/analytic.ts +++ b/app/src/api/analytic.ts @@ -1,9 +1,120 @@ import http from '@/lib/http' +import ws from '@/lib/websocket' + +export interface CPUInfoStat { + cpu: number + vendorId: string + family: string + model: string + stepping: number + physicalId: string + coreId: string + cores: number + modelName: string + mhz: number + cacheSize: number + flags: string[] + microcode: string +} + +export interface IOCountersStat { + name: string + bytesSent: number + bytesRecv: number + packetsSent: number + packetsRecv: number + errin: number + errout: number + dropin: number + dropout: number + fifoin: number + fifoout: number +} + +export interface HostInfoStat { + hostname: string + uptime: number + bootTime: number + procs: number + os: string + platform: string + platformFamily: string + platformVersion: string + kernelVersion: string + kernelArch: string + virtualizationSystem: string + virtualizationRole: string + hostId: string +} + +export interface MemStat { + total: string + used: string + cached: string + free: string + swap_used: string + swap_total: string + swap_cached: string + swap_percent: number + pressure: number +} + +export interface DiskStat { + total: string + used: string + percentage: number + writes: Usage + reads: Usage +} + +export interface LoadStat { + load1: number + load5: number + load15: number +} + +export interface Usage { + x: string + y: number +} + +export interface CPURecords { + info: CPUInfoStat[] + user: Usage[] + total: Usage[] +} + +export interface NetworkRecords { + init: IOCountersStat + bytesRecv: Usage[] + bytesSent: Usage[] +} + +export interface DiskIORecords { + writes: Usage[] + reads: Usage[] +} + +export interface AnalyticInit { + host: HostInfoStat + cpu: CPURecords + network: NetworkRecords + disk_io: DiskIORecords + disk: DiskStat + memory: MemStat + loadavg: LoadStat +} const analytic = { - init() { + init(): Promise { return http.get('/analytic/init') }, + server() { + return ws('/api/analytic') + }, + nodes() { + return ws('/api/analytic/nodes') + }, } export default analytic diff --git a/app/src/api/auth.ts b/app/src/api/auth.ts index 5d338e7b..e04c1f86 100644 --- a/app/src/api/auth.ts +++ b/app/src/api/auth.ts @@ -16,7 +16,7 @@ const auth = { login(r.token) }) }, - async casdoor_login(code: string, state: string) { + async casdoor_login(code?: string, state?: string) { await http.post('/casdoor_callback', { code, state, diff --git a/app/src/api/auto_cert.ts b/app/src/api/auto_cert.ts index 2b8ad89f..47217713 100644 --- a/app/src/api/auto_cert.ts +++ b/app/src/api/auto_cert.ts @@ -1,8 +1,9 @@ import http from '@/lib/http' export interface DNSProvider { - name: string + name?: string code: string + provider?: string configuration: { credentials: { [key: string]: string @@ -11,11 +12,15 @@ export interface DNSProvider { [key: string]: string } } - links: { + links?: { api: string go_client: string } } +export interface DnsChallenge extends DNSProvider { + dns_credential_id: number + challenge_method: string +} const auto_cert = { get_dns_providers(): Promise { diff --git a/app/src/api/environment.ts b/app/src/api/environment.ts index 93630c2a..7989a8d8 100644 --- a/app/src/api/environment.ts +++ b/app/src/api/environment.ts @@ -5,8 +5,15 @@ export interface Environment extends ModelBase { name: string url: string token: string + status?: boolean } +export interface Node { + id: number + name: string + token: string + response_at?: Date +} const environment: Curd = new Curd('/environment') export default environment diff --git a/app/src/api/template.ts b/app/src/api/template.ts index 30665cab..8f753c7c 100644 --- a/app/src/api/template.ts +++ b/app/src/api/template.ts @@ -3,10 +3,10 @@ import http from '@/lib/http' import type { NgxServer } from '@/api/ngx' export interface Variable { - type: string - name: { [key: string]: string } + type?: string + name?: { [key: string]: string } // eslint-disable-next-line @typescript-eslint/no-explicit-any - value: any + value?: any } export interface Template extends NgxServer { diff --git a/app/src/api/upgrade.ts b/app/src/api/upgrade.ts index a8f2e3bb..3c665c58 100644 --- a/app/src/api/upgrade.ts +++ b/app/src/api/upgrade.ts @@ -1,5 +1,14 @@ import http from '@/lib/http' +export interface RuntimeInfo { + name: string + os: string + arch: string + ex_path: string + body: string + published_at: string +} + const upgrade = { get_latest_release(channel: string) { return http.get('/upgrade/release', { diff --git a/app/src/components/Chart/RadialBarChart.vue b/app/src/components/Chart/RadialBarChart.vue index af1a2fa6..9dee0a95 100644 --- a/app/src/components/Chart/RadialBarChart.vue +++ b/app/src/components/Chart/RadialBarChart.vue @@ -7,7 +7,7 @@ import type { Series } from '@/components/Chart/types' const { series, centerText, colors, name, bottomText } = defineProps<{ - series: Series[] + series: Series[] | number[] centerText?: string colors?: string name?: string diff --git a/app/src/components/Chart/types.d.ts b/app/src/components/Chart/types.d.ts index 9ec12021..07aa24d3 100644 --- a/app/src/components/Chart/types.d.ts +++ b/app/src/components/Chart/types.d.ts @@ -1,4 +1,6 @@ +import type {Usage} from '@/api/analytic' + export interface Series { name: string - data: [] + data: Usage[] } diff --git a/app/src/components/NodeSelector/NodeSelector.vue b/app/src/components/NodeSelector/NodeSelector.vue index e42570bc..b9d4aad2 100644 --- a/app/src/components/NodeSelector/NodeSelector.vue +++ b/app/src/components/NodeSelector/NodeSelector.vue @@ -1,5 +1,7 @@ @@ -27,7 +24,7 @@ watch(() => route.name, () => {

- {{ name() }} + {{ name }}

diff --git a/app/src/components/SetLanguage/SetLanguage.vue b/app/src/components/SetLanguage/SetLanguage.vue index 8a500c70..5617b828 100644 --- a/app/src/components/SetLanguage/SetLanguage.vue +++ b/app/src/components/SetLanguage/SetLanguage.vue @@ -28,7 +28,7 @@ watch(current, v => { settings.set_language(v) gettext.current = v - const name = route.name as () => string + const name = route.name as never as () => string document.title = `${name()} | Nginx UI` }) diff --git a/app/src/components/StdDesign/StdDataDisplay/StdCurd.vue b/app/src/components/StdDesign/StdDataDisplay/StdCurd.vue index 9b08ad78..fcb7f70c 100644 --- a/app/src/components/StdDesign/StdDataDisplay/StdCurd.vue +++ b/app/src/components/StdDesign/StdDataDisplay/StdCurd.vue @@ -15,7 +15,7 @@ export interface StdCurdProps { // eslint-disable-next-line @typescript-eslint/no-explicit-any onClickEdit?: (id: number | string, record: any, index: number) => void // eslint-disable-next-line @typescript-eslint/no-explicit-any - beforeSave?: (data: any) => void + beforeSave?: (data: any) => Promise } const props = defineProps() @@ -24,14 +24,16 @@ const { $gettext } = gettext const visible = ref(false) const update = ref(0) -const data = reactive({ id: null }) +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const data: any = reactive({ id: null }) provide('data', data) -const error = reactive({}) +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const error: any = reactive({}) const selected = ref([]) - -function onSelect(keys) { +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function onSelect(keys: any) { selected.value = keys } @@ -86,7 +88,7 @@ function cancel() { clear_error() } -function edit(id) { +function edit(id: number | string) { props.api!.get(id).then(async r => { Object.keys(data).forEach(k => { delete data[k] diff --git a/app/src/components/StdDesign/StdDataDisplay/StdTable.vue b/app/src/components/StdDesign/StdDataDisplay/StdTable.vue index fa8ab8c8..78618bac 100644 --- a/app/src/components/StdDesign/StdDataDisplay/StdTable.vue +++ b/app/src/components/StdDesign/StdDataDisplay/StdTable.vue @@ -2,7 +2,7 @@ import { message } from 'ant-design-vue' import { HolderOutlined } from '@ant-design/icons-vue' import { useGettext } from 'vue3-gettext' -import type { ComputedRef } from 'vue' +import type { ComputedRef, Ref } from 'vue' import type { SorterResult } from 'ant-design-vue/lib/table/interface' import StdPagination from './StdPagination.vue' import StdDataEntry from '@/components/StdDesign/StdDataEntry' @@ -46,9 +46,11 @@ const props = withDefaults(defineProps(), { const emit = defineEmits(['onSelected', 'onSelectedRecord', 'clickEdit', 'update:selectedRowKeys', 'clickBatchModify']) const { $gettext } = useGettext() const route = useRoute() -const dataSource = ref([]) -const expandKeysList = ref([]) -const rowsKeyIndexMap = ref({}) +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const dataSource: Ref = ref([]) +const expandKeysList: Ref = ref([]) +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const rowsKeyIndexMap: Ref> = ref({}) const loading = ref(true) // This can be useful if there are more than one StdTable in the same page. @@ -78,7 +80,7 @@ const selectedRowKeysBuffer = computed({ }) const searchColumns = computed(() => { - const _searchColumns = [] + const _searchColumns: Column[] = [] props.columns?.forEach(column => { if (column.search) @@ -101,7 +103,7 @@ const pithyColumns = computed(() => { }) as ComputedRef const batchColumns = computed(() => { - const batch = [] + const batch: Column[] = [] props.columns?.forEach(column => { if (column.batch) @@ -125,7 +127,7 @@ defineExpose({ get_list, }) -function destroy(id) { +function destroy(id: number | string) { props.api!.destroy(id).then(() => { get_list() message.success($gettext('Deleted successfully')) @@ -155,9 +157,11 @@ function get_list(page_num = null, page_size = 20) { message.error(e?.message ?? $gettext('Server error')) }) } -function buildIndexMap(data, level: number = 0, index: number = 0, total: number[] = []) { +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function buildIndexMap(data: any, level: number = 0, index: number = 0, total: number[] = []) { if (data && data.length > 0) { - data.forEach(v => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + data.forEach((v: any) => { v.level = level const current_indexes = [...total, index++] @@ -168,7 +172,7 @@ function buildIndexMap(data, level: number = 0, index: number = 0, total: number }) } } -function orderPaginationChange(_pagination: Pagination, filters, sorter: SorterResult) { +function orderPaginationChange(_pagination: Pagination, filters: never, sorter: SorterResult) { if (sorter) { selectedRowKeysBuffer.value = [] params.order_by = sorter.field @@ -189,19 +193,19 @@ function orderPaginationChange(_pagination: Pagination, filters, sorter: SorterR selectedRowKeysBuffer.value = [] } -function expandedTable(keys) { +function expandedTable(keys: number[]) { expandKeysList.value = keys } -const crossPageSelect = {} +const crossPageSelect: Record = {} -async function onSelectChange(_selectedRowKeys) { +async function onSelectChange(_selectedRowKeys: number[]) { const page = params.page || 1 - crossPageSelect[page] = await _selectedRowKeys + crossPageSelect[page] = _selectedRowKeys - let t = [] - Object.keys(crossPageSelect).forEach(v => { + let t: number[] = [] + Object.keys(crossPageSelect).forEach((v: string) => { t.push(...crossPageSelect[v]) }) @@ -215,8 +219,8 @@ async function onSelectChange(_selectedRowKeys) { selectedRowKeysBuffer.value = Array.from(set) emit('onSelected', selectedRowKeysBuffer.value) } - -function onSelect(record) { +// eslint-disable-next-line @typescript-eslint/no-explicit-any +function onSelect(record: any) { emit('onSelectedRecord', record) } diff --git a/app/src/components/StdDesign/StdDataDisplay/methods/exportCsv.ts b/app/src/components/StdDesign/StdDataDisplay/methods/exportCsv.ts index c66686c9..39f738fc 100644 --- a/app/src/components/StdDesign/StdDataDisplay/methods/exportCsv.ts +++ b/app/src/components/StdDesign/StdDataDisplay/methods/exportCsv.ts @@ -9,7 +9,7 @@ import type { StdTableProps } from '@/components/StdDesign/StdDataDisplay/StdTab const { $gettext } = gettext async function exportCsv(props: StdTableProps, pithyColumns: ComputedRef) { - const header: { title?: string; key: string }[] = [] + const header: { title?: string; key: string | string[] }[] = [] // eslint-disable-next-line @typescript-eslint/no-explicit-any const headerKeys: any[] = [] const showColumnsMap: Record = {} @@ -24,8 +24,8 @@ async function exportCsv(props: StdTableProps, pithyColumns: ComputedRef errors?: Record - layout?: 'horizontal' | 'vertical' + layout?: 'horizontal' | 'vertical' | 'inline' }>() const emit = defineEmits<{ // eslint-disable-next-line @typescript-eslint/no-explicit-any - 'update:dataSource': (v: any[]) => void + 'update:dataSource': [data: Record] }>() const dataSource = computed({ diff --git a/app/src/components/StdDesign/StdDataEntry/StdFormItem.vue b/app/src/components/StdDesign/StdDataEntry/StdFormItem.vue index 100b8530..59d9a669 100644 --- a/app/src/components/StdDesign/StdDataEntry/StdFormItem.vue +++ b/app/src/components/StdDesign/StdDataEntry/StdFormItem.vue @@ -7,7 +7,7 @@ const props = defineProps() const { $gettext } = useGettext() export interface Props { - dataIndex?: string + dataIndex?: string | string[] label?: string extra?: string error?: { @@ -16,7 +16,7 @@ export interface Props { } const tag = computed(() => { - return props.error?.[props.dataIndex] ?? '' + return props.error?.[props.dataIndex!.toString()] ?? '' }) const valid_status = computed(() => { diff --git a/app/src/components/StdDesign/StdDataEntry/components/StdPassword.vue b/app/src/components/StdDesign/StdDataEntry/components/StdPassword.vue index 36689039..a11d79ba 100644 --- a/app/src/components/StdDesign/StdDataEntry/components/StdPassword.vue +++ b/app/src/components/StdDesign/StdDataEntry/components/StdPassword.vue @@ -4,8 +4,8 @@ import { useGettext } from 'vue3-gettext' const props = defineProps<{ value: string - generate: boolean - placeholder: string + generate?: boolean + placeholder?: string }>() const emit = defineEmits(['update:value']) diff --git a/app/src/components/StdDesign/StdDataEntry/components/StdSelector.vue b/app/src/components/StdDesign/StdDataEntry/components/StdSelector.vue index 52409cc1..bc79238d 100644 --- a/app/src/components/StdDesign/StdDataEntry/components/StdSelector.vue +++ b/app/src/components/StdDesign/StdDataEntry/components/StdSelector.vue @@ -6,17 +6,16 @@ import type { Column } from '@/components/StdDesign/types' const props = defineProps<{ selectedKey: string | number - value: string | number + value?: string | number recordValueIndex: string selectionType: 'radio' | 'checkbox' // eslint-disable-next-line @typescript-eslint/no-explicit-any api: Curd columns: Column[] - dataKey: string - disableSearch: boolean + disableSearch?: boolean // eslint-disable-next-line @typescript-eslint/no-explicit-any getParams: any - description: string + description?: string }>() const emit = defineEmits(['update:selectedKey', 'changeSelect']) @@ -29,8 +28,8 @@ onMounted(() => { }) const selected = ref([]) - -const record = reactive({}) +// eslint-disable-next-line @typescript-eslint/no-explicit-any +const record: any = reactive({}) function init() { if (props.selectedKey && !props.value && props.selectionType === 'radio') { @@ -113,12 +112,11 @@ const _selectedKey = computed({ diff --git a/app/src/components/StdDesign/StdDataEntry/index.tsx b/app/src/components/StdDesign/StdDataEntry/index.tsx index a359858c..f9a4ae7e 100644 --- a/app/src/components/StdDesign/StdDataEntry/index.tsx +++ b/app/src/components/StdDesign/StdDataEntry/index.tsx @@ -52,6 +52,7 @@ function textarea(edit: StdDesignEdit, dataSource: any, dataIndex: any) { function password(edit: StdDesignEdit, dataSource: any, dataIndex: any) { return @@ -60,19 +61,21 @@ function password(edit: StdDesignEdit, dataSource: any, dataIndex: any) { function select(edit: StdDesignEdit, dataSource: any, dataIndex: any) { return string>} /> } // eslint-disable-next-line @typescript-eslint/no-explicit-any function selector(edit: StdDesignEdit, dataSource: any, dataIndex: any) { return } diff --git a/app/src/components/StdDesign/types.d.ts b/app/src/components/StdDesign/types.d.ts index 438a21b3..4477e3ce 100644 --- a/app/src/components/StdDesign/types.d.ts +++ b/app/src/components/StdDesign/types.d.ts @@ -8,20 +8,18 @@ export interface StdDesignEdit { batch?: boolean // batch edit - mask?: { - [key: string]: () => string - } // use for select-option + mask?: Record string> // use for select-option rules?: [] // validator rules selector?: { - get_params?: {} + getParams?: {} recordValueIndex: any // relative to api return selectionType: any api: Curd, valueApi?: Curd, columns: any - disable_search?: boolean + disableSearch?: boolean description?: string bind?: any itemKey?: any // default is id @@ -52,7 +50,7 @@ export interface Flex { export interface Column { title?: string | (() => string); - dataIndex: string; + dataIndex: string | string[]; edit?: StdDesignEdit; customRender?: function; extra?: string | (() => string); diff --git a/app/src/layouts/HeaderLayout.vue b/app/src/layouts/HeaderLayout.vue index eedf828a..01d616ee 100644 --- a/app/src/layouts/HeaderLayout.vue +++ b/app/src/layouts/HeaderLayout.vue @@ -9,7 +9,7 @@ import NginxControl from '@/components/NginxControl/NginxControl.vue' import SwitchAppearance from '@/components/SwitchAppearance/SwitchAppearance.vue' const emit = defineEmits<{ - clickUnFold: () => void + clickUnFold: [void] }>() const { $gettext } = gettext diff --git a/app/src/layouts/SideBar.vue b/app/src/layouts/SideBar.vue index f272e0ff..8c54caed 100644 --- a/app/src/layouts/SideBar.vue +++ b/app/src/layouts/SideBar.vue @@ -3,6 +3,7 @@ import { useRoute } from 'vue-router' import type { ComputedRef } from 'vue' import { computed, ref, watch } from 'vue' import type { AntdIconType } from '@ant-design/icons-vue/lib/components/AntdIcon' +import type { IconComponentProps } from '@ant-design/icons-vue/es/components/Icon' import Logo from '@/components/Logo/Logo.vue' import { routes } from '@/routes' import EnvIndicator from '@/components/EnvIndicator/EnvIndicator.vue' @@ -56,7 +57,7 @@ const visible: ComputedRef = computed(() => { const t: sidebar = { path: s.path, name: s.name, - meta: s.meta as meta, + meta: s.meta as unknown as meta, children: [], }; @@ -64,7 +65,7 @@ const visible: ComputedRef = computed(() => { if (c.meta && c.meta.hiddenInSidebar) return - t.children.push((c as sidebar)) + t.children.push((c as unknown as sidebar)) }) res.push(t) }) @@ -80,7 +81,6 @@ const visible: ComputedRef = computed(() => { @@ -91,7 +91,7 @@ const visible: ComputedRef = computed(() => { :key="s.name" @click="$router.push(`/${s.path}`).catch(() => {})" > - + {{ s.name() }} @@ -100,7 +100,7 @@ const visible: ComputedRef = computed(() => { :key="s.path" > $gettext('Name'), dataIndex: 'name', - sorter: true, + sortable: true, pithy: true, customRender: (args: customRender) => { const { text, record } = args @@ -31,7 +32,7 @@ const columns = [{ }, { title: () => $gettext('Config Name'), dataIndex: 'filename', - sorter: true, + sortable: true, pithy: true, }, { title: () => $gettext('Auto Cert'), @@ -50,7 +51,7 @@ const columns = [{ return h('div', template) }, - sorter: true, + sortable: true, pithy: true, }, { title: () => $gettext('SSL Certificate Path'), @@ -58,19 +59,19 @@ const columns = [{ edit: { type: input, }, - display: false, + hidden: true, }, { title: () => $gettext('SSL Certificate Key Path'), dataIndex: 'ssl_certificate_key_path', edit: { type: input, }, - display: false, + hidden: true, }, { title: () => $gettext('Updated at'), dataIndex: 'updated_at', customRender: datetime, - sorter: true, + sortable: true, pithy: true, }, { title: () => $gettext('Action'), @@ -83,7 +84,6 @@ const columns = [{ :title="$gettext('Certification')" :api="cert" :columns="columns" - row-key="name" >