Files
Docker/WebVue/src/views/master/FamilyShareOperation.vue
T
2026-09-17 11:49:35 +08:00

399 lines
12 KiB
Vue

<template>
<search-card
@on-submit="onSubmit"
@on-print="onPrint"
@on-reset="onReset"
@use-pagination="onPagination"
:is-modal="isModal"
:loading="loading"
:pagination="result"
:rowSelectionType="selectionType"
:card-title-keys="[
FamilyFolderFavoriteViewEntity.FAMILY_LOCAL_NAME,
FamilyFolderFavoriteViewEntity.TOP_FOLDER_LOCAL_NAME,
]"
@on-select-change="onSelectChange"
>
<template #control> </template>
<template #cardTitle="{ record }">
{{ record.FamilyLocalName }}
<span style="margin-left: 6px"><FolderOutlined style="margin-right: 2px; color: #faad14" />{{ record.TopFolderLocalName + (record.TopFolderLocalName != record.FolderLocalName ? " > " + record.FolderLocalName : "") }}</span>
</template>
<template #bodyCell="{ column, record, index }">
<template
v-if="
column.dataIndex ===
FamilyFolderFavoriteViewEntity.TOP_FOLDER_LOCAL_NAME
"
>
<FolderOutlined style="margin-right: 2px; color: #faad14" /> {{ record.TopFolderLocalName +(record.TopFolderLocalName!=record.FolderLocalName?(' > '+record.FolderLocalName):'') }}
</template>
</template>
<template #footer>
<div v-if="!isModal" class="page-footer">
<a-row :gutter="24">
<a-col :lg="24" :sm="24">
<a-row v-if="!isEdit" :gutter="[16, 8]">
<a-space>
<a-popconfirm
title="确定是否删除这些记录?"
ok-text="是"
cancel-text="否"
@confirm="onDelete"
>
<a-button
type="primary"
danger
:icon="h(DeleteOutlined)"
v-if="canDelete"
:disabled="!(keys && keys.length > 0)"
>删除</a-button
>
</a-popconfirm>
</a-space>
</a-row>
</a-col>
</a-row>
</div>
</template>
</search-card>
</template>
<script setup lang="ts">
import {
reactive,
inject,
defineComponent,
onMounted,
ref,
unref,
provide,
h,
} from "vue";
import { BindOption } from "@/data/custom/bindOption";
import { SelectOption } from "@/data/auto/selectOption";
import searchCard from "@/components/basic/SearchCard.vue";
import {
DeleteOutlined,
FolderOutlined,
EditOutlined,
FileAddOutlined,
FileTextOutlined,
} from "@ant-design/icons-vue";
import { FamilyGroupResultData } from "@/data/auto/familyGroupResultData";
import { FamilyFolderFavoriteViewEntity } from "@/data/auto/familyFolderFavoriteViewEntity";
import { FamilyFolderFavoriteEntity } from "@/data/auto/familyFolderFavoriteEntity";
import { FamilyGroupFolderEntity } from "@/data/auto/familyGroupFolderEntity";
import { SearchFilter } from "@/data/auto/searchFilter";
import dmsFileService from "@/service/master/dmsFileService";
import familyGroupService from "@/service/master/familyGroupService";
import { FamilyGroupManagerUserSearchCriteria } from "@/data/auto/familyGroupManagerUserSearchCriteria";
import { SearchCriteriaResultData } from "@/data/auto/searchCriteriaResultData";
import {
PermissionContext,
usePermissionContext,
} from "@/hooks/PermissionContext";
import { useRoute, useRouter } from "vue-router";
import { useBindOption } from "@/hooks/useBindOption";
import { SearchFilterOperatorPolicy } from "@/data/custom/searchFilterOperatorPolicy";
import { SearchFilterTypePolicy } from "@/data/custom/searchFilterTypePolicy";
import { notification } from "ant-design-vue";
import { GridColumnInfo } from "@/data/auto/gridColumnInfo";
import { useGridColumnInfo } from "@/hooks/gridColumnInfo";
import { title } from "process";
import {
enquiryMethodKey,
searchCriteriaManagerKey,
masterOperationToEnquiryMethodKey,
MasterOperationToEnquiryModelOption,
layoutProviderMethodKey,
} from "@/injections";
import { useOrderedChildren } from "@/hooks/use-ordered-children";
import { SearchCriteriaContext } from "@/injections";
//page from-----------------------------------------------------------------------------------------------------------------------------------
//================inject================
//报表名称
const layoutProviderMethod = inject(layoutProviderMethodKey);
//当前是弹出的Modal,还是Page
const isModal = ref(inject("isModalShare", false) as boolean);
//初始化查询条件的值
const initBindOptions = ref(inject("initBindOptionsShare", []) as BindOption[]);
//记录单选还是多选
const selectionType = ref(inject("selectionTypeShare", "checkbox") as string);
//================inject================
const loading = ref<boolean>(false);
const isEdit = ref<boolean>(false);
const canView = ref<boolean>(false);
const canAmend = ref<boolean>(false);
const canDelete = ref<boolean>(false);
const canCreate = ref<boolean>(false);
const route = useRoute();
const router = useRouter();
const columns = ref([
{
title: "序号",
dataIndex: "index",
width: "3%",
align: "center",
fixed: "left",
sequence: 0,
hidden: "N",
format: "",
},
{
title: "群组",
dataIndex: FamilyFolderFavoriteViewEntity.FAMILY_LOCAL_NAME,
sorter: false,
width: "10%",
sequence: 1,
hidden: "N",
},
{
title: "共享路径",
dataIndex: FamilyFolderFavoriteViewEntity.TOP_FOLDER_LOCAL_NAME,
sorter: false,
width: "10%",
sequence: 2,
hidden: "N",
},
{
title: "目录描述",
dataIndex: FamilyFolderFavoriteViewEntity.NOTICE,
sorter: false,
width: "30%",
sequence: 4,
hidden: "N",
},
]);
const viewOption = {
Value: "default",
SelectOptions: [{ BindValue: "default", DisplayName: "默认" }],
Columns: [{ BindValue: "default", BindColumn: columns }],
};
const bindOptions = ref<BindOption[]>([]);
const datas = ref<FamilyFolderFavoriteViewEntity[]>([]);
const pagingParams = ref<PagingParams>({ pageSize: 20, page: 1 });
const result = ref<SearchCriteriaResultData>(new SearchCriteriaResultData());
const data = ref<FamilyGroupResultData>(new FamilyGroupResultData());
const currentFilter = ref<SearchFilter[]>([]);
const isSearched = ref<boolean>(false);
const currentSearchCriteria = ref<FamilyGroupManagerUserSearchCriteria>(
new FamilyGroupManagerUserSearchCriteria(),
);
const keys = ref<FamilyFolderFavoriteViewEntity[]>([]);
const {
children: items,
addChild: addItem,
removeChild: removeItem,
} = useOrderedChildren<SearchCriteriaContext>();
//================provide================
//初始化查询条件UI(search)
provide(enquiryMethodKey, {
getLayoutSetting: () => {
return {
controlLeft: 16,
controlRight: 8,
space: true,
soltLeft: 24,
soltRight: 24,
};
},
getBindOptions: () => {
return unref(bindOptions);
},
getViewOption: () => {
return unref(viewOption);
},
getDatas: () => {
return datas;
},
});
provide(
searchCriteriaManagerKey,
reactive({
items,
addItem,
removeItem,
}),
);
//================provide================
defineExpose({
keys,
initBindOptions,
});
onMounted(() => {
let pContext: PermissionContext = usePermissionContext();
canView.value = pContext.canView(route.meta.permission as string);
canAmend.value = pContext.canAmend(route.meta.permission as string);
canDelete.value = pContext.canDelete(route.meta.permission as string);
canCreate.value = pContext.canCreate(route.meta.permission as string);
initBindOption();
onSubmit(items.value[0].getFilter());
});
const onSelectChange = (selected: FamilyFolderFavoriteViewEntity[]) => {
keys.value = selected;
};
const onDelete = async () => {
let fgfs: FamilyFolderFavoriteEntity[] = [];
let fgf: FamilyFolderFavoriteEntity;
keys.value.forEach((element) => {
fgf = new FamilyFolderFavoriteEntity();
fgf.UserName = element.UserName;
fgf.FolderName = element.FolderName;
fgfs.push(fgf);
});
await familyGroupService.DeleteFamilyFolderFavorites(fgfs).then(() => {
notification.info({
message: "系统提示:",
description: "记录删除成功",
placement: "topRight",
});
onReload();
});
};
const onReset = () => {
keys.value = [];
result.value.Total = 0;
};
const setBindOptionValue = (
bindValue: string,
value: string,
value1: string,
values: string[],
disabled: boolean,
) => {
let bindOption: BindOption = bindOptions.value.filter(
(x) => x.BindValue == bindValue,
)[0];
if (!bindOption) return;
bindOption.Value = value;
bindOption.Value1 = value1;
bindOption.Values = values;
bindOption.disabled = disabled;
};
//初始化查询条件
const initBindOption = async () => {
let ubo = useBindOption();
let bindOption: BindOption = ubo.getBindOption(
FamilyFolderFavoriteViewEntity.DB_FAMILY_LOCAL_NAME,
"群组名称",
SearchFilterTypePolicy.TEXT,
SearchFilterOperatorPolicy.CN_CONTAIN,
);
bindOptions.value.push(bindOption);
bindOption = ubo.getBindOption(
FamilyFolderFavoriteViewEntity.DB_FOLDER_LOCAL_NAME,
"目录名称",
SearchFilterTypePolicy.TEXT,
SearchFilterOperatorPolicy.CN_CONTAIN,
);
bindOption.lg = 10;
bindOptions.value.push(bindOption);
initBindOptions.value.forEach((element) => {
setBindOptionValue(
element.BindValue,
element.Value,
element.Value1,
element.Values,
element.disabled,
);
});
};
//table from-----------------------------------------------------------------------------------------------------------------------------------
result.value.Page = pagingParams.value.page ?? 1;
result.value.Limit = pagingParams.value.pageSize;
const onSubmit = async (filters: SearchFilter[]) => {
let c: FamilyGroupManagerUserSearchCriteria =
new FamilyGroupManagerUserSearchCriteria();
currentFilter.value = filters;
isSearched.value = true;
c.Filter = filters;
c.limit = pagingParams.value.pageSize;
c.page = pagingParams.value.page ?? 1;
c.GridColumns = [];
currentSearchCriteria.value = c;
await findBySearchCriteria(c);
};
const onPrint = async () => {
let c: FamilyGroupManagerUserSearchCriteria =
new FamilyGroupManagerUserSearchCriteria();
if (currentFilter.value.length > 0) c.Filter = currentFilter.value;
else c.Filter = [];
c.limit = pagingParams.value.pageSize;
c.page = pagingParams.value.page ?? 1;
c.GridColumns = useGridColumnInfo().getGridColumnInfo(unref(columns));
c.ReportName = layoutProviderMethod?.getLayoutProvider().layoutTitle!;
try {
let sss = await familyGroupService.FamilyFolderFavoriteBySearchCriteria(c);
} catch (error) {
console.log(error);
}
};
const findBySearchCriteria = async (
c: FamilyGroupManagerUserSearchCriteria,
) => {
try {
data.value =
await familyGroupService.FamilyFolderFavoriteBySearchCriteria(c);
result.value.Total = data.value.Total;
result.value.Page = data.value.Page;
result.value.Limit = data.value.Limit;
datas.value = data.value.Favorites;
} catch (error) {
console.log(error);
}
};
const onPagination = async (params: PagingParams) => {
if (!isSearched.value) return;
let c: FamilyGroupManagerUserSearchCriteria =
new FamilyGroupManagerUserSearchCriteria();
if (currentFilter.value.length > 0) c.Filter = currentFilter.value;
else c.Filter = [];
c.limit = params.pageSize;
c.page = params.page ?? 1;
if (params.sortField) c.orderby = params.sortField!;
if (params.sortOrder)
c.orderbytag = params.sortOrder?.toString().substring(0, 4)!;
c.GridColumns = [];
currentSearchCriteria.value = c;
await findBySearchCriteria(c);
};
const onReload = async () => {
await findBySearchCriteria(unref(currentSearchCriteria));
};
//table end-----------------------------------------------------------------------------------------------------------------------------------
</script>