fix: restore security hardening compatibility and validation

Restore authorized rule reveal, explicit full HTTP capture and retention, video task business fields, and valid payment URLs. Add opt-in credential preservation for trusted recovery, fix frontend type contracts and async races, and eliminate PostgreSQL test fixture resource leaks. Document audit coverage and successful fmt and CI-scoped Clippy checks.
This commit is contained in:
elky
2026-09-07 21:14:27 +08:00
parent a5c3699ae9
commit a90d564931
191 changed files with 6785 additions and 1643 deletions
+2 -1
View File
@@ -10,6 +10,7 @@
</template>
<script setup lang="ts">
import type { ClassValue } from 'clsx'
import { computed } from 'vue'
import { cn } from '@/lib/utils'
@@ -17,7 +18,7 @@ interface Props {
variant?: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'
size?: 'default' | 'sm' | 'lg' | 'icon'
disabled?: boolean
class?: string
class?: ClassValue
type?: 'button' | 'submit' | 'reset'
}
+3 -2
View File
@@ -59,6 +59,7 @@
</template>
<script setup lang="ts">
import type { ClassValue } from 'clsx'
import { computed, useAttrs, ref } from 'vue'
import { Eye, EyeOff } from 'lucide-vue-next'
import { cn } from '@/lib/utils'
@@ -70,8 +71,8 @@ const emit = defineEmits<{
}>()
interface Props {
modelValue?: string | number
class?: string
modelValue?: string | number | null
class?: ClassValue
autocomplete?: string
/**
* 输入框尺寸
+2 -1
View File
@@ -5,11 +5,12 @@
</template>
<script setup lang="ts">
import type { ClassValue } from 'clsx'
import { computed } from 'vue'
import { cn } from '@/lib/utils'
interface Props {
class?: string
class?: ClassValue
}
const props = defineProps<Props>()
@@ -1,11 +1,12 @@
<script setup lang="ts">
import type { ClassValue } from 'clsx'
import { SelectTrigger as SelectTriggerPrimitive } from 'radix-vue'
import { ChevronDown } from 'lucide-vue-next'
import { cn } from '@/lib/utils'
import { computed } from 'vue'
interface Props {
class?: string
class?: ClassValue
disabled?: boolean
}
+2 -2
View File
@@ -4,7 +4,7 @@ import { SelectRoot as SelectRootPrimitive } from 'radix-vue'
interface Props {
defaultValue?: string
modelValue?: string
modelValue?: string | null
open?: boolean
defaultOpen?: boolean
dir?: 'ltr' | 'rtl'
@@ -35,7 +35,7 @@ const openProp = computed(() =>
// modelValue 未传入时不绑定,让 radix-vue 走 uncontrolled 模式
const modelValueProp = computed(() =>
props.modelValue !== undefined ? { modelValue: props.modelValue } : {}
props.modelValue !== undefined ? { modelValue: props.modelValue ?? '' } : {}
)
</script>
@@ -1,4 +1,5 @@
<script setup lang="ts">
import type { ClassValue } from 'clsx'
import { computed, nextTick, onBeforeUnmount, onMounted, ref, useAttrs, useSlots } from 'vue'
import { ArrowDown, ArrowUp, ArrowUpDown, ListFilter } from 'lucide-vue-next'
@@ -9,7 +10,7 @@ import TableHead from './table-head.vue'
type SortDirection = 'asc' | 'desc'
const props = withDefaults(defineProps<{
class?: string
class?: ClassValue
columnKey?: string
sortable?: boolean
activeKey?: string | null
+2 -1
View File
@@ -1,9 +1,10 @@
<script setup lang="ts">
import type { ClassValue } from 'clsx'
import { cn } from '@/lib/utils'
import { computed } from 'vue'
interface Props {
class?: string
class?: ClassValue
}
const props = defineProps<Props>()
+2 -1
View File
@@ -1,9 +1,10 @@
<script setup lang="ts">
import type { ClassValue } from 'clsx'
import { cn } from '@/lib/utils'
import { computed } from 'vue'
interface Props {
class?: string
class?: ClassValue
}
const props = defineProps<Props>()
+2 -1
View File
@@ -1,9 +1,10 @@
<script setup lang="ts">
import type { ClassValue } from 'clsx'
import { cn } from '@/lib/utils'
import { computed } from 'vue'
interface Props {
class?: string
class?: ClassValue
}
const props = defineProps<Props>()
+3 -2
View File
@@ -13,12 +13,13 @@
</template>
<script setup lang="ts">
import type { ClassValue } from 'clsx'
import { computed, ref, watch, onMounted, onUnmounted, nextTick, inject, type Ref } from 'vue'
import { cn } from '@/lib/utils'
import { useI18n } from '@/i18n'
interface Props {
class?: string
class?: ClassValue
}
const props = defineProps<Props>()
@@ -41,7 +42,7 @@ const activeTab = inject<Ref<string>>('activeTab')
// 检查是否有 grid 类(由外部传入)
const hasGridClass = computed(() => {
return props.class?.includes('grid')
return cn(props.class).includes('grid')
})
const listClass = computed(() => {