【Vue2 + ElementUI】el-table中校验表单

news2024/11/26 21:29:00

一. 案例

  1. 校验金额
    阐述:校验输入的金额是否正确。如下所示,点击【编辑图标】会变为input输入框当,输入金额。当输入框失去焦点时,若正确则调用接口更新金额且变为不可输入状态,否则返回不合法金额提示
    在这里插入图片描述
<template>
  <el-table v-loading="tableLoading" :data="dataList" row-key="id" @cell-click="cellClick" :row-class-name="tableRowClassName" :cell-class-name="tableCellClassName">
    <el-table-column show-overflow-tooltip label="额度(元)">
      <template slot-scope="scope">
        <el-tooltip effect="dark" :content="scope.row.amt > 0 ? `已设置无法更改` : `点击输入金额`" placement="top">
          <div v-if="scope.row.index === rowIndex && scope.column.index === columnIndex">
            <el-input ref='editInput' v-model="scope.row.amt" @blur="inputBlur(scope.row)" size="mini" placeholder="输入额度" clearable></el-input>
          </div>
          <div v-else>
			<span> {{ scope.row.amt| parseFormatNum }}</span>
            <span v-show="scope.row.amt== 0"><i style="color:#409eff" class="el-icon-edit"></i></span>
          </div>
        <el-tooltip>
      </template>
    </el-table-column>
  </el-table>
</template>

<script>
// 此处引入金额转换后的格式,引入的js文件放于文末
import { parseFormatNum } from "@/utils/index";
// 此处引入接口,更新对应金额
import {updateAmt} from "@api/xxx"
  export default {
    data() {
      return {
        rowIndex: -1, // 行索引
        columnIndex: -1, // 列索引 
        tableLoading:false, 
        dataList:[],  
        query:{
        	pageSize:10,
        	pageNum:1
        },
        totalSize:0,
        validAmt:null, // 校验金额:符合 true ; 不符合 false
      }
    },
    mounted() {
        this.fetchData()
    },
    filters: {
    	parseFormatNum(number) {
      		return parseFormatNum(number);
    	},
    },
    methods: {
        /**
        *初始化列表数据
        /
        fetchData(){
        	this.tableLoading = true
        	getList(this.query).then(res=>{
        		this.tableLoading = false
        		this.dataList = res.data.list
        		this.totalSize = res.data.total
        	})
        },
        
    	/**
     	* 把每一行的索引加到行数据中
     	*/
    	tableRowClassName({ row, rowIndex }) {
      		row.index = rowIndex
    	},

    	/**
     	* 把每一列的索引加到列数据中
     	*/
    	tableCellClassName({ column, columnIndex }) {
    	    column.index = columnIndex
    	},

    	/**
     	* 单元格被点击时会触发该事件
     	*/
    	cellClick(row, column) {
      		if (column.label == '额度(元)' && row.cancelVerificationLimit == 0) {
       	 		this.rowIndex = row.index
        		this.columnIndex = column.index
        		this.$nextTick(() => {
          			this.$refs['editInput'].focus()//没有自动聚焦效果的话可能是这里出现问题 需要打印出来看一下
        		})
      		}
   	 	},

	    /**
    	 * 修改供应商免核销额度并校验金额
    	 */
	    inputBlur(row) {
   	    	const reg = /^[0-9,"."]{1,20}$/
      		this.validAmt = reg.test(row.cancelVerificationLimit)
      		if (this.validAmt && row.cancelVerificationLimit > 0) {
        	// 传一个主键id以及输入额度即可
        	updateAmt(row.id, row.amt).then(res => {
          		if (res.success) {
            		this.$notify.success({
              			title: this.$t("message.success"),
              			message: res.message
            		});
            		this.rowIndex = -1
            		this.columnIndex = -1
            		this.validAmt = false
          			}
        		})
      			} else {
        			this.validAmt = false
       			 	row.amt = 0
        			this.$message.error("请输入正确格式的金额")
        			return
      			}
    		},
    	},
  }
</script>

  1. 校验时间
    阐述:选择的时间是否小于当前时间,若是则选择后立即禁用
    在这里插入图片描述
<template>
	<table v-loading="tableLoading" :data="dataList" row-key="id" >
		  <el-table-column align="left" prop="time" label="时间">
            <template #default="{ row }">
              <el-tooltip class="item" effect="dark" :content="fittleTime(row.time)
                ? `已经启用 无法更改`
                : `点击修改`
                " placement="top">
                <el-date-picker v-model="row.time" @change="updateTime(row)"
                  :disabled="fittleTime(row.time)" :picker-options="pickerOptions" value-format="yyyy-MM-dd"
                  size="mini" style="width: 150px" type="date" placeholder="选择日期时间">
                </el-date-picker>
              </el-tooltip>
            </template>
          </el-table-column>
	</table>
</template>

<script>
// 引入对应接口
import {updateTime} from "@/api/xxx"
export default{
	data(){
		return{
			tableLoading:false,
			dataList:[],
        	query:{
        		pageSize:10,
        		pageNum:1
        	},
			pickerOptions: {
        		disabledDate(time) {
          			return time.getTime() < Date.now();
        		}
      		},
		}
	},
	mounted() {
        this.fetchData()
    },
    methods: {
        /**
        *初始化列表数据
        /
        fetchData(){
        	this.tableLoading = true
        	getList(this.query).then(res=>{
        		this.tableLoading = false
        		this.dataList = res.data.list
        		this.totalSize = res.data.total
        	})
        },
        
		/**
     	* 判断是否禁用虚拟记账薄启用时间
     	* @param {Date} time 
     	*/
    	fittleTime(time) {
      		if (time != null) {
       			let dbTime = new Date(time);
        		let nowTime = new Date();
        		return dbTime <= nowTime;
      		}
    	},

		/**
     	* 修改供应商虚拟机账簿启用时间
     	*/
    	updateTime(row) {
      	 if (!row.time) return this.$message.error("请选择启用时间");
      		updateTime(row.id, row.time).then(res => {
        		this.$message({
          			type: res.code == 200 ? "success" : "error",
          			message: res.message
        		});
      		});
    	 },
	}
}
</script>
  1. 校验不同层级所输入的内容
    阐述:当一级下 无 二级子目录时就可直接添加表,若有允许先添加材料,再通过二级子目录添加表
    在这里插入图片描述
<template>
	<el-card>
		 // 表头
		 <el-row class="catelog-header" :gutter="20" :span="24">
          <el-col v-for="item in catelogHeaderList" :key="item.id" class="catelog-sub-header" :span="item.span">
            {{ item.title }}
          </el-col>
        </el-row>
        <!--表单校验-->
        <el-row style="margin-left: -10px; margin-right: -10px">
          <el-form
            ref="catelogSettingForm"
            class="descriptions-form"
            inline-message
            :model="catelogUserForm"
            :rules="catalogCollectionRules"
          >
            <!-- 一级目录 -->
            <el-row
              v-for="(item, index) in catelogUserForm.catelogSysList"
              :key="item.id"
              class="catelog-form-border"
            >
              <el-row class="catelog-align catelog-border">
                <el-col :span="1" style="margin-left: 10px">
                  {{ (index + 1) | numberFilter }}
                </el-col>
                <el-col class="catelog-item-font" :span="7">
                  {{ item.catamanageName }}
                  // 判断是否添加材料(如图所示的 +)
                  <el-button
                    v-show="
                      (item.code == 'ARCHIVE_PERSON' &&
                        item.children.length == 0) ||
                      (item.children.length > 0 &&
                        item.children[0].code == 'ARCHIVE_TABLE')
                    "
                    size="mini"
                    style="margin-left: 10px"
                    type="text"
                    @click="handleAddCatelogUser(item)"
                  >
                    <vab-icon
                      icon="add-circle-fill"
                      style="font-size: 18px !important"
                    />
                  </el-button>
                </el-col>
              </el-row>
              <!-- 二级目录 -->
              <vab-draggable
                :data-id="`${item.id}`"
                v-bind="dragOptions"
                :disabled="disabledDrag"
                :group="{
                  put: false,
                }"
                :list="item.children"
                @end="onEnd"
              >
                <el-row
                  v-for="(childrenItem, childrenIndex) in item.children"
                  :key="childrenIndex"
                  class="children-item"
                >
                  <el-row
                    v-if="childrenItem.code == 'ARCHIVE_PERSON'"
                    class="catelog-align"
                    :gutter="30"
                  >
                    <el-col
                      :span="1"
                      style="font-size: xx-small; margin-left: 10px"
                    >
                      <div v-if="childrenItem.code == 'ARCHIVE_PERSON'">
                        {{ index + 1 }} - {{ childrenIndex + 1 }}
                      </div>
                      <div v-else>
                        {{ childrenIndex + 1 }}
                      </div>
                    </el-col>
                    <el-col class="catelog-table-border" :span="7">
                      <el-form-item>
                        {{ childrenItem.catamanageName }}
                        <el-button
                          size="mini"
                          style="margin-left: 10px"
                          type="text"
                          @click="handleAddCatelogUser(childrenItem)"
                        >
                          <vab-icon
                            icon="add-circle-fill"
                            style="font-size: 18px !important"
                          />
                        </el-button>
                      </el-form-item>
                    </el-col>
                  </el-row>
                  <div v-else style="cursor: move">
                    <el-row class="catelog-align" :gutter="30">
                      <el-col
                        :span="1"
                        style="font-size: xx-small; margin-left: 10px"
                      >
                        <div v-if="childrenItem.code == 'ARCHIVE_PERSON'">
                          {{ index + 1 }} - {{ childrenIndex + 1 }}
                        </div>
                        <div v-else>
                          {{ childrenIndex + 1 }}
                        </div>
                      </el-col>
                      <el-col class="catelog-table-border" :span="5">
                        <el-form-item>
                          {{ childrenItem.name }}
                        </el-form-item>
                      </el-col>
                      <el-col :span="5">
                        <el-form-item
                          :prop="`catelogSysList[${index}].children[${childrenIndex}].catamanageName`"
                          :rules="{
                            required: true,
                            message: '材料名称不能为空',
                            trigger: 'change',
                          }"
                        >
                          <el-input
                            v-model="childrenItem.catamanageName"
                            clearable
                            placeholder="请输入材料名称"
                          />
                        </el-form-item>
                      </el-col>
                      <el-col :span="3">
                        <el-form-item
                          :prop="`catelogSysList[${index}].children[${childrenIndex}].treeFormationTime`"
                          :rules="{
                            required: true,
                            message: '请使用 - 分割年月日分',
                            pattern:
                              /(^[1-2][0-9][0-9][0-9]-([1][0-2]|0?[1-9])-([12][0-9]|3[01]|0?[1-9])$)|(^[1-2][0-9][0-9][0-9]-([1][0-2]|0?[1-9])$)|(^[1-2][0-9][0-9][0-9]$)/,
                            trigger: 'change',
                          }"
                        >
                          <el-input
                            v-model="childrenItem.treeFormationTime"
                            clearable
                            placeholder="示例:2023-01-01"
                          />
                        </el-form-item>
                      </el-col>
                      <el-col :span="2">
                        <el-form-item
                          :prop="`catelogSysList[${index}].children[${childrenIndex}].pagesNum`"
                          :rules="[
                            {
                              required: true,
                              message: '页数不能为空',
                              pattern: /^[1-9]\d*$/,
                              trigger: 'change',
                            },
                          ]"
                        >
                          <el-input
                            v-model="childrenItem.pagesNum"
                            clearable
                            placeholder="页数"
                          />
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item>
                          <el-input
                            v-model="childrenItem.remark"
                            clearable
                            placeholder="请输入备注"
                          />
                        </el-form-item>
                      </el-col>
                      <el-col :span="2" style="text-align: center">
                        <el-form-item>
                          <el-button
                            icon="el-icon-view"
                            type="text"
                            @click="
                              handleDelete(
                                index,
                                childrenItem,
                                childrenIndex,
                                'del'
                              )
                            "
                          >
                            删除
                          </el-button>
                        </el-form-item>
                      </el-col>
                    </el-row>
                  </div>

                  <!-- 三级目录 -->
                  <vab-draggable
                    v-bind="dragOptions"
                    :data-id="`${
                      childrenItem.id + '-' + childrenItem.parentId
                    }`"
                    :list="childrenItem.children"
                    @end="onEnd"
                  >
                    <el-row
                      v-for="(innerItem, innerIndex) in childrenItem.children"
                      :key="innerItem.id"
                      class="catelog-align"
                      :gutter="30"
                      style="cursor: move; border-top: 1px solid #8eaac6"
                    >
                      <el-col
                        :span="1"
                        style="font-size: xx-small; margin-left: 10px"
                      >
                        <div>{{ innerIndex + 1 }}</div>
                      </el-col>
                      <el-col
                        :span="5"
                        style="
                          border-left: 1px solid #8eaac6;
                          padding-left: 10px !important;
                        "
                      >
                        <el-form-item style="padding-left: 10px !important">
                          {{ innerItem.name }}
                        </el-form-item>
                      </el-col>
                      <el-col :span="5">
                        <el-form-item
                          :prop="`catelogSysList[${index}].children[${childrenIndex}].children[${innerIndex}].catamanageName`"
                          :rules="{
                            required: true,
                            message: '材料名称不能为空',
                            trigger: 'change',
                          }"
                        >
                          <el-input
                            v-model="innerItem.catamanageName"
                            clearable
                            placeholder="请输入材料名称"
                          />
                        </el-form-item>
                      </el-col>
                      <el-col :span="3">
                        <el-form-item
                          :prop="`catelogSysList[${index}].children[${childrenIndex}].children[${innerIndex}].treeFormationTime`"
                          :rules="{
                            required: true,
                            message: '请使用 - 将年月日分割',
                            pattern:
                              /(^[1-2][0-9][0-9][0-9]-([1][0-2]|0?[1-9])-([12][0-9]|3[01]|0?[1-9])$)|(^[1-2][0-9][0-9][0-9]-([1][0-2]|0?[1-9])$)|(^[1-2][0-9][0-9][0-9]$)/,
                            trigger: 'change',
                          }"
                        >
                          <el-input
                            v-model="innerItem.treeFormationTime"
                            clearable
                            placeholder="示例:2023-01-01"
                          />
                        </el-form-item>
                      </el-col>
                      <el-col :span="2">
                        <el-form-item
                          :prop="`catelogSysList[${index}].children[${childrenIndex}].children[${innerIndex}].pagesNum`"
                          :rules="[
                            {
                              required: true,
                              message: '页数不能为空',
                              pattern: /^[1-9]\d*$/,
                              trigger: 'change',
                            },
                          ]"
                        >
                          <el-input
                            v-model="innerItem.pagesNum"
                            clearable
                            placeholder="页数"
                          />
                        </el-form-item>
                      </el-col>
                      <el-col :span="6">
                        <el-form-item>
                          <el-input
                            v-model="innerItem.remark"
                            clearable
                            placeholder="请输入备注"
                          />
                        </el-form-item>
                      </el-col>
                      <el-col :span="2" style="text-align: center">
                        <el-form-item>
                          <el-button
                            icon="el-icon-view"
                            type="text"
                            @click="
                              handleDelete(
                                index,
                                innerItem,
                                childrenIndex,
                                innerIndex
                              )
                            "
                          >
                            删除
                          </el-button>
                        </el-form-item>
                      </el-col>
                    </el-row>
                  </vab-draggable>
                </el-row>
              </vab-draggable>
            </el-row>
          </el-form>
        </el-row>
        <ArchiveCatelogUserTable  ref="catelogUser"/>
	</el-card>
</template>
<script>
// 引入将阿拉伯数字转为中文的js文件
 import { numberToChinese } from '@/utils/index'
 // 允许同级目录进行拖拽排序
 import VabDraggable from 'vuedraggable'
 // 将拖拽后的排序重新更新
 // 删除
 import {updateSortById,remove} from "@/api/xxx"
	export default{
	    props: {
      		archiveId: {
        		type: String,
        		default: '',
        		require: true,
      		},
    	},
		filters: {
      		numberFilter(num) {
        		return numberToChinese(num)
      		},
    	},
    	components: {
      		VabDraggable,
      	},
      	computed: {
      		dragOptions() {
        		return {
          			animation: 600,
          			group: 'description',
        		}
      		},
    	},
		data(){
			return{
        		catelogHeaderList: [
          			{ id: 1, title: '类号', span: 1 },
         			{ id: 2, title: '类别名称', span: 5 },
          			{ id: 3, title: '材料', span: 5 },
          			{ id: 4, title: '材料形成时间 年 月 日', span: 3 },
          			{ id: 5, title: '页数', span: 2 },
          			{ id: 6, title: '备注', span: 6 },
          			{ id: 7, title: '操作', span: 2 },
        		],
        		catelogUserForm: {
          			catelogSysList: [],
        		},
        		catalogCollectionRules: {},
        		catelogSysLoading:false, 
        		disabledDrag: false, // 是否禁止同级拖拽
        		
			}
		},
		mounted(){
			this.fetchData()
		},
		methods:{
			/**
       		* 获取catelogUser一级目录列表
       		*/
      		fetchData() {
        		this.catelogSysLoading = true
        		getMenyByArchiveId(this.archiveId).then((res) => {
          			this.catelogUserForm.catelogSysList = res.data
          			this.list = JSON.parse(JSON.stringify(res.data))
          			this.catelogSysLoading = false
        		})
      		},

      		/**
       		* 打开添加材料对话框,添加材料(此功能不详细赘述)
       		*/
      		handleAddCatelogUser(item) {
        		// this.$refs.catelogUser.showDetailDialog(item.id,item.catelogSysId,item.catamanageName)
      		},

      		/**
       		* 拖拽排序
       		* @param {Object} event
       		*/
      		onEnd(evt) {
        		//父级id
        		let parentId = evt.from.dataset.id
        		//找到父级所在的索引
        		let parentIi = this.catelogUserForm.catelogSysList.findIndex((e) => e.id == parentId)
        		//父级
        		let nowList = this.catelogUserForm.catelogSysList[parentIi]
        		let buhui = this.list[parentIi]
        		//当前拖动对象
        		// debugger
        		let nowItemId = evt.item._underlying_vm_.id
        		let nowIndex = nowList.children.findIndex((e) => e.id == nowItemId)
        		let flag = nowList.children[nowIndex].id == buhui.children[nowIndex].id
        		nowList.children.forEach((e, i) => {
          			e.sort = i + 1
        		})
        		if (!flag) {
          			updateSortById(nowList.children).then((res) => {
            			this.$baseMessage(res.msg, 'success')
            			this.fetchData()
          			})
        		}
      		},

      		/**
       		* 删除:保存/未保存到数据库()
       		*/
      		handleDelete(parentIndex, item, index, flag) {
        		if (item.id != null) {
          			this.$baseConfirm('您确定要删除当前项吗?', null, async () => {
            			const { msg } = await remove(item.id)
            			this.$baseMessage(msg, 'success')
            			await this.fetchData()
          			})
        		} else {
          			if (flag == 'del') {
            			this.catelogUserForm.catelogSysList.map((e) => {
              				if (e.id == item.parentId) {
                				this.catelogUserForm.catelogSysList[parentIndex].children.splice(index, 1)
              				}
            			})
          			} else {
            			this.catelogUserForm.catelogSysList.map((e) => {
              				e.children.map((r) => {
                				if (r.id == item.parentId) {
                  				this.catelogUserForm.catelogSysList[parentIndex].children[index].children.splice(flag, 1)
                				}
              				})
            			})
          			}
        		}
      		},
		}
	}
</script>

数据格式如下
在这里插入图片描述

二. 引入文件

  1. 保留两位小数并且整数部分三位一个逗号分隔符的数字金钱标准表示法
export function parseFormatNum(number) {
  let n = 2;
  if (n != 0) {
    n = n > 0 && n <= 20 ? n : 2;
  }
  if (number == null) number = 0;

  number = parseFloat((number + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
  const sub_val = number
    .split(".")[0]
    .split("")
    .reverse();
  const sub_xs = number.split(".")[1];

  let show_html = "";
  for (let m = 0; m < sub_val.length; m++) {
    show_html +=
      sub_val[m] + ((m + 1) % 3 == 0 && m + 1 != sub_val.length ? "," : "");
  }
  if (n == 0) {
    return show_html
      .split("")
      .reverse()
      .join("");
  } else {
    return (
      show_html
      .split("")
      .reverse()
      .join("") +
      "." +
      sub_xs
    );
  }
}
  1. 阿拉伯数字转为汉字
export const numberToChinese = (num) => {
  const changeNum = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'] // changeNum[0] = "零"
  const unit = ['', '十', '百']
  num = parseInt(num)
  const getWan = (temp) => {
    const strArr = temp.toString().split('').reverse()
    let newNum = ''
    for (var i = 0; i < strArr.length; i++) {
      newNum =
        (i == 0 && strArr[i] == 0
          ? ''
          : i > 0 && strArr[i] == 0 && strArr[i - 1] == 0
          ? ''
          : changeNum[strArr[i]] + (strArr[i] == 0 ? unit[0] : unit[i])) +
        newNum
    }
    return newNum
  }
  const overWan = Math.floor(num / 100)
  let noWan = num % 100
  if (noWan.toString().length < 2) {
    noWan = '0' + noWan
  }
  let strr = overWan ? getWan(overWan) + '百' + getWan(noWan) : getWan(num)
  if (strr.split('')[0] == '一') {
    if (num < 10) {
      return strr.substring(0)
    } else {
      return strr.substring(1)
    }
  } else {
    return overWan ? getWan(overWan) + '百' + getWan(noWan) : getWan(num)
  }
}

三. 参考

  1. element+vue表格点击变成输入框并获取焦点(可编辑状态)
  2. el-table内表单校验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1342070.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java小案例-一招弄懂线程池

前言 今天跟大家聊一聊无论是在工作中常用还是在面试中常问的线程池&#xff0c;通过画图的方式来彻底弄懂线程池的工作原理&#xff0c;以及在实际项目中该如何自定义适合业务的线程池。 一、什么是线程池 线程池其实是一种池化的技术的实现&#xff0c;池化技术的核心思想…

渗透测试(Lab4.2)

配置WebDeveloper的时候遇到一个错误 导入失败&#xff0c;因为 E:…ovf 未通过 OVF 规范一致性或虚拟硬件合规性检查。 请单击“重试”放松 OVF 规范与虚拟硬件合规性检查&#xff0c;并重新尝试导入&#xff1b; 或单击“取消”以取消导入。如果重新尝试导入&#xff0c;可能…

请问仿写arkts摇杆功能,为什么我的代码,TouchType.Up 时候摇杆动画不能还原呢?请求大佬指点一下

仿照黑马的arkts 写个摇杆功能&#xff0c;但是为什么我的代码&#xff0c;TouchType.Up 时候摇杆动画不能还原&#xff0c; 请求大佬指点一下 import router from ohos.router import curves from ohos.curvesEntry Component struct ItemPage7 {// 小鱼坐标State fishX: nu…

Springboot实现登录注册

功能&#xff1a;1、实现用户的登录 2、实现用户的注册以及重名的判断 LoginControl&#xff1a; package com.example.demo.controls;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; imp…

2024 年政府和技术预测

新的一年即将来临&#xff0c;这意味着专家、技术专家和专栏作家应该尝试预测 2024 年政府和技术即将出现的一些最大趋势。今年可能使这些预测变得更加困难的是事实上&#xff0c;许多技术正在以惊人的速度向前发展。在某些情况下&#xff0c;过去需要多年才能慢慢发生的变化现…

乘势而上开新年!2024深圳深圳户外家具及休闲用品展览会三月开幕

中国户外家具市场在九十年代末开始崭露头角&#xff0c;随着国家经济的腾飞&#xff0c;尤其是房地产行业的迅猛发展&#xff0c;加上现代商业模式的建立和完善&#xff0c;产品和需求都以惊人的速度在发展。无论是国际知名品牌&#xff0c;还是国内的专业户外家具生产企业&…

java设计模式学习之【模板方法模式】

文章目录 引言模板方法模式简介定义与用途实现方式 使用场景优势与劣势在Spring框架中的应用游戏设计示例代码地址 引言 设想你正在准备一顿晚餐&#xff0c;无论你想做意大利面、披萨还是沙拉&#xff0c;制作过程中都有一些共同的步骤&#xff1a;准备原料、加工食物、摆盘。…

你知道继电保护测试仪的价格是多少吗?

继电保护测试仪是电气设备检测中经常使用的检测仪器。它能准确、快速地检测到每个继电保护装置的一些潜在故障和问题&#xff0c;帮助电力检测工人锁定问题点&#xff0c;使继电保护装置能够正常工作&#xff0c;保护电力需求。继电保护测试仪贵吗&#xff1f;哪些因素影响价格…

Hive讲课笔记:内部表与外部表

文章目录 一、导言二、内部表1.1 什么是内部表1.1.1 内部表的定义1.1.2 内部表的关键特性 1.2 创建与操作内部表1.2.1 创建并查看数据库1.2.2 在park数据库里创建student表1.2.3 在student表插入一条记录1.2.4 通过HDFS WebUI查看数据库与表 三、外部表2.1 什么是外部表2.2 创建…

优思学院|做了3年QC感到前路茫茫,我应该如何规划职业路径?

网友提问&#xff1a; 做了3年QC感到前路茫茫我应该如何规划职业路径&#xff1f; 在当今这个快速发展和竞争激烈的时代&#xff0c;许多质量控制&#xff08;QC&#xff09;领域的专业人士&#xff0c;如你所述&#xff0c;可能会感到职业发展上的迷茫。 作为一名拥有三年QC经…

JavaWeb——JQuery

文章目录 JQuery 是什么?jQuery 的原理示意图JQuery 基本开发步骤jQuery 对象和 DOM 对象将dom对象转为JQuery对象jQuery 对象转成 DOM 对象jQuery 选择器基本选择器基础过滤选择器JQuery 是什么? 基本介绍 jQuery 是一个快速的,简洁的 javaScript 库,使用户能更方便地处理…

elasticsearch系列七:聚合查询

概述 今天咱们来看下es中的聚合查询&#xff0c;在es中聚合查询分为三大类bucket、metrics、pipeline&#xff0c;每一大类下又有十几种小类&#xff0c;咱们各举例集中&#xff0c;有兴许的同学可以参考官网&#xff1a;https://www.elastic.co/guide/en/elasticsearch/refere…

ClickHouse基础知识(五):ClickHouse的SQL 操作

基本上来说传统关系型数据库&#xff08;以 MySQL 为例&#xff09;的 SQL 语句&#xff0c;ClickHouse 基本都支持&#xff0c; 这里不会从头讲解 SQL 语法只介绍 ClickHouse 与标准 SQL&#xff08;MySQL&#xff09;不一致的地方。 1. Insert 基本与标准 SQL&#xff08;My…

【Vue2+3入门到实战】(13)插槽<slot>详细示例及自定义组件的创建与使用代码示例 详解

目录 一、学习目标1.插槽2.综合案例&#xff1a;商品列表 一、插槽-默认插槽1.作用2.需求3.问题4.插槽的基本语法5.代码示例6.总结 二、插槽-后备内容&#xff08;默认值&#xff09;1.问题2.插槽的后备内容3.语法4.效果5.代码示例 三、插槽-具名插槽1.需求2.具名插槽语法3.v-s…

BDD - Python Behave 配置文件 behave.ini

BDD - Python Behave 配置文件 behave.ini 引言behave.ini配置参数的类型配置项 behave.ini 应用feature 文件step 文件创建 behave.ini执行 Behave查看配置默认值 behave -v 引言 前面文章 《BDD - Python Behave Runner Script》就是为了每次执行 Behave 时不用手动敲一长串…

node 项目中 __dirname / __filename 是什么,为什么有时候不能用?

__dirname 是 Node.js 中的一个特殊变量&#xff0c;表示当前执行脚本所在的目录的绝对路径。 __filename 同理&#xff0c;是 Node.js 中的一个特殊变量&#xff0c;表示当前执行脚本的绝对路径&#xff0c;包括文件名。 在 Node.js 中&#xff0c;__dirname / __filename是…

C语言 linux文件操作(二)

文章目录 一、获取文件长度二、追加写入三、覆盖写入四、文件创建函数creat 一、获取文件长度 通过lseek函数&#xff0c;除了操作定位文件指针&#xff0c;还可以获取到文件大小&#xff0c;注意这里是文件大小&#xff0c;单位是字节。例如在file1文件中事先写入"你好世…

Vue - v-for 指令详解

1. 渲染列表 首先&#xff0c;让我们看看如何使用 v-for 渲染一个简单的列表。在 Vue.js 中&#xff0c;我们可以使用 v-for 来遍历数组&#xff0c;并根据数组中的每个元素渲染相应的内容。 <template><div><!-- 使用 v-for 渲染列表 --><ul><li…

计算机与人工智能:共创智能时代的新篇章

计算机与人工智能&#xff1a;共创智能时代的新篇章 在这个科技日新月异的时代&#xff0c;计算机与人工智能&#xff08;AI&#xff09;的结合正以前所未有的速度改变着世界。它们在各自的领域内飞速发展&#xff0c;而当这两者相遇时&#xff0c;它们产生了巨大的能量&#x…

ClickHouse基础知识(六):ClickHouse的副本配置

副本的目的主要是保障数据的高可用性&#xff0c;即使一台 ClickHouse 节点宕机&#xff0c;那么也可以 从其他服务器获得相同的数据。 1. 副本写入流程 2. 配置步骤 ➢ 启动 zookeeper 集群 ➢ 在hadoop101的/etc/clickhouse-server/config.d目录下创建一个名为metrika.xml…