修复(工具类): lerna QA

This commit is contained in:
NICE CODE BY DEV 2022-05-07 17:09:29 +08:00
parent abb3cfe6db
commit dbb0c36f5f
11 changed files with 697 additions and 597 deletions

View File

@ -21,12 +21,12 @@ export default defineConfig({
locales: [['zh-CN', '中文']],
navs: [
null,
// {
// title: '其它',
// children: [
// { title: '爬虫', path: '/spider' },
// ],
// },
{
title: '其它',
children: [
{ title: '买房攻略', path: '/other/house/2017' },
],
},
{
title: 'GitHub',
path: 'git@github.com:j710328466/learn-note.git',

View File

@ -4,7 +4,7 @@ nav:
path: /bed
group:
title: Go
order: 1
order: 2
---
## 基础
@ -42,4 +42,4 @@ func SampleReadFromString() {
func main() {
SampleReadFromString()
}
```
```

View File

@ -10,41 +10,49 @@ group:
# 快速上手
## 配置
### 1、目录结构
- ① pkg 打包后的路径
- ② src 开发路径
- ③ bin 应用程序
- ① pkg 打包后的路径
- ② src 开发路径
- ③ bin 应用程序
### 2、两大配置路径
- gopath: $PATH
- goroot: $PATH
- gopath: $PATH
- goroot: $PATH
### 3、查看当前环境配置
- go env
- go env
### 4、设置环境变量
- vim ~/.profile 输入以下:
- export GOROOT=/usr/local/go
- export PATH=$PATH:GOROOT/bin
- vim ~/.profile 输入以下:
- export GOROOT=/usr/local/go
- export PATH=$PATH:GOROOT/bin
## 知识点
### 常量定义
- 显式const identifier type = value
- 隐式const identifier = value无类型常量
- 特殊常量 iota
- 介绍
- 每次碰到 const 会被重置为 0如果没碰到每新增一个常量声明就会自增 +1
- 使用技巧
- 跳值使用法:使用 _ , 每一个 _ 能使 iota 的值跳过 1 , 要跳多少就给多少个 _
- 插队使用法:在变量声明中再插入一个赋值的变量不会对 iota 自增产生影响
- 隐式使用法:如果不声明值,则默认使用最后一个表达式的赋值格式
- 显式const identifier type = value
- 隐式const identifier = value无类型常量
- 特殊常量 iota
- 介绍
- 每次碰到 const 会被重置为 0如果没碰到每新增一个常量声明就会自增 +1
- 使用技巧
- 跳值使用法:使用 _ , 每一个 _ 能使 iota 的值跳过 1 , 要跳多少就给多少个 \_
- 插队使用法:在变量声明中再插入一个赋值的变量不会对 iota 自增产生影响
- 隐式使用法:如果不声明值,则默认使用最后一个表达式的赋值格式
### 并发和并行
- 并发
- 单核上,通过任务的来回切换达到类似同时进行
- 并行
- 两个任务同时执行
- 并发
- 单核上,通过任务的来回切换达到类似同时进行
- 并行
- 两个任务同时执行
### go 包源切换
```json

View File

@ -18,7 +18,7 @@ group:
<code src="./demos/demo9/index.tsx" />
### 3D导航条
### 3D 导航条
<code src="./demos/demo8/index.tsx" />

View File

@ -8,127 +8,66 @@ group:
path: /css
---
# 基础介绍
## 基础介绍
## 布局
### 绝对定位法
> 左右两栏采用绝对定位中间的由两边的margin撑开
> 左右两栏采用绝对定位,中间的由两边的 margin 撑开
```html
<body>
<div id="main"></div>
<div id="left"></div>
<div id="right"></div>
<div id="main"></div>
<div id="left"></div>
<div id="right"></div>
</body>
#main {
margin:0 200px;
background:red;
}
#left{
position:absolute;
top:0;left:0;
width:200px;
background:blue;
height:100%;
}
#right{
position:absolute;
top:0;right:0;
width:200px;
background:green;
height:100%;
}
#main { margin:0 200px; background:red; } #left{ position:absolute;
top:0;left:0; width:200px; background:blue; height:100%; } #right{
position:absolute; top:0;right:0; width:200px; background:green; height:100%; }
```
这种布局缺点是,当缩放到一定大小的时候,会出现重叠现象
### 自身浮动法
> 左栏左浮动,右栏右浮动,中间栏放最后
```html
<body>
<div id="left"></div>
<div id="right"></div>
<div id="main"></div>
</body> 
#main {margin:0 200px;background:red;}
#left{float:left;width:200px;background:blue;height:100%;}
#right{float:right;width:200px;background:green;height:100%;}
<body>
<div id="left"></div>
<div id="right"></div>
<div id="main"></div>
</body>
  #main {margin:0 200px;background:red;}
#left{float:left;width:200px;background:blue;height:100%;}
#right{float:right;width:200px;background:green;height:100%;}
```
简单而高效,代码还容易理解,适合初学者
### 圣杯布局
```html
//注意元素次序
<div class="main">Main</div>
<div class="left">Left</div>
<div class="right">Right</div>
//习惯性的CSS reset
body,html{
height:100%;
padding: 0;
margin: 0
}
//父元素body空出左右栏位
body {
padding-left: 100px;
padding-right: 200px;
}
//左边元素更改
.left {
background: red;
width: 100px;
float: left;
margin-left: -100%;
position: relative;
left: -100px;
height: 100%;
}
//中间部分
.main {
background: blue;
width: 100%;
height: 100%;
float: left;
}
//右边元素定义
.right {
background: red;
width: 200px;
height: 100%;
float: left;
margin-left: -200px;
position: relative;
right: -200px;
}
//习惯性的CSS reset body,html{ height:100%; padding: 0; margin: 0 }
//父元素body空出左右栏位 body { padding-left: 100px; padding-right: 200px; }
//左边元素更改 .left { background: red; width: 100px; float: left; margin-left:
-100%; position: relative; left: -100px; height: 100%; } //中间部分 .main {
background: blue; width: 100%; height: 100%; float: left; } //右边元素定义
.right { background: red; width: 200px; height: 100%; float: left; margin-left:
-200px; position: relative; right: -200px; }
```
稍微难理解一点,不过这种布局目前我觉得是适配性比其他两种要好的布局方式,缺点是后期维护性不高
### 双飞翼布局
```html
div class="main">
<div class="inner">
@ -139,172 +78,135 @@ div class="main">
<div class="right">Right</div>
```
> css样式就是将body上的左右margin值去掉加在新增的 div 中
> css 样式就是将 body 上的左右 margin 值去掉,加在新增的 div 中
这种布局方式为淘宝 UED 提出,目前最好用的一种布局方式,相比较圣杯布局,去掉了相对布局,代码更简洁
小记:前两天面试,展现项目过程中经理问我轮播图的原理,我一脸懵逼,因为当时有现成的插件,所以我没怎么去研究,当然,我也知道该来的还是要来的...
首先我大概讲一下,传统轮播图的主要部分:
- 图片(废话)
- 左右两边的button
- 左右两边的 button
- 可以跳转的小点
## 轮播图
- 轮播图的原理就是一个长图里面有很多张图外面包一层展示窗口将属性设置成overflowhidden达到只显示一张的效果当点击左右两边的按钮时会按照像素来跳转
- 轮播图的原理就是一个长图,里面有很多张图,外面包一层展示窗口,将属性设置成 overflowhidden达到只显示一张的效果当点击左右两边的按钮时会按照像素来跳转
### 无限滚动
- 我给两个按钮设为 **prev next** 一个在点击后,长图会增加一张图的宽度,一个是减少一个图的宽度,在图片的头和尾部加一张图,结构大概为:
```html
<div id="list" style="left:-200px">
<img src="./img/5.jpg" alt="">
<img src="./img/1.jpg" alt="">
<img src="./img/2.jpg" alt="">
<img src="./img/3.jpg" alt="">
<img src="./img/4.jpg" alt="">
<img src="./img/5.jpg" alt="">
<img src="./img/1.jpg" alt="">
</div>
<img src="./img/5.jpg" alt="" />
<img src="./img/1.jpg" alt="" />
<img src="./img/2.jpg" alt="" />
<img src="./img/3.jpg" alt="" />
<img src="./img/4.jpg" alt="" />
<img src="./img/5.jpg" alt="" />
<img src="./img/1.jpg" alt="" />
</div>
```
当是最后一张图或第一张图时,将第一张上一张跳转为最后一张时的宽,最后一张跳转为第一张时的宽
```javascript
if (newList < -1000) {
dot = 1
list.style.left = -200 + 'px'
}
if (newList > -200) {
dot = 5
list.style.left = -1000 + 'px'
}
dot = 1;
list.style.left = -200 + 'px';
}
if (newList > -200) {
dot = 5;
list.style.left = -1000 + 'px';
}
```
### 小按钮切换
这要实现的思想有
- 点了小按钮,背景色会变
- 当点击切换到其他按钮,图片切换,且上一个按钮会变回原来的颜色
```javascript
function showBtn() {
for (var i = 0; i < btns.length; i++) {
if (btns[i].className == 'show-btn') {
btns[i].className = ''
break
}
}
btns[dot-1].className = 'show-btn'
}
for (var i = 0; i < btns.length; i++) {
if (btns[i].className == 'show-btn') {
btns[i].className = '';
break;
}
}
btns[dot - 1].className = 'show-btn';
}
//遍历数组,将有该属性设为空
for (var i = 0; i < btns.length; i++) {
btns[i].onclick = function () {
if (this.className == 'showBtn') {
return
}
var myIndex = parseInt(this.getAttribute('index'))
var leng = -200 * (myIndex - dot)
animate(leng)
dot = myIndex
showBtn()
}
}
btns[i].onclick = function () {
if (this.className == 'showBtn') {
return;
}
var myIndex = parseInt(this.getAttribute('index'));
var leng = -200 * (myIndex - dot);
animate(leng);
dot = myIndex;
showBtn();
};
}
//遍历数组将每一个小按钮设了个index属性这里用到 getAttribute 可以获取除了普通style 或 class 之外的一些属性获取index值点击时得到当前的index值正好和当前的dot值相减可得跳转的距离
```
> 这里要注意的是当小按钮被重复按的时候给他一个判断不然重复点击同一个图标会重复发生相同事件占内存耗cpu
> 这里要注意的是,当小按钮被重复按的时候,给他一个判断,不然重复点击同一个图标会重复发生相同事件,占内存,耗 cpu
### 延迟动画函数
就是当用户点击时,有一个慢慢偏移的过程,而不是闪现的动作,我们来看看实现原理
- 首先,定义参数
```javascript
var time = 300 //位移总时间
var interval = 10 //位移时间间隔
var speed = leng/(time/interval) //每次位移量,就是一共调用多少次的意思
var time = 300; //位移总时间
var interval = 10; //位移时间间隔
var speed = leng / (time / interval); //每次位移量,就是一共调用多少次的意思
```
- 设置递归函数
```javascript
if ((speed < 0 && parseInt(list.style.left) > newList) || (speed > 0 && parseInt(list.style.left) < newList)) {
list.style.left = parseInt(list.style.left) + speed + 'px'
setTimeout(go, interval) //递归,调用自身函数
```
- 判断是否仍在动画
如果用户一直在点击切换图时,如果电脑配置不好,或是其他一些因素,可能会轮播卡顿,为了防止这一现象,就用一个判断来看上一次动画是否完成,若未完成就不能继续切换,等到这次动画跳转完为止
```javascript
var animated = false //设初值
var animated = false; //设初值
if(!animated) {
animate(200)
} //如果为false则继续动画
if (!animated) {
animate(200);
} //如果为false则继续动画
```
### 自动播放
首先给个思路,当鼠标移入的时候,自动播放停止,移出的时候开始自动播放
- 我们设两个函数play 和 stop
```javascript
function play() {
timer = setTimeout(function() {
next.onclick()
play()
},interval)
}
function stop() {
clearTimeout(timer)
}
timer = setTimeout(function () {
next.onclick();
play();
}, interval);
}
function stop() {
clearTimeout(timer);
}
```
最后给整个 container 容器添加该鼠标事件

View File

@ -4,77 +4,76 @@ nav:
path: /fea
group:
title: 💊 css
order: 2
order: 3
path: /css
---
## SASS语法
## SASS 语法
### if 语句
```css
@mixin blockOrHidden($boolean: true) {
@if $boolean {
@debug "$boolean is #{$boolean}";
@debug '$boolean is #{$boolean}';
display: block;
}
@else {
@debug "$boolean is #{$boolean}";
} @else {
@debug '$boolean is #{$boolean}';
display: none;
}
}
// 使用
.block {
@include blockOrHidden;
@include blockOrHidden;
}
.hidden {
@include blockOrHidden(false);
@include blockOrHidden(false);
}
```
### for 循环语句
有以下两种形式
1. @for $i from <start> through <end>
1. @for $i from <start> to <end>
> 区别2 的 <end> 不包括本身这个数
> 区别2 的 <end> 不包括本身这个数
#### 简单例子
```css
@for $i from 1 through 10 {
.item-#{$i} {
width: 2em * $i;
width: 2em * $i;
}
}
```
#### 复杂例子
```css
$grid-prefix: span !default;
$grid-width: 60px !default;
$grid-gutter: 20px !default;
%grid {
float: left;
float: left;
margin-left: $grid-gutter / 2;
margin-right: $grid-gutter / 2;
}
@for $i from 1 through 12 {
.#{$grid-prefix}#{$i} {
width: $grid-width * $1 + $grid-gutter * ($1 - 1);
width: $grid-width * $1 + $grid-gutter * ($1 - 1);
@extend %grid;
}
}
```
###
### while 循环
###
### while 循环
```css
$types: 4;
@ -82,16 +81,14 @@ $type-width: 20px;
@while $types > 0 {
.while-#{$types} {
width: $type-width + $types;
width: $type-width + $types;
}
$types: $types - 1;
}
```
### each 语句
```css
$list: adam bob chris david eric;
@ -104,30 +101,32 @@ $list: adam bob chris david eric;
}
.author-bio {
@include author-images;
@include author-images;
}
```
## 列表函数
### length($list):返回长度
> length() 函数中的列表参数之间使用空格隔开,不能使用逗号
```css
length(5px 88px (border 66px solid) 4em (border 8em solid))
```
###
###
### nth($list, $n)
返回列表第几个值
```css
nth(1 2 3 4 5, 1) ----> 1
```
### join($list1, $list2, $separator)
> space空格、comma逗号
```css
@ -135,36 +134,48 @@ join(1 2 3, 4 10 12, space)
---> (1 2 3 4 10 12)
```
### append($list1, $list2, $separator)
和 join 一样的效果
### zip($list1,$list2,...)
```css
zip(solid dashed dotted, 1px 3px 6px, #000 #fff #eee);
```
##
##
### index($list, $val)
找到 list 中 val 的索引
```css
index(1px solid red, 1px)
```
### type-of()
判断类型number、string、bool
### unitless()
判断一个值是否带有单位
### unit()
获取一个值得单位
### comparable()
判断两个数是否可以加、减、合并
### if($condition, $if-true, $if-false)
三元运算符
### map数组
```css
$map: (
$key1: $value1;
@ -185,131 +196,163 @@ $theme-color: (
)
```
#### map-get($map, $key)
根据给定的 key获取 map 中相关的值
#### map-merge($map1, map2)
合并两个map
#### map-remove($map, $key)
删除指定 key 返回新map
#### map-keys($map)
返回 map 中所有 key 值
#### map-values($map)
返回 map 中所有 value 值
#### map-has-key($map, $key)
判断是否含有指定key值
#### keywords($args)
返回一个函数的参数
根据给定的 key获取 map 中相关的值
#### map-merge($map1, map2)
合并两个 map
#### map-remove($map, $key)
删除指定 key ,返回新 map
#### map-keys($map)
返回 map 中所有 key 值
#### map-values($map)
返回 map 中所有 value 值
#### map-has-key($map, $key)
判断是否含有指定 key 值
#### keywords($args)
返回一个函数的参数
## 字符串函数
### unquote删除引号
> 只能删除最前和最后的引号
```css
.test {
content: unquote("im jsonskin");
content: unquote('im jsonskin');
}
```
### quote添加引号
> 如果监测到有引号,不会重复添加
```css
.test {
content: quote(给我加个引号吧);
content: quote(给我加个引号吧);
}
```
### to-lower-case、to-upper-case
```css
.test {
text: to-upper-case(aa-bb-cc);
text: to-upper-case(aa-bb-cc);
text: to-lower-case(AA-BB-Cc);
}
```
###
###
## 数字函数
### percentage($val)
将一个不带单位的数转换为百分比值;
### round($val)
四舍五入,取一个最接近的整数
### ceil($val)
将大于自己的小数换成下一位整数
### floor($val)
去除小数部分
### abs($val)
返回一个数的绝对值
### max($numbers...)
找出最大值
> 比较的数,单位要相同
### min($numbers...)
找出最小值
> 比较的数,单位要相同
### random()
获取随机数
获取随机数
## 规则
### @media
```css
@media screen ($condition: $val) {
.side-bar {
width: 100px;
width: 100px;
}
}
```
### @extend
会继承 父级元素的属性,并继承它的子属性
```css
.container {
border: 1px solid #fff;
border: 1px solid #fff;
width: 100%;
height: 100%;
}
.container:hover {
color: #000;
color: #000;
}
.main {
@extend .main
@extend .main;
}
```
### @at-root
跳出父级样式到根部
```css
.a {
.b {
.c {
@at-root {
color: red;
color: red;
}
}
}
}
```
### @debug
调适使用
> @debug 1px + 2px
### @warn
> @warn "this is a warn: #{$val}"
### @error
> @error "this is a error: #{$msg}"
> @error "this is a error: #{$msg}"

View File

@ -11,6 +11,7 @@ group:
# lerna
## 介绍
lerna 是一个包管理工具,方便在大型开源项目中不需要手动开启多个仓库
## 使用方法
@ -20,6 +21,7 @@ lerna 是一个包管理工具,方便在大型开源项目中不需要手动
> npm i lerna -g
### 创建子项目
> lerna create {packageName}
### 添加依赖
@ -37,13 +39,11 @@ lerna add eslint --scope=package1
lerna add esint packages/prefix-*
```
> -dev添加到 devDependencies
> --exact只安装特定版本
### 执行 npm script 命令
```javascript
// 执行所有子项中的 test
lerna run test
@ -56,56 +56,54 @@ lerna run --ignore package-* test
```
### 查看哪些包需要发布
```javascript
lerna updated
```
> - 决定哪一个包需要被publish
> - 决定哪一个包需要被 publish
### 发布依赖包
```javascript
learna publish
```
> 建议使用 independent 模式,独立对每个依赖包做管理
> `--npm-client=cnpm 指定源`
## 常见命令
| 命令 | 说明 |
| :---: | :---: |
| lerna bootstrap | 安装依赖 |
| lerna clean | 删除各个包下的node_modules |
| lerna init | 创建新的lerna库 |
| lerna list | 显示package列表 |
| lerna changed | 显示自上次relase tag以来有修改的包 选项通 list |
| lerna diff | 显示自上次relase tag以来有修改的包的差异 执行 git diff |
| lerna exec | 在每个包目录下执行任意命令 |
| lerna run <commond> | 执行每个包package.json中的脚本命令 |
| lerna add | 添加一个包的版本为各个包的依赖 |
| lerna import | 引入package |
| lerna link | 链接互相引用的库 |
| lerna create | 新建package |
| lerna publish | 发布 |
| 命令 | 说明 |
| :-----------------: | :--------------------------------------------------------: |
| lerna bootstrap | 安装依赖 |
| lerna clean | 删除各个包下的 node_modules |
| lerna init | 创建新的 lerna 库 |
| lerna list | 显示 package 列表 |
| lerna changed | 显示自上次 relase tag 以来有修改的包, 选项通 list |
| lerna diff | 显示自上次 relase tag 以来有修改的包的差异, 执行 git diff |
| lerna exec | 在每个包目录下执行任意命令 |
| lerna run <commond> | 执行每个包 package.json 中的脚本命令 |
| lerna add | 添加一个包的版本为各个包的依赖 |
| lerna import | 引入 package |
| lerna link | 链接互相引用的库 |
| lerna create | 新建 package |
| lerna publish | 发布 |
## 官方文档
[http://www.febeacon.com/lerna-docs-zh-cn/](http://www.febeacon.com/lerna-docs-zh-cn/)
### Q&A
#### 1. 发布包提示lerna ERR! ENOREMOTEBRANCH Branch 'master' doesn't exist in remote 'origin'.
#### 1. 发布包提示 lerna ERR! ENOREMOTEBRANCH Branch 'master' doesn't exist in remote 'origin'.
> git remote -v 查看是否是 origin 指向的分支,推送最新分支
> lerna publish
#### 2. lerna ERR! E402 You must sign up for private packages
在相应包的 package.json 添加
```js
@ -117,8 +115,20 @@ learna publish
}
```
#### 使用father打包报错
#### 3. 使用 father 打包报错
如果是使用的 **yarn** 安装的包,改成 **cnpm** 安装,再试一次
#### 4. lerna ERR! yarn install --mutex network:42424 --non-interactive exited 1 in 'root'
不要使用 yarn bootstrap 改为 lerna bootstrap
#### 5. 疯狂报 ts 类的错误
```js
{
"compilerOptions": {
"typeRoots": ["./typings"]
}
}
```

124
docs/fea/wx/index.md Normal file
View File

@ -0,0 +1,124 @@
---
nav:
title: 前端
path: /fea
group:
title: 💊 微信
order: 7
path: /wx
---
# 💊 微信
## 💊 微信公众号
> 以下操作需要在微信公众号后台配置相应的白名单
### 1. 获取微信头像
```js
import { funcUtil } from '@nicecode/tools';
import { getUserInfo, jumpToWxUrl } from '@/services/common';
if (location.href.indexOf('?') > -1) {
if (location.href.indexOf('code') > -1) {
// 2. 将code传递给后端获取nickname、avatar等参数
getUserInfo({
code: funcUtil.getParameter('code', location.href),
}).then((res) => {
if (res.code === '200') {
// 3. 获取昵称成功,跳转回首页
localStorage.setItem('wx_nickname', res.data.nickname);
location.replace('/');
}
});
}
} else {
// 1. 后台拼接链接,前端跳转获取 code
jumpToWxUrl({ redirectUrl: window.location.origin }).then((res) => {
if (res.code === '200') {
location.replace(res.data.code);
}
});
}
```
### 2. 获取微信授权
```js
import { getWxAuthorities } from '@/services/common';
import wx from 'weixin-js-sdk';
//要用到微信API
function getJSSDK(
shareUrl: string,
shareMsg: {
title: string,
desc: string,
link: string,
imgUrl: string,
},
) {
// 1. 获取微信签名
getWxAuthorities({ url: shareUrl }).then(
(res: {
data: {
appId: string,
timestamp: number,
echostr: string,
signature: string,
},
}) => {
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来若要查看传入的参数可以在pc端打开参数信息会通过log打出仅在pc端时才会打印。
appId: res.data.appId, // 必填,公众号的唯一标识
timestamp: res.data.timestamp, // 必填,生成签名的时间戳
nonceStr: res.data.echostr, // 必填,生成签名的随机串
signature: res.data.signature, // 必填,签名
jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData'],
});
wx.ready(function () {
console.log('监听');
//分享给微信朋友
wx.updateAppMessageShareData({
title: shareMsg.title,
desc: shareMsg.desc,
link: shareMsg.link,
imgUrl: shareMsg.imgUrl,
success: function success(res) {
console.log(res, '分享成功');
},
cancel: function cancel(res) {
console.log('已取消');
},
fail: function fail(res) {
//alert(JSON.stringify(res));
},
});
// 2.2 监听“分享到朋友圈”按钮点击、自定义分享内容及分享结果接口
wx.updateTimelineShareData({
title: shareMsg.title,
link: shareMsg.link,
imgUrl: shareMsg.imgUrl,
success: function success(res) {
//alert('已分享');
},
cancel: function cancel(res) {
//alert('已取消');
},
fail: function fail(res) {
//alert(JSON.stringify(res));
},
});
});
wx.error(function (res) {
alert('微信验证失败');
});
},
);
}
export default {
// 获取JSSDK
getJSSDK,
};
```

File diff suppressed because one or more lines are too long

View File

@ -1,93 +1,91 @@
---
nav:
title: 其它
path: /other
# nav:
# title: 其它
# path: /other
group:
title: 💊 买房攻略
title: 💊 买房攻略 2020
order: 1
path: /other/house/2020
---
# 💊 买房攻略2020
# 💊 买房攻略 2020
<Alert type="info"><a href="/other/house/2017">买房攻略 2017 版</a></Alert>
`以下是 github 上 DongDavid 分享文章`
>2020年5月份我在杭州买了个房子。记录一下。
> 2020 5 月份,我在杭州买了个房子。记录一下。
本来我是准备把整个买房的过程都详细的记录下来的,但是中间事情比较多,有的事情就没有记录了。
## 软装即将更新
## 软装即将更新
明明以为精装的房子交房只需要买个家具,然而业主群里面一直在讨论软装的事情,也有一大堆的软装公司打电话来推销。。。
感觉怕是免不了软装了。
## 整体流程
整个流程大致是这样的。
* 摇号
* 选房
* 付定金
* 付首付
* 签约-认购书
* 办理贷款
* 签合同-房屋买卖合同(预售)
- 摇号
- 选房
- 付定金
- 付首付
- 签约-认购书
- 办理贷款
- 签合同-房屋买卖合同(预售)
## 遇到的坑
* 贷款
* 贷款
* 贷款
- 贷款
- 贷款
- 贷款
[^_^]:
重要的事情说三次
[^_^]: 重要的事情说三次
## 讲重点
## 讲重点
首先说一下我买的房子吧。
我因为家里老是催所以在2020年5月份跑去摇号了(本来是想着应付一下的,毕竟不想当房奴)。
当时随便选了几个200万以下的报名摇号因为贫穷。。。😊
我因为家里老是催,所以在 2020 5 月份跑去摇号了(本来是想着应付一下的,毕竟不想当房奴)。
当时随便选了几个 200 万以下的报名摇号,因为贫穷。。。😊
### 摇号其实也挺坑的
就不说2019年那几次摇号事件了我5月份本来准备报一个楼盘的结果填了一波报名资料提交的时候提交不了。然后加了销售的微信问了一下这个楼盘居然是不摇号已经开始卖了认购的 先到先得。。。当时我心里是一个卧槽啊(这个楼盘是个毛胚14000左右的单价在大江东那边),当时我想了一下要不干脆买这个吧, 这么便宜。总价在150万以内。只是后来又到处搜了一下发现那个楼盘好像是有个化学厂啥的= = ,而且地方也略显偏僻,就直接放弃了。。。
就不说 2019 年那几次摇号事件了,我 5 月份本来准备报一个楼盘的,结果填了一波报名资料,提交的时候提交不了。然后加了销售的微信问了一下,这个楼盘居然是不摇号,已经开始卖了,认购的, 先到先得。。。当时我心里是一个卧槽啊(这个楼盘是个毛胚14000 左右的单价,在大江东那边),当时我想了一下要不干脆买这个吧, 这么便宜。总价在 150 万以内。只是后来又到处搜了一下,发现那个楼盘好像是有个化学厂啥的= = ,而且地方也略显偏僻,就直接放弃了。。。
**不需要摇号的楼盘都不是好楼盘**,这句话在某种程度上是有道理的。但是真正的好楼盘我等估计是没机会摇到的。那些万人摇的楼盘大多都不需要冻结资金,这就导致了一大波的混子也去凑人头了。
***
---
那一天,老老实实上班的我突然接到了一个电话,是销售打来的,本来我以为是那种推销的电话,还不准备接的= = 自从我第一次摇号之后就经常接到卖房、贷款之类的骚扰电话TM的为什么这种肆无忌惮的打骚扰电话的销售就没人管一下吗
那一天,老老实实上班的我突然接到了一个电话,是销售打来的,本来我以为是那种推销的电话,还不准备接的= = 自从我第一次摇号之后就经常接到卖房、贷款之类的骚扰电话TM 的为什么这种肆无忌惮的打骚扰电话的销售就没人管一下吗?
>摇号其实摇的就是一个选房顺序所有的购房者根据自己的号码按照顺序选房我是39号说明这两栋楼100多个坑我是第39个选的。
比如房源有100套那么摇号前100顺位的都算摇中了。这个时候如果放弃的话就算弃选好像是一年内放弃3次就会被禁止参与摇号多久来着。
最终我接起了那个电话, 并且人家告诉我我摇到了第39号瞬间惊了我一下下。
我从去年开始第一次摇号,摇了两个月, 都是去凑人头的然后就没有摇了今年也是5月份才开始摇号本来也没报什么希望的 居然就中了一个这么靠前的位子。
> 摇号其实摇的就是一个选房顺序,所有的购房者根据自己的号码按照顺序选房,我是 39 号,说明这两栋楼 100 多个坑,我是第 39 个选的。
> 比如房源有 100 套,那么摇号前 100 顺位的都算摇中了。这个时候如果放弃的话,就算弃选,好像是一年内放弃 3 次就会被禁止参与摇号多久来着。
最终我接起了那个电话, 并且人家告诉我我摇到了第 39 号,瞬间惊了我一下下。
我从去年开始第一次摇号,摇了两个月, 都是去凑人头的,然后就没有摇了,今年也是 5 月份才开始摇号,本来也没报什么希望的, 居然就中了一个这么靠前的位子。
### 选房
今年因为疫情的影响,选房大多变成了线上选房。
通常都有一次模拟选房和实际选房。
通常都有一次模拟选房和实际选房。
到时候销售会发给你教程的,其实挺简单的, 只是那个线上选房的直播延迟不是一般的大慢了30多秒可真是辣鸡。
到时候销售会发给你教程的,其实挺简单的, 只是那个线上选房的直播延迟不是一般的大,慢了 30 多秒,可真是辣鸡。
线上选房是在指定时间,通过支付宝里面的公证云选房小程序进行选房。选房的时候摇看着倒计时和选房顺序号来选房,那个直播不用理他。
选房的时候根据楼盘的不同要付定金通过1-3万吧。**这个定金是不会退的**。
所以你要确定你想要的房子还有再去选, 要不然选了一个自己不要的就比较尴尬了。到时候放弃了要亏1、2万。
选房的时候根据楼盘的不同要付定金,通过 1-3 万吧。**这个定金是不会退的**。
所以你要确定你想要的房子还有再去选, 要不然选了一个自己不要的,就比较尴尬了。到时候放弃了要亏 1、2 万。
我顺序比较靠前, 就选了一个12楼的边套(西边套的总共20楼)虽然有西晒但是比中间套的好呀毕竟东边套都是115m的户型200多万的买不起。。。
我顺序比较靠前, 就选了一个 12 楼的边套(西边套的,总共 20 楼),虽然有西晒,但是比中间套的好呀,毕竟东边套都是 115m 的户型200 多万的买不起。。。
选房子也是艰难家里略迷信所有我只好避开来13、14、18几个楼层。顶楼又不要低于8楼的也不要(南边有一栋8层高的小高层怕挡光)所以就要在9、10、11、12、15、16、17之间选了我个人不喜欢高楼万一出事了跳楼都莫的跳奈何买不起排墅。
于是选了12楼。
选房子也是艰难,家里略迷信,所有我只好避开来 13、14、18 几个楼层。顶楼又不要,低于 8 楼的也不要(南边有一栋 8 层高的小高层,怕挡光),所以就要在 9、10、11、12、15、16、17 之间选了,我个人不喜欢高楼,万一出事了跳楼都莫的跳,奈何买不起排墅。
于是选了 12 楼。
### 付首付
在选房完成之后楼盘的要求是3天内付20万7天内付清首付并且提交贷款申请资料。
在选房完成之后,楼盘的要求是 3 天内付 20 7 天内付清首付,并且提交贷款申请资料。
这里就没啥好说的了, 老老实实交钱,然后拿了发票,再签个认购书。
@ -97,45 +95,44 @@ group:
其中组合贷款是指贷款金额中一部分为商业贷款,一部分为公积金贷款。
公积金的贷款利率比较低固定为3.25%
而商业贷款的利率则比较高是根据LPR来定的基于LPR固定上浮多少。
公积金的贷款利率比较低,固定为 3.25%
而商业贷款的利率则比较高,是根据 LPR 来定的,基于 LPR 固定上浮多少。
我办贷款的时候, 几家银行的利率大多在5.05-5.15之间。当时的LPR是4.65所以上浮基点在40-50之间。都差不多。找一家利率最低的而去能够办的出贷款的银行办理就行。
我办贷款的时候, 几家银行的利率大多在 5.05-5.15 之间。当时的 LPR 4.65,所以上浮基点在 40-50 之间。都差不多。找一家利率最低的,而去能够办的出贷款的银行办理就行。
因为办理贷款的时候, 是要求你的月收入大于月供的一倍才可以。有的银行只需要你刚好一倍就行,而有的银行则需要你要比月供的一倍更高一些。而且有的银行还会去查你的资金流水。
因为办理贷款的时候, 是要求你的月收入大于月供的一倍才可以。有的银行只需要你刚好一倍就行,而有的银行则需要你要比月供的一倍更高一些。而且有的银行还会去查你的资金流水。
我因为个人原因,只能是在几家不需要查流水的银行办理贷款,因为我的公司不能虚开收入证明(大部分私营企业是可以帮忙给你的收入证明开的高一些的)。
我因为个人原因,只能是在几家不需要查流水的银行办理贷款,因为我的公司不能虚开收入证明(大部分私营企业是可以帮忙给你的收入证明开的高一些的)。
#### 知识点
* 公积金贷款必须还清了之后才能继续使用公积金办理贷款
* 杭州的公积金贷款单人上限是50万夫妻是100万。
* 公积金一个人一辈子只能用来办理两次房贷
* 如果你单身的时候,用了两次公积金贷款,那么你结婚之后, 就无法办理家庭公积金贷款了只能是你老婆单独办理公积金贷款贷50万。
* 如果你和你老婆都在结婚前已经办理了两次公积金贷款,那么婚后你们就无法在办理公积金贷款了, 只能是办理纯商业用公积金去还贷款。
* 如果你和你老婆在婚前都没有办理过公积金贷款,那么你和你老婆可以一起办理两次家庭公积金贷款, 上限100万的那种。
* 商业贷款利率是LPR+上浮基点
* 商业房贷的利率是每年都在变得因为LPR每个月都会变一次。我办理贷款的时候 银行上浮的基点是40个基点的话 那么我的利率就是LPR+40.
比如今年的LPR是4.65那么我今天的房贷利率是5.05。明年的LPR是4.20的话那么我明年的房贷利率就变成了4.60。
* LPR会在每个月的20号进行更新每年的房贷利率一般是根据每年1月1号的LPR来定的(也就是去年12月20日更新的LPR)。
* 大部分银行都要求组合贷款只能是一个人办理,不支持父母共还。
* 意思是如果你要办理组合贷款的话,那么这个贷款必须要由你自己单独办理(或者夫妻也行),要求你自己的月收入大于月供的一倍才行。
* 当然也有少部分银行允许办理组合贷款的时候父母共还。也就是说当你的月收入没有达到月供的一倍的时候,你就需要请你的父母来一起办理贷款,你和你的父母的月收入加起来超过来月供的一倍就可以了,比如浙商银行、交通银行是支持这样的。
* 贷款并不是办理成功后就要开始还房贷,而是银行放款给开发商后, 你才需要开始还房贷。
* 公积金贷款放款需要等房子结顶后才放款(结顶是指房子主体部分已经完成,形象的说就是顶楼也盖好了)
- 公积金贷款必须还清了之后才能继续使用公积金办理贷款
- 杭州的公积金贷款单人上限是 50 万,夫妻是 100 万。
- 公积金一个人一辈子只能用来办理两次房贷
- 如果你单身的时候,用了两次公积金贷款,那么你结婚之后, 就无法办理家庭公积金贷款了,只能是你老婆单独办理公积金贷款,贷 50 万。
- 如果你和你老婆都在结婚前已经办理了两次公积金贷款,那么婚后你们就无法在办理公积金贷款了, 只能是办理纯商业用公积金去还贷款。
- 如果你和你老婆在婚前都没有办理过公积金贷款,那么你和你老婆可以一起办理两次家庭公积金贷款, 上限 100 万的那种。
- 商业贷款利率是 LPR+上浮基点
- 商业房贷的利率是每年都在变得,因为 LPR 每个月都会变一次。我办理贷款的时候, 银行上浮的基点是 40 个基点的话, 那么我的利率就是 LPR+40.
比如今年的 LPR 4.65,那么我今天的房贷利率是 5.05。明年的 LPR 4.20 的话,那么我明年的房贷利率就变成了 4.60。
- LPR 会在每个月的 20 号进行更新,每年的房贷利率一般是根据每年 1 1 号的 LPR 来定的(也就是去年 12 20 日更新的 LPR)。
- 大部分银行都要求组合贷款只能是一个人办理,不支持父母共还。
- 意思是如果你要办理组合贷款的话,那么这个贷款必须要由你自己单独办理(或者夫妻也行),要求你自己的月收入大于月供的一倍才行。
- 当然也有少部分银行允许办理组合贷款的时候父母共还。也就是说当你的月收入没有达到月供的一倍的时候,你就需要请你的父母来一起办理贷款,你和你的父母的月收入加起来超过来月供的一倍就可以了,比如浙商银行、交通银行是支持这样的。
- 贷款并不是办理成功后就要开始还房贷,而是银行放款给开发商后, 你才需要开始还房贷。
- 公积金贷款放款需要等房子结顶后才放款(结顶是指房子主体部分已经完成,形象的说就是顶楼也盖好了)
所以说婚前买房比婚后买房要贵好多, 要多还很多贷款差了50万公积金利息多了好多。
因为婚前买房, 你只能是办理单人公积金贷款贷50万 剩下的都要办商业贷款。
而婚后买房你可以和你老婆一起办理家庭公积金贷款贷100万。
所以说婚前买房比婚后买房要贵好多, 要多还很多贷款,差了 50 万公积金,利息多了好多。
因为婚前买房, 你只能是办理单人公积金贷款,贷 50 万, 剩下的都要办商业贷款。
而婚后买房,你可以和你老婆一起办理家庭公积金贷款,贷 100 万。
我们来举个例子:
房子总价是180万。
首付是180*30% = 54万。
贷款金额是126万。
贷款年限30年。
房子总价是 180 万。
首付是 180\*30% = 54 万。
贷款金额是 126 万。
贷款年限 30 年。
单人办理贷款:
单人办理贷款:
50万公积金+76万商业贷款。
还款总额: 2260487.32
月供:6279.13
@ -146,17 +143,17 @@ group:
月供:5755.76
支付的利息:812071.89
差了**20万**的利息
差了**20 万**的利息
当时我自己算了一下, 差点就准备放弃了, 等结婚后再买吧。。。
当时我自己算了一下, 差点就准备放弃了, 等结婚后再买吧。。。
只是后来朋友和我说, 并不是每个人的公积金都能贷满50万的额度的有的人甚至没有公积金。你总不能在谈女朋友的时候先问一句你有公积金吗😂
只是后来朋友和我说, 并不是每个人的公积金都能贷满 50 万的额度的,有的人甚至没有公积金。你总不能在谈女朋友的时候先问一句你有公积金吗?😂
我觉得好有道理啊, 然后还是买吧。
申请完贷款之后,就等网签了。
办理贷款的时候我觉得我就是个工具人,只会签字画押的工具人(我的签名从楷书写到草书,因为我办理的是组合贷款, 所以很多文件我都要签4份)
办理贷款的时候我觉得我就是个工具人,只会签字画押的工具人(我的签名从楷书写到草书,因为我办理的是组合贷款, 所以很多文件我都要签 4 份)
### 网签
@ -166,86 +163,81 @@ group:
我除了签预售合同之外,还签了一个房屋装修协议、一个《前期物业服务协议》《临时管理规约》
房屋装修协议是房屋装修的一个补充协议,这里就不说了。
房屋装修协议是房屋装修的一个补充协议,这里就不说了。
《前期物业服务协议》是指在交房后到业主委员会成立并且选择新的物业之前,由开发商指定的物业暂时管理小区,是业主对物业的要求。
《临时管理规约》是物业对业主的要求。
## 贷款
## 贷款
这是我的第一个还款日,正式还了第一笔房贷。
这是我的第一个还款日,正式还了第一笔房贷。
6月初办理的贷款
6 月初办理的贷款
6月中旬 商业贷款审批完成 - 商业贷款审批完成后,银行才会把你的材料送去公积金中心审批
6 月中旬 商业贷款审批完成 - 商业贷款审批完成后,银行才会把你的材料送去公积金中心审批
6月中旬 公积金贷款审批完成 - 我的公积金贷款审批完成时间和商业贷款审批完成时间差了两天
6 月中旬 公积金贷款审批完成 - 我的公积金贷款审批完成时间和商业贷款审批完成时间差了两天
7月初 商业贷款发放
7 月初 商业贷款发放
8月初 公积金贷款发放
8 月初 公积金贷款发放
8/20 开始扣第一笔贷款,但是这个第一笔还款金额是只有商业贷款的(因为公积金放款比较晚所以8/20不需要还)
8/20 开始扣第一笔贷款,但是这个第一笔还款金额是只有商业贷款的(因为公积金放款比较晚,所以 8/20 不需要还)
8/20 银行的客户经理把我的贷款合同寄给了我。
8/20 银行的客户经理把我的贷款合同寄给了我。
## 公积金提取
## 公积金提取
公积金逾期不计入征信的, 及时补上就行.
公积金逾期不计入征信的, 及时补上就行.
### 公积金首付提取
### 公积金首付提取
在办理住房贷款后,会有一次提取公积金余额的机会.
在办理住房贷款后,会有一次提取公积金余额的机会.
全程支付宝操作,大约1-2分钟就好了,期间需要用到购房合同编号.
全程支付宝操作,大约 1-2 分钟就好了,期间需要用到购房合同编号.
申请提取后公积金基本上是秒到账,直接打到银行卡里面了.
申请提取后公积金基本上是秒到账,直接打到银行卡里面了.
[公积金提取教程](https://mp.weixin.qq.com/s/0BGXJRYuEhY5Ez0LByBKQg
)
[公积金提取教程](https://mp.weixin.qq.com/s/0BGXJRYuEhY5Ez0LByBKQg)
### 公积金自动还款
### 公积金自动还款
在提取了一次公积金之后, 就无法再通过贷款首付提取的方式提取公积金了, 接下来需要办理公积金自动还款来每个月自动提取公积金到银行卡.
在提取了一次公积金之后, 就无法再通过贷款首付提取的方式提取公积金了, 接下来需要办理公积金自动还款来每个月自动提取公积金到银行卡.
[公积金自动还款教程](https://mp.weixin.qq.com/s/klrmtu9WbAlHUsYuVn_M6Q)
## 车位
## 车位
8/20 收到了房产销售的通知
8/20 收到了房产销售的通知
小区车位要开盘了
小区车位要开盘了
小区车库有地下一层和地下二层
小区车库有地下一层和地下二层
二层的车位比一层的便宜
二层的车位是 17.5-18万左右优惠后15.5-16万左右
二层的车位是 17.5-18 万左右,优惠后 15.5-16 万左右
一层的车位是 19.5-20.5万左右优惠后17.5-18.5左右
一层的车位是 19.5-20.5 万左右,优惠后 17.5-18.5 左右
车位也是线上买(支付宝里面 筑家易 生活号),车位可以贷款买。
车位也是线上买(支付宝里面 筑家易 生活号),车位可以贷款买。
在线认购时需要交2000元定金确认后再去线下签约。
在线认购时需要交 2000 元定金,确认后,再去线下签约。
emmm... 车位比车贵系列,反正我不买,早点还掉贷款省点利息不香嘛。。。
## 总结
- 买房过程中的各种合同协议,其实我是基本看不懂的, 人家给我什么我就签什么了。
毕竟都是制式合同,也不晓得能不能签补充协议之类的。总不能因为这个就不买是吧 😂
- 签字是个体力活,建议锻炼好你的小胳膊
## 总结
- 买房之前考察一下周边环境,交通、学校、商业中心之类的, 最重要的是不要有垃圾场、化工厂之类的。至于室内布局, 大家都那样89m 的室内布局半斤八两,没啥区别。精装修的吧装修清单也就是随便看看,毕竟不会为你改变, 不满意只能是在交房之后,再去自己拆了重来。
* 买房过程中的各种合同协议,其实我是基本看不懂的, 人家给我什么我就签什么了。
毕竟都是制式合同,也不晓得能不能签补充协议之类的。总不能因为这个就不买是吧😂
- 先问清楚楼盘合作的银行有哪些、支持哪些贷款方式,比如是否需要查流水、组合贷是否支持共还之类的。计算好自己的收入证明是否能够办的下贷款。
* 签字是个体力活,建议锻炼好你的小胳膊
- 我的房子是 2021 年 12 月 31 日交房然后再装修半年2022 年 6 月才能住进去。开发商也给了一张 6 个月的物业管理费抵扣券。
* 买房之前考察一下周边环境,交通、学校、商业中心之类的, 最重要的是不要有垃圾场、化工厂之类的。至于室内布局, 大家都那样89m的室内布局半斤八两没啥区别。精装修的吧装修清单也就是随便看看毕竟不会为你改变 不满意只能是在交房之后,再去自己拆了重来。
- 贷款的利率,银行的业务经理应该是有权限稍微调整上浮基点的。因为那么多家银行,有的是 5.05,有的是 5.15,明显是 5.05 的好办。当时我问了两家银行,一家是 5.10 的, 另一家 5.05 的。然后 5.10 那家银行的业务经理跟我说也可以给我降到 5.05.
* 先问清楚楼盘合作的银行有哪些、支持哪些贷款方式,比如是否需要查流水、组合贷是否支持共还之类的。计算好自己的收入证明是否能够办的下贷款。
* 我的房子是2021年12月31日交房然后再装修半年2022年6月才能住进去。开发商也给了一张6个月的物业管理费抵扣券。
* 贷款的利率银行的业务经理应该是有权限稍微调整上浮基点的。因为那么多家银行有的是5.05有的是5.15明显是5.05的好办。当时我问了两家银行一家是5.10的, 另一家5.05的。然后5.10那家银行的业务经理跟我说也可以给我降到5.05.
* 因为是线上选房,导致我到现在都没有找到哪里能加个业主群,早知道当时线下签约的时候,多加几个业主的微信了。
- 因为是线上选房,导致我到现在都没有找到哪里能加个业主群,早知道当时线下签约的时候,多加几个业主的微信了。

View File

@ -21,7 +21,7 @@
"husky": {
"hooks": {
"pre-commit": "lint-staged",
"commit-msg": "commitlint -e HUSKY_GIT_PARAMS"
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
},
"config": {
@ -39,7 +39,7 @@
},
"repository": {
"type": "git",
"url": "https://github.com/j710328466/j710328466.github.io.git",
"url": "https://github.com/j710328466/j710328466.github.io",
"branch": "master",
"platform": "github"
},