import { reactive, ref, onMounted, h, toRaw, watch } from "vue";
|
import { useRoute, useRouter } from "vue-router";
|
import dayjs from "dayjs";
|
import { message } from "@/utils/message";
|
import type { PaginationProps } from "@pureadmin/table";
|
import {
|
pageGonggao,
|
pageGengzgeng,
|
shouyeZhongbiaoOrder,
|
neirongfabuDetail,
|
shouyeOrder,
|
shouyeChangeOrder,
|
feizhengfuDetail,
|
pageZhongbiaoGonggao
|
} from "@/api/item/shouye";
|
const convertFujianToObjects = (fujianStr, fujianNameStr) => {
|
// 分割字符串为数组并过滤空值
|
const srcArray = fujianStr.split(",").filter(Boolean);
|
const nameArray = fujianNameStr.split(",").filter(Boolean);
|
|
// 提取文件后缀作为valu
|
const getFileExtension = fileName => {
|
const lastDotIndex = fileName.lastIndexOf(".");
|
// 如果没有后缀或文件名以点结尾,返回空字符串
|
if (lastDotIndex === -1 || lastDotIndex === fileName.length - 1) {
|
return "";
|
}
|
return fileName.slice(lastDotIndex + 1).toLowerCase();
|
};
|
|
// 映射为目标对象数组
|
return srcArray.map((src, index) => {
|
// 确保名称数组有对应索引的元素
|
const name = nameArray[index]?.trim() || `未知文件${index + 1}`;
|
|
return {
|
name: name,
|
filePath: src.trim(),
|
fileType: getFileExtension(name)
|
};
|
});
|
};
|
export function useIndex() {
|
const route = useRoute();
|
const router = useRouter();
|
const stateHook = reactive({
|
pageGonggaoList: [],
|
shouyeZhongbiaoOrderList: [],
|
shouyeOrderList: [],
|
active: 0,
|
activeList: 0,
|
gonggaoDetail: {},
|
gonggaoList: [
|
{ name: "招采公告" },
|
{ name: "更正公告" },
|
{ name: "结果公告" }
|
// { name: "其他公告" }
|
]
|
});
|
async function getNeirongfabuDetail(data) {
|
const res = await neirongfabuDetail(data);
|
stateHook.pageGonggaoList = res.result;
|
}
|
async function getFeizhengfuDetail(params) {
|
const res = await feizhengfuDetail(params);
|
stateHook.gonggaoDetail = res.result;
|
stateHook.gonggaoDetail.fujianList = convertFujianToObjects(
|
stateHook.gonggaoDetail.fujian,
|
stateHook.gonggaoDetail.fujianName
|
);
|
}
|
async function getShouyeOrder(active) {
|
let res;
|
stateHook.active = active;
|
switch (active) {
|
case 0:
|
res = await shouyeOrder();
|
stateHook.shouyeOrderList = res.result;
|
break;
|
case 1:
|
res = await getShouyeChangeOrder();
|
stateHook.shouyeOrderList = res.result;
|
break;
|
case 2:
|
res = await shouyeZhongbiaoOrder();
|
stateHook.shouyeOrderList = res.result;
|
break;
|
}
|
}
|
async function getOrderList(active) {
|
stateHook.activeList = active;
|
}
|
async function getShouyeChangeOrder() {
|
const res = await shouyeChangeOrder();
|
stateHook.shouyeOrderList = res.result;
|
}
|
function goDetail(id) {
|
router.push({ name: "gonggaoDetail", query: { id } });
|
}
|
const form = reactive({
|
keyword: "",
|
createDateRange: ""
|
});
|
const curRow = ref();
|
const dataList = ref([]);
|
const loading = ref(true);
|
|
const pagination = reactive<PaginationProps>({
|
total: 0,
|
pageSize: 10,
|
currentPage: 1,
|
background: true
|
});
|
const columns: TableColumnList = [
|
{
|
label: "区域",
|
prop: "xingzhengquyuName",
|
minWidth: 80
|
},
|
{
|
label: "采购方式",
|
prop: "caigoufangshiName",
|
width: 100
|
},
|
{
|
label: "名称",
|
prop: "projectName",
|
minWidth: 100
|
},
|
{
|
label: "发布时间",
|
prop: "fabuDate",
|
width: 160,
|
formatter: ({ fabuDate }) => dayjs(fabuDate).format("YYYY-MM-DD HH:mm:ss")
|
}
|
];
|
|
function handleDelete(row) {
|
message(`您删除了角色名称为${row.name}的这条数据`, { type: "success" });
|
onSearch();
|
}
|
|
function handleSizeChange(val: number) {
|
console.log(`${val} items per page`);
|
}
|
|
function handleCurrentChange(val: number) {
|
console.log(`current page: ${val}`);
|
}
|
|
function handleSelectionChange(val) {
|
console.log("handleSelectionChange", val);
|
}
|
|
async function onSearch() {
|
loading.value = true;
|
let res;
|
switch (stateHook.activeList) {
|
case 0:
|
res = await pageGonggao(form);
|
break;
|
case 1:
|
res = await pageGengzgeng(form);
|
break;
|
case 2:
|
res = await pageZhongbiaoGonggao(form);
|
break;
|
}
|
const { result } = res;
|
// dataList.value = data.list;
|
dataList.value = result.items;
|
loading.value = false;
|
pagination.total = result.total;
|
pagination.pageSize = result.pageSize;
|
pagination.currentPage = result.page;
|
|
// setTimeout(() => {
|
// loading.value = false;
|
// }, 500);
|
}
|
|
const resetForm = formEl => {
|
if (!formEl) return;
|
formEl.resetFields();
|
onSearch();
|
};
|
|
/** 高亮当前权限选中行 */
|
function rowStyle({ row: { id } }) {
|
return {
|
cursor: "pointer",
|
background: id === curRow.value?.id ? "var(--el-fill-color-light)" : ""
|
};
|
}
|
|
onMounted(async () => {
|
onSearch();
|
// const { data } = await getRoleMenu();
|
// treeIds.value = getKeyList(data, "id");
|
// treeData.value = handleTree(data);
|
});
|
|
return {
|
stateHook,
|
getShouyeOrder,
|
getNeirongfabuDetail,
|
goDetail,
|
route,
|
router,
|
getFeizhengfuDetail,
|
getOrderList,
|
form,
|
curRow,
|
loading,
|
columns,
|
rowStyle,
|
dataList,
|
pagination,
|
onSearch,
|
resetForm,
|
handleDelete,
|
handleSizeChange,
|
handleCurrentChange,
|
handleSelectionChange
|
};
|
}
|