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

一. 案例

  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内表单校验

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

proE各版本安装指南

下载链接 https://pan.baidu.com/s/1BSaJxvPPGeIa4YKm7xk57g?pwd0531 1.鼠标右击【Proe5.0M280(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 Proe5.0M280(64bit)】&#xff08;解压的路径中不能有中文&#xff09;。 2.打开…

BIT-666 的 2023 年度总结

<<< 年度总结 >>> <<< 年度数据 >>> ◆ 发博情况 ◆ 学习成就 ◆ 代码提交 ◆ 博文表现 <<< 年度创作 >>> ◆ LLM - LLaMA2 <<< 年度风景 >>> ◆ 春 - 中关村软件园 - 百望山 ◆ 夏 - 乌兰…

Gamma LUT PG285笔记

1 gamma校正应用背景 探测器响应为线性亮度或RGB值&#xff0c;而显示器并非线性&#xff0c;需要算法做校正。 2 reg 可以配置3张LUT表&#xff0c;每张表最大1024个16bit参数。表中0x0800仅是第一张表的起始地址&#xff0c;地址每次加4。 3 数据输入的格式 按照RBG的顺序…

springboot参数校验常用注解及分组校验

一、使用方式添加Validated 二、常见注解 Null 被注解的元素必须为null NotNull 被注解的元素必须不为null NotBlank 只能作用在接收的 String 类型上&#xff0c;注意是只能&#xff0c;不能为 null&#xff0c;而且调用 trim() 后&#xff0c;长度必须大于 0即&#xff…

Solana 与 DePIN 的双向奔赴,会带来 DePIN 之夏吗?

作者&#xff1a;LBank Labs 研究员 F.F 编译&#xff1a;TinTinLand 原文&#xff1a;https://medium.com/lbanklabs/new-anchor-of-solana-depin-b674d04d6980 太长不看版 在过去的一年里&#xff0c;我们观察到 Solana 和 DePIN 两者都呈现出了显著的增长。这不仅是极客科…

Ubuntu22.04-安装后Terminal无法调出

参考&#xff1a; Ubuntu20.04 终端打开不了的问题排查_ubuntu终端打不开-CSDN博客 https://blog.csdn.net/u010092716/article/details/130968032 Ubuntu修改locale从而修改语言环境_ubuntu locale-CSDN博客 https://blog.csdn.net/aa1209551258/article/details/81745394 问…

为什么ChatGPT采用SSE协议而不是Websocket?

在探索ChatGPT的使用过程中&#xff0c;我们发现GPT采用了流式数据返回的方式。理论上&#xff0c;这种情况可以通过全双工通信协议实现持久化连接&#xff0c;或者依赖于基于EventStream的事件流。然而&#xff0c;ChatGPT选择了后者&#xff0c;也就是本文即将深入探讨的SSE&…

私域营销新趋势:电商品牌如何打破传统,实现共赢?

一、自私的私域 私域运营已经成为企业营销的重要手段之一&#xff0c;越来越多的品牌开始重视私域的构建和运营。瑞幸咖啡、熊猫不走和泡泡玛特等品牌的成功案例证明了私域运营的重要性和价值。这些品牌通过建立自己的用户社区&#xff0c;提供个性化的服务和营销策略&#xf…

Zabbix“专家坐诊”第221期问答汇总

问题一 Q&#xff1a;使用官方docker模板Template App Docker&#xff0c;监控docker镜像&#xff0c;有一项监控项docker.data_usage有报错&#xff0c;不知道哪里问题&#xff1a;Cannot fetch data: Get “http://1.28/system/df”: context deadline exceeded (Client.Time…

WebGL技术的应用场景

WebGL&#xff08;Web Graphics Library&#xff09;是一种在Web浏览器中渲染3D图形的技术&#xff0c;它基于OpenGL ES&#xff08;OpenGL for Embedded Systems&#xff09;标准&#xff0c;允许通过JavaScript编写高性能的3D图形应用。以下是一些WebGL技术的应用场景&#x…

iptables防火墙——学会利用SNAT和DNAT 共享上网并发布内网服务器

本章展示&#xff1a; -- 学会利用SNAT策略共享上网 -- 学会利用DNAT策略发布内网服务器 -- 学会编写简单的防火墙脚本 3.1 SNAT 策略及应用 Linux 防火墙在很多时候承担着连接企业内、外网的重任&#xff0c;除了提供数据包过滤功能以 外&#xff0c;还提供一些基本的网关…

免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼

在音视频领域&#xff0c;把已经发布的混音歌曲或者音频文件逆向分离一直是世界性的课题。音波混合的物理特性导致在没有原始工程文件的情况下&#xff0c;将其还原和分离是一件很有难度的事情。 言及背景音人声分离技术&#xff0c;就不能不提Spleeter&#xff0c;它是一种用…

基于springboot+vue协同过滤算法的电影推荐系统

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;摘 要 “互联网”的战略实施后&a…

根据commitID删除某一次提交

1.查看提交历史 git log --prettyoneline2.找到需要删除的那个commit,然后找到上次提交的commitID 比如想要删除下面这一条 我们找到上次提交的commitID 3.执行rebase git rebase -i efa11da0a684977bf8ac047ebb803e2ded2063a4 进入编辑状态显示如下 将需要删除的那个提交前…

【小程序】如何获取特定页面的小程序码

一、进入到小程序管理后台&#xff0c;进入后点击上方的“工具”》“生成小程序码” 小程序管理后台 二、进入开发者工具&#xff0c;打开对应的小程序项目&#xff0c;复制底部小程序特定页面的路径 三、粘贴到对应位置的文本框&#xff0c;点击确定即可

three.js绘制网波浪

无图不欢&#xff0c;先上图 使用方法&#xff08;以vue3为例&#xff09; <template><div class"net" ref"net"></div> </template><script setup> import { ref, onMounted } from vue import NetAnimation from /util…

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第四节 参数传递对堆栈的影响 1

深入浅出图解C#堆与栈 C# Heaping VS Stacking 第四节 参数传递对堆栈的影响1 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理](http…

嵌入式开发——ADC开发

学习目标 了解ADC开发流程掌握采样方式能够使用ADC进行芯片内部通道进行采样能够使用ADC对外部电路进行采样学习内容 GD32F4的ADC 特点: 16个外部模拟输入通道;1个内部温度传感通道(VSENSE);1个内部参考电压输入通道(VREFINT);1个外部监测电池VBAT供电引脚输入通道。ADC开…

C++ BuilderXE10 关于Intraweb关于IWTemplateProcessorHTML1操作

1、端口设置,port参数修改端口号。 2、初始化设置成ciMultiThreaded。这样可以避免ADO组件的加载错误。 3、IWTemplateProcessorHTML1设置&#xff0c; IWForm1->LayoutMgr IWTemplateProcessorHTML1;//关联模板(IWForm1. html) IWTemplateProcessorHTML1->RenderStyles…

独立容器 Rancher Server 证书过期解决

问题 Rancher无法登录 容器报错X509&#xff1a;certificate has expired or is not ye valid 在某天需要发布新版本的时候&#xff0c;发现rancher无法登录&#xff0c;于是到服务器上查看rancher日志&#xff0c;发现以下内容&#xff1a; docker logs -f rancher --since10…