diff --git a/es/components/mobile/upsert/index.js b/es/components/mobile/upsert/index.js index 0497e8a80..8674d8b65 100644 --- a/es/components/mobile/upsert/index.js +++ b/es/components/mobile/upsert/index.js @@ -1,6 +1,8 @@ import { differenceBy } from 'oak-domain/lib/utils/lodash'; import { OakUserDisabledException } from '../../../types/Exception'; import assert from 'assert'; +import { generateNewId } from 'oak-domain/lib/utils/uuid'; +import { OakRowInconsistencyException } from 'oak-domain/lib/types'; export default OakComponent({ entity: 'mobile', isList: true, @@ -108,8 +110,33 @@ export default OakComponent({ }, async onRemoveConfirm() { const { mobileId } = this.state; - this.removeItem(mobileId); - await this.execute(); + // this.removeItem(mobileId); + try { + await this.execute(undefined, undefined, undefined, [ + { + entity: 'mobile', + operation: { + id: generateNewId(), + action: 'remove', + data: {}, + filter: { + id: mobileId, + }, + }, + }, + ]); + } + catch (err) { + if (err instanceof OakRowInconsistencyException || err.name === 'OakRowInconsistencyException') { + this.setMessage({ + content: this.t('occupied'), + type: 'warning', + }); + } + else { + throw err; + } + } this.setState({ confirmDeleteModalVisible: false, mobileId: '', diff --git a/es/components/mobile/upsert/locales/zh-CN.json b/es/components/mobile/upsert/locales/zh-CN.json index 9463a93f7..1ddce03d9 100644 --- a/es/components/mobile/upsert/locales/zh-CN.json +++ b/es/components/mobile/upsert/locales/zh-CN.json @@ -7,5 +7,6 @@ }, "success": "添加成功", "please input mobile": "请输入手机号", - "tip": "提示" + "tip": "提示", + "occupied": "当前手机号正处于登录状态,无法删除" } diff --git a/es/triggers/index.d.ts b/es/triggers/index.d.ts index 375a9dab8..dd93fc5b9 100644 --- a/es/triggers/index.d.ts +++ b/es/triggers/index.d.ts @@ -1,2 +1,2 @@ -declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[]; +declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[]; export default _default; diff --git a/es/triggers/index.js b/es/triggers/index.js index 633fbc91c..10b6d3060 100644 --- a/es/triggers/index.js +++ b/es/triggers/index.js @@ -20,6 +20,7 @@ import oauthAppsTriggers from './oauthApps'; import oauthProviderTriggers from './oauthProvider'; import oauthUserTriggers from './oauthUser'; import oauthUserAuthTriggers from './oauthUserAuth'; +import mobileTriggers from './mobile'; // import accountTriggers from './account'; export default [ // ...accountTriggers, @@ -45,4 +46,5 @@ export default [ ...oauthProviderTriggers, ...oauthUserTriggers, ...oauthUserAuthTriggers, + ...mobileTriggers, ]; diff --git a/es/triggers/mobile.d.ts b/es/triggers/mobile.d.ts new file mode 100644 index 000000000..121a30953 --- /dev/null +++ b/es/triggers/mobile.d.ts @@ -0,0 +1,5 @@ +import { Trigger } from 'oak-domain/lib/types/Trigger'; +import { EntityDict } from '../oak-app-domain/EntityDict'; +import { BRC } from '../types/RuntimeCxt'; +declare const triggers: Trigger>[]; +export default triggers; diff --git a/es/triggers/mobile.js b/es/triggers/mobile.js new file mode 100644 index 000000000..067d63f16 --- /dev/null +++ b/es/triggers/mobile.js @@ -0,0 +1,37 @@ +import { generateNewIdAsync } from 'oak-domain/lib/utils/uuid'; +const triggers = [ + { + name: '当mobile删除前,将关联的已禁用token删除', + entity: 'mobile', + action: 'remove', + when: 'before', + asRoot: true, + fn: async ({ operation }, context, option) => { + const { filter } = operation; + const mobiles = await context.select('mobile', { + data: { + id: 1, + ableState: 1, + }, + filter, + }, { forUpdate: true }); + if (mobiles && mobiles.length > 0) { + const mobileIds = mobiles.map((ele) => ele.id); + await context.operate('token', { + id: await generateNewIdAsync(), + action: 'remove', + data: {}, + filter: { + entity: 'mobile', + entityId: { + $in: mobileIds, + }, + ableState: 'disabled', + }, + }, option); + } + return mobiles.length; + } + } +]; +export default triggers; diff --git a/lib/triggers/index.d.ts b/lib/triggers/index.d.ts index c3505d81c..dd93fc5b9 100644 --- a/lib/triggers/index.d.ts +++ b/lib/triggers/index.d.ts @@ -1,2 +1,2 @@ -declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[]; +declare const _default: (import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger> | import("oak-domain/lib/types").Trigger>)[]; export default _default; diff --git a/lib/triggers/index.js b/lib/triggers/index.js index 579f71c39..05e54698c 100644 --- a/lib/triggers/index.js +++ b/lib/triggers/index.js @@ -23,6 +23,7 @@ const oauthApps_1 = tslib_1.__importDefault(require("./oauthApps")); const oauthProvider_1 = tslib_1.__importDefault(require("./oauthProvider")); const oauthUser_1 = tslib_1.__importDefault(require("./oauthUser")); const oauthUserAuth_1 = tslib_1.__importDefault(require("./oauthUserAuth")); +const mobile_1 = tslib_1.__importDefault(require("./mobile")); // import accountTriggers from './account'; exports.default = [ // ...accountTriggers, @@ -48,4 +49,5 @@ exports.default = [ ...oauthProvider_1.default, ...oauthUser_1.default, ...oauthUserAuth_1.default, + ...mobile_1.default, ]; diff --git a/lib/triggers/mobile.d.ts b/lib/triggers/mobile.d.ts new file mode 100644 index 000000000..121a30953 --- /dev/null +++ b/lib/triggers/mobile.d.ts @@ -0,0 +1,5 @@ +import { Trigger } from 'oak-domain/lib/types/Trigger'; +import { EntityDict } from '../oak-app-domain/EntityDict'; +import { BRC } from '../types/RuntimeCxt'; +declare const triggers: Trigger>[]; +export default triggers; diff --git a/lib/triggers/mobile.js b/lib/triggers/mobile.js new file mode 100644 index 000000000..d5f2ad4ac --- /dev/null +++ b/lib/triggers/mobile.js @@ -0,0 +1,39 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const uuid_1 = require("oak-domain/lib/utils/uuid"); +const triggers = [ + { + name: '当mobile删除前,将关联的已禁用token删除', + entity: 'mobile', + action: 'remove', + when: 'before', + asRoot: true, + fn: async ({ operation }, context, option) => { + const { filter } = operation; + const mobiles = await context.select('mobile', { + data: { + id: 1, + ableState: 1, + }, + filter, + }, { forUpdate: true }); + if (mobiles && mobiles.length > 0) { + const mobileIds = mobiles.map((ele) => ele.id); + await context.operate('token', { + id: await (0, uuid_1.generateNewIdAsync)(), + action: 'remove', + data: {}, + filter: { + entity: 'mobile', + entityId: { + $in: mobileIds, + }, + ableState: 'disabled', + }, + }, option); + } + return mobiles.length; + } + } +]; +exports.default = triggers; diff --git a/src/components/mobile/upsert/index.ts b/src/components/mobile/upsert/index.ts index 4babcad66..a931d0e49 100644 --- a/src/components/mobile/upsert/index.ts +++ b/src/components/mobile/upsert/index.ts @@ -2,6 +2,8 @@ import { differenceBy } from 'oak-domain/lib/utils/lodash'; import { OakUserDisabledException } from '../../../types/Exception'; import assert from 'assert'; import { WechatMpConfig } from '../../../oak-app-domain/Application/_baseSchema'; +import { generateNewId } from 'oak-domain/lib/utils/uuid'; +import { OakRowInconsistencyException } from 'oak-domain/lib/types'; export default OakComponent({ entity: 'mobile', @@ -109,8 +111,31 @@ export default OakComponent({ async onRemoveConfirm() { const { mobileId } = this.state; - this.removeItem(mobileId); - await this.execute(); + // this.removeItem(mobileId); + try { + await this.execute(undefined, undefined, undefined, [ + { + entity: 'mobile', + operation: { + id: generateNewId(), + action: 'remove', + data: {}, + filter: { + id: mobileId, + }, + }, + }, + ]); + } catch (err:any) { + if (err instanceof OakRowInconsistencyException || err.name === 'OakRowInconsistencyException') { + this.setMessage({ + content: this.t('occupied'), + type: 'warning', + }) + } else { + throw err; + } + } this.setState({ confirmDeleteModalVisible: false, mobileId: '', diff --git a/src/components/mobile/upsert/locales/zh-CN.json b/src/components/mobile/upsert/locales/zh-CN.json index aea6cbc8d..3e1564cc5 100644 --- a/src/components/mobile/upsert/locales/zh-CN.json +++ b/src/components/mobile/upsert/locales/zh-CN.json @@ -7,5 +7,6 @@ }, "success": "添加成功", "please input mobile": "请输入手机号", - "tip": "提示" + "tip": "提示", + "occupied": "当前手机号正处于登录状态,无法删除" } \ No newline at end of file diff --git a/src/triggers/index.ts b/src/triggers/index.ts index ba0fd5721..0b9807093 100644 --- a/src/triggers/index.ts +++ b/src/triggers/index.ts @@ -20,6 +20,7 @@ import oauthAppsTriggers from './oauthApps'; import oauthProviderTriggers from './oauthProvider'; import oauthUserTriggers from './oauthUser'; import oauthUserAuthTriggers from './oauthUserAuth'; +import mobileTriggers from './mobile'; // import accountTriggers from './account'; @@ -48,4 +49,5 @@ export default [ ...oauthProviderTriggers, ...oauthUserTriggers, ...oauthUserAuthTriggers, + ...mobileTriggers, ]; diff --git a/src/triggers/mobile.ts b/src/triggers/mobile.ts new file mode 100644 index 000000000..b654cb9c8 --- /dev/null +++ b/src/triggers/mobile.ts @@ -0,0 +1,42 @@ +import { generateNewIdAsync } from 'oak-domain/lib/utils/uuid'; +import { RemoveTrigger, Trigger, } from 'oak-domain/lib/types/Trigger'; +import { EntityDict } from '../oak-app-domain/EntityDict'; +import { BRC } from '../types/RuntimeCxt'; + +const triggers: Trigger>[] = [ + { + name: '当mobile删除前,将关联的已禁用token删除', + entity: 'mobile', + action: 'remove', + when: 'before', + asRoot: true, + fn: async ({ operation }, context, option) => { + const { filter } = operation; + const mobiles = await context.select('mobile', { + data: { + id: 1, + ableState: 1, + }, + filter, + }, { forUpdate: true }); + if (mobiles && mobiles.length > 0) { + const mobileIds = mobiles.map((ele) => ele.id!); + await context.operate('token', { + id: await generateNewIdAsync(), + action: 'remove', + data: {}, + filter: { + entity: 'mobile', + entityId: { + $in: mobileIds, + }, + ableState: 'disabled', + }, + }, option); + } + return mobiles.length; + } + } as RemoveTrigger> +]; + +export default triggers;