feat: 完成后台联调与通用列表组件

This commit is contained in:
2026-08-01 12:17:33 +08:00
parent b53fe81999
commit 29dbae573f
50 changed files with 3394 additions and 580 deletions
+12 -6
View File
@@ -9,6 +9,12 @@ import { useAuthStore } from '@/stores/auth'
import LoginView from './LoginView.vue'
const loginSource = readFileSync(resolve(process.cwd(), 'src/views/LoginView.vue'), 'utf8')
const formStub = {
template: '<form><slot /></form>',
setup(_: unknown, { expose }: { expose: (exposed: { validate: () => Promise<boolean> }) => void }) {
expose({ validate: async () => true })
},
}
function createMemoryStorage(): Storage {
const values = new Map<string, string>()
@@ -59,7 +65,7 @@ describe('LoginView authentication lifecycle', () => {
global: {
plugins: [pinia, router],
stubs: {
'el-form': { template: '<form><slot /></form>' },
'el-form': formStub,
'el-form-item': { template: '<label><slot /></label>' },
'el-input': { props: ['modelValue'], emits: ['update:modelValue'], template: '<input :value="modelValue" @input="$emit(\'update:modelValue\', $event.target.value)" />' },
'el-button': { emits: ['click'], template: '<button type="button" @click="$emit(\'click\')"><slot /></button>' },
@@ -70,7 +76,7 @@ describe('LoginView authentication lifecycle', () => {
const inputs = wrapper.findAll('input')
await inputs[0]!.setValue('test_admin')
await inputs[1]!.setValue('password')
await wrapper.get('.login-submit').trigger('click')
await wrapper.get('form').trigger('submit')
await flushPromises()
expect(calls).toEqual(['login', 'access', 'replace'])
@@ -102,7 +108,7 @@ describe('LoginView authentication lifecycle', () => {
global: {
plugins: [pinia, router],
stubs: {
'el-form': { template: '<form><slot /></form>' },
'el-form': formStub,
'el-form-item': { template: '<label><slot /></label>' },
'el-input': { props: ['modelValue'], emits: ['update:modelValue'], template: '<input :value="modelValue" @input="$emit(\'update:modelValue\', $event.target.value)" />' },
'el-button': { emits: ['click'], template: '<button type="button" @click="$emit(\'click\')"><slot /></button>' },
@@ -113,7 +119,7 @@ describe('LoginView authentication lifecycle', () => {
const inputs = wrapper.findAll('input')
await inputs[0]!.setValue('test_admin')
await inputs[1]!.setValue('password')
await wrapper.get('.login-submit').trigger('click')
await wrapper.get('form').trigger('submit')
await flushPromises()
expect(replace).toHaveBeenCalledWith(expected)
@@ -140,7 +146,7 @@ describe('LoginView authentication lifecycle', () => {
global: {
plugins: [pinia, router],
stubs: {
'el-form': { template: '<form><slot /></form>' },
'el-form': formStub,
'el-form-item': { template: '<label><slot /></label>' },
'el-input': { props: ['modelValue'], emits: ['update:modelValue'], template: '<input :value="modelValue" @input="$emit(\'update:modelValue\', $event.target.value)" />' },
'el-button': { emits: ['click'], template: '<button type="button" @click="$emit(\'click\')"><slot /></button>' },
@@ -151,7 +157,7 @@ describe('LoginView authentication lifecycle', () => {
const inputs = wrapper.findAll('input')
await inputs[0]!.setValue('test_admin')
await inputs[1]!.setValue('password')
await wrapper.get('.login-submit').trigger('click')
await wrapper.get('form').trigger('submit')
await flushPromises()
expect(wrapper.get('[role="alert"]').text()).toBe('network unavailable')