Browse Source

字段特殊符号规则

lrf 3 years ago
parent
commit
2692d466e1
2 changed files with 55 additions and 1 deletions
  1. 7 0
      src/views/project/column.vue
  2. 48 1
      src/views/project/table.vue

+ 7 - 0
src/views/project/column.vue

@@ -18,6 +18,13 @@
           </el-select>
         </template>
       </el-table-column>
+      <el-table-column align="center" label="是否为索引">
+        <template #default="{ row }">
+          <el-radio-group v-model="row.index">
+            <el-radio v-for="(i, index) in required" :key="`index-${index}`" :label="i.value">{{ i.label }}</el-radio>
+          </el-radio-group>
+        </template>
+      </el-table-column>
       <el-table-column align="center" label="是否必填">
         <template #default="{ row }">
           <el-radio-group v-model="row.required">

+ 48 - 1
src/views/project/table.vue

@@ -7,6 +7,7 @@
         </el-col>
         <el-col :span="24">
           <el-table :data="list" style="width: 100%" stripe border fit>
+            <el-table-column align="center" prop="name_zh" label="表名中文" />
             <el-table-column align="center" prop="name" label="表名" />
             <el-table-column align="center" prop="remark" label="备注" />
             <el-table-column align="center" label="操作">
@@ -43,6 +44,9 @@
         </el-row>
       </el-affix>
       <el-form ref="form" :model="form" label-position="left" label-width="120px">
+        <el-form-item label="表名中文" prop="name_zh" :required="true">
+          <el-input v-model="form.name_zh"></el-input>
+        </el-form-item>
         <el-form-item label="表名" prop="name" :required="true">
           <el-input v-model="form.name"></el-input>
         </el-form-item>
@@ -111,6 +115,11 @@ export default defineComponent({
         if (valid) {
           let res;
           const data = _.cloneDeep(this.form);
+          const v = this.toVali(data);
+          if (!v.result) {
+            this.$message.error(v.message);
+            return false;
+          }
           if (!_.get(data, 'id')) res = await this.create(data);
           else res = await this.update(data);
           if (res) {
@@ -126,7 +135,18 @@ export default defineComponent({
 
     async toExport(id) {
       const res = await this.exportData({ ids: [id] });
-      console.log(JSON.parse(res));
+      if (!_.isObject(res)) {
+        this.$message.error('获取的数据格式错误,无法导出');
+        return false;
+      }
+      for (const key in res) {
+        let title = `${key}.js`;
+        let blob = new Blob([res[key]]);
+        let a = document.createElement('a');
+        a.href = window.URL.createObjectURL(blob);
+        a.download = title;
+        a.click();
+      }
     },
     toAdd() {
       this.view = 'form';
@@ -140,6 +160,33 @@ export default defineComponent({
     resetForm() {
       this.$refs.form.resetFields();
     },
+    toVali(data) {
+      const result = { result: true };
+      if (!data) {
+        result.message = '验证函数未收到需要验证的数据!';
+        result.result = false;
+        return result;
+      }
+      const { columns } = data;
+      const reg = new RegExp(
+        /[(\ )(\~)(\!)(\@)(\#)(\$)(\%)(\^)(\&)(\*)(\()(\))(\-)(\+)(\=)(\[)(\])(\{)(\})(\|)(\\)(\;)(\:)(\')(\")(\,)(\.)(\/)(\<)(\>)(\?)(\)]+/
+      );
+      if (!_.isArray(columns)) {
+        result.message = '表字段的数据格式错误!';
+        result.result = false;
+        return result;
+      }
+      for (const column of columns) {
+        const { title } = column;
+        console.log(title, reg.test(title));
+        if (reg.test(title)) {
+          result.message = `字段中不能包含非 '_' 以外的特殊符号.${title}验证失败`;
+          result.result = false;
+          break;
+        }
+      }
+      return result;
+    },
   },
   watch: {
     project: {