Browse Source

选择元素弹窗回显选择

duy 2 days ago
parent
commit
91489ad20f

+ 9 - 5
src/views/formula/component/formulaTemplate.vue

@@ -15,7 +15,7 @@
 
               <template v-else>
                         <template v-if="(typeof item)=='object' && (item.type == 'Element' || item.type == 'ParamData')">
-                          <el-tag>{{item.name}}</el-tag>
+                          <el-tag >{{item.name}}</el-tag>
                         </template>
                         <template v-else>
                           <el-input v-model="formulainfo.arguments[index]" placeholder="请输入内容" style="width:200px" ></el-input>
@@ -25,7 +25,7 @@
               </template>
         </span>
         <el-link type="primary" @click="changeType('text',index)" class="mg-l-10" v-if="formulainfo.template.args[index].m!=='是否同行/列计算(选填)'">输入文本</el-link>
-        <el-link type="primary" @click="changeType('ele',index)" class="mg-l-10"  v-if="formulainfo.template.args[index].m!=='是否同行/列计算(选填)'">选择元素</el-link>
+        <el-link type="primary" @click="changeType('ele',index,item)" class="mg-l-10"  v-if="formulainfo.template.args[index].m!=='是否同行/列计算(选填)'">选择元素</el-link>
         <el-link type="primary" @click="setCurEle(index)" class="mg-l-10"  v-if="formulainfo.template.args[index].m!=='是否同行/列计算(选填)'">当前元素</el-link>
       </div>
     </div>
@@ -65,13 +65,16 @@ export default {
   },
   methods:{
     //切换选择的状态
-    changeType(type,index){
+    changeType(type,index,item){
+   
+      
       if(type == 'text'){
         this.$set(this.formulainfo.arguments,index,'');
       }else if(type == 'ele'){
         this.$emit('sele-ele-handle',{
           arguments:this.formulainfo.arguments,
-          index
+          index,
+          item
         })
       }
     },
@@ -81,7 +84,8 @@ export default {
       let tmp = JSON.parse(JSON.stringify(this.curele));
       tmp['tableElementKey']= tmp['tableElementKey'].replace("_key",":key")
       this.$set(this.formulainfo.arguments,index,tmp);
-    }
+    },
+
   }
 }
 </script>

+ 11 - 6
src/views/formula/component/table-form-write.vue

@@ -20,7 +20,7 @@ export default {
     'initTableName',
     'selectedTableKey',
     'containerId',
-    'multipleSelect'  // 新增:是否允许多选,默认为false
+    'multipleSelect'  // 是否允许多选,默认为false
   ],
   data() {
     return {
@@ -224,6 +224,11 @@ export default {
         return; // 不是当前组件内的点击,不处理
       }
       
+      // 检测Control键是否按下 (e.ctrlKey 对Windows/Linux有效,e.metaKey对Mac的Command键有效)
+      const isCtrlPressed = e.ctrlKey || e.metaKey;
+      // 只有在multipleSelect为true时才允许通过Control键进行多选
+      const isMultiSelectMode = this.multipleSelect && isCtrlPressed;
+      
       // 只在当前容器内查找目标元素
       let target = e.target;
       while (target && target !== container && !target.id) {
@@ -257,15 +262,15 @@ export default {
         item.tableElementKey === elementId
       );
       
-      // 修改:根据多选模式决定是否清空已选元素
-      if (!this.multipleSelect) {
+      // 根据是否按下Control键决定是否清空已选元素
+      if (!isMultiSelectMode) {
         this.clearAllSelected();
       }
       
       if (!isSameKeySelected) {
         if (id.startsWith('key_')) {
           const keyPrefix = this.extractKeyPrefix(id);
-          // 关键修复:只在当前容器内查找同前缀元素
+          // 只在当前容器内查找同前缀元素
           const samePrefixElements = container.querySelectorAll(`[id^="${keyPrefix}__"]`);
           this.selectElements(samePrefixElements);
         } else {
@@ -273,7 +278,7 @@ export default {
         }
       } else {
         // 如果已经有相同 tableElementKey 的元素被选中,在多选模式下点击会取消选择所有相同key的元素
-        if (this.multipleSelect) {
+        if (isMultiSelectMode) {
           this.deselectElementsByKey(elementId);
         }
       }
@@ -314,7 +319,7 @@ export default {
       });
     },
     
-    // 修改:取消选择所有具有相同 tableElementKey 的元素
+    // 取消选择所有具有相同 tableElementKey 的元素
     deselectElementsByKey(tableElementKey) {
       const container = this.getContainer();
       if (!container) return;

+ 15 - 1
src/views/formula/edit.vue

@@ -396,7 +396,7 @@
             <div class="mg-t-10 mg-b-10 no-mb-col">
               <el-scrollbar style="height: 460px">
              
-                    <tableFormWrite :pkeyId="eleTableId"      :multiple-select="true"  @element-selected="(obj, val,list) => handleElementSelectedList(obj, val, list)" :initTableName="initTableNameList"    :key="tableKey"   :container-id="'excel-container-'+tableKey"></tableFormWrite>
+                    <tableFormWrite :pkeyId="eleTableId"      :multiple-select="true"  @element-selected="(obj, val,list) => handleElementSelectedList(obj, val, list)" :initTableName="initTableNameList"    :key="tableKey"   :container-id="'excel-container-'+tableKey"  :selectedTableKey="selectedTableKeyList"></tableFormWrite>
               </el-scrollbar>
             
             </div>
@@ -624,6 +624,7 @@ export default {
       initTableNameComp:'',//初始表名组件
       selectedTableKeyComp:'', // 存储选中的表格元素key 组件
       initTableNameList:'',//初始表名 选择元素弹窗
+      selectedTableKeyList:'', // 存储  选择元素弹窗  选中的表格元素key
       seleList:[],//选择元素弹窗 选中的元素列表
       tableKey:'3',
       initTableNameDev:'',//初始表名 允许偏差值范围
@@ -1480,6 +1481,19 @@ handleDelete(e) {
 
     //显示选择元素弹窗
     showChooseEle(argumenObj){
+   
+      const {item} = argumenObj;
+ 
+      if(item){
+          const keyParts =  item.tableElementKey.split('key');
+            this.selectedTableKeyList = keyParts.length > 1 ? 'key'+keyParts[1] : null;
+      }else{
+        this.selectedTableKeyList = null;
+      }
+
+     
+ 
+      
       this.argumenObj = argumenObj;
       this.chooseEleVisible = true;