# 动态权限系统 **Repository Path**: Zero_0002/dynamic-permission-system ## Basic Information - **Project Name**: 动态权限系统 - **Description**: 动态权限控制,以及工作流配置 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-19 - **Last Updated**: 2025-05-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dynamic_control_project ## Project setup ``` npm install ``` ### Compiles and hot-reloads for development ``` npm run serve ``` ### Compiles and minifies for production ``` npm run build ``` ### Customize configuration See [Configuration Reference](https://cli.vuejs.org/config/). ## 常用正则表达式 以下是您所需的正则表达式,用于验证密码、邮箱、手机号和身份证格式: ### 1. 密码格式 (包含字母大小写与数字,最少包含一个大小写字母和一个数字) 要求:密码必须包含至少一个大写字母、一个小写字母和一个数字,且长度通常为 6 到 20 个字符。 ```regex ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d]{6,20}$ ``` - `^(?=.*[a-z])`:确保密码包含至少一个小写字母。 - `(?=.*[A-Z])`:确保密码包含至少一个大写字母。 - `(?=.*\d)`:确保密码包含至少一个数字。 - `[A-Za-z\d]{6,20}`:密码由字母和数字组成,长度在 6 到 20 个字符之间。 ### 2. 邮箱格式 要求:常见的邮箱格式,如 `username@domain.com`。 ```regex ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ``` - `^[a-zA-Z0-9._%+-]+`:邮箱用户名部分,允许字母、数字、下划线、点、百分号、加号和减号。 - `@`:必需的符号,表示用户名和域名的分隔符。 - `[a-zA-Z0-9.-]+`:域名部分,允许字母、数字、点和连字符。 - `\.[a-zA-Z]{2,}$`:域名后缀部分,允许 2 个及以上字母。 ### 3. 手机号格式 要求:常见的中国手机号格式,必须以 `1` 开头,第二位是 `3-9` 之间的数字,后面是 9 位数字。 ```regex ^1[3-9]\d{9}$ ``` - `^1`:手机号必须以 `1` 开头。 - `[3-9]`:第二位数字在 `3` 到 `9` 之间。 - `\d{9}$`:接下来的 9 位是数字。 ### 4. 身份证格式 要求:中国大陆的身份证号码格式,18 位数字或 15 位数字(部分老式身份证)。 ```regex (^\d{15}$)|(^\d{17}(\d|X|x)$) ``` - `^\d{15}$`:15 位身份证号码。 - `^\d{17}(\d|X|x)$`:18 位身份证号码,最后一位可以是数字或字母 `X`(不区分大小写)。 ### 5.Cookie提取 cookie: 'username=John Smith; expires=Thu, 18 Dec 2043 12:00:00 GMT; path=/' ```regex /(^| )username=([^;]+)/ ``` - (^| ) 的意思是: - 匹配字符串的开始位置,或者匹配一个空格字符。 - ([^;]+) 的含义 - 提取不含;的字符 ### 总结: 1. **密码格式**:要求字母大小写加数字,且包含至少一个字母和一个数字。 2. **邮箱格式**:基本的电子邮箱地址。 3. **手机号格式**:中国大陆手机号,严格按照标准规则。 4. **身份证格式**:中国大陆身份证号码,支持 15 位和 18 位格式。 5. **Cookie提取**: 提取cookie中的某个值 `npm run serve` 在启动时遇到问题,如果是由于 Babel 加载器在尝试读取或写入缓存文件时失败。以下是几种可能的解决方案: ### 1. **清除缓存并重新安装依赖** ```bash rm -rf node_modules/.cache npm cache clean --force npm install npm run serve ``` 如果是 Windows 系统,可以使用: ```bash rmdir /s /q "node_modules\.cache" npm cache clean --force npm install npm run serve ``` ### 2. **检查文件权限** - 确保你有权限访问 `node_modules/.cache/babel-loader` 目录。 - 如果是 Windows,尝试以管理员身份运行命令行。 ### 3. **更新或重新安装 `babel-loader`** ```bash npm install babel-loader@latest --save-dev ``` ### 4. **检查路径长度限制(Windows)** Windows 默认限制路径长度为 260 个字符,可能导致此类问题。可以: - 缩短项目路径(如 `E:\project` 而不是 `E:\Net高级\WebVue\...`)。 - 启用长路径支持(需修改注册表或组策略)。 ### 5. **临时禁用 Babel 缓存** 在 `vue.config.js` 或 Webpack 配置中添加: ```js module.exports = { configureWebpack: { module: { rules: [ { test: /\.js$/, use: { loader: 'babel-loader', options: { cacheDirectory: false } // 禁用缓存 } } ] } } }; ``` ### 6. **检查防病毒软件** 某些安全软件可能锁定或拦截对缓存文件的访问,尝试暂时禁用后重试。 ### 7. **重新克隆项目** 如果问题持续,尝试删除 `node_modules` 和项目文件(保留源码),重新克隆并安装依赖: ```bash rm -rf node_modules package-lock.json npm install ``` 在 JavaScript 中,给对象动态添加属性有几种常见方式: --- ## 1. 点(`.`) 语法 ```js const obj = { a: 1 }; // 动态添加 obj.b = 2; console.log(obj); // { a: 1, b: 2 } ``` > 点语法简单直观,但属性名必须是合法的标识符(不能有空格、不能以数字开头等)。 --- ## 2. 中括号(`[]`)语法 ```js const obj = { a: 1 }; const key = 'dynamicKey'; // 动态添加 obj[key] = 'hello'; console.log(obj); // { a: 1, dynamicKey: 'hello' } ``` > 中括号语法可以用任意字符串或变量作为属性名,适合更灵活的场景。 --- ## 3. `Object.assign` 如果要一次性给一个对象添加多个属性,可以用 `Object.assign`: ```js const obj = { a: 1 }; Object.assign(obj, { b: 2, c: 3 }); console.log(obj); // { a: 1, b: 2, c: 3 } ``` --- ## 4. 展开运算符(ES2018+) 用于创建一个新对象并复制已有属性,再添加新的: ```js const obj = { a: 1 }; const newObj = { ...obj, b: 2, c: 3 }; console.log(newObj); // { a: 1, b: 2, c: 3 } ``` > 注意:这是生成了一个新对象,原 `obj` 不会被修改。 --- ## 5. `Object.defineProperty` 如果想控制属性的可枚举性、可写性、配置性,可以用: ```js const obj = {}; Object.defineProperty(obj, 'hidden', { value: 42, writable: false, // 不可写 enumerable: false, // 不可枚举 configurable: true // 可配置 }); console.log(obj.hidden); // 42 console.log(Object.keys(obj)); // [] (因为 enumerable: false) ``` --- ## 6. 在 Vue 响应式对象中(Vue 2) 如果对象是 Vue 2 的响应式数据,直接 `obj.newProp = ...` 可能不会触发视图更新,需要用: ```js this.$set(this.someObj, 'newProp', 123); ``` 或 ```js import Vue from 'vue'; Vue.set(this.someObj, 'newProp', 123); ``` --- ### 小结 * **最常用**:点语法或中括号语法。 * **批量添加**:`Object.assign` 或 展开运算符。 * **高级需求**:`Object.defineProperty`。 * **Vue 2 响应式**:`Vue.set` / `this.$set`。