| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /**
- * 将 queryForm 内带 list-search-actions 的块移到 </el-form> 前,使搜索按钮靠右对齐。
- * Usage: node scripts/move-list-search-actions-to-end.js [viewsDir]
- */
- const fs = require('fs')
- const path = require('path')
- const viewsDir = process.argv[2]
- ? path.resolve(process.argv[2])
- : path.join(__dirname, '../src/views')
- function walk(dir, files = []) {
- for (const name of fs.readdirSync(dir)) {
- const full = path.join(dir, name)
- if (fs.statSync(full).isDirectory()) walk(full, files)
- else if (name.endsWith('.vue')) files.push(full)
- }
- return files
- }
- function normalizeActionsBlock(block) {
- // el-col 改为 template,避免嵌套 el-row 时破坏 el-form-item 布局
- return block
- .replace(/<el-col\b([^>]*)>/g, '<template$1>')
- .replace(/<\/el-col>/g, '</template>')
- }
- function moveSearchActionsToEnd(content) {
- const queryIdx = content.indexOf('ref="queryForm"')
- if (queryIdx < 0 || !content.includes('list-search-actions')) return content
- const formOpenStart = content.lastIndexOf('<el-form', queryIdx)
- const formCloseStart = content.indexOf('</el-form>', queryIdx)
- if (formOpenStart < 0 || formCloseStart < 0) return content
- const before = content.slice(0, formOpenStart)
- const formTagEnd = content.indexOf('>', formOpenStart) + 1
- const formOpenTag = content.slice(formOpenStart, formTagEnd)
- let formBody = content.slice(formTagEnd, formCloseStart)
- const after = content.slice(formCloseStart)
- const actionsRe = /<el-form-item\b[^>]*\blist-search-actions\b[^>]*>[\s\S]*?<\/el-form-item>\s*/g
- const actions = []
- formBody = formBody.replace(actionsRe, (m) => {
- actions.push(normalizeActionsBlock(m.replace(/\s+$/, '')))
- return ''
- })
- if (actions.length === 0) return content
- formBody = formBody.replace(/\n{3,}/g, '\n\n').replace(/\s+$/, '')
- const actionsBlock = '\n' + actions.join('\n') + '\n'
- return before + formOpenTag + formBody + actionsBlock + after
- }
- let changed = 0
- for (const file of walk(viewsDir)) {
- const original = fs.readFileSync(file, 'utf8')
- const next = moveSearchActionsToEnd(original)
- if (next !== original) {
- fs.writeFileSync(file, next, 'utf8')
- changed++
- console.log(path.relative(viewsDir, file))
- }
- }
- console.log('\nMoved list-search-actions in ' + changed + ' files')
|