vue开发todolist

todolist 开发流程

  1. 框架: Vue.js
  2. 组件库:SUI-mobile
tips
  1. 利用事件冒泡来实现mask的关闭
  2. tab选项卡效果切换–使用计算属性过滤值
  3. 减少使用margin,多使用padding,因为移动端有时会失效
  4. 弹出框绝对居中
    position: absolute;
    left:0;top:0;right:0;bottom:0;
    margin:auto;
    
  5. css类名规则:BEM,OOCSS
  6. .circle.circle-success 两个类名中间没有空格,是捆绑类名,即两个类型同时存在才生效
  7. input自动获得焦点html中autofocus属性
  8. 短路操作性能比三元运算高
    <p :class = "[size, flag?bg:color ]"></p>
    <p :class = "[size, flag && bg || color ]"></p>
    
html代码
<div class="page-group">
      <div class="page page-current">
      <!-- 你的html代码 -->
      <!-- header -- start -->
        <header class="bar bar-nav">
          <a class="icon icon-star pull-left"></a>
          <a class="icon icon-edit pull-right"
            @click = "inputFlag = !inputFlag"
          ></a>
          <h1 class="title"> todolist </h1>
        </header>
      <!-- header -- end -->

      <!-- content --  start  -->
        <section>
          <div class="content">
            <input type="text" 
              v-show = "inputFlag" 
              v-model = 'val' 
              placeholder="请输入代办事项"
              @keyup.13 = "addItem"
            >
            <div class="card"
              v-for = "( item,index ) in newTodos"
            >
              <div class="card-content">
                <div class="card-content-inner">
                  <p> {{ item.task }} </p>
                  <div class="btn-box">
                    <button class = "button button-danger pull-right"
                      @click = "check( index )"
                    >
                      <i class = "icon icon-remove"></i>
                    </button>
                    <button class = "button button-success pull-right"
                      :class = "[ item.flag && 'button-fill' ]"
                      @click = " item.flag = !item.flag "
                    >
                      <i class = "icon icon-check"></i>
                    </button>
                  </div>
                </div>
              </div>
            </div>
          </div>
        </section>
      <!-- content --  end  -->
      

        <div class="mask-box"
          v-show = "maskFlag"
          @click = "maskFlag = false"
        >
          <div class="mask-bg"></div>
          <div class="mask-content">
            <p> 您确定要删除吗? </p>
            <button class = "button button-fill button-danger pull-right"
              @click = "ensure( activeIndex )"
            > 确定 </button>
          </div>
        </div>

      <!-- tabbar -- start  -->
        <div class="tab-bar">
          <ul>
            <li class = "circle"
              v-for = " item in tabbars "
              :class = "[ 'circle-'+item.style, type === item.text && 'circle-fill'  ]"
              @click = " type = item.text "
            > 
              {{ item.text }}
            </li>
          </ul>
        </div>
      <!-- tabbar -- end -->
        
    </section>
  </div>
js代码
new Vue({
  el: '.page-group',
  data: {
    todos: [
      {
        id: 1,
        task: '任务一',
        flag: true
      },
      {
        id: 2,
        task: '任务二',
        flag: true
      }
    ],
    inputFlag: false,
    val: '',
    maskFlag: false,// 遮罩的开关
    activeIndex: 0,
    type: 'A',
    tabbars: [
      {
        id: 1,
        text: 'A',
        style: 'all'
      },
      {
        id: 2,
        text: 'F',
        style: 'finish'
      },
      {
        id: 3,
        text: 'U',
        style: 'unfinish'
      }
    ]
  },
  methods: {
    flagChange ( i ) { //是用来切花卡片 中的 开关
      this.todos[ i ].flag = !this.todos[ i ].flag
    },
    check ( index ) { // 当我们点击删除按钮时,判断用户任务完成状态
      if ( this.todos[index].flag ) {
        //证明已经完成了,可以直接删除

        this.remove( index )

      } else {
        // 证明是没有完成的,不可以直接删除,我们得出用户友好提示
        this.activeIndex = index 
        this.maskFlag = true

      }
    },
    remove ( index ) {
      this.todos.splice( index, 1 )
    },
    addItem () {
      this.todos.push({
        id: this.todos.length + 1,
        task: this.val
      })
      this.val = ''
      this.inputFlag = false
    },
    ensure ( index ) { //它是遮罩里面的确定按钮上执行的事件
      this.remove( index )
    }

  },
  computed: {
    allTodos () {
      // 所有任务
      return this.todos 
    },
    finishTodos () {
      //表示已经完成的任务
      return this.todos.filter( item => item.flag && item )
    },
    unfinishTodos () {
      // 表示未完成的任务
      return this.todos.filter ( item => !item.flag && item )
    },
    newTodos () {
       switch ( this.type ) {
         case 'A':
           return this.allTodos
           break;
         case 'F':
           return this.finishTodos 
           break;
         case 'U': 
           return this.unfinishTodos
           break;
         default:
           break;
       }
    }
  }
})
03-28
### MCP API 的文档与使用教程 MCP 是一种用于增强大型语言模型 (LLM) 功能的技术框架,它通过提示(Prompts)、资源(Resources)以及工具(Tools)这三种核心原语来扩展 LLM 能力[^2]。Apifox 平台也认识到 MCP 技术在 API 开发领域的重要作用,并将其应用于实际场景中[^1]。 为了实现将 `/Users/syw/project/wechatAr` 文件夹下的所有文件上传至远程服务器 `47.93.xx.xx` 用户名 `root` 下的 `/opt/ll` 目录的操作,可以基于 MCP 工具功能构建一个自定义的服务逻辑。以下是具体实现方法: #### 实现方案 利用 SCP 命令完成文件传输任务,并结合 MCP 的 Tool 功能封装此操作以便于后续调用。当关键词为“上传微信目录”时,触发该工具执行相应动作。 ```python import subprocess def upload_wechat_directory(): source_dir = "/Users/syw/project/wechatAr/*" target_server = "root@47.93.xx.xx:/opt/ll/" try: result = subprocess.run(["scp", "-r", source_dir, target_server], check=True) return {"status": "success", "message": f"All files from {source_dir} have been uploaded to {target_server}"} except Exception as e: return {"status": "error", "message": str(e)} # 将上述函数注册为 MCP 中的一个 tool tools = { "upload_wechat_directory_tool": upload_wechat_directory, } # 定义 prompt 和 resource 配置部分省略... ``` 以上代码片段展示了如何创建一个名为 `upload_wechat_directory_tool` 的工具并将其集成到 MCP 系统里去[^3]。每当接收到匹配条件的消息比如含有特定关键字的时候就会激活对应的行为即启动SCP进程从而达成目标需求。 #### 进一步学习资料推荐 对于希望深入研究或者实践更多关于 MCP 应用案例的人士来说,《MCP 教程进阶篇》提供了丰富的实例分析和技术细节值得参考阅读;另外《MCP 极简入门:超快速上手运行简单的 MCP 服务和 MCP 客户端》同样是非常好的起点材料之一可以帮助初学者迅速掌握基础概念及其运作机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值