工作流审批退回,撤销API

审批退回API

mutation {
  workflowUserTaskMutation {
    approveRejust(
      workflowUserTask: {id: 701530152718787758, userTaskViewName: "工作流任务待办xml_workflow", userTaskReadonlyViewName: "工作流任务待办detail_workflow", source: "超级管理员", statusDisplayName: "待处理", avatarUrl: "https://pamirs.oss-cn-hangzhou.aliyuncs.com/oinone/img/workflow/default.png", name: "测试流程", instanceId: 701530152718787737, taskId: 701530152718787756, definitionId: 701530152718787698, definitionVersion: 34, canAddSignApproval: false, content: null, nodeId: "APPROVAL0000000000014502", userType: USER_TYPE_USER, userId: 10001, model: "top.Teacher", nodeContext: "{\"id\":\"700755598316612629\",\"teacherName\":\"1234312\",\"readStatus\":\"NO_READ\",\"pamirsUser\":[]}", taskType: APPROVE, viewId: 701530152718787696, viewReadonlyId: 701530152718787697, taskCreateDate: "2025-01-22 14:31:12", flowCreateDate: "2025-01-22 14:30:50", allowTransfer: false, allowAddSign: false, allowFallback: true, allowStaging: true, allowAgree: true, allowReject: true, readConfirm: false, mustReason: false, isUrge: false, status: ACTIVE, filterAddSign: "id>=0 ", filterTransfer: "id>=0 ", hasFallback: true, workflowBackNode: {id: 701530152718787702, fallBackNodeName: "填写"}, filterFallBackNodeIds: "'WRITE0000000000014501'"}
    ) {
      id
      addSignUserId
      transferUserId
      workflowBackNodeId
      enableCustomView
      isCopy
      isRecall
      isClose
      isFallBack
      operateType
      workflowModule {
        id
        logo
        bitOptions
        attributes
        displayName
        sys
        name
        systemSource
        module
        sign
        abbr
        hash
        dsKey
        summary
        description
        state
        boot
        application
        latestVersion
        platformVersion
        publishedVersion
        publishCount
        defaultCategory
        category
        moduleDependencies
        moduleExclusions
        moduleUpstreams
        excludeHooks
        priority
        website
        author
        demo
        web
        license
        toBuy
        maintainer
        contributors
        url
        selfBuilt
        metaSource
        clientTypes
        show
        defaultHomePageModel
        homePageModel
        defaultHomePageName
        homePageName
        defaultLogo
        createDate
        writeDate
        createUid
        writeUid
      }
      module
      userTaskViewName
      userTaskReadonlyViewName
      source
      fromDepartment
      fromCorpName
      fromCorpLogo
      fromCorpId
      workflowVersion
      statusDisplayName
      helpDisplayName
      avatarUrl
      name
      title
      workflowUserInstanceId
      instanceId
      instance {
        id
        name
        title
        bizType
        source
        fromDepartment
        fromCorpName
        fromCorpLogo
        fromCorpId
        workflowVersion
        module
        version
        definitionCode
        workflowDCode
        currentNodeName
        triggerType
        status
        startDate
        endDate
        instanceCostTime
        context
        originNodeContext
        runtimeDefinition
        model
        errorMessage
        notifyErrorMessage
        parentTaskInstanceId
        masterInstanceId
        parentInstanceId
        isAsync
        initiatorUid
        currentNodeTag
        currentNodeId
        isUrge
        canUrge
        lastUrgeTime
        taskType
        hasApproval
        hasWrite
        taskPassedStatus
        tmpTaskType
        tmpTaskPassedStatus
        canRecall
        nodeContextSummary
        instanceStatusDisplayName
        dataBizId
        hasSaved
        createDate
        writeDate
        createUid
        writeUid
      }
      taskId
      taskInstance {
        id
        endFunId
        workflowName
        module
        workflowInstanceId
        nodeId
        nodeTag
        nodeName
        nodeDisplayName
        nodeDataId
        nodeDataIsCreateData
        nodeDesc
        autoPass
        isCurrent
        isHistory
        version
        orderNumber
        startDate
        finishDate
        taskCostTime
        status
        lastTaskInstanceId
        lastNodeId
        lastStatus
        hasFallback
        fallBackNodeId
        fallBackTaskInstanceId
        belongBranchIndex
        belongBranchNodeId
        deph
        errorMessage
        nodeContext
        model
        nodeDataBizId
        nodeDataBizIds
        originNodeContext
        dataSaveType
        hasSaved
        result
        missData
        locked
        branchCount
        passedBranchs
        postTime
        isDeadlineOperate
        lastUrgeTime
        canUrge
        isUrge
        isRecall
        belongLoopNodeId
        loopCurrent
        loopEnd
        isLoop
        enableEndFun
        isClose
        createDate
        writeDate
        createUid
        writeUid
      }
      definitionId
      definitionVersion
      canAddSignApproval
      flowDesc
      content
      nodeId
      nodeName
      nodeDesc
      userType
      userId
      employeeId
      roleId
      deptId
      nodePersonUser {
        userId
        userName
        avatarUrl
        status
        result
        remark
        pics
        addSignRemark
        addSignPics
      }
      model
      modelName
      nodeDataBizId
      nodeDataBizIds
      originNodeContext
      nodeContext
      nodeContextSummary
      taskType
      taskPassedStatus
      viewId
      viewReadonlyId
      taskCreateDate
      taskFinishDate
      flowCreateDate
      allowTransfer
      allowAddSign
      allowModify
      allowFallback
      allowStaging
      allowAgree
      allowReject
      allowPost
      deadlineType
      allowAutoTransfer
      allowAutoAgree
      deadline
      remindMinuteEnable
      remindMinute
      remindMinuteUnit
      deadlineStatus
      readDone
      readConfirm
      remindContent
      remindNum
      isDeadlineOperate
      mustReason
      isUrge
      logDetails {
        id
        workflowUserTaskLogId
        taskId
        orderNumber
        nodeName
        instanceId
        startDate
        finishDate
        operator
        operation
        operationName
        nodeType
        remark
        createDate
        writeDate
        createUid
        writeUid
      }
      historyTasks {
        id
        workflowUserTaskId
        nodeId
        nodeTag
        status
        createDate
        writeDate
        createUid
        writeUid
      }
      status
      result
      remark
      opRemark
      addSignUser {
        id
        code
        teacherId
        employeeType
        name
        jobNum
        dataStatus
        companyCode
        departmentCode
        departmentTreeCode
        bindingUserId
        isMaster
        userEmail
        login
        phone
        initialPassword
        bindingMode
        createDate
        createUserName
        writeDate
        writeUserName
        createUid
        writeUid
      }
      transferUser {
        id
        code
        teacherId
        employeeType
        name
        jobNum
        dataStatus
        companyCode
        departmentCode
        departmentTreeCode
        bindingUserId
        isMaster
        userEmail
        login
        phone
        initialPassword
        bindingMode
        createDate
        createUserName
        writeDate
        writeUserName
        createUid
        writeUid
      }
      autoTransferUsers {
        id
        code
        teacherId
        employeeType
        name
        jobNum
        dataStatus
        companyCode
        departmentCode
        departmentTreeCode
        bindingUserId
        isMaster
        userEmail
        login
        phone
        initialPassword
        bindingMode
        createDate
        createUserName
        writeDate
        writeUserName
        createUid
        writeUid
      }
      selectType
      transferInfo {
        id
        nodeId
        name
        exp
        type
        count
        model
        filed
        isMulti
      }
      addSignInfo {
        id
        nodeId
        name
        exp
        type
        count
        model
        filed
        isMulti
      }
      transferPerson {
        id
        nodeId
        name
        exp
        type
        count
        model
        filed
        isMulti
      }
      addSignPerson {
        id
        nodeId
        name
        exp
        type
        count
        model
        filed
        isMulti
      }
      isAutoTransfer
      filterAddSign
      filterTransfer
      filterAutoTransfer
      canOperate
      hasAddSign
      operation
      initiator {
        id
        code
        countryId
        avatarMediumId
        currencyId
        avatarBigId
        themeId
        signUpType
        userType
        login
        phoneCode
        phone
        email
        initialPassword
        isInitialPassword
        password
        source
        active
        name
        nickname
        realname
        avatarUrl
        langId
        timeZoneType
        contactPhone
        contactEmail
        birthday
        gender
        idCard
        regDate
        createDate
        createUserName
        writeDate
        writeUserName
        createUid
        writeUid
      }
      createDate
      initiatorUid
      hasFallback
      workflowBackNode {
        id
        nodeId
        fallBackNodeId
        fallBackNodeName
        fallBackNodeLabel
        definitionId
        workflowCode
        nodeModel
        nodeModelId
        createDate
        writeDate
        createUid
        writeUid
      }
      emptyWorkflowBackNode
      filterFallBackNodeIds
      flowTreeJson
      taskTime
      isMobile
      nodeInfos {
        orderNum
        taskInstanceId
        branchOrderNum
        branchUniqueCode
        branchName
        isSelected
        isPassed
        isHistory
        hasStart
        fallbackTaskInstanceId
        taskFinishedDate
        nodeId
        nodeName
        nodeTag
        remark
        userId
        isDottedLine
        userName
        avatarUrl
        taskInstanceStatus
        statusDisplayName
        pics
        addSignRemark
        addSignPics
        canUrge
      }
      writeDate
      instanceStatusDisplayName
      fallBackNodeId
      needSendMessage
      pics
      attachments {
        id
        code
        name
        url
        type
        size
        mime
        isPublic
        resId
        resType
        createDate
        writeDate
        createUid
        writeUid
      }
      addSignRemark
      addSignPics
      addSignAttachments {
        id
        code
        name
        url
        type
        size
        mime
        isPublic
        resId
        resType
        createDate
        writeDate
        createUid
        writeUid
      }
      mainModel
      dataBizId
      createUid
      sharingUser {
        id
        code
        teacherId
        employeeType
        name
        jobNum
        dataStatus
        companyCode
        departmentCode
        departmentTreeCode
        bindingUserId
        isMaster
        userEmail
        login
        phone
        initialPassword
        bindingMode
        createDate
        createUserName
        writeDate
        writeUserName
        createUid
        writeUid
      }
      writeUid
    }
  }
}

撤销API

mutation {
  workBenchWorkflowUserTaskInitiateMutation {
    recall(
      workflowUserTaskInitiate: {id: 701530152718787737, tag: TAG_PASS, initiateSelect: TOTAL, taskTypeSelect: TOTAL, name: "测试流程", workflowModule: {id: 644013028727063175, displayName: "oinone功能展示", module: "top_demo"}, source: "超级管理员", module: "top_demo", status: PROCESSING, canUrge: true, canRecall: true, createDate: "2025-01-22 14:30:50"}
    ) {
      id
      tag
      initiateSelect
      taskTypeSelect
      name
      title
      bizType
      workflowModule {
        id
        logo
        bitOptions
        attributes
        displayName
        sys
        name
        systemSource
        module
        sign
        abbr
        hash
        dsKey
        summary
        description
        state
        boot
        application
        latestVersion
        platformVersion
        publishedVersion
        publishCount
        defaultCategory
        category
        moduleDependencies
        moduleExclusions
        moduleUpstreams
        excludeHooks
        priority
        website
        author
        demo
        web
        license
        toBuy
        maintainer
        contributors
        url
        selfBuilt
        metaSource
        clientTypes
        show
        defaultHomePageModel
        homePageModel
        defaultHomePageName
        homePageName
        defaultLogo
        createDate
        writeDate
        createUid
        writeUid
      }
      source
      fromDepartment
      fromCorpName
      fromCorpLogo
      fromCorpId
      workflowVersion
      module
      version
      definition {
        id
        code
        initiatorId
        bizType
        triggerType
        module
        content
        version
        active
        workflowCode
        workflowName
        designerContent
        createDate
        writeDate
        createUid
        writeUid
      }
      definitionCode
      workflowDCode
      currentNodeName
      triggerType
      status
      startDate
      endDate
      instanceCostTime
      context
      originNodeContext
      runtimeDefinition
      workflowTaskInstances {
        id
        endFunId
        workflowName
        module
        workflowInstanceId
        nodeId
        nodeTag
        nodeName
        nodeDisplayName
        nodeDataId
        nodeDataIsCreateData
        nodeDesc
        autoPass
        isCurrent
        isHistory
        version
        orderNumber
        startDate
        finishDate
        taskCostTime
        status
        lastTaskInstanceId
        lastNodeId
        lastStatus
        hasFallback
        fallBackNodeId
        fallBackTaskInstanceId
        belongBranchIndex
        belongBranchNodeId
        deph
        errorMessage
        nodeContext
        model
        nodeDataBizId
        nodeDataBizIds
        originNodeContext
        dataSaveType
        hasSaved
        result
        missData
        locked
        branchCount
        passedBranchs
        postTime
        isDeadlineOperate
        lastUrgeTime
        canUrge
        isUrge
        isRecall
        belongLoopNodeId
        loopCurrent
        loopEnd
        isLoop
        enableEndFun
        isClose
        createDate
        writeDate
        createUid
        writeUid
      }
      modelDefinition {
        id
        labelFields
        attributes
        label
        bitOptions
        sys
        sign
        systemSource
        hash
        pk
        module
        dsModule
        moduleName
        moduleAbbr
        model
        displayName
        name
        lname
        table
        dsKey
        remark
        type
        multiTable
        multiTableTypeField
        multiTableType
        redundancy
        proxy
        isRelationship
        summary
        description
        priority
        dataManager
        ordering
        sequenceCode
        superModels
        unInheritedFields
        unInheritedFunctions
        uniques
        indexes
        logicDelete
        logicDeleteColumn
        logicDeleteValue
        logicNotDeleteValue
        optimisticLockerField
        underCamel
        capitalMode
        charset
        collate
        categoryId
        show
        createDate
        writeDate
        createUid
        writeUid
      }
      model
      aliveUserTask {
        id
        addSignUserId
        transferUserId
        workflowBackNodeId
        enableCustomView
        isCopy
        isRecall
        isClose
        isFallBack
        operateType
        module
        userTaskViewName
        userTaskReadonlyViewName
        source
        fromDepartment
        fromCorpName
        fromCorpLogo
        fromCorpId
        workflowVersion
        statusDisplayName
        helpDisplayName
        avatarUrl
        name
        title
        workflowUserInstanceId
        instanceId
        taskId
        definitionId
        definitionVersion
        canAddSignApproval
        flowDesc
        content
        nodeId
        nodeName
        nodeDesc
        userType
        userId
        employeeId
        roleId
        deptId
        model
        modelName
        nodeDataBizId
        nodeDataBizIds
        originNodeContext
        nodeContext
        nodeContextSummary
        taskType
        taskPassedStatus
        viewId
        viewReadonlyId
        taskCreateDate
        taskFinishDate
        flowCreateDate
        allowTransfer
        allowAddSign
        allowModify
        allowFallback
        allowStaging
        allowAgree
        allowReject
        allowPost
        deadlineType
        allowAutoTransfer
        allowAutoAgree
        deadline
        remindMinuteEnable
        remindMinute
        remindMinuteUnit
        deadlineStatus
        readDone
        readConfirm
        remindContent
        remindNum
        isDeadlineOperate
        mustReason
        isUrge
        status
        result
        remark
        opRemark
        selectType
        isAutoTransfer
        filterAddSign
        filterTransfer
        filterAutoTransfer
        canOperate
        hasAddSign
        operation
        createDate
        initiatorUid
        hasFallback
        emptyWorkflowBackNode
        filterFallBackNodeIds
        flowTreeJson
        taskTime
        isMobile
        writeDate
        instanceStatusDisplayName
        fallBackNodeId
        needSendMessage
        pics
        addSignRemark
        addSignPics
        mainModel
        dataBizId
        createUid
        writeUid
      }
      errorMessage
      notifyErrorMessage
      parentTaskInstanceId
      masterInstanceId
      parentInstanceId
      isAsync
      initiator {
        id
        code
        countryId
        avatarMediumId
        currencyId
        avatarBigId
        themeId
        signUpType
        userType
        login
        phoneCode
        phone
        email
        initialPassword
        isInitialPassword
        password
        source
        active
        name
        nickname
        realname
        avatarUrl
        langId
        timeZoneType
        contactPhone
        contactEmail
        birthday
        gender
        idCard
        regDate
        createDate
        createUserName
        writeDate
        writeUserName
        createUid
        writeUid
      }
      initiatorUid
      currentNodeTag
      currentNodeId
      isUrge
      canUrge
      lastUrgeTime
      taskType
      hasApproval
      hasWrite
      taskPassedStatus
      tmpTaskType
      tmpTaskPassedStatus
      canRecall
      nodeContextSummary
      instanceStatusDisplayName
      dataBizId
      hasSaved
      createDate
      writeDate
      createUid
      writeUid
    }
  }
}

Oinone社区 作者:yexiu原创文章,如若转载,请注明出处:https://doc.oinone.top/other/20354.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

(0)
yexiu的头像yexiu数式员工
上一篇 2025年1月16日 pm10:38
下一篇 2025年1月26日 am11:40

相关推荐

  • 前端学习路径

    准备工作 环境准备-1h安装基础环境,需要Node和PNPM如果已经安装检查对应版本,体验阶段建议版本保持一致 克隆一个空工程-0.5h全新工程 注意事项-0.5h静态资源解压,如果还没有对应的后端服务。可以使用:https://demo.oinone.top(Oinone演示环境),账号密码:admin/admin 前端基础 1.1.1了解组件-3h– 组件如何开发– 组件如何复用– 组件如何嵌套 1.1.2 更近一步-5h– 构建更复杂的工作台– 如何发起后端请求– 构建一个通用的图表组件 1.1.3 深入了解概念-5h– 通用概念、名词解释– 页面渲染原理– 组件执行原理 1.1.4业务实战-实现通用的甘特图组件-8h– 怎么与第三方结合– 如何在开源组件上接入Oinone, 并复用 1.1.5 业务实战-实现通用的画廊组件-6h–如何更近一步复用–基础学习结束 前端进阶 2.1.1代码和无代码如何结合-4h– 了解无代码如何使用和基础概念 2.1.2使用无代码搭建增删改查-8h– 了解无代码如何使用和基础概念 最后一步 当您实现玩基础和进阶的所有的效果,Oinone的整体使用您已经大致掌握了,接下来您可以找一个当前业务的场景来实现它把!

    2025年9月1日
    71500
  • Excel导出模块翻译值

    由于目前翻译资源导出只可以导出应用资源,无法导出模块资源,所以暂时提供以下方法导出模块资源。6.2.11、5.7.4.20 之前版本验证 方案一: 导出环境覆盖以下类 package pro.shushi.pamirs.translate.template.imports; import com.alibaba.fastjson.JSON; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Component; import pro.shushi.pamirs.file.api.context.ExcelDefinitionContext; import pro.shushi.pamirs.file.api.entity.ExcelExportFetchDataContext; import pro.shushi.pamirs.file.api.extpoint.impl.DefaultExcelExportFetchDataExtPoint; import pro.shushi.pamirs.file.api.model.ExcelExportTask; import pro.shushi.pamirs.framework.connectors.data.sql.Pops; import pro.shushi.pamirs.framework.connectors.data.sql.query.LambdaQueryWrapper; import pro.shushi.pamirs.framework.connectors.data.sql.query.QueryWrapper; import pro.shushi.pamirs.meta.annotation.Ext; import pro.shushi.pamirs.meta.annotation.ExtPoint; import pro.shushi.pamirs.meta.annotation.fun.extern.Slf4j; import pro.shushi.pamirs.meta.api.Models; import pro.shushi.pamirs.meta.api.dto.wrapper.IWrapper; import pro.shushi.pamirs.meta.common.lambda.LambdaUtil; import pro.shushi.pamirs.meta.common.util.PStringUtils; import pro.shushi.pamirs.meta.constant.SqlConstants; import pro.shushi.pamirs.meta.domain.module.ModuleDefinition; import pro.shushi.pamirs.resource.api.enmu.TranslationApplicationScopeEnum; import pro.shushi.pamirs.resource.api.model.ResourceTranslation; import pro.shushi.pamirs.resource.api.model.ResourceTranslationItem; import pro.shushi.pamirs.translate.constant.TranslateConstants; import pro.shushi.pamirs.translate.proxy.TranslationItemExportProxy; import pro.shushi.pamirs.translate.service.TranslationDslNodeVisitor; import pro.shushi.pamirs.translate.template.TranslateTemplate; import pro.shushi.pamirs.translate.utils.UniversalParser; import java.util.*; import java.util.stream.Collectors; import static pro.shushi.pamirs.translate.constant.TranslateConstants.FIELD_TO_EXCLUDE; /** * @author Adamancy Zhang * @date 2020-11-04 18:09 */ @Slf4j @Component @Ext(ExcelExportTask.class) @SuppressWarnings({"unchecked"}) public class ResourceTranslationExportExtPoint extends DefaultExcelExportFetchDataExtPoint { private String resLangCodeColumn = PStringUtils.fieldName2Column(LambdaUtil.fetchFieldName(ResourceTranslationItem::getResLangCode)); private String langCodeColumn = PStringUtils.fieldName2Column(LambdaUtil.fetchFieldName(ResourceTranslationItem::getLangCode)); private String moduleColumn = PStringUtils.fieldName2Column(LambdaUtil.fetchFieldName(ResourceTranslationItem::getModule)); @Override @ExtPoint.Implement(expression = "context.name=="" + TranslateTemplate.TEMPLATE_NAME + "" && context.model=="" + ResourceTranslation.MODEL_MODEL + """) public List<Object> fetchExportData(ExcelExportTask exportTask, ExcelDefinitionContext context) { ArrayList<Object> objects = new ArrayList<>(); Map<String, Object> queryData = exportTask.getConditionWrapper().getQueryData(); TranslationItemExportProxy data = JSON.parseObject(JSON.toJSONString(queryData), TranslationItemExportProxy.class); LambdaQueryWrapper<TranslationItemExportProxy> queryWrapper = Pops.<TranslationItemExportProxy>lambdaQuery() .from(TranslationItemExportProxy.MODEL_MODEL) .eq(StringUtils.isNotBlank(data.getModule()), ResourceTranslationItem::getModule, data.getModule()) .eq(ResourceTranslationItem::getResLangCode, TranslateConstants.RES_LANG_CODE) .eq(StringUtils.isNotBlank(data.getLangCode()), ResourceTranslationItem::getLangCode, data.getLangCode()) .eq(data.getState() != null, ResourceTranslationItem::getState, data.getState()) .like(StringUtils.isNotBlank(data.getResLangInclude()), ResourceTranslationItem::getOrigin, data.getResLangInclude()) .like(StringUtils.isNotBlank(data.getTargetInclude()), ResourceTranslationItem::getTarget, data.getResLangInclude()); Map<String, String> moduleNameMap = Models.origin().queryListByWrapper(Pops.<ModuleDefinition>lambdaQuery() .from(ModuleDefinition.MODEL_MODEL) .eq(StringUtils.isNotBlank(data.getModule()), ModuleDefinition::getModule, data.getModule())) .stream() .collect(Collectors.toMap(ModuleDefinition::getModule, ModuleDefinition::getDisplayName, (_a, _b)…

    2025年8月21日
    29500
  • 流程和任务状态说明文档

    一、工作流实例状态说明 INIT:新的流程创建时,执行工作流实例前的状态。 PROCESSING:发起的新的流程之后,结束之前的状态。 FINISHED:整个流程结束后的状态。 ERROR:流程异常时的状态。 RECALL: 撤销流程实例时的状态 CLOSE:关闭流程实例时(流程撤销)的状态。 一、工作流实例通过状态说明 FILLED:流程走到填写节点,填写人填写过后的状态。 PASS:审批同意操作后的状态。 REJECT:审批结果被拒绝(审批节点结束后)的状态。 ING:新的流程创建时,执行工作流实例前的状态。 ERROR:流程异常时的状态。 RECALL:撤销流程实例时的状态。 RECALL_PASS:无 RECALL_REJECT:无 RECALL_FILLED:无 FALLBACK:已退回时标识抄送/工作流实例为已退回时的状态。 FALLBACK_PASS:无 FALLBACK_REJECT:无 FALLBACK_FILLED:无 TRANSFER:无 CLOSE:关闭流程实例时((流程撤销))的状态。

    2025年6月24日
    31100
  • IP黑白名单实现拦截三方用户

    已知厂商IP为10.139.0.1,经系统检测122.233.24.28、138.122.12.9为风险IP,需要禁止访问。 白名单配置:10.139.0.1 黑名单配置:122.233.24.28、138.122.12.9 厂商请求到Oinone开放平台请求头需携带X-Forwarded-For和X-Real-IP,例如: X-Forwarded-For 122.233.24.28 X-Real-IP 122.233.24.28 经Nginx代理后,oinone获取的请求头内容: X-Forwarded-For 122.233.24.28, 10.139.0.1 # 代理追加厂商IP到末尾 X-Real-IP 122.233.24.28 # 保持客户端原始值,Nginx不处理 效果:厂商10.139.0.1发送的请求且用户X-Real-IP不在黑名单内才放行。 注意事项 Nginx如果配置X-Real-IP需关闭,否则拿到的永远是厂商IP。 proxy_set_header X-Real-IP $remote_addr; 相关文章 开放应用中的ip黑白名单

    2025年5月15日
    30000
  • 前端自定义组件之锚点分组

    本文将讲解如何通过自定义,实现锚点组件。这个锚点组件会根据界面设计器拖入的分组,动态解析出锚点。 实现路径 整体的实现思路是界面设计器拖个容器类的组件(这里以选项卡为例),自定义这个选项卡,往选项卡里拖拽的每个分组,每个锚点的名称是分组的标题。 1. 界面设计器拖出页面 我们界面设计器拖个选项卡组件,然后在选项页里拖拽任意多个分组。完成后点击右上角九宫格,选中选项卡,填入组件 api 名称,作用是把选项卡切换成我们自定义的锚点分组组件,这里的 api 名称和自定义组件的 widget 对应。最后发布页面,并绑定菜单。 2. 组件实现 widget 组件重写了选项卡,核心函数 renderGroups,通过 DslRender.render 方法渲染界面设计器拖拽的分组。 import { BasePackWidget, DslDefinition, DslRender, SPI, Widget } from '@oinone/kunlun-dependencies'; import TabsParseGroup from './TabsParseGroup.vue'; function fetchGroupChildren(widgets?: DslDefinition[], level = 1): DslDefinition[] { if (!widgets) { return []; } const children: DslDefinition[] = []; for (const widget of widgets) { if (widget.widget === 'group') { children.push(widget); } else if (level >= 1) { fetchGroupChildren(widget.widgets, level – 1).forEach((child) => children.push(child)); } } return children; } @SPI.ClassFactory( BasePackWidget.Token({ widget: 'TabsParseGroup' }) ) export class TabsParseGroupWidget extends BasePackWidget { public initialize(props) { super.initialize(props); this.setComponent(TabsParseGroup); return this; } // 获取分组的子元素 public get groupChildren(): DslDefinition[] { return fetchGroupChildren(this.template?.widgets); } @Widget.Reactive() public get groupTitles() { return this.groupChildren.map((group) => group.title); } // 根据容器子元素渲染左侧 @Widget.Method() public renderGroups() { if (this.groupChildren && this.groupChildren.length) { return this.groupChildren.map((group) => DslRender.render(group)); } } } vue组件核心内容是用component :is属性,渲染出配置的分组组件 <template> <div class="TabsParseGroup"> <a-anchor :affix="false"> <a-anchor-link v-for="(item, index) in groupTitles" :href="`#default-group-${index}`" :title="item" /> </a-anchor> <div v-for="(item, index) in groupComponents" :id="`default-group-${index}`"> <component :is="item" /> </div> </div> </template> <script lang="ts"> import { computed, defineComponent, PropType } from 'vue'; export default…

    2025年7月8日
    24400

Leave a Reply

登录后才能评论