• 前端页面实现【矩阵表格与列表】


    实现页面: 

    1.动态表绘制(可用于矩阵构建)

    1. <template>
    2. <div>
    3. <h4><b>基于层次分析法的权重计算</b></h4>
    4. <table table-layout="fixed">
    5. <thead>
    6. <tr>
    7. <th v-for="(_, colIndex) in (numRows + 1)" :key="colIndex">{{colIndex===0?"图层":layers[colIndex-1]}}</th>
    8. </tr>
    9. </thead>
    10. <tbody >
    11. <tr v-for="(rowData, rowIndex) in generateTableData(numRows)" :key="rowIndex" :style="{ '--wid': wid}">
    12. <td
    13. v-for="(cell, colIndex) in rowData"
    14. :key="colIndex"
    15. :class="{ nonEditable: isNonEditable(rowIndex, colIndex) }"
    16. >
    17. {{rowData[colIndex]}}
    18. <input
    19. v-if="colIndex!==0&&!isNonEditable(rowIndex, colIndex)"
    20. type="text"
    21. v-model="rowData.values[colIndex]"
    22. style="width: 100%;border: none;text-align: center"
    23. />
    24. <span v-else>{{ value }}</span>
    25. </td>
    26. </tr>
    27. </tbody>
    28. </table>
    29. </div>
    30. </template>
    31. <script>
    32. export default {
    33. name: 'TimeManagementTable',
    34. props:{
    35. layers:{
    36. type:Array,
    37. required: true,
    38. default: ()=>['地质', '水文', '其他','W']
    39. },
    40. },
    41. data() {
    42. return {
    43. numRows:null ,
    44. wid:null
    45. };
    46. },
    47. created() {
    48. this.numRows = this.layers.length;
    49. this.wid = 100/(this.numRows+1) + '%';
    50. },
    51. methods: {
    52. isNonEditable(rowIndex, colIndex) {
    53. // 假设我们想让第二列的第二个单元格(索引为1, 1)为灰色且不可编辑
    54. // 你可以根据实际需求调整这个逻辑
    55. return colIndex!==0&rowIndex+1>=colIndex||colIndex===this.numRows;
    56. },
    57. generateTableData(numRows) {
    58. const tableData = [];
    59. for (let i = 0; i < numRows-1; i++) {
    60. let arr= Array(numRows + 1).fill('')
    61. arr[0]=this.layers[i]
    62. tableData.push(arr); // 填充空字符串或你需要的默认值
    63. }
    64. return tableData;
    65. }
    66. },
    67. };
    68. </script>
    69. <style scoped>
    70. /* 样式可以根据需要添加 */
    71. table {
    72. width: 100%;
    73. }
    74. th, td {
    75. border: 1px solid black;
    76. padding: 8px;
    77. text-align: center;
    78. width: var(--wid);
    79. }

    核心要点:

    • 动态性:可根据不同数据项动态自适应构建表格

     记录数组长度,根据数组长度动态设置行列号数以及其列宽

    <tr v-for="(rowData, rowIndex) in generateTableData(numRows)" :key="rowIndex" :style="{ '--wid': wid}">

    data() {
        return {
          numRows:null ,
          wid:null
        };
      },

      created() {
        this.numRows = this.layers.length;
        this.wid = 100/(this.numRows+1) + '%';

      },

    th, td {
      border: 1px solid black;
      padding: 8px;
      text-align: center;
      width: var(--wid);
    }

    • 表格单元格权限控制:只有指定单元格可编辑,收集用户输入数据,其余为灰色且不可编辑

                      v-for="(cell, colIndex) in rowData"
              :key="colIndex"
              :class="{ nonEditable: isNonEditable(rowIndex, colIndex) }"
            >
              {{rowData[colIndex]}}
                          v-if="colIndex!==0&&!isNonEditable(rowIndex, colIndex)"
                type="text"
                v-model="rowData.values[colIndex]"
                style="width: 100%;border: none;text-align: center"
              />
              {{ value }}

     isNonEditable(rowIndex, colIndex) {
          // 假设我们想让第二列的第二个单元格(索引为1, 1)为灰色且不可编辑
          // 你可以根据实际需求调整这个逻辑
          return colIndex!==0&rowIndex+1>=colIndex||colIndex===this.numRows;
        },

    • 表格标题行和列设置:设置表格头和表格第一列为指定数组内的名称

     
         
            {{colIndex===0?"图层":layers[colIndex-1]}}
         
         
         
         
                      v-for="(cell, colIndex) in rowData"
              :key="colIndex"
              :class="{ nonEditable: isNonEditable(rowIndex, colIndex) }"
            >
              {{rowData[colIndex]}}
                          v-if="colIndex!==0&&!isNonEditable(rowIndex, colIndex)"
                type="text"
                v-model="rowData.values[colIndex]"
                style="width: 100%;border: none;text-align: center"
              />
              {{ value }}
           
         
         

    2.类C#中控件前端实现: 

    1. <template>
    2. <div class="app-container standard-level">
    3. <el-row>
    4. <el-col :span="24">
    5. <el-card class="box-card">
    6. <div slot="header" class="clearfix">
    7. <span>StandardLevel</span>
    8. </div>
    9. <div>
    10. <!-- 指标选择 -->
    11. <div id="indicator" style="border: gray 1px dashed; padding: 5px;">
    12. <span class="title"> 指标创建</span>
    13. <el-form size="small" :inline="true">
    14. <el-form-item label="指标类别" class="form-label" >
    15. <el-input
    16. v-model="indicatorType"
    17. placeholder="请输入指标类别"
    18. clearable
    19. size="small"
    20. />
    21. </el-form-item>
    22. <el-form-item class="flex-container" >
    23. <div class="flex-container">
    24. <div class="flex-item" v-for="item in layers" :key="item.id">
    25. <el-checkbox :label="item.id" style="margin: 8px 0;">{{ item.name }}</el-checkbox>
    26. </div>
    27. </div>
    28. </el-form-item>
    29. </el-form>
    30. <!-- 操作按钮 -->
    31. <div class="buttons" style="display: flex;justify-content: center;">
    32. <el-button type="primary" size="mini" @click="addNode">添加</el-button>
    33. <el-button type="warning" size="mini" @click="modifyNode">确定</el-button>
    34. <el-button type="danger" size="mini" @click="cancel">取消</el-button>
    35. </div>
    36. </div>
    37. <div id="list" style="margin-top: 10%;border: gray 1px dashed; padding: 5px;">
    38. <span class="title">层次结构</span>
    39. <!-- 层次结构 -->
    40. <el-tree
    41. :data="treeData"
    42. :props="defaultProps"
    43. show-checkbox
    44. node-key="id"
    45. ref="tree">
    46. </el-tree>
    47. </div>
    48. </div>
    49. </el-card>
    50. </el-col>
    51. </el-row>
    52. </div>
    53. </template>
    54. <script>
    55. import ElementForm from '@/plugins/package/panel/form/ElementForm.vue'
    56. export default {
    57. components: { ElementForm },
    58. data() {
    59. return {
    60. indicatorType:'',
    61. selectedCategory: '',
    62. selectedIndicators: [],
    63. layers:[
    64. { id: '001', name: '塌陷点buf' },
    65. { id: '002', name: '断裂buf' },
    66. { id: '003', name: '水系buf300' },
    67. { id: '004', name: '轨道交通buf' },
    68. { id: '005', name: '地下水变幅' },
    69. { id: '006', name: '第四系厚度' },
    70. { id: '007', name: '工程地质' },
    71. { id: '008', name: '岩溶水富水性' },
    72. ],
    73. treeData: [
    74. {
    75. label: '地层条件',
    76. children: [
    77. { label: '剥蚀buf' },
    78. { label: '第四系厚度' },
    79. { label: '工程地质' },
    80. ],
    81. },
    82. { label: '水文条件' },
    83. { label: '其他条件' },
    84. ],
    85. defaultProps: {
    86. children: 'children',
    87. label: 'label',
    88. },
    89. };
    90. },
    91. methods: {
    92. addNode() {
    93. // 添加节点的逻辑
    94. },
    95. modifyNode() {
    96. // 修改节点的逻辑
    97. },
    98. cancel() {
    99. // 取消操作的逻辑
    100. },
    101. },
    102. };
    103. </script>
    104. <style scoped>
    105. .standard-level {
    106. padding: 20px;
    107. width: 30%;
    108. }
    109. .form-label {
    110. margin-bottom: 10px;
    111. }
    112. .buttons {
    113. margin-top: 20px;
    114. }
    115. .flex-container {
    116. display: flex;
    117. flex-wrap: wrap;
    118. .flex-item {
    119. width: 50%;
    120. }
    121. }
    122. span.title{
    123. display : block;
    124. width : 25%;
    125. height: 15px;
    126. font-weight: bold;
    127. font-size: 16px;
    128. position: relative;
    129. top:-15px;
    130. text-align: center;
    131. background: white;
    132. }
    133. </style>

    核心要点:

    • checkbox列对齐设置

    Element ui 丨el-checkbox-group 布局对齐_el-checkbox-group 对齐方式-CSDN博客

    • 边框上显示字体设置

     


                  指标创建

     span.title{
      display : block;
      width : 25%;
      height: 15px;
      font-weight: bold;
      font-size: 16px;
      position: relative;
      top:-15px;
      text-align: center;
      background: white;
    }

  • 相关阅读:
    隆云通五要素微气象仪
    lombok @EqualsAndHashCode 注解如何让对象.equals()方法只比较部分属性
    2022年,计算机视觉最常用的Python库
    计算机视觉:驾驶员疲劳检测
    torch.optim 之 Algorithms (Implementation: for-loop, foreach, fused)
    基于SSM的供电公司安全生产考试系统设计与实现
    高斯消元+叉积求面积+记忆化搜索
    PyTorch for Audio + Music Processing(1) :Course Overview(课程大纲)
    LeetCode0461.汉明距离 Go语言AC笔记
    计算几何+2sat:1020T3
  • 原文地址:https://blog.csdn.net/m0_55049655/article/details/139814599