2024-08-27 22:04:07 +08:00
|
|
|
|
<template>
|
2024-08-28 11:37:37 +08:00
|
|
|
|
<div class="sys-codeGenConfig-container">
|
2024-08-28 12:02:50 +08:00
|
|
|
|
<el-dialog v-model="state.isShowDialog" draggable :close-on-click-modal="false" width="700px">
|
2024-08-28 11:37:37 +08:00
|
|
|
|
<template #header>
|
|
|
|
|
|
<div style="color: #fff">
|
2024-08-28 12:02:50 +08:00
|
|
|
|
<el-icon size="16" style="margin-right: 3px; display: inline; vertical-align: middle"> <ele-Edit /> </el-icon>
|
2024-08-28 11:37:37 +08:00
|
|
|
|
<span> 选择正则 </span>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<div class="pattern-box">
|
|
|
|
|
|
<div class="pattern-item" v-for="(item, index) in patternData" :key="index" :class="{ active: state.index == index }" @click="handlePatternClick(item, index)">
|
|
|
|
|
|
<div class="title">{{ item.title }}</div>
|
|
|
|
|
|
<div class="info">{{ item.info }}</div>
|
|
|
|
|
|
<div class="pattern">{{ item.pattern }}</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<template #footer>
|
|
|
|
|
|
<span class="dialog-footer">
|
|
|
|
|
|
<el-button @click="cancel">取 消</el-button>
|
|
|
|
|
|
<el-button type="primary" @click="submit">确 定</el-button>
|
|
|
|
|
|
</span>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
</el-dialog>
|
|
|
|
|
|
</div>
|
2024-08-27 22:04:07 +08:00
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
|
|
<script lang="ts" setup>
|
2024-08-28 11:37:37 +08:00
|
|
|
|
import { reactive, ref } from 'vue';
|
|
|
|
|
|
import { ElMessage } from 'element-plus';
|
2024-08-27 22:04:07 +08:00
|
|
|
|
|
|
|
|
|
|
const patternData = ref([
|
2024-08-28 11:37:37 +08:00
|
|
|
|
{
|
|
|
|
|
|
title: '手机号',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^1[3,4,5,6,7,8,9][0-9]{9}$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '邮箱',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^([a-zA-Z]|[0-9])(\\w|\\-)+@[a-zA-Z0-9]+\\.([a-zA-Z]{2,4})$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '网址',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^http(s)?://([\\w-]+\\.)+[\\w-]+(/[\\w- ./?%&=]*)?$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '字母/数字/下划线',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^\\w+$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '中英文/数字/下划线',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[\\u4e00-\\u9fa5_a-zA-Z0-9]+$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '中文/英文',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[\\u4e00-\\u9fa5a-zA-Z]+$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '规范金额',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/(^[\\d]|^[1-9][\\d]*)($|[\\.][\\d]{0,2}$)/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '用户名不能全是数字',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/[^\\d]/g',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '中文',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[\\u4e00-\\u9fa5]+$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '非中文',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[^\\u4e00-\\u9fa5]*$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '限制长度',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^\\d{1,20}$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '数字',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[0-9]*$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '正整数及整数',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[1-9]\\d*$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '数字(可正负)',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^-[0-9]*[1-9][0-9]*$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '数字/小数点',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^\\d+$|^\\d*\\.\\d+$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '合法IP地址',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '手机号码或者固话',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^((0\\d{2,3}-\\d{7,8})|(1[3456789]\\d{9}))$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '身份证号码',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '大写字母',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[A-Z]+$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '小写字母',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[a-z]+$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '大小写混合',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[A-Za-z]+$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '多个8位数字格式(yyyyMMdd)并以逗号隔开',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^\\d{8}(\\,\\d{8})*$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '数字加英文',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[a-zA-Z0-9]+$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '前两位是数字后一位是英文',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^\\d{2}[a-zA-Z]+$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '1到100的数字',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[0-9]\\d{0,1}$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '1-1000两位小数',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^(.*[^0-9]|)(1000|[1-9]\\d{0,2})([^0-9].*|)$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '小数点后只能有两位数(可为0)',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^(-?\\d+)(\\.\\d{1,2})?$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '密码正则',
|
|
|
|
|
|
info: '以字母开头,长度在6~18之间,只能包含字母、数字和下划线',
|
|
|
|
|
|
pattern: '/^[a-zA-Z]\\w{5,17}$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '强密码',
|
|
|
|
|
|
info: '必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间',
|
|
|
|
|
|
pattern: '/^(?=.\\d)(?=.[a-z])(?=.[A-Z]).{8,10}$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '强密码',
|
|
|
|
|
|
info: '最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符',
|
|
|
|
|
|
pattern: '/^.*(?=.{6,})(?=.*\\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: 'QQ号码',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[1-9][0-9]{4,12}$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '微信号码',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '域名',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '车牌号码',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '护照',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^(P\\d{7}|G\\d{7,8}|TH\\d{7,8}|S\\d{7,8}|A\\d{7,8}|L\\d{7,8}|\\d{9}|D\\d+|1[4,5]\\d{7})$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '固定电话',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^(\\(\\d{3,4}\\)|\\d{3,4}-|\\s)?\\d{8}$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '邮政编码',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[1-9]{1}(\\d+){5}$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '经度',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^(\\-|\\+)?(((\\d|[1-9]\\d|1[0-7]\\d|0{1,3})\\.\\d{0,6})|(\\d|[1-9]\\d|1[0-7]\\d|0{1,3})|180\\.0{0,6}|180)$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '纬度',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^(\\-|\\+)?([0-8]?\\d{1}\\.\\d{0,6}|90\\.0{0,6}|[0-8]?\\d{1}|90)$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '正整数 + 0',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^\\d+$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '正整数',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^[0-9]*[1-9][0-9]*$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '负整数 + 0',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^((-\\d+)|(0+))$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '负整数',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^-[0-9]*[1-9][0-9]*$/',
|
|
|
|
|
|
},
|
|
|
|
|
|
{
|
|
|
|
|
|
title: '匹配整数',
|
|
|
|
|
|
info: '',
|
|
|
|
|
|
pattern: '/^-?\\d+$/',
|
|
|
|
|
|
},
|
2024-08-27 22:04:07 +08:00
|
|
|
|
]);
|
|
|
|
|
|
const state = reactive({
|
2024-08-28 11:37:37 +08:00
|
|
|
|
isShowDialog: false,
|
|
|
|
|
|
loading: false,
|
|
|
|
|
|
selectPattern: null,
|
|
|
|
|
|
index: -1,
|
2024-08-27 22:04:07 +08:00
|
|
|
|
});
|
|
|
|
|
|
|
2024-08-28 11:37:37 +08:00
|
|
|
|
const emit = defineEmits(['submitPattern']);
|
2024-08-27 22:04:07 +08:00
|
|
|
|
|
|
|
|
|
|
// 打开弹窗
|
|
|
|
|
|
const openDialog = () => {
|
2024-08-28 11:37:37 +08:00
|
|
|
|
state.isShowDialog = true;
|
2024-08-27 22:04:07 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 关闭弹窗
|
|
|
|
|
|
const closeDialog = () => {
|
2024-08-28 11:37:37 +08:00
|
|
|
|
state.isShowDialog = false;
|
2024-08-27 22:04:07 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 取消
|
|
|
|
|
|
const cancel = () => {
|
2024-08-28 11:37:37 +08:00
|
|
|
|
closeDialog();
|
2024-08-27 22:04:07 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
const handlePatternClick = (item: any, index: number) => {
|
2024-08-28 11:37:37 +08:00
|
|
|
|
state.selectPattern = item;
|
|
|
|
|
|
state.index = index;
|
|
|
|
|
|
ElMessage({
|
|
|
|
|
|
message: `点击确定完成操作!`,
|
|
|
|
|
|
type: 'success',
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
2024-08-27 22:04:07 +08:00
|
|
|
|
|
|
|
|
|
|
// 提交
|
|
|
|
|
|
const submit = async () => {
|
2024-08-28 11:37:37 +08:00
|
|
|
|
emit('submitPattern', state.selectPattern);
|
|
|
|
|
|
closeDialog();
|
2024-08-27 22:04:07 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
// 导出对象
|
|
|
|
|
|
defineExpose({ openDialog });
|
|
|
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped>
|
|
|
|
|
|
.pattern-box {
|
2024-08-28 11:37:37 +08:00
|
|
|
|
display: flex;
|
|
|
|
|
|
justify-content: space-between;
|
|
|
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
height: 400px;
|
|
|
|
|
|
overflow-y: auto;
|
|
|
|
|
|
padding: 0px 10px;
|
2024-08-27 22:04:07 +08:00
|
|
|
|
|
2024-08-28 11:37:37 +08:00
|
|
|
|
.pattern-item {
|
|
|
|
|
|
width: 48%;
|
|
|
|
|
|
border: 1px solid #d9d9d9;
|
|
|
|
|
|
box-sizing: border-box;
|
|
|
|
|
|
padding: 10px;
|
|
|
|
|
|
border-radius: 5px;
|
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
|
flex-shrink: 0;
|
|
|
|
|
|
margin: 5px 0px;
|
2024-08-27 22:04:07 +08:00
|
|
|
|
|
2024-08-28 11:37:37 +08:00
|
|
|
|
.title {
|
|
|
|
|
|
font-weight: 700;
|
|
|
|
|
|
}
|
2024-08-27 22:04:07 +08:00
|
|
|
|
|
2024-08-28 11:37:37 +08:00
|
|
|
|
.info {
|
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
|
margin-top: 5px;
|
|
|
|
|
|
}
|
2024-08-27 22:04:07 +08:00
|
|
|
|
|
2024-08-28 11:37:37 +08:00
|
|
|
|
.pattern {
|
|
|
|
|
|
font-size: 10px;
|
|
|
|
|
|
margin-top: 5px;
|
|
|
|
|
|
background: #1d1f21;
|
|
|
|
|
|
padding: 3px 5px;
|
|
|
|
|
|
color: #d9d9d9;
|
|
|
|
|
|
border-radius: 3px;
|
|
|
|
|
|
}
|
2024-08-27 22:04:07 +08:00
|
|
|
|
|
2024-08-28 11:37:37 +08:00
|
|
|
|
&:hover {
|
|
|
|
|
|
//border: 1px solid red;
|
|
|
|
|
|
box-shadow: 0px 0px 2px 1px rgba(0, 0, 0, 0.2);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2024-08-27 22:04:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
.active {
|
2024-08-28 11:37:37 +08:00
|
|
|
|
border: 1px solid red !important;
|
2024-08-27 22:04:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
</style>
|