工作常见问题

C端

1.关于底部遮挡问题

请添加图片描述
底部按钮遮挡内容(苹果X)
在上边的区域加上 padding-bottom: calc(110rpx + env(safe-area-inset-bottom));

2.下拉刷新

参考页面

pages/coupon/center/index

pages/setGame/gameList

onPullDownRefresh:function(){this.couponActivityList = [];//下拉列表为空this.pageIndex = 1;//页面this.queryCouponActivity();//调用接口setTimeout(function() {

​            uni.stopPullDownRefresh();}, 1000);

  },

3.图片上传

3.1上传图片记得先下载图片 命名需要注意http://app.heading123.cn:10088/wiki/pages/viewpage.action?pageId=31557084

3.2

4.拉取tag

git checkout -b 自己的分支名 远程分支名

如果没有这个分支–自己要先到develop到git pull一下 然后再新建分支

B端

1.弹窗关闭清除校验

给弹框绑定close事件,表单里面绑定ref,事件里用一个清除校验

closedialog(){this.$refs['form'].resetFields()
}

在这里插入图片描述

2.获取表单的列的元素–进行排序

给table绑定事件---->@sort-change=“tableChange”

拿到里面的元素-----column中记得定义每一列的prop 根据prop拿值

tableChange(column, prop, order) {
 //排序
console.log(column,prop,order,'0000000');
      this.clickPraise=column.prop == "clickPraiseCount"&&column.order == "ascending"?"ASC":column.prop == "clickPraiseCount"&&column.order == "descending"?"DESC":""
      this.releaseTime=column.prop == "lastReleaseTime"&&column.order == "ascending"?"ASC":column.prop == "lastReleaseTime"&&column.order == "descending"?"DESC":""
     this.auditTime=(!column.prop)&&column.order == "ascending"?"ASC":(!column.prop)&&column.order == "descending"?"DESC":""
      this.getList();
    },

记得调用方法时将排序清空

3.传参注意

通过新建值传入不改变data里面的值
在这里插入图片描述

4.校验

4.1禁止输入emoji表情符

  const checkEmoji = (rule, value, cb) => {if (/(\ud83c[\udc00-\udfff])|(\ud83d[\udc00-\udfff])|(\ud83e[\udc00-\udfff])|[\u2100-\u32ff]|[\u0030-\u007f][\u20d0-\u20ff]|[\u0080-\u00ff]/.test(value)) {return cb(new Error('禁止输入emoji表情符'))}cb()}

5.转数组+加数据

//①格式是{“1”:“a”,"2":"b"}
const arr = Object.keys(this.types)for(let i = 0; i < arr.length; i++) {this.options.push({ label: this.types[arr[i]], value: arr[i] })}
//②转化成[{value:1,lable:'a'},{value:2,lable:"b"}]
//③往里面加数据利用push
this.options.push({label:'不限',value:'0'})

6.时间格式化

2021-11-18 11:11:11

handleTime(val){
  let date = new Date(val);
  let year = date.getFullYear();
  let month = date.getMonth();
  let day = date.getDate();
  let h = date.getHours();
  h = h > 9 ?  h:'0' + h ;
  let m = date.getMinutes();
  m = m > 9 ?  m:'0' + m ;
  let s = date.getSeconds();
  s = s > 9 ?  s:'0' + s ;
  let time = year + '-' + month + '-' + day + ' ' + h + ':' + m + ':' + s
  return time
},

7.过多少秒调用接口或者赋值

参考页面accounts/user/user-list—396行

利用箭头函数因为指向不一样

setTimeout(() =>{ 
//赋值
  this.disable=false
//调接口
this.getList()}, 10000);

8.rules规则传值

参考页面–>mall/park-pay-rules

多个输入框绑定一个规则,想判断当前判断的是哪一个输入框,可以传递一个参数区分

:rules="[{ required: false,validator: (rule,value,callback)=>{gradeDiscount(rule,value,callback,'0','price')}, trigger: ['change', 'blur']}]"

这里区分的是传递了一个price在这里插入图片描述

9.时间选择器动态选择一年

9.1安装dayjs (npm i dayjs)

9.2导入dayjs

import dayjs from "dayjs"

9.3 el-date-picker 中加上:picker-options=“pickerOption”

9.4data()里加

 pickerOption:{disabledDate: (time) => {if (this.handlePickerDate) {const maxDate = dayjs(this.handlePickerDate).add(1, 'year').valueOf()const minDate = dayjs(this.handlePickerDate).subtract(1, 'year').valueOf()return time.getTime() > maxDate || time.getTime() < minDate
​       }return false},onPick: (time2) => {if (time2.minDate && !time2.maxDate) {this.handlePickerDate = new Date(time2.minDate).getTime()}if (time2.maxDate) {this.handlePickerDate = null}}
   },

10.千位符方法

function getNumber(num) {if (typeof num !== 'string') {
​                num = num.toString()}const nums = num.split('.')const reverseNum = nums[0].split('').reverse()const numList = []let list = []
​            reverseNum.forEach((item, index) => {
​                list.push(item)if (list.length === 3 && reverseNum[index + 1]) {
​                    numList.push(item , ',')
​                    list = []} else {
​                    numList.push(item)}})const numStr = numList.reverse().join('')return nums.length === 2 ? numStr + '.' + nums[1] : numStr
​        }

B端公司常用

1.为了不调多余的接口–组织

参考页面mall/users-growgrass

1.1首先在methods:{}里面写一个调用组织的方法

methods:{
async treeQuery(params) {await api.treeQuery(params).then((res) => {let {status, message ,data} = res;if(status == '0000' ) {if(data) {this.codes = [JSON.parse(localStorage.getItem("currentOrg")).code];
​            data.orgs.forEach(item=> {this.codes.push(item.code);})}}else {this.$message.error(message);}})},
}

1.2在mounted()里面调用组织的接口

let {code,orgTypeCode} = JSON.parse(localStorage.getItem("currentOrg"));// 获取到代码集合let params = {
​      leafNodeType: "10003",
​      status: "1",
​      rootOrgCode: code
​    }await this.treeQuery(params);

1.3此时给调用组织的接口参数赋值

----》this.dataForm.orgCodes = this.codes; this.getlist()调用所需要的接口

2.默认近一个月的时间

参考页面:解绑车牌

2.1 首先调用element-ui组件

<el-date-picker
                  v-model="time"
                  type="datetimerange"
                  size="small"
                  align="right"
                  @change="changeDate"
                  value-format="yyyy-MM-dd HH:mm:ss"
                  start-placeholder="开始日期"
                  end-placeholder="结束日期"
                  :default-time="['00:00:00', '23:59:59']"
                >
  </el-date-picker>

2.2选取时间

  changePageAndSize(type, val) {if (type === "size") {this.dataForm.pageSize = val;this.dataForm.pageIndex = 1;this.$refs[`pageAndSize`].reset(1, val);} else {if (this.dataForm.pageIndex === val) {return;}this.dataForm.pageIndex = val;}// console.log( this.dataForm.pageSize,this.dataForm.pageIndex);this.loading = true;// 调接口this.getList();},changeDate(date) {if (date && date.length == 2) {const values = date;this.dataForm.beginTime = values[0];this.dataForm.endTime = values[1];} else {this.dataForm.beginTime = "";this.dataForm.endTime = "";}this.time = [this.dataForm.beginTime, this.dataForm.endTime];},

2.3获取默认时间

    // 获取默认时间setDefaultTime() {// 获取当前时间const date = new Date()const year = date.getFullYear()let month = date.getMonth() + 1;
​      month = month >= 10 ? month : '0' + month;let day = date.getDate();
​      day = day >=10 ? day : '0' + day;this.dataForm.endTime = year + '-' + month + '-' + day + ' 23:59:59';// 判断month是否需要减1// 1 如果是当月最后一天,month不减1 day为1// 2 如果不是当月最后一天 则month-1 day + 1if (day === new Date(year, month, 0).getDate()) {// 情况 1
​        day = 1} else {// 情况 2
​        month -= 1;// day += 1
​        day=Number(day)+1}if (typeof month === 'string') {
​        month = Number(month);}
​      month = month >= 10 ? month : '0' + month;
​      day = day >= 10 ? day : '0' + day;this.dataForm.beginTime = year + '-' + month + '-' + day + ' 00:00:00';this.time = [this.dataForm.beginTime, this.dataForm.endTime];},

//注意刚进页面调用

注意绑定值time: [],

2.防爆点击

v-debounce="handleCreateCard" 引号是方法名

3.返回页面想自动刷新

关闭路由缓存keepAlive="false"

4.防爆点击指令

// 全局自定义指令--防止按钮在短时间内被多次点击,使用防抖函数限制规定时间内只能点击一次。
//使用方法 给 Dom 加上v-debounce及回调函数即可
// 如:v-debounce="share",v-debounce="share",v-debounce="{func:tabbar_btn,data:'a'}"(单个参数),v-debounce="{func:tabbar_btn,data:['b',0,'9']}",携带多个参数
const debounce = {
  inserted: function (el, binding) {let timer
​    el.addEventListener('click', () => {if (timer) {clearTimeout(timer)}
​      timer = setTimeout(() => {if(binding.value.func){// 带参数
​          binding.value.func(...binding.value.data)}else{// 不带参数
​          binding.value()}}, binding.value.data ?binding.value.data:1000)})
  },
} 
export default debounce

工作中遇到的问题

1.watch值变化

watch:{
    'dataForm1.type'() {
      
    },//记得加逗号
} 

2.调详情中的所属组织

this.$refs.applicationRef.setOrgData(orgCode)

3.去掉el-inputtype='number'中的上下箭头

/deep/ input::-webkit-outer-spin-button,
/deep/ input::-webkit-inner-spin-button {
        -webkit-appearance: none;
    }
    input[type="number"]{
        -moz-appearance: textfield;
    }

4.C端自动换行

1.
text-overflow: ellipsis;
word-wrap: break-word;
2.
word-break: break-all;
text-align: left;
3. flex-wrap: wrap;
    justify-content: flex-start;

5.回到add之前

git reset --soft HEAD^

6.清除校验

this.$refs['newBasicRuleForm'].clearValidate('maxPoint')

7.重新校验

this.$refs['dataFormCommons'].validateField('twoValue')

8.绑定table的校验规则

设置el-form在el-form-item中绑定ref,当保存的时候校验

//ref ---> activityPoints
//查看状态-->validateState
const obj = this.$refs.activityPoints.find(item => item.validateState === 'error')
//如果查看有error那么就有对象返回,直接return
if (obj) return

9.绑定自定义校验规则,拿不到值

                          :rules="[{validator: (rule, value, callback) => validatePointCheckWay(rule,                                           item.activityPoints, callback),//拿不到值就把当前所拿到的值传进去
                                    trigger: ['change', 'blur','input'],
                                    requiredInfo: item.activityPrices, pointzero: false,}
                          ]"

10.保留两位小数的校验

包含0/(^([1-9]{1}\d{0,6})(\.\d{1,2})?$)|(^0[.][0-9][1-9]$)|(^0[.][1-9][0-9]?$)|(^0$\b)/ 
不包含0/(^([1-9]{1}\d{0,6})(\.\d{1,2})?$)|(^0[.][0-9][1-9]$)|(^0[.][1-9][0-9]?$)/

11.撤销代码

git revert --hard be8c6f6dd

12 .千分符


getNumber(num) {

   if (typeof num !== 'string') {

​    num = num.toString()

   }

   const nums = num.split('.')

   const reverseNum = nums[0].split('').reverse()

   const numList = []

   let list = []

   reverseNum.forEach((item, index) => {

​    list.push(item)if (list.length === 3 && reverseNum[index + 1]) {

​     numList.push(item, ',')

​     list = []} else {

​     numList.push(item)}

   })

   const numStr = numList.reverse().join('')

   return nums.length === 2 ? numStr + '.' + nums[1] : numStr

  }

13.watch监听对象

 watch:{

 form:{

  handler:function(val,olVal){let  Flag=falsefor ( let key in val.sellPaymentParams ) {if(val.sellPaymentParams[key].amount||val.sellPaymentParams[key].payCode){

​     Flag=true}

   }

   if(val&&olVal&&(val.customerName||val.telephone)){

​    Flag=true

   }

   this.flag=Flag

   console.log(this,this.flag,'jjjjj')

  },

  deep:true,

  immediate:true

  }

 },
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值