位置: IT常识 - 正文

vue系列(三)——手把手教你搭建一个vue3管理后台基础模板(vue系列教程)

编辑:rootadmin
vue系列(三)——手把手教你搭建一个vue3管理后台基础模板

目录

一、前言:

二、网站页面分析

三、开发步骤

(一)、安装element

(二)、安装使用svg插件

(三)、编写主界面框架代码

 (四)、编写菜单栏

 (五)、新建页面及路由

(六)、定制页面标签栏

第一步:

第二步:

(七)、修改封装菜单栏

(八)、添加面包屑

四、结尾


一、前言:

推荐整理分享vue系列(三)——手把手教你搭建一个vue3管理后台基础模板(vue系列教程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue0,vue 3,vue...,vuejs,vue系列教程,vue系列教程,vuez,vuez,内容如对您有帮助,希望把文章链接给更多的朋友!

先上图,项目模板成品截图:

开源的vue管理后台模板很多,如需快速开发一个后台管理可搜索“vue管理后台模板”查找,本文旨在熟悉vue开发过程实践,适合vue刚入门的小伙伴阅读和动手实践,内容偏长,只想要代码的同学可直接点击 源代码。通过本章博客你可以学到:

(1)、element UI组件库的使用。

(2)、如何自定义组件。

(3)、路由的熟练使用。

(4)、vue项目开发思想的提升。

(5)、……

本项目在上一章节集成项目基础上开发,可先点击下方链接阅读。(如阅读本章无障碍请忽略)

vue系列(二)——vue3基础项目(集成框架)搭建_萧萧风的博客-CSDN博客目录一、新建项目二、集成路由三、安装配置axios(网络请求库)四、使用vuex(暂无)五、结尾打开编辑器新建项目,填写项目名称,点击创建,之后等待项目加载完成就可以了。我的Hbuilder X 版本是3.4.14新建的项目目录下面是vue项目加载页面的形式,单页渲染,所有的内容展示都是在index.html页面上进行渲染,而App.vue是index.html里面最外层的组件容器、包含全局的js代码css样式。所有的页面的渲染是在App.vue容器里面进行文件main.js:入口js文件,所有全局文件的引https://blog.csdn.net/xxfen_/article/details/125327388?spm=1001.2014.3001.5501

二、网站页面分析

网站由登录页、主界面、内容页组成。

主界面整体模块是由:

(1)、导航栏;

(2)、左测导航菜单栏;

(3)、页面标签卡栏;

(4)、内容栏(展示页面)。

组成。

菜单栏的点击切换改变的只是内容栏的内容,由此得出:

登录页和主界面是一级路由,内容页是主界面下的嵌套路由。

三、开发步骤(一)、安装element

官网: 一个 Vue 3 UI 框架 | Element Plus。

首先安装国内npm镜像,这样下载资源包速度会更快

npm install cnpm -g --registry=https://registry.npmmirror.com

然后,安装element

npm install element-plus --save

 引入项目,在main.js文件中加入以下代码

import ElementPlus from 'element-plus'import 'element-plus/dist/index.css'app.use(ElementPlus)

测试一下引入是否成功,在home.vue中加入按钮组件

<el-button type="primary">Primary</el-button>

 

 运行项目:npm run dev

运行效果如下,说明引入成功:

(二)、安装使用svg插件 安装:

npm i vite-plugin-svg-icons -D

 在src下新建存放svg目录:

在components目录下新建组件:SvgIcon.vue<template> <svg aria-hidden="true"> <use :xlink:href="symbolId" /> </svg></template><script> import { defineComponent, computed } from 'vue'; export default defineComponent({ name: 'SvgIcon', props: { prefix: { type: String, default: 'icon', }, name: { type: String, required: true, }, }, setup(props) { const symbolId = computed(() => `#${props.prefix}-${props.name}`); return { symbolId }; }, });</script> 在vite.config.js中配置:import { defineConfig } from 'vite'import vue from '@vitejs/plugin-vue'import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'import path from 'path'// https://vitejs.dev/config/export default defineConfig({ plugins: [ vue(),createSvgIconsPlugin({ // 指定需要缓存的图标文件夹 iconDirs: [path.resolve(process.cwd(), 'src/icons/svg')], // 指定symbolId格式 symbolId: '[name]', }) ]})在main.js中引入,添加代码:

//导入Svg图片插件,可以在页面上显示Svg图片 import 'virtual:svg-icons-register' import SvgIcon from "./components/SvgIcon.vue"; app.component('SvgIcon',SvgIcon)

 到了这里,运行项目出现报错:没有找到fast-glob。就需要安装fast-glob。

npm i fast-glob

 测试使用

打开Icon 图标 | Element Plus

vue系列(三)——手把手教你搭建一个vue3管理后台基础模板(vue系列教程)

 点击图标复制svg内容

在新建的svg目录下新建svg文件,名称格式:icon-“图标名称”,粘贴内容保存

 在页面中使用:

<SvgIcon name="aim" class="icon-svg" />

(三)、编写主界面框架代码先搭建一个整体框架,home.vue 代码<template v-slot:default><div :class="['content',isCollapse?'menu--fold':'menu--unfold']"><!-- 侧边菜单栏 --><div class="menuLeft"><div class="menu-nav-header"><span>{{isCollapse?'控制台':'管理控制台'}}</span></div> <!--todo 菜单栏组件 --></div><!-- 右边内容 --><div class="content-main"><div class="navTop horizontalView"><div class="nav_tools horizontalView"><SvgIcon :name="isCollapse?'expand':'fold'" class="icon-svg" @click="isCollapse=!isCollapse" /></div></div><!-- todo 内容组件 --></div></div></template><script>export default {components: {},data: function() {return {isCollapse: false}}}</script><style>@import url('../assets/css/home.css');</style> 编写css样式

 

 通用的放在base.css中,页面独有的放在home.css

base.css代码:.content {width: 100%;height: 100%;font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif;}/* 水平布局 居中*/.horizontalView {position: relative;flex-direction: row;display: flex;align-items: center;}/* 垂直布局居中 */.verticalView {position: relative;flex-direction: column;display: flex;align-items: center;}/* 居中 */.center {position: absolute;top: 50%;left: 50%;font-size: 28px;transform: translate(-50%, -50%);}.w100 {width: 100%;}.h100 {height: 100%;}.icon-svg {width: 1.4rem;height: 1.4rem;fill: currentColor;overflow: hidden;}home.css代码:/* -------侧边栏 折叠 */.menu--fold .menuLeft {width: 64px;}.menu--fold .content-main {margin-left: 64px;}/* --------------------- *//* ---------侧边栏 展开 */.menu--unfold .menuLeft {width: 230px;}.menu--unfold .content-main {margin-left: 230px;}/* ------------- */.navTop {position: relative;width: 100%;height: 50px;z-index: 100;box-shadow: 0 2px 4px rgba(0, 0, 0, 0.08);box-sizing: border-box;background: white;}.nav_tools {height: 100%;}.nav_tools .icon-svg {margin-left: 10px;color: #5b5b5b;}.menuLeft {position: fixed;top: 0;left: 0;bottom: 0;z-index: 1020;overflow: hidden;background-color: #263238;}.content-main {position: relative;background: #f1f4f5;height: 100%;}.menu-nav-header {color: white;height: 50px;line-height: 50px;text-align: center;font-size: 20px;font-weight: bold;/* background-color: #9fbea7; */background-color: #566f7e;}/* 动画 */.nav_tools,.menuLeft,.content-main {transition: inline-block 0.3s, left 0.3s, width 0.3s, margin-left 0.3s, font-size 0.3s;} base.css放在app.vue

@import url("./assets/css/base.css");

看看页面效果:

点击上边折叠按钮

 (四)、编写菜单栏

请先去了解组件使用文档:Menu 菜单 | Element Plus

复制实例代码自定义内容属性及样式,关闭组件提供的折叠动画,自定义动画样式

在home.vue中加入修改菜单组件代码<!--todo 菜单栏组件 --><el-menu active-text-color="#fff" background-color="#263238" class="el-menu-vertical-demo":collapse-transition="false" default-active="2" text-color="#96a4ab " @open="handleOpen"@close="handleClose" :collapse="isCollapse"><el-menu-item index="1"><SvgIcon name="home" class="icon-svg" /><span slot="">&nbsp;&nbsp;首页</span></el-menu-item><el-sub-menu index="2"><template #title><SvgIcon name="img" class="icon-svg" /><span>&nbsp;&nbsp;图片管理</span></template><el-menu-item index="1-1"><SvgIcon name="img" class="icon-svg" /><span>&nbsp;&nbsp;图片1</span></el-menu-item><el-menu-item index="1-2"><SvgIcon name="img" class="icon-svg" /><span>&nbsp;&nbsp;图片2</span></el-menu-item><el-sub-menu index="1-4"><template #title><SvgIcon name="img" class="icon-svg" /><span>&nbsp;&nbsp;图片3</span></template><el-menu-item index="1-4-1"><SvgIcon name="img" class="icon-svg" /><span>&nbsp;&nbsp;图片三级子菜单</span></el-menu-item></el-sub-menu></el-sub-menu><el-sub-menu index="3"><template #title><SvgIcon name="collection" class="icon-svg" /><span>&nbsp;&nbsp;收藏管理</span></template><el-menu-item index="3"><SvgIcon name="collection" class="icon-svg" /><span class="icon-text">&nbsp;&nbsp;收藏</span></el-menu-item></el-sub-menu><el-menu-item index="4"><SvgIcon name="about" class="icon-svg" /><span>&nbsp;&nbsp;设置</span></el-menu-item></el-menu>home.css 中加入修改样式代码/* 修改菜单栏样式样式 */.menuLeft .el-menu {border-right: none;}.el-menu-vertical-demo:not(.el-menu--collapse) {border-right: none;width: 230px;}.el-menu .icon-text {margin-left: 10px;}页面效果:

 菜单栏编写到这还没完呢,上面这种写法是每次添加、修改或删除菜单都要在页面中找到位置再修改有点繁琐,在页面代码多了或菜单项好多时去编辑修改更是麻烦的一比,所以等后面再来优化代码,把菜单封装成菜单数据集合,然后再在页面中for循环展示。

 (五)、新建页面及路由 新建页面:

index.vue,img1.vue,collect.vue,set.vue 。并在页面内加上页面标识文字。

配置路由:

router目录下index.js代码:

// import Vue from 'vue' //引入Vueimport {createRouter,createWebHashHistory} from 'vue-router' //引入vue-router// Vue.use(Router) //Vue全局使用Routerimport home from '../views/home.vue'import login from '../views/login.vue'import index from '../views/index.vue'import collect from '../views/collect.vue'import set from '../views/set.vue'import img1 from '../views/img1.vue'const routes = [{path: '',redirect: "home"}, {path: '/',redirect: "home"},{path: '/login',name: 'login',component: login,meta: {title: '登录'}},{path: '/home',name: 'home',component: home, /* 子路由 */children: [{path: '/',redirect: "index"},{path: '',redirect: "index"}, {path: '/index',name: 'index',component: index,meta: {title: '首页',}},{path: '/collect',name: 'collect',component: collect,meta: {title: '收藏',isTab: true}},{path: '/img1',name: 'img1',component: img1,meta: {title: '图片1',isTab: true}},{path: '/set',name: 'set',component: set,meta: {title: '设置',isTab: true}}]}];// 导航守卫// 使用 router.beforeEach 注册一个全局前置守卫,判断用户是否登陆/* router.beforeEach((to, from, next) => {if (to.path === '/login') {next();} else {let token = localStorage.getItem('Authorization');if (token === null || token === '') {next('/login');} else {next();}}}); */const router = createRouter({history: createWebHashHistory(),routes})export default router; 在home.vue中加入路由组件测试一下路由跳转:

<router-view />

 在菜单项中加入跳转路由代码

在“首页”菜单项加上点击跳转路由代码:@click="$router.push({ name: 'index' })"

同理,在其它菜单项上加入相应代码。

 测试效果

点击“设置”

 点击“收藏”

 ok,路由配置成功!

(六)、定制页面标签栏

二步走:

(1)、监听路由的切换,存储跳转的路由的name(或path)集合,并存储当前的路由name。

(2)、使用 el-tabs标签页组件Tabs 标签页 | Element Plus,自定义样式,编写内容组件。

第一步:监听路由变化,watch与data同层:watch: {$route: {handler(to, from) {if (to.path != from.path) {// 处理路由this.routeHandle(to);}}}},算了,直接放js全部代码吧:<script>export default {components: {},data: function() {return {isCollapse: false,mainTabs: [],mainTabsActiveName: '',menuActiveName: '',menus: []}},created() {let that = this;that.routeHandle(that.$route);},// 监听路由变化watch: {$route: {handler(to, from) {if (to.path != from.path) {// 处理路由this.routeHandle(to);}}}},methods: {resetDocumentClientHeight: function() {this.documentClientHeight = document.documentElement['clientHeight'];window.onresize = () => {this.documentClientHeight = document.documentElement['clientHeight'];this.loadSiteContentViewHeight();};},loadSiteContentViewHeight: function() {let height = this.documentClientHeight - 52; //减去导航栏高度50 console.log(this.$route.meta.isTab)if (this.$route.meta.isTab) {height -= 70; //减去tab栏高度40,减去上下边距30/* this.siteContentViewHeight = {'min-height': height + 'px'}; */this.siteContentViewHeight = height;} else {height -= 30;//给内容区设置高度this.siteContentViewHeight = height;}},routeHandle: function(route) {//每次切换页面,重新计算页面高度和内容区高度this.resetDocumentClientHeight();this.loadSiteContentViewHeight();if (route.meta.isTab) {// tab选中, 不存在先添加var tab = this.mainTabs.filter(item => item.name === route.name)[0];if (!tab) {if (route.meta.isDynamic) {route = this.dynamicMenuRoutes.filter(item => item.name === route.name)[0];if (!route) {return console.error('未能找到可用标签页!');}}tab = {menuId: route.meta.menuId || route.name,name: route.name,title: route.meta.title,iframeUrl: route.meta.iframeUrl || '',params: route.params,query: route.query};this.mainTabs = this.mainTabs.concat(tab);}this.menuActiveName = tab.menuId + '';this.mainTabsActiveName = tab.name;}},mounted: function() {let that = this;that.resetDocumentClientHeight();that.loadSiteContentViewHeight();}}}</script>第二步:编写组件<!-- todo 内容组件 --><el-tabs v-if="$route.meta.isTab" v-model="mainTabsActiveName" :closable="true"@tab-click="selectedTabHandle" @tab-remove="removeTabHandle"><el-scrollbar ref="scroll" :height="siteContentViewHeight+32+'px'" @scroll="scroll"><el-tab-pane v-for="item in mainTabs" :label="item.title" :name="item.name"><el-card :style="'min-height:'+siteContentViewHeight + 'px'"><router-view v-if="item.name === mainTabsActiveName" /></el-card></el-tab-pane></el-scrollbar></el-tabs><div v-else><el-scrollbar ref="scroll" :height="siteContentViewHeight+32+'px'" @scroll="scroll"><!-- 主入口标签页 e --><el-card :style="'min-height:'+ siteContentViewHeight + 'px'"><router-view /></el-card></el-scrollbar></div>修改样式:/* 修改标签栏样式 */.content-main .el-tabs .el-tabs__header {z-index: 90;padding: 0 55px 0 15px;box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12), 0 0 6px 0 rgba(0, 0, 0, 0.04);background-color: #fff;}.content-main .el-tabs .el-tabs__nav-wrap::after {width: 0px;}.content-main .el-scrollbar .el-card {margin: 15px 15px;}.content-main .el-tabs .el-tabs__header{margin: unset;}.content-main .el-tabs .el-tab-pane{} 在methods中添加函数方法selectedTabHandle: function(tab, e) {tab = this.mainTabs.filter(item => item.name === tab.paneName);if (tab.length >= 1) {this.$router.push({name: tab[0].name,query: tab[0].query,params: tab[0].params});}},removeTabHandle: function(tabName) {this.mainTabs = this.mainTabs.filter(item => item.name !== tabName);if (this.mainTabs.length >= 1) {// 当前选中tab被删除if (tabName === this.mainTabsActiveName) {var tab = this.mainTabs[this.mainTabs.length - 1];this.$router.push({name: tab.name,query: tab.query,params: tab.params},() => {this.mainTabsActiveName = this.$route.name;});}} else {this.menuActiveName = '';this.$router.push({name: 'Home'});}},效果:

(七)、修改封装菜单栏 在router文件下新建文件

 menu.js文件代码:var mu = {longTitle: '管理控制台',littleTitle: '控制台',items: [{iconName: 'home',name: '首页',routerName: 'index',disabled: false}, {iconName: 'img',name: '图片管理',submenu: [{iconName: 'img',name: '图片一',routerName: 'img1',disabled: false}, {iconName: 'img',name: '图片二',routerName: 'img2',disabled: false}, {iconName: 'img',name: '图片三管理',submenu: [{iconName: 'img',name: '图片三',routerName: 'img1',disabled: true}]}]},{iconName: 'collection',name: '收藏管理',submenu: [{iconName: 'collection',name: '收藏',routerName: 'collect',disabled: false}]},{iconName: 'about',name: '设置',routerName: 'set',disabled: false}]}export default mu;重新写菜单组件:<div class="menu-nav-header"><span>{{isCollapse?littleTitle:longTitle}}</span></div><el-menu active-text-color="#fff" background-color="#263238" class="el-menu-vertical-demo":collapse-transition="false" text-color="#96a4ab " @open="handleOpen"@close="handleClose" :collapse="isCollapse"><template v-for="(item,index) in menus"><el-menu-item v-if="!item.submenu" :index="index" @click="$router.push({ name: item.routerName })" :disabled="item.disabled"><SvgIcon :name="item.iconName" class="icon-svg" /><span slot="">&nbsp;&nbsp;{{item.name}}</span></el-menu-item><el-sub-menu v-else :index="index"><template #title><SvgIcon :name="item.iconName" class="icon-svg" /><span slot="">&nbsp;&nbsp;{{item.name}}</span></template><template v-for="(submenuItem,submenuIndex) in item.submenu"><el-menu-item v-if="!submenuItem.submenu" :index="index+'-'+submenuIndex" :disabled="submenuItem.disabled"@click="$router.push({ name: submenuItem.routerName })"><SvgIcon :name="submenuItem.iconName" class="icon-svg" /><span slot="">&nbsp;&nbsp;{{submenuItem.name}}</span></el-menu-item><el-sub-menu v-else :index="index+'-'+submenuIndex"><template #title><SvgIcon :name="submenuItem.iconName" class="icon-svg" /><span slot="">&nbsp;&nbsp;{{submenuItem.name}}</span></template><el-menu-item v-for="(item3,index3) in submenuItem.submenu" :index="index" :disabled="item3.disabled"@click="$router.push({ name: item3.routerName })"><SvgIcon :name="item3.iconName" class="icon-svg" /><span slot="">&nbsp;&nbsp;{{item3.name}}</span></el-menu-item></el-sub-menu></template></el-sub-menu></template></el-menu>

只嵌套了三级子菜单,如果有更多级子菜单,需要在组件中再嵌套多个for循环即可。

script代码中首先导入menu

import mu from '../router/menu/menu.js';

 在created中调用

 这样,修改菜单栏就只需要在menu.js进行编辑了,不再需要修改页面代码。

(八)、添加面包屑页面中加入面包屑组件:<el-breadcrumb separator="/"><el-breadcrumb-item v-if="!breadcrumbList.size && breadcrumbList[0]!='首页'" :to="{ name: 'index' }">首页</el-breadcrumb-item><el-breadcrumb-item v-for="it in breadcrumbList">{{it}}</el-breadcrumb-item></el-breadcrumb>在created中,将菜单栏集合做下处理,处理成下面格式:{"首页":["首页"],"图片一":["图片管理","图片一"],......}代码: //菜单项层级处理,做一个面包屑集合保存 var mus=that.menus for (let i1 of mus) { if (i1.submenu) { for (let i2 of i1.submenu) { if (i2.submenu) { for (let i3 of i2.submenu) { if (!i3.submenu) { that.breadcrumbObj[i3.name] = [i1.name, i2.name, i3.name]; } } } else { that.breadcrumbObj[i2.name] = [i1.name, i2.name]; console.log(i2.name) } } } else { that.breadcrumbObj[i1.name] = [i1.name]; console.log(i1.name) } }

路由发生变化时赋值,在watch中加入:

this.breadcrumbList = this.breadcrumbObj[to.meta.title]

注意:路由中的name要与菜单中的name保持一致。

四、结尾

到这里,一个简单的管理后台基础模板就完成了,源代码拿走不谢,码字不易,既然看到了这里,点个赞再走吧。

本文链接地址:https://www.jiuchutong.com/zhishi/298744.html 转载请保留说明!

上一篇:机器学习--使用朴素贝叶斯进行垃圾邮件分类

下一篇:数学建模-回归分析(Stata)(数学建模回归模型例题)

  • 小企业网络推广营销的几点操作思路(小企业网络推广工作内容)

    小企业网络推广营销的几点操作思路(小企业网络推广工作内容)

  • 华为盒子遥控器怎么进入配对模式(华为盒子遥控器没反应)

    华为盒子遥控器怎么进入配对模式(华为盒子遥控器没反应)

  • 淘宝评价多久清空一次(淘宝评价多久会清零)

    淘宝评价多久清空一次(淘宝评价多久会清零)

  • iqoo8pro怎么关闭应用建议和热门搜索(iqoo777怎么关闭)

    iqoo8pro怎么关闭应用建议和热门搜索(iqoo777怎么关闭)

  • 支付宝蚂蚁花呗如何提升额度(支付宝蚂蚁花呗打电话过来是什么号码)

    支付宝蚂蚁花呗如何提升额度(支付宝蚂蚁花呗打电话过来是什么号码)

  • qq聊天上面的耳朵是什么意思(qq聊天上面的耳朵怎么关)

    qq聊天上面的耳朵是什么意思(qq聊天上面的耳朵怎么关)

  • 微信紧急解冻需要多久(微信紧急解冻需多久)

    微信紧急解冻需要多久(微信紧急解冻需多久)

  • 留言板怎么不让别人看(留言板怎么设置别人看不到)

    留言板怎么不让别人看(留言板怎么设置别人看不到)

  • 压力测试和负载测试的区别(压力测试和负载测试的含义)

    压力测试和负载测试的区别(压力测试和负载测试的含义)

  • 抖音被限流如何快速恢复(抖音限流如何查看)

    抖音被限流如何快速恢复(抖音限流如何查看)

  • 朋友圈怎么开秒赞(朋友圈怎么开秒赞iPhone)

    朋友圈怎么开秒赞(朋友圈怎么开秒赞iPhone)

  • 华为moaal20是什么型号(华为 moa al20)

    华为moaal20是什么型号(华为 moa al20)

  • win10耳麦说话没声音(win10耳机麦克风说不了话)

    win10耳麦说话没声音(win10耳机麦克风说不了话)

  • 朋友圈点头像为什么会抖(朋友圈点了头像)

    朋友圈点头像为什么会抖(朋友圈点了头像)

  • n个触发器可以构成能寄存多少位(n个触发器可以记忆几种不同的状态)

    n个触发器可以构成能寄存多少位(n个触发器可以记忆几种不同的状态)

  • 为什么我的iPhone没有照片流(为什么我的iphone打王者没有声音)

    为什么我的iPhone没有照片流(为什么我的iphone打王者没有声音)

  • 为什么手机充不进电反而少了(为什么手机充不上电了苹果)

    为什么手机充不进电反而少了(为什么手机充不上电了苹果)

  • plc的扫描过程有几个阶段(plc的扫描过程包括)

    plc的扫描过程有几个阶段(plc的扫描过程包括)

  • 快手移除粉丝怎么恢复(快手移除粉丝怎么拉回来)

    快手移除粉丝怎么恢复(快手移除粉丝怎么拉回来)

  • 苹果x电池为什么耗电快(苹果x电池为什么充不满)

    苹果x电池为什么耗电快(苹果x电池为什么充不满)

  • 苹果xs有3dtouch功能吗

    苹果xs有3dtouch功能吗

  • 老年机黑名单设置在哪(老年机设置黑名单)

    老年机黑名单设置在哪(老年机设置黑名单)

  • 搜索抖音号找不到用户(搜索抖音号找不到对方)

    搜索抖音号找不到用户(搜索抖音号找不到对方)

  • 回收站的功能是什么(回收站的功能是什么如何删除项目而不将其放到回收站)

    回收站的功能是什么(回收站的功能是什么如何删除项目而不将其放到回收站)

  • etc异地可以充值吗(etc异地可以充值嘛)

    etc异地可以充值吗(etc异地可以充值嘛)

  • 今日头条如何发视频(今日头条如何发文章赚钱)

    今日头条如何发视频(今日头条如何发文章赚钱)

  • 笔记本如何打开无线网络(笔记本如何打开无线网络开关)

    笔记本如何打开无线网络(笔记本如何打开无线网络开关)

  • 劳务公司发放农民工工资要开发票吗?
  • 个人所得税手续费返还要交企业所得税吗
  • 小规模未达起征点的增值税怎么做账
  • 软件租赁费计入哪个科目
  • 股东分红按利润表的净利润计算
  • 应付账款赊销率和周转率的区别
  • 职工交的商业保险怎么做账
  • 季度现金流量表是三个月相加吗
  • 差旅费住宿专票能否抵扣
  • 存货报废需要进项转出吗
  • 外购原材料自用要进项转出吗
  • 增值税普票没有校验码
  • 车间报销费用的会计分录
  • 服务费公司的账务处理
  • 工程公司安装中央空调能按混合销售计算增值税么?
  • 石家庄国税发票查验平台
  • 咨询服务税收
  • 固定资产出售是否属于日常关联交易
  • 加计抵减是什么时候开始的
  • 开办企业验资
  • 公益性捐赠所得税处理
  • 更改代理设置失败 可能无网络连接
  • .net 安装
  • 华为手机隐藏应用
  • win8快捷键大全
  • harmonyos2.0.0怎么用
  • 如何输入特殊符号带圈数字11
  • 留抵增值税的会计处理
  • 苹果保护你的隐私
  • 本年利润和未分配利润怎么结转
  • 公共基础设施的英语
  • 导航菜单是什么
  • 怎么处理坏账准备的问题
  • 加里西亚省
  • html盒子边框圆角
  • es6 promise finally
  • 税前弥补以前年度亏损
  • 生育保险具体待遇是什么
  • chcp命令
  • 税务滞纳金计入什么会计科目
  • 政府补助的核算内容有哪些
  • 劳务报酬什么情况下可以退税
  • 被投资企业清算,长期股权投资处理
  • SQL Server 在Management Studio中使用Web浏览器
  • 烟草专卖生产企业许可证
  • 个人劳务费免增值税吗
  • 日常费用报销表格
  • 金税盘抵扣的结转会计分录
  • 企业利润表表怎么看
  • 固定资产的类别
  • 单位组织提供员工服务
  • 年末转出未交增值税借方余额怎么处理
  • 房地产企业内部控制的现状
  • 跨年的费用
  • 工地加油
  • 银行存款的收付应严格执行()的规定
  • 什么样的发票公司可以开
  • 用工资冲借款报税可以吗
  • sql server分页查询sql语句
  • freebsd login
  • 无线网卡搜索不到无线网
  • win8.1企业版激活密钥最新
  • 如何在Windows下移动文件
  • win7磁盘c满了怎么办却又分不清哪些是该删除
  • mac怎么预览cr3
  • ExtJS如何设置与获取radio控件的选取状态
  • 服务器安全设备
  • jquery动态生成表格
  • node.js 配置
  • 安卓状态栏宽度
  • java arraysort
  • android获取本地相册中图片
  • js选中文字
  • 税务局窗口业务
  • 广东省地方税务局
  • 跨区域报验和预审的区别
  • 地税税务登记代码怎么查
  • 原木进项税率
  • 车辆购置税查询电话
  • 电子税务局都能完成哪些功能
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设