| | |
| | | return dto; |
| | | } |
| | | |
| | | /** @deprecated ä½¿ç¨ buildInstanceDto */ |
| | | export function buildSaveInstanceDto(params) { |
| | | return buildInstanceDto(params); |
| | | } |
| | | |
| | | /** æ ¡éªæäº¤å®¡æ¹æµç¨ï¼ä¸æ¨¡æ¿é¡µè§åä¸è´ï¼ */ |
| | | export function validateSubmitFlowNodes(flowNodes) { |
| | | const nodes = normalizeFlowNodes(flowNodes); |
| | |
| | | if (key === "rejected") return "danger"; |
| | | if (key === "cancelled") return "info"; |
| | | return "warning"; |
| | | } |
| | | |
| | | export function unreadLabel(v) { |
| | | return v ? "æ¯" : "å¦"; |
| | | } |
| | | |
| | | /** åè¡¨è¡ â ç¼è¾è¡¨åï¼ä»
ç¨è¡æ°æ®åæ¾ï¼ */ |
| | |
| | | return cfg.approvalType || ""; |
| | | } |
| | | |
| | | export function listApprovalModuleEntries() { |
| | | return Object.entries(APPROVAL_MODULE_REGISTRY).map(([moduleKey, cfg]) => ({ |
| | | moduleKey, |
| | | ...cfg, |
| | | })); |
| | | } |
| | | |
| | | /** ä» TypeEnums é项ä¸è§£ææ¬æ¨¡åç businessTypeï¼ä¸å®¡æ¹åè¡¨ä¸æä¸è´ï¼ */ |
| | | export function resolveModuleBusinessType(moduleKey, typeOptions = []) { |
| | | const cfg = getApprovalModuleConfig(moduleKey); |
| | |
| | | { value: "editor", label: "å
容ç¼è¾" }, |
| | | ]; |
| | | |
| | | export const STORAGE_KEY = "oa_enterprise_news_v1"; |
| | | |
| | | /** ç®æ åä¼ï¼å¯¹æ¥ç»ç»æ¶æ API åä¸ºç©ºï¼ */ |
| | | export const MOCK_AUDIENCE = []; |
| | | |
| | |
| | | }; |
| | | } |
| | | |
| | | function buildReadRecords(readUserIds = []) { |
| | | return (readUserIds || []).map((userId) => ({ |
| | | userId, |
| | | employeeNo: "", |
| | | name: "", |
| | | deptName: "", |
| | | readAt: "", |
| | | lastRemindAt: "", |
| | | })); |
| | | } |
| | | |
| | | function createVersionSnapshot(row, changeNote = "åå¸") { |
| | | return { |
| | | versionNo: row.versionNo || 1, |
| | | title: row.title, |
| | | summary: row.summary, |
| | | contentHtml: row.contentHtml, |
| | | newsType: row.newsType, |
| | | publishTime: row.publishTime || dayjs().format("YYYY-MM-DD HH:mm:ss"), |
| | | archivedAt: dayjs().format("YYYY-MM-DD HH:mm:ss"), |
| | | changeNote, |
| | | publisherName: row.publisherName || "ç³»ç»", |
| | | }; |
| | | } |
| | | |
| | | /** @deprecated ä¸å注å
¥æ¼ç¤ºæ°æ®ï¼åå§å表为空 */ |
| | | export function createInitialMockNews() { |
| | | return []; |
| | | } |
| | | |
| | | /** ä¸å使ç¨å端æ¬å°ç¼åï¼åè¡¨æ°æ®ä»¥æ¥å£ä¸ºåï¼å¹¶æ¸
é¤åå² localStorage æ°æ® */ |
| | | export function loadStoredNews() { |
| | | try { |
| | | localStorage.removeItem(STORAGE_KEY); |
| | | } catch { |
| | | /* ignore */ |
| | | } |
| | | return []; |
| | | } |
| | | |
| | | /** @deprecated ä¿ç空å®ç°ï¼é¿å
æ§è°ç¨æ¥éï¼ä¸å任使ä¹
å */ |
| | | export function saveStoredNews() {} |
| | | |
| | | /** æé
读èå´è§£æç®æ åä¼ */ |
| | | export function resolveTargetAudience(row) { |
| | | const scope = row.readScope || "all"; |
| | |
| | | if (!audience.length) return 0; |
| | | const readCount = (row.readRecords || []).filter((r) => r.readAt).length; |
| | | return Math.round((readCount / audience.length) * 100); |
| | | } |
| | | |
| | | export function nextNewsNo() { |
| | | return `EN${dayjs().format("YYYYMMDD")}${String(Math.floor(Math.random() * 9000) + 1000)}`; |
| | | } |
| | | |
| | | export function pushVersionBeforeUpdate(row, changeNote) { |
| | | const versions = row.versions || []; |
| | | versions.unshift(createVersionSnapshot(row, changeNote)); |
| | | row.versions = versions; |
| | | row.versionNo = (row.versionNo || 1) + 1; |
| | | } |
| | | |
| | | export function validateNewsForm(form) { |
| | |
| | | |
| | | <!-- 详æ
--> |
| | | <el-dialog v-model="detailDialog.visible" title="æ°é»è¯¦æ
" width="880px" append-to-body destroy-on-close> |
| | | <NewsDetailPanel :row="detailNewsRow" @like="onDetailLike" @comment="onDetailComment" /> |
| | | <NewsDetailPanel :row="detailNewsRow" /> |
| | | <el-divider content-position="left">审æ¹ä¿¡æ¯</el-divider> |
| | | <ApproveDetailPanel :row="detailRow" /> |
| | | <template #footer> |
| | |
| | | pagination(obj, searchForm); |
| | | } |
| | | |
| | | function onDetailLike() { |
| | | /* 详æ
äºå¨ä»èµ°è¡å
æ°æ®ï¼å·æ°åè¡¨åæ´æ° */ |
| | | } |
| | | |
| | | function onDetailComment() { |
| | | ElMessage.info("è¯è®ºå·²è®°å½ï¼æ¼ç¤ºï¼"); |
| | | } |
| | | |
| | | onMounted(async () => { |
| | | try { |
| | | localStorage.removeItem("oa_enterprise_news_v1"); |
| | | } catch { |
| | | /* æ¸
é¤å岿¬å°æ¼ç¤ºç¼å */ |
| | | } |
| | | loadFlowUsers(); |
| | | await initModuleList(searchForm); |
| | | }); |
| | |
| | | <div> |
| | | <el-button type="primary" @click="openForm('add')">æ°å¢ç¦»è</el-button> |
| | | <el-button @click="handleOut">导åº</el-button> |
| | | <!-- <el-button type="danger" plain @click="handleDelete">å é¤</el-button> --> |
| | | </div> |
| | | </div> |
| | | <div class="table_list"> |
| | |
| | | import { Search } from "@element-plus/icons-vue"; |
| | | import {onMounted, ref} from "vue"; |
| | | import FormDia from "@/views/personnelManagement/dimission/components/formDia.vue"; |
| | | import {findStaffLeaveListPage, batchDeleteStaffLeaves} from "@/api/personnelManagement/staffLeave.js"; |
| | | import { findStaffLeaveListPage } from "@/api/personnelManagement/staffLeave.js"; |
| | | import {ElMessageBox} from "element-plus"; |
| | | |
| | | const data = reactive({ |
| | |
| | | }) |
| | | }; |
| | | |
| | | // å é¤ |
| | | const handleDelete = () => { |
| | | let ids = []; |
| | | if (selectedRows.value.length > 0) { |
| | | ids = selectedRows.value.map((item) => item.id); |
| | | } else { |
| | | proxy.$modal.msgWarning("è¯·éæ©æ°æ®"); |
| | | return; |
| | | } |
| | | ElMessageBox.confirm("éä¸çå
容å°è¢«å é¤ï¼æ¯å¦ç¡®è®¤å é¤ï¼", "导åº", { |
| | | confirmButtonText: "确认", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | batchDeleteStaffLeaves(ids).then((res) => { |
| | | proxy.$modal.msgSuccess("å 餿å"); |
| | | getList(); |
| | | }); |
| | | }) |
| | | .catch(() => { |
| | | proxy.$modal.msg("已忶"); |
| | | }); |
| | | }; |
| | | // å¯¼åº |
| | | const handleOut = () => { |
| | | ElMessageBox.confirm("éä¸çå
容å°è¢«å¯¼åºï¼æ¯å¦ç¡®è®¤å¯¼åºï¼", "导åº", { |
| | |
| | | const dialogFormVisible = ref(false); |
| | | const operationType = ref('') |
| | | const tableColumn = ref([ |
| | | // { |
| | | // label: "ååå¹´é", |
| | | // prop: "contractTerm", |
| | | // }, |
| | | { |
| | | label: "ååå¼å§æ¥æ", |
| | | prop: "contractStartTime", |
| | |
| | | format="YYYY-MM-DD" |
| | | placeholder="è¯·éæ©" |
| | | /> |
| | | <!-- <span style="margin-left: 10px" class="search_title">ååç»ææ¥æï¼</span> --> |
| | | <!-- <el-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange" |
| | | placeholder="è¯·éæ©" clearable @change="changeDaterange" /> --> |
| | | <el-button type="primary" @click="handleQuery" style="margin-left: 10px" |
| | | >æç´¢</el-button |
| | | > |
| | |
| | | <el-button type="primary" @click="openFormNewOrEditFormDia('add')">æ°å¢å
¥è</el-button> |
| | | <el-button type="info" @click="handleImport">导å
¥</el-button> |
| | | <el-button @click="handleOut">导åº</el-button> |
| | | <!-- <el-button type="danger" plain @click="handleDelete">å é¤</el-button> --> |
| | | </div> |
| | | </div> |
| | | <div class="table_list"> |
| | |
| | | import {onMounted, ref} from "vue"; |
| | | import {ElMessageBox} from "element-plus"; |
| | | import { deptTreeSelect } from "@/api/system/user.js"; |
| | | import {batchDeleteStaffOnJobs, staffOnJobListPage} from "@/api/personnelManagement/staffOnJob.js"; |
| | | import { staffOnJobListPage } from "@/api/personnelManagement/staffOnJob.js"; |
| | | import { getToken } from "@/utils/auth"; |
| | | import dayjs from "dayjs"; |
| | | |
| | |
| | | id.value = row.id; |
| | | }, |
| | | }, |
| | | // { |
| | | // name: "详æ
", |
| | | // type: "text", |
| | | // clickFun: (row) => { |
| | | // openForm("edit", row); |
| | | // }, |
| | | // }, |
| | | ], |
| | | }, |
| | | ]); |
| | |
| | | |
| | | const fetchDeptOptions = () => { |
| | | deptTreeSelect().then(response => { |
| | | console.log(response.data) |
| | | deptOptions.value = filterDisabledDept( |
| | | JSON.parse(JSON.stringify(response.data)) |
| | | ); |
| | |
| | | return true; |
| | | }); |
| | | }; |
| | | const changeDaterange = (value) => { |
| | | searchForm.value.entryDateStart = undefined; |
| | | searchForm.value.entryDateEnd = undefined; |
| | | if (value) { |
| | | searchForm.value.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD"); |
| | | searchForm.value.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD"); |
| | | } |
| | | getList(); |
| | | }; |
| | | // æ¥è¯¢å表 |
| | | /** æç´¢æé®æä½ */ |
| | | const handleQuery = () => { |
| | | page.current = 1; |
| | |
| | | nextTick(() => { |
| | | formDiaNewOrEditFormDia.value?.openDialog(type, row) |
| | | }) |
| | | }; |
| | | |
| | | // å é¤ |
| | | const handleDelete = () => { |
| | | let ids = []; |
| | | if (selectedRows.value.length > 0) { |
| | | ids = selectedRows.value.map((item) => item.id); |
| | | } else { |
| | | proxy.$modal.msgWarning("è¯·éæ©æ°æ®"); |
| | | return; |
| | | } |
| | | ElMessageBox.confirm("éä¸çå
容å°è¢«å é¤ï¼æ¯å¦ç¡®è®¤å é¤ï¼", "导åº", { |
| | | confirmButtonText: "确认", |
| | | cancelButtonText: "åæ¶", |
| | | type: "warning", |
| | | }) |
| | | .then(() => { |
| | | batchDeleteStaffOnJobs(ids).then((res) => { |
| | | proxy.$modal.msgSuccess("å 餿å"); |
| | | getList(); |
| | | }); |
| | | }) |
| | | .catch(() => { |
| | | proxy.$modal.msg("已忶"); |
| | | }); |
| | | }; |
| | | |
| | | // å¯¼åº |
| | |
| | | <template #tip> |
| | | <div class="el-upload__tip text-center"> |
| | | <span>ä»
å
许导å
¥xlsãxlsxæ ¼å¼æä»¶ã</span> |
| | | <!-- <el-link |
| | | type="primary" |
| | | :underline="false" |
| | | style="font-size: 12px; vertical-align: baseline" |
| | | @click="importTemplate" |
| | | >ä¸è½½æ¨¡æ¿</el-link |
| | | > --> |
| | | </div> |
| | | </template> |
| | | </el-upload> |
| | |
| | | prop: "emergencyContactPhone", |
| | | width: 150 |
| | | }, |
| | | // { |
| | | // label: "ååå¹´é", |
| | | // prop: "contractTerm", |
| | | // }, |
| | | // { |
| | | // label: "ååå¼å§æ¥æ", |
| | | // prop: "contractStartTime", |
| | | // width: 120 |
| | | // }, |
| | | { |
| | | label: "ååç»ææ¥æ", |
| | | prop: "contractExpireTime", |
| | |
| | | }; |
| | | // æå¼éä»¶å¼¹æ¡ |
| | | const openFilesFormDia = (row) => { |
| | | console.log(row) |
| | | nextTick(() => { |
| | | filesDia.value?.openDialog( row,'åå') |
| | | }) |
| | |
| | | } |
| | | /** æäº¤ä¸ä¼ æä»¶ */ |
| | | function submitFileForm() { |
| | | console.log(upload.url + '?updateSupport=' + upload.updateSupport) |
| | | proxy.$refs["uploadRef"].submit(); |
| | | } |
| | | /**æä»¶ä¸ä¼ ä¸å¤ç */ |
| | |
| | | { value: "106", label: "人åèµæºé¨" }, |
| | | ]; |
| | | |
| | | export const STORAGE_KEY = "oa_notice_announcement_v1"; |
| | | |
| | | export function noticeTypeLabel(v) { |
| | | return NOTICE_TYPE_OPTIONS.find((x) => x.value === v)?.label || v || "â"; |
| | | } |
| | |
| | | updateTime: "", |
| | | }; |
| | | } |
| | | |
| | | /** @deprecated ä¸å注å
¥æ¼ç¤ºæ°æ®ï¼åå§å表为空 */ |
| | | export function createInitialMockNotices() { |
| | | return []; |
| | | } |
| | | |
| | | /** ä¸å使ç¨å端æ¬å°ç¼åï¼åè¡¨æ°æ®ä»¥æ¥å£ä¸ºåï¼å¹¶æ¸
é¤åå² localStorage æ°æ® */ |
| | | export function loadStoredNotices() { |
| | | try { |
| | | localStorage.removeItem(STORAGE_KEY); |
| | | } catch { |
| | | /* ignore */ |
| | | } |
| | | return []; |
| | | } |
| | | |
| | | /** @deprecated ä¿ç空å®ç°ï¼é¿å
æ§è°ç¨æ¥éï¼ä¸å任使ä¹
å */ |
| | | export function saveStoredNotices() {} |
| | | |
| | | export function nextNoticeNo() { |
| | | return `NA${dayjs().format("YYYYMMDD")}${String(Math.floor(Math.random() * 9000) + 1000)}`; |
| | |
| | | READ_SCOPE_OPTIONS, |
| | | DEPT_OPTIONS, |
| | | createEmptyForm, |
| | | loadStoredNotices, |
| | | nextNoticeNo, |
| | | validateNoticeForm, |
| | | noticeTypeLabel, |
| | |
| | | ]); |
| | | |
| | | onMounted(() => { |
| | | loadStoredNotices(); |
| | | try { |
| | | localStorage.removeItem("oa_notice_announcement_v1"); |
| | | } catch { |
| | | /* æ¸
é¤å岿¬å°æ¼ç¤ºç¼å */ |
| | | } |
| | | }); |
| | | |
| | | function handleQuery() { |