update event status
This commit is contained in:
@@ -69,6 +69,14 @@ async function listValid(): Promise<EventItem[]> {
|
|||||||
return sortEventList(list);
|
return sortEventList(list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询登记记录筛选使用的事件,包含已删除事件。
|
||||||
|
* 该接口由后端使用 event.create 权限保护,仅用于历史记录回溯。
|
||||||
|
*/
|
||||||
|
async function listHistory(): Promise<PageResult<EventItem>> {
|
||||||
|
return await axios.post(`${BASE_URI}/list/history`, withCurrentStorePage(withEventOrder({ index: 0, size: 1000 })));
|
||||||
|
}
|
||||||
|
|
||||||
async function detail(id: string): Promise<EventItem> {
|
async function detail(id: string): Promise<EventItem> {
|
||||||
return await axios.post(`${BASE_URI}/detail`, undefined, {
|
return await axios.post(`${BASE_URI}/detail`, undefined, {
|
||||||
params: { id }
|
params: { id }
|
||||||
@@ -102,6 +110,7 @@ async function remove(id: string): Promise<void> {
|
|||||||
export default {
|
export default {
|
||||||
list,
|
list,
|
||||||
listValid,
|
listValid,
|
||||||
|
listHistory,
|
||||||
detail,
|
detail,
|
||||||
create,
|
create,
|
||||||
update,
|
update,
|
||||||
|
|||||||
@@ -133,8 +133,9 @@ const defaultColor = "#2f88ff";
|
|||||||
|
|
||||||
// ---------- 权限与门店 ----------
|
// ---------- 权限与门店 ----------
|
||||||
|
|
||||||
const canUpdate = computed(() => userStore.hasPermissions(permissionCodes.event.update));
|
const isDeletedEvent = computed(() => event.value?.status === "DELETED");
|
||||||
const canDeleteEvent = computed(() => userStore.hasPermissions(permissionCodes.event.delete));
|
const canUpdate = computed(() => !isDeletedEvent.value && userStore.hasPermissions(permissionCodes.event.update));
|
||||||
|
const canDeleteEvent = computed(() => !isDeletedEvent.value && userStore.hasPermissions(permissionCodes.event.delete));
|
||||||
const canReadEventRecord = computed(() => userStore.hasPermissions(permissionCodes.eventRecord.read));
|
const canReadEventRecord = computed(() => userStore.hasPermissions(permissionCodes.eventRecord.read));
|
||||||
const isGlobalManager = computed(() => userStore.hasRoles(gaoRoleCodes.globalManager));
|
const isGlobalManager = computed(() => userStore.hasRoles(gaoRoleCodes.globalManager));
|
||||||
const storeName = computed(() => {
|
const storeName = computed(() => {
|
||||||
@@ -354,6 +355,13 @@ onMounted(() => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
watch(canUpdate, value => {
|
||||||
|
navBarStore.clearRight();
|
||||||
|
if (value) {
|
||||||
|
navBarStore.setRightText("编辑", "var(--td-brand-color)", toEdit);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
onUnmounted(() => {
|
onUnmounted(() => {
|
||||||
navBarStore.clearRight();
|
navBarStore.clearRight();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -85,6 +85,22 @@
|
|||||||
<t-form-item label="状态" arrow @click="openStatusPicker">
|
<t-form-item label="状态" arrow @click="openStatusPicker">
|
||||||
<div class="picker-text" v-text="getStatusText(formModel.status)" />
|
<div class="picker-text" v-text="getStatusText(formModel.status)" />
|
||||||
</t-form-item>
|
</t-form-item>
|
||||||
|
<t-form-item label-width="0">
|
||||||
|
<div class="status-tips">
|
||||||
|
<div class="status">
|
||||||
|
<span class="orange">草稿:</span>
|
||||||
|
<span class="gray">普通店员角色不可见,不可登记、查询</span>
|
||||||
|
</div>
|
||||||
|
<div class="status">
|
||||||
|
<span class="orange">可登记:</span>
|
||||||
|
<span class="gray">正常状态,可登记、可查询</span>
|
||||||
|
</div>
|
||||||
|
<div class="status">
|
||||||
|
<span class="orange">不可登记:</span>
|
||||||
|
<span class="gray">登记时不会出现在事件列表,但仍可在登记事件记录列表中可以查找,标记为“不可登记”,所有店员角色可见。店长角色可进入详情和编辑,可恢复为“可登记”</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</t-form-item>
|
||||||
</t-form>
|
</t-form>
|
||||||
<event-option-editor v-model="optionGroupList" />
|
<event-option-editor v-model="optionGroupList" />
|
||||||
<section class="roles" v-entrance-transition="70">
|
<section class="roles" v-entrance-transition="70">
|
||||||
@@ -674,6 +690,11 @@ async function fillForm(): Promise<void> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const current = await EventAPI.detail(routeId.value);
|
const current = await EventAPI.detail(routeId.value);
|
||||||
|
if (current.status === "DELETED") {
|
||||||
|
Message.error("已删除登记事件不可编辑");
|
||||||
|
await router.replace({ name: "EventDetail", params: { id: routeId.value } });
|
||||||
|
return;
|
||||||
|
}
|
||||||
Object.assign(formModel, {
|
Object.assign(formModel, {
|
||||||
id: current.id || "",
|
id: current.id || "",
|
||||||
storeId: current.storeId || formModel.storeId,
|
storeId: current.storeId || formModel.storeId,
|
||||||
@@ -735,6 +756,12 @@ onUnmounted(() => navBarStore.clearRight());
|
|||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: end;
|
justify-content: end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.status-tips {
|
||||||
|
display: flex;
|
||||||
|
font-size: .875rem;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.picker-text {
|
.picker-text {
|
||||||
|
|||||||
@@ -54,7 +54,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</t-cell>
|
</t-cell>
|
||||||
<template v-if="canDeleteEvent" #right>
|
<template v-if="canDeleteEvent && item.status !== 'DELETED'" #right>
|
||||||
<t-button
|
<t-button
|
||||||
class="delete"
|
class="delete"
|
||||||
theme="danger"
|
theme="danger"
|
||||||
@@ -186,7 +186,7 @@ async function toEventItem(item: EventItem): Promise<void> {
|
|||||||
|
|
||||||
function openRemoveDialog(eventItem: EventItem): void {
|
function openRemoveDialog(eventItem: EventItem): void {
|
||||||
const eventId = eventItem.id;
|
const eventId = eventItem.id;
|
||||||
if (!eventId || isRemoving.value) {
|
if (!eventId || eventItem.status === "DELETED" || isRemoving.value) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,7 +196,7 @@ function openRemoveDialog(eventItem: EventItem): void {
|
|||||||
|
|
||||||
async function removeEvent(eventItem: EventItem): Promise<void> {
|
async function removeEvent(eventItem: EventItem): Promise<void> {
|
||||||
const eventId = eventItem.id;
|
const eventId = eventItem.id;
|
||||||
if (!eventId || isRemoving.value) {
|
if (!eventId || eventItem.status === "DELETED" || isRemoving.value) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -180,6 +180,7 @@ const isExporting = ref(false);
|
|||||||
let suppressOptionFilterReload = false;
|
let suppressOptionFilterReload = false;
|
||||||
|
|
||||||
const canCreateRecord = computed(() => userStore.hasPermissions(permissionCodes.eventRecord.create));
|
const canCreateRecord = computed(() => userStore.hasPermissions(permissionCodes.eventRecord.create));
|
||||||
|
const canCreateEvent = computed(() => userStore.hasPermissions(permissionCodes.event.create));
|
||||||
const dateFilterLabel = computed(() => dateOptions.find(item => item.value === dateFilterType.value)?.label || "今天");
|
const dateFilterLabel = computed(() => dateOptions.find(item => item.value === dateFilterType.value)?.label || "今天");
|
||||||
const actionOptions = computed(() => eventList.value.map(item => ({
|
const actionOptions = computed(() => eventList.value.map(item => ({
|
||||||
label: getEventDisplayName(item),
|
label: getEventDisplayName(item),
|
||||||
@@ -394,7 +395,9 @@ async function loadRecords(): Promise<void> {
|
|||||||
|
|
||||||
async function loadActions(): Promise<void> {
|
async function loadActions(): Promise<void> {
|
||||||
// 历史登记记录需要关联已停用或已删除的事件,不能使用只返回 ACTIVE 事件的 listValid。
|
// 历史登记记录需要关联已停用或已删除的事件,不能使用只返回 ACTIVE 事件的 listValid。
|
||||||
const result = await EventAPI.list({ index: 0, size: 1000 });
|
const result = canCreateEvent.value
|
||||||
|
? await EventAPI.listHistory()
|
||||||
|
: await EventAPI.list({ index: 0, size: 1000 });
|
||||||
eventList.value = result.list || [];
|
eventList.value = result.list || [];
|
||||||
const eventIdList = eventList.value.map(item => item.id).filter((item): item is string => Boolean(item));
|
const eventIdList = eventList.value.map(item => item.id).filter((item): item is string => Boolean(item));
|
||||||
const eventIdSet = new Set(eventIdList);
|
const eventIdSet = new Set(eventIdList);
|
||||||
|
|||||||
Reference in New Issue
Block a user