由于我的路由是自动加载的,所以菜单也是被vue文件或者文件夹控制,所以只要创建vue文件和文件夹就可以实现创建菜单。

第一步:修改自动加载路由vue-router

我之前的路由是文件夹下单个vue文件即是一级路由,而要变成二级路由就得要有两个vue文件以上,但是这样非常麻烦,还有就是一些页面不想在菜单中显示,但是又想使用,所以增加了一个hidde文件夹作为隐藏vue文件位置。

router/index.js

import Vue from 'vue'
import Router from 'vue-router'
import Layout from '@/components/Layout'
import Login from '@/components/login'
import Index from '@/components/home/index'
import Menus from '@/assets/menu.json' //获取菜单中文名称图标等信息
Vue.use(Router)let routers = require.context('@/components', true, /\.vue$/).keys();
var allname = []; //文件夹目录名称
var allRouters = []; //children嵌套路由数据
var autoLoadRoutes = []; //最终路由
var maxlen = 0;//解决导航重复点击报错
const originalPush = Router.prototype.push
Router.prototype.push = function push(location) {return originalPush.call(this, location).catch(err => err)
}//去除重复数组的对象
export function deteleObject(obj) {var uniques = [];var stringify = {};for (var i = 0; i < obj.length; i++) {var keys = Object.keys(obj[i]);keys.sort(function(a, b) {return (Number(a) - Number(b));});var str = '';for (var j = 0; j < keys.length; j++) {str += JSON.stringify(keys[j]);str += JSON.stringify(obj[i][keys[j]]);}if (!stringify.hasOwnProperty(str)) {uniques.push(obj[i]);stringify[str] = true;}}uniques = uniques;return uniques;
}//-------组合children路由-----------------------------------------------------routers.forEach(r => {var realr = r.replace(/^\.\//, '').replace(/\.\w+$/, '');var name = realr.split("/");var sname = name[0];var cname = name[1];if (name != "login" && name != "Layout") {//获取子文件夹内vue文件加入数组var objs = {path: '/' + name[1],name: name[1],component: require("@/components" + r.substr(1)).default,meta: {title: Menus.apmenu[cname],name: name[1],comp: require("@/components" + r.substr(1)).default //选项卡tab获取路由路径}};var key = name[0];//根据文件夹名称重新组成children嵌套内容if (Array.isArray(allRouters[key])) {allRouters[key].push(objs);} else {allRouters[key] = [objs];}if (key != "home") {allname.push({filename: key})}}
})var allnames = deteleObject(allname) //去掉重复名称//完成路由组合
for (var i = 0; i < allnames.length; i++) {var name = allnames[i].filename;if (name == "hidde") {autoLoadRoutes.push({path: "/" + name,name: name,hidden: true,leaf: true, //二级路由meta: {title: Menus.apmenu[name],icon: Menus.apicon[name],requiresAuth: true //路由拦截},component: Layout,children: allRouters[name]})} else {autoLoadRoutes.push({path: "/" + name,name: name,leaf: true, //二级路由meta: {title: Menus.apmenu[name],icon: Menus.apicon[name],requiresAuth: true //路由拦截},component: Layout,children: allRouters[name]})}
}//把autoLoadRoutes路由信息加入并注册路由
export default new Router({mode: 'hash',routes: [{path: '/',hidden: true, //不在导航显示component: Layout,redirect: '/index'},{path: '/login',name: 'Login',hidden: true,component: Login,meta: {title: '登录页',name: 'Login',comp: Login}},{//一级菜单path: '/home',component: Layout,name: 'home',redirect: '/index',meta: {},children: [{path: '/index',name: 'index',component: Index,meta: {title: "首页",name: 'index',comp: Index, //tab获取路由地址icon: "el-icon-s-platform",requiresAuth: true //登录拦截}}]},...autoLoadRoutes]
})// export default router //注册路由// console.log(router) //打印路由

以上为路由代码,如果想像首页那样单页面显示菜单,需要自己手动添加进去。

第二部:thinkphp服务端添加控制器

在G:\phpstudy_pro\WWW\Application\Home\Controller\下添加文件:MenuController.class.php

代码:

<?php
namespace Home\Controller;
use Think\Controller;
class MenuController extends Controller {//创建子菜单public function addmenus(){// echo json_encode($_POST);$name =$_POST['name'];$cname =$_POST['cname'];$file =$_POST['url'];if(file_exists($file)){echo "101";//文件已存在}else{$json_string = file_get_contents("G:/electruon/Viapp/src/renderer/assets/menu.json");// 从文件中读取数据到PHP变量$data = json_decode($json_string,true);// 把JSON字符串转成PHP数组$data["apmenu"][$name] = $cname;// echo json_encode($data,JSON_UNESCAPED_UNICODE);$json_strings = json_encode($data,JSON_UNESCAPED_UNICODE);//JSON_UNESCAPED_UNICODE中文编码file_put_contents("G:/electruon/Viapp/src/renderer/assets/menu.json",$json_strings);//写入$myfile = fopen($_POST['url'], "w");//创建文件fwrite($myfile,"<template> \r\n </template> \r\n");fwrite($myfile,"<script> \r\n </script> \r\n");fwrite($myfile,"<style> \r\n </style> \r\n");$myfiler = fopen($_POST['url'], "r");//打开文件while(!feof($myfiler)){echo fgets($myfiler);}}}//创建一级菜单public function addmenu(){// echo json_encode($_POST);// cname文件夹中文名字// cnames文件中文名字// icon图标// name文件夹名称// names文件名称$cname =$_POST['cname'];$cnames =$_POST['cnames'];$icon =$_POST['icon'];$name =$_POST['name'];$names =$_POST['names'];$fileurl = "G:/electruon/Viapp/src/renderer/components/";$file = $fileurl.$name;$files = $fileurl.$name."/".$names.".vue";if(is_dir($file)){echo "101";//文件已存在}else{echo "103";$json_string = file_get_contents("G:/electruon/Viapp/src/renderer/assets/menu.json");// 从文件中读取数据到PHP变量$data = json_decode($json_string,true);// 把JSON字符串转成PHP数组$data["apmenu"][$name] = $cname;$data["apmenu"][$names] = $cnames;$data["apicon"][$name] = $icon;$json_strings = json_encode($data,JSON_UNESCAPED_UNICODE);//JSON_UNESCAPED_UNICODE中文编码// echo $json_strings;file_put_contents("G:/electruon/Viapp/src/renderer/assets/menu.json",$json_strings);//写入mkdir($file,0777);$myfile = fopen($files, "w");//创建文件fwrite($myfile,"<template> \r\n </template> \r\n");fwrite($myfile,"<script> \r\n </script> \r\n");fwrite($myfile,"<style> \r\n </style> \r\n");$myfiler = fopen($files, "r");//打开文件while(!feof($myfiler)){echo fgets($myfiler);}}}}

以上代码是php处理代码,分别是创建文件夹和创建vue文件

第三步:制作菜单管理页面

在menu.vue文件中加入:

<template><div><!-- 表头 --><div style="color: #606266;margin-bottom: 10px;"><span style="border:4px solid #5D78FF;border-radius:60px;vertical-align: middle;"></span><span style="font-size: 22px;margin-left: 10px;vertical-align: middle;font-weight: lighter;">菜单管理</span><spanstyle="font-size: 14px;margin-left: 10px;vertical-align: middle;font-weight: lighter;color: #909399;">**请确保当前系统是否空闲,菜单操作会导致所有应用刷新页面,所有未保存数据都将会丢失**</span></div><div style="border-bottom:1px solid #DCDFE6;margin-bottom: 15px;"></div><!-- ******* --><div style="margin-bottom: 10px;"><el-button plain size="small" type="primary" @click="addmenus">新建一级菜单</el-button></div><div><el-table:data="tabledata.filter(item => item.path !== '/' && item.path !== '/home' && item.path !== '/hidde' && item.path !== '/login')"style="width: 100%;margin-bottom: 20px;" row-key="name" border default-expand-all:tree-props="{children: 'children'}" :row-class-name="rowClass"><el-table-column prop="name" label="Name" width="180px"></el-table-column><el-table-column prop="path" label="Path" width="180px" align="center"></el-table-column><el-table-column prop="meta.title" label="名称" width="120px" align="center"></el-table-column><el-table-column prop="component.__file" label="Url" align="center"></el-table-column><el-table-column label="操作" align="center" width="180px"><template slot-scope="scope"><el-button plain size="mini"v-if="scope.row.component.__file != 'src/renderer/components/Layout.vue'">编辑</el-button><el-button plain size="mini"v-if="scope.row.component.__file != 'src/renderer/components/Layout.vue'" type="danger"@click="handledel(scope.$index, scope.row)">删除</el-button><el-button plain size="mini"v-if="scope.row.component.__file == 'src/renderer/components/Layout.vue'" type="success"@click="handleadd(scope.$index, scope.row)">新增子菜单</el-button></template></el-table-column></el-table></div><!-- 创建一级菜单 --><el-dialog :visible.sync="newmenus" :append-to-body="true" :before-close="handleClose"><!-- 表头 --><div style="color: #606266;margin-bottom: 10px;"><span style="border:4px solid #5D78FF;border-radius:60px;vertical-align: middle;"></span><spanstyle="font-size: 22px;margin-left: 10px;vertical-align: middle;font-weight: lighter;">创建一级菜单</span></div><div style="border-bottom:1px solid #DCDFE6;margin-bottom: 15px;"></div><!-- ******* --><el-form ref="form" :model="menforms" label-width="100px"><el-form-item label="菜单名称: "><el-input v-model="menforms.mennames"></el-input></el-form-item><el-row><el-col :span="12"><el-form-item label="中文名称: "><el-input v-model="menforms.mencnames"></el-input></el-form-item></el-col></el-row><el-form-item label="图标: "><el-row><el-col :span="14"><el-input v-model="menforms.fileicon" :disabled="true"></el-input></el-col><el-col :span="4"><el-popover placement="left" width="600" trigger="click"><el-row><el-col v-for="(item,index) in cities" :key="index" :span="2" style="padding: 1px;"><el-button size="mini" circle :icon="item" @click="selectIcon(item)"></el-button></el-col></el-row><el-button style="margin-left: 5px;" size="mini" slot="reference" icon="el-icon-info"circle></el-button></el-popover></el-col></el-row></el-form-item><el-form-item label="子菜单名称: "><el-input v-model="menforms.filenames"></el-input></el-form-item><el-row><el-col :span="12"><el-form-item label="子中文名称: "><el-input v-model="menforms.filecnames"></el-input></el-form-item></el-col></el-row><el-form-item><el-button type="primary" style="width: 100%;" @click="addsetmenu">确定</el-button></el-form-item></el-form></el-dialog><!-- 创建子菜单 --><el-dialog :visible.sync="newmenu" :append-to-body="true" :before-close="handleClose"><!-- 表头 --><div style="color: #606266;margin-bottom: 10px;"><span style="border:4px solid #5D78FF;border-radius:60px;vertical-align: middle;"></span><spanstyle="font-size: 22px;margin-left: 10px;vertical-align: middle;font-weight: lighter;">创建子菜单</span></div><div style="border-bottom:1px solid #DCDFE6;margin-bottom: 15px;"></div><!-- ******* --><el-form ref="form" :model="menform" label-width="80px"><el-form-item label="菜单名称: "><el-input v-model="menform.menname"></el-input></el-form-item><el-form-item label="中文名称: "><el-input v-model="menform.mencname"></el-input></el-form-item><el-form-item label="应用信息: "><span style="color: #909399;">{{menall}}</span></el-form-item><el-form-item><el-button type="primary" style="width: 100%;" @click="onaddmenu">确定</el-button></el-form-item></el-form></el-dialog><!-- 删除 --><el-dialog title="警告!" :visible.sync="delmenu" width="30%" :append-to-body="true"><div style="color: #DD004E;"><h2>删除容易,制作难</h2><h2>你确定要删除 <span style="font-size: 18px;color: #546CE6;">{{delname}}</span> 这个菜单吗?</h2></div><span slot="footer" class="dialog-footer"><el-button @click="delmenu = false">取 消</el-button><el-button type="primary" @click="delmenukey">确 定</el-button></span></el-dialog></div>
</template>
<script>import set from '../../../../set.json'export default {data() {return {tabledata: [],newmenu: false, //子菜单newmenus: false, //一级菜单delmenu: false, //删除menform: { //子菜单表单menname: '',mencname: ''},menforms: { //一级菜单表单filenames: '',filecnames: '',mennames: '',mencnames: '',fileicon: ''},menall: '',delname: '',delkey: 0,cities: ["el-icon-platform-eleme","el-icon-eleme","el-icon-delete-solid","el-icon-delete","el-icon-s-tools","el-icon-setting","el-icon-user-solid","el-icon-user","el-icon-phone","el-icon-phone-outline","el-icon-more","el-icon-more-outline","el-icon-star-on","el-icon-star-off","el-icon-s-goods","el-icon-goods","el-icon-warning","el-icon-warning-outline","el-icon-question","el-icon-info","el-icon-remove","el-icon-circle-plus","el-icon-success","el-icon-error","el-icon-zoom-in","el-icon-zoom-out","el-icon-remove-outline","el-icon-circle-plus-outline","el-icon-circle-check","el-icon-circle-close","el-icon-s-help","el-icon-help","el-icon-minus","el-icon-plus","el-icon-check","el-icon-close","el-icon-picture","el-icon-picture-outline","el-icon-picture-outline-round","el-icon-upload","el-icon-upload2","el-icon-download","el-icon-camera-solid","el-icon-camera","el-icon-video-camera-solid","el-icon-video-camera","el-icon-message-solid","el-icon-bell","el-icon-s-cooperation","el-icon-s-order","el-icon-s-platform","el-icon-s-fold","el-icon-s-unfold","el-icon-s-operation","el-icon-s-promotion","el-icon-s-home","el-icon-s-release","el-icon-s-ticket","el-icon-s-management","el-icon-s-open","el-icon-s-shop","el-icon-s-marketing","el-icon-s-flag","el-icon-s-comment","el-icon-s-finance","el-icon-s-claim","el-icon-s-custom","el-icon-s-opportunity","el-icon-s-data","el-icon-s-check","el-icon-s-grid","el-icon-menu","el-icon-share","el-icon-d-caret","el-icon-caret-left","el-icon-caret-right","el-icon-caret-bottom","el-icon-caret-top","el-icon-bottom-left","el-icon-bottom-right","el-icon-back","el-icon-right","el-icon-bottom","el-icon-top","el-icon-top-left","el-icon-top-right","el-icon-arrow-left","el-icon-arrow-right","el-icon-arrow-down","el-icon-arrow-up","el-icon-d-arrow-left","el-icon-d-arrow-right","el-icon-video-pause","el-icon-video-play","el-icon-refresh","el-icon-refresh-right","el-icon-refresh-left","el-icon-finished","el-icon-sort","el-icon-sort-up","el-icon-sort-down","el-icon-rank","el-icon-loading","el-icon-view","el-icon-c-scale-to-original","el-icon-date","el-icon-edit","el-icon-edit-outline","el-icon-folder","el-icon-folder-opened","el-icon-folder-add","el-icon-folder-remove","el-icon-folder-delete","el-icon-folder-checked","el-icon-tickets","el-icon-document-remove","el-icon-document-delete","el-icon-document-copy","el-icon-document-checked","el-icon-document","el-icon-document-add","el-icon-printer","el-icon-paperclip","el-icon-takeaway-box","el-icon-search","el-icon-monitor","el-icon-attract","el-icon-mobile","el-icon-scissors","el-icon-umbrella","el-icon-headset","el-icon-brush","el-icon-mouse","el-icon-coordinate","el-icon-magic-stick","el-icon-reading","el-icon-data-line","el-icon-data-board","el-icon-pie-chart","el-icon-data-analysis","el-icon-collection-tag","el-icon-film","el-icon-suitcase","el-icon-suitcase-1","el-icon-receiving","el-icon-collection","el-icon-files","el-icon-notebook-1","el-icon-notebook-2","el-icon-toilet-paper","el-icon-office-building","el-icon-school","el-icon-table-lamp","el-icon-house","el-icon-no-smoking","el-icon-smoking","el-icon-shopping-cart-full","el-icon-shopping-cart-1","el-icon-shopping-cart-2","el-icon-shopping-bag-1","el-icon-shopping-bag-2","el-icon-sold-out","el-icon-sell","el-icon-present","el-icon-box","el-icon-bank-card","el-icon-money","el-icon-coin","el-icon-wallet","el-icon-discount","el-icon-price-tag","el-icon-news","el-icon-guide","el-icon-male","el-icon-female","el-icon-thumb","el-icon-cpu","el-icon-link","el-icon-connection","el-icon-open","el-icon-turn-off","el-icon-set-up","el-icon-chat-round","el-icon-chat-line-round","el-icon-chat-square","el-icon-chat-dot-round","el-icon-chat-dot-square","el-icon-chat-line-square","el-icon-message","el-icon-postcard","el-icon-position","el-icon-turn-off-microphone","el-icon-microphone","el-icon-close-notification","el-icon-bangzhu","el-icon-time","el-icon-odometer","el-icon-crop","el-icon-aim","el-icon-switch-button","el-icon-full-screen","el-icon-copy-document","el-icon-mic","el-icon-stopwatch","el-icon-medal-1","el-icon-medal","el-icon-trophy","el-icon-trophy-1","el-icon-first-aid-kit","el-icon-discover","el-icon-place","el-icon-location","el-icon-location-outline","el-icon-location-information","el-icon-add-location","el-icon-delete-location","el-icon-map-location","el-icon-alarm-clock","el-icon-timer","el-icon-watch-1","el-icon-watch","el-icon-lock","el-icon-unlock","el-icon-key","el-icon-service","el-icon-mobile-phone","el-icon-bicycle","el-icon-truck","el-icon-ship","el-icon-basketball","el-icon-football","el-icon-soccer","el-icon-baseball","el-icon-wind-power","el-icon-light-rain","el-icon-lightning","el-icon-heavy-rain","el-icon-sunrise","el-icon-sunrise-1","el-icon-sunset","el-icon-sunny","el-icon-cloudy","el-icon-partly-cloudy","el-icon-cloudy-and-sunny","el-icon-moon","el-icon-moon-night","el-icon-dish","el-icon-dish-1","el-icon-food","el-icon-chicken","el-icon-fork-spoon","el-icon-knife-fork","el-icon-burger","el-icon-tableware","el-icon-sugar","el-icon-dessert","el-icon-ice-cream","el-icon-hot-water","el-icon-water-cup","el-icon-coffee-cup","el-icon-cold-drink","el-icon-goblet","el-icon-goblet-full","el-icon-goblet-square","el-icon-goblet-square-full","el-icon-refrigerator","el-icon-grape","el-icon-watermelon","el-icon-cherry","el-icon-apple","el-icon-pear","el-icon-orange","el-icon-coffee","el-icon-ice-tea","el-icon-ice-drink","el-icon-milk-tea","el-icon-potato-strips","el-icon-lollipop","el-icon-ice-cream-square","el-icon-ice-cream-round"]}},methods: {//获取菜单列表menuslist() {this.tabledata = this.$router.options.routes},//表格增加子菜单按钮handleadd(index, row) {this.newmenu = true;this.menall = set.url + "src/renderer/components" + row.path + "/"},//表格删除按钮handledel(index, row) {this.delmenu = true;this.delname = row.name;this.menall = set.url + "src/renderer/components" + row.path + "/"},//删除提交delmenukey() {this.delkey = this.delkey + 1;if (this.delkey == 3) {this.delkey = 0;this.$message.warning({message: '哈哈!你被骗了宝贝,这里并不能删除!'})}},//窗口防止错点提示handleClose(done) {this.$confirm('确认关闭?').then(_ => {done();}).catch(_ => {});},rowClass({row,rowIndex}) {var opop = row.component.__fileif (opop === "src/renderer/components/Layout.vue") {return 'warning-row';}return '';},//创建子菜单提交onaddmenu() {let menunameData = new FormData();menunameData.append('name', this.menform.menname);menunameData.append('cname', this.menform.mencname);menunameData.append('url', this.menall + this.menform.menname + ".vue");this.$http.post('http://127.0.0.1:8090/index.php/Home/Menu/addmenus', menunameData).then(res => {console.log(res.data);if (res.data == "101") {this.$message.warning({message: '文件已存在'})} else {this.$message.warning({message: '创建成功'})}})},//创建一级菜单addmenus() {this.newmenus = true;},//获取图标selectIcon(city) {this.menforms.fileicon = city},//增加一级菜单提交addsetmenu(){if(this.menforms.mennames == "" || this.menforms.mencnames == "" || this.menforms.fileicon =="" || this.menforms.filenames == "" || this.menforms.filecnames == ""){this.$message.warning({message: '请填写完整信息'})}else{let menuData = new FormData();menuData.append('name', this.menforms.mennames);menuData.append('cname', this.menforms.mencnames);menuData.append('icon', this.menforms.fileicon);menuData.append('names', this.menforms.filenames);menuData.append('cnames', this.menforms.filecnames);this.$http.post('http://127.0.0.1:8090/index.php/Home/Menu/addmenu', menuData).then(res => {// console.log(res.data);if (res.data == "101") {this.$message.warning({message: '文件已存在'})} else {this.$message.warning({message: '创建成功'})}})}}},created() {// console.log(this.$router.options.routes)this.menuslist()}}
</script>
<style>.conls {text-align: center;}.el-table .warning-row {background: #f5f7fa;color: #000000;}.el-table__placeholder::before {background: url('../../../../static/images/file.png') no-repeat 0 3px;content: '';display: block;width: 16px;height: 18px;font-size: 16px;background-size: 16px;}
</style>

时间有限所以对话框和图标那部分没有封装,自己封装。

最终效果:

添加完成后需要在权限中开启权限,然后重新登录方可生效。

因为我之前开启过set的权限所以可以直接显示出来。

Electron-vue第五章:新增一级菜单和子菜单相关推荐

  1. Electron中实现菜单、子菜单、以及自带操作事件

    场景 用HTML和CSS和JS构建跨平台桌面应用程序的开源库Electron的介绍以及搭建HelloWorld: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/a ...

  2. 从“心”认识Vue(五):父组件与子组件

    从"心"认识Vue(五):父组件与子组件 前言 一.父组件与子组件的关系 二.注册组件语法糖 三.模板与组件的分离写法 四.组件可以访问vue实例数据吗? 五.为什么组件的data ...

  3. SWT 下菜单与子菜单添加的实现(详细图解)

    SWT 为Java程序的用户界面设计提供了极大的方便,许多新手在刚刚接触SWT时,不知从何下手,往往在实现最简单的功能时也会遇到许许多多的麻烦,比如常遇到的菜单以及子菜单的添加,下面我用一个例程演示一 ...

  4. HTML5制作二级菜单(主菜单的子菜单)

    HTML5制作二级菜单(主菜单的子菜单) 一.HTML文件代码 二. CSS文件代码 三.效果图 一.HTML文件代码 <!--submenu.html--> <!DOCTYPE h ...

  5. js动态加载div显示主菜单和子菜单+jquery获取动态id

    最近在做项目重构的主界面工作中,需要动态显示主菜单以及子菜单(各个界面的链接),查看原来老系统采用的是asp控件,但是重构的时候采用mvc框架,而且这些菜单并不是死的,而是通过其他界面来配置的,主菜单 ...

  6. Menu详解(二):利用XML生成菜单和子菜单

    前言:上篇,我们说了有关代码生成菜单和子菜单的方法,这里我们再讲讲有关利用XML生成菜单和子菜单的问题. 业精于勤,荒于嬉,行成于思,毁于随 (日拱一卒) 系列文章: 1.<Menu详解(一): ...

  7. 选项菜单_上下文菜单_子菜单_图标菜单_自定义菜单_联系人标记弹出菜单

    菜单控件<Menu > 选项菜单(Option Menu) 单击Menu实体按钮弹出,android中把它叫做option menu 上下文菜单(ContextMenu 是Menu的子接口 ...

  8. (SubMenu)选项菜单和子菜单应用

    菜单在桌面上应用广泛,几乎所有的桌面应用都有菜单.与桌面应用的菜单不同,Android应用中的菜单默认是看不见的,只有当用户按下手机上的"MENU"键时,系统才会显示该应用关联的菜 ...

  9. 选项菜单和子菜单(SubMenu)

    /*  * 选项菜单和子菜单(SubMenu)  * 添加菜单和子菜单的步骤如下:  * 1.重写Activity哦onCreateOptionsMenu(Menu menu)的方法,  *   在该 ...

  10. android之三大菜单(子菜单,选项菜单,上下文菜单)

    今天班级同学聚餐,真的是喝的有点多,本来计划今天要完成这篇博客.有点喝多了,写的不好请见谅.想仔细了解的话,看官网说的,是中文的. https://developer.android.com/guid ...

最新文章

  1. python下载文件暂停恢复_python下载文件记录黑名单的实现代码
  2. 嵌入式工程师必读100本专业书籍
  3. 【转摘】Word提升效率的快捷键
  4. 将数据导入到已存在的excel文件中
  5. 如何在优雅地Spring 中实现消息的发送和消费 1
  6. 最大化BEA WebLogic Cluster的性能、可用性和安全
  7. 【转】MyBatis缓存机制
  8. c#获取电脑硬件信息参数说明(CPU篇 Win32_Processor)
  9. 从写方案到见投资人,一步步教你如何拿投资
  10. allure-report详细使用教程
  11. 【neusoft】 Linux 的学习与使用
  12. 第七章第八章思维导图
  13. 前端批量生成二维码并打包下载
  14. com.google.zxing jar下载
  15. PANDA pipeline的安装与使用-安装(1)
  16. Simple Mover
  17. 2017年东南大学计算机博士申请经验分享
  18. 【英语-基础词根词缀】
  19. pdf如何编辑图片文字
  20. csdn 的10大美女!!!!!!!!!!!!

热门文章

  1. 实现给el-table表头加必填符号星号(红*)
  2. 嵌入式毕设分享 GSM手机短信收发系统(源码+论文)
  3. 《IDC PeerScape:中国农村数字金融实践与案例》研究报告发布
  4. 车载安卓系统如何刷linux,手把手教你如何在车载中控上安装软件
  5. Python语言系统学习18:作品——“养宠物的经历”
  6. mysql replicate-rewrite-db,mysql 主从复制 replicate-rewrite-db 无效
  7. 153亿美金“摇身一变”500亿美金?Mobileye做了哪些布局?
  8. #231 – 使用渐变色作为前景色(You Can Use a Brush for a Control’s Foreground)
  9. java url转urf8_怎么把图片路径64位编码的转化成正常的路径,不编码的
  10. 嵌入式linux系统蜂鸣器实验,「正点原子Linux连载」第四十六章Linux蜂鸣器实验