vue 使用 ztree 超大量数据,前端树形结构展示

ztree 是一个很经典的基于jquey开发的树结构编辑展示UI组件库。

创建一个文件 ztree.vue,代码如下:

<template><div><div class="ztree vue-giant-tree" :id="ztreeId"></div><div class="treeBox"><span slot="footer" class="dialog-footer"><el-buttontype="primary"@click="pushHandle"style="background: #e64e3f; border: none">推 送</el-button></span></div></div>
</template>
<script>
import * as $ from "jquery";
if (!window.jQuery) {window.jQuery = $;
}
require("@ztree/ztree_v3/js/jquery.ztree.all");
export default {props: {setting: {type: Object,require: false,default: function () {return {};},},nodes: {type: Array,require: true,default: function () {return [];},},},data() {return {ztreeId: "ztree_" + parseInt(Math.random() * 1e10),ztreeObj: null,list: [],ztreeSetting: {view: {showIcon: false, // default to hide icon},callback: {onAsyncError: (...arg) => {this.$emit("onAsyncError", ...arg);},onAsyncSuccess: (...arg) => {this.$emit("onAsyncSuccess", ...arg);},onCheck: (...arg) => {this.$emit("onCheck", ...arg);},onClick: (...arg) => {this.$emit("onClick", ...arg);},onCollapse: (...arg) => {this.$emit("onCollapse", ...arg);},onDblClick: (...arg) => {this.$emit("onDblClick", ...arg);},onDrag: (...arg) => {this.$emit("onDrag", ...arg);},onDragMove: (...arg) => {this.$emit("onDragMove", ...arg);},onDrop: (...arg) => {this.$emit("onDrop", ...arg);},onExpand: (...arg) => {this.$emit("onExpand", ...arg);},onMouseDown: (...arg) => {this.$emit("onMouseDown", ...arg);},onMouseUp: (...arg) => {this.$emit("onMouseUp", ...arg);},onRemove: (...arg) => {this.$emit("onRemove", ...arg);},onRename: (...arg) => {this.$emit("onRename", ...arg);},onRightClick: (...arg) => {this.$emit("onRightClick", ...arg);},},},};},methods: {pushHandle() {var zTree = $.fn.zTree.getZTreeObj(this.ztreeId);var dataNodes = [],nodes = zTree.getCheckedNodes(true);var users = "";if (0 === nodes.length) {this.$alert("请选择", "提示", {confirmButtonText: "确定",callback: (action) => {},});return;}let count = 0;for (var i = 0; i < nodes.length; i++) {if (nodes[i].is_last == 1) {dataNodes.push(nodes[i].id);users += nodes[i].id + ",";}count++;if (count >= nodes.length) {if (dataNodes.length == 0) {this.$alert("请选择人员", "提示", {confirmButtonText: "确定",callback: (action) => {},});return;} else {users = users.slice(0, -1);this.$emit("pushHandleData", users);}}}},},watch: {nodes: {handler: function (nodes) {this.list = nodes;// update treeif (this.ztreeObj) {this.ztreeObj.destroy();}this.$nextTick(() => {this.ztreeObj = $.fn.zTree.init($("#" + this.ztreeId),Object.assign({}, this.ztreeSetting, this.setting),this.list);// var zTree = $.fn.zTree.getZTreeObj(this.ztreeId);// var datas = nodes.split(',');// for (let i = 0; i < datas.length; i++) {//   var node = zTree.getNodesByParam("id", datas[i], null)[0];//根据id获取节点//   zTree.checkNode(node, true, true);//选中节点// zTree.setChkDisabled(node, true);// 禁止勾选节点// }this.$emit("onCreated", this.ztreeObj);});},deep: true,immediate: true,},},
};
</script><style>
/* beauty ztree! */
.ztree {text-align: left;font-size: 14px;
}
.treeBox {display: flex;justify-content: center;margin-top: 10px;
}
.vue-giant-tree li {list-style-type: none;white-space: nowrap;outline: none;
}
.vue-giant-tree li ul {position: relative;padding: 0 0 0 20px;margin: 0;
}
.vue-giant-tree .line:before {position: absolute;top: 0;left: 10px;height: 100%;content: "";border-right: 1px dotted #dbdbdb;
}
.vue-giant-tree .roots_docu:before,
.vue-giant-tree .roots_docu:after,
.vue-giant-tree .center_docu:before,
.vue-giant-tree .bottom_docu:before,
.vue-giant-tree .center_docu:after,
.vue-giant-tree .bottom_docu:after {position: absolute;content: "";border: 0 dotted #dbdbdb;
}
.vue-giant-tree .roots_docu:before {left: 10px;height: 50%;top: 50%;border-left-width: 1px;
}
.vue-giant-tree .roots_docu:after {top: 50%;left: 11px;width: 50%;border-top-width: 1px;
}
.vue-giant-tree .center_docu:before {left: 10px;height: 100%;border-left-width: 1px;
}
.vue-giant-tree .center_docu:after {top: 50%;left: 11px;width: 50%;border-top-width: 1px;
}
.vue-giant-tree .bottom_docu:before {left: 10px;height: 50%;border-left-width: 1px;
}
.vue-giant-tree .bottom_docu:after {top: 50%;left: 11px;width: 50%;border-top-width: 1px;
}
.vue-giant-tree li a {display: inline-block;line-height: 22px;height: 22px;margin: 0;cursor: pointer;transition: none;vertical-align: middle;color: #555555;
}
.vue-giant-tree .node_name {display: inline-block;padding: 0 3px;border-radius: 4px;
}
.vue-giant-tree .curSelectedNode .node_name {color: #000;background-color: #c9e9f7;
}
.vue-giant-tree .curSelectedNode_Edit {height: 20px;opacity: 0.8;color: #000;border: 1px #6cc2e8 solid;background-color: #9dd6f0;
}
.vue-giant-tree .tmpTargetNode_inner {opacity: 0.8;color: #fff;background-color: #4fcbf0;filter: alpha(opacity=80);
}
.vue-giant-tree .rename {font-size: 12px;line-height: 22px;width: 80px;height: 22px;margin: 0;padding: 0;vertical-align: top;border: 0;background: none;
}
.vue-giant-tree .button {position: relative;display: inline-block;line-height: 22px;height: 22px;width: 22px;cursor: pointer;text-align: center;vertical-align: middle;
}.vue-giant-tree .button.edit {color: #25ae88;
}
.vue-giant-tree .button.remove {color: #cb4042;
}
.vue-giant-tree .button.chk {position: relative;width: 14px;height: 14px;margin: 0 4px 0 0;border: 1px solid #d7dde4;border-radius: 2px;background: #fff;
}
.vue-giant-tree .chk.radio_true_full,
.vue-giant-tree .chk.radio_false_full,
.vue-giant-tree .chk.radio_true_full_focus,
.vue-giant-tree .chk.radio_false_full_focus,
.vue-giant-tree .chk.radio_false_disable,
.vue-giant-tree .chk.radio_true_disable,
.vue-giant-tree .chk.radio_true_part,
.vue-giant-tree .chk.radio_false_part,
.vue-giant-tree .chk.radio_true_part_focus,
.vue-giant-tree .chk.radio_false_part_focus {border-radius: 8px;
}
.vue-giant-tree .button.chk:after {position: absolute;top: 1px;left: 4px;width: 4px;height: 8px;content: "";transition: -webkit-transform 0.2s ease-in-out;transition: transform 0.2s ease-in-out;transition: transform 0.2s ease-in-out, -webkit-transform 0.2s ease-in-out;-webkit-transform: rotate(0deg) scale(0);transform: rotate(0deg) scale(0);border-right: 2px solid #fff;border-bottom: 2px solid #fff;
}
.vue-giant-tree .button.checkbox_false_full_focus {border-color: #ccc;
}
.vue-giant-tree .button.checkbox_true_full,
.vue-giant-tree .button.checkbox_true_full_focus,
.vue-giant-tree .button.checkbox_true_part,
.vue-giant-tree .button.checkbox_true_part_focus,
.vue-giant-tree .button.checkbox_true_disable {border-color: #39f;background-color: #39f;
}
.vue-giant-tree .button.checkbox_true_full:after,
.vue-giant-tree .button.checkbox_true_full_focus:after,
.vue-giant-tree .button.checkbox_true_disable:after {-webkit-transform: rotate(45deg) scale(1);transform: rotate(45deg) scale(1);
}
.vue-giant-tree .button.checkbox_true_part:after,
.vue-giant-tree .button.checkbox_true_part_focus:after {top: 5px;left: 2px;width: 10px;height: 1px;-webkit-transform: rotate(0deg) scale(1);transform: rotate(0deg) scale(1);border-right: 0;
}
.vue-giant-tree .button.radio_true_full,
.vue-giant-tree .chk.radio_true_full_focus,
.vue-giant-tree .chk.radio_true_part,
.vue-giant-tree .chk.radio_true_part_focus {border-color: #39f;
}
.vue-giant-tree .button.radio_true_full:after,
.vue-giant-tree .chk.radio_true_full_focus:after,
.vue-giant-tree .chk.radio_true_part:after,
.vue-giant-tree .chk.radio_true_part_focus:after {top: 3px;left: 3px;width: 8px;-webkit-transform: rotate(0deg) scale(1);transform: rotate(0deg) scale(1);border: 0;border-radius: 4px;background: #39f;
}
.vue-giant-tree .button.checkbox_true_disable,
.vue-giant-tree .button.checkbox_false_disable,
.vue-giant-tree .chk.radio_false_disable,
.vue-giant-tree .chk.radio_true_disable {cursor: not-allowed;
}
.vue-giant-tree .button.checkbox_false_disable {background-color: #f3f3f3;
}
.vue-giant-tree .button.noline_close:before,
.vue-giant-tree .button.noline_open:before,
.vue-giant-tree .button.root_open:before,
.vue-giant-tree .button.root_close:before,
.vue-giant-tree .button.roots_open:before,
.vue-giant-tree .button.roots_close:before,
.vue-giant-tree .button.bottom_open:before,
.vue-giant-tree .button.bottom_close:before,
.vue-giant-tree .button.center_open:before,
.vue-giant-tree .button.center_close:before {position: absolute;top: 5px;left: 5px;content: "";transition: -webkit-transform ease 0.3s;transition: transform ease 0.3s;transition: transform ease 0.3s, -webkit-transform ease 0.3s;-webkit-transform: rotateZ(0deg);transform: rotateZ(0deg);-webkit-transform-origin: 25% 50%;transform-origin: 25% 50%;border: 6px solid;border-color: transparent transparent transparent #666;
}
.vue-giant-tree .button.noline_open:before,
.vue-giant-tree .button.root_open:before,
.vue-giant-tree .button.roots_open:before,
.vue-giant-tree .button.bottom_open:before,
.vue-giant-tree .button.center_open:before {-webkit-transform: rotateZ(90deg);transform: rotateZ(90deg);
}
.vue-giant-tree .button.ico_loading {margin-right: 2px;background: url("data:image/gif;base64,R0lGODlhEAAQAKIGAMLY8YSx5HOm4Mjc88/g9Ofw+v///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh+QQFCgAGACwAAAAAEAAQAAADMGi6RbUwGjKIXCAA016PgRBElAVlG/RdLOO0X9nK61W39qvqiwz5Ls/rRqrggsdkAgAh+QQFCgAGACwCAAAABwAFAAADD2hqELAmiFBIYY4MAutdCQAh+QQFCgAGACwGAAAABwAFAAADD1hU1kaDOKMYCGAGEeYFCQAh+QQFCgAGACwKAAIABQAHAAADEFhUZjSkKdZqBQG0IELDQAIAIfkEBQoABgAsCgAGAAUABwAAAxBoVlRKgyjmlAIBqCDCzUoCACH5BAUKAAYALAYACgAHAAUAAAMPaGpFtYYMAgJgLogA610JACH5BAUKAAYALAIACgAHAAUAAAMPCAHWFiI4o1ghZZJB5i0JACH5BAUKAAYALAAABgAFAAcAAAMQCAFmIaEp1motpDQySMNFAgA7")0 center no-repeat;
}
.vue-giant-tree .tmpTargetzTree {opacity: 0.8;background-color: #2ea9df;filter: alpha(opacity=80);
}
.vue-giant-tree .tmpzTreeMove_arrow {position: absolute;width: 18px;height: 18px;color: #4fcbf0;
}
</style>
<style>
ul.ztree.zTreeDragUL {margin: 0;padding: 0;position: absolute;overflow: hidden;background-color: #dedede;border: 1px #4fcbf0 dotted;border-radius: 4px;opacity: 0.7;
}.zTreeMask {position: absolute;z-index: 10000;opacity: 0;background-color: #cfcfcf;
}
</style>

在使用的页面中引入

注意:从接口获取到的树形数据中的 pId 字段名 中间的 ‘I’ 是大写,支持非树形结构数据,只需 pId 和 id 都有,ztree根据id及pId层级关系构建树结构

<template><div style="position: relative; margin: 15px"><el-buttontype="primary"icon="el-icon-document-copy"size="small"@click="openZtree">保存</el-button><el-dialogtitle="通过组织机构选择":visible.sync="dialogZTreeVisible"top="1%"width="40%"><!-- 操作 --><div class="box"><div v-if="loading"><zTreeLoadings></zTreeLoadings></div><div v-else><ZTree:setting="setting":nodes="nodes"@onClick="onClick"@onCheck="onCheck"@onCreated="handleCreated"@pushHandleData="pushHandleData"/></div></div></el-dialog><wp-messagev-if="message":message="message"@close="closeMessage"@isOk="closeMessage"></wp-message></div>
</template><script>
import * as Api from "@/api/wp-questionnaire";// 接口文件
import WpMessage from "@/components/wp-message"; // 弹窗组件
import ZTree from "@/components/wp-common/zTree";
import zTreeLoadings from "@/components/wp-common/loading";
export default {components: {WpMessage,ZTree,zTreeLoadings},data() {return {dialogZTreeVisible: false,nodes: [],showIndex: 0,ztreeObj: null,setting: {check: {enable: true,//这里设置是否显示复选框chkStyle: "checkbox",chkboxType: {Y: "s",N: "ps",}, //设置复选框是否与 父/子 级相关联},data: {simpleData: {enable: true, //设置是否启用简单数据格式(zTree支持标准数据格式跟简单数据格式)idKey: "id", //设置启用简单数据格式时id对应的属性名称pidKey: "pId", //设置启用简单数据格式时parentId对应的属性名称,ztree根据id及pid层级关系构建树结构rootPId: null, // 根节点的parentId设置为null},key: {name: "name",},},view: {selectedMulti: true, //设置是否能够同时选中多个节点showIcon: false, //设置是否显示节点图标showLine: true, //设置是否显示节点与节点之间的连线},callback: {onClick: function (e, treeId, treeNode) {checkNode_user = treeNode;},},},loading: false};},methods: {// 推送数据pushHandleData(val) {let param = {Id: id, //推送的数据条IduserIds: val, //推送用户列表,多个用户以逗号分隔};let peosonNum = val.split(",");// 调用推送的接口Api.questionUserAdd(param).then((res) => {if (res.data.code == 200) {this.toMessage("推送成功!共推送" + peosonNum.length + "人");this.dialogZTreeVisible = false;// this.$eventBus.$emit("getTableDataList");// 其他页面刷新页面,如果不需要可不加} else if (res.data.code == 504) {this.$notify({title: "提示",message: "当前推送数据量过大,请稍后刷新查看!",type: "warning",duration: 2000,});this.dialogZTreeVisible = false;} else {this.$message({type: "error",message: res.msg,});}});},// 获取组织树数据getZtreeData() {this.dialogZTreeVisible = truethis.loading = truelet param = {type: 3,id: String(this.currentQuertionId),};Api.searchUserTreeList(param).then((res) => {if (res.data.code == 200) {this.nodes = res.data.data;this.loading = false}});},// 打开树形结构弹窗openZtree() {this.getZtreeData();this.dialogZTreeVisible = true;},clickRemove(treeNode) {console.log("remove", treeNode);this.ztreeObj && this.ztreeObj.removeNode(treeNode);},onClick(evt, treeId, treeNode) {// 点击事件console.log(evt.type, treeNode);},onCheck(evt, treeId, treeNode) {// 选中事件console.log(evt.type, treeNode);},handleCreated(ztreeObj) {this.ztreeObj = ztreeObj;ztreeObj.expandNode(ztreeObj.getNodes()[0], true);}},
};
</script>

创建弹窗组件 index.vue:

其中 xhnrtp.png 就是个关闭图片

<template><div class="wp-message"><div class="message-container"><h4 class="message-header">信息<img src="@/assets/login/xhnrtp.png" alt="" @click="close" /></h4><div class="message-main">{{ message }}</div><div style="text-align: center; margin-bottom: 10px"><el-buttontype="primary"icon="el-icon-document-copy"size="small"@click="handelOk">确定</el-button></div></div></div>
</template><script>
export default {props: {message: {type: String,default: "",},},methods: {close() {this.$emit("close");},handelOk() {this.$emit("isOk");},},
};
</script><style lang="scss" scoped>
.wp-message {position: fixed;left: 0;right: 0;top: 0;bottom: 0;z-index: 9999;background-color: #00000060;.message-container {width: 300px;border-radius: 4px;background-color: #fff;position: absolute;left: 50%;top: 300px;transform: translateX(-50%);padding-bottom: 10px;.message-header {background-color: #eee;font-weight: normal;padding: 0px 20px;border-radius: 4px 4px 0px 0px;margin: 0px;height: 40px;line-height: 40px;color: #333;position: relative;img {position: absolute;right: 20px;top: 11px;cursor: pointer;}}.message-main {height: 100px;text-align: center;color: #333;font-size: 14px;display: flex;align-items: center;justify-content: center;margin: 0 20px;}}
}
</style>

由于数据量大加载比较慢,可创建一个加载组件 loading.vue 

<template><div class="box"><img class="imgs" src="@/assets/loading.gif" /></div>
</template><script>
export default {methods: {}
}
</script>
<style scoped>
.box {display: flex;justify-content: center;align-items: center;
}
.imgs {width: 50px;height: 50px;
}
</style>

其中的 loading.gif 就是个动态图。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL基础——函数和约束

目录 1函数 1.1字符串函数 1.2数值函数 1.3日期函数 1.4流程函数 2约束 2.1约束概述和演示 2.2外键约束&#xff08;表连接键&#xff09; 1函数 函数是指一段可以直接被另一段程序调用的程序或代码。 1.1字符串函数 MySQL中内置了很多字符串函数&#xff0c;常用的…

vue之一键部署的shell脚本和它的点.bat文件、海螺AI、ChatGPT

MENU 前言vite.config.ts的配置deploy文件夹的其他内容remote.shpwd.txtdeploy.bat 前言 1、在src同级新建deploy.bat文件&#xff1b; 2、在src同级新建deploy文件夹&#xff0c;文件夹中新建pwd.txt和remote.sh文件&#xff1b; 3、配置好后&#xff0c;直接双击deploy.bat文…

【计算机视觉】人脸算法之图像处理基础知识(五)

图像的几何变换 3.图像的旋转 图像的旋转就是让图像按照某一点旋转到指定的角度。需要确定3个参数&#xff1a;图像的旋转中心、旋转角度和缩放因子。在openv中通过getRotationMatrix2D()函数来实现图像的旋转。 import cv2 import numpy as npimgpath "images/img1.j…

Jacob环境探索(兼容性、管理员、DLL位置、VS环境,COM权限)

概述&#xff1a; 最近在生产开发实践出现了很多问题&#xff0c;经过了一系列排查&#xff0c;特做如下总结 探索成果&#xff1a; 1. jacob.dll的建议位置 首先jacob的官网&#xff0c;以及官方GitHub&#xff0c;你可以从这里找到DLL文件&#xff0c;以及相关资料然后DLL文…

缩窄route范围来提速本地打包的尝试

目录 为什么要缩窄route范围缩窄route的方式意外触发的重复构建重复构建的原因解决方案 为什么要缩窄route范围 对于一些大单页&#xff0c;单个router-view中可能包含上百个页面。但是开发的时候其实并不需要那么多调试那么多页面。 因此&#xff0c;为了节省不必要的打包和热…

CAPL通过addTimeToMeasurementStartTime或者getLocalTime获取本地时间

文章目录 getLocalTimeaddTimeToMeasurementStartTimegetLocalTime long tm[9]; getLocalTime(tm); // now tm contains the following entries: // tm[0] = 3; (seconds) // tm[1] = 51; (minutes) // tm[2] = 16; (hours)

计算机网络:网络层 - IP数据报的转发

计算机网络&#xff1a;网络层 - IP数据报的转发 基于终点转发最长前缀匹配二叉线索树路由表特殊路由特定主机路由默认路由 IP多播 基于终点转发 路由器转发报文时&#xff0c;是通过报文中的目的地址字段来转发的&#xff0c;也即是说路由器只知道终点的IP地址&#xff0c;根…

民生银行信用卡中心金融科技24届春招面经

本文介绍2024届春招中&#xff0c;中国民生银行下属信用卡中心的金融科技&#xff08;系统研发方向&#xff09; 岗位2场面试的基本情况、提问问题等。 2024年04月投递了中国民生银行下属信用卡中心的金融科技&#xff08;系统研发方向&#xff09; 岗位&#xff0c;暂时不清楚…

移动端消息中心,你未必会设计,发一些示例出来看看。

APP消息中心是一个用于管理和展示用户收到的各种消息和通知的功能模块。它在APP中的作用是提供一个集中管理和查看消息的界面&#xff0c;让用户能够方便地查看和处理各种消息。 以下是设计APP消息中心的一些建议&#xff1a; 1. 消息分类&#xff1a; 将消息按照不同的类型进…

关闭kylin(麒麟)系统的安全认证(烦人的安全认证)

打开grub sudo vim /etc/default/grup修改安全认证选项 增加12行&#xff0c;把13行注释掉 保存更改, 然后执行下面的命令&#xff1a; sudo sync sudo reboot重启成功后&#xff0c;就关闭了安全认证了~~~~~。 总体来讲&#xff0c;kylin还是基于ubuntu的内核的&#xff0c;…

【人工智能】开发AI可能获刑?加州1047草案详解

引言 随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;其应用领域不断扩展&#xff0c;但同时也引发了诸多争议和监管问题。近期&#xff0c;加州参议院以32比1的压倒性投票通过了1047号草案&#xff0c;又称《前沿人工智能模型安全可靠创新法案》。这一草案…

如何用Dokan在WooCommerce上创建多用户商城系统和多供应商市场

由于客户行为的变化以及技术的进步&#xff0c;在线业务如今变得越来越受欢迎。顾客现在可以在家中购物&#xff0c;因为这将节省大量时间并扩大他们的选择。这有助于促进所有在线商店场景的发展&#xff0c;包括多供应商市场。 如果您正在寻求如何在WooCommerce商城上创建多供…

Apple Intelligence 横空出世!它的独家秘诀在哪里?

在 WWDC 2024 大会上&#xff0c;苹果公司揭晓了自家的生成式 AI 项目——Apple Intelligence&#xff0c;其策略核心在于采用 ⌈ 更为聚焦的小型模型 ⌋ &#xff0c;而非盲目追求大模型的普遍趋势。横空出世的它究竟有什么过人之处&#xff1f;一文带你探究竟&#xff01;生成…

【html】学会这一套布局,让你的网页更加

很多小伙伴们在刚刚开始学习网页设计的时候不知道怎么布局今天给大家介绍一种非常实用且更加专业的一种布局。 灵感来源&#xff1a; 小米官网 布局图; 实例效果图&#xff1a; 这是一个简单的HTML模板&#xff0c;包括头部、内容区域和底部。 头部部分包括一个分为左右两部分…

【Spine学习08】之短飘,人物头发动效制作思路

上一节说完了跑步的&#xff0c; 这节说头发发型。 基础过程总结&#xff1a; 1.创建骨骼&#xff08;头发需要在上方加一个总骨骼&#xff09; 2.创建网格&#xff08;并绑定黄线&#xff09; 3.绑定权重&#xff08;发根位置的顶点赋予更多总骨骼的权重&#xff09; 4.切换到…

计算机游戏因为d3dcompiler_47.dll丢失无法启动怎么办?解决只要d3dcompiler_47.dll丢失无法启动游戏软件的方法

d3dcompiler_47.dll 是一个动态链接库文件&#xff0c;属于 Microsoft DirectX 的一部分&#xff0c;主要负责编译和运行 3D 图形程序。它是支持 Direct3D 功能的核心组件&#xff0c;Direct3D 是一种用于编程 3D 图形的 API&#xff0c;广泛应用于游戏和图形密集型应用程序中。…

表格状态码转换,其他索引串转成名字

1.问题分析 原数据库 关联指标为数字串的形式&#xff0c;每个小数对应的是另一张表index的属性&#xff0c;我们想知道对应指标的名称&#xff0c;怎么在这里下面这种形式呢&#xff1f; 两种思路&#xff1a; 1.修改在后端处理&#xff0c;把后端关联指标部分修改成图二的…

如何训练自己的大型语言模型?

简介 大型语言模型&#xff0c;如OpenAI的GPT-4或Google的PaLM&#xff0c;已经席卷了人工智能领域。然而&#xff0c;大多数公司目前没有能力训练这些模型&#xff0c;并且完全依赖于只有少数几家大型科技公司提供技术支持。 在Replit&#xff0c;我们投入了大量资源来建立从…

【TB作品】STM32F102C8T6单片机,PWM发生器

硬件&#xff1a; STM32F102C8T6核心板&#xff0c;按键&#xff0c;0.96 OLED显示屏。 软件&#xff1a; 1、硬件启动触发单片机输出PWM&#xff0c;未触发之前PWM输出为低电平。 2、按键修改PWM的变化模式、变化时间长度、占空比上下限。 3、输出的PWM是固定的10kHZ的。 4、变…

6个免费自动写文章软件,简直好用到爆

对于创作者而言&#xff0c;创作一篇高质量的文章并非易事&#xff0c;它需要耗费大量的时间与精力去构思、组织语言、斟酌字句。灵感并非总是源源不断&#xff0c;有时我们可能会陷入思维的僵局&#xff0c;不知从何下手。而此时&#xff0c;免费自动写文章软件就如同黑暗中的…