ae00cd8a990c1affc210a6be493dae44.json 14 KB

1
  1. {"remainingRequest":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\front\\item\\zyAdmin\\src\\pages\\system\\codeGeneration\\index.vue?vue&type=style&index=0&id=2f014398&lang=scss&scoped=true","dependencies":[{"path":"D:\\front\\item\\zyAdmin\\src\\pages\\system\\codeGeneration\\index.vue","mtime":1761614939070},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\css-loader\\index.js","mtime":1761614929364},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\loaders\\stylePostLoader.js","mtime":1761614937403},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\postcss-loader\\src\\index.js","mtime":1761614935133},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\sass-loader\\dist\\cjs.js","mtime":1761614936391},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js","mtime":1761614937402}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:DQouaXZ1LXN0ZXBzIC5pdnUtc3RlcHMtdGl0bGUgew0KICBsaW5lLWhlaWdodDogMjZweDsNCn0NCi5jb2RlLXdhcHBlciB7DQogIG1pbi1oZWlnaHQ6IDgwMHB4Ow0KICBwYWRkaW5nLWJvdHRvbTogOTBweDsNCn0NCi5idG4gew0KICBwb3NpdGlvbjogZml4ZWQ7DQogIGJvdHRvbTogMTBweDsNCiAgLy8gaGVpZ2h0OiA4MHB4Ow0KICBkaXNwbGF5OiBmbGV4Ow0KICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCiAgd2lkdGg6IDEwMCU7DQogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KTsNCiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDRweCk7DQogIHotaW5kZXg6IDI7DQp9DQoudGFiLTEgew0KICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7DQp9DQo6OnYtZGVlcCAuZWwtaW5wdXRfX2lubmVyIHsNCiAgcGFkZGluZy1sZWZ0OiA3cHg7DQp9DQo6OnYtZGVlcCAuaXZ1LWZvcm0taXRlbSB7DQogIG1hcmdpbi1ib3R0b206IDE3cHg7DQp9DQo6OnYtZGVlcCAuaXZ1LWZvcm0taXRlbS1lcnJvci10aXAgew0KICBwYWRkaW5nLXRvcDogMnB4Ow0KfQ0KOjp2LWRlZXAgLnRpcCB7DQogIGNvbG9yOiAjYmJiOw0KICBsaW5lLWhlaWdodDogMTZweDsNCiAgcGFkZGluZy10b3A6IDVweDsNCiAgZm9udC1zaXplOiAxMnB4Ow0KfQ0K"},{"version":3,"sources":["index.vue"],"names":[],"mappings":";AA8SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"index.vue","sourceRoot":"src/pages/system/codeGeneration","sourcesContent":["<template>\r\n <div class=\"code-wapper\">\r\n <pages-header\r\n ref=\"pageHeader\"\r\n :title=\"$route.meta.title\"\r\n :backUrl=\"$routeProStr + '/system/code_generation_list'\"\r\n ></pages-header>\r\n <div class=\"message mt10\">\r\n <el-card :bordered=\"false\" shadow=\"never\" class=\"\">\r\n <steps :stepList=\"headerList\" :isActive=\"currentTab\"></steps>\r\n </el-card>\r\n </div>\r\n <div class=\"pt10 tab-1\" v-show=\"currentTab == '0'\" v-loading=\"isLoading\">\r\n <el-card :bordered=\"false\" shadow=\"never\" class=\"ivu-mt\">\r\n <FoundationForm\r\n ref=\"Foundation\"\r\n :foundation=\"formItem.foundation\"\r\n :tableField=\"tableField\"\r\n @storageData=\"storageData\"\r\n />\r\n </el-card>\r\n </div>\r\n <div class=\"pt10\" v-show=\"currentTab == '1'\">\r\n <el-card :bordered=\"false\" shadow=\"never\" class=\"ivu-mt\">\r\n <TableForm\r\n ref=\"TableForm\"\r\n :foundation=\"formItem.foundation\"\r\n :tableField=\"tableField\"\r\n :id=\"id\"\r\n @storageData=\"storageData\"\r\n />\r\n </el-card>\r\n </div>\r\n <div class=\"pt10\" v-show=\"currentTab == '2'\">\r\n <el-card :bordered=\"false\" shadow=\"never\" class=\"ivu-mt\">\r\n <StorageLoc :storage=\"formItem.storage\" />\r\n </el-card>\r\n </div>\r\n <el-card :bordered=\"false\" class=\"fixed-card\" :style=\"{ left: `${fixBottomWidth}` }\" shadow=\"never\">\r\n <el-button :disabled=\"!currentTab\" class=\"mr20\" v-db-click @click=\"beforeTab\">上一步</el-button>\r\n <el-button type=\"primary\" v-db-click @click=\"nextTab\">{{ currentTab == 2 ? '提交' : '下一步' }}</el-button>\r\n </el-card>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nimport { codeCrud } from '@/api/setting';\r\nimport FoundationForm from './components/FoundationFor.vue';\r\nimport TableForm from './components/TableForm.vue';\r\nimport StorageLoc from './components/StorageLoc.vue';\r\nimport { getMenusUnique } from '@/api/systemMenus';\r\nimport { formatFlatteningRoutes } from '@/libs/system';\r\nimport { crudFilePath } from '@/api/systemCodeGeneration';\r\nimport { crudDet } from '@/api/systemCodeGeneration';\r\nimport { setStatus } from '@api/diy';\r\nimport steps from '@/components/steps/index';\r\n\r\nexport default {\r\n name: 'system_code_generation',\r\n components: { FoundationForm, StorageLoc, TableForm, steps },\r\n data() {\r\n return {\r\n currentTab: 0,\r\n headerList: ['基础信息', '字段配置', '存放位置'],\r\n formItem: {\r\n foundation: {\r\n pid: '',\r\n tableName: '',\r\n modelName: '',\r\n isTable: 1,\r\n menuName: '',\r\n },\r\n tableForm: {},\r\n storage: {},\r\n field: {},\r\n formItem: {},\r\n },\r\n ruleValidate: {\r\n foundation: {},\r\n },\r\n tableField: [],\r\n rowList: [],\r\n reqloading: false,\r\n isLoading: false,\r\n id: '',\r\n };\r\n },\r\n computed: {\r\n // 设置是否显示 tagsView\r\n fixBottomWidth() {\r\n let { layout, isCollapse } = this.$store.state.themeConfig.themeConfig;\r\n let w;\r\n if (['columns'].includes(layout)) {\r\n if (isCollapse) {\r\n w = '85px';\r\n } else {\r\n w = '265px';\r\n }\r\n } else if (['classic'].includes(layout)) {\r\n if (isCollapse) {\r\n w = '69px';\r\n } else {\r\n w = '190px';\r\n }\r\n } else if (['defaults', 'classic'].includes(layout)) {\r\n if (isCollapse) {\r\n w = '64px';\r\n } else {\r\n w = '180px';\r\n }\r\n } else {\r\n w = '0px';\r\n }\r\n return w;\r\n },\r\n },\r\n created() {\r\n if (this.$route.query.id) {\r\n this.id = this.$route.query.id;\r\n this.getDetail(this.$route.query.id);\r\n }\r\n },\r\n mounted: function () {},\r\n methods: {\r\n getDetail(id) {\r\n this.isLoading = true;\r\n crudDet(id)\r\n .then((res) => {\r\n let data = res.data.crudInfo.field;\r\n this.formItem.foundation.pid = Number(data.pid);\r\n this.formItem.foundation.tableName = data.tableName;\r\n this.formItem.foundation.modelName = data.modelName;\r\n this.formItem.foundation.menuName = data.menuName;\r\n this.$refs.TableForm.tableField = data.tableField;\r\n this.formItem.storage = data.filePath;\r\n let i = 0;\r\n data.tableField.map((e) => {\r\n if (e.field === 'create_time' || e.field === 'update_time') {\r\n i++;\r\n if (i == 2) this.$refs.TableForm.isCreate = true;\r\n }\r\n if (e.field === 'delete_time') {\r\n this.$refs.TableForm.isDelete = true;\r\n }\r\n });\r\n this.isLoading = false;\r\n })\r\n .catch((err) => {\r\n this.$message.warning(err.msg);\r\n });\r\n },\r\n storageData(data) {\r\n this.formItem.storage = data;\r\n },\r\n beforeTab() {\r\n this.currentTab--;\r\n },\r\n addRow() {\r\n let foundation = this.formItem.foundation;\r\n if (!foundation.tableName) return this.$message.warning('请先填写表名');\r\n let data = {\r\n menuName: foundation.menuName,\r\n tableName: foundation.tableName,\r\n // isTable: foundation.isTable,\r\n fromField: [],\r\n columnField: [],\r\n };\r\n crudFilePath(data)\r\n .then((res) => {\r\n this.$refs.TableForm.tableField = res.data.tableField.length ? res.data.tableField : [];\r\n this.formItem.storage = res.data.makePath;\r\n if (!res.data.tableField.length) {\r\n this.$refs.TableForm.tableField.push({\r\n field: 'id',\r\n field_type: 'int',\r\n default: '',\r\n comment: '自增ID',\r\n required: false,\r\n is_table: true,\r\n table_name: 'ID',\r\n limit: '15',\r\n primaryKey: 1,\r\n from_type: '',\r\n });\r\n }\r\n this.currentTab++;\r\n })\r\n .catch((err) => {\r\n this.$message.warning(err.msg);\r\n });\r\n },\r\n nextTab() {\r\n if (this.currentTab == 0) {\r\n // if (!this.formItem.foundation.pid) return this.$message.warning('请选择菜单');\r\n if (!this.formItem.foundation.tableName) return this.$message.warning('请输入表名');\r\n if (!this.formItem.foundation.modelName) return this.$message.warning('请输入模块名');\r\n if (!this.formItem.foundation.isTable) {\r\n if (!this.$refs.TableForm.tableField.length) return this.$message.warning('请先添加表数据');\r\n if (this.$refs.TableForm.tableField.length)\r\n for (let i = 0; i < this.$refs.TableForm.tableField.length; i++) {\r\n const el = this.$refs.TableForm.tableField[i];\r\n if (\r\n ['addSoftDelete', 'addTimestamps'].indexOf(el.field_type) === -1 &&\r\n (!el.field || !el.field_type || !el.comment)\r\n ) {\r\n return this.$message.warning('请完善sql表数据');\r\n }\r\n }\r\n }\r\n if (this.id) {\r\n return this.currentTab++;\r\n }\r\n this.addRow();\r\n } else if (this.currentTab == 2) {\r\n if (this.reqloading) return;\r\n let data = {\r\n ...this.formItem.foundation,\r\n filePath: this.formItem.storage,\r\n tableField: this.$refs.TableForm.tableField,\r\n deleteField: this.id ? this.$refs.TableForm.deleteField : [],\r\n };\r\n if (this.id) {\r\n data.id = this.id;\r\n this.$msgbox({\r\n title: '生成提醒',\r\n message: '重新提交会重新生成文件,删除、新增、修改的字段将直接从改表中进行修改,请慎重操作!!',\r\n showCancelButton: true,\r\n cancelButtonText: '取消',\r\n confirmButtonText: '确定',\r\n iconClass: 'el-icon-warning',\r\n confirmButtonClass: 'btn-custom-cancel',\r\n })\r\n .then(() => {\r\n this.saveCodeCrud(data, true);\r\n })\r\n .catch(() => {});\r\n } else {\r\n this.$msgbox({\r\n title: '生成提醒',\r\n message:\r\n '生成后本地开发调试会直接加载生成的vue页面;如果是上线后进行生成,可以进行浏览,代码生成列表中的修改文件将不生效。需要重新打包上线!',\r\n showCancelButton: true,\r\n cancelButtonText: '取消',\r\n confirmButtonText: '确定',\r\n iconClass: 'el-icon-warning',\r\n confirmButtonClass: 'btn-custom-cancel',\r\n })\r\n .then(() => {\r\n this.saveCodeCrud(data, true);\r\n })\r\n .catch(() => {});\r\n }\r\n } else {\r\n if (this.currentTab < 3) this.currentTab++;\r\n }\r\n },\r\n saveCodeCrud(data, loading) {\r\n this.reqloading = true;\r\n codeCrud(data)\r\n .then((res) => {\r\n this.$message.success(res.msg);\r\n this.getMenusUnique();\r\n this.reqloading = false;\r\n this.$router.push({\r\n name: 'system_code_generation_list',\r\n });\r\n })\r\n .catch((err) => {\r\n this.reqloading = false;\r\n this.$message.error(err.msg);\r\n });\r\n },\r\n getMenusUnique() {\r\n getMenusUnique().then((res) => {\r\n let data = res.data;\r\n this.$store.commit('userInfo/uniqueAuth', data.uniqueAuth);\r\n this.$store.commit('menus/getmenusNav', data.menus);\r\n this.$store.dispatch('routesList/setRoutesList', data.menus);\r\n let arr = formatFlatteningRoutes(this.$router.options.routes);\r\n this.formatTwoStageRoutes(arr);\r\n let routes = formatFlatteningRoutes(data.menus);\r\n this.$store.commit('menus/setOneLvRoute', routes);\r\n this.bus.$emit('routesListChange');\r\n });\r\n },\r\n formatTwoStageRoutes(arr) {\r\n if (arr.length <= 0) return false;\r\n const newArr = [];\r\n const cacheList = [];\r\n arr.forEach((v) => {\r\n if (v && v.meta && v.meta.keepAlive) {\r\n newArr.push({ ...v });\r\n cacheList.push(v.name);\r\n this.$store.dispatch('keepAliveNames/setCacheKeepAlive', cacheList);\r\n }\r\n });\r\n return newArr;\r\n },\r\n },\r\n};\r\n</script>\r\n<style lang=\"scss\" scoped>\r\n.ivu-steps .ivu-steps-title {\r\n line-height: 26px;\r\n}\r\n.code-wapper {\r\n min-height: 800px;\r\n padding-bottom: 90px;\r\n}\r\n.btn {\r\n position: fixed;\r\n bottom: 10px;\r\n // height: 80px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n width: 100%;\r\n background-color: rgba(255, 255, 255, 0.6);\r\n backdrop-filter: blur(4px);\r\n z-index: 2;\r\n}\r\n.tab-1 {\r\n padding-bottom: 100px;\r\n}\r\n::v-deep .el-input__inner {\r\n padding-left: 7px;\r\n}\r\n::v-deep .ivu-form-item {\r\n margin-bottom: 17px;\r\n}\r\n::v-deep .ivu-form-item-error-tip {\r\n padding-top: 2px;\r\n}\r\n::v-deep .tip {\r\n color: #bbb;\r\n line-height: 16px;\r\n padding-top: 5px;\r\n font-size: 12px;\r\n}\r\n</style>\r\n"]}]}