vue中实现css布局

在vue中通过flex布局实现css的s型结构

通过数组截取循环布局,奇数行从左到右,在偶数行从右到左实现s型结构
在这里插入图片描述

主要内容分为三部分

中间内容部分

数据格式

     items: [
           {
               nodeList: [1, 2, 3, 4, 5, 6]
           },
           {
               nodeList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
           }, {
               nodeList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
           },
           {
               nodeList: [1, 2, 3, 4]
           }
       ],
<template>
	<a-row class="row" id="row" :class="alignItem(index)" :style="styleRow(index)">
	  <template v-for="(ite,inde) in it">
	      <a-col :xxl="4" :xl="6" :lg="8" :md="12">
	          <div class="lineBg" :style="{height: lineHeight+'px'}"
	               :class="{
	                    'lineBorderLeft':it.length<row && inde===0 && index!=0  && inde!=it.length-1 && index%2!=0 || (item.nodeList.length===row*index+1 && index % 2 !== 0),
	                    'lineBorderRight':(it.length<row && inde==it.length-1 && index%2==0)}">
	              <div class="line-title">
	                  <div class="boxGrey">{{ ite }}</div>
	              </div>
	          </div>
	          <template>
	              <div class="item">
	                  <div>
	                      row:{{ row }}<br/>
	                      it:{{ it.length }}<br/>
	                      index:{{ index }}<br/>
	                  </div>
	              </div>
	          </template>
	          <!--   半圆的时候设置占位   -->
	          <div v-if="!hasRightAngle" :style="{height: lineHeight+'px'}"></div>
	      </a-col>
	  </template>
	</a-row>
</template>
computed:{
    styleRow() {
           return function (index) {
               if (index > 0) {
                   return {
                       marginTop: !this.hasRightAngle ? `-${this.lineHeight}px` : 0
                   }
               }
           }
       },
       alignItem() {
           return function (index) {
               return index % 2 !== 0 ? 'justify-end' : ''
           }
       },
}
两端拼接的直接和半圆处理

linexx-round-r 和 linexx-round-l 代表拐角处的半圆处理
linexx-l和linexx-r两端的直角
可以切换为直角和半圆

    Vue.component('linexx-round-r', {
        template: `
          <div class="linexx-body" :style="styleRoundRow(index)">
          <div class="linexxrRound"
               v-if="index%2==0 && index!=splitArrayByLength(item.nodeList,row).length-1">
            <div class="innerxx-inner"></div>
          </div>
          <template v-else>
            <div style="width: 130px" class="linexxr-box" v-if="index<=0 && it.length>=row"
                 :style="styleRoundRow(index)">
            </div>
            <div style="width: 130px" v-else :style="styleRoundRow(index)"></div>
          </template>
          </div>`,
        props: ['it', 'item', 'index', 'row', "lineHeight"],
        inject: ['splitArrayByLength'],
        computed: {
            styleRoundRow() {
                return function (index) {
                    if (index > 0) {
                        return {
                            marginTop: `-${this.lineHeight}px`
                        }
                    }
                }
            },
        }
    })

    Vue.component('linexx-round-l', {
        template: `
          <div class="linexx-body" :style="styleRoundRow(index)">
          <div class="linexxlRound"
               v-if="index%2!=0 && index!=splitArrayByLength(item.nodeList,row).length-1">
            <div class="innelxx-inner"></div>
          </div>
          <template v-else>
            <div style="width: 130px" class="linexxl-box" v-if="index<=0"
                 :style="styleRoundRow(index)"></div>
            <div v-else style="width: 130px" :style="styleRoundRow(index)"></div>
          </template>
          </div>`,
        props: ['it', 'item', 'index', 'row', 'lineHeight'],
        inject: ['splitArrayByLength'],

        computed: {
            styleRoundRow() {
                return function (index) {
                    if (index > 0) {
                        return {
                            marginTop: `-${this.lineHeight}px`
                            // marginTop: `-17px`
                        }
                    }
                }
            },
        }
    })

    Vue.component('linexx-l', {
        template: `
          <div class="linexx-body">
          <div class="linexxl linexxLeft"
               v-if="index%2!=0 && index!=splitArrayByLength(item.nodeList,row).length-1">
          </div>
          <template v-else>
            <div class="linexxl-box" v-if=" index%2==0 || it.length===row"></div>
            <div v-else style="width: 25px"></div>
          </template>
          </div>`,
        props: ['it', 'item', 'index', 'row'],
        inject: ['splitArrayByLength'],
    })

    Vue.component('linexx-r', {
        template: `
          <div class="linexx-body">
          <div class="linexxr linexxRight"
               v-if="index%2==0 && index!=splitArrayByLength(item.nodeList,row).length-1">
          </div>
          <template v-else>
            <div class="linexxr-box" v-if=" index%2!=0 || it.length===row" style="width: 25px"></div>
            <div v-else style="width: 25px"></div>
          </template>
          </div>`,
        props: ['it', 'item', 'index', 'row'],
        inject: ['splitArrayByLength'],
    })
顶点处理

判断有点复杂 应该还可以优化优化

<div class="lineBg" :style="{height: lineHeight+'px'}"
        :class="{
             'lineBorderLeft':it.length<row && inde===0 && index!=0  && inde!=it.length-1 && index%2!=0 || (item.nodeList.length===row*index+1 && index % 2 !== 0),
             'lineBorderRight':(it.length<row && inde==it.length-1 && index%2==0)}">
       <div class="line-title">
           <div class="boxGrey">{{ ite }}</div>
       </div>
   </div>
完整代码
<div id="app">
    <div class="container-bg">
        <div class="container" :style="containerStyle">
            <div class="container-list" v-for="(item,inx) in items">
                <div class="row-title">
                    <div class="row-title-text">{{ inx }}</div>
                </div>
                <div style="width: 100%" :id="`row${inx}`">
                    <template v-for="(it,index) in splitArrayByLength(item.nodeList,row)">
                        <div style="width: 100%;position: relative;display: flex">
                            <template v-if="hasRightAngle">
                                <linexx-l :it="it" :item="item" :index="index"
                                          :row="row"></linexx-l>
                            </template>
                            <template v-else>
                                <linexx-round-l :line-height="lineHeight" :it="it" :item="item" :index="index"
                                                :row="row"></linexx-round-l>
                            </template>
                            <a-row class="row" id="row" :class="alignItem(index)" :style="styleRow(index)">
                                <template v-for="(ite,inde) in it">

                                    <a-col :xxl="4" :xl="6" :lg="8" :md="12">

                                        <div class="lineBg" :style="{height: lineHeight+'px'}"
                                             :class="{
                                                  'lineBorderLeft':it.length<row && inde===0 && index!=0  && inde!=it.length-1 && index%2!=0 || (item.nodeList.length===row*index+1 && index % 2 !== 0),
                                                  'lineBorderRight':(it.length<row && inde==it.length-1 && index%2==0)}">
                                            <div class="line-title">
                                                <div class="boxGrey">{{ ite }}</div>
                                            </div>
                                        </div>
                                        <template>
                                            <div class="item">
                                                <div>
                                                    row:{{ row }}<br/>
                                                    it:{{ it.length }}<br/>
                                                    index:{{ index }}<br/>
                                                </div>
                                            </div>
                                        </template>
<!--                                        -->
                                        <div v-if="!hasRightAngle" :style="{height: lineHeight+'px'}"></div>
                                    </a-col>
                                </template>
                            </a-row>

                            <template v-if="hasRightAngle">
                                <linexx-r :it="it" :item="item" :index="index"
                                          :row="row"></linexx-r>
                            </template>
                            <template v-else>
                                <linexx-round-r :line-height="lineHeight" :it="it" :item="item" :index="index"
                                                :row="row"></linexx-round-r>
                            </template>

                        </div>
                    </template>
                </div>
            </div>
        </div>
    </div>
</div>

js部分


 new Vue({
        el: '#app',
        data() {
            return {
                hasRightAngle: false,
                lineHeight: 25,
                row: 6,
                hasAcknowledgeAlarm: false,
                items: [
                    {
                        nodeList: [1, 2, 3, 4, 5, 6]
                    },
                    {
                        nodeList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
                    }, {
                        nodeList: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
                    },
                    {
                        nodeList: [1, 2, 3, 4]
                    }
                ],
            }
        },
        provide() {
            return {
                splitArrayByLength: this.splitArrayByLength,
                styleRoundRow: this.styleRoundRow
            }
        },

        computed: {
            splitArrayByLength() {
                return function (array, length) {
                    let result = []
                    for (let i = 0; i < array.length; i += length) {
                        let chunk = array.slice(i, i + length)
                        // 反转偶数位置的子数组
                        if ((i / length) % 2 === 1) {
                            chunk = chunk.reverse()
                        }
                        result.push(chunk)
                    }
                    // console.log(result)
                    return result
                }
            },

            alignItem() {
                return function (index) {
                    return index % 2 !== 0 ? 'justify-end' : ''
                }
            },

            containerStyle() {
                if (this.hasAcknowledgeAlarm) {
                    return {
                        width: `calc(100% - 280px)`,
                        marginRight: '10px'
                    }
                } else {
                    return {
                        width: '100%',
                        marginRight: '0'
                    }
                }
            },

            styleRow() {
                return function (index) {
                    if (index > 0) {
                        return {
                            marginTop: !this.hasRightAngle ? `-${this.lineHeight}px` : 0
                        }
                    }
                }
            }
        },

        mounted() {
            this.handleResize()
            // 监听浏览器窗口
            window.addEventListener('resize', this.handleResize);
        },

        methods: {
            handleResize() {
                const bp = window.innerWidth >= 1600 ? 'xxl' :
                    window.innerWidth >= 1200 ? 'xl' :
                        window.innerWidth >= 992 ? 'lg' :
                            window.innerWidth >= 768 ? 'md' : 'sm'

                let emunRow = {
                    xxl: 4,
                    xl: 6,
                    lg: 8,
                    md: 12,
                    sm: 12
                }
                this.row = 24 / emunRow[bp]
                console.log('handleResize', bp)
            },
        }
    })

css部分

<style lang="less">
    .container-bg {
      background: #f2f2f2;
    }

    .container {
      box-sizing: border-box;
      padding: 20px;
      width: 100%;
      background: linear-gradient(to right, #e8e8e8 1px, transparent 1px),
      linear-gradient(to bottom, #e8e8e8 1px, transparent 1px);
      background-repeat: repeat;
      background-size: 50px 50px;
      overflow-y: auto;
    }

    .container-list {
      display: flex;
      //background: #f2f2f2;
    }

    .lineBg {
      box-sizing: border-box;
      height: 25px;
      background: #bec8d1;
      width: 100%;
      border-top: 4px solid #ffffff;
      border-bottom: 4px solid #ffffff;
      cursor: pointer;
    }

    .boxGrey {
      max-width: 80%;
      position: relative;
      top: -5px;
      padding: 5px 15px;
      //background-color: rgba(40, 140, 115, 0.1);
      background-color: #768997;
      color: #ffffff;
      border-radius: 25px;

      &::before {
        content: "";
        position: absolute;
        left: 0;
        top: 0;
        right: 0;
        bottom: 0;
        border-radius: 25px;
        border: 1px solid #768997;
        clip-path: polygon(calc(50% - 7px) 0, 50% 5px, calc(50% + 7px) 0, 100% 0, 100% 100%, 0 100%, 0 0);
      }

      &::after {
        content: "";
        position: absolute;
        /*top: -5px;*/
        bottom: -4px;
        left: calc(50% - 5px);
        width: 8px;
        height: 8px;
        /*transform: rotate(135deg);*/
        transform: rotate(315deg);
        //border: 1px solid #fc5454;
        background-color: #768997;
        clip-path: polygon(0 0, 0 100%, 100% 100%);
      }
    }

    .lineBorderLeft {
      border-left: 4px solid lawngreen;
    }

    .lineBorderRight {
      border-right: 4px solid rebeccapurple;
    }

    .line-title {
      display: flex;
      justify-content: space-around;
    }

    .row-title {
      align-self: flex-start;
      width: 80px;
      min-width: 80px;
      background: #ffffff;
      box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.16);
      text-align: center;
      margin-right: 25px;

    }

    .row-title-text {
      box-sizing: border-box;
      padding: 5px 0;
    }

    .row-title-num {
      background: #fc5454;
      color: #ffffff;
      box-sizing: border-box;
      padding: 3px 0;
    }

    .row {
      display: flex;
      flex-wrap: wrap;
      width: calc(100% - 260px);
      margin-bottom: 10px;
      position: relative;
    }

    .justify-end {
      justify-content: end;
    }

    .item {
      box-sizing: border-box;
      text-align: center;
      min-height: 63px;
      color: #333333;
      box-sizing: border-box;
      padding: 10px 0;
      margin: 5px 30px;
      box-shadow: 0px 0px 16px rgba(0, 0, 0, 0.08);
      cursor: pointer;
    }

    .value {
      margin-bottom: 8px;
    }

    .bgGrey {
      background: #f0f0f0;
    }

    .itemBorder {
      border: 1px solid #666666;
    }


    .setWidth {
      width: 50%
    }

    .linexxlRound {

      display: flex;
      justify-content: end;
      align-items: center;
      box-sizing: border-box;
      background: #bec8d1;
      //background: antiquewhite;
      width: 130px;
      height: 100%;
      border-radius: 200px 0 0 200px;
      border: 4px solid #ffffff;
      border-right: none;
    }

    .innelxx-inner {
      height: calc(100% - 34px);
      box-sizing: border-box;
      width: 105px;
      background: #f2f2f2;
      //background: green;
      border-radius: 200px 0 0 200px;
      border: 4px solid #ffffff;
      border-right: none;
    }

    .linexxrRound {
      box-sizing: border-box;
      background: #bec8d1;
      //background: antiquewhite;
      width: 130px;
      height: 100%;
      display: flex;
      justify-content: start;
      align-items: center;
      border-radius: 0 200px 200px 0;
      border: 4px solid #ffffff;
      border-left: none;

      .innerxx-inner {
        height: calc(100% - 34px);
        box-sizing: border-box;
        width: 105px;
        background: #F2F2F2;
        //background: green;
        border-radius: 0 200px 200px 0;
        border: 4px solid #ffffff;
        border-left: none;
      }
    }

    .linexxr {
      box-sizing: border-box;
      width: 25px;
      height: 100%;
      background: #bec8d1;
      border-top: 4px solid #ffffff;
      border-bottom: none;
      border-left: none;
      position: relative;

      &::after {
        content: "";
        position: absolute;
        top: 17px;
        left: 0;
        width: 4px;
        height: calc(100% - 17px);
        background: #ffffff;
      }

      &::before {
        content: "";
        position: absolute;
        left: 0px;
        bottom: -4px;
        width: 100%;
        height: 4px;
        background: #bec8d1;
        z-index: 1;
        //border-right: 4px solid #ffffff;
        box-sizing: border-box;
        border-left: 4px solid #ffffff;
      }
    }

    .linexxr-box {
      width: 25px;
      height: 25px;
      background: #bec8d1;
      //background: red;
      border: 4px solid #ffffff;
      border-left: none;
    }

    .linexxl {
      box-sizing: border-box;
      width: 25px;
      height: 100%;
      background: #bec8d1;
      border-top: 4px solid #ffffff;
      border-bottom: none;
      border-left: none;
      position: relative;

      &::after {
        content: "";
        position: absolute;
        top: 17px;
        right: 0;
        width: 4px;
        height: calc(100% - 17px);
        background: #ffffff;
      }

      &::before {
        content: "";
        position: absolute;
        right: 0;
        bottom: -4px;
        width: 100%;
        height: 4px;
        background: #bec8d1;
        z-index: 1;
        border-right: 4px solid #ffffff;
        box-sizing: border-box;
        //border-left: 4px solid #ffffff;
      }
    }

    .linexxl-box {
      width: 25px;
      height: 25px;
      box-sizing: border-box;
      background: #bec8d1;
      //background: red;
      border: 4px solid #ffffff;
      border-right: none;
    }

    .linexxRight {
      border-right: 4px solid #ffffff;
    }

    .linexxLeft {
      border-left: 4px solid #ffffff;
      border-bottom: none;
    }
  </style>

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

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

相关文章

数据结构与算法:贪心与相关力扣题455.分发饼干、376.摆动序列、53.最大子数组和(贪心+动态规划dp)、122.买卖股票的最佳时机Ⅱ

贪心算法 贪心策略在实现时&#xff0c;经常使用到的技巧&#xff1a; 根据某标准建立一个比较器来排序 根据某标准建立一个比较器来组成堆 举例题目&#xff1a;会议室安排 一些项目要占用一个会议室宣讲&#xff0c;会议室不能同时容纳两个项目的宣讲。 给你每一个项目开始…

Go 1.19.4 命令调用、日志、包管理、反射-Day 17

1. 系统命令调用 所谓的命令调用&#xff0c;就是通过os&#xff0c;找到系统中编译好的可执行文件&#xff0c;然后加载到内存中&#xff0c;变成进程。 1.1 exec.LookPath&#xff08;寻找命令&#xff09; 作用&#xff1a; exec.LookPath 函数用于在系统的环境变量中搜索可…

2024年中国工业大模型行业发展研究报告|附43页PDF文件下载

工业大模型伴随着大模型技术的发展&#xff0c;逐渐渗透至工业&#xff0c;处于萌芽阶段。 就大模型的本质而言&#xff0c;是由一系列参数化的数学函数组成的计算系统&#xff0c;且是一个概率模型&#xff0c;其工作机制是基于概率和统计推动进行的&#xff0c;而非真正的理解…

C++ 进阶:类相关特性的深入探讨

⭐在对C 中类的6个默认成员函数有了初步了解之后&#xff0c;现在我们进行对类相关特性的深入探讨&#xff01; &#x1f525;&#x1f525;&#x1f525;【C】类的默认成员函数&#xff1a;深入剖析与应用&#xff08;上&#xff09; 【C】类的默认成员函数&#xff1a;深入剖…

SpringBoot使用RestTemplate实现发送HTTP请求

Java 实现发送 HTTP 请求&#xff0c;系列文章&#xff1a; 《Java使用原生HttpURLConnection实现发送HTTP请求》 《Java使用HttpClient5实现发送HTTP请求》 《SpringBoot使用RestTemplate实现发送HTTP请求》 1、RestTemplate 的介绍 RestTemplate 是 Spring 框架提供的一个用…

【java】抽象类和接口(了解,进阶,到全部掌握)

各位看官早安午安晚安呀 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连&#xff0c;小编尽全力做到更好 欢迎您分享给更多人哦 大家好我们今天来学习Java面向对象的的抽象类和接口&#xff0c;我们大家庭已经来啦~ 一&#xff1a;抽象类 1.1:抽象类概念 在面向对象的概念中…

12寸FAB厂试产到量产实现无纸化要素之软硬件

在12寸先进封装半导体车间从试产到量产的过程中&#xff0c;实现生产过程无纸化&#xff0c;需要综合考虑软硬件的配置。以下是一些关键的规划建议&#xff1a; 1、生产文档管理系统&#xff08;PDM&#xff09;&#xff1a; 采用基于SOLIDWORKS PDM开发的无纸化方案&#xf…

uniapp 整合 OpenLayers - 加载Geojson数据(在线、离线)

Geojson数据是矢量数据&#xff0c;主要是点、线、面数据集合 Geojson数据获取&#xff1a;DataV.GeoAtlas地理小工具系列 实现代码如下&#xff1a; <template><!-- 监听变量 operation 的变化&#xff0c;operation 发生改变时&#xff0c;调用 openlayers 模块的…

Java面试场景题(1)---如何使用redis记录上亿用户连续登陆天数

感谢uu们的观看&#xff0c;话不多说开始~ 对于这个问题&#xff0c;我们需要先来了解一下~ 海量数据都可以用bitmap来存储&#xff0c;因为占得内存小&#xff0c;速度也很快 我大概计算了一下~ 完全够&#xff1a;String类型512M 1byte 8个bit位 8个状态 512M1024byt…

数据库性能测试报告总结模板

1计划概述 目的&#xff1a;找出系统潜在的性能缺陷 目标&#xff1a;从安全&#xff0c;可靠&#xff0c;稳定的角度出发&#xff0c;找出性能缺陷&#xff0c;并且找出系统最佳承受并发用户数&#xff0c;以及并发用户数下长时间运行的负载情况&#xff0c;如要并发100用户&a…

CTFHUB技能树之SQL——字符型注入

开启靶场&#xff0c;打开链接&#xff1a; 直接指明是SQL字符型注入&#xff0c;但还是来判断一下 &#xff08;1&#xff09;检查是否存在注入点 1 and 11# 返回正确 1 and 12# 返回错误 说明存在SQL字符型注入 &#xff08;2&#xff09;猜字段数 1 order by 2# 1 order…

颠覆编程!通义灵码、包阅AI、CodeGeeX三大AI助手解锁无限潜力!

随着科技的疾速前行&#xff0c;人工智能&#xff08;AI&#xff09;辅助编程工具已跃然成为软件开发领域及编程爱好者群体中不可或缺的得力助手。这些融入了尖端智能化算法的工具&#xff0c;不仅深刻改变了编程工作的面貌&#xff0c;通过自动化和优化手段显著提升了编程效率…

GJS-WCP

不懂的就问&#xff0c;但我也是二把手......哭死 web GJS-ezssti 很常规的ssti模板注入&#xff0c;只过滤了"/","flag"。 过滤了/,flag 可以利用bash的特性绕过&#xff0c;如字符串截取&#xff0c;环境变量等等。payload1: {{url_for.__globals__[…

柔性数组的使用

//柔性数组的使用 #include<stdio.h> #include<stdlib.h> #include<errno.h> struct s {int i;int a[]; }; int main() {struct s* ps (struct s*)malloc(sizeof(struct s) 20 * sizeof(int));if (ps NULL){perror("malloc");return 1;}//使用这…

react18中在列表项中如何使用useRef来获取每项的dom对象

在react中获取dom节点都知道用ref&#xff0c;但是在一个列表循环中&#xff0c;这样做是行不通的&#xff0c;需要做进一步的数据处理。 实现效果 需求&#xff1a;点击每张图片&#xff0c;当前图片出现在可视区域。 代码实现 .box{border: 1px solid #000;list-style: …

Math类、System类、Runtime类、Object类、Objects类、BigInteger类、BigDecimal类

课程目标 能够熟练使用Math类中的常见方法 能够熟练使用System类中的常见方法 能够理解Object类的常见方法作用 能够熟练使用Objects类的常见方法 能够熟练使用BigInteger类的常见方法 能够熟练使用BigDecimal类的常见方法 1 Math类 1.1 概述 tips&#xff1a;了解内容…

Java | Leetcode Java题解之第493题翻转对

题目&#xff1a; 题解&#xff1a; class Solution {public int reversePairs(int[] nums) {Set<Long> allNumbers new TreeSet<Long>();for (int x : nums) {allNumbers.add((long) x);allNumbers.add((long) x * 2);}// 利用哈希表进行离散化Map<Long, Int…

【JAVA】第三张_Eclipse下载、安装、汉化

简介 Eclipse是一种流行的集成开发环境&#xff08;IDE&#xff09;&#xff0c;可用于开发各种编程语言&#xff0c;包括Java、C、Python等。它最初由IBM公司开发&#xff0c;后来被Eclipse Foundation接手并成为一个开源项目。 Eclipse提供了一个功能强大的开发平台&#x…

AI 编译器学习笔记之四 -- cann接口使用

1、安装昇腾依赖 # CANN发布件地址 https://cmc.rnd.huawei.com/cmcversion/index/releaseView?deltaId10274626629404288&isSelectSoftware&url_datarun Ascend-cann-toolkit_8.0.T15_linux-aarch64.run Ascend-cann-nnal_8.0.T15_linux-aarch64.run Ascend-cann-ker…

当下大语言模型(LLM)应用的架构介绍

想要构建你的第一个大语言模型应用&#xff1f;这里有你需要了解的一切&#xff0c;以及你今天就能开始探索的问题领域。 LLM 应用架构 我们的目标是让你能够自由地使用大语言模型进行实验、打造自己的应用&#xff0c;并挖掘那些尚未被人注意的问题领域。为此&#xff0c;Git…