mirror of
https://github.com/go-admin-team/go-admin.git
synced 2026-10-15 09:47:40 +00:00
ts.go.template hardcoded the pk parameter as `: number`. vue.go.template
(F4, landed after this file) derives $pkType per table - "number" unless
the pk column's GoType is "string" (natural keys do exist; sys_tables.go
gives a pk column GoType "string" whenever its ColumnType is not
int-shaped), then types useForm on that same $pkType. A string-pk table
therefore generated a page calling get{Class}(id: string) against an api
module whose get{Class} only accepted number - a TS compile error, not
a runtime bug, and exactly the kind of gap each side's own template-only
verification could not see (F4 was checked against a hand-written .ts
stub before this template existed; this template was checked against a
numeric-pk fixture only).
Copies vue.go.template's $pkType derivation verbatim so both templates
agree by construction rather than by convention.
Verified: generated both a numeric-pk and a string-pk table's api module,
copied both into go-admin-ui and ran vue-tsc --noEmit - clean. Added a
throwaway call-site file exercising getVerifyStrPk with a string and (via
@ts-expect-error) confirming a number argument is now rejected, so the
type is actually enforced rather than having quietly widened to any.
89 lines
2.3 KiB
Plaintext
89 lines
2.3 KiB
Plaintext
{{- /*
|
|
$pkType: the primary key's TS type for get{ClassName}'s parameter.
|
|
Defaults to "number" - true for every column but string primary keys
|
|
(natural keys), which do exist (sys_tables.go:323-338 gives a primary
|
|
key column GoType "string" whenever its ColumnType is not int-shaped).
|
|
Matches vue.go.template's own $pkType derivation exactly (F4) - useForm
|
|
there is typed on the same column, and a mismatch between the two is a
|
|
TS compile error at the call site, not a runtime bug.
|
|
*/ -}}
|
|
{{- $pkType := "number" -}}
|
|
{{- range .Columns -}}
|
|
{{- if and .Pk (eq .GoType "string") }}{{$pkType = "string"}}{{end -}}
|
|
{{- end -}}
|
|
import request from '@/utils/request'
|
|
import type { ApiResponse, PageQuery, PageResult, Id } from '@/types/api'
|
|
|
|
export interface {{.ClassName}} {
|
|
{{- range .Columns}}
|
|
{{.JsonField}}?: {{if eq .GoType "int" -}}
|
|
number
|
|
{{- else if eq .GoType "int64" -}}
|
|
number
|
|
{{- else if eq .GoType "float32" -}}
|
|
number
|
|
{{- else if eq .GoType "float64" -}}
|
|
number
|
|
{{- else -}}
|
|
string
|
|
{{- end}}
|
|
{{- end}}
|
|
}
|
|
|
|
export interface {{.ClassName}}Query {
|
|
{{- range .Columns}}
|
|
{{- if eq .IsQuery "1"}}
|
|
{{.JsonField}}?: {{if eq .GoType "int" -}}
|
|
number
|
|
{{- else if eq .GoType "int64" -}}
|
|
number
|
|
{{- else if eq .GoType "float32" -}}
|
|
number
|
|
{{- else if eq .GoType "float64" -}}
|
|
number
|
|
{{- else -}}
|
|
string
|
|
{{- end}}
|
|
{{- end}}
|
|
{{- end}}
|
|
}
|
|
|
|
export function list{{.ClassName}}(query: {{.ClassName}}Query & PageQuery) {
|
|
return request<ApiResponse<PageResult<{{.ClassName}}>>>({
|
|
url: '/api/v1/{{.ModuleName}}',
|
|
method: 'get',
|
|
params: query
|
|
})
|
|
}
|
|
|
|
export function get{{.ClassName}}({{.PkJsonField}}: {{$pkType}}) {
|
|
return request<ApiResponse<{{.ClassName}}>>({
|
|
url: '/api/v1/{{.ModuleName}}/' + {{.PkJsonField}},
|
|
method: 'get'
|
|
})
|
|
}
|
|
|
|
export function add{{.ClassName}}(data: {{.ClassName}}) {
|
|
return request<ApiResponse<{{.ClassName}}>>({
|
|
url: '/api/v1/{{.ModuleName}}',
|
|
method: 'post',
|
|
data
|
|
})
|
|
}
|
|
|
|
export function update{{.ClassName}}(data: {{.ClassName}}) {
|
|
return request<ApiResponse<{{.ClassName}}>>({
|
|
url: '/api/v1/{{.ModuleName}}/' + data.{{.PkJsonField}},
|
|
method: 'put',
|
|
data
|
|
})
|
|
}
|
|
|
|
export function del{{.ClassName}}(ids: Id[]) {
|
|
return request<ApiResponse<null>>({
|
|
url: '/api/v1/{{.ModuleName}}',
|
|
method: 'delete',
|
|
data: { ids: ids.map(Number) }
|
|
})
|
|
}
|