📒

流变换

generateExportConfig2() {
          this.store.getExportObjectivesColumns(this.periodStore.snapshot.active.periodId, 'assignee-objective-list').subscribe(() => {
              this.columnsStore
                  .select(state => {
                      return state.columns;
                  })
                  .pipe(
                      tap(columnsData => {
                          let columnsKeys = [];
                          columnsData.forEach(item => {
                              columnsKeys.push(item.property_key);
                          });
                          this.exportConfig = {
                              title: '选择导出字段',
                              propertiesResolve: this.store
                                  .getExportObjectivesColumns(this.periodStore.snapshot.active.periodId, 'assignee-objective-list')
                                  .pipe(
                                      map(data => {
                                          const dataFormat = data.map(item => {
                                              if (['number', 'name'].includes(item.key)) {
                                                  return { ...item, export_required: Is.yes };
                                              }
                                              return item;
                                          });
                                          return {
                                              fields: [...dataFormat],
                                              selectedKeys: ['number', ...columnsKeys],
                                              customSelectedKeys: ['number', 'name', 'assignee', 'state', 'rate', 'due_at', 'weight', 'score']
                                          };
                                      })
                                  ),
                              showNameKey: '',
                              exportUrl: `${API_PREFIX}/periods/${this.periodStore.snapshot.active.periodId}/assignee-objective-list/export`,
                              exportUrlParams: {
                                  view: {
                                      period_id: this.periodStore.snapshot.active.periodId,
                                      uid: this.periodStore.snapshot.active.followerId,
                                      ids: this.goalsData.map(item => item._id)
                                  }
                              },
                              propertyKey: 'property_keys',
                              exportRequestMethod: 'post'
                          };
                      })
                  )
                  .subscribe();
          });
    }
 
改为
generateExportConfig() {
        this.store
          .getExportObjectivesColumns(this.periodStore.snapshot.active.periodId, 'assignee-objective-list')
          .pipe(
            switchMap((data) =>
              this.columnsStore.select(state => state.columns).pipe(
                map(columnsData => {
                  const columnsKeys = columnsData.map(item => item.property_key);
                  const dataFormat = data.map(item => {
                    if (['number', 'name'].includes(item.key)) {
                      return {...item, export_required: Is.yes};
                    }
                    return item;
                  });
                  return {
                    title: '选择导出字段',
                    propertiesResolve: of({
                      fields: [...dataFormat],
                      selectedKeys: ['number', ...columnsKeys],
                      customSelectedKeys: ['number', 'name', 'assignee', 'state', 'rate', 'due_at', 'weight', 'score']
                    }),
                    showNameKey: '',
                    exportUrl: `${API_PREFIX}/periods/${this.periodStore.snapshot.active.periodId}/assignee-objective-list/export`,
                    exportUrlParams: {
                      view: {
                        period_id: this.periodStore.snapshot.active.periodId,
                        uid: this.periodStore.snapshot.active.followerId,
                        ids: this.goalsData.map(item => item._id)
                      }
                    },
                    propertyKey: 'property_keys',
                    exportRequestMethod: 'post'
                  };
                })
              )
            )
          )
          .subscribe(config => {
            this.exportConfig = config;
          });
      }