Compare commits
2 Commits
92b9bf9dd1
...
e19c8ae50e
| Author | SHA1 | Date | |
|---|---|---|---|
| e19c8ae50e | |||
| a8ab4382a2 |
@@ -9,4 +9,15 @@ export const getByProcessInstanceId = (processInstanceId: any) => {
|
||||
processInstanceId
|
||||
}
|
||||
});
|
||||
}
|
||||
// 企业微信登录
|
||||
export const loginWx = (code: any) => {
|
||||
return request({
|
||||
url: '/admin/oauth2/token',
|
||||
method: 'get',
|
||||
params:{
|
||||
grant_type: 'wechat_work',
|
||||
code:code
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -35,6 +35,16 @@ export const investmentProjectsPlanGetById = (id: number|string) => {
|
||||
},
|
||||
});
|
||||
};
|
||||
// 根据模板id查询项目投资计划
|
||||
export const getInvestmentProjectsPlanByTemplateId = (templateId: string) => {
|
||||
return request({
|
||||
url: '/admin/investmentProjectsPlan/getByTemplateId',
|
||||
method: 'get',
|
||||
params: {
|
||||
templateId: templateId
|
||||
}
|
||||
})
|
||||
}
|
||||
// 推送国资 投资项目计划
|
||||
export const investmentProjectsPlanPush = (id: string) => {
|
||||
return request({
|
||||
|
||||
@@ -46,6 +46,14 @@ export const getInvestmentProjectsProgressViewAPI = (id: number|string) => {
|
||||
params: { id }
|
||||
})
|
||||
}
|
||||
// 根据模板id查询投资项目进度
|
||||
export const getInvestmentProjectsProgressByTemplateIdAPI = (templateId: string) => {
|
||||
return request<InvestmentProjectProgress>({
|
||||
url: '/admin/investmentProjectsProgress/getByTemplateId',
|
||||
method: 'get',
|
||||
params: { templateId }
|
||||
})
|
||||
}
|
||||
// 报送国资
|
||||
export const investmentProjectsProgressSubmitAPI = (id: string) => {
|
||||
return request({
|
||||
|
||||
@@ -27,3 +27,11 @@ export function getProjectExitPlanFeedbackByProcessInstanceId(processInstanceId:
|
||||
export function getProjectExitPlanFeedbackPage(data: paramsDataProjectExitPlanFeedback) {
|
||||
return request<feedbackResponseData>({ url: '/admin/projectExitPlan/feedbackPage', method: 'post', data })
|
||||
}
|
||||
// 根据模板id查询项目退出计划详情
|
||||
export function getProjectExitPlanByTemplateId(templateId: string) {
|
||||
return request({ url: '/admin/projectExitPlan/getByTemplateId?templateId=' + templateId, method: 'get' })
|
||||
}
|
||||
// 根据模板id查询项目退出计划反馈详情
|
||||
export function getProjectExitPlanFeedbackByTemplateId(templateId: string) {
|
||||
return request({ url: '/admin/projectExitPlan/getFeedbackByTemplateId?templateId=' + templateId, method: 'get' })
|
||||
}
|
||||
@@ -53,3 +53,11 @@ export const getPropertyRightsByProcessInstanceIdAPI = (processInstanceId: strin
|
||||
params: { processInstanceId },
|
||||
});
|
||||
}
|
||||
// 根据id查询流程详情
|
||||
export const getProcessInfoByIdAPI = (id: string | number) => {
|
||||
return request({
|
||||
url:'/admin/flow/form/processInfo',
|
||||
method: 'get',
|
||||
params: { id },
|
||||
})
|
||||
}
|
||||
@@ -16,7 +16,9 @@
|
||||
>
|
||||
<template v-if="imageUrl">
|
||||
<!-- 如果返回的是OSS 地址则不需要增加 baseURL -->
|
||||
<img :src="imageUrl.includes('http') ? imageUrl : baseURL + imageUrl" class="upload-image" />
|
||||
<el-image :src="imageUrl.includes('http') ? imageUrl : baseURL + imageUrl" class="upload-image" @error="()=>imageUrl=''">
|
||||
|
||||
</el-image>
|
||||
<div class="upload-handle" @click.stop>
|
||||
<div class="handle-icon" @click="editImg" v-if="!self_disabled">
|
||||
<el-icon :size="props.iconSize"><Edit /></el-icon>
|
||||
@@ -99,7 +101,7 @@ const formContext = inject(formContextKey, void 0);
|
||||
const formItemContext = inject(formItemContextKey, void 0);
|
||||
// 判断是否禁用上传和删除
|
||||
const self_disabled = computed(() => {
|
||||
return props.disabled || formContext?.disabled;
|
||||
return props.disabled || formContext?.disabled ;
|
||||
});
|
||||
|
||||
/**
|
||||
|
||||
@@ -5,18 +5,18 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="actualTotalIncome" :label="t('postInvestmentEvaluationForm.actualTotalRevenue')" required>
|
||||
<el-input v-model="submitFormData.actualTotalIncome"
|
||||
<el-input-number :controls="false" v-model="submitFormData.actualTotalIncome"
|
||||
:placeholder="t('postInvestmentEvaluationForm.inputPlaceholder')">
|
||||
<template #append>{{ t('postInvestmentEvaluationForm.unitSuffix') }}</template>
|
||||
</el-input>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="actualInvestmentGain" :label="t('postInvestmentEvaluationForm.actualInvestmentIncome')" required>
|
||||
<el-input v-model="submitFormData.actualInvestmentGain"
|
||||
<el-input-number :controls="false" v-model="submitFormData.actualInvestmentGain"
|
||||
:placeholder="t('postInvestmentEvaluationForm.inputPlaceholder')">
|
||||
<template #append>{{ t('postInvestmentEvaluationForm.unitSuffix') }}</template>
|
||||
</el-input>
|
||||
</el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -125,7 +125,7 @@
|
||||
<div class="info-row">
|
||||
<div class="info-label required">{{ t('postInvestmentEvaluationForm.basicInfo.projectDirection') }}
|
||||
</div>
|
||||
<div class="info-value required">{{ formData.projectInvestmentDirection || 'XXX' }}</div>
|
||||
<div class="info-value required">{{ initTypeString(projectDirectionOptions,formData.projectInvestmentDirection) }}</div>
|
||||
<div class="info-label required">{{ t('postInvestmentEvaluationForm.basicInfo.directionSubdivision')
|
||||
}}
|
||||
</div>
|
||||
@@ -143,7 +143,7 @@
|
||||
<div class="info-label required">{{
|
||||
t('postInvestmentEvaluationForm.basicInfo.majorInvestmentProject') }}
|
||||
</div>
|
||||
<div class="info-value required">{{ formData.majorInvestmentProjects || 'XXX' }}</div>
|
||||
<div class="info-value required"> {{ initTypeString(yesOrNo,formData.majorInvestmentProjects) }}</div>
|
||||
<div class="info-label required">{{ t('postInvestmentEvaluationForm.basicInfo.keyProject') }}</div>
|
||||
<div class="info-value required">{{ initTypeString(projectImportantOptions,formData.keyProject) || 'XXX' }}</div>
|
||||
</div>
|
||||
@@ -151,7 +151,7 @@
|
||||
<div class="info-label required">{{ t('postInvestmentEvaluationForm.basicInfo.isWithinMainBusiness')
|
||||
}}
|
||||
</div>
|
||||
<div class="info-value required">{{ formData.isMainBusiness || 'XXX' }}</div>
|
||||
<div class="info-value required">{{ initTypeString(yesOrNo,formData.isMainBusiness) }}</div>
|
||||
<div class="info-label required">{{ t('postInvestmentEvaluationForm.basicInfo.mainBusinessType') }}
|
||||
</div>
|
||||
<div class="info-value required">{{ initTypeString(mainBusinessOptions,formData.mainBusinessTypes) || 'XXX' }}</div>
|
||||
@@ -274,7 +274,7 @@
|
||||
<div class="info-value">{{ formData.decisionType || 'XXX' }}</div>
|
||||
<div class="info-label">{{
|
||||
t('postInvestmentEvaluationForm.decisionInfo.isProjectApprovalProcedureCompleted') }}</div>
|
||||
<div class="info-value">{{ formData.isProjectApprovalCompleted || 'XXX'
|
||||
<div class="info-value">{{ initTypeString(yesOrNo,formData.isProjectApprovalCompleted) || 'XXX'
|
||||
}}</div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
@@ -292,7 +292,7 @@
|
||||
<div class="info-label">{{
|
||||
t('postInvestmentEvaluationForm.decisionInfo.isDecisionProcedureCompleted')
|
||||
}}</div>
|
||||
<div class="info-value">{{ formData.isDecisionProcedureCompleted || 'XXX' }}</div>
|
||||
<div class="info-value">{{ initTypeString(yesOrNo,formData.isDecisionProcedureCompleted) || 'XXX' }}</div>
|
||||
<div class="info-label">{{
|
||||
t('postInvestmentEvaluationForm.decisionInfo.decisionProcedureDocumentNumber') }}</div>
|
||||
<div class="info-value">{{ formData.decisionProcedureFileNo || 'XXX' }}
|
||||
@@ -531,7 +531,8 @@ import {
|
||||
constructionNatureOptions, constructionStageOptions,
|
||||
Enums, investmentAreaOptions, investmentCategoryOptions, mainBusinessOptions, projectDirectionDetailsOptions,
|
||||
projectImportantOptions, projectNatureOptions,
|
||||
projectSourceOptions, projectStatusOptions, strategicIndustryOptions
|
||||
projectSourceOptions, projectStatusOptions, strategicIndustryOptions,projectDirectionOptions,
|
||||
yesOrNo
|
||||
} from '/@/hooks/enums';
|
||||
import { PostInvestmentEvaluation, ProjectInvestmentInfo } from '/@/views/invBid/postInvestmentEvaluation/interface/type';
|
||||
import { InvestmentProjectProgress } from '/@/views/invMid/progressReport/interface/type';
|
||||
@@ -648,7 +649,7 @@ const formData = reactive<ProjectInvestmentInfo>({ ...defaultForm });
|
||||
* 提交数据表单
|
||||
* */
|
||||
const submitFormData = ref<PostInvestmentEvaluation>({} as PostInvestmentEvaluation);
|
||||
const requiredRule = [{ required: true, message: `${t('该字段必填')}` },{validator: (rule: any, value:any,callback: (e?: Error) => void) => {
|
||||
const requiredRule = [{ required: true, message: `该字段必填` },{validator: (rule: any, value:any,callback: (e?: Error) => void) => {
|
||||
// 检查是否为空值
|
||||
if (value === '' || value === null || value === undefined) {
|
||||
callback()
|
||||
@@ -659,7 +660,7 @@ const requiredRule = [{ required: true, message: `${t('该字段必填')}` },{va
|
||||
if (!isNaN(numValue) && isFinite(numValue)) {
|
||||
callback()
|
||||
} else {
|
||||
callback(new Error(`${t('common.isNumber')}`))
|
||||
callback(new Error(`必须是一个数字`))
|
||||
}
|
||||
}}]
|
||||
const rules = ref<FormRules<PostInvestmentEvaluation>>({
|
||||
@@ -763,7 +764,7 @@ defineExpose({
|
||||
if (res){
|
||||
return submitFormData.value;
|
||||
}
|
||||
return false;
|
||||
return false
|
||||
},
|
||||
})
|
||||
const uploadChange = (type:number,_:any,data:any[],index?:number) => {
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
{{ detail.workUnit || '-' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :label="t('expertApply.table.level')">
|
||||
{{ levelLabel(detail.level) }}
|
||||
<span>{{ level.find((item:any) => item.value === detail.level)?.label || '--' }}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :label="t('expertLibrary.table.status')">
|
||||
<el-tag :type="['info', 'primary', 'success', 'danger'][detail.status]">{{ statusLabel(detail.status) }}</el-tag>
|
||||
@@ -82,6 +82,7 @@
|
||||
<script lang="ts" setup>
|
||||
import { ref, watch } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import {level} from "/@/hooks/enums";
|
||||
|
||||
const baseURL = import.meta.env.VITE_API_URL
|
||||
|
||||
|
||||
@@ -251,7 +251,7 @@
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.strategicEmergingIndustry')" required prop="strategicEmergingIndustry">
|
||||
<el-select v-model="formData.strategicEmergingIndustry" :placeholder="t('reserveRegistration.basicInfo.selectPlaceholder')" >
|
||||
<el-option v-for="item in yesOrNo" :key="item.value" :label="item.label" :value="item.value"/>
|
||||
<el-option v-for="item in strategicIndustryOptions" :key="item.value" :label="item.label" :value="item.value"/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -572,12 +572,12 @@
|
||||
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.decisionInfo.establishmentDocumentNumber')" :prop="formData.isCompleteEstablishmentProcedures === '1' ? 'establishmentDocumentNumber':''">
|
||||
<el-form-item :label="t('reserveRegistration.decisionInfo.establishmentDocumentNumber')" :prop="formData.isCompleteEstablishmentProcedures === '0' ? 'establishmentDocumentNumber':''">
|
||||
<el-input maxlength="255" v-model="formData.establishmentDocumentNumber" :placeholder="t('reserveRegistration.decisionInfo.inputPlaceholder')" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.decisionInfo.establishmentDocumentInfo')" :prop="formData.isCompleteEstablishmentProcedures === '1'?'establishmentDocumentInfo':''">
|
||||
<el-form-item :label="t('reserveRegistration.decisionInfo.establishmentDocumentInfo')" :prop="formData.isCompleteEstablishmentProcedures === '0'?'establishmentDocumentInfo':''">
|
||||
<el-input maxlength="255" v-model="formData.establishmentDocumentInfo" :placeholder="t('reserveRegistration.decisionInfo.inputPlaceholder')" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -597,14 +597,14 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.decisionInfo.decisionProgramDocumentNumber')" :prop="formData.isCompleteDecisionProcedures === '1'?'decisionProgramDocumentNumber' : ''">
|
||||
<el-form-item :label="t('reserveRegistration.decisionInfo.decisionProgramDocumentNumber')" :prop="formData.isCompleteDecisionProcedures === '0'?'decisionProgramDocumentNumber' : ''">
|
||||
<el-input maxlength="255" v-model="formData.decisionProgramDocumentNumber" :placeholder="t('reserveRegistration.decisionInfo.inputPlaceholder')" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="t('reserveRegistration.decisionInfo.decisionDocumentInfo')" :prop="formData.isCompleteDecisionProcedures === '1'?'decisionDocumentInfo':''">
|
||||
<el-form-item :label="t('reserveRegistration.decisionInfo.decisionDocumentInfo')" :prop="formData.isCompleteDecisionProcedures === '0'?'decisionDocumentInfo':''">
|
||||
<el-input maxlength="255" v-model="formData.decisionDocumentInfo" :placeholder="t('reserveRegistration.decisionInfo.inputPlaceholder')" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -646,7 +646,8 @@ import {
|
||||
projectSourceOptions,
|
||||
constructionNatureOptions,
|
||||
investmentAreaOptions, yesOrNo, decisionTypeOptions, projectImportantOptions, cooperationPartnerNatureOptions,
|
||||
cityStrategyOptions, mainBusinessOptions, projectDirectionDetailsOptions,projectDirectionOptions
|
||||
cityStrategyOptions, mainBusinessOptions, projectDirectionDetailsOptions, projectDirectionOptions,
|
||||
strategicIndustryOptions
|
||||
} from '/@/hooks/enums';
|
||||
import UserSelect from '/@/components/UserSelect/index.vue';
|
||||
import ProjectNameList from '/@/components/ProjectNameList/index.vue';
|
||||
|
||||
@@ -103,12 +103,12 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.keyProject')">
|
||||
{{ formData.keyProject === 'yes' ? '是' : '否' }}
|
||||
{{ projectImportantOptions.find(item => item.value === formData.keyProject)?.label || formData.keyProject || '--' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.majorInvestmentProject')">
|
||||
{{ formData.majorInvestmentProject || '--' }}
|
||||
{{ yesOrNo.find(item => item.value === formData.majorInvestmentProject)?.label || formData.majorInvestmentProject || '--' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -116,7 +116,7 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.withinMainBusiness')">
|
||||
{{ formData.withinMainBusiness || '--' }}
|
||||
{{ yesOrNo.find(item => item.value === formData.withinMainBusiness)?.label || formData.withinMainBusiness || '--' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -124,7 +124,7 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.mainBusinessType')">
|
||||
{{ formData.mainBusinessType || '--' }}
|
||||
{{ mainBusinessOptions.find(item => item.value === formData.mainBusinessType)?.label || formData.mainBusinessType || '--' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
@@ -138,12 +138,12 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.projectDirection')">
|
||||
{{ formData.projectDirection || '--' }}
|
||||
{{ projectDirectionOptions.find(item => item.value === formData.projectDirection)?.label || formData.projectDirection || '--' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.directionSubdivision')">
|
||||
{{ formData.directionSubdivision || '--' }}
|
||||
{{ projectDirectionDetailsOptions.find(item => item.value === formData.directionSubdivision)?.label || formData.directionSubdivision || '--' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -151,12 +151,12 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.strategicEmergingIndustry')">
|
||||
{{ formData.strategicEmergingIndustry || '--' }}
|
||||
{{ yesOrNo.find(item => item.value === formData.strategicEmergingIndustry)?.label || formData.strategicEmergingIndustry || '--' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.urbanStrategy')">
|
||||
{{ formData.urbanStrategy || '--' }}
|
||||
{{ cityStrategyOptions.find(item => item.value === formData.urbanStrategy)?.label || formData.urbanStrategy || '--' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -164,7 +164,7 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.isManufacturing')">
|
||||
{{ formData.isManufacturing || '--' }}
|
||||
{{ yesOrNo.find(item => item.value === formData.isManufacturing)?.label || formData.isManufacturing || '--' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
@@ -191,7 +191,7 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.basicInfo.isControllingShareholder')">
|
||||
{{ formData.isControllingShareholder || '--' }}
|
||||
{{ yesOrNo.find(item => item.value === formData.isControllingShareholder)?.label || formData.isControllingShareholder || '--' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
@@ -307,12 +307,12 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.decisionInfo.decisionType')">
|
||||
{{ formData.decisionType || '--' }}
|
||||
{{ decisionTypeOptions.find(item => item.value === formData.decisionType)?.label || formData.decisionType || '--' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.decisionInfo.isCompleteEstablishmentProcedures')">
|
||||
{{ formData.isCompleteEstablishmentProcedures === 'yes' ? '是' : '否' }}
|
||||
{{ yesOrNo.find(item => item.value === formData.isCompleteEstablishmentProcedures)?.label || formData.isCompleteEstablishmentProcedures || '--' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -333,7 +333,7 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="12">
|
||||
<el-form-item :label="t('reserveRegistration.decisionInfo.isCompleteDecisionProcedures')">
|
||||
{{ formData.isCompleteDecisionProcedures === 'yes' ? '是' : '否' }}
|
||||
{{ yesOrNo.find(item => item.value === formData.isCompleteDecisionProcedures)?.label || formData.isCompleteDecisionProcedures || '--' }}
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
@@ -369,14 +369,21 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { reactive, watch, ref } from 'vue';
|
||||
import { reactive, watch, ref, computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import {
|
||||
projectNatureOptions,
|
||||
investmentCategoryOptions,
|
||||
projectSourceOptions,
|
||||
constructionNatureOptions,
|
||||
investmentAreaOptions
|
||||
investmentAreaOptions,
|
||||
yesOrNo,
|
||||
decisionTypeOptions,
|
||||
projectImportantOptions,
|
||||
cityStrategyOptions,
|
||||
mainBusinessOptions,
|
||||
projectDirectionDetailsOptions,
|
||||
projectDirectionOptions
|
||||
} from '/@/hooks/enums'
|
||||
import type { ExternalCooperationUnitItemT } from '/@/api/investment/cooperationUnit'
|
||||
|
||||
@@ -433,7 +440,10 @@ export interface ProjectBasicInfoFormData {
|
||||
isCompleteDecisionProcedures: string;
|
||||
reviewOpinions: ReviewOpinions;
|
||||
processInstanceId: string;
|
||||
cooperationUnits?: ExternalCooperationUnitItemT[]
|
||||
cooperationUnits?: ExternalCooperationUnitItemT[];
|
||||
parentId?: string;
|
||||
status: number;
|
||||
deptId: string;
|
||||
}
|
||||
|
||||
export interface PartnerInfo {
|
||||
@@ -442,6 +452,7 @@ export interface PartnerInfo {
|
||||
nature: string;
|
||||
controller: string;
|
||||
share: string;
|
||||
cooperationController: string;
|
||||
}
|
||||
|
||||
export interface ReviewOpinions {
|
||||
@@ -451,9 +462,15 @@ export interface ReviewOpinions {
|
||||
submitUnitMainLeadershipOpinion: string;
|
||||
}
|
||||
|
||||
const props = defineProps<{
|
||||
const props = withDefaults(defineProps<{
|
||||
modelValue?: ProjectBasicInfoFormData;
|
||||
}>();
|
||||
mainTitle?: string;
|
||||
}>(), {
|
||||
mainTitle: ''
|
||||
});
|
||||
|
||||
const mainTitle = computed(() => props.mainTitle);
|
||||
watch(mainTitle, () => undefined);
|
||||
|
||||
const defaultPartnerRow: PartnerInfo = {
|
||||
id: '',
|
||||
@@ -519,6 +536,10 @@ const defaultFormData: ProjectBasicInfoFormData = {
|
||||
submitUnitLeadershipOpinion: '',
|
||||
submitUnitMainLeadershipOpinion: '',
|
||||
},
|
||||
parentId: '',
|
||||
status: 1,
|
||||
deptId: '',
|
||||
cooperationUnits: [],
|
||||
};
|
||||
|
||||
const formData = reactive<ProjectBasicInfoFormData>({ ...defaultFormData });
|
||||
@@ -570,6 +591,19 @@ watch(
|
||||
.form-row:last-of-type {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
/* 新增:确保el-form-item内容自动换行 */
|
||||
:deep(.el-form-item) {
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
overflow-wrap: break-word;
|
||||
}
|
||||
/* 对于表格中的内容也确保换行 */
|
||||
:deep(.el-table .cell) {
|
||||
word-wrap: break-word;
|
||||
word-break: break-all;
|
||||
overflow-wrap: break-word;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
:deep(.el-form-item__label) {
|
||||
font-weight: 500;
|
||||
@@ -614,4 +648,4 @@ watch(
|
||||
:deep(.el-table th .cell) {
|
||||
font-weight: 500;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
@@ -177,7 +177,7 @@
|
||||
</template>
|
||||
<el-select v-model="formData.entity.constructionNature"
|
||||
:placeholder="t('planApply.placeholder.select')" clearable>
|
||||
<el-option v-for="item in constructionNatureOptions" :key="item.value" :label="item.label"
|
||||
<el-option v-for="item in ziDian" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
@@ -687,6 +687,7 @@ import { ElMessage } from 'element-plus';
|
||||
import { FolderOpened } from '@element-plus/icons-vue';
|
||||
import LibrarySelect from '/@/views/invMid/projectLibrary/components/LibrarySelect.vue';
|
||||
import { selectTreeCompanyTree } from '/@/api/admin/dept';
|
||||
import {formatStartNodeShow} from "/@/api/flow/task";
|
||||
const { t } = useI18n();
|
||||
const useForm = ref<FormInstance | undefined>();
|
||||
const props = withDefaults(
|
||||
@@ -859,7 +860,7 @@ const defaultForm: ProjectPlanApplyFormData = {
|
||||
submitUnitLeadershipOpinion: '',
|
||||
submitUnitMainLeadershipOpinion: '',
|
||||
planImageQuota: '',
|
||||
deptId: 0,
|
||||
deptId:'0',
|
||||
processInstanceId: '',
|
||||
status: 0,
|
||||
},
|
||||
@@ -1103,6 +1104,14 @@ const projectNameFn = (row: any) => {
|
||||
Object.assign(formData.value.entity, mappedData);
|
||||
visible.value = false;
|
||||
};
|
||||
const initYiJR = (data:any[]) => {
|
||||
if (data.length < 0){
|
||||
return []
|
||||
}
|
||||
// formData.entity.submitUnitOpinion
|
||||
return data.map(item => item.userVoList)
|
||||
}
|
||||
const userYj = ref<any[]>([]);
|
||||
const handleLibrarySelect = (row: any) => {
|
||||
Object.assign(formData.value.entity, {
|
||||
...row,
|
||||
@@ -1110,6 +1119,13 @@ const handleLibrarySelect = (row: any) => {
|
||||
parentId: row.id,
|
||||
projectPreliminaryPlanAttachment: row.projectPreliminaryPlanAttachment ? JSON.parse(row.projectPreliminaryPlanAttachment) : [],
|
||||
});
|
||||
// processInstanceId
|
||||
const id:string = row.processInstanceId;
|
||||
formatStartNodeShow({
|
||||
processInstanceId: id,
|
||||
}).then((res:any)=>{
|
||||
userYj.value = initYiJR(res.data)
|
||||
})
|
||||
librarySelectVisible.value = false;
|
||||
};
|
||||
defineExpose({
|
||||
@@ -1159,6 +1175,30 @@ const ProjectDirectionDetailsOptionsEnums = computed(() => {
|
||||
const handleProjectMainUnitChange = (value: any) => {
|
||||
formData.value.entity.deptId = value.id
|
||||
}
|
||||
const ziDian = computed(() => {
|
||||
if (formData.value.entity.investmentCategory === '1'){
|
||||
return [
|
||||
{ label: '新开工', value: '1' },
|
||||
{ label: '续建', value: '2' },
|
||||
{ label: '加快前期', value: '3' },
|
||||
]
|
||||
}
|
||||
if(formData.value.entity.investmentCategory === '2'){
|
||||
return [{ label: '新设', value: '4' },
|
||||
{ label: '续投', value: '5' },
|
||||
{ label: '完成', value: '6' },
|
||||
{ label: '储备', value: '7' },]
|
||||
}
|
||||
if (formData.value.entity.investmentCategory === '99'){
|
||||
return [
|
||||
{ label: '新增', value: '8' },
|
||||
{ label: '续投', value: '5' },
|
||||
{ label: '完成', value: '6' },
|
||||
{ label: '储备', value: '7' },
|
||||
]
|
||||
}
|
||||
return []
|
||||
})
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
@@ -503,7 +503,7 @@ import {
|
||||
cityStrategyOptions, Enums
|
||||
} from "/@/hooks/enums"
|
||||
import type { FormInstance, FormRules } from 'element-plus';
|
||||
import FlowFormView from '/@/components/workbench/common/FlowFormView.vue'
|
||||
import FlowFormView from '/@/components/workbench/common/FlowFormView.vue';
|
||||
const { t } = useI18n();
|
||||
const useForm = ref<FormInstance | undefined>();
|
||||
const props = withDefaults(defineProps<{
|
||||
@@ -523,88 +523,88 @@ const emit = defineEmits<{
|
||||
}>();
|
||||
|
||||
const defaultForm: ProjectPlanApplyFormData = {
|
||||
entity: {
|
||||
id: null,
|
||||
projectName: '',
|
||||
projectNature: '',
|
||||
groupCompany: '',
|
||||
projectOwnerUnit: '',
|
||||
projectMainEntity: '',
|
||||
projectDepartment: '',
|
||||
investmentCategory: '',
|
||||
investmentArea: '',
|
||||
projectAddress: '',
|
||||
projectAddressDetail: '',
|
||||
projectInvestmentDirection: '',
|
||||
totalInvestment: '',
|
||||
investmentDirectionSegmentation: '',
|
||||
projectBackground: '',
|
||||
constructionNature: '',
|
||||
constructionStage: '',
|
||||
keyProject: '',
|
||||
isMainBusiness: '',
|
||||
mainBusinessTypes: '',
|
||||
mainBusinessCode: '',
|
||||
isManufacturingIndustry: '',
|
||||
isStuckIndustry: '',
|
||||
urbanStrategy: '',
|
||||
projectSource: '',
|
||||
majorInvestmentProjects: '',
|
||||
isStrategicEmergingIndustries: '',
|
||||
projectStartTime: '',
|
||||
projectEndTime: '',
|
||||
projectConstructionContent: '',
|
||||
planInvestmentYear: '',
|
||||
annualPlanTotal: '',
|
||||
annualPlanInvestment: '',
|
||||
planPaymentLimit: '',
|
||||
plannedImageAmount: '',
|
||||
ownedFunds: '',
|
||||
financialFunds: '',
|
||||
externalFunding: '',
|
||||
externalRaisedCapital: '',
|
||||
otherFunds: '',
|
||||
governmentFundSourceDesc: '',
|
||||
otherFundSourceDesc: '',
|
||||
projectTotalAmount: '',
|
||||
lastYearCompleted: '',
|
||||
ourInvestmentTotalAmount: '',
|
||||
ourLastYearCompleted: '',
|
||||
projectDesc: '',
|
||||
promotionPlan: '',
|
||||
projectPreliminaryPlan: '',
|
||||
projectPreliminaryPlanAttachment: '',
|
||||
attachments: [],
|
||||
remark: '',
|
||||
decisionType: '',
|
||||
isProjectApprovalCompleted: '',
|
||||
isDecisionProcedureCompleted: '',
|
||||
projectApprovalFileNo: '',
|
||||
projectApprovalFileInfo: '',
|
||||
decisionProcedureFileNo: '',
|
||||
decisionFileInfo: '',
|
||||
submitUnitOpinion: '',
|
||||
groupInvestmentDeptOpinion: '',
|
||||
submitUnitLeadershipOpinion: '',
|
||||
submitUnitMainLeadershipOpinion: '',
|
||||
planImageQuota: '',
|
||||
processInstanceId: '',
|
||||
status: 0,
|
||||
deptId: 0
|
||||
},
|
||||
investmentProjects: [
|
||||
{
|
||||
plannedInvestmentYear: '',
|
||||
plannedImageAmount: '',
|
||||
plannedPaymentAmount: '',
|
||||
selfFunding: '',
|
||||
externalFunding: '',
|
||||
fiscalFunding: '',
|
||||
otherFunding: '',
|
||||
fiscalFundingSource: '',
|
||||
otherFundingSource: '',
|
||||
},
|
||||
],
|
||||
entity:{
|
||||
id:null,
|
||||
projectName: '',
|
||||
projectNature: '',
|
||||
groupCompany: '',
|
||||
projectOwnerUnit: '',
|
||||
projectMainEntity: '',
|
||||
projectDepartment: '',
|
||||
investmentCategory: '',
|
||||
investmentArea: '',
|
||||
projectAddress: '',
|
||||
projectAddressDetail: '',
|
||||
projectInvestmentDirection: '',
|
||||
totalInvestment: '',
|
||||
investmentDirectionSegmentation: '',
|
||||
projectBackground: '',
|
||||
constructionNature: '',
|
||||
constructionStage: '',
|
||||
keyProject: '',
|
||||
isMainBusiness: '',
|
||||
mainBusinessTypes: '',
|
||||
mainBusinessCode: '',
|
||||
isManufacturingIndustry: '',
|
||||
isStuckIndustry: '',
|
||||
urbanStrategy: '',
|
||||
projectSource: '',
|
||||
majorInvestmentProjects: '',
|
||||
isStrategicEmergingIndustries: '',
|
||||
projectStartTime: '',
|
||||
projectEndTime: '',
|
||||
projectConstructionContent: '',
|
||||
planInvestmentYear: '',
|
||||
annualPlanTotal: '',
|
||||
annualPlanInvestment: '',
|
||||
planPaymentLimit: '',
|
||||
plannedImageAmount: '',
|
||||
ownedFunds: '',
|
||||
financialFunds: '',
|
||||
externalFunding: '',
|
||||
externalRaisedCapital: '',
|
||||
otherFunds: '',
|
||||
governmentFundSourceDesc: '',
|
||||
otherFundSourceDesc: '',
|
||||
projectTotalAmount: '',
|
||||
lastYearCompleted: '',
|
||||
ourInvestmentTotalAmount: '',
|
||||
ourLastYearCompleted: '',
|
||||
projectDesc: '',
|
||||
promotionPlan: '',
|
||||
projectPreliminaryPlan: '',
|
||||
projectPreliminaryPlanAttachment: '',
|
||||
attachments: [],
|
||||
remark: '',
|
||||
decisionType: '',
|
||||
isProjectApprovalCompleted: '',
|
||||
isDecisionProcedureCompleted: '',
|
||||
projectApprovalFileNo: '',
|
||||
projectApprovalFileInfo: '',
|
||||
decisionProcedureFileNo: '',
|
||||
decisionFileInfo: '',
|
||||
submitUnitOpinion: '',
|
||||
groupInvestmentDeptOpinion: '',
|
||||
submitUnitLeadershipOpinion: '',
|
||||
submitUnitMainLeadershipOpinion: '',
|
||||
planImageQuota:'',
|
||||
status:0,
|
||||
deptId:0,
|
||||
processInstanceId:'',
|
||||
},
|
||||
investmentProjects: [
|
||||
{
|
||||
plannedInvestmentYear: '',
|
||||
plannedImageAmount: '',
|
||||
plannedPaymentAmount: '',
|
||||
selfFunding: '',
|
||||
externalFunding: '',
|
||||
fiscalFunding: '',
|
||||
otherFunding: '',
|
||||
fiscalFundingSource: '',
|
||||
otherFundingSource: '',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const formData = ref<ProjectPlanApplyFormData>({ ...defaultForm });
|
||||
|
||||
@@ -195,13 +195,8 @@
|
||||
<el-row :gutter="20" class="form-row">
|
||||
<el-col :span="24">
|
||||
<el-form-item :label="t('progressReport.form.currentStageEvidenceMaterials')">
|
||||
<el-input v-model="formData.supportingDocuments"
|
||||
:placeholder="t('progressReport.form.selectAttachmentPlaceholder')" readonly>
|
||||
<template #append>
|
||||
<UploadFile :modelValue="formData.supportingDocuments" @change="uploadChange"
|
||||
:fileSize="20" type="simple" :limit="10" :isShowTip="false" />
|
||||
</template>
|
||||
</el-input>
|
||||
<UploadFile :data="formData.supportingDocuments" @change="uploadChange" :fileSize="20"
|
||||
type="simple" :limit="10" :isShowTip="false" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -628,9 +623,12 @@ defineExpose({
|
||||
}
|
||||
|
||||
.page-title {
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
position: relative;
|
||||
bottom: 20px;
|
||||
|
||||
}
|
||||
|
||||
.page-report-time {
|
||||
|
||||
@@ -41,12 +41,11 @@
|
||||
<LibrarySelect v-model="librarySelectVisible" @select="handleLibrarySelect" />
|
||||
</div>
|
||||
<!-- 输入框 -->
|
||||
<template v-else>
|
||||
<el-input-number v-if="field.type === 'number'" :length="field.length"
|
||||
v-model="basicInfoForm[field.key]" :controls="false" :min="0" />
|
||||
<el-input v-else maxlength="255" v-model="basicInfoForm[field.key]"
|
||||
:placeholder="t('mixedRegister.placeholder.input')" />
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-input-number v-if="field.type === 'number'" align="left" v-model="basicInfoForm[field.key]"
|
||||
:controls="false" :min="0"/>
|
||||
<el-input v-else maxlength="255" v-model="basicInfoForm[field.key]" :placeholder="t('mixedRegister.placeholder.input')" />
|
||||
</template>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -59,6 +58,7 @@
|
||||
import type { FormInstance } from 'element-plus';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import LibrarySelect from '/@/views/investment/mixedReformRegister/components/LibrarySelect.vue';
|
||||
import{ElInputNumber} from 'element-plus'
|
||||
const { t } = useI18n();
|
||||
|
||||
type FieldConfig = {
|
||||
@@ -66,7 +66,7 @@ type FieldConfig = {
|
||||
label: string;
|
||||
span?: number;
|
||||
type?: string;
|
||||
fieldProps?: any;
|
||||
fieldProps?: any; length?: number;
|
||||
};
|
||||
|
||||
const props = defineProps<{
|
||||
|
||||
@@ -30,6 +30,8 @@ import { useI18n } from 'vue-i18n';
|
||||
import { useRouter } from 'vue-router';
|
||||
import {queryMineStarted, queryMineTask} from "/@/api/flow/task";
|
||||
import {useMessage} from "/@/hooks/message";
|
||||
import request from "/@/utils/request";
|
||||
import {examineDict} from "/@/hooks/enums";
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
@@ -46,6 +48,7 @@ const emit = defineEmits<{
|
||||
const activeTab = ref('pending');
|
||||
const tableData = ref<any[]>([]);
|
||||
const loading = ref(false);
|
||||
|
||||
const pendingTotal = ref(0);
|
||||
/**
|
||||
* 根据任务名称判断类型
|
||||
|
||||
@@ -68,11 +68,11 @@
|
||||
{{ getStatusLabel(item.approveDesc?.startsWith('拒绝原因:') ? 'rejected' : 'approved') }}
|
||||
</div>
|
||||
<div class="record-opinion">
|
||||
{{ item.approveDesc }}
|
||||
<span>{{ item.approveDesc }}</span>
|
||||
</div>
|
||||
</template>
|
||||
<div class="record-opinion" v-else>
|
||||
发起审批
|
||||
<!-- 发起审批-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -508,7 +508,13 @@ onMounted(() => {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.record-status {
|
||||
.record-item .record-content .record-status {
|
||||
max-width: 100%;
|
||||
text-wrap: wrap;
|
||||
word-wrap: break-word; /* 允许长单词换行 */
|
||||
word-break: break-all; /* 打断所有单词 */
|
||||
white-space: pre-wrap; /* 保留空白符和换行符 */
|
||||
overflow-wrap: break-word; /* 确保超长内容能换行 */
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
line-height: 1;
|
||||
@@ -526,7 +532,15 @@ onMounted(() => {
|
||||
color: var(--el-text-color-regular);
|
||||
}
|
||||
|
||||
.record-opinion {
|
||||
.record-item .record-content .record-opinion {
|
||||
max-width: 100%;
|
||||
text-wrap: wrap;
|
||||
word-wrap: break-word; /* 允许长单词换行 */
|
||||
word-break: break-all; /* 打断所有单词 */
|
||||
white-space: pre-wrap; /* 保留空白符和换行符 */
|
||||
overflow-wrap: break-word; /* 确保超长内容能换行 */
|
||||
overflow-x: hidden;
|
||||
height: auto;
|
||||
color: var(--el-text-color-regular);
|
||||
font-size: 14px;
|
||||
line-height: 1.6;
|
||||
|
||||
@@ -82,8 +82,8 @@ const setShowAside = computed(() => {
|
||||
if(layout !== 'classic'){
|
||||
return true
|
||||
}
|
||||
// 首页和工作台不显示侧边栏
|
||||
return (route.path !== '/home' && route.path !== '/workbench/index')
|
||||
// 首页不显示侧边栏
|
||||
return route.path !== '/home'
|
||||
});
|
||||
|
||||
// 设置显示/隐藏 logo
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
</span>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item command="/workbench/index">{{ $t('user.dropdown1') }}</el-dropdown-item>
|
||||
<el-dropdown-item command="/home">{{ $t('user.dropdown1') }}</el-dropdown-item>
|
||||
<el-dropdown-item command="personal">{{ $t('user.dropdown2') }}</el-dropdown-item>
|
||||
<el-dropdown-item divided command="logOut">{{ $t('user.dropdown5') }}</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
</el-col>
|
||||
<el-col :span="12" class="mb20">
|
||||
<el-form-item :label="$t('sysuser.role')" prop="role">
|
||||
<el-select clearable placeholder="请选择角色" v-model="dataForm.roleId">
|
||||
<el-select clearable placeholder="请选择角色" v-model="dataForm.role" :multiple="true">
|
||||
<el-option :key="item.roleId" :label="item.roleName" :value="item.roleId" v-for="item in roleData" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
@@ -22,30 +22,30 @@
|
||||
</el-col>
|
||||
<el-col :span="24" class="mb20">
|
||||
<el-form-item label="用户名" prop="username">
|
||||
<el-input v-model="formData.username" clearable disabled></el-input>
|
||||
<el-input v-model="formData.name" clearable disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" class="mb20">
|
||||
<el-form-item label="手机" prop="phone">
|
||||
<el-input v-model="formData.phone" placeholder="请输入手机" clearable></el-input>
|
||||
<el-form-item label="账号" prop="phone">
|
||||
<el-input disabled v-model="formData.username" placeholder="请输入账号" clearable></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24" class="mb20">
|
||||
<el-form-item label="邮箱" prop="email">
|
||||
<el-input v-model="formData.email" placeholder="请输入邮箱" clearable></el-input>
|
||||
<el-form-item label="公司" prop="orgName">
|
||||
<el-input v-model="formData.orgName" placeholder="请输入公司" clearable></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" class="mb20">
|
||||
<el-form-item label="昵称" prop="nickname">
|
||||
<el-input v-model="formData.nickname" placeholder="请输入昵称" clearable></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24" class="mb20">
|
||||
<el-form-item label="姓名" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入姓名" clearable></el-input>
|
||||
<el-form-item label="部门" prop="deptName">
|
||||
<el-input v-model="formData.deptName" placeholder="请输入部门" clearable></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<!-- <el-col :span="24" class="mb20">-->
|
||||
<!-- <el-form-item label="姓名" prop="name">-->
|
||||
<!-- <el-input v-model="formData.name" placeholder="请输入姓名" clearable></el-input>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-col>-->
|
||||
<el-col :span="24" class="mb20">
|
||||
<el-form-item>
|
||||
<el-button type="primary" @click="handleSaveUser"> 更新个人信息 </el-button>
|
||||
@@ -154,9 +154,9 @@ const formData = ref({
|
||||
userId: '',
|
||||
username: '',
|
||||
name: '',
|
||||
email: '',
|
||||
orgName: '',
|
||||
avatar: '',
|
||||
nickname: '',
|
||||
deptName: '',
|
||||
wxDingUserid: '',
|
||||
wxCpUserid: '',
|
||||
phone: ('' as string) || undefined,
|
||||
@@ -177,9 +177,9 @@ const ruleForm = reactive({
|
||||
{ required: true, message: '手机号不能为空', trigger: 'blur' },
|
||||
{ validator: rule.validatePhone, trigger: 'blur' },
|
||||
],
|
||||
nickname: [{ validator: rule.overLength, trigger: 'blur' },{ required: true, message: '昵称不能为空', trigger: 'blur' }],
|
||||
email: [{ validator: rule.overLength, trigger: 'blur' },{ required: true, message: '邮箱不能为空', trigger: 'blur' }],
|
||||
name: [{ validator: rule.overLength, trigger: 'blur' },{ required: true, message: '姓名不能为空', trigger: 'blur' }],
|
||||
deptName: [{ validator: rule.overLength, trigger: 'blur' },{ required: true, message: '部门不能为空', trigger: 'blur' }],
|
||||
orgName: [{ validator: rule.overLength, trigger: 'blur' },{ required: true, message: '邮箱不能为空', trigger: 'blur' }],
|
||||
userId: [{ validator: rule.overLength, trigger: 'blur' },{ required: true, message: '姓名不能为空', trigger: 'blur' }],
|
||||
});
|
||||
const validatorPassword2 = (rule: any, value: any, callback: any) => {
|
||||
if (value !== passwordFormData.newpassword1) {
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
>
|
||||
<el-table-column type="index" :label="$t('projectReviewPolicy.index')" width="60" />
|
||||
|
||||
<el-table-column prop="projectType" :label="$t('projectReviewPolicy.projectType')">
|
||||
<el-table-column prop="projectType" label="投资类别">
|
||||
<template #default="{ row, $index }">
|
||||
<el-select
|
||||
v-model="row.projectType"
|
||||
@@ -30,7 +30,7 @@
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in projectTypeOptions"
|
||||
v-for="item in investmentCategoryOptions"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
@@ -109,6 +109,7 @@ import {
|
||||
deleteProjectReviewPolicy
|
||||
} from '/@/api/config/projectReviewPolicy';
|
||||
import { debounce } from 'lodash';
|
||||
import { investmentCategoryOptions } from '/@/hooks/enums';
|
||||
|
||||
const { t } = useI18n();
|
||||
const message = useMessage();
|
||||
|
||||
@@ -28,15 +28,15 @@
|
||||
<!-- Content Area -->
|
||||
<el-scrollbar class="h-[calc(100vh-20px)]">
|
||||
<step1 v-show="activeStep === 0" :groupId="paramGroupId" ref="step1Ref" />
|
||||
<step2 v-show="activeStep === 1" ref="step2Ref" />
|
||||
<step3 v-show="activeStep === 2" :nodeConfigObj="step3NodeConfig" ref="step3Ref" />
|
||||
<!-- <step2 v-show="activeStep === 1" ref="step2Ref" />-->
|
||||
<step3 v-show="activeStep === 1" :nodeConfigObj="step3NodeConfig" ref="step3Ref" />
|
||||
</el-scrollbar>
|
||||
|
||||
<!-- Validation Dialog -->
|
||||
<el-dialog v-model="validateDialogShow" :title="$t('flow.processCheck')">
|
||||
<el-steps :active="validateFlowStep" finish-status="success" simple class="mt-5">
|
||||
<el-step :title="$t('flow.basicInformation')" />
|
||||
<el-step :title="$t('flow.formDesign')" />
|
||||
<!-- <el-step :title="$t('flow.formDesign')" />-->
|
||||
<el-step :title="$t('flow.processDesign')" />
|
||||
</el-steps>
|
||||
|
||||
@@ -178,7 +178,7 @@ const checkStep1 = () => {
|
||||
validateFlowStep.value = 1;
|
||||
|
||||
setTimeout(function () {
|
||||
checkStep2();
|
||||
checkStep3();
|
||||
}, 500);
|
||||
} else {
|
||||
validatingShow.value = false;
|
||||
@@ -248,5 +248,7 @@ const submitFlow = () => {
|
||||
};
|
||||
|
||||
// Add steps data
|
||||
const steps = [{ title: 'flow.basicInformation' }, { title: 'flow.formDesign' }, { title: 'flow.processDesign' }];
|
||||
const steps = [{ title: 'flow.basicInformation' },
|
||||
// { title: 'flow.formDesign' },
|
||||
{ title: 'flow.processDesign' }];
|
||||
</script>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script setup lang="ts">
|
||||
import selectShow from '/@/components/OrgSelector/index.vue';
|
||||
|
||||
import uploadImg from "/@/components/Upload/Image.vue"
|
||||
interface UserVo {
|
||||
id: string;
|
||||
name: string;
|
||||
@@ -28,6 +28,7 @@ const props = defineProps<{
|
||||
nodeUser: Record<string, any>;
|
||||
row: FlowNode[];
|
||||
disableSelect: boolean;
|
||||
disabled: boolean;
|
||||
}>();
|
||||
|
||||
// Create a map to store active tabs for each node
|
||||
@@ -71,7 +72,7 @@ import { Check, Plus, Refresh } from '@element-plus/icons-vue';
|
||||
<div v-if="node.userVoList?.length" class="flex flex-wrap gap-2 mb-3">
|
||||
<div v-for="(item1, index1) in node.userVoList" :key="index1" class="w-10 text-center">
|
||||
<div class="flex flex-col items-center">
|
||||
<upload-img v-model:image-url="item1.avatar" width="30px" height="30px"></upload-img>
|
||||
<upload-img v-model:image-url="item1.avatar" width="30px" height="30px" :disabled="disabled"></upload-img>
|
||||
<div class="mt-1 w-full text-xs truncate">{{ item1.name }}</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -89,7 +90,7 @@ import { Check, Plus, Refresh } from '@element-plus/icons-vue';
|
||||
<span class="ml-1 text-gray-500">(添加了评论) {{ item1.showTime }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-3 text-sm bg-gray-50 rounded">{{ item1.approveDesc }}</div>
|
||||
<div class="p-3 text-sm bg-gray-50 rounded break-words break-all whitespace-pre-wrap">{{ item1.approveDesc }}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -28,6 +28,10 @@ let props = defineProps({
|
||||
type: Array,
|
||||
dafault: () => [],
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
});
|
||||
const row = ref([]);
|
||||
|
||||
@@ -88,5 +92,5 @@ defineExpose({ validate, formatSelectNodeUser });
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<flow-node-format :row="row" :node-user="nodeUser" :disableSelect="disableSelect" ref="flowNodeFormatRef"></flow-node-format>
|
||||
<flow-node-format :row="row" :node-user="nodeUser" :disableSelect="disableSelect" ref="flowNodeFormatRef" :disabled="disabled"></flow-node-format>
|
||||
</template>
|
||||
|
||||
@@ -8,27 +8,34 @@
|
||||
<main class="h5-body">
|
||||
<div class="card">
|
||||
<p class="lead">这是一个简单的移动端页面示例。</p>
|
||||
<p>{{code}}</p>
|
||||
<ul>
|
||||
<li>独立路由:/h5</li>
|
||||
<li>演示子页面:/h5/demo</li>
|
||||
{{ logStr }}
|
||||
<li>请求数据:{{JSON.stringify(resDat)}}</li>
|
||||
<li>登录数据:{{res}}</li>
|
||||
</ul>
|
||||
<div id="ww_login" class="w-[200px] h-[200px] border"></div>
|
||||
<el-button type="primary" size="large"><router-link to="/h5/demo">前往 H5 Demo</router-link></el-button>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- 桌面提示,仅在较宽屏幕下显示 -->
|
||||
<div class="desktop-warning">请用手机或缩小浏览器窗口预览移动端效果</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { onMounted, ref } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
import {loginWx} from "/@/api/h5/expert";
|
||||
// import * as ww from '@wecom/jssdk'
|
||||
|
||||
const route = useRoute()
|
||||
const logStr = ref('')
|
||||
|
||||
const code = ref('')
|
||||
const res = ref('')
|
||||
const resDat = ref<any>({})
|
||||
onMounted(() => {
|
||||
// alert(ww.SDK_VERSION)
|
||||
// 初始化登录组件
|
||||
@@ -62,6 +69,19 @@ onMounted(() => {
|
||||
// } catch (e) {
|
||||
// logStr.value = JSON.stringify(e)
|
||||
// }
|
||||
console.log('code',window.location)
|
||||
code.value = <string>route.query.code
|
||||
if (code.value){
|
||||
resDat.value = {
|
||||
code:code.value,
|
||||
grant_type: 'wechat_work',
|
||||
}
|
||||
loginWx(code.value).then(res => {
|
||||
res.value = res
|
||||
}).catch(err => {
|
||||
res.value = err
|
||||
})
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
@@ -59,16 +59,17 @@ const handleSubmit = async () => {
|
||||
return;
|
||||
}
|
||||
|
||||
const submitFormData = await formDataRef.value.validateRefFn();
|
||||
const submitFormData:PostInvestmentEvaluation|boolean = await formDataRef.value.validateRefFn();
|
||||
// 提交表单数据
|
||||
if (submitFormData) {
|
||||
submitFormData.attachmentUrl = JSON.stringify(submitFormData.attachmentUrl);
|
||||
submitFormData.deptId = formData.value.deptId;
|
||||
await addInvestmentEvaluation(submitFormData as PostInvestmentEvaluation);
|
||||
message.success(t('common.success'));
|
||||
message.success(t('成功'));
|
||||
router.back();
|
||||
}
|
||||
} catch (error: any) {
|
||||
message.error(error.msg || 'Submission failed');
|
||||
message.error(error.msg || '失败');
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -513,6 +513,9 @@ const createEmptyDetail = (): ProjectPlanApplyFormData => ({
|
||||
submitUnitLeadershipOpinion: '',
|
||||
submitUnitMainLeadershipOpinion: '',
|
||||
planImageQuota:'',
|
||||
deptId:0,
|
||||
status:0,
|
||||
processInstanceId:'',
|
||||
},
|
||||
investmentProjects: [
|
||||
{
|
||||
|
||||
@@ -40,6 +40,8 @@ export interface PostInvestmentEvaluation {
|
||||
|
||||
/** 创建时间 */
|
||||
createTime?: string; // date-time
|
||||
/**部门id*/
|
||||
deptId?: string; // integer(int64)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -225,6 +227,8 @@ export interface ProjectInvestmentInfo {
|
||||
|
||||
/** 投资项目进度实体列表 */
|
||||
investmentProjectsProgressEntities?: InvestmentProjectProgress[];
|
||||
/**部门id*/
|
||||
deptId?: string; // integer(int64)
|
||||
}
|
||||
export interface requestData {
|
||||
page: number,
|
||||
|
||||
@@ -76,12 +76,12 @@
|
||||
</el-col>
|
||||
<el-col :span="20">
|
||||
<el-form-item>
|
||||
<el-input v-model="formData.projectName" :placeholder="t('committeeReview.form.selectPlaceholder')" readonly>
|
||||
<template #append>
|
||||
<el-icon class="cursor-pointer interactive-icon" @click="handleSelect">
|
||||
<FolderOpened />
|
||||
</el-icon>
|
||||
</template>
|
||||
<el-input v-model="formData.projectName" :placeholder="t('committeeReview.form.inputPlaceholder')">
|
||||
<!-- <template #append>-->
|
||||
<!-- <el-icon class="cursor-pointer interactive-icon" @click="handleSelect">-->
|
||||
<!-- <FolderOpened />-->
|
||||
<!-- </el-icon>-->
|
||||
<!-- </template>-->
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@@ -177,10 +177,10 @@
|
||||
@select="handleProjectSelect"
|
||||
/>
|
||||
|
||||
<LibrarySelect
|
||||
v-model="librarySelectVisible"
|
||||
@select="handleLibrarySelect"
|
||||
/>
|
||||
<!-- <LibrarySelect-->
|
||||
<!-- v-model="librarySelectVisible"-->
|
||||
<!-- @select="handleLibrarySelect"-->
|
||||
<!-- />-->
|
||||
<templet-table-comom/>
|
||||
</div>
|
||||
</template>
|
||||
@@ -356,6 +356,8 @@ watch(()=>tmpId.value,async ()=>{
|
||||
const saveTemplateLoading = ref<boolean>(false);
|
||||
// 处理保存模板事件
|
||||
const handleSaveTemplate = async () => {
|
||||
const valid = await headerFormRef.value?.validate();
|
||||
if (!valid) return;
|
||||
if (saveTemplateLoading.value) return;
|
||||
try {
|
||||
const isUpdate = props.isUpdate;
|
||||
|
||||
@@ -10,10 +10,10 @@
|
||||
<el-button icon="Document" @click="handleSaveDraft" :loading="saveLoading">
|
||||
{{ t('planApply.actions.saveDraft') }}
|
||||
</el-button>
|
||||
<el-button icon="FolderOpened" @click="handleLoadTemplate">
|
||||
<el-button icon="FolderOpened" @click="handleLoadTemplate" :loading="folderLoading">
|
||||
{{ t('planApply.actions.loadTemplate') }}
|
||||
</el-button>
|
||||
<el-button icon="FolderAdd" @click="handleSaveTemplate">
|
||||
<el-button icon="FolderAdd" @click="handleSaveTemplate" :loading="saveTemplateLoading">
|
||||
{{ t('planApply.actions.saveTemplate') }}
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -46,15 +46,17 @@
|
||||
|
||||
<ProjectPlanApplyForm v-model="formData" :rules="formDataRules" ref="formDataRef"
|
||||
:is-update="props.isUpdate" />
|
||||
<templateTable/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { reactive, ref } from 'vue';
|
||||
import {computed, reactive, ref, watch} from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
import {
|
||||
getInvestmentProjectsPlanByTemplateId,
|
||||
investmentProjectsPlanAdd, investmentProjectsPlanGetById,
|
||||
investmentProjectsPlanUserDeptBelong
|
||||
} from '/@/api/investment/investmentManagement';
|
||||
@@ -62,11 +64,16 @@ import ProjectPlanApplyForm from '/@/components/investment/common/ProjectPlanApp
|
||||
import type { ProjectPlanApplyFormData } from '/@/components/investment/interface/types';
|
||||
import type { FormInstance, FormRules } from 'element-plus';
|
||||
import UploadFile from '/@/components/Upload/index.vue';
|
||||
import { useRoute } from 'vue-router';
|
||||
import { useRoute,useRouter } from 'vue-router';
|
||||
import { flowFn } from "/@/utils/flowFn";
|
||||
import { addFlowForm } from "/@/api/flow/flow";
|
||||
import { flowNameOptions } from "/@/hooks/enums";
|
||||
|
||||
import templateTable from "/@/components/templetTableComom/index.vue";
|
||||
import {templateStore} from "/@/stores/template"
|
||||
import {getPropertyRightsByIdAPI} from "/@/api/workbench/miOwLibr/ownershipCreate";
|
||||
import {addTemplate} from "/@/api/common";
|
||||
const temp = templateStore();
|
||||
const tempId = computed(()=>temp.temp_id)
|
||||
const props = defineProps({
|
||||
isUpdate: {
|
||||
type: Boolean,
|
||||
@@ -76,6 +83,7 @@ const props = defineProps({
|
||||
const { t } = useI18n();
|
||||
const message = useMessage();
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const submitLoading = ref(false);
|
||||
const headerForm = reactive<{ title: string, description: string, attachments: any[] | string }>({
|
||||
title: '',
|
||||
@@ -292,13 +300,14 @@ const handleInitiateApproval = async () => {
|
||||
entity: {
|
||||
...formData.value.entity,
|
||||
attachments: formData.value.entity.attachments ? JSON.stringify(formData.value.entity.attachments) : '',
|
||||
projectPreliminaryPlanAttachment: formData.value.entity.projectPreliminaryPlanAttachment ? JSON.stringify(formData.value.entity.projectPreliminaryPlanAttachment) : ''
|
||||
projectPreliminaryPlanAttachment: formData.value.entity.projectPreliminaryPlanAttachment
|
||||
}
|
||||
}
|
||||
investmentProjectsPlanAdd(params)
|
||||
.then(() => {
|
||||
submitLoading.value = false;
|
||||
message.success(t('planApply.messages.initiateApproval'));
|
||||
router.push('/flow/task/started')
|
||||
})
|
||||
.catch((err: any) => {
|
||||
submitLoading.value = false;
|
||||
@@ -322,14 +331,14 @@ const handleSaveDraft = async () => {
|
||||
const flowName = props.isUpdate ? 'investmentPlanUpdates' : 'investmentPlanRegistration';
|
||||
const flowNameObj = flowNameOptions.filter(item => item.label === flowName)[0]
|
||||
formData.value.entity.projectPreliminaryPlanAttachment = JSON.stringify(formData.value.entity.projectPreliminaryPlanAttachment);
|
||||
formData.value.entity.status = 1
|
||||
formData.value.entity.status = 0
|
||||
Object.assign(formData.value.entity, { flowType: flowNameObj.value })
|
||||
const params = {
|
||||
...formData.value,
|
||||
entity: {
|
||||
...formData.value.entity,
|
||||
attachments: formData.value.entity.attachments ? JSON.stringify(formData.value.entity.attachments) : '',
|
||||
projectPreliminaryPlanAttachment: formData.value.entity.projectPreliminaryPlanAttachment ? JSON.stringify(formData.value.entity.projectPreliminaryPlanAttachment) : ''
|
||||
projectPreliminaryPlanAttachment: formData.value.entity.projectPreliminaryPlanAttachment
|
||||
},
|
||||
temporaryStorage: {
|
||||
title: headerForm.title,
|
||||
@@ -349,13 +358,56 @@ const handleSaveDraft = async () => {
|
||||
console.log(error, 'error');
|
||||
}
|
||||
};
|
||||
|
||||
const folderLoading = ref(false);
|
||||
watch(()=>tempId.value,()=>{
|
||||
getInvestmentProjectsPlanByTemplateId(tempId.value).then(data => {
|
||||
Object.assign(formData, data.data);
|
||||
})
|
||||
})
|
||||
const handleLoadTemplate = () => {
|
||||
message.info(t('planApply.messages.loadTemplate'));
|
||||
const flowName = props.isUpdate ? 'investmentPlanUpdates' : 'investmentPlanRegistration';
|
||||
const flowNameObj = flowNameOptions.filter(item => item.label === flowName)[0]
|
||||
temp.changeTempShow(true,flowNameObj.value)
|
||||
};
|
||||
const saveTemplateLoading = ref(false);
|
||||
const handleSaveTemplate = async () => {
|
||||
// addTemplate()
|
||||
const headerValid = await headerFormRef.value?.validate().catch(() => false);
|
||||
if (!headerValid) return;
|
||||
|
||||
const handleSaveTemplate = () => {
|
||||
message.info(t('planApply.messages.saveTemplate'));
|
||||
const valid = await formDataRef.value?.validateForm().catch(() => false);
|
||||
if (!valid) return;
|
||||
saveTemplateLoading.value = true;
|
||||
try {
|
||||
const flowName = props.isUpdate ? 'investmentPlanUpdates' : 'investmentPlanRegistration';
|
||||
const flowNameObj = flowNameOptions.filter(item => item.label === flowName)[0]
|
||||
const templateId = await addTemplate({templateName:headerForm.title,
|
||||
templateType:flowNameObj.value,})
|
||||
formData.value.entity.projectPreliminaryPlanAttachment = JSON.stringify(formData.value.entity.projectPreliminaryPlanAttachment);
|
||||
formData.value.entity.status = 0
|
||||
Object.assign(formData.value.entity, { flowType: flowNameObj.value,templateId })
|
||||
const params = {
|
||||
...formData.value,
|
||||
entity: {
|
||||
...formData.value.entity,
|
||||
attachments: formData.value.entity.attachments ? JSON.stringify(formData.value.entity.attachments) : '',
|
||||
projectPreliminaryPlanAttachment: formData.value.entity.projectPreliminaryPlanAttachment
|
||||
},
|
||||
}
|
||||
investmentProjectsPlanAdd(params)
|
||||
.then(() => {
|
||||
saveLoading.value = false;
|
||||
message.success('保存代发成功');
|
||||
})
|
||||
.catch((err: any) => {
|
||||
saveLoading.value = false;
|
||||
message.error(err.msg);
|
||||
});
|
||||
}catch (error) {
|
||||
console.log(error, 'error');
|
||||
}finally {
|
||||
saveTemplateLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const handleViewWorkflow = () => {
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<el-button type="primary" icon="Check" :loading="submitLoading" @click="handleInitiateApproval">
|
||||
{{ t('progressReport.actions.initiateApproval') }}
|
||||
</el-button>
|
||||
<el-button icon="Document" @click="handleSaveDraft">
|
||||
<el-button icon="Document" @click="handleSaveDraft" :loading="saveLoading">
|
||||
{{ t('progressReport.actions.saveDraft') }}
|
||||
</el-button>
|
||||
<el-button icon="FolderOpened" @click="handleLoadTemplate">
|
||||
<el-button icon="FolderOpened" @click="handleLoadTemplate" :loading="templateLoading">
|
||||
{{ t('progressReport.actions.loadTemplate') }}
|
||||
</el-button>
|
||||
<el-button icon="FolderAdd" @click="handleSaveTemplate">
|
||||
@@ -45,26 +45,34 @@
|
||||
</el-row>
|
||||
|
||||
<ProjectProgressReportForm v-model="formData" :rules="formDataRef" ref="formRef" />
|
||||
<templateTable/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { reactive, ref } from 'vue';
|
||||
import templateTable from "/@/components/templetTableComom/index.vue"
|
||||
import {computed, reactive, ref, watch} from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
import ProjectProgressReportForm from '/@/components/investment/common/ProjectProgressReportForm.vue';
|
||||
import { InvestmentProjectProgress } from '/@/views/invMid/progressReport/interface/type';
|
||||
import { FormRules } from 'element-plus';
|
||||
import {
|
||||
addInvestmentProjectsProgressAPI,
|
||||
addInvestmentProjectsProgressAPI, getInvestmentProjectsProgressByTemplateIdAPI,
|
||||
getInvestmentProjectsProgressUserDeptBelongAPI
|
||||
} from '/@/api/investment/progressOfInvestmentProjects';
|
||||
import UploadFile from "/@/components/Upload/index.vue";
|
||||
import { flowFn } from "/@/utils/flowFn";
|
||||
import { addFlowForm } from "/@/api/flow/flow";
|
||||
import { flowNameOptions } from "/@/hooks/enums";
|
||||
import {templateStore} from "/@/stores/template"
|
||||
import {useRouter} from "vue-router";
|
||||
import {addTemplate} from "/@/api/common";
|
||||
import {getPropertyRightsByIdAPI} from "/@/api/workbench/miOwLibr/ownershipCreate";
|
||||
|
||||
const router = useRouter();
|
||||
const temp = templateStore();
|
||||
const { t } = useI18n();
|
||||
const message = useMessage();
|
||||
|
||||
@@ -171,6 +179,7 @@ const handleInitiateApproval = async () => {
|
||||
valid.processInstanceId = processInstanceId;
|
||||
valid.supportingDocuments = JSON.stringify(valid.supportingDocuments);
|
||||
valid.status = 1;
|
||||
valid.flowType = flowNameObj.value
|
||||
await addInvestmentProjectsProgressAPI(valid).then(() => {
|
||||
message.success(t('common.success'));
|
||||
}).finally(() => {
|
||||
@@ -183,17 +192,94 @@ const handleInitiateApproval = async () => {
|
||||
submitLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const handleSaveDraft = () => {
|
||||
message.info(t('progressReport.messages.saveDraft'));
|
||||
const saveLoading = ref(false)
|
||||
const handleSaveDraft = async () => {
|
||||
try {
|
||||
const headerValid = await headerFormRef.value?.validate().catch(() => false);
|
||||
if (!headerValid) {
|
||||
return;
|
||||
}
|
||||
const valid = await formRef.value?.validate();
|
||||
submitLoading.value = true;
|
||||
headerForm.attachments = JSON.stringify(headerForm.attachments);
|
||||
const processInstanceId = '';
|
||||
const flowNameObj = flowNameOptions.filter(item => item.label === 'projectProgressDeclaration')[0]
|
||||
await addFlowForm({
|
||||
title: headerForm.title,
|
||||
description: headerForm.description,
|
||||
attachments: headerForm.attachments,
|
||||
processInstanceId,
|
||||
flowType: flowNameObj.value
|
||||
})
|
||||
valid.processInstanceId = processInstanceId;
|
||||
valid.supportingDocuments = JSON.stringify(valid.supportingDocuments);
|
||||
valid.status = 0;
|
||||
valid.flowType = flowNameObj.value
|
||||
valid.temporaryStorage={
|
||||
businessType:flowNameObj.value,
|
||||
title: headerForm.title,
|
||||
}
|
||||
await addInvestmentProjectsProgressAPI(valid).then(() => {
|
||||
message.success(t('common.success'));
|
||||
}).finally(() => {
|
||||
saveLoading.value = false;
|
||||
}).catch((err: any) => {
|
||||
saveLoading.value = false;
|
||||
message.error(err.msg);
|
||||
});
|
||||
} catch (error) {
|
||||
saveLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const handleLoadTemplate = () => {
|
||||
message.info(t('progressReport.messages.loadTemplate'));
|
||||
const templateLoading = ref(false)
|
||||
const tempId = computed(()=>temp.temp_id)
|
||||
const handleLoadTemplate = async () => {
|
||||
const flowNameObj = flowNameOptions.filter(item => item.label === 'projectProgressDeclaration')[0]
|
||||
temp.changeTempShow(true,flowNameObj.value)
|
||||
};
|
||||
|
||||
const handleSaveTemplate = () => {
|
||||
message.info(t('progressReport.messages.saveTemplate'));
|
||||
watch(()=>tempId.value,()=>{
|
||||
getInvestmentProjectsProgressByTemplateIdAPI(tempId.value).then(data => {
|
||||
Object.assign(formData, data.data);
|
||||
})
|
||||
})
|
||||
const handleSaveTemplate = () => async () => {
|
||||
try {
|
||||
const headerValid = await headerFormRef.value?.validate().catch(() => false);
|
||||
if (!headerValid) {
|
||||
return;
|
||||
}
|
||||
const valid = await formRef.value?.validate();
|
||||
templateLoading.value = true;
|
||||
headerForm.attachments = JSON.stringify(headerForm.attachments);
|
||||
const processInstanceId = '';
|
||||
const flowNameObj = flowNameOptions.filter(item => item.label === 'projectProgressDeclaration')[0]
|
||||
await addFlowForm({
|
||||
title: headerForm.title,
|
||||
description: headerForm.description,
|
||||
attachments: headerForm.attachments,
|
||||
processInstanceId,
|
||||
flowType: flowNameObj.value
|
||||
})
|
||||
const {data: templateId} = await addTemplate({
|
||||
templateName:headerForm.title,
|
||||
templateType:flowNameObj.value,
|
||||
})
|
||||
valid.processInstanceId = processInstanceId;
|
||||
valid.supportingDocuments = JSON.stringify(valid.supportingDocuments);
|
||||
valid.status = 0;
|
||||
valid.flowType = flowNameObj.value
|
||||
valid.templateId = templateId
|
||||
await addInvestmentProjectsProgressAPI(valid).then(() => {
|
||||
message.success(t('common.success'));
|
||||
}).finally(() => {
|
||||
templateLoading.value = false;
|
||||
}).catch((err: any) => {
|
||||
templateLoading.value = false;
|
||||
message.error(err.msg);
|
||||
});
|
||||
} catch (error) {
|
||||
templateLoading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const handleViewWorkflow = () => {
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
<el-button type="primary" icon="Check" @click="handleInitiateApproval" :loading="submitLoading">
|
||||
{{ t('projectExitFeedback.actions.initiateApproval') }}
|
||||
</el-button>
|
||||
<el-button icon="Document" @click="handleSaveDraft">
|
||||
<el-button icon="Document" @click="handleSaveDraft" :loading="saveLoading">
|
||||
{{ t('projectExitFeedback.actions.saveDraft') }}
|
||||
</el-button>
|
||||
<el-button icon="FolderOpened" @click="handleLoadTemplate">
|
||||
{{ t('projectExitFeedback.actions.loadTemplate') }}
|
||||
</el-button>
|
||||
<el-button icon="FolderAdd" @click="handleSaveTemplate">
|
||||
<el-button icon="FolderAdd" @click="handleSaveTemplate" :loading="saveTemplateLoading">
|
||||
{{ t('projectExitFeedback.actions.saveTemplate') }}
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -44,25 +44,33 @@
|
||||
</el-row>
|
||||
|
||||
<ProjectExitFeedbackForm v-model="formData" />
|
||||
<templateTable/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { reactive, ref } from 'vue';
|
||||
import {computed, reactive, ref, watch} from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
import ProjectExitFeedbackForm from '/@/components/investment/common/ProjectExitFeedbackForm.vue';
|
||||
import { ProjectExitFeedback } from '/@/views/invMid/projectExitFeedback/interface/type';
|
||||
import { addProjectExitPlanFeedback } from "/@/api/investment/projectExitPlan";
|
||||
import {addProjectExitPlanFeedback, getProjectExitPlanFeedbackByTemplateId} from "/@/api/investment/projectExitPlan";
|
||||
import { ProjectTask } from "/@/views/invMid/projectExitPlan/interface/type";
|
||||
import UploadFile from "/@/components/Upload/index.vue";
|
||||
import { flowFn } from "/@/utils/flowFn";
|
||||
import { addFlowForm } from "/@/api/flow/flow";
|
||||
import { flowNameOptions } from "/@/hooks/enums";
|
||||
import templateTable from "/@/components/templetTableComom/index.vue"
|
||||
const { t } = useI18n();
|
||||
const message = useMessage();
|
||||
import {templateStore} from "/@/stores/template"
|
||||
import {useRouter} from "vue-router";
|
||||
import {getPropertyRightsByIdAPI} from "/@/api/workbench/miOwLibr/ownershipCreate";
|
||||
import {addTemplate} from "/@/api/common";
|
||||
|
||||
const temp = templateStore()
|
||||
const router = useRouter()
|
||||
const headerFormRef = ref<any>();
|
||||
const headerFormRules = {
|
||||
title: [{ required: true, message: '标题必填', trigger: ['blur', 'change'] }]
|
||||
@@ -127,17 +135,84 @@ const handleInitiateApproval = async () => {
|
||||
submitLoading.value = false;
|
||||
});
|
||||
};
|
||||
|
||||
const handleSaveDraft = () => {
|
||||
message.info(t('projectExitFeedback.messages.saveDraft'));
|
||||
const saveLoading = ref(false);
|
||||
const flowNameObj = flowNameOptions.filter(item => item.label === 'exitFeedback')[0]
|
||||
const handleSaveDraft = async () => {
|
||||
const headerValid = await headerFormRef.value?.validate().catch(() => false);
|
||||
if (!headerValid) {
|
||||
return;
|
||||
}
|
||||
if (!formData.value.projectId) {
|
||||
message.error('项目名称必填');
|
||||
return
|
||||
}
|
||||
saveLoading.value = true;
|
||||
const attachments = JSON.stringify(headerForm.attachments);
|
||||
const { processInstanceId } = { processInstanceId: ''};
|
||||
await addFlowForm({
|
||||
title: headerForm.title,
|
||||
description: headerForm.description,
|
||||
attachments,
|
||||
processInstanceId,
|
||||
flowType: flowNameObj.value
|
||||
})
|
||||
formData.value.processInstanceId = processInstanceId;
|
||||
const exitAttachment = JSON.stringify(formData.value.exitAttachment);
|
||||
const params = { ...formData.value, exitAttachment,temporaryStorage:{
|
||||
businessType:flowNameObj.value,
|
||||
title: headerForm.title,
|
||||
} } as ProjectTask;
|
||||
addProjectExitPlanFeedback(params).then(() => {
|
||||
message.success(t('common.success'));
|
||||
}).catch((err: any) => {
|
||||
message.error(err.msg);
|
||||
}).finally(() => {
|
||||
saveLoading.value = false;
|
||||
});
|
||||
};
|
||||
|
||||
const tempId = computed(()=>temp.temp_id)
|
||||
const handleLoadTemplate = () => {
|
||||
message.info(t('projectExitFeedback.messages.loadTemplate'));
|
||||
temp.changeTempShow(true,flowNameObj.value)
|
||||
};
|
||||
|
||||
const handleSaveTemplate = () => {
|
||||
message.info(t('projectExitFeedback.messages.saveTemplate'));
|
||||
watch(()=>tempId.value,()=>{
|
||||
getProjectExitPlanFeedbackByTemplateId(tempId.value).then(data => {
|
||||
Object.assign(formData, data.data);
|
||||
})
|
||||
})
|
||||
const saveTemplateLoading = ref(false);
|
||||
const handleSaveTemplate = async() => {
|
||||
const headerValid = await headerFormRef.value?.validate().catch(() => false);
|
||||
if (!headerValid) {
|
||||
return;
|
||||
}
|
||||
if (!formData.value.projectId) {
|
||||
message.error('项目名称必填');
|
||||
return
|
||||
}
|
||||
saveTemplateLoading.value = true;
|
||||
const attachments = JSON.stringify(headerForm.attachments);
|
||||
const { processInstanceId } = { processInstanceId: ''};
|
||||
await addFlowForm({
|
||||
title: headerForm.title,
|
||||
description: headerForm.description,
|
||||
attachments,
|
||||
processInstanceId,
|
||||
flowType: flowNameObj.value
|
||||
})
|
||||
const {data: templateId} = await addTemplate({
|
||||
templateName:headerForm.title,
|
||||
templateType:flowNameObj.value,
|
||||
})
|
||||
formData.value.processInstanceId = processInstanceId;
|
||||
const exitAttachment = JSON.stringify(formData.value.exitAttachment);
|
||||
const params = { ...formData.value, exitAttachment,templateId} as ProjectTask;
|
||||
addProjectExitPlanFeedback(params).then(() => {
|
||||
message.success(t('common.success'));
|
||||
}).catch((err: any) => {
|
||||
message.error(err.msg);
|
||||
}).finally(() => {
|
||||
saveTemplateLoading.value = false;
|
||||
});
|
||||
};
|
||||
|
||||
const handleViewWorkflow = () => {
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
<el-button type="primary" icon="Check" :loading="submitLoading" @click="handleInitiateApproval">
|
||||
{{ t('projectExitPlan.actions.initiateApproval') }}
|
||||
</el-button>
|
||||
<el-button icon="Document" @click="handleSaveDraft">
|
||||
<el-button icon="Document" @click="handleSaveDraft" :loading="saveLoading">
|
||||
{{ t('projectExitPlan.actions.saveDraft') }}
|
||||
</el-button>
|
||||
<el-button icon="FolderOpened" @click="handleLoadTemplate">
|
||||
{{ t('projectExitPlan.actions.loadTemplate') }}
|
||||
</el-button>
|
||||
<el-button icon="FolderAdd" @click="handleSaveTemplate">
|
||||
<el-button icon="FolderAdd" @click="handleSaveTemplate" :loading="saveTemplateLoading">
|
||||
{{ t('projectExitPlan.actions.saveTemplate') }}
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -45,26 +45,35 @@
|
||||
|
||||
<ProjectExitPlanForm v-model="formData" :rules="rules" ref="formDataRef" />
|
||||
</div>
|
||||
<templateTable/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { reactive, ref } from 'vue';
|
||||
import {computed, reactive, ref, watch} from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
|
||||
import type { ProjectTask } from '/@/views/invMid/projectExitPlan/interface/type';
|
||||
import ProjectExitPlanForm from '/@/components/investment/common/ProjectExitPlanForm.vue';
|
||||
import { FormRules } from 'element-plus';
|
||||
import { addProjectExitPlan } from '/@/api/investment/projectExitPlan';
|
||||
import {addProjectExitPlan, getProjectExitPlanByTemplateId} from '/@/api/investment/projectExitPlan';
|
||||
import UploadFile from "/@/components/Upload/index.vue";
|
||||
import { flowFn } from "/@/utils/flowFn";
|
||||
import { addFlowForm } from "/@/api/flow/flow";
|
||||
import { flowNameOptions } from "/@/hooks/enums";
|
||||
import {addTemplate} from "/@/api/common";
|
||||
import {getPropertyRightsByIdAPI} from "/@/api/workbench/miOwLibr/ownershipCreate";
|
||||
const formDataRef = ref<HTMLFormElement | null>()
|
||||
import templateTable from "/@/components/templetTableComom/index.vue"
|
||||
import {templateStore} from "/@/stores/template"
|
||||
import {useRouter} from "vue-router";
|
||||
|
||||
const { t } = useI18n();
|
||||
const message = useMessage();
|
||||
|
||||
const temp = templateStore()
|
||||
const router = useRouter()
|
||||
const headerFormRef = ref<any>();
|
||||
const headerFormRules = {
|
||||
title: [{ required: true, message: '标题必填', trigger: ['blur', 'change'] }]
|
||||
@@ -131,6 +140,7 @@ const handleInitiateApproval = async () => {
|
||||
formData.value.processInstanceId = processInstanceId;
|
||||
addProjectExitPlan(formData.value).then((res: any) => {
|
||||
useMessage().success(t('common.success'));
|
||||
router.push('/flow/task/started')
|
||||
}).catch((err: any) => {
|
||||
useMessage().error(err.msg);
|
||||
}).finally(() => {
|
||||
@@ -142,17 +152,90 @@ const handleInitiateApproval = async () => {
|
||||
}
|
||||
|
||||
};
|
||||
const saveLoading = ref<boolean>(false);
|
||||
const handleSaveDraft = async () => {
|
||||
try {
|
||||
const headerValid = await headerFormRef.value?.validate().catch(() => false);
|
||||
if (!headerValid) {
|
||||
return;
|
||||
}
|
||||
const valid = await formDataRef?.value?.validateRef();
|
||||
if (!valid) return;
|
||||
saveLoading.value = true;
|
||||
const attachments = JSON.stringify(headerForm.attachments);
|
||||
const flowNameObj = flowNameOptions.filter(item => item.label === 'exitPlan')[0]
|
||||
await addFlowForm({
|
||||
title: headerForm.title,
|
||||
description: headerForm.description,
|
||||
attachments,
|
||||
processInstanceId:'',
|
||||
flowType: flowNameObj.value
|
||||
})
|
||||
formData.value.processInstanceId = '';
|
||||
Object.assign(formData.value,{status:0,temporaryStorage:{
|
||||
businessType:flowNameObj.value,
|
||||
title: headerForm.title,
|
||||
}})
|
||||
addProjectExitPlan(formData.value).then(() => {
|
||||
useMessage().success(t('common.success'));
|
||||
}).catch((err: any) => {
|
||||
useMessage().error(err.msg);
|
||||
}).finally(() => {
|
||||
saveLoading.value = false;
|
||||
});
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
saveLoading.value = false;
|
||||
}
|
||||
|
||||
const handleSaveDraft = () => {
|
||||
message.info(t('projectExitPlan.messages.saveDraft'));
|
||||
};
|
||||
|
||||
const tempId = computed(()=>temp.temp_id)
|
||||
watch(()=>tempId.value,()=>{
|
||||
getProjectExitPlanByTemplateId(tempId.value).then(data => {
|
||||
Object.assign(formData, data.data);
|
||||
})
|
||||
})
|
||||
const handleLoadTemplate = () => {
|
||||
message.info(t('projectExitPlan.messages.loadTemplate'));
|
||||
const flowNameObj = flowNameOptions.filter(item => item.label === 'exitPlan')[0]
|
||||
temp.changeTempShow(true,flowNameObj.value)
|
||||
};
|
||||
const saveTemplateLoading = ref<boolean>(false);
|
||||
const handleSaveTemplate = async () => {
|
||||
try {
|
||||
const headerValid = await headerFormRef.value?.validate().catch(() => false);
|
||||
if (!headerValid) {
|
||||
return;
|
||||
}
|
||||
const valid = await formDataRef?.value?.validateRef();
|
||||
if (!valid) return;
|
||||
saveTemplateLoading.value = true;
|
||||
const attachments = JSON.stringify(headerForm.attachments);
|
||||
const flowNameObj = flowNameOptions.filter(item => item.label === 'exitPlan')[0]
|
||||
await addFlowForm({
|
||||
title: headerForm.title,
|
||||
description: headerForm.description,
|
||||
attachments,
|
||||
processInstanceId:'',
|
||||
flowType: flowNameObj.value
|
||||
})
|
||||
const {data: templateId} = await addTemplate({
|
||||
templateName:headerForm.title,
|
||||
templateType:flowNameObj.value,
|
||||
})
|
||||
formData.value.processInstanceId = '';
|
||||
Object.assign(formData.value,{status:0,templateId})
|
||||
addProjectExitPlan(formData.value).then(() => {
|
||||
useMessage().success(t('common.success'));
|
||||
}).catch((err: any) => {
|
||||
useMessage().error(err.msg);
|
||||
}).finally(() => {
|
||||
saveTemplateLoading.value = false;
|
||||
});
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
saveTemplateLoading.value = false;
|
||||
}
|
||||
|
||||
const handleSaveTemplate = () => {
|
||||
message.info(t('projectExitPlan.messages.saveTemplate'));
|
||||
};
|
||||
|
||||
const handleViewWorkflow = () => {
|
||||
|
||||
@@ -293,7 +293,7 @@ import {
|
||||
} from '/@/api/investment/cooperationUnit';
|
||||
import UnitNameSelectDialog from '/@/components/investment/UnitNameSelectDialog.vue';
|
||||
import SelectCompanyDialog from '/@/components/investment/SelectCompanyDialog.vue';
|
||||
import {useMessage,} from '/@/hooks/message';
|
||||
import {useRouter} from 'vue-router';
|
||||
import {useI18n} from 'vue-i18n';
|
||||
import {useUserInfo} from '/@/stores/userInfo';
|
||||
import {formatDate} from '/@/utils/formatTime';
|
||||
@@ -305,6 +305,9 @@ import {getExternalCooperationUnitsUserDeptBelong,addTemplate} from "/@/api/comm
|
||||
import {templateStore} from "/@/stores/template";
|
||||
import type {FormInstance, FormRules} from "element-plus";
|
||||
import { selectTreeCompanyTree} from "/@/api/admin/dept";
|
||||
|
||||
|
||||
const router = useRouter();
|
||||
const temp = templateStore();
|
||||
const props = defineProps({
|
||||
isUpdate: {
|
||||
@@ -442,6 +445,7 @@ const handleInitiateApproval = async () => {
|
||||
};
|
||||
await addExternalCooperationUnitAPI(payload);
|
||||
useMessage().success('成功');
|
||||
await router.push('/flow/task/started')
|
||||
} catch (error: any) {
|
||||
useMessage().error(error?.msg || error?.message || '操作失败');
|
||||
} finally {
|
||||
@@ -774,7 +778,7 @@ onMounted(() => {
|
||||
const projectMainEntityOptions = ref([]);
|
||||
const getDeptTree = async () => {
|
||||
const res = await selectTreeCompanyTree();
|
||||
projectMainEntityOptions.value = res.data || [];
|
||||
projectMainEntityOptions.value = res.data?.filter((item:any) => item.id !== '-7283586818552608318');
|
||||
};
|
||||
getDeptTree()
|
||||
watch(editId, (id) => {
|
||||
|
||||
@@ -164,7 +164,7 @@
|
||||
<SelectExpertDialog v-model:visible="expertDialogVisible" @confirm="onExpertSelected" />
|
||||
<!-- <UserSelect v-model:visible="userSelectVisible" @ok="handleUserSelectOk" /> -->
|
||||
<template-table-common />
|
||||
|
||||
<templateTable/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -175,6 +175,7 @@ import { useI18n } from 'vue-i18n';
|
||||
import { formatDate } from '/@/utils/formatTime';
|
||||
import { useUserInfo } from '/@/stores/userInfo';
|
||||
import { useMessage } from '/@/hooks/message';
|
||||
import templateTable from "/@/components/templetTableComom/index.vue";
|
||||
import SelectExpertDialog from '/@/components/investment/SelectExpertDialog.vue';
|
||||
import {addExpertInformationAPI, getExpertInformationByTemplateIdAPI} from '/@/api/investment/cooperationUnit';
|
||||
import {flowFn} from "/@/utils/flowFn";
|
||||
@@ -182,6 +183,7 @@ import { addFlowForm } from '/@/api/flow/flow';
|
||||
import {flowNameOptions, level} from '/@/hooks/enums';
|
||||
import {FormInstance} from "element-plus";
|
||||
import {addTemplate} from "/@/api/common";
|
||||
import {useRouter} from "vue-router";
|
||||
// import UserSelect from '/@/components/UserSelect/index.vue'
|
||||
import templateTableCommon from "/@/components/templetTableComom/index.vue"
|
||||
import {templateStore} from "/@/stores/template"
|
||||
@@ -351,7 +353,7 @@ const verifyTableFields = () => {
|
||||
// const handleUserSelectOk = (user: any) => {
|
||||
// console.log(user)
|
||||
// }
|
||||
|
||||
const router = useRouter();
|
||||
const handleInitiateApproval = async () => {
|
||||
if (submitLoading.value) return;
|
||||
const r = await headerFormRef.value?.validate();
|
||||
@@ -382,6 +384,7 @@ const handleInitiateApproval = async () => {
|
||||
};
|
||||
await addExpertInformationAPI(payload);
|
||||
useMessage().success('成功');
|
||||
await router.push('/flow/task/started')
|
||||
} catch (error: any) {
|
||||
useMessage().error(error?.msg || error?.message || '操作失败');
|
||||
} finally {
|
||||
@@ -429,7 +432,7 @@ const handleLoadTemplate = () => {
|
||||
const handleSaveTemplate = async () => {
|
||||
if (submitLoading.value) return;
|
||||
const r = await headerFormRef.value?.validate();
|
||||
if (!verifyTableFields()) {
|
||||
if (!verifyTableFields()&& !r) {
|
||||
useMessage().warning('请完成表格必填项');
|
||||
return
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
<el-table-column :label="t('expertLibrary.table.level')" prop="level" min-width="100"
|
||||
show-overflow-tooltip>
|
||||
<template #default="{ row }">
|
||||
<span>{{ levelLabel(row.level) }}</span>
|
||||
<span>{{ level.find((item:any) => item.value === row.level)?.label || '--' }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('expertApply.table.externalStatus')" prop="externalStatus" min-width="120"
|
||||
@@ -60,6 +60,7 @@ import ExpertDetailDialog from '/@/components/investment/ExpertDetailDialog.vue'
|
||||
import { useUserInfo } from '/@/stores/userInfo';
|
||||
import { dayjs } from 'element-plus';
|
||||
import FlowFormView from '/@/components/workbench/common/FlowFormView.vue';
|
||||
import {level} from "/@/hooks/enums";
|
||||
|
||||
const { t } = useI18n();
|
||||
const route = useRoute()
|
||||
|
||||
@@ -137,11 +137,11 @@ const instructionFields = computed<Array<{ key: InstructionFieldKey; label: stri
|
||||
]);
|
||||
|
||||
const basicInfoFields = computed<Array<{ key: BasicFieldKey; label: string }>>(() => [
|
||||
{ key: 'groupBelonging', label: t('mixedRegister.basicFields.groupName') },
|
||||
{ key: 'projectYear', label: t('mixedRegister.basicFields.year'), type: 'year', fieldProps: { valueFormat: 'YYYY' } },
|
||||
{ key: 'projectName', label: t('mixedRegister.basicFields.projectName') },
|
||||
{ key: 'implementEnterprise', label: t('mixedRegister.basicFields.companyFullName') },
|
||||
{ key: 'enterpriseCreditCode', label: t('mixedRegister.basicFields.creditCode') },
|
||||
{key: 'groupBelonging', label: t('mixedRegister.basicFields.groupName')},
|
||||
{key: 'projectYear', label: t('mixedRegister.basicFields.year'),type:'number',length:4},
|
||||
{key: 'projectName', label: t('mixedRegister.basicFields.projectName')},
|
||||
{key: 'implementEnterprise', label: t('mixedRegister.basicFields.companyFullName')},
|
||||
{key: 'enterpriseCreditCode', label: t('mixedRegister.basicFields.creditCode')},
|
||||
{
|
||||
key: 'partnerNature',
|
||||
label: t('mixedRegister.basicFields.partnerNature'),
|
||||
|
||||
@@ -74,7 +74,9 @@ import {flowNameOptions} from '/@/hooks/enums';
|
||||
import {addTemplate, getUserDeptBelong} from "/@/api/common";
|
||||
import {templateStore} from "/@/stores/template";
|
||||
import type {FormInstance, FormRules} from "element-plus";
|
||||
import {useRouter} from "vue-router";
|
||||
|
||||
const router = useRouter();
|
||||
const temp = templateStore();
|
||||
const props = defineProps({
|
||||
isUpdate: {
|
||||
@@ -308,6 +310,7 @@ const handleInitiateApproval = async () => {
|
||||
message.success(t('common.success'));
|
||||
resetHeaderForm();
|
||||
resetProjectForm();
|
||||
await router.push('/flow/task/started')
|
||||
}
|
||||
} catch (error: any) {
|
||||
message.error(error?.msg || error?.message || t('common.fail'));
|
||||
|
||||
@@ -667,6 +667,7 @@ import {addTemplate, getPropertyRightsUserDeptBelong} from "/@/api/common";
|
||||
import {FormInstance} from "element-plus";
|
||||
import templateTable from "/@/components/templetTableComom/index.vue"
|
||||
import {templateStore} from "/@/stores/template"
|
||||
import {useRouter} from "vue-router";
|
||||
|
||||
const temp = templateStore()
|
||||
const props = defineProps({
|
||||
@@ -1079,6 +1080,7 @@ const scrollToSection = (id: TabId) => {
|
||||
};
|
||||
|
||||
const submitting = ref(false)
|
||||
const router = useRouter()
|
||||
const handleSubmit = async () => {
|
||||
const re = await headerFormRef.value?.validate()
|
||||
if (!re) return
|
||||
@@ -1116,6 +1118,7 @@ const handleSubmit = async () => {
|
||||
const res = await addPropertyRightsAPI(params)
|
||||
if (res.ok) {
|
||||
message.success(t('common.success'));
|
||||
await router.push('/flow/task/started')
|
||||
} else {
|
||||
message.error(res.msg)
|
||||
}
|
||||
@@ -1168,7 +1171,6 @@ const handleLoadTemplate = () => {
|
||||
const flowName = props.isUpdate ? 'propertyRightsUpdate' : 'propertyRightsRegistration'
|
||||
const flowNameObj = flowNameOptions.filter(item => item.label === flowName)[0];
|
||||
temp.changeTempShow(true,flowNameObj.value)
|
||||
message.info(t('ownershipCreate.messages.loadTemplate'));
|
||||
};
|
||||
|
||||
watch(()=>tempId.value,()=>{
|
||||
|
||||
@@ -62,11 +62,11 @@
|
||||
</el-table-column>
|
||||
<el-table-column prop="status" :label="t('workbenchPage.pending.table.status')" min-width="140">
|
||||
<template #default="scope">
|
||||
<el-tag v-if="scope.row.status == 1" type="primary">待审批</el-tag>
|
||||
<el-tag v-if="scope.row.status == 1" type="primary">进行中</el-tag>
|
||||
<el-tag v-else type="success">已结束</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column :label="t('workbenchPage.pending.table.actions')" width="120" fixed="right">
|
||||
<el-table-column label="查看" width="120" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<el-button link type="primary" @click="handleView(row)">
|
||||
{{ t('workbenchPage.pending.actions.view') }}
|
||||
@@ -80,6 +80,27 @@
|
||||
<pagination @current-change="currentChangeHandle" @size-change="sizeChangeHandle" v-bind="state.pagination"></pagination>
|
||||
</el-card>
|
||||
</div>
|
||||
<!-- <el-dialog v-model="visible" width="80%" title="流程节点">-->
|
||||
<!-- <flow-node-format :selectUserNodeId="flowUserData.root.map(item => item.id)" :flow-id="flowIdCon" ref="flowNodeFormatRef"></flow-node-format>-->
|
||||
<!-- </el-dialog>-->
|
||||
<!-- v-if="visible" 确保关闭时销毁组件 -->
|
||||
<el-drawer v-model="visible" v-if="visible" direction="rtl" size="600px">
|
||||
<template #header>
|
||||
<h3>{{ currentData?.name }}</h3>
|
||||
</template>
|
||||
<template #default>
|
||||
<el-card class="box-card">
|
||||
<FormCreate :rule="rule" v-model="formData" v-model:api="fApi" />
|
||||
</el-card>
|
||||
<flow-node-format
|
||||
:disableSelect="true"
|
||||
:processInstanceId="currentData.processInstanceId"
|
||||
:flow-id="currentData.flowId"
|
||||
ref="flowNodeFormatRef"
|
||||
:disabled="true"
|
||||
></flow-node-format>
|
||||
</template>
|
||||
</el-drawer>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -91,13 +112,15 @@ import { queryMineStarted } from '/@/api/flow/task';
|
||||
import { BasicTableProps, useTable } from '/@/hooks/table';
|
||||
import { useUserInfo } from '/@/stores/userInfo';
|
||||
import { flowNameOptions } from '/@/hooks/enums';
|
||||
import { getProcessInfoByIdAPI } from '/@/api/workbench/miOwLibr/ownershipCreate';
|
||||
import FlowNodeFormat from "/@/views/flow/form/tools/FlowNodeFormatData.vue";
|
||||
import FormCreate from "/@/views/flow/workflow/components/FormCreate.vue";
|
||||
|
||||
const { t } = useI18n();
|
||||
const message = useMessage();
|
||||
const loading = ref(false);
|
||||
const stores = useUserInfo();
|
||||
const { userInfos } = storeToRefs(stores);
|
||||
|
||||
const state: BasicTableProps = reactive<BasicTableProps>({
|
||||
pageList: queryMineStarted,
|
||||
queryForm: {
|
||||
@@ -122,9 +145,18 @@ const handleSearch = () => {
|
||||
state.queryForm.title = keyword.value
|
||||
getDataList(true)
|
||||
};
|
||||
|
||||
const currentData = ref<any>(null);
|
||||
const visible = ref(false);
|
||||
/**查看流程*/
|
||||
const handleView = (row: any) => {
|
||||
message.info(`${row.title} ${t('workbenchPage.pending.messages.viewPlaceholder')}`);
|
||||
getProcessInfoByIdAPI(row.id).then(res =>{
|
||||
currentData.value = {
|
||||
name: res.data.name,
|
||||
processInstanceId: res.data.processInstanceId,
|
||||
flowId: res.data.flowId
|
||||
}
|
||||
visible.value = true
|
||||
})
|
||||
};
|
||||
|
||||
const handleReview = (row: any) => {
|
||||
|
||||
Reference in New Issue
Block a user