Bladeren bron

🎨 修改细节问题

快乐的梦鱼 1 maand geleden
bovenliggende
commit
f32413e879

+ 11 - 1
src/pages/article/data/CommonCategoryDetail.vue

@@ -371,7 +371,17 @@ const content = ref<any>();
 const descItems = computed(() => (
   currentCommonCategoryContentDefine.value?.props.introBlockDescs || [])
     .map((item) => {
-      let value = content.value?.[item.key] || '';
+      let value = '';
+      if (item.key.startsWith('expression:')) {
+        value = doEvaluateDynamicDataExpression(item.key.substring(11), {
+          sourceData: {
+            main: content.value,
+            customData: {},
+          },
+        });
+      }
+      else
+        value = content.value?.[item.key] || '';
       if (item.map)
         value = item.map[value] || '';
       return {

+ 39 - 27
src/pages/article/data/CommonCategoryDynamicEvax.ts

@@ -97,12 +97,12 @@ export function doEvaluateDynamicDataExpression(expressions: string, context: ID
         if (preSerialize.prased)
           return preSerialize.value;
         let type = 'string';
-        let dat = '';
+        let dat = key;
         const sp = key.split('#');
         if (sp.length > 1) {
           type = sp[0];
           dat = sp[1];
-        }
+        } 
         switch (type) {
           case 'string': return dat as string;
           case 'number': return Number(dat);
@@ -240,15 +240,9 @@ export function doEvaluateDynamicDataExpression(expressions: string, context: ID
   return result;
 }
 /**
- * 评估动态比较表达式
- * 
- * 格式:
- * 取值:符号:值
- * 
- * @param expression 
- * @returns 
+ * 评估单条动态比较表达式(格式: 取值:符号:值)
  */
-export function doEvaluateDynamicCompareExpression(expression: string, context: IDynamicCompareExpressionContext) : boolean {
+function evaluateSingleCompareExpression(expression: string, context: IDynamicCompareExpressionContext): boolean {
   const arr = expression.split(':');
   if (arr.length !== 3)
     return false;
@@ -256,37 +250,55 @@ export function doEvaluateDynamicCompareExpression(expression: string, context:
   const symbol = arr[1];
   const value = doEvaluateDynamicDataExpression(arr[2], context);
   const data = doEvaluateDynamicDataExpression(key, context);
-  const negate = symbol.charAt(0) === 'n';
+  const negate = symbol.charAt(0) === '!';
   switch (symbol) {
-    case 'nempty':
+    case '!empty':
     case 'empty': {
       let compareValue = data === undefined || data === null || data === '';
       if (Array.isArray(data))
         compareValue = data.length === 0;
       return negate ? !compareValue : compareValue;
     }
-    case 'eq': 
-    case 'neq': {
-      let compareValue = data == value;
+    case '==':
+    case '!==': {
+      const compareValue = data == value;
       return negate ? !compareValue : compareValue;
     }
-    case 'gt':
-    case 'gte':
-    case 'lt':
-    case 'lte': {
+    case '>':
+    case '>=':
+    case '<':
+    case '<=': {
       let compareValue = false;
-      if (symbol.startsWith('g'))
-        compareValue = data > value;
-      if (symbol.endsWith('e'))
-        compareValue = data >= value;
-      if (symbol.startsWith('l'))
-        compareValue = data < value;
-      if (symbol.startsWith('l'))
-        compareValue = data <= value;
+      if (symbol.startsWith('>'))
+        compareValue = symbol === '>=' ? data >= value : data > value;
+      if (symbol.startsWith('<'))
+        compareValue = symbol === '<=' ? data <= value : data < value;
       return negate ? !compareValue : compareValue;
     }
     default: {
       throw new Error('doEvaluateDynamicCompareExpression: unknown symbol: ' + symbol);
     }
   }
+}
+
+/**
+ * 评估动态比较表达式
+ *
+ * 格式:
+ * 取值:符号:值
+ * 多个表达式用逻辑 && || 分隔:&& 优先于 ||,按顺序求值
+ * 例如: key1:empty: && key2:eq:1 || key3:neq:0
+ *
+ * @param expression
+ * @returns
+ */
+export function doEvaluateDynamicCompareExpression(expression: string, context: IDynamicCompareExpressionContext): boolean {
+  const trimmed = expression.trim();
+  if (!trimmed) return false;
+
+  const orParts = trimmed.split(/\s*\|\|\s*/).map((s) => s.trim()).filter(Boolean);
+  return orParts.some((orPart) => {
+    const andParts = orPart.split(/\s*&&\s*/).map((s) => s.trim()).filter(Boolean);
+    return andParts.every((andPart) => evaluateSingleCompareExpression(andPart, context));
+  });
 }

+ 5 - 2
src/pages/article/data/editor/MiniProgramEditor.vue

@@ -72,7 +72,7 @@
 </template>
 
 <script setup lang="ts">
-import { onMounted, provide, ref } from 'vue';
+import { onMounted, provide, ref, watch } from 'vue';
 import zhCN from 'ant-design-vue/es/locale/zh_CN';
 import EditorToolbar from './subpart/EditorToolbar.vue';
 import AddPageModal from './subpart/AddPageModal.vue';
@@ -107,7 +107,10 @@ const {
   init,
 } = useEditorConfig();
 
-const testDetailId = ref(0);
+const testDetailId = ref(Number(localStorage.getItem('testDetailId') || '0'));
+watch(testDetailId, (v) => {
+  localStorage.setItem('testDetailId', v.toString());
+});
 
 const {
   pageList,

+ 2 - 1
src/pages/article/data/editor/components/DataSolveEditor.vue

@@ -19,10 +19,11 @@
       @ok="confirmAddCustom"
       @cancel="closeAddModal"
     >
-      <a-input
+      <a-textarea
         v-model:value="customExprInput"
         placeholder="请输入表达式, 请参考源码设置"
         allow-clear
+        :auto-size="{ minRows: 2, maxRows: 5 }"
         @press-enter="confirmAddCustom"
       />
     </a-modal>

+ 1 - 1
src/pages/article/data/editor/editors/DetailPropsEditor.vue

@@ -124,7 +124,7 @@
                   </a-checkbox>
                 </a-form-item>
                 <a-form-item label="动态可见判断">
-                  <a-input v-model:value="tab.visibleVia" placeholder="动态可见判断表达式,请参考源码设置,默认auto:自动判断" />
+                  <a-textarea v-model:value="tab.visibleVia" placeholder="动态可见判断表达式,请参考源码设置,默认auto:自动判断" :auto-size="{ minRows: 2, maxRows: 10 }" />
                 </a-form-item>
                 <a-form-item label="可见性判断ID映射">
                   <KeyValueEditor v-model:value="props.props.customTabVisibleViaIdMap" />