Переглянути джерело

数据字典获取方式和数据建模跳转调整

lph 1 рік тому
батько
коміт
96b5436aad

+ 2 - 2
ruoyi-ui/.env.development

@@ -11,7 +11,7 @@ VUE_APP_BASE_API = '/dev-api'
 VUE_CLI_BABEL_TRANSPILE_MODULES = true
 
 #数据引擎模块IP
-VUE_APP_BASE_API2 = 'http://192.168.110.76:8099/'
+VUE_APP_BASE_API2 = 'http://192.168.110.70:8099/'
 
 #表单引擎模块IP
-VUE_APP_BASE_API3 = 'http://192.168.110.76:8088/'
+VUE_APP_BASE_API3 = 'http://192.168.110.70:8088/'

+ 1 - 0
ruoyi-ui/src/views/dataEngine/datamodeling/index.vue

@@ -126,6 +126,7 @@ export default {
         tableComment: null,
         databaseType: this.$store.state.user.dataSource.databaseType,
         databaseName: this.$store.state.user.dataSource.databaseName,
+        username: this.$store.state.user.dataSource.username,
       },
     };
   },

+ 108 - 53
ruoyi-ui/src/views/tool/datasheet/index.vue

@@ -47,7 +47,7 @@
                   @blur="selectBlur(scope)"
                   @change="
                     handleSelected(
-                      dict.type[databaseType + '_data_type'].find(
+                      dataType.find(
                         (item) => item.label === scope.row.fieldType
                       ),
                       scope
@@ -60,7 +60,7 @@
                   <el-option v-for="item in dict.type.mysql_data_type"  :label="item.dictLabel" :value="item.dictValue">
                   </el-option> -->
                   <el-option
-                    v-for="item in dict.type[databaseType + '_data_type']"
+                    v-for="item in dataType"
                     :key="item.value"
                     :label="item.label"
                     :value="item.value"
@@ -89,7 +89,10 @@
 
           <el-table-column prop="isNull" label="不是null" width="100">
             <template slot-scope="scope">
-              <el-checkbox v-model="scope.row.isNull"></el-checkbox>
+              <el-checkbox
+                @change="isNullChange(scope.row)"
+                v-model="scope.row.isNull"
+              ></el-checkbox>
             </template>
           </el-table-column>
 
@@ -151,15 +154,15 @@
 import { createDatabase } from "@/api/datasheet/index";
 import { tableInfo, editTable } from "@/api/dataEngine/index";
 import { mapState } from "vuex";
+import { getDicts } from "@/api/system/dict/data";
 export default {
   name: "Datasheet",
-  dicts: [
-    "mysql_data_type",
-    "sqlserver_data_type",
-    "dm_data_type",
-    "oracle_data_type",
-    "datasource_type",
-  ],
+  // dicts: [
+  //   "dm_data_type",
+  //   "mysql_data_type",
+  //   "sqlserver_data_type",
+  //   "oracle_data_type",
+  // ],
   data() {
     return {
       isEdited: false,
@@ -199,23 +202,26 @@ export default {
         // fieldLength0: { required: true, message: '请输入', trigger: 'blur' },
       },
       list: ["int", "varchar"],
+      dataType: [], //数据类型字典
 
       Inoputdisabled: [],
       // 需要指定长度
       mysqlAllowLength: ["char", "varchar", "numeric", "decimal"],
     };
   },
-  created() {
+  async created() {
+    await this.getDict();
     if (this.$route.query.tableName) {
       this.isEdited = true;
       this.info();
     } else {
-      Object.keys(this.dataBaseName).forEach((item) => {
-        this.dataBaseName[item] = "";
+      Object.keys(this.form).forEach((item) => {
+        this.form[item] = "";
       });
       this.experienceData = [];
     }
   },
+  mounted() {},
   computed: {
     ...mapState({
       databaseName: (state) => state.user.dataSource.databaseName,
@@ -249,12 +255,27 @@ export default {
           // rulesAdd['fieldLength' + index] = item.fieldLength
           // this.experienceDataForm = {...rulesAdd}
         });
-        console.log(this.experienceDataForm);
       },
       deep: true, // 深度监听父组件传过来对象变化
     },
   },
   methods: {
+    // 加载数据字典
+    async getDict() {
+      let res = await this.getDicts(this.databaseType + "_data_type");
+      console.log(res);
+      if (res.code == 200) {
+        this.dataType = res.data.map((item) => {
+          return {
+            raw: item,
+            value: item.dictValue,
+            label: item.dictLabel,
+          };
+        });
+      } else {
+        console.log(res.msg);
+      }
+    },
     // 初始化表格数据
     info() {
       const tableName = this.$route.query.tableName;
@@ -267,18 +288,16 @@ export default {
         databaseType: this.databaseType,
         databaseName: this.databaseName,
       };
-
       tableInfo(data).then((response) => {
-        console.log(response);
         this.experienceData = response.data;
         // 初始化校验规则
-        this.experienceData.forEach((val, index) => {
-          this.handleSelected(
-            this.dict.type[this.databaseType + "_data_type"].find(
-              (item) => item.label === val.fieldType
-            ),
-            { $index: index, row: val }
-          );
+        this.experienceData.map((val, index) => {
+          let temp = JSON.parse(JSON.stringify(this.dataType));
+          console.log(temp);
+          let targetDictItem = temp.find((item) => {
+            return item.label === val.fieldType;
+          });
+          this.handleSelected(targetDictItem, { $index: index, row: val });
         });
       });
     },
@@ -289,15 +308,12 @@ export default {
     // 下拉选中事件  // 处理选中类型后长度输入框是否禁用
     handleSelected(tem, scope) {
       if (tem == undefined) return;
-      // console.log(this.experienceDataForm)
-      // console.log(this.tableform)
       if (!this.tableform["fieldLength" + scope.$index]) {
         this.tableform["fieldLength" + scope.$index] = {};
       }
       if (tem.raw.listClass === "success") {
         this.Inoputdisabled[scope.$index] = true; // 禁用长度输入框
         scope.row.fieldLength = "";
-
         this.tableform["fieldLength" + scope.$index].required = false; // 禁用长度输入框的校验
         return this.$set(
           this.experienceDataForm,
@@ -366,6 +382,12 @@ export default {
         }
       });
     },
+    //处理非空选框问题
+    isNullChange(row) {
+      if (!row.isNull) {
+        row.isPrimary = false;
+      }
+    },
     //增加经验行
     handleAddExperienceline() {
       if (this.experienceData == undefined) {
@@ -439,7 +461,11 @@ export default {
               this.$emit("ok");
               Object.keys(this.form).forEach((key) => (this.form[key] = ""));
               this.experienceData = [];
-              this.$tab.closePage();
+              this.$tab.closePage().then(() => {
+                this.$router.push({
+                  path: "/data/datamodeling",
+                });
+              });
               // 新增成功之后关闭当前页面
               // this.$router.replace({
               //   path: "/data/datamodeling",
@@ -452,36 +478,65 @@ export default {
       });
     },
     edit() {
-      this.experienceData = this.experienceData.filter((item) => {
-        return item.fieldName && item.fieldType;
+      const rule1 = new Promise((resolve, reject) => {
+        this.$refs["form"].validate((valid) => {
+          if (valid) {
+            resolve();
+          } else {
+            return false;
+          }
+        });
       });
-      this.experienceData.forEach((field) => {
-        if (field.fieldLength) {
-          field.fieldType = `${field.fieldType}(${field.fieldLength})`;
-        }
+      const rule2 = new Promise((resolve, reject) => {
+        this.$refs["tableform"].validate((valid) => {
+          if (valid) {
+            resolve();
+          } else {
+            return false;
+          }
+        });
       });
-      let query = {
-        databaseType: this.$store.state.user.dataSource.databaseType,
-        databaseName: this.$store.state.user.dataSource.databaseName,
-        tableName: this.form.tableName,
-        tableComment: this.form.tableComment,
-        field: this.experienceData,
-      };
-      editTable(query)
-        .then((res) => {
-          this.$modal.msgSuccess(res.msg);
-          if (res.code === 200) {
-            this.visible = false;
-            this.$emit("ok");
-            Object.keys(this.form).forEach((key) => (this.form[key] = ""));
-            this.experienceData = [];
+      Promise.all([rule1, rule2]).then(() => {
+        if (this.experienceData.length == 0) {
+          this.$modal.msgWarning("字段不可为空!");
+          return;
+        }
+        this.experienceData = this.experienceData.filter((item) => {
+          return item.fieldName && item.fieldType;
+        });
+        this.experienceData.forEach((field) => {
+          if (field.fieldLength) {
+            field.fieldType = `${field.fieldType}(${field.fieldLength})`;
           }
-        })
-        .catch((err) => {
-          console.log(err);
         });
-      // 关闭当前页面
-      this.$tab.closePage();
+        let query = {
+          databaseType: this.$store.state.user.dataSource.databaseType,
+          databaseName: this.$store.state.user.dataSource.databaseName,
+          tableName: this.form.tableName,
+          tableComment: this.form.tableComment,
+          field: this.experienceData,
+        };
+        editTable(query)
+          .then((res) => {
+            this.$modal.msgSuccess(res.msg);
+            if (res.code === 200) {
+              this.visible = false;
+              this.$emit("ok");
+              Object.keys(this.form).forEach((key) => (this.form[key] = ""));
+              this.experienceData = [];
+              this.$tab.closePage().then(() => {
+                this.$router.push({
+                  path: "/data/datamodeling",
+                });
+              });
+            }
+          })
+          .catch((err) => {
+            console.log(err);
+          });
+        // 关闭当前页面
+        this.$tab.closePage();
+      });
     },
   },
 };

+ 1 - 1
ruoyi-ui/vue.config.js

@@ -35,7 +35,7 @@ module.exports = {
     proxy: {
       // detail: https://cli.vuejs.org/config/#devserver-proxy
       [process.env.VUE_APP_BASE_API]: {
-        target: `http://192.168.110.76:8080`,
+        target: `http://192.168.110.70:8080`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''