Browse Source

添加项目页面 表单校验

XuZinan 3 năm trước cách đây
mục cha
commit
ac920dc432
1 tập tin đã thay đổi với 94 bổ sung8 xóa
  1. 94 8
      pages/Project/add.vue

+ 94 - 8
pages/Project/add.vue

@@ -1,15 +1,21 @@
 <template>
 <template>
   <view class="content">
   <view class="content">
     <view class="title"> 新增项目 </view>
     <view class="title"> 新增项目 </view>
-    <uni-forms :modelValue="formData" label-position="left" class="form">
-      <uni-forms-item label="项目名称">
+    <uni-forms
+      :modelValue="formData"
+      label-position="left"
+      class="form"
+      ref="form"
+      :rules="rules"
+    >
+      <uni-forms-item required label="项目名称" name="project_name">
         <uni-easyinput
         <uni-easyinput
           type="text"
           type="text"
           v-model="formData.project_name"
           v-model="formData.project_name"
           class="input"
           class="input"
         />
         />
       </uni-forms-item>
       </uni-forms-item>
-      <uni-forms-item label="项目类别">
+      <uni-forms-item label="项目类别" name="type" required>
         <picker
         <picker
           @change="selectChangeType"
           @change="selectChangeType"
           :range="typeList"
           :range="typeList"
@@ -22,7 +28,7 @@
           </view>
           </view>
         </picker>
         </picker>
       </uni-forms-item>
       </uni-forms-item>
-      <uni-forms-item label="流程">
+      <uni-forms-item label="流程" name="form">
         <picker disabled>
         <picker disabled>
           <view class="select">
           <view class="select">
             {{
             {{
@@ -33,7 +39,9 @@
       </uni-forms-item>
       </uni-forms-item>
       <uni-forms-item
       <uni-forms-item
         label="行业名称"
         label="行业名称"
+        name="industry"
         v-show="!formData.type || (formData.type && formData.type.id != 7)"
         v-show="!formData.type || (formData.type && formData.type.id != 7)"
+        required
       >
       >
         <picker
         <picker
           @change="selectChangeIndustry"
           @change="selectChangeIndustry"
@@ -50,13 +58,16 @@
       </uni-forms-item>
       </uni-forms-item>
       <uni-forms-item
       <uni-forms-item
         label="项目地区"
         label="项目地区"
+        name="location"
         v-show="!formData.type || (formData.type && formData.type.id != 7)"
         v-show="!formData.type || (formData.type && formData.type.id != 7)"
       >
       >
         <picker> <view class="select"></view></picker>
         <picker> <view class="select"></view></picker>
       </uni-forms-item>
       </uni-forms-item>
       <uni-forms-item
       <uni-forms-item
         label="项目简称"
         label="项目简称"
+        name="name"
         v-show="!formData.type || (formData.type && formData.type.id != 7)"
         v-show="!formData.type || (formData.type && formData.type.id != 7)"
+        required
       >
       >
         <uni-easyinput
         <uni-easyinput
           type="text"
           type="text"
@@ -68,7 +79,9 @@
       </uni-forms-item>
       </uni-forms-item>
       <uni-forms-item
       <uni-forms-item
         label="项目期数"
         label="项目期数"
+        name="version"
         v-show="!formData.type || (formData.type && formData.type.id != 7)"
         v-show="!formData.type || (formData.type && formData.type.id != 7)"
+        required
       >
       >
         <picker @change="selectChangeVersion" :range="versionList">
         <picker @change="selectChangeVersion" :range="versionList">
           <view class="select">
           <view class="select">
@@ -78,6 +91,7 @@
       </uni-forms-item>
       </uni-forms-item>
       <uni-forms-item
       <uni-forms-item
         label="项目编号"
         label="项目编号"
+        name="code"
         v-show="!formData.type || (formData.type && formData.type.id != 7)"
         v-show="!formData.type || (formData.type && formData.type.id != 7)"
       >
       >
         <view>
         <view>
@@ -119,6 +133,61 @@ export default {
           version: "*",
           version: "*",
         },
         },
       },
       },
+      rules: {
+        project_name: {
+          rules: [
+            {
+              required: true,
+              errorMessage: "请输入项目名称",
+            },
+          ],
+        },
+        type: {
+          rules: [
+            {
+              required: true,
+              errorMessage: "请选择项目类别",
+            },
+          ],
+        },
+        industry: {
+          rules: [
+            {
+              required: this.formData?.type_id != 7,
+              errorMessage: "请选择行业",
+            },
+          ],
+        },
+        name: {
+          rules: [
+            {
+              required: this.formData?.type_id != 7,
+              errorMessage: "请填写项目简称",
+            },
+            {
+              maxLength: 3,
+              errorMessage: "项目简称不能超过3位",
+            },
+            {
+              validateFunction: function (rule, value, data, callback) {
+                if (value.match(/[^A-Za-z]/g)) {
+                  callback("项目简称只能是英文字符");
+                } else {
+                  callback();
+                }
+              },
+            },
+          ],
+        },
+        version: {
+          rules: [
+            {
+              required: this.formdata?.type_id != 7,
+              errorMessage: "请选择期数",
+            },
+          ],
+        },
+      },
       project_id: 0,
       project_id: 0,
 
 
       typeList: [],
       typeList: [],
@@ -133,12 +202,23 @@ export default {
     this.project_id = options.project_id;
     this.project_id = options.project_id;
     this.init(options);
     this.init(options);
   },
   },
+  onReady() {
+    this.$refs.form.setRules(this.rules);
+  },
   methods: {
   methods: {
     onHandleSubmit(value) {
     onHandleSubmit(value) {
-      if (value) console.log(this.formData);
-      uni.navigateTo({
-        url: "./list",
-      });
+      if (value) {
+        this.$refs.form.validate((err, formData) => {
+          if (!err) {
+            console.log("success", formData);
+            uni.navigateTo({
+              url: "./list",
+            });
+          } else {
+            console.log(err, formData);
+          }
+        });
+      } else uni.navigateTo({ url: "./list" });
     },
     },
     async init(options) {
     async init(options) {
       let form = this.formData;
       let form = this.formData;
@@ -172,11 +252,15 @@ export default {
       res = await queryIndustry();
       res = await queryIndustry();
       this.industryList = res.data;
       this.industryList = res.data;
     },
     },
+    binddata(name, value) {
+      this.$refs.form.setValue(name, value);
+    },
     selectChangeType(e) {
     selectChangeType(e) {
       let form = this.formData;
       let form = this.formData;
       let code = this.formData.code;
       let code = this.formData.code;
       form.type = this.typeList[e.target.value];
       form.type = this.typeList[e.target.value];
       code.type = form.type.code;
       code.type = form.type.code;
+      this.binddata("type", e.target.value);
       if (form.type.id == 7) {
       if (form.type.id == 7) {
         form.flow = this.typeList.find((item) => item.id == 1);
         form.flow = this.typeList.find((item) => item.id == 1);
         form.industry = null;
         form.industry = null;
@@ -192,6 +276,7 @@ export default {
     selectChangeIndustry(e) {
     selectChangeIndustry(e) {
       this.formData.industry = this.industryList[e.target.value];
       this.formData.industry = this.industryList[e.target.value];
       this.formData.code.industry = this.formData.industry.code;
       this.formData.code.industry = this.formData.industry.code;
+      this.binddata("industry", e.target.value);
     },
     },
     onChangeName(e) {
     onChangeName(e) {
       let name = e.detail.value.toUpperCase();
       let name = e.detail.value.toUpperCase();
@@ -202,6 +287,7 @@ export default {
     selectChangeVersion(e) {
     selectChangeVersion(e) {
       this.formData.version = e.target.value + 1;
       this.formData.version = e.target.value + 1;
       this.formData.code.version = this.formData.version + "";
       this.formData.code.version = this.formData.version + "";
+      this.binddata("version", e.target.value);
     },
     },
   },
   },
 };
 };