Просмотр исходного кода

数据模板排序字段新增order by field自定义排序

cfort 1 год назад
Родитель
Сommit
a7c1229545

+ 13 - 2
src/business/platform/data/templatebuilder/right-aside/components/column.vue

@@ -91,7 +91,7 @@
             >
                 <div v-for="(column,i) in columns" :key="column.name||column.key+''+i" class="list-group-item">
                     <div class="actions-left">
-                        {{ column.label }} <el-tag v-if="prop==='sort_columns'" type="">{{ column.direction ==='desc'?'降序':'升序' }}</el-tag>
+                        {{ column.label }} <el-tag v-if="prop==='sort_columns'" type="">{{ directionMap[column.direction] }}</el-tag>
                     </div>
                     <el-button-group class="actions" :class="{'sort-column-actions':prop==='sort_columns'}">
                         <template v-if="prop==='sort_columns' && datasetType !=='thirdparty'">
@@ -212,7 +212,12 @@ export default {
             toolbars: [
                 { key: 'confirm' },
                 { key: 'cancel' }
-            ]
+            ],
+            directionMap: {
+                'custom': '自定义',
+                'asc': '升序',
+                'desc': '降序'
+            }
         }
     },
     computed: {
@@ -359,6 +364,12 @@ export default {
                     ActionUtils.saveErrorMessage()
                     return
                 }
+                if (data?.direction === 'custom' && data?.fieldValue?.length) {
+                    data = {
+                        ...data,
+                        fieldValue: data.fieldValue.sort((a, b) => a.val - b.val).map(item => item.label)
+                    }
+                }
                 if (this.editIndex > -1) {
                     this.columns.splice(this.editIndex, 1, data)
                 } else {

+ 17 - 3
src/business/platform/data/templatebuilder/right-aside/editors/sort-column.vue

@@ -16,20 +16,31 @@
             <el-input v-model="formData.name" placeholder="字段标识" readonly disabled />
         </el-form-item>
         <el-form-item label="排序">
-            <el-switch
+            <!-- <el-switch
                 v-model="formData.direction"
                 active-text="降序"
                 inactive-text="升序"
                 active-value="desc"
                 inactive-value="asc"
-            />
+            /> -->
+            <el-radio-group v-model="formData.direction">
+                <el-radio label="desc">降序</el-radio>
+                <el-radio label="asc">升序</el-radio>
+                <el-radio label="custom">指定字段值排序</el-radio>
+            </el-radio-group>
+        </el-form-item>
+        <el-form-item v-if="formData.direction === 'custom'" prop="fieldValue">
+            <div slot="label">指定值排序<ibps-help content="值为字段排序,标签为字段值" /></div>
+            <field-options v-model="formData.fieldValue" />
         </el-form-item>
-
     </el-form>
 </template>
 <script>
 
 export default {
+    components: {
+        FieldOptions: () => import('@/business/platform/data/components/field/options')
+    },
     props: {
         data: {
             type: Object
@@ -53,6 +64,9 @@ export default {
         data: {
             handler (val) {
                 if (val) {
+                    val.fieldValue = val.direction === 'custom'
+                        ? val.fieldValue?.map((item, index) => ({ val: index + 1, label: item }))
+                        : undefined
                     this.formData = val
                 }
             },