|
@@ -465,6 +465,7 @@ import draggable from 'vuedraggable'
|
|
|
import {formatArrayMore,restoreArrayMore,generateResult} from './component/funComponent/multiIfElseTools'
|
|
|
import dataChange from "./component/funComponent/dataChange"
|
|
|
import tableFormWrite from "./component/table-form-write.vue";
|
|
|
+import { log } from "@antv/g2plot/lib/utils";
|
|
|
|
|
|
export default {
|
|
|
components: {
|
|
@@ -995,94 +996,129 @@ export default {
|
|
|
console.log('取消');
|
|
|
},
|
|
|
//把元素加到公式里
|
|
|
- eleAddFormulaHandle(ele){
|
|
|
- if(ele.tableElementKey){
|
|
|
- console.log(ele,'ele');
|
|
|
- //元素
|
|
|
- if(this.deleEleIndex > -1 && this.selectEleFormula.length-1 >= this.deleEleIndex){
|
|
|
- //删除元素的位置,如果下次添加元素,先加到这个位置
|
|
|
- this.selectEleFormula.splice(this.deleEleIndex,0,{
|
|
|
- type:'Element',
|
|
|
- name:ele.eName,
|
|
|
- id:ele.id,
|
|
|
- selected:false,
|
|
|
- tableElementKey:ele.tableElementKey,
|
|
|
- children:[],
|
|
|
- })
|
|
|
- this.deleEleIndex = -1;
|
|
|
- }else{
|
|
|
- this.selectEleFormula.push({
|
|
|
- type:'Element',
|
|
|
- name:ele.eName,
|
|
|
- id:ele.id,
|
|
|
- selected:false,
|
|
|
- tableElementKey:ele.tableElementKey,
|
|
|
- children:[],
|
|
|
- })
|
|
|
- this.deleEleIndex = -1;
|
|
|
- }
|
|
|
+ eleAddFormulaHandle(ele) {
|
|
|
+ let newElementIndex = -1; // 记录新添加元素的索引
|
|
|
+
|
|
|
+ if(ele.tableElementKey){
|
|
|
+ console.log(ele,'ele');
|
|
|
+ // 元素处理
|
|
|
+ if(this.deleEleIndex > -1 && this.selectEleFormula.length-1 >= this.deleEleIndex){
|
|
|
+ // 在删除位置插入新元素
|
|
|
+ this.selectEleFormula.splice(this.deleEleIndex, 0, {
|
|
|
+ type:'Element',
|
|
|
+ name:ele.eName,
|
|
|
+ id:ele.id,
|
|
|
+ selected:false,
|
|
|
+ tableElementKey:ele.tableElementKey,
|
|
|
+ children:[],
|
|
|
+ });
|
|
|
+ newElementIndex = this.deleEleIndex; // 新元素索引就是插入位置
|
|
|
+ this.deleEleIndex = -1;
|
|
|
+ }else{
|
|
|
+ // 直接添加到末尾
|
|
|
+ this.selectEleFormula.push({
|
|
|
+ type:'Element',
|
|
|
+ name:ele.eName,
|
|
|
+ id:ele.id,
|
|
|
+ selected:false,
|
|
|
+ tableElementKey:ele.tableElementKey,
|
|
|
+ children:[],
|
|
|
+ });
|
|
|
+ newElementIndex = this.selectEleFormula.length - 1; // 新元素索引是最后一个
|
|
|
+ this.deleEleIndex = -1;
|
|
|
+ }
|
|
|
|
|
|
- }else if(ele.template && ele.example){
|
|
|
+ // 选中新添加的元素并更新光标位置
|
|
|
+ this.setActiveElement(newElementIndex);
|
|
|
|
|
|
- //简单语法判断
|
|
|
- if(this.selectEleFormula.length == 0){
|
|
|
- this.$message({
|
|
|
- type: "warning",
|
|
|
- message: "公式开头不能是运算符号"
|
|
|
- });
|
|
|
- return;
|
|
|
- }else{
|
|
|
- let lastEle = this.selectEleFormula[this.selectEleFormula.length-1];
|
|
|
- if(lastEle.type == 'Operator'){
|
|
|
- this.$message({
|
|
|
- type: "warning",
|
|
|
- message: "运算符号无法连续出现在运算符号后面"
|
|
|
- });
|
|
|
- return;
|
|
|
- }
|
|
|
- if(lastEle.type == 'Brackets' && lastEle.name == '('){
|
|
|
- this.$message({
|
|
|
- type: "warning",
|
|
|
- message: "运算符号无法连续出现在左括号后面"
|
|
|
- });
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //运算符号
|
|
|
- this.selectEleFormula.push({
|
|
|
- type:'Operator',
|
|
|
- name:this.symbolReg.exec(ele.name)[1],
|
|
|
- selected:false,
|
|
|
- template:ele.template
|
|
|
- })
|
|
|
- }else if(ele.type == 'Brackets'){
|
|
|
- //括号
|
|
|
- this.selectEleFormula.splice(ele.selectIndex,0,{
|
|
|
- type:'Brackets',
|
|
|
- name:ele.name,
|
|
|
- selected:false,
|
|
|
- })
|
|
|
- }else if(ele.type == 'Text'){
|
|
|
- //输入值
|
|
|
- this.selectEleFormula.push({
|
|
|
- type:'Text',
|
|
|
- name:ele.name,
|
|
|
- selected:false,
|
|
|
- })
|
|
|
- }else if(ele.k){
|
|
|
- //节点参数
|
|
|
- this.selectEleFormula.push({
|
|
|
- type:'ParamData',
|
|
|
- name:ele.name,
|
|
|
- selected:false,
|
|
|
- id:ele.id,
|
|
|
- v:ele.v,
|
|
|
- k:ele.k,
|
|
|
- children:[],
|
|
|
- })
|
|
|
+ }else if(ele.template && ele.example){
|
|
|
+ // 运算符号处理(保持原有逻辑)
|
|
|
+ if(this.selectEleFormula.length == 0){
|
|
|
+ this.$message({
|
|
|
+ type: "warning",
|
|
|
+ message: "公式开头不能是运算符号"
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }else{
|
|
|
+ let lastEle = this.selectEleFormula[this.selectEleFormula.length-1];
|
|
|
+ if(lastEle.type == 'Operator'){
|
|
|
+ this.$message({
|
|
|
+ type: "warning",
|
|
|
+ message: "运算符号无法连续出现在运算符号后面"
|
|
|
+ });
|
|
|
+ return;
|
|
|
}
|
|
|
- },
|
|
|
+ if(lastEle.type == 'Brackets' && lastEle.name == '('){
|
|
|
+ this.$message({
|
|
|
+ type: "warning",
|
|
|
+ message: "运算符号无法连续出现在左括号后面"
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ this.selectEleFormula.push({
|
|
|
+ type:'Operator',
|
|
|
+ name:this.symbolReg.exec(ele.name)[1],
|
|
|
+ selected:false,
|
|
|
+ template:ele.template
|
|
|
+ });
|
|
|
+ newElementIndex = this.selectEleFormula.length - 1;
|
|
|
+ this.setActiveElement(newElementIndex);
|
|
|
+
|
|
|
+ }else if(ele.type == 'Brackets'){
|
|
|
+ // 括号处理
|
|
|
+ this.selectEleFormula.splice(ele.selectIndex,0,{
|
|
|
+ type:'Brackets',
|
|
|
+ name:ele.name,
|
|
|
+ selected:false,
|
|
|
+ });
|
|
|
+ newElementIndex = ele.selectIndex;
|
|
|
+ this.setActiveElement(newElementIndex);
|
|
|
+
|
|
|
+ }else if(ele.type == 'Text'){
|
|
|
+ // 输入值处理
|
|
|
+ this.selectEleFormula.push({
|
|
|
+ type:'Text',
|
|
|
+ name:ele.name,
|
|
|
+ selected:false,
|
|
|
+ });
|
|
|
+ newElementIndex = this.selectEleFormula.length - 1;
|
|
|
+ this.setActiveElement(newElementIndex);
|
|
|
+
|
|
|
+ }else if(ele.k){
|
|
|
+ // 节点参数处理
|
|
|
+ this.selectEleFormula.push({
|
|
|
+ type:'ParamData',
|
|
|
+ name:ele.name,
|
|
|
+ selected:false,
|
|
|
+ id:ele.id,
|
|
|
+ v:ele.v,
|
|
|
+ k:ele.k,
|
|
|
+ children:[],
|
|
|
+ });
|
|
|
+ newElementIndex = this.selectEleFormula.length - 1;
|
|
|
+ this.setActiveElement(newElementIndex);
|
|
|
+ }
|
|
|
+},
|
|
|
+// 新增:设置指定索引的元素为选中状态并更新光标
|
|
|
+setActiveElement(index) {
|
|
|
+ this.$nextTick(() => {
|
|
|
+ // 取消所有元素的选中状态
|
|
|
+ this.selectEleFormula.forEach(item => {
|
|
|
+ item.selected = false;
|
|
|
+ });
|
|
|
+
|
|
|
+ // 选中新添加的元素
|
|
|
+ if (this.selectEleFormula[index]) {
|
|
|
+ this.selectEleFormula[index].selected = true;
|
|
|
+ this.curSeleEleIndex = index; // 更新光标索引
|
|
|
+ }
|
|
|
+
|
|
|
+ // 确保容器获得焦点
|
|
|
+ this.$el.querySelector('.sele-ele-box1').focus();
|
|
|
+ });
|
|
|
+},
|
|
|
|
|
|
//添加括号
|
|
|
addBrackets(text,type){
|
|
@@ -2219,53 +2255,104 @@ console.log(remark,'remark');
|
|
|
})
|
|
|
})
|
|
|
},
|
|
|
- handleElementSelected(item,value){
|
|
|
- console.log(item,'选中的元素');
|
|
|
- console.log(this.itemList,'this.itemList');
|
|
|
- if(value){
|
|
|
- //简单语法判断
|
|
|
- if(this.itemList.length != 0 && this.deleEleIndex < 0){
|
|
|
- let lastEle = this.itemList[this.itemList.length-1];
|
|
|
- if(lastEle.type == 'Text'){
|
|
|
- this.$message({
|
|
|
- type: "warning",
|
|
|
- message: "元素无法连续出现在输入值后面"
|
|
|
- });
|
|
|
- item.checked = false;
|
|
|
- return;
|
|
|
- }
|
|
|
- if(lastEle.type == 'Brackets' && lastEle.name == ')'){
|
|
|
- this.$message({
|
|
|
- type: "warning",
|
|
|
- message: "元素无法连续出现在右括号后面"
|
|
|
- });
|
|
|
- item.checked = false;
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- let lastEle = this.selectEleFormula[this.selectEleFormula.length-1];
|
|
|
- if(this.selectEleFormula.length == 0 || lastEle.type == 'Operator' || lastEle.type == 'Brackets' || lastEle.name == '('){ /* 存在运算符 */
|
|
|
- this.eleAddFormulaHandle(item);
|
|
|
- } else {
|
|
|
- this.itemList.push(item);
|
|
|
- }
|
|
|
+
|
|
|
+// 修改元素选择处理方法,实现替换或添加逻辑
|
|
|
+handleElementSelected(item, value) {
|
|
|
+ console.log(item,'item');
|
|
|
+ if(!item.eName){
|
|
|
+ this.$message({
|
|
|
+ type: "warning",
|
|
|
+ message: "当前位置未配置元素,请重新选择或配置元素后再试"
|
|
|
+ });
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
- }else{
|
|
|
- let index = -1;
|
|
|
- for (let i = 0; i < this.itemList.length; i++) {
|
|
|
- if(this.itemList[i].id == item.id){
|
|
|
- index = i;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if(index>-1){
|
|
|
- this.itemList.splice(index,1);
|
|
|
- }
|
|
|
+ if (value) {
|
|
|
+ // 检查是否有选中的公式项
|
|
|
+ if (this.curSeleEleIndex !== -1 && this.curSeleEleIndex < this.selectEleFormula.length) {
|
|
|
+ const selectedItem = this.selectEleFormula[this.curSeleEleIndex];
|
|
|
+
|
|
|
+ // 如果当前选中的是Element类型,执行替换操作
|
|
|
+ if (selectedItem.type === 'Element') {
|
|
|
+ this.replaceSelectedElement(item);
|
|
|
+ return; // 替换后退出,不执行添加逻辑
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 执行添加逻辑(当前没有选中项或选中项不是Element类型)
|
|
|
+ // 简单语法判断
|
|
|
+ if (this.selectEleFormula.length > 0) {
|
|
|
+ let lastEle = this.selectEleFormula[this.selectEleFormula.length - 1];
|
|
|
+ if (lastEle.type === 'Text') {
|
|
|
+ this.$message({
|
|
|
+ type: "warning",
|
|
|
+ message: "元素无法连续出现在输入值后面"
|
|
|
+ });
|
|
|
+ item.checked = false;
|
|
|
+ return;
|
|
|
}
|
|
|
+ if (lastEle.type === 'Brackets' && lastEle.name === ')') {
|
|
|
+ this.$message({
|
|
|
+ type: "warning",
|
|
|
+ message: "元素无法连续出现在右括号后面"
|
|
|
+ });
|
|
|
+ item.checked = false;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查是否可以添加元素
|
|
|
+ if (this.selectEleFormula.length === 0 ||
|
|
|
+ ['Operator', 'Brackets'].includes(this.selectEleFormula[this.selectEleFormula.length - 1].type) ||
|
|
|
+ this.selectEleFormula[this.selectEleFormula.length - 1].name === '(') {
|
|
|
+ console.log('可以添加元素');
|
|
|
+ this.eleAddFormulaHandle(item);
|
|
|
+ } else {
|
|
|
+ console.log('不能添加元素');
|
|
|
+ // 可以根据需要添加错误提示
|
|
|
+ }
|
|
|
|
|
|
+ } else {
|
|
|
+ // 取消选择处理
|
|
|
+ let index = -1;
|
|
|
+ for (let i = 0; i < this.itemList.length; i++) {
|
|
|
+ if (this.itemList[i].id === item.id) {
|
|
|
+ index = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (index > -1) {
|
|
|
+ this.itemList.splice(index, 1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+},
|
|
|
|
|
|
-
|
|
|
- },
|
|
|
+// 新增:替换当前选中的元素
|
|
|
+replaceSelectedElement(newItem) {
|
|
|
+ if (this.curSeleEleIndex === -1 || this.curSeleEleIndex >= this.selectEleFormula.length) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ const currentIndex = this.curSeleEleIndex;
|
|
|
+
|
|
|
+ // 取消原元素的勾选状态
|
|
|
+ const oldItem = this.selectEleFormula[currentIndex];
|
|
|
+ this.unCheckEleFormulac(oldItem.id);
|
|
|
+
|
|
|
+ // 替换元素
|
|
|
+ this.selectEleFormula.splice(currentIndex, 1, {
|
|
|
+ type: 'Element',
|
|
|
+ name: newItem.eName,
|
|
|
+ id: newItem.id,
|
|
|
+ selected: false,
|
|
|
+ tableElementKey: newItem.tableElementKey,
|
|
|
+ children: [],
|
|
|
+ });
|
|
|
+
|
|
|
+ // 更新选中状态和光标位置
|
|
|
+ this.setActiveElement(currentIndex);
|
|
|
+},
|
|
|
handleShiftPlus(event) {
|
|
|
event.preventDefault();
|
|
|
console.log('Shift + + 被按下');
|