BADWOLFBAY

Run,You Clever Boy!


  • 首页

  • 标签

  • 分类

  • 归档

  • 搜索

VUE(Element-ui)开发使用Table合并单元格

发表于 2020-04-08 | 分类于 vue

在使用Element-ui进行开发时,遇到使用表格进行展示时,需要进行进行单元的合并,实现如下效果:

element-ui-table

官网的例子中实现单元格合并,需要2步

  • 提供的数据不能为嵌套数据格式,如:

    1
    [{id:"1",name:"王小虎"},{id:"2",name:"王小虎"}]
  • 提供:span-method方法,实现colspan和rowspan的效果

但是由于后端接口提供的数据一般为嵌套格式,如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[
{
"id": "123123123",
"name": [
{
"vendor": "Huawei",
"type": "vUGW"
},
{
"vendor": "Huawei",
"type": "EPSN"
}
],
"notificationuri": " https://ip:port/v1/catalog/notification"
}
]

这样就需要在前端循环修改数据格式,拼成table需要的格式,或者修改后端服务接口,实现起来比较麻烦.所以决定使用template+v-for来手动实现.实现思路如下:

  • 使用v-for进行嵌套循环,同时根据内层数据的length设置rowspan
  • 表格使用element-ui的表格样式
阅读全文 »

manjaro系统安装以及美化

发表于 2020-03-17 | 分类于 manjaro

U盘启动盘制作

manjaro的U盘启动盘如果使用UltroISO或者其他工具制作以后并不能启动,推荐使用Rufus,并且需要低版本.

在制作镜像过程中,要选择以DD镜像模式写入.

安装完成之后的设置

设置中国源

1
2
3
sudo pacman-mirrors -i -c China -m rank # 之后会弹出框,进行选择即可
#更新系统软件
sudo pacman -Syu

之后还需要添加archlinuxcn源,不然很多软件找不到,编辑/etc/pacman.conf文件,添加

1
2
3
[archlinuxcn]
SigLevel = TrustAll
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch

然后执行

1
sudo pacman -S archlinuxcn-keyring

然后就可以通过pacman命令安装各种软件了.

阅读全文 »

eletron中使用vuex不生效问题

发表于 2020-03-15 | 分类于 electron

在基于electron开发时使用vuex的dispatch方法传值无效

1
vue.$store.dispatch(VUEX_ACTION_UPDATE_INFO, info)

并且不报任何错误.经查找是vuex-electron的问题.

解决方法1:

在store/index.js中去掉createSharedMutations

1
2
3
4
5
6
7
8
export default new Vuex.Store({
modules,
plugins: [
createPersistedState(),
createSharedMutations() // 注释掉这一行
],
strict: process.env.NODE_ENV !== 'production'
})

这是因为 vuex-electron 引入了一个用于多进程间共享 Vuex Store 的状态的插件.如果没有多进程交互的需求,完全可以不引入这个插件.

解决方法2

https://github.com/vue-electron/vuex-electron#installation

看第 3 条:

In case if you enabled createSharedMutations() plugin you need to create an instance of store in the main process. To do it just add this line into your main process (for example src/main.js):

1
2
> import './path/to/your/store'
>

这种时候就不能用第一种方法来解决问题了。

找到 /src/main/index.js,在前面加上一句:

1
import '../renderer/store'

manjaro-desktop

发表于 2020-03-13 | 分类于 manjaro

先晒一下manjaro截图

desktop

因为经常使用python,在win下开发很难受,所以将笔记本系统换成了manjaro,在执行镜像,安装系统,安装软件,美化和字体渲染方面也遇到了很多问题.晒一下截图.并记录一下遇到的大的问题,等有时间统一整理记录.

  • openvpn配置文件是openssl1.0版本编译,并修改qopenvpn图形界面
  • Electron版本的docker客户端图形工具开发
  • 字体渲染,在设置中设置字体后软件字体不生效问题

Java String详解

发表于 2018-05-09 | 分类于 Java

Java中的String是经常使用的类,但是String中有很多需要学习的东西

1.不可变性

从最开始学习String时,就一直说String的类型是不可变的,但是从来没有深究。
如果看String源码会发现

  • String类是final修饰的,使用者并不能通过继承来修改String类中的内容
  • String内部维护了一个final修饰的char类型的数组
  • char类型的数组虽然是引用类型,但是new String时使用Arrays.copyOf来避免使用者通过修改数组内容来修改String
  • 使用replace,substring是,都是重新new String

2.equals

在Java中使用equals来比较两个对象是否相等

1
2
3
public boolean equals(Object obj) {
return (this == obj);
}

Object中的源码中显示如果没有重写equals,比较的就是两个对象的内存地址是否相等。String重写了equals方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}

从源码中可以发现

  • 如果两个String对象地址相同,则肯定相等。
  • 两个对象地址不同,如果数组的长度相等,并且数组中每个值都相等,则两个字符串相等。
阅读全文 »

记一次Dubbo调用失败的错误

发表于 2018-01-30 | 分类于 Java

应用程序作为provider注册到Dubbo的注册中心后,作为提供者一直被消费者访问不到,报出一个超时链接的错误。
  一开始怀疑是网络问题(提供者将自身的服务注册到注册中心后,消费者会从注册中心获取提供者的真实地址和端口,从而通过RPC进行远程调用,所以提供者的地址信息会在消费者的客户端缓存一份),可是从消费者到注册者的网络环境能ping通,telnet其提供者的端口也是通的。
  从浏览器中通过Http的方式访问提供者的接口,浏览器就一直处于访问的挂起状态,得不到返回信息。同样后台也看不到任何报错信息,怀疑是不是Dubbo的问题,可是检查注册中心后发现一切正常,其他服务都能够正常访问。
  最后在部署程序时发现Tomcat的控制台日志一直卡住。悲催的因为程序只能部署在Windows上,之前一直在Linux下部署,只有开发在Windows下开发,可是从来没有遇到这种问题。Tomcat是通过双击startup.bat启动的,后来决定从cmd中启动试一下,程序居然可以访问了!!!
  百度后发现原来是Windows下Console设置的问题。在Console中右键,选择属性,然后再选项中勾掉编辑选项的快速编辑模式,默认是打勾的,去掉那个勾勾,然后再确认就可以了。Windows下的大坑啊。。。折腾了一下午!

Spring+Mybatis分库分表总结

发表于 2018-01-18 | 分类于 Spring

收到一个用户需求要求时时展现填报信息,之前项目使用的数据库是MySQL,但是由于数据量较大而且计算过程复杂,所以决定将数据放到Oracle中利用存储过程计算,这样就需要项目同时连接Oracle和MySQL数据库。下边简单总结下分库分表

分表

当一个表的数据量很大以后,业务上就需要根据规则对数据库进行水平切分,如注册用户表user_01,user_02等,但是当数据库表进行切分以后,程序就需要根据规格进行相应的处理。利用Mybatis的interceptor可以实现根据路由规则去操作相应的数据库,开源的有Shardbatis实现。但是sharding只能区分一个数据源中的不同表,并不能根据规则切换数据源。

分库

如果想连接多个数据库,需要配置两个数据源,如

1
2
3
4
5
6
<bean id="oracleDataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="${oracle.db.url}" />
<property name="username" value="${oracle.db.username}" />
<property name="password" value="${oracle.db.password}" />
</bean>
  1. 利用AbstractRoutingDataSource.

在配置文件中加入DynamicDataSource配置,其中可以配置多个数据源链接和默认的链接

1
2
3
4
5
6
7
8
9
10
<bean id="dataSource" class="com.xxx.core.dataSource.DynamicDataSource" >
<property name="targetDataSources">
<map key-type="java.lang.String">
<entry value-ref="dataSource1" key="dataSource1"></entry>
<entry value-ref="dataSource2" key="dataSource2"></entry>
</map>
</property>
<property name="defaultTargetDataSource" ref="dataSource1">
</property>
</bean>

然后继承AbstractRoutingDataSource,该方法中实现数据库的动态切换。

1
2
3
4
5
6
public class DynamicDataSource extends AbstractRoutingDataSource{
@Override
protected Object determineCurrentLookupKey() {
return DataSourceContextHolder.getDataSourceType();
}
}

定义一个可以设置当前线程的变量的工具类,用于设置对应的数据源名称。由于Spring的Bean是单例的,需要将数据源放入ThreadLocal中来避免线程安全的问题。

1
2
3
4
5
6
7
8
9
10
11
12
public class DataSourceContextHolder {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
public static void setDataSourceType(String dataSourceType) {
contextHolder.set(dataSourceType);
}
public static String getDataSourceType() {
return contextHolder.get();
}
public static void clearDataSourceType() {
contextHolder.remove();
}
}

也可以利用AOP+Annotation来实现基于注解的数据库动态切换。

阅读全文 »

Aria2+YAAW+Tampermonkey下载百度云文件

发表于 2018-01-04 | 分类于 软件

BaiduExporter插件被Google下架,安装BaiduExporter插件只能离线安装,但是会提示只能通过Chrome网上应用商店安装该程序的错误(可以通过加压后再进行安装),如果不想安装这个插件,可以安装YAAW。

因为公司换了电脑,不再使用Mac,重新在Win7上安装Aria2。

下载安装aria2

1.进入官网下载页面Aria2
2.下载win版本的压缩包
3.解压后放到一个目录下,如:D:\Aria2,然后在这个目录下建立3个文件,分别为

  • Aria2.log(日志,空文件)
  • aria2.session(日志,空文件)
  • aria2.conf(配置文件)

配置aria2

打开aria2.conf文件,将一下内容复制到文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
dir=D:\Download\
log=D:\Aria2\Aria2.log
input-file=D:\Aria2\aria2.session
save-session=D:\Aria2\aria2.session
save-session-interval=60
force-save=true
log-level=error
# see --split option
max-concurrent-downloads=5
continue=true
max-overall-download-limit=0
max-overall-upload-limit=50K
max-upload-limit=20
# Http/FTP options
connect-timeout=120
lowest-speed-limit=10K
max-connection-per-server=10
max-file-not-found=2
min-split-size=1M
split=5
check-certificate=false
http-no-cache=true
# FTP Specific Options
# BT/PT Setting
bt-enable-lpd=true
#bt-max-peers=55
follow-torrent=true
enable-dht6=false
bt-seed-unverified
rpc-save-upload-metadata=true
bt-hash-check-seed
bt-remove-unselected-file
bt-request-peer-speed-limit=100K
seed-ratio=0.0
# Metalink Specific Options
# RPC Options
enable-rpc=true
pause=false
rpc-allow-origin-all=true
rpc-listen-all=true
rpc-save-upload-metadata=true
rpc-secure=false
# Advanced Options
daemon=true
disable-ipv6=true
enable-mmap=true
file-allocation=falloc
max-download-result=120
#no-file-allocation-limit=32M
force-sequential=true
parameterized-uri=true

注意修改以下几项

dir=D:\Download\

log=D:\Aria2\Aria2.log

input-file=D:\Aria2\aria2.session

save-session=D:\Aria2\aria2.session

在cmd中启动:aria2c.exe --conf-path=aria2.conf

安装YAAW插件

在chrome的插件商店搜索YAAW找到YAAW for Chrome进行安装

然后在所有的下载链接上右键选择ARIA2 RPC进行下载就可以了。

Aria2 Web

1.可以直接现在访问
http://aria2c.com
2.点击chrome插件yaaw,也可以直接看到下载任务

百度云大文件链接

  1. 安装油猴插件(插件商店搜索Tampermonkey并安装)
  2. 安装EX-百度云盘油猴脚本(EX-百度云盘)
  3. 百度云盘中的页面中会多一个EX-下载的选项
  4. 这时在EX-下载的下拉菜单中的普通下载右键还不能将任务发送aria2进行下载,需要将文件共享。
  5. 在共享页面的EX-下载的菜单中选择普通下载后,Chrome就可以下载大文件了。然后在下载的链接上右击,选择ARIA2-RPC就可以了。
  6. 按照上边的Aria2 Web可以查看下载的文件和进度。

TODO

aria2的启动时在cmd中启动的,需要使用脚本启动并隐藏cmd窗口。

利用Django Admin管理

发表于 2017-12-29 | 分类于 python

Python的Web框架Django有一个很厉害的功能就是可以根据数据的表结构生成models,然后利用自带的admin管理界面进行管理。

安装(Windows)

1.安装Python

下载地址:

https://www.python.org/getit
注:安装时选择安装pip

2.配置环境

在Windows的环境变量中path中添加
C:\Python\Python36-32;C:\Python\Python36-32\Scripts

3.安装Django

在cmd中执行

1
pip install Django==2.0

配置Django

根据数据库反向生成model

1.新建项目

在想要存储的目录下执行命令

1
django-admin startproject cwtb

2.修改数据库
修改新建项目的settings.py文件数据库连接

1
2
3
4
5
6
7
8
9
10
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'fms_cwtb',
'USER': 'jxq',
'PASSWORD': 'jxq',
'HOST': '192.168.157.61',
'PORT': '3306',
}
}

3.执行命令

1
2
3
4
#安装MySQL客户端
pip install mysqlclient
#生成models
python manage.py inspectdb

4.创建app,导入models

1
2
3
python manage.py startapp app
python manage.py inspectdb > app/models.py

5.生成admin需要的表到数据库

1
2
python manage.py migrate auth
python manage.py migrate

6.创建登录用户名密码

1
python manage.py createsuperuser

期间会要求输入用户名/密码:admin/admin1234

7.admin中注册app

修改admin.py

1
2
3
4
5
6
7
8
9
from django.contrib import admin
from app.models import FmsTbBiTs
# Register your models here.
@admin.register(FmsTbBiTs)
class FmsTbCpkDjcAdmin(admin.ModelAdmin):
list_display = ('id', 'year', 'quarter', 'month', 'dept_code', 'dept_name', 'project_code', 'project_name','km_code', 'km_name', 'tsz', 'data_type', 'tb_type', 'bz1', 'bz2', 'bz3', 'bz4', 'create_time', 'update_time')

8.修改setting.py,将新建的app应用添加到INSTALLED_APPS

1
2
3
4
5
6
7
8
9
10
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app'
]

9.修改中英文配置

修改settings.py文件

1
2
3
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'

10.启动Admin管理后台

1
python manage.py runserver 0.0.0.0:8000

访问

http://localhost:8000/admin会看到登陆界面

百度云盘大文件下载及wget命令下载

发表于 2017-12-11

大文件下载 (chrome)

1.安装Tampermonkey

下载Tampermonkeyctx安装文件,拖拽到chrome扩展程序进行安装

2.安装脚本

https://greasyfork.org/zh-CN

搜索 百度云,找到解决百度云大文件下载限制,点击安装脚本

点击下载即可在chrome中下载大文件

wget命令下载

在不使用客户端的情况下,在Linux上可以使用wget命令下载文件

1
wget -c --referer="https://pan.baidu.com/s/1geShrcn" -O USB_Clover_El_10.11.2_15C50.dmg "https://d11.baidupcs.com/file/4fe11b6499aadfb6d6c71a069347b2ef?bkt=p3-000041b61dfd29c78e715750f5f368b68f21&xcode=8b170a5746c3e069110d88ded6ecebe0753c975f9b99f324&fid=2634882875-250528-446076603732633&time=1512955781&sign=FDTAXGERLQBHSK-DCb740ccc5511e5e8fedcff06b081203-DhXO3o2T%2FM61XgCfTOIdJdBKfIs%3D&to=d11&size=6331828199&sta_dx=6331828199&sta_cs=1408&sta_ft=dmg&sta_ct=7&sta_mt=0&fm2=MH,Yangquan,Anywhere,,guangdong,ct&vuk=2634882875&iv=0&newver=1&newfm=1&secfm=1&flow_ver=3&pkey=000041b61dfd29c78e715750f5f368b68f21&sl=83034191&expires=8h&rt=sh&r=740312867&mlogid=7987506833960085243&vbdid=502990198&fin=USB_Clover_El_10.11.2_15C50.dmg&fn=USB_Clover_El_10.11.2_15C50.dmg&rtype=1&dp-logid=7987506833960085243&dp-callid=0.1.1&hps=1&tsl=300&csl=300&csign=7qu6lUTZwacrMJY1n%2Fm13tTPRpA%3D&so=0&ut=6&uter=4&serv=0&uc=1539727773&ic=815197955&ti=91499ea5817d8028239ebf7886cf11f2e88e8e5223093275&by=themis"

--referer后为分享链接(自己的文件可以先创建一个分享链接),-O为下载后的文件名
后边为chrome下载时的文件真实地址,文件上右击复制链接地址即可

阅读全文 »
12…5
badwolf

badwolf

Run,You Clever Boy!

43 日志
12 分类
16 标签
RSS
Links
  • badwolfbay
  • Gluon-deepmind
  • 浮生志
© 2020 badwolf
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.2