实习踩坑记录

实战广场超级推荐!!:https://learngitbranching.js.org/?locale=zh_CN

revert和reset得区别

https://www.jb51.net/article/192271.htm

revert为撤销前面某一版本得commit,但记录不取消

入门链接:https://juejin.cn/post/6869519303864123399

https://juejin.cn/post/6974184935804534815

https://vue3js.cn/interview/git/conflict.html#%E4%BA%8C%E3%80%81%E5%88%86%E6%9E%90

https://www.liaoxuefeng.com/wiki/896043488029600/900004111093344

1.初始化项目1

git init

2.建立本地仓库和远程仓库的连接

git remote add origin 远程仓库URL

3.将码云上的仓库pull到本地

git pull origin 分支名称

4.创建并切换分支,这里和远程仓库的分支要一致(选择指定推送的分支,使用git branch可以查看分支)

git checkout -b 分支名称

5.将文件加载到暂存区(如果add错了可以使用git rm --cached 文件名 删除添加的文件)

git ad

6.将文件提交到本地仓库(-m 为描述信息)

git commit -m "Initial commit"

7.将本地仓库推送到远程仓库

git push origin 分支名称

拉代码:

git clone -b 指定分支 url

git 推送:

git add . 添加缓存区

git status 查看状态

git commit -m 'feat: ' 加上工号版本号提交

git push --set-upstream origin xuechunhai

git branch --set-upstream-to=origin/branch

利用此命令和远端仓库对应的分支进行关联,此后就可以对远端对应的分支进行git push和git pull操作

master分支的代码领先自己的分支,git 如何把master分支代码合并到自己的分支

新建分支 checkout -b 分支名

        1.首先切换到主分支

        git checkout master

        2.使用git pull 把领先的主分支代码pull下来

        git pull

        3.切换到自己的分支

        git checkout xxx(自己的分支)

        4.把主分支的代码merge到自己的分支

        git merge master

        5.git push推上去ok完成,现在 你自己分支的代码就和主分支的代码一样了

        git push origin 自己分支名

拉代码之后要用git stash https://blog.csdn.net/qazw9600/article/details/106697082

git强制覆盖本地代码(与git远程仓库保持一致)

https://juejin.cn/post/7040638672584048671

git fetch --all
git reset --hard origin/master
git pull

正确用法:

git checkout dev

git pull

git checkout xuechunhai

git reset --hard e89aece446771a80

git add .

git commit

git push -f

更改提交

https://blog.csdn.net/the_power/article/details/104651772/

git rebase -I hash序号之后的提交。 将pick改为fixup。 之后wq。git push -f

git rebase -i HEAD~5 最近的5条

! [rejected] xuechunhai -> xuechunhai (non-fast-forward)的解决方法。本地的版本低于 -f 直接强制

更改已经push的 http://www.manongjc.com/detail/26-zubvagkfcxnowbl.html

在gitlab提交合并请求到dev 注意不是main

  • 打开项目仓库,点击右侧 new merge request
  • 选择合入分支和 review code 的成员
  • 提交合入请求,等待合入。

打包提测流程:

pom.xml改版本号。 <groupId>com.meizu.coins</groupId> <version>2.1.3-RC01</version> rc包或者快照包

到gitlab-cli找地址 http://jenkins.int.rnd.meizu.com:8080/jenkins/

commit提交合并到dev再合并到master。 到master后可以进入jenkins立即构建,即可构建出包

到crp提测 选择测试后端前端运营人员跟踪。 提测成功后发布 ,一样 要上传打包好的文件

双向绑定的表单验证的星号

https://blog.csdn.net/qq_40409143/article/details/110150008

3个地方要同步,才会有检验配置生效

rules中的属性名

标签中的name名字

model的属性名,此为tsx的写法。 ( 文档中每个标签用v-bind绑定v-bind="validateInfos.name"来显示下方的提示)

错误版本:

     const rulesRef = reactive({//rules中的属性名也要跟下面标签中的name一样,否则不会有星号
      describeType: [{ type: 'number', required: true }],
      urlAddress: [{ type: 'string', required: true,message: '请输入url'}],
      pushTitle: [{ type: 'string', required: true, message: '请输入推送标题'}],
      showMessage: [{ type: 'string', required: true, message: '请输入摘要'}],
    })




<AForm rules={this.rulesRef} model={this.formState}> //model绑定数组不可以去除。去除也仍存在星号,但逻辑不对
          <AForm.Item label='展示方式' name='showType'>
            通知栏
          </AForm.Item>
          <AForm.Item label='描述类型' name='describeType'>
            <ASelect
              placeholder='请选择'
              style={{ width: '100px' }}
              v-model={[this.formState.describeType, 'value']}
              onChange={this.onChange}>
              <ASelect.Option value={1}>公告页</ASelect.Option>
              <ASelect.Option value={2}>首页</ASelect.Option>
              <ASelect.Option value={3}>我的tab页</ASelect.Option>
              <ASelect.Option value={4}>零钱页</ASelect.Option>
              <ASelect.Option value={5}>提现页</ASelect.Option>
            </ASelect>
          </AForm.Item>
          <AForm.Item
            label='URL:'
            name='urlAddress'
            labelCol={this.labelCol}
            wrapperCol={this.wrapperCol}
            labelAlign='left'>
            <AInput
            disabled={!this.formState.showUrl}
              placeholder='请输入url'
              v-model={[this.formState.urlAddress, 'value']}></AInput>
          </AForm.Item>
          <AForm.Item
            label='推送标题:'
            name='pushTitle'
            labelCol={this.labelCol}
            wrapperCol={this.wrapperCol}
            labelAlign='left'>
            <AInput
              placeholder='请输入标题'
              v-model={[this.formState.pushTitle, 'value']}></AInput>
          </AForm.Item>
          <AForm.Item
            label='摘要:'
            name='showMessage'
            labelCol={this.labelCol}
            wrapperCol={this.wrapperCol}
            labelAlign='left'>
            <AInput
              placeholder='请输入摘要'
              v-model={[this.formState.showMessage, 'value']}></AInput>
          </AForm.Item>
          <AForm.Item
            label='JSON:'
            name='json'
            labelCol={this.labelCol}
            wrapperCol={this.wrapperCol}
            labelAlign='left'></AForm.Item>
          <ASpace size={10} class={style.bottom}>
            <AButton
              type='primary'
              onClick={this.onBuildJSON}
              size='large'
              shape='round'>
              生成JSON
            </AButton>
            <AButton
              class={style.buttom2}
              type='primary'
              size='large'
              shape='round'
              onClick={this.copyJSON}>
              复制JSON
            </AButton>
          </ASpace>
        </AForm>


正确版本:

name属性要配置和formData中的一致

model属性只能form表单标签使用,建议细看文档吧。。。很多坑都在文档的属性或者api里面,踩一下午坑

import { defineComponent, reactive, ref, UnwrapRef ,toRaw} from '@vue/runtime-core'
import {
  Button as AButton,
  Select as ASelect,
  Table as ATable,
  Space as ASpace,
  Modal as AModal,
  Form as AForm,
  Input as AInput,
  Upload as AUpload,
  message,
  InputNumber as AInputNumber,
  Form,
  Input,
  Switch,
  Divider,
} from 'ant-design-vue'
import { MFormView } from '~components/form-view'
import style from './push.module.less'
import { PushObj, postDataByKey } from '~libs/fetch/push'
import { deepClone } from '~libs/utils'


const pushObj: PushObj = {
  describeType: 1,
  urlAddress: '',
  pushTitle: '',
  showMessage: '',
  showUrl: true,
}
const useForm=AForm.useForm

const MUSTSTRING = { type: 'string', required: true }

export default defineComponent({
  setup() {
    const data = { ...pushObj }
    let formState: UnwrapRef<PushObj> = reactive(data)
    const labelCol = { span: 3 }
    const wrapperCol = { span: 13 }
    const formRef = ref()





    const rulesRef = {
      describeType: [{ type: 'number', required: true }],
      urlAddress: [{ ...MUSTSTRING,message: '请输入url'}],
      pushTitle: [{ ...MUSTSTRING, message: '请输入推送标题'}],
      showMessage: [{ ...MUSTSTRING, message: '请输入摘要'}],
    }

    

    const onBuildJSON = async () => {
      try {
   
        await formRef.value?.validate()
        const postData= deepClone(toRaw(formState))

    
      } catch {}
    }




    const onChange = (value) => {
      switch (value) {
        case 1:
          formState.showUrl = true
          formState.urlAddress = ''
          break
        case 2:
          formState.showUrl = false
          formState.urlAddress =
            'bigearner://com.uworter.bigearner/scheme?firstPage=mainTab'
          break
        case 3:
          formState.showUrl = false
          formState.urlAddress =
            'bigearner://com.uworter.bigearner/scheme?firstPage=mineTab'
          break
        case 4:
          formState.showUrl = false
          formState.urlAddress =
            'bigearner://com.uworter.bigearner/scheme?firstPage=chargePage'
          break
        case 5:
          formState.showUrl = false
          formState.urlAddress =
            'bigearner://com.uworter.bigearner/scheme?firstPage=withdrawPage'
          break
      }
    }
    const copyJSON=()=>{
      let val =copyText('123123')
      if(val===true){
        message.success('复制成功')
      }
    }

    const copyText=(value)=> {
      if (value == null || value === '') return false
      var textarea = document.createElement('textarea')
      textarea.value = value
      document.body.appendChild(textarea)
      textarea.focus()
      textarea.setSelectionRange ? textarea.setSelectionRange(0, textarea.value.length) : textarea.select()
      var result = document.execCommand('copy')
      document.body.removeChild(textarea)
      return result
    }




    return {
      formState,
      labelCol,
      wrapperCol,
      rulesRef,
      formRef,
      onBuildJSON,
      onChange,
      copyJSON,
    }
  },
  methods: {
    renderBody() {
      return (
        <AForm ref='formRef' rules={this.rulesRef} model={this.formState}>//ref获取这个标签节点,并给此节点绑定rules规则, model is required for validateFields to work.
          <AForm.Item label='展示方式' name='showType'>
            通知栏
          </AForm.Item>
          <AForm.Item label='描述类型' name='describeType'>
            <ASelect
              placeholder='请选择'
              style={{ width: '100px' }}
              v-model={[this.formState.describeType, 'value']}
              onChange={this.onChange}
              >
              <ASelect.Option value={1}>公告页</ASelect.Option>
              <ASelect.Option value={2}>首页</ASelect.Option>
              <ASelect.Option value={3}>我的tab页</ASelect.Option>
              <ASelect.Option value={4}>零钱页</ASelect.Option>
              <ASelect.Option value={5}>提现页</ASelect.Option>
            </ASelect>
          </AForm.Item>
          <AForm.Item
            label='URL:'
            name='urlAddress'
            labelCol={this.labelCol}
            wrapperCol={this.wrapperCol}
            labelAlign='left'
            >
            <AInput
            disabled={!this.formState.showUrl}
              placeholder='请输入url'
              v-model={[this.formState.urlAddress, 'value']}></AInput>
          </AForm.Item>
          <AForm.Item
            label='推送标题:'
            name='pushTitle'
            labelCol={this.labelCol}
            wrapperCol={this.wrapperCol}
            labelAlign='left'>
            <AInput
              placeholder='请输入标题'
              v-model={[this.formState.pushTitle, 'value']}></AInput>
          </AForm.Item>
          <AForm.Item
            label='摘要:'
            name='showMessage'
            labelCol={this.labelCol}
            wrapperCol={this.wrapperCol}
            labelAlign='left'
            >
            <AInput
              placeholder='请输入摘要'
              v-model={[this.formState.showMessage, 'value']}></AInput>
          </AForm.Item>
          <AForm.Item
            label='JSON:'
            name='json'
            labelCol={this.labelCol}
            wrapperCol={this.wrapperCol}
            labelAlign='left'></AForm.Item>
          <ASpace size={10} class={style.bottom}>
            <AButton
              type='primary'
              onClick={this.onBuildJSON}
              size='large'
              shape='round'>
              生成JSON
            </AButton>
            <AButton
              class={style.buttom2}
              type='primary'
              size='large'
              shape='round'
              onClick={this.copyJSON}>
              复制JSON
            </AButton>
          </ASpace>
        </AForm>
      )
    },
  },

  render() {
    const slots = {
      default: this.renderBody,
    }
    return (
      <MFormView title='运营push' v-slots={slots}>
        <div>hello</div>
      </MFormView>
    )
  },
})



mac快捷键:

command +d 选中最近的变量一键修改

command + shift +l 一键修改全部变量

command + 左键 跳转到定义

command + f 搜索

command + / 注释

阅读剩余
THE END