您的位置:首页 >iEAS系统 >

microsoft applocale怎么用(巫师之昆特牌组牌闪退怎么办解决方法详解)

导读 applocale怎么用文章列表:1、巫师之昆特牌组牌闪退怎么办解决方法详解2、工作中,前端开发要看项目,怎么查看别人的js项目代码3、如何从零开始搭建顾客签到小程序?二---云

applocale怎么用文章列表:

microsoft applocale怎么用(巫师之昆特牌组牌闪退怎么办解决方法详解)

巫师之昆特牌组牌闪退怎么办解决方法详解

《巫师之昆特牌》组牌界面闪退怎么解决?不少玩家遇到了这个问题,下面6399小编就为大家分享《巫师之昆特牌》组牌闪退解决方法,一起来看看吧。

巫师之昆特牌组牌闪退解决方法:

组牌闪退的是系统区域或者说编码导致的,可以用ntleas或applocale转码工具加载软件,建议设置区域为波兰。

也可以直接下载下面这个闪退补丁使用,补丁为ntleas软件,已整合昆特牌的转码配置。

以上就是6399小编雪风带来的攻略,更多详细内容请持续关注6399游戏~

工作中,前端开发要看项目,怎么查看别人的js项目代码

怎么看别人的项目

进入公司后,不可能一直做新项目,大多数都是从上一个同事的项目手上开始入手,或者说参与到团队中来开发项目;因此读懂一个项目并能快速的实践是重中之重。下面我将对新手入职新公司怎么了解的项目讲一讲我的见解。

项目介绍

常用的项目,有项目介绍,如果优先从项目介绍入手,这是上手项目最快速的方式,比如:

Vue-Admin 是一个基于 Vue3.0、Vite、 Ant-Design-Vue、TypeScript 的后台解决方案,目标是为开发中大型项目提供开箱即用的解决方案。包括二次封装组件、utils、hooks、动态菜单、权限校验、按钮级别权限控制等功能。项目会使用前端较新的技术栈,可以作为项目的启动模版,以帮助你快速搭建企业级中后台产品原型。也可以作为一个示例,用于学习 vue3、vite、ts 等主流技术。该项目会持续跟进最新技术,并将其应用在项目中。

以上没有怎么办:

依赖文件

看 package.json 比如:

{ "name": "name", "version": "3.8.1", "description": "管理系统", "author": "管理系统", "license": "MIT", "scripts": { "dev": "vite", "build:prod": "vite build", "build:stage": "vite build --mode staging", "preview": "vite preview" }, "dependencies": { "@element-plus/icons-vue": "0.2.6", "axios": "0.24.0", "echarts": "5.2.2", "element-plus": "2.0.1", "file-saver": "2.0.5", "fuse.js": "6.4.6", "js-cookie": "3.0.1", "jsencrypt": "3.2.1", "nprogress": "0.2.0", "vue": "3.2.26", "vue-cropper": "1.0.2", "vue-router": "4.0.12", "vuex": "4.0.2" }, "devDependencies": { "@vitejs/plugin-vue": "1.9.4", "@vue/compiler-sfc": "3.2.22", "sass": "1.45.0", "unplugin-auto-import": "0.5.3", "vite": "2.6.14", "vite-plugin-compression": "0.3.6", "vite-plugin-svg-icons": "1.0.5", "vite-plugin-vue-setup-extend": "0.1.0" }}

从上dependencies中可以可以看出,使用了 vue3、axios、icons图标、echarts图表、elementUI、file-saver导出文件、js-cookie、nprogress进度条、路由,数据缓存、复制、加密等等一些功能;

devDependencies中能看到使用的工具,如vite、saas等。

大致用的功能已经知道了,那么就从入口文件开始查看。

配置文件

vite.config.js 或 vue.config.js (React则看React相关的配置文件如craco.configjs等) 配置文件不会做太多事,一般都是解析,编译,优化等,主要看看常用的一些快捷功能,方便后面直接使用;如:

图表:

import svgIcon from 'vite-plugin-svg-icons'import path from 'path'export default function createSvgIcon(isBuild) { return svgIcon({ iconDirs: [path.resolve(process.cwd(), 'src/assets/icons/svg')], symbolId: 'icon-[dir]-[name]', svgoOptions: isBuild })}

全局配置:

// 部署生产环境和开发环境下的URL。 // 默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上 // 例如 https://www.xxx.xxx/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.xxx.xxx/admin/,则设置 baseUrl 为 /admin/。 publicPath: process.env.NODE_ENV === "production" ? "/" : "/", // 在npm run build 或 yarn build 时 ,生成文件的目录名称(要和baseUrl的生产环境路径一致)(默认dist) outputDir: 'dist', // 用于放置生成的静态资源 (js、css、img、fonts) 的;(项目打包之后,静态资源会放在这个文件夹下) assetsDir: 'static', // 是否开启eslint保存检测,有效值:ture | false | 'error' lintOnSave: process.env.NODE_ENV === 'development', // 如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。 productionSourceMap: false,

别名:

{ alias: { // 设置路径 '~': path.resolve(__dirname, './'), // 设置别名 '@': path.resolve(__dirname, './src') }, extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue']},

跨域: 主要处理请求后端接口是:

proxy: { '/dev-api': { target: 'http://localhost:8080', changeOrigin: true, rewrite: (p) => p.replace(/^/dev-api/, '') }}

入口文件

main.js 基本形式就像下面这样,所有的配置都是从这里查找,有的是直接在main.js中可以看,有的是引用,通过引用再去里面看,比如store数据共享,router路由配置都是在里面;

import { createApp } from 'vue'import Cookies from 'js-cookie'import ElementPlus from 'element-plus'import locale from 'element-plus/lib/locale/lang/zh-cn' // 中文语言import '@/assets/styles/index.scss' // global cssimport App from './App'import store from './store'import router from './router'import directive from './directive' // directive// 注册指令import plugins from './plugins' // pluginsimport { download } from '@/utils/request'// svg图标import 'virtual:svg-icons-register'import SvgIcon from '@/components/SvgIcon'import elementIcons from '@/components/SvgIcon/svgicon'/** * permission这个是权限 , 一搬会做一些请求或打开页面前的操作,如身份验证,用户登录有效期等 * */import './permission' // permission controlimport { useDict } from '@/utils/dict'import { parseTime, resetForm, addDateRange, handleTree, selectDictLabel } from '@/utils/ruoyi'// 分页组件import Pagination from '@/components/Pagination'// 自定义表格工具组件import RightToolbar from '@/components/RightToolbar'// 文件上传组件import FileUpload from "@/components/FileUpload"// 图片上传组件import ImageUpload from "@/components/ImageUpload"// 图片预览组件import ImagePreview from "@/components/ImagePreview"// 自定义树选择组件import TreeSelect from '@/components/TreeSelect'// 字典标签组件import DictTag from '@/components/DictTag'const app = createApp(App)// 全局方法挂载app.config.globalProperties.useDict = useDictapp.config.globalProperties.download = downloadapp.config.globalProperties.parseTime = parseTimeapp.config.globalProperties.resetForm = resetFormapp.config.globalProperties.handleTree = handleTreeapp.config.globalProperties.addDateRange = addDateRangeapp.config.globalProperties.selectDictLabel = selectDictLabel// 全局组件挂载app.component('DictTag', DictTag)app.component('Pagination', Pagination)app.component('TreeSelect', TreeSelect)app.component('FileUpload', FileUpload)app.component('ImageUpload', ImageUpload)app.component('ImagePreview', ImagePreview)app.component('RightToolbar', RightToolbar)app.use(router)app.use(store)app.use(plugins)app.use(elementIcons)app.component('svg-icon', SvgIcon)directive(app)// 使用element-plus 并且设置全局的大小app.use(ElementPlus, { locale: locale, // 支持 large、default、small size: Cookies.get('size') || 'default'})app.mount('#app')

权限、路由拦截

一般就是去登录页,或去其它的页面,获取用信息等常用操作

NProgress.configure({ showSpinner: false })// 以下是白名单不需要操作const whiteList = ['/login', '/auth-redirect', '/bind', '/register']router.beforeEach((to, from, next) => { NProgress.start() if (getToken()) { to.meta.title && store.dispatch('settings/setTitle', to.meta.title) /* has token*/ if (to.path === '/login') { next({ path: '/' }) NProgress.done() } else { if (store.getters.roles.length === 0) { // 判断当前用户是否已拉取完user_info信息 store.dispatch('GetInfo').then(() => { store.dispatch('GenerateRoutes').then(accessRoutes => { // 根据roles权限生成可访问的路由表 router.addRoutes(accessRoutes) // 动态添加可访问路由表 next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 }) }).catch(err => { store.dispatch('LogOut').then(() => { Message.error(err) next({ path: '/' }) }) }) } else { next() } } } else { // 没有token if (whiteList.indexOf(to.path) !== -1) { // 在免登录白名单,直接进入 next() } else { next(`/login?redirect=${to.fullPath}`) // 否则全部重定向到登录页 NProgress.done() } }})router.afterEach(() => { NProgress.done()})

目录结构

大多数项目都是这样的结构,命名方式也好阅读

├── vue.config.js/ # webpack 配置文件;├── config/ # 与项目构建相关的常用的配置选项;│ ├── index.js # 主配置文件│ ├── src/ │ ├── main.js # webpack 的入口文件;│ ├── App.vue # APP页面入口│ ├── assets/ # 共用的代码以外的资源,如:图片、图标、视频 等;│ ├── api/ # 网络模块,如:接口;│ ├── router/ # 路由模块│ ├── I18n/ # 国际化模块│ ├── directive/ # 指令│ ├── vuex/ # 组件共享状态│ ├── libs/ # 工具│ ├── components/ # 共用的组件;; 这里的存放的组件应该都是展示组件│ │ ├── base/ # 基本组件,如:共用的弹窗组件,loading加载组件,提示组件。 │ ├── utils/ # 共用的资源,如:常用的图片、图标,共用的组件、模块、样式,常量文件等等; │ │ ├── util/ # 自己封装的一些工具│ │ └── ... │ ├── layout # 公共局页面;│ └── view/ # 存放项目业务代码;│ ├── home # 首页;│ ├── application-service # 应用服务│ ├── image # 镜像│ ├── team # 团队成员│ ├── code-manage # 代码管理├── App.vue # app 的根组件;├── public/ # 纯静态资源,该目录下的文件不会被webpack处理,该目录会被拷贝到输出目录下; ├── .babelrc # babel 的配置文件├── .editorconfig # 编辑器的配置文件;可配置如缩进、空格、制表类似的参数;├── .eslintrc.js # eslint 的配置文件├── .eslintignore # eslint 的忽略规则├── .gitignore # git的忽略配置文件├── jsconfig.json # 别名配置,用于ctrl 鼠标左建查看文件├── package.json # npm包配置文件,里面定义了项目的npm脚本,依赖包等信息└── README.md # 项目信息文档

统一接口请求

一搬做一些常用的请求,报错,权限认证,取消请求等:

配置

超时

请求地址

头部信息

请求前处理

Authorization

重复提交

post、get特殊处理

失败或异常

响应拦截器

状态码

错误信息

二进制数据则直接返回

401

500

非200

错误或异常

全局配置

常用的一些配置,这些配置一定是整个项目中经常出现的部分才会用到;

一搬在main.js中出现如下:

全局指令

hasRole按钮权限等

hasPermission角色权限

全局方法

下载

时间

日期等

全局组件

分页

上传

图片预览

标签等

公共组件

常用的一些公共组件,这些组件常用,或某一些页面中要用到;如下:

表单

table

动画

时间

图片裁剪

编辑器

弹窗

抽屉

详情

验证

二维码

上传

加载

图标

打印

水印

日志

常用工具

常用的一些功能如下:

右键

缓存

权限密码等生成

字典数据

常用报错或提示

表格时间格式化

克隆

合并

截流

防抖

首字母大小

验证等

路由配置

404报错

401没有权限

最外层封装

左侧栏目

导航栏目

标签

重定向

全局匹配

数据配置

数据比较简单就是常有的一些功能如下:

modules 模块部分

app 平台信息

user 用户信息

其它的和官方说明的基本一样。

最后

项目讲到这里就讲完了,基本就是几项操作就能看到别人完整的配置流程,公共代码,这样就能快速上手操作了。

    README.md 帮助文档

    package.json 配置

    main.js 入口

      全局组件

      全局方法

      全局指令

    router 路由

    store 数据存储

    components 公共组件

    utils 常用工具

如何从零开始搭建顾客签到小程序?二---云开发入门教程

导语:在如何从零开始搭建顾客签到小程序?(一)中,已经搭建起顾客登陆、获取用户openid、转到教练列表两个微信小程序的页面。在前端页面和后端云服务器之间建立了联系。本文将继续讲解如何把签到信息存至云数据库,以及如何从云数据库中获取信息查询记录的功能实现。

第四步、实现顾客签到页面和功能

一、顾客签到功能的流程图

二、打开微信开发者工具,导入顾客签到小程序项目,左侧文件树中“jiaolian1、jiaolian2"两个目录就是用户签到页面

三、点击”jiaolian1.wxml”文件,内容替换成如下代码:

<!-- 顾客签到 -->

<view class="userinfo">

<view>

<button

bindtap="onAdd">点击签到</button>

</view>

<view > {{ qiandao }} </view>

</view>

<view class="userinfo">

<view>

<button bindtap="sumOnQuery" >顾客签到总数:</button>

</view>

<view>{{ message }}节课 </view>

</view>

<button class="userinfo" bindtap="onQuery" >点击查询记录</button>

四、紧接着点击“jiaolian.js"文件,把内容替换成如下代码:

//index.js

const app = getApp(); //定义变量

const db = wx.cloud.database({}); //调用云数据库

const cont = db.collection('jiaolian1'); //指明要操作的数据集是"jiaolian1"

Page({ //定义页面数据

data: {

},

onLoad: function() { //默认加载获取用户信息

wx.getUserInfo({ //获取用户信息

withCredentials:true, //授权鉴证

success: res => {

var userInfo = res.userInfo

app.globalData.nickName = userInfo.nickName //用户眤称赋值

var gender = userInfo.gender //用户性别赋值

var myDate = new Date() //获取当前时间

app.globalData.mydate = myDate.toDateString() //截止到日期的时间

app.globalData.mytime = myDate.toLocaleString() //截止到毫秒的时间

app.globalData.avatarUrl = userInfo.avatarUrl //头像

if (gender = 1) { app.globalData.gen = "先生" } //对性别符号进行判断,1是先生

else { app.globalData.gen = "女士" } //0是女士

this.setData({

avatarUrl: res.userInfo.avatarUrl,

userInfo: res.userInfo

})

}, //下面是一些”预留退路“的保障代码

fail: function () {

//获取用户信息失败后。请跳转授权页面

wx.showModal({

title: '警告',

content: '尚未进行授权,请点击确定跳转到授权页面进行授权。',

success: function (res) {

if (res.confirm) {

console.log('用户点击确定')

wx.navigateTo({

url: '../tologin/tologin',

})

}

}

})

},

})

if (!wx.cloud) {

wx.redirectTo({

url: '../chooseLib/chooseLib',

})

return

}

// 查询当前用户所有的 counters //为下面防止用户重复签到提供对比记录

db.collection('jiaolian1').count().then(res =>{

console.log(res.total)

this.setData({

message : res.total

})

})

},

onAdd:function() { //点击签到按钮功能函数

const db = wx.cloud.database()

db.collection('jiaolian1').where({_openid:app.globalData.openid}).get({

success:res =>{ //上面用where定义是不同用户的签到

var newdate = app.globalData.mydate //判断两次签到是否同一天

var len = res.data.length //记录的长度

console.log(len)

console.log(newdate)

if(len===0){ //如果当天没有记录,该用户可以新增签到

db.collection('jiaolian1').add({ //在数据库中写入签到信息

data: {

nickname: app.globalData.nickName, //包括了呢称、签到时间等

mytime:app.globalData.mytime,

avatarUrl:app.globalData.avatarUrl,

gen: app.globalData.gen,

mydate: app.globalData.mydate,

biaozhi:1

},

})

console.log('今日第一次签到!')

}

var olddate = res.data[res.data.length-1].mydate

if(len>0 & olddate!=newdate){ //如果该用户签到记录大于0但相隔时间超过一天

db.collection('jiaolian1').add({ //也往数据库里写入新增签到信息

data: {

nickname: app.globalData.nickName, //包括了呢称、签到时间等

mytime:app.globalData.mytime,

avatarUrl:app.globalData.avatarUrl,

gen: app.globalData.gen,

mydate: app.globalData.mydate,

biaozhi:1

},

success: res => {

// 在返回结果中会包含新创建的记录的 _id

this.setData({

counterId: res._id,

count: 1

})

wx.showToast({

title: '签到成功',

})

console.log('[数据库] [新增记录] 成功,记录 _id: ',res._id)

},

fail: err => { //下面是一些”预留退路“的保障代码

wx.showToast({

icon: 'none',

title: '新增记录失败'

})

console.error('[数据库] [新增记录] 失败:', err)

}

})

}

if(len>0 & olddate==newdate){ //如果同一用户在同一天内签到则拒绝写入

console.log('您今日已经签到!')

this.setData({

qiandao:'您今日已经签到!'

})

}

},

fail:err => {

console.log('读数据失败')

},

})

},

onQuery: function() { //该函数对应查询按钮,是查询所有用户的签到记录

//因为已经过滤了同一天同一用户重复签到,所以所有签到记录就是用户的每日上课记录。

db.collection('jiaolian1').get({

success: res => {

this.setData({

book_list : res.data

})

console.log('[数据库] [查询记录] 成功: ', res)

},

fail: err => {

wx.showToast({

icon: 'none',

title: '查询记录失败'

})

console.error('[数据库] [查询记录] 失败:', err)

}

})

},

sumOnQuery: function() { //该函数对应页面中的统计总次数数据

// 查询当前用户所有的 counters

db.collection('jiaolian1').count().then(res =>{

console.log(res.total)

this.setData({

message : res.total //把顾客签到总次数渲染到页面

})

})

}

})

五、紧接着点击“jiaolian.wxml"文件,把内容替换成如下代码:

/* pages/main/main.wxss */

/**index.wxss**/

page {

background: #f6f6f6;

display: flex;

flex-direction: column;

justify-content: flex-start;

}

.uploader-text, .tunnel-text {

width: 100%;

line-height: 52px;

font-size: 34rpx;

color: #007aff;

}

.userinfo, .uploader, .tunnel {

margin-top: 40rpx;

height: 140rpx;

width: 100%;

background: #fff;

border: 1px solid rgba(0, 0, 0, 0.1);

border-left: none;

border-right: none;

display: flex;

flex-direction: row;

align-items: center;

transition: all 300ms ease;

}

六、完成代码编写,按”CTRL S“保存后看看效果

很妙,顾客签到,签到总数以及签到详细记录都显示出来了,功能完整。

七、修改另一个教练"jiaolian2"的文件,把上面代码拷过去,然后把云数据集“jiaolian1”改成“jiaolian2”即可,当然,签到页面中教练的名字也需要改换的。

总结:

1、制订了签到查询功能流程图;

2、编写了查询页面和逻辑功能页面代码函数,实现了签到、查询、统计三项功能;

3、考虑到顾客上课的实际情况,增加了同一个顾客同一天内不能重复签到的判断语句;

这次我们选择了云开发作为小程序开发的方式,只需要编写云函数,大大提高了开发效率。但是云开发只是腾讯云上提供的服务,如果我们想用阿里云服务器的话,还是要设置小程序和服务器之间的系统环境和数据交换。在下一篇文章中,我将讲解如何用python这种全世界最流程的语言,来作为小程序的服务器后端示例。“人生苦短,我用python”。请关注我的头条号,欢迎讨论指正。

如果让你有所思,请多在朋友圈分享本文,让更多人有所获。我是神足自在,编程爱好者,致力于IT工程的实践案例和浅易讲解。

在 Linux 中使用组合键输入隐藏的字形

使用组合键,你不会被键盘所限制住。

典型的键盘只有约 100 个键位。

由于 Shift键,许多键得以有两个字符(也称之为 字形glyph)。字形常用于键入带有重音和变音符号的字母,生成数学公式或者货币中的符号,或者添加有趣的表情符号。在一些地区,有些键甚至有三个字形。

然而,不论你身处何处,有一些字形不会出现在你的键盘上。幸运的是,Linux 提供了使用 组合键Compose Key 来获取这些字形。

在你的键盘上没有组合键这个键,至少默认情况下没有,但是你可以设定一个你不用的键作为组合键。我在电脑上使用空格键旁边的 Alt键,而在平板上使用菜单键,来作为组合键。

下载 Linux 组合键速查表

在 GNOME 中设置组合键

在 GNOME 桌面,从软件库中安装 优化Tweaks 应用。你也可以从终端安装(基于 Debian 发行版用 apt命令,Fedora 用dnf):

$ sudo dnf install gnome-tweaks

启动优化应用后:

    单击左侧栏中的 键盘和鼠标Keyboard & Mouse类别

    找到 组合键Compose key 设置并指定一个键

    关闭优化应用

在 KDE Plasma 桌面设置组合键

osition of Compose Key" is checked within that menu, and "Right Alt" is checked within that menu." />

在 KDE Plasma 桌面上,打开 系统设置System Settings,找到 输入设备Input Devices 控制界面。然后:

    在 输入设备Input Devices 界面,点击 “高级Advanced” 标签

    找到 组合键Compose key 列表项并指定一个键

    点击右下角 “应用Apply” 按钮,然后关闭 系统设置System Settings

使用组合序列

为了输入隐藏字符,需要按下组合键后松开。这样就可以进入组合模式。处于组合模式,你按下然后松开键,然后再按下一个键来组合字符。

例如:

    按下组合键并释放,你会进入组合模式

    按下单引号(')并松开

    按下 E并松开,这是一个有效的组合,所以现在退出了组合模式

你输入了一个字符:é

一些组合序列只需要两个键的组合,然而还有一些需要三个键,并且至少有一个特殊字符要按四次键。

变音字符

这是一个很小众的世界,所以你的朋友的名字很有可能使用的字形不是你的键盘原生的字形。你现在可以跳过变音符号并使用适当的修饰符输入名字。

以下是常见变音符号的组合序列示例:

' =á é í ó ú ? ń y j?? ? ?

` =à è ì ò ù ? ? ?

~ =? ? ? ? ? ? ?

^ =a ê ? ? ? ? ? ? ? ?

u =? ? ? ? ?

c c=?

- =ā ē ī ō ū ?

, =? ? ? ? ? ? ? ?

这里仅仅罗列了常见的几个,并不是所有的组合。

货币符号

得益于组合键,国际银行业务也变得容易:

- Y=

- L=

= E=

免责声明:本文由用户上传,如有侵权请联系删除!