diff --git a/packages/vue-generator/src/generator/vue/sfc/generateAttribute.js b/packages/vue-generator/src/generator/vue/sfc/generateAttribute.js
index 9244f978f7..6ec0eb1454 100644
--- a/packages/vue-generator/src/generator/vue/sfc/generateAttribute.js
+++ b/packages/vue-generator/src/generator/vue/sfc/generateAttribute.js
@@ -469,6 +469,7 @@ const transformObjValue = (renderKey, value, globalHooks, config, transformObjTy
return result
}
+const normalKeyRegexp = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/
export const transformObjType = (obj, globalHooks, config) => {
if (!obj || typeof obj !== 'object') {
return {
@@ -481,7 +482,12 @@ export const transformObjType = (obj, globalHooks, config) => {
let shouldRenderKey = !Array.isArray(obj)
for (const [key, value] of Object.entries(obj)) {
- let renderKey = shouldRenderKey ? `${key}: ` : ''
+ let renderKey = shouldRenderKey
+ ? // 如果 key 是合法的变量名,则直接使用 key: 的形式,否则需要添加引号,防止不合法的 key 导致语法错误
+ normalKeyRegexp.test(key)
+ ? `${key}: `
+ : `'${key}': `
+ : ''
const { res, shouldBindToState: tmpShouldBindToState } = transformObjValue(
renderKey,
diff --git a/packages/vue-generator/test/testcases/element-plus-case/element-plus-case.test.js b/packages/vue-generator/test/testcases/element-plus-case/element-plus-case.test.js
index edd6ddf1ec..19d0bd4364 100644
--- a/packages/vue-generator/test/testcases/element-plus-case/element-plus-case.test.js
+++ b/packages/vue-generator/test/testcases/element-plus-case/element-plus-case.test.js
@@ -29,11 +29,7 @@ describe('generate element-plus material project correctly', () => {
fs.mkdirSync(path.resolve(__dirname, `./result/appdemo01/${filePath}`), { recursive: true })
if (typeof fileContent === 'string') {
- fs.writeFileSync(
- path.resolve(__dirname, `./result/appdemo01/${filePath}/${fileName}`),
- // 这里需要将换行符替换成 CRLF 格式的
- fileContent.replace(/\r?\n/g, '\r\n')
- )
+ fs.writeFileSync(path.resolve(__dirname, `./result/appdemo01/${filePath}/${fileName}`), fileContent)
} else if (fileContent instanceof Blob) {
const arrayBuffer = await fileContent.arrayBuffer()
const buffer = Buffer.from(arrayBuffer)
@@ -46,7 +42,9 @@ describe('generate element-plus material project correctly', () => {
compareContent: true,
ignoreLineEnding: true,
ignoreAllWhiteSpaces: true,
- ignoreEmptyLines: true
+ ignoreEmptyLines: true,
+ compareFileSync: dirCompare.fileCompareHandlers.lineBasedFileCompare.compareSync,
+ compareFileAsync: dirCompare.fileCompareHandlers.lineBasedFileCompare.compareAsync
}
const path1 = path.resolve(__dirname, './expected/appdemo01')
diff --git a/packages/vue-generator/test/testcases/element-plus-case/expected/appdemo01/src/http/axios.js b/packages/vue-generator/test/testcases/element-plus-case/expected/appdemo01/src/http/axios.js
index 4b2d6e4208..3654c619b4 100644
--- a/packages/vue-generator/test/testcases/element-plus-case/expected/appdemo01/src/http/axios.js
+++ b/packages/vue-generator/test/testcases/element-plus-case/expected/appdemo01/src/http/axios.js
@@ -20,6 +20,7 @@ export default (config) => {
if (typeof MockAdapter.prototype.proxy === 'undefined') {
MockAdapter.prototype.proxy = function ({ url, config = {}, proxy, response, handleData } = {}) {
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
let stream = this
const request = (proxy, any) => {
return (setting) => {
@@ -28,8 +29,9 @@ export default (config) => {
axios
.get(any ? proxy + setting.url + '.json' : proxy, config)
.then(({ data }) => {
- /* eslint-disable no-useless-call */
- typeof handleData === 'function' && (data = handleData.call(null, data, setting))
+ if (typeof handleData === 'function') {
+ data = handleData.call(null, data, setting)
+ }
resolve([200, data])
})
.catch((error) => {
@@ -127,7 +129,9 @@ export default (config) => {
return mock
},
disableMock() {
- mock && mock.restore()
+ if (mock) {
+ mock.restore()
+ }
mock = undefined
},
isMock() {
diff --git a/packages/vue-generator/test/testcases/element-plus-case/expected/appdemo01/src/lowcodeConfig/dataSource.js b/packages/vue-generator/test/testcases/element-plus-case/expected/appdemo01/src/lowcodeConfig/dataSource.js
index 80e1e88e7b..f82f146bfc 100644
--- a/packages/vue-generator/test/testcases/element-plus-case/expected/appdemo01/src/lowcodeConfig/dataSource.js
+++ b/packages/vue-generator/test/testcases/element-plus-case/expected/appdemo01/src/lowcodeConfig/dataSource.js
@@ -72,7 +72,9 @@ dataSources.list.forEach((config) => {
}
const errorHandler = (error) => {
- config.errorHandler?.value && createFn(config.errorHandler.value)(error)
+ if (config.errorHandler?.value) {
+ createFn(config.errorHandler.value)(error)
+ }
dataSource.status = 'error'
dataSource.error = error
}
diff --git a/packages/vue-generator/test/testcases/element-plus-case/expected/appdemo01/vite.config.js b/packages/vue-generator/test/testcases/element-plus-case/expected/appdemo01/vite.config.js
index e1e57978b1..b611ebc4a3 100644
--- a/packages/vue-generator/test/testcases/element-plus-case/expected/appdemo01/vite.config.js
+++ b/packages/vue-generator/test/testcases/element-plus-case/expected/appdemo01/vite.config.js
@@ -19,5 +19,6 @@ export default defineConfig({
transformMixedEsModules: true
},
cssCodeSplit: false
- }
+ },
+ base: './'
})
diff --git a/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/http/axios.js b/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/http/axios.js
index 4b2d6e4208..3654c619b4 100644
--- a/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/http/axios.js
+++ b/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/http/axios.js
@@ -20,6 +20,7 @@ export default (config) => {
if (typeof MockAdapter.prototype.proxy === 'undefined') {
MockAdapter.prototype.proxy = function ({ url, config = {}, proxy, response, handleData } = {}) {
+ // eslint-disable-next-line @typescript-eslint/no-this-alias
let stream = this
const request = (proxy, any) => {
return (setting) => {
@@ -28,8 +29,9 @@ export default (config) => {
axios
.get(any ? proxy + setting.url + '.json' : proxy, config)
.then(({ data }) => {
- /* eslint-disable no-useless-call */
- typeof handleData === 'function' && (data = handleData.call(null, data, setting))
+ if (typeof handleData === 'function') {
+ data = handleData.call(null, data, setting)
+ }
resolve([200, data])
})
.catch((error) => {
@@ -127,7 +129,9 @@ export default (config) => {
return mock
},
disableMock() {
- mock && mock.restore()
+ if (mock) {
+ mock.restore()
+ }
mock = undefined
},
isMock() {
diff --git a/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/lowcodeConfig/dataSource.js b/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/lowcodeConfig/dataSource.js
index 80e1e88e7b..f82f146bfc 100644
--- a/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/lowcodeConfig/dataSource.js
+++ b/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/lowcodeConfig/dataSource.js
@@ -72,7 +72,9 @@ dataSources.list.forEach((config) => {
}
const errorHandler = (error) => {
- config.errorHandler?.value && createFn(config.errorHandler.value)(error)
+ if (config.errorHandler?.value) {
+ createFn(config.errorHandler.value)(error)
+ }
dataSource.status = 'error'
dataSource.error = error
}
diff --git a/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/views/createVm.vue b/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/views/createVm.vue
index c3dfa7f81e..57881bbb7a 100644
--- a/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/views/createVm.vue
+++ b/packages/vue-generator/test/testcases/generator/expected/appdemo01/src/views/createVm.vue
@@ -285,7 +285,10 @@
>