瀏覽代碼

校验问题

nanMing 2 年之前
父節點
當前提交
16d92e7952

+ 1 - 1
ruoyi-ui/src/views/business/hljnds/xscjwh/index.vue

@@ -43,7 +43,7 @@
             <el-table-column label="市级名次" align="center" prop="sxbsmc" />
             <el-table-column label="省级成绩" align="center" prop="sjxbsfs" />
             <el-table-column label="省级名次" align="center" prop="sjxbsmc" />
-      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200" width="200" fixed="right">
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200" fixed="right">
         <template slot-scope="scope">
           <el-button
             size="mini"

+ 100 - 0
ruoyi-web/src/utils/regular.js

@@ -0,0 +1,100 @@
+export const Regular = {
+  // 社会信用代码
+  'CreditCode': /[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}/,
+  //法定代表人或负责人姓名
+  // * 1.可以是中文
+  //  2.可以是英文,允许输入点(英文名字中的那种点), 允许输入空格
+  // 3.中文和英文不能同时出现
+  'Name': /^([\u4e00-\u9fa5]{1,100}|[a-zA-Z.\s]{1,100})$/,
+  //电话号
+  'Phone': /^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/,
+  //身份证号
+  'ID':/^\d{15}(\d{2}[A-Za-z0-9])?$/,
+  //手机号
+  'Mobile': /^((0\d{2,3}-?\d{7,8})|(^1[0-9]{10}$))$/,
+};
+export const validateSum  = (rule, value, callback) => {
+  if (value>0) {
+    callback();
+  } else {
+    callback(new Error('不能小于零'));
+  }
+}
+export const validateMoney = (rule, value, callback) => {
+  if (value>100) {
+    callback(new Error('输入不能大于100'));
+  } else if(value<=0){
+    callback(new Error('不能小于零'));
+  }else {
+    callback();
+  }
+}
+export const chineseOne  = (rule, value, callback) => {
+  let reg=/^.*[\u4e00-\u9fa5].*$/;
+  if (reg.test(value)) {
+    callback();
+  } else {
+    callback(new Error('至少包含一个汉字'));
+  }
+}
+export const idCard  = (rule, value, callback) => {
+  if (isSFZH(value)) {
+    callback();
+  } else {
+    callback(new Error('证件号码格式不正确'));
+  }
+}
+function isSFZH(id) {
+  if (id == null || id == "") {
+    return true;
+  }
+
+  if (id.length == 15) {
+    if (isNaN(id)) {
+      return false;
+    }
+    if (id.substring(8, 10) > 12 || id.substring(10, 12) > 31) {
+      return false;
+    }
+  }
+  else if (id.length == 18) {
+    if (isNaN(id.substring(0, 17)) || (isNaN(id.substring(17, 18)) && id.substring(17, 18).toLowerCase() != "x")) {
+      return false;
+    }
+
+    if (id.substring(10, 12) > 12 || id.substring(12, 14) > 31) {
+      return false;
+    }
+    //校验最后一位校验位
+    if (!CheckTheEighteenth(id)) {
+      return false;
+    }
+  }
+  else {
+    return false;
+  }
+  return true;
+}
+function CheckTheEighteenth(SFZH) {
+  var CheckCode; //保存最后一位
+  var OtherCode;  //保存其余位
+  var Sum = 0;          //保存计数和
+  var TempCode;
+  var S = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
+  var N = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1);
+
+  OtherCode = SFZH.substring(0, 17);
+
+  CheckCode = SFZH.substring(17, 18);
+
+  for (var i = 0; i < 17; i++) {
+    TempCode = OtherCode.substring(i, i + 1);
+
+    Sum += parseInt(TempCode) * N[i];
+  }
+  if (S[Sum % 11] == CheckCode) {
+    return true;
+  } else {
+    return false;
+  }
+}

+ 196 - 17
ruoyi-web/src/views/rzyljgsq/sqzltx/index.vue

@@ -23,15 +23,16 @@
         <el-form-item label="联系方式" prop="yyLrRzyddh">
           <el-input v-model="form.yyLrRzyddh" placeholder="请输入手机号码" clearable></el-input>
         </el-form-item>
-        <el-form-item label="养老机构选择" prop="yyLrYljg">
-          <el-input class="yljg-ipt" v-model="form.yyLrYljg" placeholder="请选择养老机构" disabled></el-input>
-          <el-button type="danger" @click="showOrg = true">选 择</el-button>
+        <el-form-item label="养老机构选择" prop="jgmc">
+          <el-input class="yljg-ipt" v-model="form.jgmc" placeholder="请选择养老机构" disabled></el-input>
+          <el-button type="danger" @click="chooseBtn">选 择</el-button>
         </el-form-item>
         <el-form-item label="老人居住地址所在行政区划" prop="lrjzdzxzqh">
           <RegionCascaderSelect v-model="form.lrjzdzxzqh" :checkStrictly="false"></RegionCascaderSelect>
         </el-form-item>
         <el-form-item label="详细地址" prop="lrjzdz">
-          <el-input v-model="form.lrjzdz" type="textarea" maxlength="400" show-word-limit placeholder="请输入老人详细居住地址"></el-input>
+          <el-input v-model="form.lrjzdz" type="textarea" maxlength="400" show-word-limit placeholder="请输入老人详细居住地址">
+          </el-input>
         </el-form-item>
         <el-form-item>
           <el-button v-loading="loading" element-loading-background="rgba(255, 255, 255, 0.3)" class="submitBtn"
@@ -42,8 +43,59 @@
     </div>
   </div>
   <!-- 选择养老机构弹出框 -->
-  <el-dialog title="养老机构选择" width="900px" v-model="showOrg" append-to-body>
-
+  <el-dialog custom-class="org-dialog" title="养老机构选择" width="900px" v-model="showOrg" align-center append-to-body
+    top="8vh">
+    <el-scrollbar>
+      <el-row justify="space-between">
+        <el-col :span="7">
+          <OrgTreeSelEmbed ref="dztree" @handleNodeClick="getOrgList($event)"></OrgTreeSelEmbed>
+        </el-col>
+        <el-col :span="16">
+          <div class="bottom_box" v-loading="loading" v-if="orgList.length>0">
+            <div class="jg_box" v-for="(item,index) in orgList" :key="index">
+              <div class="jg_main" @click="chooseOrg(item)" :class="{active: item.id === active }">
+                <div class="img">
+                  <el-image style="width: 100%;height: 100%" :src="item.url" fit="cover">
+                    <template #error>
+                      <div class="image-slot">
+                        <el-icon>
+                          <icon-picture />
+                        </el-icon>
+                      </div>
+                    </template>
+                  </el-image>
+                </div>
+                <div class="rigth_nr">
+                  <div class="height25 font_style1">
+                    {{item.jgmc}}
+                  </div>
+                  <div class="height25 font_style2">
+                    <el-rate v-model="item.dj" disabled text-color="#ff9900" />
+                    ({{selectDictLabel(CZ015,item.pddj)}})
+                  </div>
+                  <div class="height25 font_style3">
+                    地址:{{item.txdz}}
+                  </div>
+                  <div class="height25 font_style3">
+                    电话:{{item.frlxfs}}
+                  </div>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div v-else>
+            <el-empty :image-size="200" />
+          </div>
+          <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum"
+            v-model:limit="queryParams.pageSize" @pagination="getList" />
+        </el-col>
+      </el-row>
+    </el-scrollbar>
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button type="danger" @click="showOrg = false">确 定</el-button>
+      </span>
+    </template>
   </el-dialog>
 </template>
   
@@ -51,43 +103,57 @@
 <script setup>
 import { onBeforeUnmount, reactive, ref } from 'vue'
 import { useRouter } from 'vue-router'
-import { orderOrg } from '@/api/home'
+import { orderOrg, jcxxList } from '@/api/home'
+import { Regular, chineseOne, idCard } from '@/utils/regular'
 
-const showForm = ref(true)
+let timer
+  , router = useRouter()
+const { proxy } = getCurrentInstance();
+const { CZ015 } = proxy.useDict('CZ015');
 const showOrg = ref(false)
+
+/*------------表单相关start--------------*/
 const loading = ref(false)
 const formRef = ref()
-let router = useRouter()
-let timer
-
-// 表单数据
+const showForm = ref(true)
 const form = reactive({})
-// 表单校验规则
 const rules = reactive({
   xm: [
     { required: true, message: '请输入老人姓名', trigger: 'blur' },
+    { validator: chineseOne, trigger: 'blur' }
   ],
   zjhm: [
     { required: true, message: '请输入老人身份证号码', trigger: 'blur' },
-    { max: 18, message: '身份证号码不能超过18位', trigger: 'blur' },
+    { validator: idCard, trigger: 'blur' }
   ],
   lrjzdzxzqh: [
     { required: true, message: '请输入老人居住地址', trigger: 'blur' },
   ],
   yyLrRzyddh: [
     { required: true, message: '请输入填报人手机号码', trigger: 'blur' },
+    { pattern: Regular.Mobile, message: '手机号格式不对', trigger: 'blur' }
   ],
-  yyLrYljg: [
+  jgmc: [
     { required: true, message: '请选择机构', trigger: 'blur' },
   ],
 })
-
 async function onSubmit(formEl) {
   if (!formEl) return
   await formEl.validate((valid, fields) => {
     loading.value = true
     if (valid) {
-      orderOrg(form).then((res) => {
+      let szxzqh = ''
+      if (Array.isArray(form.lrjzdzxzqh)) {
+        szxzqh = form.lrjzdzxzqh[form.lrjzdzxzqh.length - 1]
+      } else {
+        let data = JSON.parse(form.lrjzdzxzqh)
+        szxzqh = data[data.length - 1]
+      }
+      let postData = {
+        ...form,
+        lrjzdzxzqh: szxzqh
+      }
+      orderOrg(postData).then((res) => {
         console.log(res);
         showForm.value = false
         timer = setTimeout(() => router.push('/rzyljgsq'), 2000)
@@ -95,10 +161,53 @@ async function onSubmit(formEl) {
         loading.value = false
       })
     } else {
+      console.log(fields);
       loading.value = false
     }
   })
 }
+/*------------表单相关end-------------*/
+
+/*------------养老机构选择start--------------*/
+const active = ref('')
+const orgList = ref([])
+const total = ref(0)
+const queryParams = reactive({
+  pageNum: 1,
+  pageSize: 5,
+  isChxddjg: '',
+  pddj: '',
+  cwzs: '',
+  jgmc: '',
+  status: '',
+  szxzqh: '',
+})
+function chooseOrg(rows) {
+  active.value = rows.id
+  form.jgmc = rows.jgmc
+  form.yyLrYljg = rows.id
+}
+function chooseBtn(e) {
+  showOrg.value = true
+  orgList.value.length > 0 ? false : getOrgList(e)
+}
+function getOrgList(e) {
+  queryParams.szxzqh = e.code
+  getList()
+}
+function getList() {
+  loading.value = true;
+  jcxxList(queryParams).then(response => {
+    orgList.value = response.rows.map(item => {
+      return { ...item, dj: parseInt(item.pddj), url: item.jgUrl ? item.jgUrl.split(',')[0] : '' }
+    });
+    console.log('orgList', orgList.value);
+    total.value = response.total;
+    loading.value = false;
+  });
+}
+
+/*------------养老机构选择end--------------*/
 
 onBeforeUnmount(() => {
   clearTimeout(timer)
@@ -182,4 +291,74 @@ onBeforeUnmount(() => {
     }
   }
 }
+
+.bottom_box {
+  display: flex;
+  flex-wrap: wrap;
+  justify-content: space-between;
+
+  .jg_box {
+    width: 100%;
+    height: 100px;
+    background: #FAFAFC;
+    display: flex;
+    margin-bottom: 20px;
+    padding: 1px;
+  }
+
+  .jg_main {
+    width: 100%;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    padding: 3px;
+    cursor: pointer;
+
+    &.active {
+      box-shadow: 0 0 0 1px #bfd4f5;
+    }
+
+    .img {
+      width: 25%;
+      height: 100%;
+      background: #bfd4f5;
+    }
+
+    .rigth_nr {
+      display: flex;
+      flex-direction: column;
+      height: 100%;
+      width: 70%;
+    }
+  }
+
+  .height25 {
+    height: 25%;
+    display: flex;
+    align-items: center;
+
+  }
+
+  .font_style1 {
+    font-size: 16px;
+    font-weight: bold;
+    color: #444B55;
+  }
+
+  .font_style2 {
+    font-size: 14px;
+    font-weight: 400;
+    color: #444B55;
+  }
+
+  .font_style3 {
+    font-size: 14px;
+    font-weight: 400;
+    color: #999999;
+  }
+}
+
+.pagination-container {
+  padding: 0;
+}
 </style>

+ 6 - 4
ruoyi-web/src/views/slhgzsq/sqzltx/index.vue

@@ -81,7 +81,8 @@
 <script setup>
 import { getCurrentInstance, reactive, ref } from 'vue'
 import { useRouter } from 'vue-router'
-import { retrofitApply, CountryDeptList } from '@/api/home'
+import { retrofitApply } from '@/api/home'
+import { Regular, chineseOne, idCard } from '@/utils/regular'
 
 let router = useRouter()
 let timer
@@ -96,10 +97,11 @@ const form = reactive({})
 const rules = reactive({
   xm: [
     { required: true, message: '改造对象姓名不能为空', trigger: 'blur' },
-    { max: 72, message: '改造对象姓名不能超过72个字符', trigger: 'blur' },
+    { validator: chineseOne, trigger: 'blur' }
   ],
   lxdh: [
     { required: true, message: '改造对象联系电话不能为空', trigger: 'blur' },
+    { pattern: Regular.Mobile, message: '手机号格式不对', trigger: 'blur' }
   ],
   isTsknlr: [
     { required: true, message: '是否特殊困难老年人不能为空', trigger: 'blur' }
@@ -132,10 +134,11 @@ const rules = reactive({
   ],
   tbrXm: [
     { required: true, message: '填报人姓名不能为空', trigger: 'blur' },
-    { max: 72, message: '填报人姓名不能超过72个字符', trigger: 'blur' },
+    { validator: chineseOne, trigger: 'blur' }
   ],
   tbrSjhm: [
     { required: true, message: '填报人手机号码不能为空', trigger: 'blur' },
+    { pattern: Regular.Mobile, message: '手机号格式不对', trigger: 'blur' }
   ]
 })
 
@@ -167,7 +170,6 @@ async function onSubmit(formEl) {
         gznr: form.gznr.join(','),
         zfdz: szxzqh
       }
-      console.log('postData', postData);
       retrofitApply(postData).then((res) => {
         console.log('res', res);
         showForm.value = false