2022/2/9-2022/2/11

除了usersign用户名是user,其它都是account。

为了实现列表按时间排序,数据存储时间只能用时间戳了。

时间戳是字符串形式是无法比较的,要转换成Number形式,建议以后时间用Number存储。

真的非常讨厌时间类型的数据了。

用户请假模块和签到模块属于同一个数据库。

业务:为了防止某个日期进行了重复申请,可以通过利用比较时间范围。

mongo范围查询:https://www.cnblogs.com/dyd520/p/11452100.html

目前考勤系统已经完成签到,请假,隐私设置,登录,密码重置,注册。
公共权限模块和用户模块已经完成,现在要开始着手独属于管理员的模块了。

管理员模块包括员工信息管理,请假管理模块,用户管理模块 ,操作日志模块,奖品模块。

发现自己在elementui和vue2和mock.js这三个方面都不熟,需要去学习。

<div>
          <a-button @click="showAddModal = true">添加用户</a-button>
          &nbsp;
          <a-upload
            @change="onUploadChange"
            action="http://localhost:3000/upload/file"
            :headers="headers"
          >
          <!-- :headers="headers" -->
            <a-button type="primary">上传 Excel 添加</a-button>
          </a-upload>
        </div>


  <a href="javascript:;" @click="onEdit(record)"><EditOutlined /></a>


const res = await usersign.editFestival(festival.value, editForm.current._id);

!!!!!!!点击修改请假审批时出现了问题,待解决。

2022/2/10

毕设的事情只能先暂时延迟了,现在就是先把公司要求的写完。

v-hasPermi=“[‘system:config:add’]”

https://blog.csdn.net/jakemanse/article/details/107349077?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=1

 <el-form-item label="同步频率" prop="userInterest">
        <el-col :span="6">
         <el-input v-model="form.userName" placeholder="请输入同步频率" style="width:300px">
             <i slot="suffix" style="font-style:normal;margin-right: 10px;">分钟</i>
        </el-input>
          </el-col>
        </el-form-item>

2022/2/11

前端实现搜索功能。

var a= 1//要搜索的对象属性值

var li=[{cc:“33”,d:1},{cc:“22”,d:1}] //被搜索的对象

搜索目标:
function filterb(ab){
return ab.d==a}

最后:li.filter(filterb)

结果:0: {cc: “33”, d: 1}
1: {cc: “22”, d: 1}

如果有多个搜索对象属性值,那就用for循环吧。试一下。

前端实现多组数据的搜索功能。

var ly = [ 1 , 2, 3] //要搜索的对象属性值的集合

var lff = [{cc:"25",d:1},{cc:"18",d:3},{cc:"89",d:2},{cc:"77",d:45}]// 被搜索的对象

var pf = [] //存储结果的数组

for ( i = 0 ; i<ly.length;i++){
    function filterd(ab){
        return ab.d ==ly[i] }
    pf.push(lff.filter(filterd))   //这样是错的,会变成二维数组
}

//pf就是我们想要的结果。
(3) [Array(1), Array(1), Array(1)]

pf[0] ----cc: "25" d: 1

自定义列内容:

<el-table-column label="服务器时钟值" align="center" prop="loginTime" width="180">
          <template slot-scope="scope">
            <span>{{ parseTime(scope.row.loginTime) }}</span>
          </template>
        </el-table-column>

element-ui动态更改el-table某个单元格字体颜色:https://blog.csdn.net/agua001/article/details/107960393

输入框输入空格,逗号字符串,分隔成数组,用正则表达式: / *[,, ] */
reg = / *[,, ] */

删除空对象:

pf.filter(value => Object.keys(value).length !== 0)
var newArray = pf.filter(value => Object.keys(value).length !== 0);
/ *[,, ] */

测试:

"12 , 23".split(reg)
---------(2) ["12", "23"]
"12 23".split(reg)
------------(2) ["12", "23"]
"12,23".split(reg)
---------(2) ["12", "23"]

上面这样做其实是错误的。因为会变成二维数组。但是我们要的是一维的数组对象。
真正写法是这样:(不对,因为 list = list.filter(filtercode) ,第一次过滤是第一种结果,第二次过滤按第一次结果
过滤根本就拿不到东西,每一次过滤都应该按照原先的list的值)

 handleQuery() {
      console.log(this.list[0].code);
      console.log(this.list);
      this.pageNum = 1;
      var list = this.list;
      this.codestrlist=this.codestr.split(this.reg);
      var codestrlist = this.codestrlist;
      var codelist = this.codelist;

      for ( var i = 0 ; i<codestrlist.length;i++){
         function filtercode(list){
            return list.code == codestrlist[i] }
             list = list.filter(filtercode)  //新的过滤数组
       }
      
       this.list = JSON.parse(JSON.stringify(list));
       console.log(this.list);
     
    },

vue2的data所有数据都是观察者数据,都是有observer的。

真实的搜索功能的写法:(这次是真的测试对了),不用push,而是用concat方法,这样的话
就不会升成二维了。

 handleQuery() {
      
      this.pageNum = 1;
      var list = JSON.parse(JSON.stringify(this.list));
      this.codestrlist=this.codestr.split(this.reg);
      var codestrlist=JSON.parse(JSON.stringify(this.codestrlist));
      var length = list.length;
      var corlist = [];//用来存储符合条件的数组。
      console.log(length);
      for ( var i = 0 ; i<codestrlist.length;i++){
         function filtercode(list){
            return list.code == codestrlist[i] }
             corlist = corlist.concat(list.filter(filtercode)); //改了这个
             console.log(corlist);
       }
      
       this.list = corlist;

正则表达式校验位置

import { isNumber, isEng, isChin, validURL } from "@/utils/validate.js";

我在这个文件里加了

export function isIp(arg) {
  const reg = /^((25[0-5]|2[0-4]\d|[01]?\d\d?)($|(?!\.$)\.)){4}$/;
  return reg.test(arg);
}

用于检验ip地址

发现如果不是属于模板的变量,另外找个地方写会比较好哦,然后再导入就行了。就像正则表达式校验一样

vue element 表单校验 学习案例:
https://blog.csdn.net/weixin_43638968/article/details/108870205
自定义也是有分某个情况下的自定义的。

关于正则表达式:reg.test比str.match好用。

常见的表单校验大全:

/**
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path);
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validUsername(str) {
  const valid_map = ["admin", "editor"];
  return valid_map.indexOf(str.trim()) >= 0;
}

/**
 * @param {string} url
 * @returns {Boolean}
 */
export function validURL(url) {
  const reg =
    /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/;
  return reg.test(url);
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validLowerCase(str) {
  const reg = /^[a-z]+$/;
  return reg.test(str);
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validUpperCase(str) {
  const reg = /^[A-Z]+$/;
  return reg.test(str);
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validAlphabets(str) {
  const reg = /^[A-Za-z]+$/;
  return reg.test(str);
}

/**
 * @param {string} email
 * @returns {Boolean}
 */
export function validEmail(email) {
  const reg =
    /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
  return reg.test(email);
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function isString(str) {
  if (typeof str === "string" || str instanceof String) {
    return true;
  }
  return false;
}

/**
 * @param {Array} arg
 * @returns {Boolean}
 */
export function isArray(arg) {
  if (typeof Array.isArray === "undefined") {
    return Object.prototype.toString.call(arg) === "[object Array]";
  }
  return Array.isArray(arg);
}

//正整数
export function isNumber(arg) {
  const reg = /^[0-9]*$/;
  return reg.test(arg);
}
//纯英文
export function isEng(arg) {
  const reg = /^[a-zA-Z]+$/;
  return reg.test(arg);
}

今天又多学了一下知道怎么跟后端合作了。
在vue.config.js把代理ip改成后端给我的ip就行。
也就是说,让后端启用他们的服务器,然后把ip给我,我把代理ip改成他们给我的ip就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值