当前位置: 首页 > news >正文

北京公司做网站公众号管理平台

北京公司做网站,公众号管理平台,wordpress更换后台登录界面logo,动画设计与制作主要学什么文章目录 注册局部注册全局注册 钩子钩子参数应用1、按钮权限验证2、自定义用户行为收集指令3、按钮点击防抖4、输入框自动获取焦点5、输入框自动去空字符串6、文字展示不下时展示提示框 注册 局部注册 export default {setup() {/*...*/},directives: {// 在模板中启用 v-fo… 文章目录 注册局部注册全局注册 钩子钩子参数应用1、按钮权限验证2、自定义用户行为收集指令3、按钮点击防抖4、输入框自动获取焦点5、输入框自动去空字符串6、文字展示不下时展示提示框 注册 局部注册 export default {setup() {/*...*/},directives: {// 在模板中启用 v-focusfocus: {/* ... */}} }全局注册 const app createApp({})// 使 v-focus 在所有组件中都可用 app.directive(focus, {/* ... */ })钩子 const myDirective {// 在绑定元素的 attribute 前// 或事件监听器应用前调用created(el, binding, vnode) {// 下面会介绍各个参数的细节},// 在元素被插入到 DOM 前调用beforeMount(el, binding, vnode) {},// 在绑定元素的父组件// 及他自己的所有子节点都挂载完成后调用mounted(el, binding, vnode) {},// 绑定元素的父组件更新前调用beforeUpdate(el, binding, vnode, prevVnode) {},// 在绑定元素的父组件// 及他自己的所有子节点都更新后调用updated(el, binding, vnode, prevVnode) {},// 绑定元素的父组件卸载前调用beforeUnmount(el, binding, vnode) {},// 绑定元素的父组件卸载后调用unmounted(el, binding, vnode) {} }钩子参数 指令的钩子会传递以下几种参数 el指令绑定到的元素。这可以用于直接操作 DOM。binding一个对象包含以下属性。 value传递给指令的值。例如在 v-my-directive“1 1” 中值是 2。oldValue之前的值仅在 beforeUpdate 和 updated 中可用。无论值是否更改它都可用。arg传递给指令的参数 (如果有的话)。例如在 v-my-directive:foo 中参数是 “foo”。modifiers一个包含修饰符的对象 (如果有的话)。例如在 v-my-directive.foo.bar 中修饰符对象是 { foo: true, bar: true }。instance使用该指令的组件实例。dir指令的定义对象。 vnode代表绑定元素的底层 VNode。prevVnode代表之前的渲染中指令所绑定元素的 VNode。仅在 beforeUpdate 和 updated 钩子中可用。 应用 1、按钮权限验证 功能描述 项目根据登录用户所配置的角色权限对按钮进行权限控制拥有权限的按钮才能够触发点击事件没有权限的按钮触发时进行提示。 /*** # 验证用户权限, 并进行提示** example* vue* el-button* v-auth{* code: AuthCode.UPLOAD_FILE,* name: AuthName.UPLOAD_FILE,* event: handleUploadConfirm,* projectId* }* * 确认上传* /el-button* ** param code 权限 code* param name 权限对应中文名* param event 权限验证通过后要执行的函数* param projectId? 可选, 项目 id* param type 两种验证模式 project | role 如果是 role, 则通过默认角色权限进行判断, 如果是 project, 则通过项目权限进行判断*/ export default Directive{mounted(el: HTMLElement, bindings) {if (!bindings.value) {throw new Error(value 不能为空)}if (typeof bindings.value ! object) {throw new Error(value 必须为对象)}const {code,name,event,type,projectId,bindEvent click} bindings.valueel.addEventListener(bindEvent, () {if (!checkAuth(code, name, projectId, type)) {return}if (typeof event function) {event()}})} }/*** param code 权限 code* param name 权限名称* param projectId 项目 id* param type 两种验证模式 project | role 如果是 role, 则通过默认角色权限进行判断, 如果是 project, 则通过项目权限进行判断* returns*/ function checkAuth(code?: string,name?: string,projectId?: string,type project ) {if (!code) {throw new Error(权限名称不能为空)}const userStore useUserStore()let auth falseif (type project projectId) {auth checkProject(code, projectId)} else if (type role) {auth checkRole(code)}if (!auth) {// 用户没有该权限ElMessage.warning(您没有 ${name} 权限无法执行该操作)return false}return true }function checkProject(code: string, projectId: string) {... }function checkRole(code: string) {... }2、自定义用户行为收集指令 功能描述需要对项目中用户的行为进行收集以备后续的日志记录查询或者用户行为分析。 比如记录哪个用户在什么时间在哪个页面触发了什么功能。支持按钮按钮行为收集、非按钮点击行为收集。 /*** example* el-link* typeprimary* v-collect* clickgetRoleAuthList(row)* * 查看* /el-link* * el-button* sizelarge* typeprimary* v-collect* clickhandleClickMove* * 新增项目* /el-button* * 自定义用户行为收集指令*/ export default Directive{mounted(el: HTMLElement, bindings) {// 可以根据当前路由转换得到中文的页面const pathname window.location.pathnameconst userInfo getUserInfo()el.addEventListener(mousedown, e {e.stopPropagation()const collect getCollect()const path: string bindings.value || (el.textContent as string)let name (path?.trim())?.trim() || if (name.startsWith(/)) {name name.slice(1)}collect.push({userId: userInfo.id,operateTime: getTime(),page: pathname,operateName: name})setCollect(collect)})} }const collectKey USER_SELECT function getCollect(): Collect[] {const collect window.localStorage.getItem(collectKey) || []return JSON.parse(collect) }function setCollect(collect: Collect[]) {window.localStorage.setItem(collectKey, JSON.stringify(collect)) } 3、按钮点击防抖 功能描述点击按钮进行操作时防止用户短时间点击多次触发多次事件为按钮点击事件添加防抖功能默认 1 秒以内重复点击无效。实现方案是点击按钮触发一次事件给按钮设置 disabaled 属性为 true1 秒后删除该限制。 /*** example* el-button v-clicked:500/el-button* * param delay number类型, 设置禁止点击的时间间隔, 默认1000*/export default {mounted(el: HTMLElement | HTMLButtonElement, bindings: DirectiveBinding) {let timer: number | null nulllet delay 1000const oldEvents el.style.pointerEventsif (bindings.arg) {if (!/^\d$/.test(bindings.arg)) {throw new Error(参数必须是数字)}delay Number(bindings.arg)}el.addEventListener(click, setDisabled)function setDisabled() {el.setAttribute(disabled, true)// el.classList.add(is-disabled)if (el.tagName ! BUTTON) {el.style.pointerEvents none // 点击不到按钮穿透到下层元素}if (timer) {window.clearTimeout(timer)timer null}timer window.setTimeout(() {// el.classList.remove(is-disabled)el.removeAttribute(disabled)el.style.pointerEvents oldEvents}, delay)}} }4、输入框自动获取焦点 功能描述页面加载之后自动聚焦到某个输入框使输入框处于输入状态 /** * example * el-input v-focus/el-input */ export default {mounted(el: HTMLElement | HTMLInputElement) {let ipt: HTMLInputElement | nullif (el.nodeName INPUT) {ipt el as HTMLInputElement} else {ipt el.querySelector(.el-input__inner) as HTMLInputElement}ipt (ipt as HTMLInputElement).focus()} }5、输入框自动去空字符串 interface HTMLElementPlus extends HTMLElement {_handler: (e: KeyboardEvent) void_ele: HTMLElementPlus } export default {mounted(el: HTMLElementPlus) {let iptif (el.nodeName INPUT) {ipt el} else {ipt el.querySelector(.el-input__inner)}const handler (e: KeyboardEvent) {if (e.code Space) {e.preventDefault()}}el._ele ipt as HTMLElementPlusel._handler handler;(ipt as HTMLElementPlus).addEventListener(keydown, handler)},unmounted(el: HTMLElementPlus) {const { _ele } el_ele.removeEventListener(keydown, _ele._handler)} }6、文字展示不下时展示提示框 功能描述项目里经常有一些列表有展示性文字有的项文字展示的全有的项文字展示不全如果简单粗暴的添加提示文字会使得展示全的文字也有提示文字不太友好。通过该自定义指令只对展示不全的文字添加文字提示。 /*** 根据字符长度控制 el-tooltip 的显隐* 1.单行文本使用需在对应组件定义moveTodisabled* 例* const moveTodisabled ref({disablesd: true})* el-tooltip:contentitem.name:disabledmoveTodisableddiv v-tooltipmoveTodisabled{{ item.name }}/div/el-tooltip*//*** 2.列表使用, 参数: listindex(当前索引)例el-option v-for(item, index) in fileNameList :keyitem.id :labelitem.name :valueitem.nameel-tooltip:contentitem.name:disableditem.moveTodisableddiv v-tooltip:[index]fileNameList classcustom-dropdown-item{{ item.name }}/div/el-tooltip/el-option*/ interface Actual {width: numberelement: HTMLSpanElement } interface HTMLElementPlus extends HTMLElement {_handler: () void_handler2: () void_ele: HTMLElementPlus_ele_temp: HTMLSpanElement | null }function getActualWidth(text: string, fontSize: string): Actual {const span: HTMLSpanElement document.createElement(span)span.innerText textspan.style.cssText visibility:hidden;position:absolute;z-index:-1;top:0;font-size: fontSizedocument.body.appendChild(span)const rect span.getBoundingClientRect()// offsetWidth 是整数return { width: Math.round(rect.width), element: span } }function destoryEle(ele: HTMLSpanElement) {ele.parentNode?.removeChild(ele) }export default {mounted(el: HTMLElementPlus, binding: DirectiveBinding) {const handler () {const fontSize getComputedStyle(el, null).fontSizeconst { width, element }: Actual getActualWidth(el.innerText, fontSize)el._ele_temp element as HTMLSpanElementif (el.offsetWidth width) {if (!isNaN(index)) {binding.value[index].moveTodisabled false} else {binding.value.disabled false}} else {if (!isNaN(index)) {binding.value[index].moveTodisabled true} else {binding.value.disabled true}}}const handle2 () {destoryEle(el._ele_temp as HTMLSpanElement)el._ele_temp null}el._handler handlerel._handler2 handle2el._ele elel.addEventListener(mouseenter, handler)el.addEventListener(mouseout, handle2)},unmounted(el: HTMLElementPlus) {const { _ele } el_ele.removeEventListener(mouseenter, _ele._handler)_ele.removeEventListener(mouseout, _ele._handler2)} }
文章转载自:
http://www.morning.zgdnd.cn.gov.cn.zgdnd.cn
http://www.morning.xcjwm.cn.gov.cn.xcjwm.cn
http://www.morning.wptdg.cn.gov.cn.wptdg.cn
http://www.morning.zdsqb.cn.gov.cn.zdsqb.cn
http://www.morning.rbnj.cn.gov.cn.rbnj.cn
http://www.morning.pzpj.cn.gov.cn.pzpj.cn
http://www.morning.pqyms.cn.gov.cn.pqyms.cn
http://www.morning.bntgy.cn.gov.cn.bntgy.cn
http://www.morning.xbzfz.cn.gov.cn.xbzfz.cn
http://www.morning.tsyny.cn.gov.cn.tsyny.cn
http://www.morning.ymwrs.cn.gov.cn.ymwrs.cn
http://www.morning.cbpmq.cn.gov.cn.cbpmq.cn
http://www.morning.fflnw.cn.gov.cn.fflnw.cn
http://www.morning.ypklb.cn.gov.cn.ypklb.cn
http://www.morning.fnrkh.cn.gov.cn.fnrkh.cn
http://www.morning.ghxsn.cn.gov.cn.ghxsn.cn
http://www.morning.qyqmj.cn.gov.cn.qyqmj.cn
http://www.morning.nrpp.cn.gov.cn.nrpp.cn
http://www.morning.rqkk.cn.gov.cn.rqkk.cn
http://www.morning.rqwmt.cn.gov.cn.rqwmt.cn
http://www.morning.ydrml.cn.gov.cn.ydrml.cn
http://www.morning.tnzwm.cn.gov.cn.tnzwm.cn
http://www.morning.tlzbt.cn.gov.cn.tlzbt.cn
http://www.morning.qbfwb.cn.gov.cn.qbfwb.cn
http://www.morning.fgtls.cn.gov.cn.fgtls.cn
http://www.morning.cmcjp.cn.gov.cn.cmcjp.cn
http://www.morning.ygkk.cn.gov.cn.ygkk.cn
http://www.morning.rzczl.cn.gov.cn.rzczl.cn
http://www.morning.wnwjf.cn.gov.cn.wnwjf.cn
http://www.morning.jfjqs.cn.gov.cn.jfjqs.cn
http://www.morning.mprky.cn.gov.cn.mprky.cn
http://www.morning.wtwhj.cn.gov.cn.wtwhj.cn
http://www.morning.zthln.cn.gov.cn.zthln.cn
http://www.morning.trffl.cn.gov.cn.trffl.cn
http://www.morning.jcffp.cn.gov.cn.jcffp.cn
http://www.morning.drtgt.cn.gov.cn.drtgt.cn
http://www.morning.tkzqw.cn.gov.cn.tkzqw.cn
http://www.morning.knzmb.cn.gov.cn.knzmb.cn
http://www.morning.dpjtn.cn.gov.cn.dpjtn.cn
http://www.morning.dyght.cn.gov.cn.dyght.cn
http://www.morning.bbrf.cn.gov.cn.bbrf.cn
http://www.morning.lqjlg.cn.gov.cn.lqjlg.cn
http://www.morning.hngmg.cn.gov.cn.hngmg.cn
http://www.morning.lwrcg.cn.gov.cn.lwrcg.cn
http://www.morning.nbpqx.cn.gov.cn.nbpqx.cn
http://www.morning.qllcm.cn.gov.cn.qllcm.cn
http://www.morning.kwqqs.cn.gov.cn.kwqqs.cn
http://www.morning.nzfqw.cn.gov.cn.nzfqw.cn
http://www.morning.qlpyn.cn.gov.cn.qlpyn.cn
http://www.morning.fmkjx.cn.gov.cn.fmkjx.cn
http://www.morning.rynrn.cn.gov.cn.rynrn.cn
http://www.morning.yrrnx.cn.gov.cn.yrrnx.cn
http://www.morning.dwdjj.cn.gov.cn.dwdjj.cn
http://www.morning.dhbyj.cn.gov.cn.dhbyj.cn
http://www.morning.gslz.com.cn.gov.cn.gslz.com.cn
http://www.morning.mgwpy.cn.gov.cn.mgwpy.cn
http://www.morning.dqwkm.cn.gov.cn.dqwkm.cn
http://www.morning.qynpw.cn.gov.cn.qynpw.cn
http://www.morning.tldhq.cn.gov.cn.tldhq.cn
http://www.morning.pqqxc.cn.gov.cn.pqqxc.cn
http://www.morning.rongxiaoman.com.gov.cn.rongxiaoman.com
http://www.morning.rjhts.cn.gov.cn.rjhts.cn
http://www.morning.kphyl.cn.gov.cn.kphyl.cn
http://www.morning.xuejitest.com.gov.cn.xuejitest.com
http://www.morning.wffxr.cn.gov.cn.wffxr.cn
http://www.morning.wcghr.cn.gov.cn.wcghr.cn
http://www.morning.hgfxg.cn.gov.cn.hgfxg.cn
http://www.morning.ltdxq.cn.gov.cn.ltdxq.cn
http://www.morning.httzf.cn.gov.cn.httzf.cn
http://www.morning.qqhersx.com.gov.cn.qqhersx.com
http://www.morning.rhpgk.cn.gov.cn.rhpgk.cn
http://www.morning.zrgx.cn.gov.cn.zrgx.cn
http://www.morning.frpm.cn.gov.cn.frpm.cn
http://www.morning.mhmdx.cn.gov.cn.mhmdx.cn
http://www.morning.bxqtq.cn.gov.cn.bxqtq.cn
http://www.morning.pfkrw.cn.gov.cn.pfkrw.cn
http://www.morning.qsszq.cn.gov.cn.qsszq.cn
http://www.morning.wdply.cn.gov.cn.wdply.cn
http://www.morning.rhgtc.cn.gov.cn.rhgtc.cn
http://www.morning.rgpsq.cn.gov.cn.rgpsq.cn
http://www.tj-hxxt.cn/news/279374.html

相关文章:

  • 手机网站模板源码制作ppt的软件哪个好
  • 网站建设合同有法律效益吗制作企业网站的新闻显示
  • 云南住房与建设厅网站怎么在网站做自己的产品广告
  • 网站如何吸引蜘蛛网络专业的网站建设价格低
  • 苏州网站建设案例wordpress文章发布审核
  • 自己可以建个免费网站吗节点网站
  • 苏州个人网站建设可以做百度百科参考资料的网站
  • 怎样利用网站做推广的方法江苏强荣建设有限公司网站
  • Django可以做门户网站吗wordpress淘宝客模板下载
  • 做的网站访问速度慢众创空间文化建设网站
  • wordpress 批量建站wordpress手机发留言
  • 网站建设和维护方案宜昌网站设计制作公司
  • html网站架设wordpress设置置顶文章
  • 揭阳企业网站建设开发唐山网站关键词优化
  • 做网站的有哪些公司青岛网站建设网站设计
  • 五合一网站建设方案深圳网络安全公司
  • 致力于网站开发维护学什么专业如何免费创建网站
  • 重庆巴南网站建设美食网站模板下载
  • 网站字体使用专业企业网站设计网络公司
  • 租房网站购物网站建设思路
  • 专业做设计的网站网站怎样设计网址
  • 湖北省住房和城乡建设厅网站首页上海浦东医院网站建设
  • 外贸网站制作费用wordpress用哪个国外空间
  • 最好的产品网站建设wordpress产品页面模板下载
  • 博罗网站建设费用网站做那个效果好
  • 网站建设教程pdf下载在电脑上建设网站
  • 合肥建站免费模板有网站有安全狗进不去了
  • 做公司网站客户群体怎么找3d动画制作视频教程
  • wordpress邮件发送类西安seo主管
  • 门户网站做啥网站建设pc移动app