生活中，我们会遇到很多问题，如何处理这些问题能反映出一个人的水平，也决定着生活走向。今晚的夜读，我们和大家分享4种遇事时最重要的能力。自我更新的能力 一成不变，只会将自己困在原地；懂得自我更新，生活才会是丰盛灿烂的模样。 在遇到困难时，我们不能一味地用过去的经验来判断现在的事情，正确的做法应该是更新自己的观念，适时采取应变之策。 世界每分每秒都在变化，如果你的思维停滞不前，那么就是在退步。一个人只有像电脑更新系统一样，不断更新自己的思维方式，才能具备解决现实问题的能力和实力。稳住情绪的能力 每个人的生活中，都会遇到不如意的事，真正的困难其实不只有远方的高山，还有鞋子里的一粒沙。限制前进脚步的，往往是自己焦虑慌乱的情绪。 遇上麻烦，自乱阵脚，只会迷失航向，满盘皆输；唯有沉着冷静，凡事不慌，才能逐浪而行，挺立潮头。 遇事别着急，稳住自己，从容做事，不过分担心和恐惧，才能更好地掌控自己的生活，主导自己的人生。找准问题的能力 能否找准问题，是解决事情的关键。若无法探寻到问题的根源，则如同老驴推磨，只能原地打转。 有人说，发现问题和解决问题同样重要，把问题准确地找出来，可能就已经解决一半。 风不会凭地而起，雨不会凭空而落。清晰地找到问题所在，是破局的关键。揪出根结、对症下药，事情才可能迎刃而解。懂得变通的能力 有时候，一条路走到尽头看似无路可走，但其实只需拐个弯就能豁然开朗。要知道，很多选择其实没有对错之分，懂得变通也是一种前进。变通不是放弃，而是寻找更好地解决问题的办法。 有句话说“当你不再固执己见，多从不同角度思考问题，就会发现适时的变通可以让看似棘手的僵局迎刃而解”。 我们每个人都需要不断地根据形势，调整自己的节奏和行动。不墨守成规、不拘泥一格，放下执念、学会变通，才能不负过往、无畏向前。
vue路由跳转有四种方式router-linkthis.$router.push() (函数里面调用)this.$router.replace() (用法同push)this.$router.go(n)一、不带参1.1 router-link<router-link :to="{name:'home'}"> <router-link :to="{path:'/home'}"> //name,path都行, 建议用name // 注意：router-link中链接如果是'/'开始就是从根路由开始，如果开始不带'/'，则从当前路由开始。1.2 this.$router.push()this.$router.push('/home') this.$router.push({name:'home'}) this.$router.push({path:'/home'})1.3 this.$router.replace() (用法同push)二、带参2.1 router-link<router-link :to="{name:'home', params: {id:1}}"> // params传参数 (类似post) // 路由配置 path: "/home/:id" 或者 path: "/home:id" // 不配置path ,第一次可请求,刷新页面id会消失 // 配置path,刷新页面id会保留 // html 取参 $route.params.id // script 取参 this.$route.params.id <router-link :to="{name:'home', query: {id:1}}"> // query传参数 (类似get,url后面会显示参数) // 路由可不配置 // html 取参 $route.query.id // script 取参 this.$route.query.id2.2 this.$router.push(query传参this.$router.push({name:'home',query: {id:'1'}}) this.$router.push({path:'/home',query: {id:'1'}}) // html 取参 $route.query.id // script 取参 this.$route.query.id params传参 this.$router.push({name:'home',params: {id:'1'}}) // 只能用 name // 路由配置 path: "/home/:id" 或者 path: "/home:id" , // 不配置path ,第一次可请求,刷新页面id会消失 // 配置path,刷新页面id会保留 // html 取参 $route.params.id // script 取参 this.$route.params.id2.3 this.$router.replace() (用法同push)this.$router.go(n)向前或者向后跳转n个页面，n可为正整数或负整数区别：this.$router.push 跳转到指定url路径，并想history栈中添加一个记录，点击后退会返回到上一个页面this.$router.replace 跳转到指定url路径，但是history栈中不会有记录，点击返回会跳转到上上个页面 (就是直接替换了当前页面)this.$router.go(n) 向前或者向后跳转n个页面，n可为正整数或负整数
下载：https://gitee.com/kevin402502/layui-authtree演示：http://authtree.wj2015.com/教程：https://blog.csdn.net/weixin_37933545/article/details/101037358 《layui 扩展 authtree 无限级权限控制树》​为前端页面引入layui树形组件第一步：为权限树提供容器注意：id="LAY-auth-tree-index" 是整颗树的容器，需要包含在 form.layui-form > div.layui-form-item > div.layui-input-block 中，否则依照 layui 的规则无法渲染多选框添加代码： 选择权限 例子： 角色名称 选择权限 提交 重置 第二步：下载源码并引入插件如果使用 layuiadmin,则只需要将插件(extends/authtree.js)放到 controller/下,然后 layui.use 即可,或者可以放在 lib/extend 中,只不过需要改 config.js非 layuiadmin 初始化如下：layui.config({ base: 'extends/', }).extend({ authtree: 'authtree', });第三步：异步获取权限数据并渲染render 传递的第一个参数，即为树的目标容器，这也是以后操作这颗树的重要标志listConvert 是 authtree 提供的内置函数，可以将普通的列表数据转换为 权限树需要的数据结构，如有此需求请查看该函数对应文档layui.use(['authtree', 'form', 'layer'], function(){ var $ = layui.$; var authtree = layui.authtree; var form = layui.form; var layer = layui.layer; // 一般来说，权限数据是异步传递过来的 $.ajax({ url: 'tree.json', dataType: 'json', success: function(res){ let trees = authtree.listConvert(res.data.list, { primaryKey: 'id' ,startPid: 0 ,parentKey: 'pid' ,nameKey: 'name' ,valueKey: 'id' ,checkedKey: res.data.checkedId ,disabledKey: res.data.disabledId }); // 如果后台返回的不是树结构，请使用 authtree.listConvert 转换 authtree.render('#LAY-auth-tree-index', trees, { layfilter: 'lay-check-auth', autowidth: true, }); } //监听提交 form.on('submit(saveBtn)', function (data) { let field = data.field field['menu_id'] = authtree.getChecked('#LAY-auth-tree-index') $.post('save',field,res => { if (res.status == 0) return layer.msg(res.msg) }) return false; }); });php后台无限分类的三种方式来自--https://blog.csdn.net/u012442504/article/details/107924836/** * @Description: 无限极分类一 * @Author: Yang * @param $data 数据库数据 * @param int $parent_id 父级ID * @return array */ function getTree1($data, $parent_id = 0) { $tree = array(); foreach ($data as $k => $v) { if ($v["parent_id"] == $parent_id) { unset($data[$k]); if (!empty($data)) { $children = getTree1($data, $v["id"]); if (!empty($children)) { $v["_child"] = $children; } } $tree[] = $v; } } return $tree; } /** * @Description: 无限极分类二 * @Author: Yang * @param $data 数据库数据 * @param int $parent_id 父级ID * @param int $level 等级 * @return array */ function getTree2($data, $parent_id = 0, $level = 0) { static $tree = array(); foreach ($data as $k => $v) { if ($v["parent_id"] == $parent_id) { $v["level"] = $level; $tree[] = $v; getTree2($data, $v["id"], $level + 1); } } return $tree; } /** * @Description: 无限分类三：面包屑导航 * @Author: Yang * @param $data 数据库数据 * @param $id 分类ID * @return array */ function getCrumbsBar($data, $id) { static $tree = array(); foreach ($data as $k => $v) { if ($v["id"] == $id) { getCrumbsBar($data, $v["parent_id"]); $tree[] = $v; } } return $tree; }附件：https://blog.csdn.net/weixin_43345943/article/details/97485813 《layui后台管理系统 - 权限树表格》https://blog.csdn.net/weixin_37933545/article/details/101037358 《layui 扩展 authtree 无限级权限控制树》https://blog.csdn.net/u012442504/article/details/107924836 《php后台无限分类的三种方式》
HTML部分input类型设为file： 如果想上传多文件，可添加multiple 用accept="MIME_type"限制提交的文件类型，用逗号隔开的 MIME 类型列表（服务器端也要最好类型检测双保险），如： 获取文件内容JavaScript：var file = document.getElementById('fileToUpload').files[0];jQuery：var file = $("#img_input").prop("files")[0];实用案例：layui.use(['form'], function () { let form = layui.form, layer = layui.layer, $ = layui.$; //监听提交 form.on('submit(saveBtn)', function (data) { let field = data.field, form_data = new FormData(); for (let key in field) form_data.append(key, field[key]) form_data.append('video', $("#video_input").prop("files")[0]) $.ajax({ type: "POST", url: "save", dataType : "json", processData: false, // 注意：让jQuery不要处理数据 contentType: false, // 注意：让jQuery不要设置contentType data: form_data }).success(function(res) { if (res.status != 1) return layer.msg(res.msg) layer.msg(res.msg, () => { parent.layer.close(parent.layer.getFrameIndex(window.name)); }) }).fail(function(msg) { console.log(msg); }); return false; }); });参考文章：HTML5+Ajax上传文件《https://segmentfault.com/a/1190000004538728》html ajax 上传文件到服务器,Ajax文件异步上传，Html5实现 《https://blog.csdn.net/weixin_29698317/article/details/117876591》
大概是半个月前，我就有了改变本站想法了。WP搭建的站点，给我的体验始终不是那么友好，尤其是进入后台。遇到了现在使用的JOE主题,我再也忍不住要转移到Typecho了。跟随主题作者的开发与测试，主题日渐成熟，功能也算是免费开源中最强大的了。Typecho的特点是轻快，但后端的体验也不太好，于是我花了一些时间做了一款后端美化插件WangStyle，搭配JOE主题算是圆满了。下面就本次转移做一点小记录，成长是要留痕迹的，不然随着年龄的增长容易忘记。准备工作1、有了想转移的想法后，我搜遍全网，刚开始还花了50元买了一套前端主题ArmxMod，又花了35元买了一套后端美化插件Apex，给我的反馈是后悔了。2、遇见了JOE这款开源免费的主题，作者很勤奋，刚开始日更不少于五次，慢慢的主题成熟稳定了，我也就下定了决心。3、从WP转移到Typecho，万事俱备时，我差点放弃了。原因是我用的云主机的数据库不支持远程连接，在安装Typecho配置时通不过。无奈啊，我只能通过本地安装的方式完成，然后打包上传源码，导入数据库。幸运的是成功了，这算是投机取巧吧。整理过程1、以前也经常转来转去的，所以积累了一点经验，本次的整理还算顺利吧。2、从WP导入的数据库，文件上传的路径是不同的，所以需要手动执行一次如下代码，目的是让文章中的图片或文件能正常显示。UPDATE typecho_contents SET text = REPLACE(text,'WP上传路径','Typecho上传路径');3、对应WP程序的创建页面的新建页面，预防搜索引擎收录丢失，以前是什么地址现在就要什么地址，所以这里还要设置伪静态，配置固定链接。以Apache为例，我的伪静态配置文件的内容是： RewriteEngine on RewriteCond %{SERVER_PORT} !^443$ RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteBase / RewriteRule . /index.php [L] RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] Typecho的永久固定链接设置是勾选其他，采用/{cid}.html的方式。必须插件1、后端美化插件WangStyle，技术太渣了，是折腾了好几天才弄出来的。2、评论邮件通知插件LoveKKComment3、数据导入插件WordpressToTypecho其他事项1、友联暂时未整理完。2、文章内容的排版估计也是乱的。3、感谢JOE主题作者的无私奉献。
如果您看到这篇文章,表示您的 blog 已经安装成功.