fix
This commit is contained in:
@@ -128,7 +128,7 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts" name="home">
|
||||
import { ref, onMounted, onUnmounted } from 'vue'
|
||||
import { ref, onMounted, onActivated, onUnmounted } from 'vue'
|
||||
import { useRouter } from 'vue-router'
|
||||
import { fetchTodoPage } from '/@/api/jsonflow/do-job'
|
||||
import { fetchList as fetchNoticeList } from '/@/api/jsonflow/ws-notice'
|
||||
@@ -278,6 +278,11 @@ onMounted(() => {
|
||||
loadMessageList()
|
||||
})
|
||||
|
||||
// 页面激活时刷新待办列表(处理从待办返回的情况)
|
||||
onActivated(() => {
|
||||
loadTodoList()
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
if (timeTimer) {
|
||||
clearInterval(timeTimer)
|
||||
|
||||
@@ -205,7 +205,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.businessNegotiationTable"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.businessNegotiationTable }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('businessNegotiationTable')"
|
||||
@@ -226,7 +226,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.marketPurchaseMinutes"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.marketPurchaseMinutes }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('marketPurchaseMinutes')"
|
||||
@@ -247,7 +247,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.onlineMallMaterials"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.onlineMallMaterials }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('onlineMallMaterials')"
|
||||
@@ -259,7 +259,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.inquiryTemplate"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.inquiryTemplate }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('inquiryTemplate')"
|
||||
@@ -284,7 +284,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.deptSelfMeetingMinutes"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.deptSelfMeetingMinutes }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('deptSelfMeetingMinutes')"
|
||||
@@ -320,7 +320,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.serviceDirectSelect"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.serviceDirectSelect }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('serviceDirectSelect')"
|
||||
@@ -351,7 +351,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.serviceInviteSelect"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.serviceInviteSelect }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('serviceInviteSelect')"
|
||||
@@ -376,7 +376,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.purchaseRequirementTemplate"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.purchaseRequirementTemplate }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('purchaseRequirementTemplate')"
|
||||
@@ -405,7 +405,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.serviceInviteSelect"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.serviceInviteSelect }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('serviceInviteSelect')"
|
||||
@@ -426,7 +426,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.servicePublicSelectAuto"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.servicePublicSelectAuto }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('servicePublicSelectAuto')"
|
||||
@@ -556,7 +556,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.feasibilityReport"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.feasibilityReport }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('feasibilityReport')"
|
||||
@@ -587,7 +587,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.meetingMinutes"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutes }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('meetingMinutes')"
|
||||
@@ -599,7 +599,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.meetingMinutesUrgent"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutesUrgent }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('meetingMinutesUrgent')"
|
||||
@@ -611,7 +611,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.singleSourceProof"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.singleSourceProof }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('singleSourceProof')"
|
||||
@@ -632,7 +632,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.meetingMinutesSingle"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutesSingle }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('meetingMinutesSingle')"
|
||||
@@ -644,7 +644,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.importApplication"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.importApplication }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('importApplication')"
|
||||
@@ -665,7 +665,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.meetingMinutesImport"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.meetingMinutesImport }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('meetingMinutesImport')"
|
||||
@@ -693,7 +693,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.serviceInviteSelectSchool"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.serviceInviteSelectSchool }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('serviceInviteSelectSchool')"
|
||||
@@ -712,7 +712,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.servicePublicSelectSchoolAuto"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.servicePublicSelectSchoolAuto }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('servicePublicSelectSchoolAuto')"
|
||||
@@ -732,7 +732,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.servicePublicSelectSchool"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.servicePublicSelectSchool }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('servicePublicSelectSchool')"
|
||||
@@ -751,7 +751,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.purchaseRequirement"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.purchaseRequirement }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('purchaseRequirement')"
|
||||
@@ -773,7 +773,7 @@
|
||||
<upload-file
|
||||
v-model="dataForm.governmentPurchaseIntent"
|
||||
:limit="1"
|
||||
:file-type="['pdf']"
|
||||
:file-type="['doc', 'docx', 'pdf']"
|
||||
:data="{ fileType: FILE_TYPE_MAP.governmentPurchaseIntent }"
|
||||
upload-file-url="/purchase/purchasingfiles/upload"
|
||||
:disabled="flowFieldDisabled('governmentPurchaseIntent')"
|
||||
@@ -967,6 +967,7 @@ import { addObj, tempStore, getObj, editObj, getApplyFiles } from '/@/api/purcha
|
||||
import { getTree } from '/@/api/purchase/purchasingcategory';
|
||||
import { getDicts } from '/@/api/admin/dict';
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
import { useUserInfo } from '/@/stores/userInfo';
|
||||
import { usePurchaseRulesSingleton } from '/@/hooks/usePurchaseRules';
|
||||
import UploadFile from '/@/components/Upload/index.vue';
|
||||
import other from '/@/utils/other';
|
||||
@@ -980,6 +981,7 @@ import * as orderVue from '/@/api/order/order-key-vue';
|
||||
|
||||
/** 采购中心角色编码:审批时仅该角色可编辑采购方式/采购形式 */
|
||||
const PURCHASE_CENTER_ROLE_CODE = 'PURCHASE_CENTER';
|
||||
const PURCHASE_DEPT_APPLY_ROLE_CODE = 'ROLE_PURCHASE_DEPT_APPLY';
|
||||
|
||||
// 兼容流程 dynamic-link 引用:接收 currJob / currElTab,并支持 handleJob 事件
|
||||
const props = defineProps({
|
||||
@@ -1041,9 +1043,15 @@ function flowFieldDisabled(_key: string) {
|
||||
|
||||
/** 当前用户是否为申请人(在流程中可编辑) */
|
||||
const isApplicant = computed(() => {
|
||||
if (!dataForm.createUser) return false;
|
||||
const currentUser = Session.getUser() || {};
|
||||
return dataForm.createUser === currentUser.userId || dataForm.createUser === currentUser.username;
|
||||
|
||||
const stores = useUserInfo();
|
||||
const currentUser = stores.userInfos?.user || {};
|
||||
console.log(currentUser)
|
||||
if (!dataForm.createBy) return false;
|
||||
|
||||
// const stores = useUserInfo();
|
||||
// const currentUser = stores.userInfos?.user || {};
|
||||
return dataForm.createBy === currentUser.username;
|
||||
});
|
||||
|
||||
// 定义变量内容
|
||||
@@ -1066,6 +1074,7 @@ const dataForm = reactive({
|
||||
categoryCode: '',
|
||||
remark: '',
|
||||
status: '',
|
||||
createBy: '', // 创建人用户名,用于判断是否为申请人
|
||||
// 部门自行采购字段
|
||||
businessNegotiationTable: '',
|
||||
marketPurchaseMinutes: '',
|
||||
@@ -1762,6 +1771,7 @@ async function loadDetail(applyId: string | number) {
|
||||
categoryCode: detail.categoryCode ?? '',
|
||||
remark: detail.remark ?? '',
|
||||
status: detail.status ?? '',
|
||||
createBy: detail.createBy ?? '',
|
||||
businessNegotiationTable: detail.businessNegotiationTable ?? '',
|
||||
marketPurchaseMinutes: detail.marketPurchaseMinutes ?? '',
|
||||
onlineMallMaterials: detail.onlineMallMaterials ?? '',
|
||||
@@ -1929,6 +1939,7 @@ async function flowSubmitForm() {
|
||||
'purchaseRequirementTemplate',
|
||||
'serviceInviteSelect',
|
||||
'servicePublicSelectAuto',
|
||||
'deptSelfMeetingMinutes', // 部门自行采购会议纪要
|
||||
'purchaseRequirement',
|
||||
'meetingMinutes',
|
||||
'feasibilityReport',
|
||||
|
||||
@@ -109,11 +109,19 @@
|
||||
<el-icon><List /></el-icon>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="purchaseNo" label="申请单编号" min-width="140" show-overflow-tooltip>
|
||||
<el-table-column prop="purchaseNo" label="申请单编号" min-width="150" show-overflow-tooltip>
|
||||
<template #header>
|
||||
<el-icon><DocumentCopy /></el-icon>
|
||||
<span style="margin-left: 4px">申请单编号</span>
|
||||
</template>
|
||||
<template #default="scope">
|
||||
<div class="purchase-no-cell">
|
||||
<span>{{ scope.row.purchaseNo }}</span>
|
||||
<el-button v-if="scope.row.purchaseNo" type="primary" link size="small" class="copy-btn" @click.stop="copyToClipboard(scope.row.purchaseNo)">
|
||||
<el-icon><CopyDocument /></el-icon>
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="projectName" label="采购项目名称" min-width="200" show-overflow-tooltip>
|
||||
<template #header>
|
||||
@@ -185,15 +193,18 @@
|
||||
<span v-else>-</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="purchaseMode" label="采购形式" width="130" align="center">
|
||||
<el-table-column prop="purchaseMode" label="采购形式" width="140" align="center">
|
||||
<template #header>
|
||||
<el-icon><Shop /></el-icon>
|
||||
<span style="margin-left: 4px">采购形式</span>
|
||||
</template>
|
||||
<template #default="scope">
|
||||
<div class="purchase-mode-cell">
|
||||
<el-tag v-if="scope.row.purchaseMode === '1'" type="success">部门自行采购</el-tag>
|
||||
<el-tag v-else-if="scope.row.purchaseMode === '2'" type="primary">学校统一采购</el-tag>
|
||||
<span v-else>-</span>
|
||||
<el-tag v-if="scope.row.purchaseMode === '1' && scope.row.purchaseChannel === '2'" type="warning" size="small" class="entrust-tag">委</el-tag>
|
||||
</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="purchaseType" label="采购方式" width="120" align="center">
|
||||
@@ -383,7 +394,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||
import { useAuth } from '/@/hooks/auth';
|
||||
import { getDicts } from '/@/api/admin/dict';
|
||||
import { getTree } from '/@/api/purchase/purchasingcategory';
|
||||
import { List, Document, DocumentCopy, Search, Money, CircleCheck, InfoFilled, Calendar, OfficeBuilding, Warning, DocumentChecked, Edit, Delete, Upload, FolderOpened, Download, User, RefreshRight, Shop } from '@element-plus/icons-vue'
|
||||
import { List, Document, DocumentCopy, Search, Money, CircleCheck, InfoFilled, Calendar, OfficeBuilding, Warning, DocumentChecked, Edit, Delete, Upload, FolderOpened, Download, User, RefreshRight, Shop, CopyDocument } from '@element-plus/icons-vue'
|
||||
import other from '/@/utils/other'
|
||||
import { Session } from '/@/utils/storage'
|
||||
|
||||
@@ -574,6 +585,26 @@ const handleImplement = (row: any) => {
|
||||
implementFormRef.value?.openDialog(row);
|
||||
};
|
||||
|
||||
/** 复制到剪贴板 */
|
||||
const copyToClipboard = async (text: string) => {
|
||||
if (!text) return;
|
||||
try {
|
||||
await navigator.clipboard.writeText(text);
|
||||
useMessage().success('复制成功');
|
||||
} catch (err) {
|
||||
// 降级方案
|
||||
const textarea = document.createElement('textarea');
|
||||
textarea.value = text;
|
||||
textarea.style.position = 'fixed';
|
||||
textarea.style.opacity = '0';
|
||||
document.body.appendChild(textarea);
|
||||
textarea.select();
|
||||
document.execCommand('copy');
|
||||
document.body.removeChild(textarea);
|
||||
useMessage().success('复制成功');
|
||||
}
|
||||
};
|
||||
|
||||
/** 打开招标文件审核 */
|
||||
const handleDocAudit = (row: any) => {
|
||||
docAuditDialogRef.value?.open(row);
|
||||
@@ -973,5 +1004,34 @@ onMounted(() => {
|
||||
--el-tag-border-color: #e0e0e0;
|
||||
--el-tag-text-color: #616161;
|
||||
}
|
||||
|
||||
.purchase-no-cell {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 4px;
|
||||
|
||||
.copy-btn {
|
||||
opacity: 0;
|
||||
transition: opacity 0.2s;
|
||||
}
|
||||
|
||||
&:hover .copy-btn {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
|
||||
.purchase-mode-cell {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 4px;
|
||||
|
||||
.entrust-tag {
|
||||
font-size: 11px;
|
||||
padding: 0 4px;
|
||||
height: 18px;
|
||||
line-height: 16px;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user