html页面引入vue.js + elementUI 离线包快速开发前端页面

背景

需要开发一个页面,页面复杂,原生H5不熟悉。项目要求开发一键打开的html页面,不需要任何运行环境,例如node等。最后决定采用html + vue.js + elementUI离线开发。

离线包获取

vue.js离线包很多,可以通过官方文档或者百度找到下载入口。
elementUI的离线包,可以在cmd窗口,进入一个文件夹,通过命令npm i element-ui -S 安装elementui依赖包。拷出index.js,index.css和fonts文件夹放入项目中。
在这里插入图片描述

html页面引入依赖包

<head>
  <meta charset="utf-8">
  <title></title>
  <!-- vue.js -->
  <script src="./lib/vue/vue.js"></script>
  <!-- element ui -->
  <link rel="stylesheet" type="text/css" href="./lib/element/index.css" />
  <script src="./lib/element/index.js"></script>
  <!-- 项目中的局部组件文件 -->
  <script src="./js/index.js"></script>
</head>

在这里插入图片描述
在这里插入图片描述

局部组件的定义

局部组件放在html同目录js文件夹下的index.js文件中。局部组件定义使用脚手架开发.vue文件基本相同,就是template标签的内容改成template值。

var chapter = {
  template: `<div>
      <div class="chapter-head">
        <p>章节模块{{index}}</p>
        <div>
          <el-button @click="deleteChapter(index)"><i class="el-icon-delete el-icon--left"></i>删除</el-button>
          <el-button type="primary" @click="createNewChapter"><i class="el-icon-plus el-icon--left"></i>新建章节</el-button>
          <el-button type="primary" @click="toggleLesson"> {{chapterFormData.showLesson ? '收起':'展开' }}</el-button>
        </div>
      </div>
      <div :style="{display : (chapterFormData.showLesson ? 'block' :'none')}">
        <div class="chapter-form">
          <el-form ref="chapterForm" :model="chapterFormData" :rules="chapterRules" size="small" label-width="100px">
            <el-form-item label="章节名称" prop="chapterName">
              <el-input v-model="chapterFormData.chapterName" placeholder="请输入章节名称" :maxlength="50" show-word-limit
                clearable :style="{width: '100%'}"></el-input>
            </el-form-item>
            <el-form-item label="章节简介" prop="chapterIntroduction">
              <el-input v-model="chapterFormData.chapterIntroduction" type="textarea" placeholder="请输入章节简介" :maxlength="500" :rows="4"
                show-word-limit :style="{width: '100%'}"></el-input>
            </el-form-item>
          </el-form>
        </div>
        <div class="chapter-bottom">
          <el-button type="primary" @click="createNewLesson"><i class="el-icon-plus el-icon--left"></i>新增课时</el-button>
          <div style="display: flex;flex-wrap: wrap;">
            <lesson ref="lesson" class="chapter-lesson" v-for="(item,index) in chapterFormData.lessonList" :key="uuid()" 
              :index="index" :lesson-form-data="item" @delete-lesson="deleteLesson($event)"></lesson>
          </div>
        </div>
      </div>
    </div>`,
  components: {
    lesson: lesson
  },
  props: {
    // 传递的章节参数
    chapterFormData: {
      type: Object,
      default: () => {} 
    },
    // 传递的index
    index: {
      type: Number
    }
  },
  data() {
    return {
      chapterRules: {
        chapterName: [{
          required: true,
          message: '请输入章节名称',
          trigger: 'blur'
        }, {
          pattern: '^(?!_| )(?!.*?(_| )$)[a-zA-Z0-9_ \u4e00-\u9fa5]{2,50}$',
          message: '章节名称只能用汉字、数字、字母、下划线、空格,且不能以下划线或空格开头结尾,长度2-50位',
          trigger: 'blur'
        }],
      },
    }
  },
  methods: {
    // 新建章节
    createNewChapter() {
      this.$emit("create-new-chapter")
    },
    // 删除章节
    deleteChapter(index) {
      this.$emit("delete-chapter", index)
    },
    // 新增课时
    createNewLesson() {
      this.chapterFormData.lessonList.push({
        lessonName: undefined,
        studyHours: "5",
        lessonType: "1",
        lessonDifficulty: "1",
        experimentType: "1",
        operationType: "1",
        sceneName: undefined,
        operationNum: '30',
        coursewareType: "1",
        video: undefined,
        file: undefined,
        lessonIntroduction: undefined,
        videoList: [],
        fileList: [],
      })
    },
    // 删除课时
    deleteLesson(index) {
      this.chapterFormData.lessonList.splice(index, 1)
    },
    // lesson显示切换
    toggleLesson() {
      this.chapterFormData.showLesson = !this.chapterFormData.showLesson
    },
  }
}

注意

css文件全部放在html页面
在这里插入图片描述

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Element UI 中,可以使用 `indeterminate` 属性来实现半勾选状态。当某个节点的子节点被选中部分时,父节点可以显示成半勾选状态。 要在 Element UI 中使用半勾选状态,需要: 1. 在数据源中添加 `indeterminate` 字段,用来表示半勾选状态。 2. 在节点的渲染模板中,通过 `:indeterminate` 绑定到数据源的 `indeterminate` 字段,以实现动态控制半勾选状态的效果。 3. 通过监听节点的选中事件来更新父节点和子节点的半勾选状态。 以下是一个示例代码: ```html <template> <div> <el-tree :data="data" :props="defaultProps" node-key="id" @check-change="handleCheckChange" ></el-tree> </div> </template> <script> export default { data() { return { data: [ { id: 1, label: '节点1', children: [ { id: 11, label: '子节点1-1', children: [ { id: 111, label: '子节点1-1-1', }, { id: 112, label: '子节点1-1-2', }, ], }, { id: 12, label: '子节点1-2', }, ], }, // 其他节点... ], defaultProps: { children: 'children', label: 'label', indeterminate: 'indeterminate', }, }; }, methods: { handleCheckChange(data, checkedNodes) { // 更新节点的半勾选状态 this.updateIndeterminateState(this.data); }, updateIndeterminateState(nodes) { nodes.forEach((node) => { const children = node.children; const hasChecked = children.some((child) => child.checked === true); const hasUnchecked = children.some((child) => child.checked === false); if (hasChecked && hasUnchecked) { node.indeterminate = true; } else if (hasChecked) { node.indeterminate = false; node.checked = true; } else if (hasUnchecked) { node.indeterminate = false; node.checked = false; } else { node.indeterminate = false; node.checked = false; } if (children && children.length > 0) { this.updateIndeterminateState(children); } }); }, }, }; </script> ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值