优化
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
import { readdirSync, readFileSync } from 'node:fs'
|
||||
import { join, relative } from 'node:path'
|
||||
import { parse } from 'vue/compiler-sfc'
|
||||
import { expect, it } from 'vitest'
|
||||
|
||||
/** 持续检查后台业务模板,避免再次用原生日期控件替代 Element 公共控件。 */
|
||||
it('uses Element date and time pickers throughout Admin business templates', () => {
|
||||
const root = join(process.cwd(), 'src/modules')
|
||||
const violations: string[] = []
|
||||
function inspect(content: DocumentFragment, file: string) {
|
||||
for (const input of content.querySelectorAll('input, el-input')) {
|
||||
const type = input.getAttribute('type') || ''
|
||||
if (/^(date|time|month|week|datetime-local)$/.test(type)) {
|
||||
violations.push(`${relative(root, file)} ${input.tagName.toLowerCase()} type=${type}`)
|
||||
}
|
||||
}
|
||||
// 条件和插槽模板的内容位于独立的 DocumentFragment 中。
|
||||
for (const template of content.querySelectorAll('template')) inspect(template.content, file)
|
||||
}
|
||||
function visit(directory: string) {
|
||||
for (const entry of readdirSync(directory, { withFileTypes: true })) {
|
||||
const file = join(directory, entry.name)
|
||||
if (entry.isDirectory()) visit(file)
|
||||
else if (entry.name.endsWith('.vue')) {
|
||||
const source = parse(readFileSync(file, 'utf8')).descriptor.template?.content
|
||||
if (source) {
|
||||
const template = document.createElement('template')
|
||||
template.innerHTML = source
|
||||
inspect(template.content, file)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
visit(root)
|
||||
expect(violations).toEqual([])
|
||||
})
|
||||
Reference in New Issue
Block a user