oak-general-business/es/components/userRelation/upsert/byUserEntityGrant/index.js

223 lines
6.6 KiB
JavaScript

import { assert } from 'oak-domain/lib/utils/assert';
export default OakComponent({
entity: 'userEntityGrant',
projection: {
id: 1,
relationEntity: 1,
relationEntityFilter: 1,
relationIds: 1,
type: 1,
multiple: 1,
rule: 1,
ruleOnRow: 1,
remark: 1,
granterId: 1,
qrCodeType: 1,
},
isList: false,
formData({ data: userEntityGrant, props }) {
return {
userEntityGrant,
};
},
properties: {
entity: '',
entityId: '',
relations: [],
type: 'grant',
redirectToAfterConfirm: {},
claimUrl: '',
qrCodeType: '',
multiple: false,
rule: 'single',
ruleOnRow: 'single',
},
data: {
period: 15,
userEntityGrantId: '',
unit: 'minute',
maxes: {
minute: 3 * 24 * 60,
hour: 3 * 24,
day: 3,
},
defaultPeriods: {
minute: 15,
hour: 1,
day: 1,
},
unitArr: [
{
label: '分钟',
value: 'minute',
},
{
label: '小时',
value: 'hour',
},
],
unitIndex: 0,
rules: ['single', 'all', 'free'],
},
lifetimes: {
ready() {
this.setInit();
},
},
methods: {
onShareAppMessage(e) {
const app = this.features.application.getApplication();
const { config, system } = app;
const { config: systemConfig } = system;
const { userEntityGrantId } = this.state;
const { claimUrl } = this.props;
const imageUrl = (systemConfig && systemConfig?.App?.mpShareImageUrl) || '';
return {
title: '',
path: `/pages${claimUrl}/index?oakId=${userEntityGrantId}`,
imageUrl,
};
},
setInit() {
const userId = this.features.token.getUserId();
const { entity, entityId, type, redirectToAfterConfirm, qrCodeType, claimUrl, multiple, rule, ruleOnRow, } = this.props;
if (this.isCreation()) {
this.update({
entity,
entityId,
relationEntity: entity,
relationEntityFilter: {
id: entityId,
},
type: type || 'grant',
multiple,
rule: rule || 'single',
ruleOnRow: ruleOnRow || 'single',
granterId: userId,
redirectTo: redirectToAfterConfirm,
qrCodeType: qrCodeType,
claimUrl,
});
this.setState({
userEntityGrantId: '',
});
if (process.env.OAK_PLATFORM === 'wechatMp') {
wx.hideShareMenu();
}
}
},
setRelation(value) {
this.update({
relationIds: value,
});
},
setRelationMp(e) {
const { key } = e.detail;
const { userEntityGrant } = this.state;
const relationIds = [...(userEntityGrant?.relationIds || [])];
const index = relationIds.findIndex((ele) => ele === key);
if (index > -1) {
relationIds.splice(index, 1);
}
else {
relationIds.push(key);
}
// 小程序 多选处理
const newRelations = this.props.relations?.map((ele) => Object.assign({}, ele, {
checked: relationIds.includes(ele.id),
}));
this.setState({ relations: newRelations });
this.setRelation(relationIds);
},
setNumber(value) {
this.update({
number: value,
});
},
setNumberMp(e) {
const { currentKey } = e.detail;
this.setNumber(parseInt(currentKey, 10));
},
setPeriod(p) {
this.setState({ period: p });
},
setPeriodMp(e) {
const { count } = e.detail;
this.setPeriod(count);
},
setMultiple(m) {
this.update({ multiple: m });
},
setMultipleMp(e) {
const { checked } = e.detail;
this.setMultiple(checked);
},
setRule(m) {
this.update({ rule: m });
},
setRuleMp(e) {
const { currentKey } = e.detail;
this.setRule(currentKey);
},
setUnit(u) {
const { defaultPeriods } = this.state;
this.setState({ unit: u });
this.setPeriod(defaultPeriods[u]);
},
setUnitMp(e) {
const { unitArr } = this.state;
const { value } = e.detail;
const unitObj = unitArr[value];
this.setState({
unitIndex: value,
});
this.setUnit(unitObj.value);
},
onBack() {
this.navigateBack();
},
async confirm() {
const { period, unit, userEntityGrant } = this.state;
let time = 0;
switch (unit) {
case 'hour': {
time = period * 60 * 60 * 1000;
break;
}
case 'day': {
time = period * 24 * 60 * 60 * 1000;
break;
}
default: {
if (unit === 'minute') {
time = period * 60 * 1000;
}
else {
this.setMessage({
type: 'error',
content: '请选择过期时长单位',
});
return;
}
break;
}
}
const expiresAt = Date.now() + time;
this.update({
expiresAt,
});
assert(!this.props.oakId);
const id = this.getId();
await this.execute();
// set了这个值就在页面显示二维码
this.setState({
userEntityGrantId: id,
});
// 小程序显示可分享菜单
if (process.env.OAK_PLATFORM === 'wechatMp') {
wx.showShareMenu({});
}
},
},
});