grid新建主从一对多

目录

  • 总结
  • 一、步骤
    • 前端
      • 1.第一步-编写tabs的modelBody
      • 2.第二步编辑表扩展js
    • 后端--重写表的add和Update方法
      • 1.第一步


总结

编写tabs的modelBody后编辑表扩展js在重写后端partial的Service

一、步骤

前端

1.第一步-编写tabs的modelBody

  • 复制下面代码该改的改
<template><div class="vol-tabs" style="height: 390px"><el-tabstype="border-card"style="min-height: 370px;box-shadow: none;border-bottom: 0;border-top: 1px solid #eee;"><el-tab-pane><template #label><span><i class="el-icon-date"></i> 研发产品BOM清单</span></template><!-- 显示操作按钮 --><div><el-button type="primary" icon="Close" link @click="del('table1')">删除行</el-button><el-button type="success" icon="Plus" link @click="add('table1')">添加行</el-button><el-buttontype="info"icon="Refresh"link@click="$refs.table1.load()">刷新</el-button></div><!-- :defaultLoadPage="false"打开窗口禁用默认加载数据 --><vol-tableref="table1":clickEdit="true":loadKey="true":columns="tableColumns1":pagination-hide="false":height="275":url="table1Url":index="true":defaultLoadPage="false"@loadBefore="loadTableBefore"@loadAfter="loadTableAfter":beginEdit="beginEdit"></vol-table></el-tab-pane><!-- 从表2 --><el-tab-pane :lazy="false" label="检测报告"><template #label><span><i class="el-icon-date"></i> 检测报告</span></template><!-- 从表2配置 ,双击可以开启编辑--><div style="padding-bottom: 10px"><el-button type="primary" icon="Close" link @click="del('table2')">删除行</el-button><el-button type="success" icon="Plus" link @click="add('table2')">添加行</el-button><el-buttontype="info"icon="Refresh"link@click="$refs.table2.load()">刷新</el-button></div><vol-tableref="table2":loadKey="true":clickEdit="true":columns="tableColumns2":pagination-hide="false":height="275":url="table2Url":defaultLoadPage="false"@loadBefore="loadTableBefore"@loadAfter="loadTableAfter":index="true":beginEdit="beginEdit"></vol-table></el-tab-pane></el-tabs></div>
</template>
<script>
//开发一对多从表需要参照voltable与viewgrid组件api
import VolTable from "@/components/basic/VolTable.vue";
export default {components: { VolTable },data() {return {//从表1table1Url: "api/CY_RD_COMPONENT_DETAIL_LIST/GetPageData", //table1获取数据的接口//表配置的字段注意要与后台返回的查询字段大小写一致tableColumns1: [{field: "PRODUCT_DETAIL_LIST_ID",title: "ID",type: "long",width: 110,hidden: true,align: "left",},{field: "COMMENT_PROJECT_NO",title: "元器件清单编号",type: "string",link: true,width: 150,require: true,align: "left",sort: true,edit: { type: "text" },},{field: "PRODUCT_CODE",title: "产品编码",type: "string",width: 110,require: true,align: "left",},{field: "PRODUCT_DETAIL_CODE",title: "产品详细信息编号",type: "string",width: 200,require: true,align: "left",edit: { type: "text" },hidden: true,},{field: "COMPONENT_CODE",title: "元器件编号",type: "string",width: 110,require: true,align: "left",edit: { type: "text" },},{field: "COMPONENT_POSITION",title: "元器件位号",type: "string",width: 220,require: true,align: "left",edit: { type: "text" },},{field: "BaseQtyN",title: "单位用量",type: "decimal",width: 110,align: "left",edit: { type: "decimal" },},],//从表2table2Url: "api/CY_RD_PRODUCT_TEST_REPORT/GetPageData", //table2获取数据的接口//表配置的字段注意要与后台返回的查询字段大小写一致tableColumns2: [{field: "PRODUCT_REPORT_ID",title: "ID",type: "long",width: 110,hidden: true,align: "left",},{field: "PRODUCT_CODE",title: "产品编码",type: "string",link: true,width: 110,require: true,align: "left",sort: true,},{field: "TEST_REPORT_CODE",title: "检测报告编号",type: "string",width: 110,require: true,align: "left",edit: { type: "text" },},{field: "TEST_TYPE",title: "检测类型",type: "string",bind: { key: "检测类型(形式评价,入网检测)", data: [] },width: 110,require: true,align: "left",edit: { type: "select" },},{field: "TEST_ORGANIZATION",title: "检测机构",type: "string",bind: { key: "检测机构", data: [] },width: 110,require: true,align: "left",edit: { type: "select" },},{field: "REPORT_FROM_ORGANIZATION",title: "报告出具单位",type: "string",width: 110,require: true,align: "left",edit: { type: "text" },},{field: "REPORT_DATE",title: "报告出具日期",type: "string",width: 110,require: true,align: "left",edit: { type: "date" },},{field: "REPORT_VALID_DATE",title: "报告有效期",type: "string",width: 110,require: true,align: "left",edit: { type: "date" },},{field: "WITNESS_MATERIAL_URL",title: "见证材料附件地址",type: "string",width: 220,require: true,align: "left",edit: { type: "file" },},],};},methods: {add(table) {let $parent = null;//当前是子页面,获取查询viewgrid页面的对象()this.$emit("parentCall", ($this) => {$parent = $this;});if (table === "table1") {if ($parent.editFormFields.PRODUCT_CODE != "") {this.$refs.table1.rowData.unshift({COMMENT_PROJECT_NO: "",PRODUCT_CODE: $parent.editFormFields.PRODUCT_CODE,PRODUCT_DETAIL_CODE: $parent.editFormFields.PRODUCT_DETAIL_CODE,MODULE_TYPE: "",DEVELOPMENT_PROJECT_NO:$parent.editFormFields.DEVELOPMENT_PROJECT_NO,HARDWARE_VERSION: "",COMPONENT_CODE: "",COMPONENT_POSITION: "",// WRITE_DATE: "",// HANDLE_FLAG: "",// HANDLE_DATE: "",// NOTICE_NO: "",// ENTERPRISE_CODE: "",BaseQtyN: "",PRODUCT_DETAIL_ID: 0,});} else {this.$Message.info("请先选择研发方案");}} else if (table === "table2") {if ($parent.editFormFields.PRODUCT_CODE != "") {this.$refs.table2.rowData.unshift({PRODUCT_CODE: $parent.editFormFields.PRODUCT_CODE,PRODUCT_DETAIL_CODE: $parent.editFormFields.PRODUCT_DETAIL_CODE,DEVELOPMENT_PROJECT_NO:$parent.editFormFields.DEVELOPMENT_PROJECT_NO,TEST_REPORT_CODE: "",TEST_TYPE: "",TEST_ORGANIZATION: "",REPORT_FROM_ORGANIZATION: "",REPORT_DATE: "",REPORT_VALID_DATE: "",WITNESS_MATERIAL_URL: "",// WRITE_DATE: "",// HANDLE_FLAG: "",// HANDLE_DATE: "",// NOTICE_NO: "",// ENTERPRISE_CODE: "",PRODUCT_DETAIL_ID: 0,});} else {this.$Message.info("请先选择研发方案");}}},//如果要获取页面的参数请使用 this.$emit("parentCall",见下面的使用方法modelOpen() {let $parent;//获取生成页面viewgrid的对象this.$emit("parentCall", ($this) => {$parent = $this;});//当前如果是新建重置两个表格数据if ($parent.currentAction == "Add") {this.$refs.table1.reset();this.$refs.table2.reset();} else {//如果是编辑,添加两个表格的数据this.$refs.table1.load();this.$refs.table2.load();}},loadTableBefore(param, callBack) {let $parent = null;//当前是子页面,获取查询viewgrid页面的对象()this.$emit("parentCall", ($this) => {$parent = $this;});//如果是新建功能,禁止刷新操作if ($parent.currentAction == "Add") {return callBack(false);}//获取当前编辑主键id值let id = $parent.currentRow.PRODUCT_DETAIL_ID;//添加从表的查询参数(条件)//将当前选中的行主键传到后台用于查询(后台在GetTable2Data(PageDataOptions loadData)会接收到此参数)param.wheres.push({ name: "PRODUCT_DETAIL_ID", value: id });callBack(true);},//从后台加载从表1数据后loadTableAfter(data, callBack) {return true;},del(table) {if (table == "table1") {let rows = this.$refs.table1.getSelected();if (rows.length == 0) {return this.$Message.error("请先选中行");}//请求后台删除从表1的数据let url = "api/CY_RD_COMPONENT_DETAIL_LIST/del";this.http.post(url, [rows[0].PRODUCT_DETAIL_LIST_ID], false).then((reslut) => {if (reslut.status === true) {//删除行this.$refs.table1.delRow();this.$Message.success("删除成功");} else {this.$Message.error(reslut.message);}});} else if (table == "table2") {//删除行后删除从表2的数据let rows = this.$refs.table2.getSelected();if (rows.length == 0) {return this.$Message.error("请先选中行");}//请求后台删除从表2的数据let url = "api/CY_RD_PRODUCT_TEST_REPORT/del";this.http.post(url, [rows[0].PRODUCT_REPORT_ID], false).then((reslut) => {if (reslut.status === true) {//删除行this.$refs.table2.delRow();this.$Message.success("删除成功");} else {this.$Message.error(reslut.message);}});}//可以this.http.post调用后台实际执行查询},clear(table) {table == "table1" ? this.$refs.table1.reset() : this.$refs.table2.reset();},getRows(table) {if (table == "table1") {//获取选中的行let rows = this.$refs.table1.getSelected();if (rows.length == 0) {return this.$Message.error("请先选中行");}this.$Message.error(JSON.stringify(rows));} else if (table == "table2") {//获取选中的行let rows = this.$refs.table2.getSelected();if (rows.length == 0) {return this.$Message.error("请先选中行");}this.$Message.error(JSON.stringify(rows));}},},
};
</script>
<style lang="less" scoped>
.vol-tabs {background: white;
}
</style>

2.第二步编辑表扩展js

  • 导入modelBody
import App_ExpertModelBody from '@/extension/business/cy_dev_business/extend/RD_PROJECT_ModelBody'
  • 注册组件
components: {//查询界面扩展组件gridHeader: gridHeader,gridBody: '',gridFooter: '',//新建、编辑弹出框扩展组件modelHeader: '',modelBody: App_ExpertModelBody,modelFooter: '',},
  • 修改表扩展js—从表增改逻辑—请求后台
addBefore(formData) { //弹出框新建或编辑功能点保存时可以将从表1,从表2的数据提到后台this.setFormData(formData);return true;},addAfter(result) {//编辑保存后result返回的状态及表单对象// this.$Notice.success({ title: this.detailOptions.cnName + '编辑完成后:', desc: '返回的数据' + JSON.stringify(result) });result.status == true ?this.$Message.success('保存成功') :this.$Message.error('失败!' + result.message)return true;},updateBefore(formData) { //编辑时功能点保存时可以将从表1,从表2的数据提到后台this.setFormData(formData);return true;},updateAfter(result) {//编辑保存后result返回的状态及表单对象// this.$Notice.success({ title: this.detailOptions.cnName + '编辑完成后:', desc: '返回的数据' + JSON.stringify(result) });result.status == true ?this.$Message.success('保存成功') :this.$Message.error('失败!' + result.message)return true;},setFormData(formData) { //新建或编辑时,将从表1、2的数据提交到后台,见后台App_ReportPriceService的新建方法//后台从对象里直接取extra的值let extra = {table1List: this.$refs.modelBody.$refs.table1.rowData,//获取从表1的行数据table2List: this.$refs.modelBody.$refs.table2.rowData//获取从表2的行数据}formData.extra = JSON.stringify(extra);},

结果类似如下图:
在这里插入图片描述

后端–重写表的add和Update方法

1.第一步

  • 重写表的add和Update方法
/**所有关于CY_RD_PRODUCT_DETAIL类的业务代码应在此处编写*可使用repository.调用常用方法,获取EF/Dapper等信息*如果需要事务请使用repository.DbContextBeginTransaction*也可使用DBServerProvider.手动获取数据库相关信息*用户信息、权限、角色等使用UserContext.Current操作*CY_RD_PRODUCT_DETAILService对增、删、改查、导入、导出、审核业务代码扩展参照ServiceFunFilter*/using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using VOL.Core.BaseProvider;
using VOL.Core.Extensions.AutofacManager;
using VOL.Entity.DomainModels;
using System.Linq;
using VOL.Core.Utilities;
using System.Linq.Expressions;
using VOL.Core.Extensions;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Http;
using SqlSugar;
using VOL.Business.IRepositories;
using VOL.Business.Repositories;
using VOL.Entity.SystemModels;namespace VOL.Business.Services
{public partial class CY_RD_PRODUCT_DETAILService{private readonly IHttpContextAccessor _httpContextAccessor;private readonly ICY_RD_PRODUCT_DETAILRepository _repository;//访问数据库[ActivatorUtilitiesConstructor]public CY_RD_PRODUCT_DETAILService(ICY_RD_PRODUCT_DETAILRepository dbRepository,IHttpContextAccessor httpContextAccessor): base(dbRepository){_httpContextAccessor = httpContextAccessor;_repository = dbRepository;//多租户会用到这init代码,其他情况可以不用//base.Init(dbRepository);}WebResponseContent _webResponse = new WebResponseContent();public override WebResponseContent Add(SaveModel saveDataModel){//取出校验完成后的从表1.2的数据TableExtra tableExtra = saveDataModel.Extra.ToString().DeserializeObject<TableExtra>();//保存到数据库前AddOnExecuting = (CY_RD_PRODUCT_DETAIL detail, object obj) =>{//根据自定义注册规则生成序列号 2024-2-4 13:57:02 可以写一个通用方法调用if (string.IsNullOrWhiteSpace(detail.PRODUCT_DETAIL_CODE)){//detail.PRODUCT_DETAIL_CODE = GetCustCodeFromRule("ProductDetailRule");}//如果返回false,后面代码不会再执行if (repository.Exists(x => x.PRODUCT_DETAIL_CODE == detail.PRODUCT_DETAIL_CODE)){return _webResponse.Error("产品详细信息编号已存在");}return WebResponseContent.Instance.OK();};//Equip_SpotMaintPlan 此处已经提交了数据库,处于事务中AddOnExecuted = (CY_RD_PRODUCT_DETAIL detail, object obj) =>{int i = 0;//在此操作tableExtra从表信息List<CY_RD_COMPONENT_DETAIL_LIST> newsList = tableExtra.Table1List.Select(s => new CY_RD_COMPONENT_DETAIL_LIST{COMMENT_PROJECT_NO = s.COMMENT_PROJECT_NO,PRODUCT_CODE = detail.PRODUCT_CODE,PRODUCT_DETAIL_CODE = detail.PRODUCT_DETAIL_CODE,MODULE_TYPE = s.MODULE_TYPE,DEVELOPMENT_PROJECT_NO = detail.DEVELOPMENT_PROJECT_NO,HARDWARE_VERSION = s.HARDWARE_VERSION,COMPONENT_CODE = s.COMPONENT_CODE,COMPONENT_POSITION = s.COMPONENT_POSITION,WRITE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),HANDLE_FLAG = "N",BaseQtyN = s.BaseQtyN,PRODUCT_ID = s.PRODUCT_ID,PRODUCT_DETAIL_ID = detail.PRODUCT_DETAIL_ID}).ToList();//id=0的默认为新增的数据List<CY_RD_COMPONENT_DETAIL_LIST> addList = newsList.ToList();//设置默认创建人信息addList.ForEach(x => { x.SetCreateDefaultVal(); });//新增repository.AddRange(addList);int j = 0;//点检保养项目List<CY_RD_PRODUCT_TEST_REPORT> newsList2 = tableExtra.Table2List.Select(s => new CY_RD_PRODUCT_TEST_REPORT{PRODUCT_CODE = detail.PRODUCT_CODE,PRODUCT_DETAIL_CODE = detail.PRODUCT_DETAIL_CODE,DEVELOPMENT_PROJECT_NO = detail.DEVELOPMENT_PROJECT_NO,TEST_REPORT_CODE = s.TEST_REPORT_CODE,TEST_TYPE = s.TEST_TYPE,TEST_ORGANIZATION = s.TEST_ORGANIZATION,REPORT_FROM_ORGANIZATION = s.REPORT_FROM_ORGANIZATION,REPORT_DATE = s.REPORT_DATE,REPORT_VALID_DATE = s.REPORT_VALID_DATE,WITNESS_MATERIAL_URL = s.WITNESS_MATERIAL_URL,WRITE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),HANDLE_FLAG = "N",PRODUCT_ID = s.PRODUCT_ID,PRODUCT_DETAIL_ID = detail.PRODUCT_DETAIL_ID}).ToList();//id=0的默认为新增的数据List<CY_RD_PRODUCT_TEST_REPORT> addList2 = newsList2.ToList();//设置默认创建人信息addList2.ForEach(x => { x.SetCreateDefaultVal(); });//新增repository.AddRange(addList2);//最终保存repository.SaveChanges(); return WebResponseContent.Instance.OK();};return base.Add(saveDataModel);}/// <summary>/// 自定义更新从表操作/// </summary>/// <param name="saveModel"></param>/// <returns></returns>public override WebResponseContent Update(SaveModel saveModel){//取出校验完成后的从表1.2的数据TableExtra tableExtra = saveModel.Extra.ToString().DeserializeObject<TableExtra>();//保存到数据库前UpdateOnExecuting = (CY_RD_PRODUCT_DETAIL plan, object obj, object obj2, List<object> list) =>{return WebResponseContent.Instance.OK();};//App_ReportPrice 此处已经提交了数据库,处于事务中UpdateOnExecuted = (CY_RD_PRODUCT_DETAIL detail, object obj, object obj2, List<object> list) =>{List<CY_RD_COMPONENT_DETAIL_LIST> newsList = tableExtra.Table1List.Select(s => new CY_RD_COMPONENT_DETAIL_LIST{COMMENT_PROJECT_NO = s.COMMENT_PROJECT_NO,PRODUCT_CODE = detail.PRODUCT_CODE,PRODUCT_DETAIL_CODE = detail.PRODUCT_DETAIL_CODE,MODULE_TYPE = s.MODULE_TYPE,DEVELOPMENT_PROJECT_NO = detail.DEVELOPMENT_PROJECT_NO,HARDWARE_VERSION = s.HARDWARE_VERSION,COMPONENT_CODE = s.COMPONENT_CODE,COMPONENT_POSITION = s.COMPONENT_POSITION,WRITE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),HANDLE_FLAG = "N",BaseQtyN = s.BaseQtyN,PRODUCT_ID = s.PRODUCT_ID,PRODUCT_DETAIL_ID = detail.PRODUCT_DETAIL_ID,PRODUCT_DETAIL_LIST_ID=s.PRODUCT_DETAIL_LIST_ID}).ToList();//id=0的默认为新增的数据List<CY_RD_COMPONENT_DETAIL_LIST> addList = newsList.Where(d=>d.PRODUCT_DETAIL_LIST_ID == 0).ToList();//设置默认创建人信息addList.ForEach(x => { x.SetCreateDefaultVal(); });//新增repository.AddRange(addList);//获取所有编辑行List<long> editIds = newsList.Where(x => x.PRODUCT_DETAIL_LIST_ID != 0).Select(s => s.PRODUCT_DETAIL_LIST_ID).ToList();//从数据库查询编辑的行是否存在,如果数据库不存在,执行修改操作会异常List<long> existsIds = CY_RD_COMPONENT_DETAIL_LISTRepository.Instance.FindAsIQueryable(x => editIds.Contains(x.PRODUCT_DETAIL_LIST_ID)).Select(s => s.PRODUCT_DETAIL_LIST_ID).ToList();//获取实际可以修改的数据List<CY_RD_COMPONENT_DETAIL_LIST> updateList = newsList.Where(x => existsIds.Contains(x.PRODUCT_DETAIL_LIST_ID)).ToList();//设置默认修改人信息updateList.ForEach(x => { x.SetModifyDefaultVal(); });//修改(第二个参数指定要修改的字段,第三个参数执行保存)repository.UpdateRange(updateList, x => new { x.HARDWARE_VERSION, x.COMPONENT_CODE, x.COMPONENT_POSITION, x.BaseQtyN });//删除不需要的记录//点检保养项目List<CY_RD_PRODUCT_TEST_REPORT> newsList2 = tableExtra.Table2List.Select(s => new CY_RD_PRODUCT_TEST_REPORT{PRODUCT_CODE = detail.PRODUCT_CODE,PRODUCT_DETAIL_CODE = detail.PRODUCT_DETAIL_CODE,DEVELOPMENT_PROJECT_NO = detail.DEVELOPMENT_PROJECT_NO,TEST_REPORT_CODE = s.TEST_REPORT_CODE,TEST_TYPE = s.TEST_TYPE,TEST_ORGANIZATION = s.TEST_ORGANIZATION,REPORT_FROM_ORGANIZATION = s.REPORT_FROM_ORGANIZATION,REPORT_DATE = s.REPORT_DATE,REPORT_VALID_DATE = s.REPORT_VALID_DATE,WITNESS_MATERIAL_URL = s.WITNESS_MATERIAL_URL,WRITE_DATE = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),HANDLE_FLAG = "N",PRODUCT_ID = s.PRODUCT_ID,PRODUCT_DETAIL_ID = detail.PRODUCT_DETAIL_ID,PRODUCT_REPORT_ID=s.PRODUCT_REPORT_ID}).ToList();//id=0的默认为新增的数据List<CY_RD_PRODUCT_TEST_REPORT> addList2 = newsList2.Where(x=>x.PRODUCT_REPORT_ID==0).ToList();//设置默认创建人信息addList2.ForEach(x => { x.SetCreateDefaultVal(); });//新增repository.AddRange(addList2);//获取所有编辑行List<long> editIds2 = newsList2.Where(x => x.PRODUCT_REPORT_ID != 0).Select(s => s.PRODUCT_REPORT_ID).ToList();//从数据库查询编辑的行是否存在,如果数据库不存在,执行修改操作会异常List<long> existsIds2 = CY_RD_PRODUCT_TEST_REPORTRepository.Instance.FindAsIQueryable(x => editIds2.Contains(x.PRODUCT_REPORT_ID)).Select(s => s.PRODUCT_REPORT_ID).ToList();//获取实际可以修改的数据List<CY_RD_PRODUCT_TEST_REPORT> updateList2 = newsList2.Where(x => existsIds2.Contains(x.PRODUCT_REPORT_ID)).ToList();//设置默认修改人信息updateList2.ForEach(x => { x.SetModifyDefaultVal(); });//修改(第二个参数指定要修改的字段,第三个参数执行保存)repository.UpdateRange(updateList2, x => new { x.TEST_TYPE, x.TEST_ORGANIZATION, x.REPORT_FROM_ORGANIZATION, x.REPORT_DATE, x.WITNESS_MATERIAL_URL, x.REPORT_VALID_DATE });//最终保存repository.SaveChanges();return WebResponseContent.Instance.OK();};return base.Update(saveModel);}public class TableExtra{/// <summary>/// 从表1/// </summary>public List<CY_RD_COMPONENT_DETAIL_LIST> Table1List { get; set; }/// <summary>/// 从表2/// </summary>public List<CY_RD_PRODUCT_TEST_REPORT> Table2List { get; set; }} }
}

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

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

相关文章

Leetcoder Day17| 二叉树 part06

语言&#xff1a;Java/C 654.最大二叉树 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 …

PLC设置网口通讯的原因

PLC设置网口通讯功能&#xff0c;是现场总线向工业以太网的迈进&#xff0c;更是为了在网口之上构建更为庞大、开放的大一统的生态系统。 有了以太网&#xff0c;特别是TCP/IP协议后&#xff0c;全员工控人的日常工作更为便利了。 主要体现在以下4点&#xff1a; 1.再也不需要…

linux逻辑卷/dev/mapper/centos-root扩容增加空间

centos7中/dev/mapper/centos-root扩容 问题文件系统根目录&#xff0c;/dev/mapper/centos-root空间满了&#xff0c;导致k8s不停重启 1.查看磁盘情况 df -h #查看最大占用目录 du -h -x --max-depth12.查看磁盘信息 fdisk -l3.查看磁盘分区层级 lsblk可见剩余空闲60G空间…

Visual Paradigm 工具使用思考

大型项目的管理与实施&#xff0c;需要有高效的管理工具&#xff0c;VP算是不错的&#xff0c;美中不足是界面太死板&#xff0c;使用不便利&#xff0c;对于小型项目按照这个模式来&#xff0c;相当麻烦。 当然肯定会有人觉得不错&#xff0c;需要的&#xff0c;联系我

nacos集群部署

一 部署mysql 根据下面文章 docker安装mysql和数据挂载_docker run -p 3306:3306 -name mysql -v /mydata/mys-CSDN博客 建议&#xff1a;使用Mysql5.7&#xff0c;之前尝试使用Mysql8.0&#xff0c;会报错 经过查询&#xff1a; 报错原因 可能是数据库版本过高 二 部署na…

蓝桥杯备赛系列——倒计时50天!

蓝桥杯备赛系列 倒计时50天&#xff01; 前缀和和差分 知识点 **前缀和数组&#xff1a;**假设原数组用a[i]表示&#xff0c;前缀和数组用sum[i]表示&#xff0c;那么sum[i]表示的是原数组前i项之和&#xff0c;注意一般用前缀和数组时&#xff0c;原数组a[i]的有效下标是从…

【安卓基础3】Activity(一)

&#x1f3c6;作者简介&#xff1a;|康有为| &#xff0c;大四在读&#xff0c;目前在小米安卓实习&#xff0c;毕业入职 &#x1f3c6;本文收录于 安卓学习大全&#xff0c;欢迎关注 &#x1f3c6;安卓学习资料推荐&#xff1a; 视频&#xff1a;b站搜动脑学院 视频链接 &…

设置主从复制时发生报错Could not find first log file name in binary log index file‘;解决方案

如图所示&#xff0c;slave_io_runnind:no,slave_sql_running:yes 此时&#xff0c;主从配置错误&#xff0c;我们可以查看Last_IO_Error:来查看报错信息 此时&#xff0c;我们需要停止从服务器的主从服务&#xff0c; mysql> stop slave; Query OK, 0 rows affected, 1 w…

回显服务器的制作方法

文章目录 客户端和服务器TCP和UDP的特点UDP socket api的使用DatagramSocketDatagramPacketInetSocketAddress API 做一个简单的回显服务器UDP版本的回显服务器TCP版本的回显服务器 客户端和服务器 在网络中&#xff0c;主动发起通信的一方是客户端&#xff0c;被动接受的这一方…

1. 浏览器跨 Tab 窗口通信原理

浏览器跨 Tab 窗口通信原理 ![01 所谓多窗口下进行互相通信&#xff0c;是指在浏览器中&#xff0c;不同窗口&#xff08;包括不同标签页、不同浏览器窗口甚至不同浏览器实例&#xff09;之间进行数据传输和通信的能力。 当然&#xff0c;本文我们探讨的是纯前端的跨 Tab 页…

Web 前端 UI 框架Bootstrap简介与基本使用

Bootstrap 是一个流行的前端 UI 框架&#xff0c;用于快速开发响应式和移动设备优先的网页。它由 Twitter 的设计师和工程师开发&#xff0c;现在由一群志愿者维护。Bootstrap 提供了一套丰富的 HTML、CSS 和 JavaScript 组件&#xff0c;可以帮助开发者轻松地构建和定制网页和…

Springboot医院信息管理系统源码 带电子病历和LIS Saas应用+前后端分离+B/S架构

目录 系统特点 技术架构 系统功能 1、 标准数据维护 2、 收费&#xff08;门诊/住院&#xff09;系统 3、 药剂管理系统 4、 医生工作站系统 5、 护士工作站系统 6、电子病历系统 系统优点 云HIS系统简介 云HIS系统功能模块 门急诊挂号管理 门诊收费管理 门诊医…

Gitee教程2(完整流程)

1.配置git git config --global user.name "用户名" git config --global user.email "密码" 如何获取&#xff1f; gitee右上角加号点击新建仓库&#xff0c;仓库名随便起一个就行 找到这条命令&#xff0c;把这两句一个一个复制到vscode终端就行 2.创建g…

RabbitMQ的安装与使用

RabbitMQ的安装与使用 介绍一、RabbitMQ的安装1 查找镜像2 拉取镜像3 查看镜像4 创建容器5 查看容器6 访问测试 二、RabbitMQ的使用1 创建项目2 配置文件3 队列配置文件4 消费者5 生产者6 测试 三、交换器四、普通队列Demo五、死信队列Demo1 介绍2 示例2.1 配置2.2 生产者2.3 消…

【非常详细!】QT基础【二万字长文】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;QT从基础到进阶 1 QMake2 Qt中三个窗口部件的区别2.1 QMainWindow2.2 QWidget2.3 QDialog 3 Visual Studio的QT项目与QtCreater项目相互转换3.1 QtCreater项目转VS项目3.2 VS项目转QtCreat…

百度地图海量点方案趟坑记录(百度地图GL版 + MapVGL + vue3 + ts)

核心需求描述 不同层级有不同的海量图标展示底层海量图标需要展示文字拖动、放大缩小都需要重新请求数据并展示固定地图中心点&#xff08;拖动、放大缩小&#xff0c;中心点始终在地图中心&#xff09; 示例图片&#xff1a;&#xff08;某些图片涉及公司数据&#xff0c;就未…

苍穹外卖Day02——总结2

前期文章 文章标题地址苍穹外卖Day01——总结1https://blog.csdn.net/qq_43751200/article/details/135466359?spm1001.2014.3001.5501苍穹外卖Day01——解决总结1中存在的问题https://lushimeng.blog.csdn.net/article/details/135473412 总结2 前期文章1. 新增员工模块1.1 …

初阶数据结构之---顺序表和链表(C语言)

引言-线性表 线性表&#xff1a; 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构。线性表在逻辑上是线性结构&#xff0c;也就是说是连续的一条直线。但在物理上并不一定是连续的。线性表在物理上…

Django学习笔记-创建第一个django项目

1.创建一个虚拟环境的python项目 2.点击解释器设置 3.安装django包 4.终端选择Command Prompt 5.创建django项目运行django-admin startproject demo01(自命名) 6.修改连接数据库为mysql 7.修改语言(中国汉语)和时区(亚洲上海)USE_TZ改为False,否则时区不生效 8.修改TEMPLA…

并发List、Set、ConcurrentHashMap底层原理

并发List、Set、ConcurrentHashMap底层原理 ArrayList: List特点&#xff1a;元素有放入顺序&#xff0c;元素可重复 存储结构&#xff1a;底层采用数组来实现 public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Clon…