组件相关-hrm

pull/781/head
zy 2025-05-23 10:18:35 +08:00
parent 011739879b
commit 39e49121e2
41 changed files with 2065 additions and 1153 deletions

View File

@ -47,6 +47,20 @@ export const getBusinessForm = async (params) => {
}) })
} }
// 保存工作流的业务表单定义
export const saveBusinessForm = async (data) => {
return await request.put({
url: 'bpm/form-visible/update', data
})
}
// 获取工作流的业务表单权限
export const getLimitForm = async (params) => {
return await request.get({
url: 'bpm/form-visible/getFormVisible', params
})
}
// 获得工作流的表单定义分页 // 获得工作流的表单定义分页
export const getFormPage = async (params) => { export const getFormPage = async (params) => {
return await request.get({ return await request.get({

View File

@ -63,7 +63,6 @@ let selectComId = ref('popper' + (Math.random().toFixed(5) * 100000))
const vElSelectLoadmore = { const vElSelectLoadmore = {
mounted(el, binding) { mounted(el, binding) {
selectRef.value = el selectRef.value = el
console.log('%csrc/components/SelectCustomer/src/index.vue:63 el,444', 'color: #007acc;', el,444);
const scrollHandler = function() { const scrollHandler = function() {
if (this.scrollHeight - this.scrollTop <= this.clientHeight + 20) { if (this.scrollHeight - this.scrollTop <= this.clientHeight + 20) {
binding.value && binding.value() binding.value && binding.value()
@ -71,10 +70,8 @@ const vElSelectLoadmore = {
} }
nextTick(() => { nextTick(() => {
// console.log('%csrc/components/SelectCustomer/src/index.vue:75 selectComId.value', 'color: #007acc;', selectComId.value);
// const selectDom = document.querySelector('.event-select-poper .el-select-dropdown__wrap') // const selectDom = document.querySelector('.event-select-poper .el-select-dropdown__wrap')
const selectDom = document.querySelector(`.${selectComId.value} .el-select-dropdown__wrap`) const selectDom = document.querySelector(`.${selectComId.value} .el-select-dropdown__wrap`)
console.log('%csrc/components/SelectCustomer/src/index.vue:77 object', 'color: #007acc;', selectDom);
if (selectDom) { if (selectDom) {
// //
selectDom.removeEventListener('scroll', scrollHandler) selectDom.removeEventListener('scroll', scrollHandler)
@ -86,7 +83,7 @@ const vElSelectLoadmore = {
}) })
}, },
// beforeUnmount(el) { // beforeUnmount(el) {
// const selectDom = document.querySelector('.event-select-poper .el-select-dropdown__wrap') // const selectDom = document.querySelector(`.${selectComId.value} .el-select-dropdown__wrap`)
// if (selectDom && el._scrollHandler) { // if (selectDom && el._scrollHandler) {
// selectDom.removeEventListener('scroll', el._scrollHandler) // selectDom.removeEventListener('scroll', el._scrollHandler)
// } // }

View File

@ -23,7 +23,7 @@
<div class="divide-line"></div> <div class="divide-line"></div>
</div> </div>
</template> </template>
<el-tabs type="border-card" v-model="activeTabName"> <el-tabs type="border-card" v-model="activeTabName" @tab-click="tabClick">
<el-tab-pane label="抄送人" name="user"> <el-tab-pane label="抄送人" name="user">
<div> <div>
<el-form ref="formRef" :model="configForm" label-position="top" :rules="formRules"> <el-form ref="formRef" :model="configForm" label-position="top" :rules="formRules">
@ -189,6 +189,55 @@
</el-form> </el-form>
</div> </div>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="表单字段权限" name="businessFields" v-if="formType === 20">
<div class="field-setting-pane">
<div class="field-setting-desc">字段权限</div>
<div class="field-permit-title">
<div class="setting-title-label first-title"> 字段名称 </div>
<div class="other-titles">
<span class="setting-title-label cursor-pointer" @click="updatePermission('READ')">
只读
</span>
<span class="setting-title-label cursor-pointer" @click="updatePermission('WRITE')">
可编辑
</span>
<span class="setting-title-label cursor-pointer" @click="updatePermission('NONE')">
隐藏
</span>
</div>
</div>
<div
class="field-setting-item"
v-for="(item, index) in fieldsPermissionCustomize"
:key="index"
>
<div class="field-setting-item-label"> {{ item.title }} </div>
<el-radio-group class="field-setting-item-group" v-model="item.permission">
<div class="item-radio-wrap">
<el-radio
:label="1"
size="large"
><span></span
></el-radio>
</div>
<div class="item-radio-wrap">
<el-radio
size="large"
:label="2"
><span></span
></el-radio>
</div>
<div class="item-radio-wrap">
<el-radio
size="large"
:label="0"
><span></span
></el-radio>
</div>
</el-radio-group>
</div>
</div>
</el-tab-pane>
<el-tab-pane label="表单字段权限" name="fields" v-if="formType === 10"> <el-tab-pane label="表单字段权限" name="fields" v-if="formType === 10">
<div class="field-setting-pane"> <div class="field-setting-pane">
<div class="field-setting-desc">字段权限</div> <div class="field-setting-desc">字段权限</div>
@ -246,7 +295,8 @@
<template #footer> <template #footer>
<el-divider /> <el-divider />
<div> <div>
<el-button type="primary" @click="saveConfig"> </el-button> <el-button type="primary" v-if="formType === 20 && tabName === 'businessFields'" @click="saveCustomize"> </el-button>
<el-button type="primary" v-else @click="saveConfig"> </el-button>
<el-button @click="closeDrawer"> </el-button> <el-button @click="closeDrawer"> </el-button>
</div> </div>
</template> </template>
@ -270,9 +320,14 @@ import {
CopyTaskFormType CopyTaskFormType
} from '../node' } from '../node'
import { defaultProps } from '@/utils/tree' import { defaultProps } from '@/utils/tree'
import { getBusinessForm, saveBusinessForm, FormVO } from '@/api/bpm/form'
defineOptions({ defineOptions({
name: 'CopyTaskNodeConfig' name: 'CopyTaskNodeConfig'
}) })
const { t } = useI18n() //
const message = useMessage() //
const fieldsPermissionCustomize = ref([])
const tabName = ref('')
const props = defineProps({ const props = defineProps({
flowNode: { flowNode: {
type: Object as () => SimpleFlowNode, type: Object as () => SimpleFlowNode,
@ -348,6 +403,33 @@ const changeCandidateStrategy = () => {
configForm.value.deptLevel = 1 configForm.value.deptLevel = 1
configForm.value.formUser = '' configForm.value.formUser = ''
} }
const route = useRoute();
const tabClick = async (tab) => {
tabName.value = tab.props.name
if(tab.props.name === 'businessFields') {
const bpmnForm = (await getBusinessForm({
key: window.localStorage.getItem('businessKey'),
modelNodeId: props.flowNode.id
})) as unknown as FormVO
const newData = bpmnForm.fields.map( v => {
return JSON.parse(v)
})
fieldsPermissionCustomize.value = newData
}
}
const saveCustomize = async () => {
let newData = fieldsPermissionCustomize.value.map( v => {
return JSON.stringify(v)
})
let data = {
fields: newData,
formKey: window.localStorage.getItem('businessKey'),
modelNodeId: props.flowNode.id
}
await saveBusinessForm(data)
message.success(t('common.updateSuccess'))
settingVisible.value = false
}
// //
const saveConfig = async () => { const saveConfig = async () => {
activeTabName.value = 'user' activeTabName.value = 'user'

View File

@ -467,32 +467,29 @@
</div> </div>
<div <div
class="field-setting-item" class="field-setting-item"
v-for="(item, index) in fieldsPermissionConfig" v-for="(item, index) in fieldsPermissionCustomize"
:key="index" :key="index"
> >
<div class="field-setting-item-label"> {{ item.title }} </div> <div class="field-setting-item-label"> {{ item.title }} </div>
<el-radio-group class="field-setting-item-group" v-model="item.permission"> <el-radio-group class="field-setting-item-group" v-model="item.permission">
<div class="item-radio-wrap"> <div class="item-radio-wrap">
<el-radio <el-radio
:value="FieldPermissionType.READ" :label="1"
size="large" size="large"
:label="FieldPermissionType.READ"
><span></span ><span></span
></el-radio> ></el-radio>
</div> </div>
<div class="item-radio-wrap"> <div class="item-radio-wrap">
<el-radio <el-radio
:value="FieldPermissionType.WRITE"
size="large" size="large"
:label="FieldPermissionType.WRITE" :label="2"
><span></span ><span></span
></el-radio> ></el-radio>
</div> </div>
<div class="item-radio-wrap"> <div class="item-radio-wrap">
<el-radio <el-radio
:value="FieldPermissionType.NONE"
size="large" size="large"
:label="FieldPermissionType.NONE" :label="0"
><span></span ><span></span
></el-radio> ></el-radio>
</div> </div>
@ -563,7 +560,8 @@
<template #footer> <template #footer>
<el-divider /> <el-divider />
<div> <div>
<el-button type="primary" @click="saveConfig"> </el-button> <el-button type="primary" v-if="formType === 20 && tabName === 'businessFields'" @click="saveCustomize"> </el-button>
<el-button type="primary" v-else @click="saveConfig"> </el-button>
<el-button @click="closeDrawer"> </el-button> <el-button @click="closeDrawer"> </el-button>
</div> </div>
</template> </template>
@ -610,7 +608,7 @@ import { defaultProps } from '@/utils/tree'
import { cloneDeep } from 'lodash-es' import { cloneDeep } from 'lodash-es'
import { convertTimeUnit, getApproveTypeText } from '../utils' import { convertTimeUnit, getApproveTypeText } from '../utils'
import UserTaskListener from './components/UserTaskListener.vue' import UserTaskListener from './components/UserTaskListener.vue'
import { getBusinessForm, FormVO } from '@/api/bpm/form' import { getBusinessForm, saveBusinessForm, FormVO } from '@/api/bpm/form'
defineOptions({ defineOptions({
name: 'UserTaskNodeConfig' name: 'UserTaskNodeConfig'
}) })
@ -620,6 +618,10 @@ const props = defineProps({
required: true required: true
} }
}) })
const { t } = useI18n() //
const message = useMessage() //
const tabName = ref('')
const fieldsPermissionCustomize = ref([])
const emits = defineEmits<{ const emits = defineEmits<{
'find:returnTaskNodes': [nodeList: SimpleFlowNode[]] 'find:returnTaskNodes': [nodeList: SimpleFlowNode[]]
}>() }>()
@ -1027,14 +1029,32 @@ const updatePermission = (type: string) => {
const route = useRoute(); const route = useRoute();
const tabClick = async (tab) => { const tabClick = async (tab) => {
tabName.value = tab.props.name
if(tab.props.name === 'businessFields') { if(tab.props.name === 'businessFields') {
const bpmnForm = (await getBusinessForm({ const bpmnForm = (await getBusinessForm({
key: window.localStorage.getItem('businessKey'), key: window.localStorage.getItem('businessKey'),
modelNodeId: props.flowNode.id modelNodeId: props.flowNode.id
})) as unknown as FormVO })) as unknown as FormVO
console.log('%csrc/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue:1035 object', 'color: #007acc;', bpmnForm); const newData = bpmnForm.fields.map( v => {
return JSON.parse(v)
})
fieldsPermissionCustomize.value = newData
} }
} }
const saveCustomize = async () => {
let newData = fieldsPermissionCustomize.value.map( v => {
return JSON.stringify(v)
})
let data = {
fields: newData,
formKey: window.localStorage.getItem('businessKey'),
modelNodeId: props.flowNode.id
}
await saveBusinessForm(data)
message.success(t('common.updateSuccess'))
settingVisible.value = false
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@ -1119,4 +1139,7 @@ const tabClick = async (tab) => {
} }
} }
} }
.business-title {
width: 220px !important;
}
</style> </style>

View File

@ -3,7 +3,7 @@
<el-row> <el-row>
<!-- 动态渲染插槽内容 --> <!-- 动态渲染插槽内容 -->
<template v-for="(field, index) in Object.keys(fields)" :key="index"> <template v-for="(field, index) in Object.keys(fields)" :key="index">
<template v-if="!fields[field]"> <template v-if="fields[field]">
<!-- 显示 --> <!-- 显示 -->
<slot :name="field"></slot> <slot :name="field"></slot>
</template> </template>

View File

@ -2,7 +2,7 @@
<el-table :data="data" v-loading="loading" :stripe="stripe" :show-overflow-tooltip="showOverflowTooltip" style="width: 100%"> <el-table :data="data" v-loading="loading" :stripe="stripe" :show-overflow-tooltip="showOverflowTooltip" style="width: 100%">
<!-- 插槽内容 --> <!-- 插槽内容 -->
<template v-for="(slotName, index) in Object.keys(fields)" :key="index"> <template v-for="(slotName, index) in Object.keys(fields)" :key="index">
<template v-if="!fields[slotName]"> <template v-if="fields[slotName]">
<slot :name="slotName" :scope="scope"></slot> <slot :name="slotName" :scope="scope"></slot>
</template> </template>
</template> </template>

View File

@ -978,6 +978,28 @@ const remainingRouter: AppRouteRecordRaw[] = [
}, },
component: () => import('@/views/hrm/mentorsapply/MentorsApplyForm.vue') component: () => import('@/views/hrm/mentorsapply/MentorsApplyForm.vue')
}, },
{
path: 'certificaterequest/CertificateRequestForm',
name: 'CertificateRequestAdd',
meta: {
title: '人事证明新增',
noCache: true,
hidden: true,
activeMenu: '/hrm/certificaterequest'
},
component: () => import('@/views/hrm/certificaterequest/CertificateRequestForm.vue')
},
{
path: 'talentpool/TalentPoolForm',
name: 'TalentPoolAdd',
meta: {
title: '人才库管理新增',
noCache: true,
hidden: true,
activeMenu: '/hrm/talentpool'
},
component: () => import('@/views/hrm/talentpool/TalentPoolForm.vue')
},
] ]
}, },
{ {

View File

@ -218,6 +218,9 @@ export enum DICT_TYPE {
CRM_SERVICE_FEE_INVOICE='crm_service_fee_invoice',// 服务费票据 CRM_SERVICE_FEE_INVOICE='crm_service_fee_invoice',// 服务费票据
CRM_SERVICE_FEE_INVOICE_ITEMS='crm_service_fee_invoice_items',// 服务费开票项目 CRM_SERVICE_FEE_INVOICE_ITEMS='crm_service_fee_invoice_items',// 服务费开票项目
SALE_STAGE='sale_stage',// 销售阶段 SALE_STAGE='sale_stage',// 销售阶段
TIME_TYPE='time_type',// 时间类型
CRM_PARTNER_TYPE = 'crm_partner_type',//合作类型
CRM_SERVICE_FEE_COLLECTION_METHOD = 'crm_service_fee_collection_method',//服务费收取方式
CRM_PRODUCT_CATEGORY = "crm_product_category", //CRM 产品类型 CRM_PRODUCT_CATEGORY = "crm_product_category", //CRM 产品类型
CRM_PRODUCT_DETAIL_TYPE = "crm_product_detail_type", //CRM 产品明细类型 CRM_PRODUCT_DETAIL_TYPE = "crm_product_detail_type", //CRM 产品明细类型
@ -388,6 +391,8 @@ export enum DICT_TYPE {
HRM_PERFORMANCE_LEVEL = 'hrm_performance_level', HRM_PERFORMANCE_LEVEL = 'hrm_performance_level',
// 考核类型 // 考核类型
HRM_ASSESS_TYPE = 'hrm_assess_type', HRM_ASSESS_TYPE = 'hrm_assess_type',
//需求部门
HRM_EMAND_DEPARTMENT = 'hrm_emand_department'
} }

View File

@ -131,7 +131,10 @@ const getList = async () => {
const handleAudit = (row: any) => { const handleAudit = (row: any) => {
const query = { const query = {
id: row.processInstanceId, id: row.processInstanceId,
activityId: undefined activityId: undefined,
processDefinitionId: row.processInstanceId,
taskDefinitionKey: row.activityId,
isDetail: 1
} }
if (row.activityId) { if (row.activityId) {
query.activityId = row.activityId query.activityId = row.activityId

View File

@ -257,7 +257,10 @@ const handleAudit = (row: any) => {
name: 'BpmProcessInstanceDetail', name: 'BpmProcessInstanceDetail',
query: { query: {
id: row.processInstance.id, id: row.processInstance.id,
taskId: row.id taskId: row.id,
processDefinitionId: row.processInstance.processDefinitionId,
taskDefinitionKey: row.taskDefinitionKey,
isDetail: 1
} }
}) })
} }

View File

@ -221,7 +221,9 @@ const handleAudit = (row: any) => {
name: 'BpmProcessInstanceDetail', name: 'BpmProcessInstanceDetail',
query: { query: {
id: row.processInstance.id, id: row.processInstance.id,
taskId: row.id taskId: row.id,
processDefinitionId: row.processInstance.processDefinitionId,
taskDefinitionKey: row.taskDefinitionKey
} }
}) })
} }

View File

@ -8,10 +8,30 @@
v-loading="formLoading" v-loading="formLoading"
> >
<el-row> <el-row>
<el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="商机名称" prop="name"> <el-form-item label="商机名称" prop="name">
<el-input v-model="formData.name" :disabled="type" clearable placeholder="请输入商机名称" /> <el-input v-model="formData.name" :disabled="type" clearable placeholder="请输入商机名称" />
</el-form-item> </el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="客户名称" prop="customerId">
<SelectComponent :customerList="customerList" :disabled="formData.customerDefault || type" v-model="formData.customerId" />
<!-- <el-select
:disabled="formData.customerDefault || type"
v-model="formData.customerId"
clearable
filterable
placeholder="请选择客户"
class="w-1/1"
>
<el-option
v-for="item in customerList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select> -->
</el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="线索拓展人" prop="ownerUserId"> <el-form-item label="线索拓展人" prop="ownerUserId">
@ -50,27 +70,26 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="客户名称" prop="customerId"> <el-form-item label="维护人" prop="maintenanceUserId">
<SelectComponent :customerList="customerList" :disabled="formData.customerDefault || type" v-model="formData.customerId" /> <el-select
<!-- <el-select v-model="formData.maintenanceUserId"
:disabled="formData.customerDefault || type"
v-model="formData.customerId"
clearable clearable
filterable
placeholder="请选择客户" :disabled="formType || type"
:placeholder="formType ? '' : '请选择维护人'"
class="w-1/1" class="w-1/1"
> >
<el-option <el-option
v-for="item in customerList" v-for="item in userOptions"
:key="item.id" :key="item.id"
:label="item.name" :label="item.nickname"
:value="item.id" :value="item.id"
/> />
</el-select> --> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="归属部门" prop="deptId"> <el-form-item label="归属部门" prop="deptId">
<el-tree-select <el-tree-select
v-model="formData.deptId" v-model="formData.deptId"
@ -84,8 +103,8 @@
:placeholder="type ? '' : '请选择归属部门'" :placeholder="type ? '' : '请选择归属部门'"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col> -->
<el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="商机状态组" prop="statusTypeId"> <el-form-item label="商机状态组" prop="statusTypeId">
<el-select <el-select
v-model="formData.statusTypeId" v-model="formData.statusTypeId"
@ -102,7 +121,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col> -->
<el-col :span="8"> <el-col :span="8">
<el-form-item label="预计成交日期" prop="dealTime"> <el-form-item label="预计成交日期" prop="dealTime">
<el-date-picker <el-date-picker
@ -115,7 +134,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="销售阶段" prop="saleStage"> <el-form-item label="销售阶段" prop="saleStage">
<el-select v-model="formData.saleStage" disabled clearable placeholder="请选择销售阶段"> <el-select v-model="formData.saleStage" disabled clearable placeholder="请选择销售阶段">
<el-option <el-option
@ -126,7 +145,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col> -->
<el-col :span="8"> <el-col :span="8">
<el-form-item label="授信方式" prop="creditMethod"> <el-form-item label="授信方式" prop="creditMethod">
@ -142,7 +161,7 @@
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="账期" prop="paymentTerm"> <el-form-item label="账期" prop="paymentTerm">
<el-select v-model="formData.paymentTerm" :disabled="type" @change="changePayment" clearable placeholder="请选择账期"> <el-select v-model="formData.paymentTerm" :disabled="type" clearable placeholder="请选择账期">
<el-option <el-option
v-for="dict in getStrDictOptions(DICT_TYPE.PAYMENT_TERM)" v-for="dict in getStrDictOptions(DICT_TYPE.PAYMENT_TERM)"
:key="dict.value" :key="dict.value"
@ -152,16 +171,9 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="授信计算周期" prop="creditCalcCycle"> <el-form-item label="授信计算周期" prop="creditCalcCycle">
<!-- <el-select v-model="formData.creditCalcCycle" placeholder="请选择授信计算周期">
<el-option
v-for="dict in getIntDictOptions('credit_calc_cycle')"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select> -->
<el-input v-model="formData.creditCalcCycle" disabled placeholder="" /> <el-input v-model="formData.creditCalcCycle" disabled placeholder="" />
</el-form-item> </el-form-item>
</el-col> </el-col>
@ -182,7 +194,7 @@
</el-radio> </el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col> -->
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目难度" prop="projectDifficultyId"> <el-form-item label="项目难度" prop="projectDifficultyId">
<el-select v-model="formData.projectDifficultyId" :disabled="type" clearable placeholder="请选择项目难度"> <el-select v-model="formData.projectDifficultyId" :disabled="type" clearable placeholder="请选择项目难度">

View File

@ -18,9 +18,9 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="产品明细" align="center" prop="detailType" width="240"> <el-table-column label="产品明细" align="center" prop="detailType" width="240">
<template #default="{ row, $index }"> <template #default="scope">
<el-form-item :prop="`${$index}.detailType`" :rules="formRules.detailType" class="mb-0px!" v-if="!disabled"> <!-- <el-form-item :prop="`${$index}.detailType`" :rules="formRules.detailType" class="mb-0px!" v-if="!disabled"> -->
<el-select v-model="row.detailType" placeholder="请选择状态" > <!-- <el-select v-model="row.detailType" placeholder="请选择状态" >
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PRODUCT_DETAIL_TYPE)" v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PRODUCT_DETAIL_TYPE)"
:key="dict.value" :key="dict.value"
@ -28,8 +28,8 @@
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item> -->
<dict-tag v-else :type="DICT_TYPE.CRM_PRODUCT_DETAIL_TYPE" :value="row.detailType" /> <dict-tag :type="DICT_TYPE.CRM_PRODUCT_DETAIL_TYPE" :value="scope.row.detailType" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="单位" align="center" min-width="80"> <el-table-column label="单位" align="center" min-width="80">

View File

@ -3,10 +3,11 @@
ref="formRef" ref="formRef"
:model="formData" :model="formData"
:rules="formRules" :rules="formRules"
:fields="formFields"
label-width="142px" label-width="142px"
v-loading="formLoading" v-loading="formLoading"
> >
<el-row> <template #cooperationType>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="合作类型" prop="cooperationType"> <el-form-item label="合作类型" prop="cooperationType">
<el-select v-model="formData.cooperationType" disabled filterable placeholder="请选择合作类型" class="w-1/1"> <el-select v-model="formData.cooperationType" disabled filterable placeholder="请选择合作类型" class="w-1/1">
@ -19,6 +20,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #regType>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="企业类型" prop=""> <el-form-item label="企业类型" prop="">
<el-input v-model="formData.regType" disabled placeholder="自动获取" /> <el-input v-model="formData.regType" disabled placeholder="自动获取" />
@ -53,17 +56,22 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> --> </el-col> -->
</template>
<template #actualCapital>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="实缴资金" prop="paidInCapital"> <el-form-item label="实缴资金" prop="paidInCapital">
<el-input v-model="formData.actualCapital" disabled /> <el-input v-model="formData.actualCapital" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #socialEmployeeNum>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="参保人数" prop="insuredCount"> <el-form-item label="参保人数" prop="insuredCount">
<el-input v-model="formData.socialEmployeeNum" disabled /> <el-input v-model="formData.socialEmployeeNum" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #defendantRecord>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="被告记录" prop="defendantRecord"> <el-form-item label="被告记录" prop="defendantRecord">
<el-radio-group v-model="formData.defendantRecord" :disabled="true"> <el-radio-group v-model="formData.defendantRecord" :disabled="true">
@ -72,6 +80,8 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #abnormalService>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="经营异常" prop="abnormalService"> <el-form-item label="经营异常" prop="abnormalService">
<el-radio-group v-model="formData.abnormalService" :disabled="true"> <el-radio-group v-model="formData.abnormalService" :disabled="true">
@ -80,6 +90,8 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #equityPledge>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="股权出质" prop="equityPledge"> <el-form-item label="股权出质" prop="equityPledge">
<el-radio-group v-model="formData.equityPledge" :disabled="true"> <el-radio-group v-model="formData.equityPledge" :disabled="true">
@ -88,6 +100,8 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #dishonestyRecord>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="失信记录" prop="dishonestyRecord"> <el-form-item label="失信记录" prop="dishonestyRecord">
<el-radio-group v-model="formData.dishonestyRecord" :disabled="true"> <el-radio-group v-model="formData.dishonestyRecord" :disabled="true">
@ -96,6 +110,8 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #financeRecord>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="融资记录" prop="financeRecord"> <el-form-item label="融资记录" prop="financeRecord">
<el-radio-group v-model="formData.financeRecord" :disabled="true"> <el-radio-group v-model="formData.financeRecord" :disabled="true">
@ -104,6 +120,8 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #judgmentRecord>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="被执行记录" prop="judgmentRecord"> <el-form-item label="被执行记录" prop="judgmentRecord">
<el-radio-group v-model="formData.judgmentRecord" :disabled="true"> <el-radio-group v-model="formData.judgmentRecord" :disabled="true">
@ -112,43 +130,51 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </template>
<template #creditAmount>
<el-row>
<el-col :span="8">
<el-form-item label="初始额度" prop="creditLimit">
<el-input v-model="formData.creditAmount" placeholder="请输入初始额度" disabled />
</el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="目前额度" prop="creditLimit"> <el-form-item label="初始额度" prop="creditLimit">
<el-input v-model="formData.creditLimit" placeholder="" disabled /> <el-input v-model="formData.creditAmount" placeholder="请输入初始额度" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #creditLimit>
<el-col :span="8">
<el-form-item label="目前额度" prop="creditLimit">
<el-input v-model="formData.creditLimit" placeholder="" disabled />
</el-form-item>
</el-col>
</template>
<template #partnerCompanyId>
<el-col :span="8">
<el-form-item label="合作主体" prop="partnerCompanyId">
<el-select v-model="formData.partnerCompanyId" disabled placeholder="请选择签约主体" @change="onPartnerChange">
<el-option
v-for="dict in orgList"
:key="dict.id"
:label="dict.orgName"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</template>
<template #changeAmount>
<el-col :span="8">
<el-form-item label="调整金额(元)" prop="changeAmount">
<el-input v-model="formData.changeAmount" :disabled="type" oninput="value=value.match(/^\d+(?:\.\d{0,2})?/)" placeholder="请输入调整金额(元)" @input="onChangeAmount" />
</el-form-item>
</el-col>
</template>
<template #afterAmount>
<el-col :span="8">
<el-form-item label="最终额度" prop="afterAmount">
<el-input v-model="formData.afterAmount" type="number" disabled placeholder="" />
</el-form-item>
</el-col>
</template>
<template #changeAmountDeadline>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="合作主体" prop="partnerCompanyId">
<el-select v-model="formData.partnerCompanyId" disabled placeholder="请选择签约主体" @change="onPartnerChange">
<el-option
v-for="dict in orgList"
:key="dict.id"
:label="dict.orgName"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="调整金额(元)" prop="changeAmount">
<el-input v-model="formData.changeAmount" :disabled="type" oninput="value=value.match(/^\d+(?:\.\d{0,2})?/)" placeholder="请输入调整金额(元)" @input="onChangeAmount" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="最终额度" prop="afterAmount">
<el-input v-model="formData.afterAmount" type="number" disabled placeholder="" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="调整金额截止日期" prop="changeAmountDeadline"> <el-form-item label="调整金额截止日期" prop="changeAmountDeadline">
<el-date-picker <el-date-picker
v-model="formData.changeAmountDeadline" v-model="formData.changeAmountDeadline"
@ -160,12 +186,14 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> </template>
<el-form-item label="调额说明" prop="note"> <template #note>
<el-input v-model="formData.note" type="textarea" :disabled="!!type" :row="5" placeholder="请输入调额说明" /> <el-col :span="24">
</el-form-item> <el-form-item label="调额说明" prop="note">
</el-col> <el-input v-model="formData.note" type="textarea" :disabled="!!type" :row="5" placeholder="请输入调额说明" />
</el-row> </el-form-item>
</el-col>
</template>
</el-form> </el-form>
<!-- 子表的表单 --> <!-- 子表的表单 -->
@ -180,6 +208,7 @@ import * as UserApi from '@/api/system/user'
import * as DeptApi from '@/api/system/dept' import * as DeptApi from '@/api/system/dept'
import * as BusinessApi from '@/api/crm/business' import * as BusinessApi from '@/api/crm/business'
import { propTypes } from '@/utils/propTypes' import { propTypes } from '@/utils/propTypes'
import { type } from 'os'
/** CRM 方案报价 表单 */ /** CRM 方案报价 表单 */
defineOptions({ name: 'QuotationForm' }) defineOptions({ name: 'QuotationForm' })
@ -263,7 +292,28 @@ const quotationProductFormRef = ref()
const props = defineProps<{ const props = defineProps<{
data: undefined, data: undefined,
type: undefined type: undefined,
formFields: {
type: Object,
defualt: {
cooperationType: 1,
regType: 1,
actualCapital: 1,
socialEmployeeNum: 1,
defendantRecord: 1,
abnormalService: 1,
equityPledge: 1,
dishonestyRecord: 1,
financeRecord: 1,
judgmentRecord: 1,
creditAmount: 1,
creditLimit: 1,
partnerCompanyId: 1,
changeAmount: 1,
afterAmount: 1,
changeAmountDeadline: 1,
}
}
}>() }>()
watch( watch(

View File

@ -197,14 +197,16 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
const props = defineProps<{ const props = defineProps<{
products: undefined products: undefined
disabled: false, disabled: false,
type: undefined type: undefined,
formFields: {}
}>() }>()
const formLoading = ref(false) // const formLoading = ref(false) //
const formData = ref([]) const formData = ref([])
const formRules = reactive({ const formRules = reactive({
productId: [{ required: true, message: '产品不能为空', trigger: 'blur' }], productId: [{ required: true, message: '产品不能为空', trigger: 'blur' }],
contractPrice: [{ required: true, message: '合同价格不能为空', trigger: 'blur' }], contractPrice: [{ required: true, message: '合同价格不能为空', trigger: 'blur' }],
count: [{ required: true, message: '产品数量不能为空', trigger: 'blur' }] count: [{ required: true, message: '产品数量不能为空', trigger: 'blur' }],
}) })
const formRef = ref([]) // Ref const formRef = ref([]) // Ref
const productList = ref<ProductApi.ProductVO[]>([]) // const productList = ref<ProductApi.ProductVO[]>([]) //

View File

@ -1,21 +1,27 @@
<template> <template>
<ContentWrap class="mt-10px"> <ContentWrap class="mt-10px">
<el-form <processForm
ref="formRef" ref="formRef"
v-loading="formLoading" v-loading="formLoading"
:fields="formFields"
:model="formData" :model="formData"
:rules="formRules" :rules="formRules"
label-width="120px" label-width="120px"
> >
<ContentWrap style="border: none;font-weight: 700">
基础信息
</ContentWrap>
<el-row>
<!-- <el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="合同名称" prop="name"> <el-form-item label="合同名称" prop="name">
<el-input v-model="formData.name" disabled placeholder="" /> <el-input v-model="formData.name" disabled placeholder="" />
</el-form-item> </el-form-item>
</el-col> --> </el-col> -->
<template #other>
<el-col :span="24">
<ContentWrap style="border: none;font-weight: 700">
基础信息
</ContentWrap>
</el-col>
</template>
<template #customerId>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="客户名称" prop="customerId"> <el-form-item label="客户名称" prop="customerId">
<el-select <el-select
@ -33,11 +39,15 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #no>
<el-col :span="8" v-if="formType"> <el-col :span="8" v-if="formType">
<el-form-item label="合同编号" prop="no"> <el-form-item label="合同编号" prop="no">
<el-input v-model="formData.no" disabled placeholder="" /> <el-input v-model="formData.no" disabled placeholder="" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #quotationId>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="报价单编号" prop="quotationId"> <el-form-item label="报价单编号" prop="quotationId">
<el-select <el-select
@ -56,7 +66,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #pricingUserId>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="方案签约人" prop="pricingUserId"> <el-form-item label="方案签约人" prop="pricingUserId">
<el-select <el-select
@ -75,12 +86,15 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #creditLimit>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="授信额度" prop="creditLimit"> <el-form-item label="授信额度" prop="creditLimit">
<el-input v-model="formData.creditLimit" placeholder="" disabled /> <el-input v-model="formData.creditLimit" placeholder="" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #creditMethod>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="授信方式" prop="creditMethod" > <el-form-item label="授信方式" prop="creditMethod" >
<el-select v-model="formData.creditMethod" placeholder="" disabled> <el-select v-model="formData.creditMethod" placeholder="" disabled>
@ -93,6 +107,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #creditCalcCycle>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="授信计算周期" prop="creditCalcCycle" > <el-form-item label="授信计算周期" prop="creditCalcCycle" >
<el-input v-model="formData.creditCalcCycle" placeholder="" disabled /> <el-input v-model="formData.creditCalcCycle" placeholder="" disabled />
@ -110,24 +126,29 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> --> </el-col> -->
</template>
<template #quotationTimes>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="第几次报价" prop="quotationTimes"> <el-form-item label="第几次报价" prop="quotationTimes">
<el-input v-model="formData.quotationTimes" disabled placeholder="" /> <el-input v-model="formData.quotationTimes" disabled placeholder="" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #paymentTerm>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="账期" prop="paymentTerm"> <el-form-item label="账期" prop="paymentTerm">
<el-select v-model="formData.paymentTerm" disabled placeholder=""> <el-select v-model="formData.paymentTerm" disabled placeholder="">
<el-option <el-option
v-for="dict in getStrDictOptions('payment_term')" v-for="dict in getStrDictOptions('payment_term')"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #onlinePrice>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="基础服务费合计" prop="onlinePrice"> <el-form-item label="基础服务费合计" prop="onlinePrice">
<el-input <el-input
@ -148,6 +169,8 @@
/> />
</el-form-item> </el-form-item>
</el-col> --> </el-col> -->
</template>
<template #totalPrice>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="服务费收入合计" prop="price"> <el-form-item label="服务费收入合计" prop="price">
<el-input <el-input
@ -158,123 +181,149 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </template>
<el-row> <template #other1>
<el-col :span="24"> <el-col :span="24">
<ContentWrap style="border: none;font-weight: 700"> <ContentWrap style="border: none;font-weight: 700">
甲方基本信息 甲方基本信息
</ContentWrap> </ContentWrap>
</el-col> </el-col>
<el-col :span="8"> </template>
<el-form-item label="甲方名称" prop="partyName"> <template #customerId1>
<el-select <el-col :span="8">
v-model="formData.customerId" <el-form-item label="甲方名称" prop="partyName">
disabled="" <el-select
placeholder="" v-model="formData.customerId"
class="w-1/1" disabled=""
> placeholder=""
<el-option class="w-1/1"
v-for="item in contactList" >
:key="item.id" <el-option
:label="item.name" v-for="item in contactList"
:value="item.id" :key="item.id"
/> :label="item.name"
</el-select> :value="item.id"
</el-form-item> />
</el-col> </el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="客户编号" prop="customerId"> <el-form-item label="客户编号" prop="customerId">
<el-input v-model="formData.customerId" disabled placeholder="客户编号" /> <el-input v-model="formData.customerId" disabled placeholder="客户编号" />
</el-form-item> </el-form-item>
</el-col> --> </el-col> -->
<el-col :span="8"> </template>
<el-form-item label="法人代表" prop="legalPersonName"> <template #legalPersonName>
<el-input v-model="formData.legalPersonName" placeholder="" disabled /> <el-col :span="8">
</el-form-item> <el-form-item label="法人代表" prop="legalPersonName">
</el-col> <el-input v-model="formData.legalPersonName" placeholder="" disabled />
<el-col :span="8"> </el-form-item>
<el-form-item label="统一信用代码" prop="creditNo"> </el-col>
<el-input v-model="formData.creditNo" placeholder="" disabled /> </template>
</el-form-item> <template #creditNo>
</el-col> <el-col :span="8">
<el-col :span="8"> <el-form-item label="统一信用代码" prop="creditNo">
<el-form-item label="企业类型" prop="regType"> <el-input v-model="formData.creditNo" placeholder="" disabled />
<el-input v-model="formData.regType" placeholder="" disabled /> </el-form-item>
</el-form-item> </el-col>
</el-col> </template>
<template #regType>
<el-col :span="8">
<el-form-item label="企业类型" prop="regType">
<el-input v-model="formData.regType" placeholder="" disabled />
</el-form-item>
</el-col>
<!-- <el-col :span="8"> --> <!-- <el-col :span="8"> -->
<!-- <el-form-item label="融资信息" prop="financingInfo"> <!-- <el-form-item label="融资信息" prop="financingInfo">
<el-input v-model="formData.financingInfo" placeholder="融资信息" disabled /> <el-input v-model="formData.financingInfo" placeholder="融资信息" disabled />
</el-form-item> --> </el-form-item> -->
<!-- </el-col> --> <!-- </el-col> -->
<el-col :span="8"> </template>
<el-form-item label="实缴资金" prop="actualCapital"> <template #actualCapital>
<el-input v-model="formData.actualCapital" placeholder="" disabled /> <el-col :span="8">
</el-form-item> <el-form-item label="实缴资金" prop="actualCapital">
</el-col> <el-input v-model="formData.actualCapital" placeholder="" disabled />
<el-col :span="8"> </el-form-item>
<el-form-item label="参保人数" prop="socialEmployeeNum"> </el-col>
<el-input v-model="formData.socialEmployeeNum" placeholder="" disabled /> </template>
</el-form-item> <template #socialEmployeeNum>
</el-col> <el-col :span="8">
<el-form-item label="参保人数" prop="socialEmployeeNum">
<el-input v-model="formData.socialEmployeeNum" placeholder="" disabled />
</el-form-item>
</el-col>
<!-- <el-col :span="8"> --> <!-- <el-col :span="8"> -->
<!-- <el-form-item label="上市情况" prop="listingStatus"> <!-- <el-form-item label="上市情况" prop="listingStatus">
<el-input v-model="formData.listingStatus" placeholder="上市情况" disabled /> <el-input v-model="formData.listingStatus" placeholder="上市情况" disabled />
</el-form-item> --> </el-form-item> -->
<!-- </el-col> --> <!-- </el-col> -->
<el-col :span="8"> </template>
<el-form-item label="注册地址" prop="registeredAddress"> <template #registeredAddress>
<el-input v-model="formData.registeredAddress" placeholder="" disabled /> <el-col :span="8">
</el-form-item> <el-form-item label="注册地址" prop="registeredAddress">
</el-col> <el-input v-model="formData.registeredAddress" placeholder="" disabled />
<el-col :span="24"> </el-form-item>
<ContentWrap style="border: none;font-weight: 700"> </el-col>
乙方基本信息 </template>
</ContentWrap> <template #other2>
</el-col> <el-col :span="24">
<el-col :span="8"> <ContentWrap style="border: none;font-weight: 700">
<el-form-item label="合作主体" prop="partnerCompanyId"> 乙方基本信息
<el-select v-model="formData.partnerCompanyId" placeholder="" disabled > </ContentWrap>
<el-option </el-col>
v-for="dict in orgList" </template>
:key="dict.id" <template #partnerCompanyId>
:label="dict.orgName" <el-col :span="8">
:value="dict.id" <el-form-item label="合作主体" prop="partnerCompanyId">
/> <el-select v-model="formData.partnerCompanyId" placeholder="" disabled >
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="开户行" prop="bankName">
<el-input v-model="formData.bankName" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="银行账号" prop="bankAccount">
<el-input v-model="formData.bankAccount" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="法人代表" prop="legalRepresentative">
<el-input v-model="formData.legalRepresentative" placeholder="" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="商务负责人" prop="ownerUserId">
<el-select
v-model="formData.ownerUserId"
disabled
class="w-1/1"
>
<el-option <el-option
v-for="item in userOptions" v-for="dict in orgList"
:key="item.id" :key="dict.id"
:label="item.nickname" :label="dict.orgName"
:value="item.id" :value="dict.id"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #bankName>
<el-col :span="8">
<el-form-item label="开户行" prop="bankName">
<el-input v-model="formData.bankName" placeholder="" disabled />
</el-form-item>
</el-col>
</template>
<template #bankAccount>
<el-col :span="8">
<el-form-item label="银行账号" prop="bankAccount">
<el-input v-model="formData.bankAccount" placeholder="" disabled />
</el-form-item>
</el-col>
</template>
<template #legalRepresentative>
<el-col :span="8">
<el-form-item label="法人代表" prop="legalRepresentative">
<el-input v-model="formData.legalRepresentative" placeholder="" disabled />
</el-form-item>
</el-col>
</template>
<template #ownerUserId>
<el-col :span="8">
<el-form-item label="商务负责人" prop="ownerUserId">
<el-select
v-model="formData.ownerUserId"
disabled
class="w-1/1"
>
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="手机号" prop="mobile"> <el-form-item label="手机号" prop="mobile">
<el-input <el-input
@ -302,25 +351,31 @@
/> />
</el-form-item> </el-form-item>
</el-col> --> </el-col> -->
<el-col :span="8"> </template>
<el-form-item label="归属部门" prop="deptId"> <template #deptId>
<el-tree-select <el-col :span="8">
v-model="formData.deptId" <el-form-item label="归属部门" prop="deptId">
:data="deptTree" <el-tree-select
disabled v-model="formData.deptId"
:props="defaultProps" :data="deptTree"
check-strictly disabled
node-key="id" :props="defaultProps"
placeholder="" check-strictly
/> node-key="id"
</el-form-item> placeholder=""
</el-col> />
<el-col :span="24"> </el-form-item>
<ContentWrap style="border: none;font-weight: 700"> </el-col>
合同信息 </template>
</ContentWrap> <template #other3>
</el-col> <el-col :span="24">
<el-col :span="8"> <ContentWrap style="border: none;font-weight: 700">
合同信息
</ContentWrap>
</el-col>
</template>
<template #contractType>
<el-col :span="8">
<el-form-item label="合同类型" prop="contractType"> <el-form-item label="合同类型" prop="contractType">
<el-radio-group v-model="formData.contractType" disabled> <el-radio-group v-model="formData.contractType" disabled>
<el-radio :label="1">单次合同</el-radio> <el-radio :label="1">单次合同</el-radio>
@ -328,6 +383,8 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #startTime>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="合同签订日期" prop="startTime"> <el-form-item label="合同签订日期" prop="startTime">
<el-date-picker <el-date-picker
@ -340,6 +397,8 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #endTime>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="合同结束时间" prop="endTime"> <el-form-item label="合同结束时间" prop="endTime">
<el-date-picker <el-date-picker
@ -352,11 +411,15 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #contractTerm>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="合同期限(月)" prop="contractTerm"> <el-form-item label="合同期限(月)" prop="contractTerm">
<el-input v-model="formData.contractTerm" disabled oninput = "value=value.replace(/[^\d]/g,'')" placeholder="" /> <el-input v-model="formData.contractTerm" disabled oninput = "value=value.replace(/[^\d]/g,'')" placeholder="" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #statementDate>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="账单日" prop="statementDate"> <el-form-item label="账单日" prop="statementDate">
<el-select v-model="formData.statementDate" disabled placeholder="" > <el-select v-model="formData.statementDate" disabled placeholder="" >
@ -369,6 +432,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #lastPayDate>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="最晚付款日" prop="lastPayDate"> <el-form-item label="最晚付款日" prop="lastPayDate">
<el-select v-model="formData.lastPayDate" disabled placeholder="" > <el-select v-model="formData.lastPayDate" disabled placeholder="" >
@ -381,11 +446,15 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #penaltyRate>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="违约金比例" prop="penaltyRate"> <el-form-item label="违约金比例" prop="penaltyRate">
<el-input v-model="formData.penaltyRate" disabled placeholder="" /> <el-input v-model="formData.penaltyRate" disabled placeholder="" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #latePaymentRate>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="延期付款利率" prop="latePaymentRate"> <el-form-item label="延期付款利率" prop="latePaymentRate">
<el-input v-model="formData.latePaymentRate" disabled placeholder="" /> <el-input v-model="formData.latePaymentRate" disabled placeholder="" />
@ -399,32 +468,40 @@
</el-row> </el-row>
<el-row> --> <el-row> -->
<el-col :span="24"> </template>
<ContentWrap style="border: none;font-weight: 700"> <template #other4>
财务与客服对接信息 <el-col :span="24">
</ContentWrap> <ContentWrap style="border: none;font-weight: 700">
</el-col> 财务与客服对接信息
<el-col :span="8"> </ContentWrap>
<el-form-item label="财务结算方式" prop="settleMethod"> </el-col>
<el-radio-group v-model="formData.settleMethod" disabled> </template>
<el-radio :label="1">按月结算</el-radio> <template #settleMethod>
<el-radio :label="0">按项目结算</el-radio> <el-col :span="8">
</el-radio-group> <el-form-item label="财务结算方式" prop="settleMethod">
</el-form-item> <el-radio-group v-model="formData.settleMethod" disabled>
</el-col> <el-radio :label="1">按月结算</el-radio>
<el-col :span="8"> <el-radio :label="0">按项目结算</el-radio>
<el-form-item label="售后维护人" prop="afterSaleUserId"> </el-radio-group>
<el-select v-model="formData.afterSaleUserId" disabled placeholder=""> </el-form-item>
<el-option </el-col>
v-for="dict in userOptions" </template>
:key="dict.id" <template #afterSaleUserId>
:label="dict.nickname" <el-col :span="8">
:value="dict.id" <el-form-item label="售后维护人" prop="afterSaleUserId">
/> <el-select v-model="formData.afterSaleUserId" disabled placeholder="">
</el-select> <el-option
</el-form-item> v-for="dict in userOptions"
</el-col> :key="dict.id"
<el-col :span="8"> :label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</template>
<template #collUserId>
<el-col :span="8">
<el-form-item label="协作人" prop="collUserId"> <el-form-item label="协作人" prop="collUserId">
<el-select v-model="formData.collUserId" disabled placeholder=""> <el-select v-model="formData.collUserId" disabled placeholder="">
<el-option <el-option
@ -436,51 +513,63 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> </template>
<el-form-item label="合同正文" prop="contractBody"> <template #contractBody>
<el-input v-model="formData.contractBody" disabled type="textarea" rows="5" placeholder="" /> <el-col :span="24">
</el-form-item> <el-form-item label="合同正文" prop="contractBody">
</el-col> <el-input v-model="formData.contractBody" disabled type="textarea" rows="5" placeholder="" />
<el-col :span="24"> </el-form-item>
<el-form-item label="合同补充协议" prop="contractAgreement"> </el-col>
<el-input v-model="formData.contractAgreement" disabled type="textarea" rows="5" placeholder="" /> </template>
</el-form-item> <template #contractAgreement>
</el-col> <el-col :span="24">
<el-form-item label="合同补充协议" prop="contractAgreement">
</el-row> <el-input v-model="formData.contractAgreement" disabled type="textarea" rows="5" placeholder="" />
</el-form-item>
</el-col>
</template>
<template #other5>
<!-- 子表的表单 --> <!-- 子表的表单 -->
<ContentWrap style="border: none;font-weight:700"> <ContentWrap style="border: none;font-weight:700">
产品清单 产品清单
</ContentWrap> </ContentWrap>
<ContentWrap> <ContentWrap>
<ContractProductForm <ContractProductForm
:type="1" :type="1"
ref="productFormRef" :formFields="formFields"
:products="formData.products" ref="productFormRef"
:disabled="disabled" :products="formData.products"
/> :disabled="disabled"
</ContentWrap> />
<ContentWrap style="border: none;font-weight:700"> </ContentWrap>
合同甲方关联单位 <ContentWrap style="border: none;font-weight:700">
</ContentWrap> 合同甲方关联单位
<ContentWrap> </ContentWrap>
<ContractAAuthorizedCompanyForm :type="1" ref="contractAAuthorizedCompanyFormRef" :data="formData.contractAAuthorizedCompanys" :contract-id="formData.id" /> <el-col :span="24">
</ContentWrap> <ContentWrap>
<ContentWrap style="border: none;font-weight:700"> <ContractAAuthorizedCompanyForm :type="1" :formFields="formFields" ref="contractAAuthorizedCompanyFormRef" :data="formData.contractAAuthorizedCompanys" :contract-id="formData.id" />
合同甲方授权人信息 </ContentWrap>
</ContentWrap> </el-col>
<ContentWrap> <ContentWrap style="border: none;font-weight:700">
<ContractAAuthorizedPersonForm :type="1" ref="contractAAuthorizedPersonFormRef" :contract-id="formData.id" /> 合同甲方授权人信息
</ContentWrap> </ContentWrap>
<ContentWrap style="border: none;font-weight:700"> <el-col :span="24">
合同乙方授权人信息 <ContentWrap>
</ContentWrap> <ContractAAuthorizedPersonForm :type="1" :formFields="formFields" ref="contractAAuthorizedPersonFormRef" :contract-id="formData.id" />
<ContentWrap> </ContentWrap>
<ContractBAuthorizedPersonForm :type="1" ref="contractBAuthorizedPersonFormRef" :userOptions="userOptions" :contract-id="formData.id" /> </el-col>
</ContentWrap> <ContentWrap style="border: none;font-weight:700">
</el-form> 合同乙方授权人信息
</ContentWrap>
<el-col :span="24">
<ContentWrap>
<ContractBAuthorizedPersonForm :type="1" :formFields="formFields" ref="contractBAuthorizedPersonFormRef" :userOptions="userOptions" :contract-id="formData.id" />
</ContentWrap>
</el-col>
</template>
</processForm>
<!-- 显示在其他页面时的判断type --> <!-- 显示在其他页面时的判断type -->
</ContentWrap> </ContentWrap>
</template> </template>
@ -501,7 +590,9 @@ import { propTypes } from '@/utils/propTypes'
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict' import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { defaultProps, handleTree } from '@/utils/tree' import { defaultProps, handleTree } from '@/utils/tree'
import * as DeptApi from '@/api/system/dept' import * as DeptApi from '@/api/system/dept'
import { getLimitForm } from '@/api/bpm/form'
const isTrue = ref(false)
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const { proxy }: any = getCurrentInstance(); const { proxy }: any = getCurrentInstance();
@ -515,6 +606,52 @@ const dialogTitle = ref('') // 弹窗的标题
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
const formType = ref('') // create - update - const formType = ref('') // create - update -
const deptTree = ref() // const deptTree = ref() //
const formFields = ref({
other: 1,
customerId: 1,
no: 1,
quotationId: 1,
pricingUserId: 1,
creditLimit: 1,
creditMethod: 1,
creditCalcCycle: 1,
quotationTimes: 1,
paymentTerm: 1,
onlinePrice: 1,
totalPrice: 1,
other1: 1,
customerId1: 1,
legalPersonName: 1,
creditNo: 1,
regType: 1,
actualCapital: 1,
socialEmployeeNum: 1,
registeredAddress: 1,
other2: 1,
partnerCompanyId: 1,
bankName: 1,
bankAccount: 1,
legalRepresentative: 1,
ownerUserId: 1,
deptId: 1,
other3: 1,
contractType: 1,
startTime: 1,
endTime: 1,
contractTerm: 1,
statementDate: 1,
lastPayDate: 1,
penaltyRate: 1,
latePaymentRate: 1,
other4: 1,
settleMethod: 1,
afterSaleUserId: 1,
collUserId: 1,
contractBody: 1,
contractAgreement: 1,
other5: 1,
})
const formData = ref({ const formData = ref({
id: undefined, id: undefined,
name: undefined, name: undefined,
@ -833,11 +970,36 @@ const getContactOptions = computed(() =>
) )
const route = useRoute(); const route = useRoute();
//
const getLimit = async () => {
let data = {
modelNodeId: route.query.taskDefinitionKey,
processDefinitionId: route.query.processDefinitionId
}
let field = await getLimitForm(data)
for(let key in formFields.value) {
if(formFields.value.hasOwnProperty(key)) {
field.fields.map( v => {
let newKey = v.field
if(v.field.indexOf('.') > -1) {
newKey = v.field.split('.')[0] + v.field.split('.')[1]
}
if(newKey === key) formFields.value[key] = v.permission
})
}
}
}
onMounted(async () => { onMounted(async () => {
isTrue.value = !!route.query.isDetail
formType.value = props.id || route.query.id formType.value = props.id || route.query.id
if (formType.value) await open(formType.value) if (formType.value) await open(formType.value)
if(route.query.processDefinitionId) getLimit()
// //
customerList.value = await CustomerApi.getCustomerSimpleList() customerList.value = await CustomerApi.getCustomerSimpleList()
// //

View File

@ -70,6 +70,23 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="维护人" prop="maintainer">
<el-select
class="w-1/1"
placeholder="请选择维护人"
v-model="formData.maintainer"
filterable
>
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item label="合作地区" prop="cooperationArea"> <el-form-item label="合作地区" prop="cooperationArea">
<el-select v-model="formData.cooperationArea" filterable placeholder="请选择合作地区" class="w-1/1"> <el-select v-model="formData.cooperationArea" filterable placeholder="请选择合作地区" class="w-1/1">
<el-option <el-option
@ -80,7 +97,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col> -->
<el-col :span="12"> <el-col :span="12">
<el-form-item label="法人代表" prop="legalPersonName"> <el-form-item label="法人代表" prop="legalPersonName">
<el-input v-model="formData.legalPersonName" disabled placeholder="" /> <el-input v-model="formData.legalPersonName" disabled placeholder="" />
@ -88,6 +105,7 @@
</el-col> </el-col>
</el-row> </el-row>
<el-row> <el-row>
<!-- <el-col :span="12"> <!-- <el-col :span="12">
<el-form-item label="负责人" prop="ownerUserId"> <el-form-item label="负责人" prop="ownerUserId">
<el-select <el-select
@ -236,6 +254,86 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12">
<el-form-item label="客户行业" prop="industryId">
<el-select v-model="formData.industryId" placeholder="请选择客户行业" >
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="服务对接人" prop="servicor">
<el-select
class="w-1/1"
placeholder="请选择服务对接人"
v-model="formData.servicor"
filterable
>
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="技术对接人" prop="technicalLead">
<el-select
class="w-1/1"
placeholder="请选择技术对接人"
v-model="formData.technicalLead"
filterable
>
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="结算对接人" prop="settlementLead">
<el-select
class="w-1/1"
placeholder="请选择结算对接人"
v-model="formData.settlementLead"
filterable
>
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="签约人" prop="contractor">
<el-select
class="w-1/1"
placeholder="请选择签约人"
v-model="formData.contractor"
filterable
>
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.nickname"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="12"> <!-- <el-col :span="12">
<el-form-item label="地址" prop="areaId"> <el-form-item label="地址" prop="areaId">
<el-cascader <el-cascader
@ -319,6 +417,7 @@ const formData = ref({
registerCapital: undefined, registerCapital: undefined,
website: undefined, website: undefined,
registeredAddress: undefined, registeredAddress: undefined,
cooperationArea: 1
}) })
const formRules = reactive({ const formRules = reactive({
name: [{ required: true, message: '客户名称不能为空', trigger: 'blur' }], name: [{ required: true, message: '客户名称不能为空', trigger: 'blur' }],

View File

@ -16,7 +16,7 @@
</div> </div>
</div> </div>
<ContentWrap class="mt-10px"> <ContentWrap class="mt-10px">
<el-descriptions :column="5" direction="vertical"> <!-- <el-descriptions :column="5" direction="vertical">
<el-descriptions-item label="客户级别"> <el-descriptions-item label="客户级别">
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="customer.level" /> <dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="customer.level" />
</el-descriptions-item> </el-descriptions-item>
@ -27,7 +27,46 @@
<el-descriptions-item label="创建时间"> <el-descriptions-item label="创建时间">
{{ formatDate(customer.createTime) }} {{ formatDate(customer.createTime) }}
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions> -->
<!-- <el-collapse v-model="activeNames" class=""> -->
<el-descriptions :column="4">
<el-descriptions-item label="客户名称">
{{ customer.name }}
</el-descriptions-item>
<el-descriptions-item label="成交状态">{{ customer.dealStatus ? '已成交' : '未成交' }}</el-descriptions-item>
<el-descriptions-item label="客户来源">
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="customer.source" />
</el-descriptions-item>
<!-- <el-descriptions-item label="客户级别">
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="customer.level" />
</el-descriptions-item> -->
<el-descriptions-item label="合作类型"><!-- {{ getName(getIntDictOptions(DICT_TYPE.CRM_COOPERATION_TYPE),customer.cooperationType) }} -->
<dict-tag :type="DICT_TYPE.CRM_COOPERATION_TYPE" :value="customer.cooperationType" />
</el-descriptions-item>
<!-- <el-descriptions-item label="合作地区">{{ getName(getIntDictOptions(DICT_TYPE.CRM_COOPERATION_AREA),customer.cooperationArea) }}</el-descriptions-item> -->
<!-- <el-descriptions-item label="行业">{{ getName(getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_INDUSTRY),customer.industryId) }}</el-descriptions-item> -->
<el-descriptions-item label="行业">
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="customer.industryId" />
</el-descriptions-item>
<el-descriptions-item label=" 拓展人">{{ customer.developerName }}</el-descriptions-item>
<!-- <el-descriptions-item label="线索拓展人">{{ customer.clueDeveloperName }}</el-descriptions-item>-->
<!-- <el-descriptions-item label="协助人">{{ customer.assistName }}</el-descriptions-item> -->
=<el-descriptions-item label="维护人">{{ customer.maintainerName }}</el-descriptions-item>
<el-descriptions-item label="签约人">{{ customer.contractorName }}</el-descriptions-item>
<el-descriptions-item label="负责人">{{ customer.ownerUserName }}</el-descriptions-item>
<el-descriptions-item label="技术对接人">{{ customer.contractorName }}</el-descriptions-item>
<el-descriptions-item label="服务对接人">{{ customer.servicorName }}</el-descriptions-item>
<el-descriptions-item label="结算对接人">{{ customer.settlementLeadName }}</el-descriptions-item>
<el-descriptions-item label="创建时间">{{ formatDate(customer.createTime) }}</el-descriptions-item>
<!-- <el-descriptions-item label="手机号">{{ customer.mobile }}</el-descriptions-item>
<el-descriptions-item label="电话">{{ customer.telephone }}</el-descriptions-item>
<el-descriptions-item label="邮箱">{{ customer.email }}</el-descriptions-item>-->
</el-descriptions>
<!-- </el-collapse> -->
</ContentWrap> </ContentWrap>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>

View File

@ -11,7 +11,7 @@
<!-- <el-button v-if="permissionListRef?.validateOwnerUser" type="primary" @click="transfer"> <!-- <el-button v-if="permissionListRef?.validateOwnerUser" type="primary" @click="transfer">
转移 转移
</el-button> --> </el-button> -->
<el-button v-if="permissionListRef?.validateWrite" @click="handleUpdateDealStatus"> <!-- <el-button v-if="permissionListRef?.validateWrite" @click="handleUpdateDealStatus">
更改成交状态 更改成交状态
</el-button> </el-button>
<el-button <el-button
@ -25,7 +25,7 @@
@click="handleLock" @click="handleLock"
> >
锁定 锁定
</el-button> </el-button> -->
<el-button v-if="!customer.ownerUserId" type="primary" @click="handleReceive"> </el-button> <el-button v-if="!customer.ownerUserId" type="primary" @click="handleReceive"> </el-button>
<el-button v-if="!customer.ownerUserId" type="primary" @click="handleDistributeForm"> <el-button v-if="!customer.ownerUserId" type="primary" @click="handleDistributeForm">
分配 分配
@ -42,9 +42,9 @@
<el-tab-pane label="跟进记录"> <el-tab-pane label="跟进记录">
<FollowUpList :biz-id="customerId" :biz-type="BizTypeEnum.CRM_CUSTOMER" /> <FollowUpList :biz-id="customerId" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="基本信息"> <!-- <el-tab-pane label="基本信息">
<CustomerDetailsInfo :customer="customer" /> <CustomerDetailsInfo :customer="customer" />
</el-tab-pane> </el-tab-pane> -->
<el-tab-pane label="工商信息"> <el-tab-pane label="工商信息">
<CompanyDetailsInfo :customer="customer" /> <CompanyDetailsInfo :customer="customer" />
</el-tab-pane> </el-tab-pane>
@ -69,9 +69,9 @@
<el-tab-pane label="合同" lazy> <el-tab-pane label="合同" lazy>
<ContractList :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" /> <ContractList :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="回访" lazy> <!-- <el-tab-pane label="回访" lazy>
<ReturnVisitrecord :biz-id="customerId" :biz-type="BizTypeEnum.CRM_CUSTOMER" /> <ReturnVisitrecord :biz-id="customerId" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
</el-tab-pane> </el-tab-pane> -->
<!-- <el-tab-pane label="回款" lazy> <!-- <el-tab-pane label="回款" lazy>
<ReceivablePlanList :customer-id="customer.id!" @create-receivable="createReceivable" /> <ReceivablePlanList :customer-id="customer.id!" @create-receivable="createReceivable" />
<ReceivableList ref="receivableListRef" :customer-id="customer.id!" /> <ReceivableList ref="receivableListRef" :customer-id="customer.id!" />

View File

@ -44,22 +44,37 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- <el-form-item label="客户级别" prop="level"> <el-form-item label="创建时间" prop="timeType">
<el-select <el-select
v-model="queryParams.level" v-model="queryParams.timeType"
class="!w-240px" class="!w-240px"
clearable clearable
placeholder="请选择客户级别" placeholder="请选择时间类型"
> >
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_LEVEL)" v-for="dict in getIntDictOptions(DICT_TYPE.TIME_TYPE)"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item>--> </el-form-item>
<!-- <el-form-item label="客户来源" prop="source"> <el-form-item label="合作状态" prop="customerStatus">
<el-select
v-model="queryParams.customerStatus"
class="!w-240px"
clearable
placeholder="请选择合作状态"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_STSTUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="客户来源" prop="source">
<el-select <el-select
v-model="queryParams.source" v-model="queryParams.source"
class="!w-240px" class="!w-240px"
@ -73,7 +88,7 @@
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item>--> </el-form-item>
<el-form-item> <el-form-item>
<el-button @click="handleQuery"> <el-button @click="handleQuery">
<Icon class="mr-5px" icon="ep:search" /> <Icon class="mr-5px" icon="ep:search" />
@ -113,46 +128,76 @@
<el-tab-pane label="下属负责的" name="3" /> <el-tab-pane label="下属负责的" name="3" />
</el-tabs> </el-tabs>
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true"> <el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true">
<el-table-column align="center" fixed="left" label="客户名称" prop="name" width="250"> <el-table-column align="center" fixed="left" label="名称" prop="name" width="250">
<template #default="scope"> <template #default="scope">
<el-link :underline="false" type="primary" @click="openDetail(scope.row.id)"> <el-link :underline="false" type="primary" @click="openDetail(scope.row.id)">
{{ scope.row.name }} {{ scope.row.name }}
</el-link> </el-link>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" label="合作状态" prop="source" width="100">
<template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_STSTUS" :value="scope.row.customerStatus" />
</template>
</el-table-column>
<el-table-column align="center" label="客户来源" prop="source" width="100"> <el-table-column align="center" label="客户来源" prop="source" width="100">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="scope.row.source" /> <dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="scope.row.source" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" label="客户状态" prop="serviceStatus" width="120" /> <!-- <el-table-column align="center" label="线索人" prop="clueDeveloperName" width="120">
<!-- <el-table-column align="center" label="电话" prop="telephone" width="130" />
<el-table-column align="center" label="邮箱" prop="email" width="180" /> -->
<el-table-column align="center" label="客户级别" prop="level" width="145">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="scope.row.level" /> {{scope.row.clueDeveloperName || '暂无'}}
</template> </template>
</el-table-column> </el-table-column> -->
<el-table-column align="center" label="商务拓展人" prop="developerName" width="120"> <el-table-column align="center" label="拓展人" prop="developerName" width="120" />
<template #default="scope"> <el-table-column align="center" label="签约人" prop="contractorName" width="120">
{{scope.row.developerName || '暂无'}}
</template>
</el-table-column>
<el-table-column align="center" label="商务签约人" prop="contractorName" width="120">
<template #default="scope"> <template #default="scope">
{{scope.row.contractorName || '暂无'}} {{scope.row.contractorName || '暂无'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" label="维护人" prop="maintainerName" width="120">
<template #default="scope">
{{scope.row.maintainerName || '暂无'}}
</template>
</el-table-column>
<el-table-column align="center" label="技术对接人" prop="technicalLeadName" width="120" />
<el-table-column align="center" label="服务对接人" prop="servicorName" width="120" />
<el-table-column align="center" label="结算对接人" prop="settlementLeadName" width="120" />
<el-table-column align="center" label="行业" prop="industryId" width="100">
<template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="scope.row.industryId" />
</template>
</el-table-column>
<el-table-column align="center" label="公司类型" prop="regType" width="250" />
<el-table-column align="center" label="距离进入公海天数" prop="poolDay" width="140">
<template #default="scope"> {{ scope.row.poolDay }} </template>
</el-table-column>
<el-table-column align="center" label="负责人" prop="ownerUserName" width="100px" />
<el-table-column align="center" label="所属部门" prop="ownerUserDeptName" width="100px" />
<el-table-column
:formatter="dateFormatter"
align="center"
label="创建时间"
prop="createTime"
width="180px"
/>
<el-table-column align="center" label="创建人" prop="creatorName" width="100px" />
<!-- <el-table-column align="center" label="客户状态" prop="serviceStatus" width="120" /> -->
<!-- <el-table-column align="center" label="电话" prop="telephone" width="130" />
<el-table-column align="center" label="邮箱" prop="email" width="180" /> -->
<!-- <el-table-column align="center" label="客户级别" prop="level" width="145">
<template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="scope.row.level" />
</template>
</el-table-column>
<el-table-column align="center" label="归属部门" prop="ownerUserDeptName" width="120"> <el-table-column align="center" label="归属部门" prop="ownerUserDeptName" width="120">
<template #default="scope"> <template #default="scope">
{{scope.row.ownerUserDeptName || '暂无'}} {{scope.row.ownerUserDeptName || '暂无'}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column align="center" label="售后维护人" prop="maintainerName" width="120">
<template #default="scope">
{{scope.row.maintainerName || '暂无'}}
</template>
</el-table-column>
<el-table-column align="center" label="协助人" prop="assistName" width="250"> <el-table-column align="center" label="协助人" prop="assistName" width="250">
<template #default="scope"> <template #default="scope">
{{scope.row.assistName || '暂无'}} {{scope.row.assistName || '暂无'}}
@ -211,7 +256,7 @@
prop="createTime" prop="createTime"
width="180px" width="180px"
/> />
<el-table-column align="center" label="创建人" prop="creatorName" width="100px" /> <el-table-column align="center" label="创建人" prop="creatorName" width="100px" /> -->
<el-table-column align="center" fixed="right" label="操作" min-width="150" v-if="activeName != 2"> <el-table-column align="center" fixed="right" label="操作" min-width="150" v-if="activeName != 2">
<template #default="scope"> <template #default="scope">
<el-button <el-button

View File

@ -2,7 +2,7 @@
<template> <template>
<!-- 操作栏 --> <!-- 操作栏 -->
<el-row class="mb-10px" justify="end" v-if="!type"> <el-row class="mb-10px" justify="end" v-if="!type">
<el-button @click="openForm"> <el-button @click="openForm" type="primary">
<Icon class="mr-5px" icon="ep:edit" /> <Icon class="mr-5px" icon="ep:edit" />
写跟进 写跟进
</el-button> </el-button>

View File

@ -164,6 +164,18 @@
<ContentWrap style="border: none; font-weight: 700">需求信息</ContentWrap> <ContentWrap style="border: none; font-weight: 700">需求信息</ContentWrap>
<el-row> <el-row>
<el-col :span="8">
<el-form-item label="合作类型" prop="partnerCompanyId">
<el-select v-model="formData.partnerCompanyId" clearable placeholder="请选择合作主体" @change="onPartnerChange">
<el-option
v-for="dict in orgList"
:key="dict.id"
:label="dict.orgName"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="合作主体" prop="partnerCompanyId"> <el-form-item label="合作主体" prop="partnerCompanyId">
<el-select v-model="formData.partnerCompanyId" clearable placeholder="请选择合作主体" @change="onPartnerChange"> <el-select v-model="formData.partnerCompanyId" clearable placeholder="请选择合作主体" @change="onPartnerChange">
@ -577,7 +589,6 @@ const changeQuotationTimes = async() => {
let num = await QuotationApi.getServerFee(data) let num = await QuotationApi.getServerFee(data)
formData.value.QuotationTimes = num.quotationProducts formData.value.QuotationTimes = num.quotationProducts
console.log('%csrc/views/crm/quotation/QuotationForm.vue:574 formData.value.QuotationTimes', 'color: #007acc;', formData.value.QuotationTimes);
} }
} }

View File

@ -7,92 +7,116 @@
label-width="0px" label-width="0px"
:inline-message="true" :inline-message="true"
> >
<el-table :data="formData" class="-mt-10px"> <AuthTable :data="formData" :fields="formFields" class="-mt-10px">
<el-table-column label="序号" type="index" width="100" /> <template #productsother>
<!-- <el-table-column label="产品名称" min-width="150"> <el-table-column label="序号" type="index" width="100" />
<template #default="{ row, $index }"> <!-- <el-table-column label="产品名称" min-width="150">
<el-form-item :prop="`${$index}.productName`" :rules="formRules.productName" class="mb-0px!"> <template #default="{ row, $index }">
{{row.productName}} <el-form-item :prop="`${$index}.productName`" :rules="formRules.productName" class="mb-0px!">
</el-form-item> {{row.productName}}
</el-form-item>
</template>
</el-table-column> -->
</template> </template>
</el-table-column> --> <template #productscategory>
<el-table-column label="产品类型" align="center" min-width="150"> <el-table-column label="产品类型" align="center" min-width="150">
<template #default="{ row }"> <template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_CATEGORY" :value="row.category" /> <dict-tag :type="DICT_TYPE.CRM_PRODUCT_CATEGORY" :value="row.category" />
</template> </template>
</el-table-column> </el-table-column>
</template>
<template #productsdetailType>
<el-table-column label="产品明细类型" align="center" min-width="190">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_DETAIL_TYPE" :value="row.detailType" />
</template>
</el-table-column>
</template>
<template #productsproductUnit>
<el-table-column label="产品单位" align="center" min-width="150">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_UNIT" :value="row.productUnit" />
</template>
</el-table-column>
</template>
<template #productsbasicServiceFee>
<el-table-column label="基础服务费(元)" min-width="130">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.basicServiceFee`" :rules="formRules.basicServiceFee" class="mb-0px!">
<!-- <el-input v-model="row.basicServiceFee" oninput="value=value.match(/^\d+(?:\.\d{0,2})?/)" placeholder="" /> -->
{{row.basicServiceFee}}
</el-form-item>
</template>
</el-table-column>
</template>
<template #productsadvancePaymentServiceFee>
<el-table-column label="垫资服务费(元)" min-width="140">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.advancePaymentServiceFee`" :rules="formRules.offlinePrice" class="mb-0px!">
<!-- <el-input v-model="row.offlinePrice" oninput="value=value.match(/^\d+(?:\.\d{0,2})?/)" placeholder="" /> -->
{{row.advancePaymentServiceFee}}
</el-form-item>
</template>
</el-table-column>
</template>
<template #productsbookingPaymentServiceFee>
<el-table-column label="代订服务费(元)" min-width="130">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.bookingPaymentServiceFee`" :rules="formRules.advancePaymentServiceFee" class="mb-0px!">
{{row.bookingPaymentServiceFee}}
</el-form-item>
</template>
</el-table-column>
</template>
<template #productsbillSortingServiceFee>
<el-table-column label="票据分拣服务费(元)" min-width="130">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.billSortingServiceFee`" :rules="formRules.billSortingServiceFee" class="mb-0px!">
{{row.billSortingServiceFee}}
</el-form-item>
</template>
</el-table-column>
</template>
<template #productstotalServiceFee>
<el-table-column label="服务费收入合计(元)" min-width="130">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.totalServiceFee`" :rules="formRules.totalServiceFee" class="mb-0px!">
{{row.totalServiceFee}}
</el-form-item>
</template>
</el-table-column>
</template>
<template #productsproductInvoice>
<el-table-column label="产品票据" align="center" min-width="150">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_INVOICE" :value="row.productInvoice" />
</template>
</el-table-column>
</template>
<template #productsproductInvoiceItem>
<el-table-column label="产品开具项目" align="center" min-width="250">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_INVOICE_ITEMS" :value="row.productInvoiceItem" />
</template>
</el-table-column>
</template>
<template #productsserviceInvoice>
<el-table-column label="服务费票据" align="center" min-width="150">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_SERVICE_FEE_INVOICE" :value="row.serviceInvoice" />
</template>
</el-table-column>
</template>
<template #productsserviceInvoiceItem>
<el-table-column label="服务开具项目" align="center" min-width="250">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_SERVICE_FEE_INVOICE_ITEMS" :value="row.serviceInvoiceItem" />
</template>
</el-table-column>
</template>
<el-table-column label="产品明细类型" align="center" min-width="190"> </AuthTable>
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_DETAIL_TYPE" :value="row.detailType" />
</template>
</el-table-column>
<el-table-column label="产品单位" align="center" min-width="150">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_UNIT" :value="row.productUnit" />
</template>
</el-table-column>
<el-table-column label="基础服务费(元)" min-width="130">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.basicServiceFee`" :rules="formRules.basicServiceFee" class="mb-0px!">
<!-- <el-input v-model="row.basicServiceFee" oninput="value=value.match(/^\d+(?:\.\d{0,2})?/)" placeholder="" /> -->
{{row.basicServiceFee}}
</el-form-item>
</template>
</el-table-column>
<el-table-column label="垫资服务费(元)" min-width="140">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.advancePaymentServiceFee`" :rules="formRules.offlinePrice" class="mb-0px!">
<!-- <el-input v-model="row.offlinePrice" oninput="value=value.match(/^\d+(?:\.\d{0,2})?/)" placeholder="" /> -->
{{row.advancePaymentServiceFee}}
</el-form-item>
</template>
</el-table-column>
<el-table-column label="代订服务费(元)" min-width="130">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.bookingPaymentServiceFee`" :rules="formRules.advancePaymentServiceFee" class="mb-0px!">
{{row.bookingPaymentServiceFee}}
</el-form-item>
</template>
</el-table-column>
<el-table-column label="票据分拣服务费(元)" min-width="130">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.billSortingServiceFee`" :rules="formRules.billSortingServiceFee" class="mb-0px!">
{{row.billSortingServiceFee}}
</el-form-item>
</template>
</el-table-column>
<el-table-column label="服务费收入合计(元)" min-width="130">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.totalServiceFee`" :rules="formRules.totalServiceFee" class="mb-0px!">
{{row.totalServiceFee}}
</el-form-item>
</template>
</el-table-column>
<el-table-column label="产品票据" align="center" min-width="150">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_INVOICE" :value="row.productInvoice" />
</template>
</el-table-column>
<el-table-column label="产品开具项目" align="center" min-width="250">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_INVOICE_ITEMS" :value="row.productInvoiceItem" />
</template>
</el-table-column>
<el-table-column label="服务费票据" align="center" min-width="150">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_SERVICE_FEE_INVOICE" :value="row.serviceInvoice" />
</template>
</el-table-column>
<el-table-column label="服务开具项目" align="center" min-width="250">
<template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_SERVICE_FEE_INVOICE_ITEMS" :value="row.serviceInvoiceItem" />
</template>
</el-table-column>
</el-table>
</el-form> </el-form>
<el-row justify="center" class="mt-3"> <el-row justify="center" class="mt-3">
<!-- <el-button @click="handleAdd" round>+ 添加CRM 报价产品关联</el-button> --> <!-- <el-button @click="handleAdd" round>+ 添加CRM 报价产品关联</el-button> -->
@ -108,8 +132,8 @@ const props = defineProps<{
quotationId: undefined, // quotationId: undefined, //
businessId: undefined, businessId: undefined,
billTemplateId: undefined, billTemplateId: undefined,
products: undefined products: undefined,
formFields: {},
}>() }>()
const formLoading = ref(false) // const formLoading = ref(false) //
const formData = ref([]) const formData = ref([])

View File

@ -1,6 +1,6 @@
<template> <template>
<el-table :data="formData" class="-mt-10px" v-loading="loading" :summary-method="getSummaries" <el-table :data="formData" class="-mt-10px" v-loading="loading" :summary-method="getSummaries"
show-summary> show-summary :span-method="arraySpanMethod">
<el-table-column label="产品类型" align="center" min-width="150"> <el-table-column label="产品类型" align="center" min-width="150">
<template #default="{ row }"> <template #default="{ row }">
<dict-tag :type="DICT_TYPE.CRM_PRODUCT_CATEGORY" :value="row.category" /> <dict-tag :type="DICT_TYPE.CRM_PRODUCT_CATEGORY" :value="row.category" />
@ -55,7 +55,6 @@
</el-table-column> </el-table-column>
<el-table-column label="您的分润收入" align="center" prop="revenueAnalysisVO.profitSharingIncome" min-width="250"> <el-table-column label="您的分润收入" align="center" prop="revenueAnalysisVO.profitSharingIncome" min-width="250">
<template #default="{ row }"> <template #default="{ row }">
<!-- <dict-tag :type="DICT_TYPE.CRM_SERVICE_FEE_INVOICE_ITEMS" :value="row.serviceInvoiceItem" /> -->
{{row.revenueAnalysisVO.profitSharingIncome}} {{row.revenueAnalysisVO.profitSharingIncome}}
</template> </template>
</el-table-column> </el-table-column>
@ -108,9 +107,7 @@ const getSummaries = (param: SummaryMethodProps<Product>) => {
} }
const property = column.property const property = column.property
// if(property === 'evenueAnalysisVO.profitSharingIncome' || property === 'revenueAnalysisVO.profitSharingRatio') {
// }
const isNestedField = property ? property.includes('.') : '' const isNestedField = property ? property.includes('.') : ''
let values: number[] = [] let values: number[] = []
@ -129,6 +126,8 @@ const getSummaries = (param: SummaryMethodProps<Product>) => {
let total = `${values.reduce((prev, curr) => { let total = `${values.reduce((prev, curr) => {
const value = Number(curr) const value = Number(curr)
if (!Number.isNaN(value)) { if (!Number.isNaN(value)) {
if(property === 'revenueAnalysisVO.profitSharingIncome' || property === 'revenueAnalysisVO.profitSharingRatio') return value
return prev + value return prev + value
} else { } else {
return prev return prev
@ -152,6 +151,10 @@ const getData = async (data) => {
loading.value = true loading.value = true
try { try {
let list = await QuotationApi.getRevenueList(data) let list = await QuotationApi.getRevenueList(data)
list.quotationProducts.forEach(v => {
v.revenueAnalysisVO.profitSharingRatio = list.totalRevenueAnalysis.profitSharingRatio
v.revenueAnalysisVO.profitSharingIncome = list.totalRevenueAnalysis.profitSharingIncome
})
formData.value = list.quotationProducts formData.value = list.quotationProducts
} finally { } finally {
loading.value = false loading.value = false
@ -163,4 +166,26 @@ const getName = (opt, val) => {
} }
defineExpose({ getData }) defineExpose({ getData })
const arraySpanMethod = ({
row,
column,
rowIndex,
columnIndex,
}) => {
if (column.property === 'revenueAnalysisVO.profitSharingIncome' || column.property === 'revenueAnalysisVO.profitSharingRatio') {
if (rowIndex=== 0) {
return {
rowspan: formData.value.length,
colspan: 1,
}
} else {
return {
rowspan: 0,
colspan: 0,
}
}
}
}
</script> </script>

View File

@ -8,7 +8,10 @@
:inline="true" :inline="true"
label-width="110px" label-width="110px"
> >
<el-form-item label="报价单编号" prop="no"> <el-form-item label="客户" prop="customerId">
<SelectComponent :customerList="customerList" class="!w-240px" v-model="queryParams.customerId" />
</el-form-item>
<!-- <el-form-item label="报价单编号" prop="no">
<el-input <el-input
v-model="queryParams.no" v-model="queryParams.no"
placeholder="请输入报价单编号" placeholder="请输入报价单编号"
@ -16,24 +19,9 @@
@keyup.enter="handleQuery" @keyup.enter="handleQuery"
class="!w-240px" class="!w-240px"
/> />
</el-form-item> </el-form-item> -->
<el-form-item label="客户" prop="customerId">
<SelectComponent :customerList="customerList" class="!w-240px" v-model="queryParams.customerId" /> <!-- <el-form-item label="商机负责人" prop="ownerUserId">
<!-- <el-select
v-model="queryParams.customerId"
placeholder="请选择客户"
clearable
class="!w-240px"
>
<el-option
v-for="dict in customerList"
:key="dict.id"
:label="dict.name"
:value="dict.id"
/>
</el-select> -->
</el-form-item>
<el-form-item label="商机负责人" prop="ownerUserId">
<el-select <el-select
v-model="queryParams.ownerUserId" v-model="queryParams.ownerUserId"
placeholder="请选择商机负责人" placeholder="请选择商机负责人"
@ -47,7 +35,7 @@
:value="dict.id" :value="dict.id"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item> -->
<el-form-item label="客户确认状态" prop="confirmStatus"> <el-form-item label="客户确认状态" prop="confirmStatus">
<el-select <el-select
v-model="queryParams.confirmStatus" v-model="queryParams.confirmStatus"
@ -63,7 +51,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="创建时间" prop="createTime"> <!-- <el-form-item label="创建时间" prop="createTime">
<el-date-picker <el-date-picker
v-model="queryParams.createTime" v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss" value-format="YYYY-MM-DD HH:mm:ss"
@ -73,7 +61,7 @@
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]" :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-240px" class="!w-240px"
/> />
</el-form-item> </el-form-item> -->
<el-form-item> <el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
@ -85,7 +73,7 @@
> >
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button> </el-button>
<el-button <!-- <el-button
type="success" type="success"
plain plain
@click="handleExport" @click="handleExport"
@ -93,7 +81,7 @@
v-hasPermi="['crm:quotation:export']" v-hasPermi="['crm:quotation:export']"
> >
<Icon icon="ep:download" class="mr-5px" /> 导出 <Icon icon="ep:download" class="mr-5px" /> 导出
</el-button> </el-button> -->
</el-form-item> </el-form-item>
</el-form> </el-form>
</ContentWrap> </ContentWrap>
@ -106,14 +94,7 @@
<el-tab-pane label="下属负责的" name="3" /> <el-tab-pane label="下属负责的" name="3" />
</el-tabs> --> </el-tabs> -->
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="报价单编号" align="center" prop="no" width="200" > <el-table-column label="客户名称" align="center" prop="customerId" width="250">
<template #default="scope">
<el-link :underline="false" type="primary" @click="openDetail(scope.row.id)">
{{ scope.row.no }}
</el-link>
</template>
</el-table-column>
<el-table-column label="客户名称" align="center" prop="customerId" width="220">
<template #default="scope"> <template #default="scope">
<!-- <el-link <!-- <el-link
:underline="false" :underline="false"
@ -124,19 +105,32 @@
<!-- </el-link> --> <!-- </el-link> -->
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="报价单编号" align="center" prop="no" width="200" >
<template #default="scope">
<el-link :underline="false" type="primary" @click="openDetail(scope.row.id)">
{{ scope.row.no }}
</el-link>
</template>
</el-table-column>
<el-table-column label="商机负责人" align="center" prop="ownerUserId"> <el-table-column label="商机负责人" align="center" prop="ownerUserId">
<template #default="scope"> <template #default="scope">
<!-- <el-link
:underline="false"
type="primary"
@click="openContactDetail(scope.row.ownerUserId)"
>
{{ scope.row.ownerUserName }}
</el-link> -->
{{getName(userOptions, scope.row.creator)}} {{getName(userOptions, scope.row.creator)}}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="拓展人" align="center" prop="expandingUserId">
<template #default="scope">
{{getName(userOptions, scope.row.expandingUserId)}}
</template>
</el-table-column>
<el-table-column label="维护人" align="center" prop="ownerUserId">
<template #default="scope">
{{getName(userOptions, scope.row.maintenanceUserId)}}
</template>
</el-table-column>
<el-table-column label="账期" align="center" prop="paymentTerm" width="120"> <el-table-column label="账期" align="center" prop="paymentTerm" width="120">
<template #default="scope"> <template #default="scope">
<dict-tag :type="'payment_term'" :value="scope.row.paymentTerm" /> <dict-tag :type="'payment_term'" :value="scope.row.paymentTerm" />
@ -147,12 +141,13 @@
<dict-tag :type="'credit_method'" :value="scope.row.creditMethod" /> <dict-tag :type="'credit_method'" :value="scope.row.creditMethod" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="授信计算周期" align="center" prop="creditCalcCycle" width="120" /> <el-table-column label="项目难度" align="center" prop="projectDifficultyName" width="120" />
<!-- <el-table-column label="授信计算周期" align="center" prop="creditCalcCycle" width="120" /> -->
<!-- <template #default="scope"> <!-- <template #default="scope">
<dict-tag :type="DICT_TYPE.CREDIT_CALC_CYCLE" :value="scope.row.creditCalcCycle" /> <dict-tag :type="DICT_TYPE.CREDIT_CALC_CYCLE" :value="scope.row.creditCalcCycle" />
</template> </template>
</el-table-column> --> </el-table-column> -->
<el-table-column label="授信额度" align="center" prop="creditLimit" /> <el-table-column label="授信额度" align="center" prop="creditLimit" width="180" />
<el-table-column label="合作主体" align="center" prop="partnerCompanyName" /> <el-table-column label="合作主体" align="center" prop="partnerCompanyName" />
<el-table-column label="审批状态" align="center" prop="auditStatus" width="100"> <el-table-column label="审批状态" align="center" prop="auditStatus" width="100">
<template #default="scope"> <template #default="scope">

View File

@ -1,5 +1,5 @@
<template> <template>
<Dialog :title="dialogTitle" v-model="dialogVisible"> <ContentWrap>
<el-form <el-form
ref="formRef" ref="formRef"
:model="formData" :model="formData"
@ -7,44 +7,73 @@
label-width="100px" label-width="100px"
v-loading="formLoading" v-loading="formLoading"
> >
<el-form-item label="申请人ID" prop="userId">
<el-input v-model="formData.userId" placeholder="请输入申请人ID" /> <!-- <el-form-item label="工作流编号" prop="processInstanceId">
</el-form-item>
<el-form-item label="工作流编号" prop="processInstanceId">
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" /> <el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
</el-form-item> </el-form-item>
<el-form-item label="审批状态" prop="auditStatus"> <el-form-item label="审批状态" prop="auditStatus">
<el-radio-group v-model="formData.auditStatus"> <el-radio-group v-model="formData.auditStatus">
<el-radio value="1">请选择字典生成</el-radio> <el-radio value="1">请选择字典生成</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item> -->
<el-form-item label="证明类型(在职证明、实习证明)" prop="certificateType"> <el-row>
<el-select v-model="formData.certificateType" placeholder="请选择证明类型(在职证明、实习证明)"> <el-col :span="12">
<el-option <el-form-item label="证明类型" prop="certificateType">
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_CERTIFICATE_TYPE)" <el-select v-model="formData.certificateType" placeholder="请选择证明类型">
:key="dict.value" <el-option
:label="dict.label" v-for="dict in getIntDictOptions(DICT_TYPE.HRM_CERTIFICATE_TYPE)"
:value="dict.value" :key="dict.value"
/> :label="dict.label"
</el-select> :value="dict.value"
</el-form-item> />
<el-form-item label="申请日期" prop="applicationDate"> </el-select>
<el-date-picker </el-form-item>
v-model="formData.applicationDate" </el-col>
type="date" </el-row>
value-format="x" <el-row>
placeholder="选择申请日期" <el-col :span="12">
/> <el-form-item label="申请日期" prop="applicationDate">
</el-form-item> <el-date-picker
<el-form-item label="申请事由" prop="reason"> style="width:100%"
<el-input v-model="formData.reason" placeholder="请输入申请事由" /> v-model="formData.applicationDate"
</el-form-item> type="date"
value-format="x"
placeholder="选择申请日期"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请人" prop="userId">
<el-input v-model="formData.userId" placeholder="请输入申请人ID" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所在部门" prop="">
<el-input v-model="formData.reason" placeholder="请输入申请事由" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="身份证号" prop="">
<el-input v-model="formData.reason" placeholder="请输入申请事由" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属岗位" prop="">
<el-input v-model="formData.reason" placeholder="请输入申请事由" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请事由" prop="reason">
<el-input v-model="formData.reason" placeholder="请输入申请事由" />
</el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
<template #footer> <template #footer>
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button> <el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button> <el-button @click="dialogVisible = false"> </el-button>
</template> </template>
</Dialog> </ContentWrap>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict' import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
@ -52,10 +81,14 @@ import { CertificateRequestApi, CertificateRequestVO } from '@/api/hrm/certifica
/** 人事证明申请 表单 */ /** 人事证明申请 表单 */
defineOptions({ name: 'CertificateRequestForm' }) defineOptions({ name: 'CertificateRequestForm' })
import * as UserApi from '@/api/system/user'
import { propTypes } from '@/utils/propTypes'
import { useUserStore } from '@/store/modules/user'
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const props = defineProps({
id: propTypes.number.def(undefined),
})
const dialogVisible = ref(false) // const dialogVisible = ref(false) //
const dialogTitle = ref('') // const dialogTitle = ref('') //
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
@ -79,10 +112,7 @@ const formRules = reactive({
const formRef = ref() // Ref const formRef = ref() // Ref
/** 打开弹窗 */ /** 打开弹窗 */
const open = async (type: string, id?: number) => { const open = async (id?: number) => {
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm() resetForm()
// //
if (id) { if (id) {
@ -105,7 +135,7 @@ const submitForm = async () => {
formLoading.value = true formLoading.value = true
try { try {
const data = formData.value as unknown as CertificateRequestVO const data = formData.value as unknown as CertificateRequestVO
if (formType.value === 'create') { if (!formType.value) {
await CertificateRequestApi.createCertificateRequest(data) await CertificateRequestApi.createCertificateRequest(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
} else { } else {
@ -133,4 +163,18 @@ const resetForm = () => {
} }
formRef.value?.resetFields() formRef.value?.resetFields()
} }
/** 初始化 **/
const route = useRoute();
onMounted(async() => {
formType.value = props.id || route.query.id;
if (formType.value) {
open(formType.value)
} else {
formData.value.userId = useUserStore().getUser.id
}
//
userOptions.value = await UserApi.getSimpleUserList()
})
</script> </script>

View File

@ -8,7 +8,7 @@
:inline="true" :inline="true"
label-width="68px" label-width="68px"
> >
<el-form-item label="申请人ID" prop="userId"> <el-form-item label="申请人" prop="userId">
<el-input <el-input
v-model="queryParams.userId" v-model="queryParams.userId"
placeholder="请输入申请人ID" placeholder="请输入申请人ID"
@ -17,29 +17,11 @@
class="!w-240px" class="!w-240px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="工作流编号" prop="processInstanceId">
<el-input <el-form-item label="证明类型" prop="certificateType">
v-model="queryParams.processInstanceId"
placeholder="请输入工作流编号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="审批状态" prop="auditStatus">
<el-select
v-model="queryParams.auditStatus"
placeholder="请选择审批状态"
clearable
class="!w-240px"
>
<el-option label="请选择字典生成" value="" />
</el-select>
</el-form-item>
<el-form-item label="证明类型(在职证明、实习证明)" prop="certificateType">
<el-select <el-select
v-model="queryParams.certificateType" v-model="queryParams.certificateType"
placeholder="请选择证明类型(在职证明、实习证明)" placeholder="请选择证明类型"
clearable clearable
class="!w-240px" class="!w-240px"
> >
@ -62,33 +44,13 @@
class="!w-220px" class="!w-220px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="申请事由" prop="reason">
<el-input
v-model="queryParams.reason"
placeholder="请输入申请事由"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item> <el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button> <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button> <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
<el-button <el-button
type="primary" type="primary"
plain plain
@click="openForm('create')" @click="openFormAdd('create')"
v-hasPermi="['hrm:certificate-request:create']" v-hasPermi="['hrm:certificate-request:create']"
> >
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
@ -110,23 +72,14 @@
<ContentWrap> <ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="主键ID" align="center" prop="id" /> <el-table-column label="主键ID" align="center" prop="id" />
<el-table-column label="申请人ID" align="center" prop="userId" /> <el-table-column label="申请" align="center" prop="userId" />
<el-table-column label="工作流编号" align="center" prop="processInstanceId" /> <!-- <el-table-column label="审批状态" align="center" prop="auditStatus" /> -->
<el-table-column label="审批状态" align="center" prop="auditStatus" /> <el-table-column label="证明类型" align="center" prop="certificateType">
<el-table-column label="证明类型(在职证明、实习证明)" align="center" prop="certificateType">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.HRM_CERTIFICATE_TYPE" :value="scope.row.certificateType" /> <dict-tag :type="DICT_TYPE.HRM_CERTIFICATE_TYPE" :value="scope.row.certificateType" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="申请日期" align="center" prop="applicationDate" /> <el-table-column label="申请日期" align="center" prop="applicationDate" />
<el-table-column label="申请事由" align="center" prop="reason" />
<el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="操作" align="center" min-width="120px"> <el-table-column label="操作" align="center" min-width="120px">
<template #default="scope"> <template #default="scope">
<el-button <el-button
@ -158,7 +111,7 @@
</ContentWrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<CertificateRequestForm ref="formRef" @success="getList" /> <!-- <CertificateRequestForm ref="formRef" @success="getList" /> -->
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -166,7 +119,7 @@ import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download' import download from '@/utils/download'
import { CertificateRequestApi, CertificateRequestVO } from '@/api/hrm/certificaterequest' import { CertificateRequestApi, CertificateRequestVO } from '@/api/hrm/certificaterequest'
import CertificateRequestForm from './CertificateRequestForm.vue' // import CertificateRequestForm from './CertificateRequestForm.vue'
/** 人事证明申请 列表 */ /** 人事证明申请 列表 */
defineOptions({ name: 'CertificateRequest' }) defineOptions({ name: 'CertificateRequest' })
@ -217,8 +170,10 @@ const resetQuery = () => {
/** 添加/修改操作 */ /** 添加/修改操作 */
const formRef = ref() const formRef = ref()
const openForm = (type: string, id?: number) => { const router = useRouter() //
formRef.value.open(type, id) const { push } = useRouter()
const openFormAdd = () => {
push({ name: 'CertificateRequestAdd' })
} }
/** 删除按钮操作 */ /** 删除按钮操作 */

View File

@ -7,8 +7,8 @@
label-width="100px" label-width="100px"
v-loading="formLoading" v-loading="formLoading"
> >
<el-form-item label="需求类型:新增需求、替换需求、储备需求" prop="requestType"> <el-form-item label="需求类型" prop="requestType">
<el-select v-model="formData.requestType" placeholder="请选择需求类型:新增需求、替换需求、储备需求"> <el-select v-model="formData.requestType" placeholder="请选择需求类型">
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_REQUEST_TYPE)" v-for="dict in getIntDictOptions(DICT_TYPE.HRM_REQUEST_TYPE)"
:key="dict.value" :key="dict.value"
@ -17,8 +17,14 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="所属部门" prop="requestDeptId"> <el-form-item label="需求部门" prop="requestDeptId">
<el-input v-model="formData.requestDeptId" placeholder="请输入所属部门" /> <el-select v-model="formData.requestType" placeholder="请选择需求部门">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EMAND_DEPARTMENT)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-form-item> </el-form-item>
<el-form-item label="工作流编号" prop="processInstanceId"> <el-form-item label="工作流编号" prop="processInstanceId">
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" /> <el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
@ -35,9 +41,16 @@
</el-form-item> </el-form-item>
<el-form-item label="岗位id" prop="postId"> <el-form-item label="岗位id" prop="postId">
<el-input v-model="formData.postId" placeholder="请输入岗位id" /> <el-input v-model="formData.postId" placeholder="请输入岗位id" />
</el-form-item> <el-form-item label="岗位" prop="postIds">
<el-form-item label="需求岗位名称" prop="positionName"> <el-select v-model="formData.postIds" multiple placeholder="请选择">
<el-input v-model="formData.positionName" placeholder="请输入需求岗位名称" /> <el-option
v-for="item in postList"
:key="item.id"
:label="item.name"
:value="item.id!"
/>
</el-select>
</el-form-item>
</el-form-item> </el-form-item>
<el-form-item label="期望到岗日期" prop="expectedOnboard"> <el-form-item label="期望到岗日期" prop="expectedOnboard">
<el-input v-model="formData.expectedOnboard" placeholder="请输入期望到岗日期" /> <el-input v-model="formData.expectedOnboard" placeholder="请输入期望到岗日期" />
@ -45,16 +58,13 @@
<el-form-item label="需求人数" prop="requestedCount"> <el-form-item label="需求人数" prop="requestedCount">
<el-input v-model="formData.requestedCount" placeholder="请输入需求人数" /> <el-input v-model="formData.requestedCount" placeholder="请输入需求人数" />
</el-form-item> </el-form-item>
<el-form-item label="年龄范围18-2525-3530-45" prop="ageRange"> <!-- <el-form-item label="需求岗位名称" prop="positionName">
<el-input v-model="formData.ageRange" placeholder="请输入年龄范围18-2525-3530-45" /> <el-input v-model="formData.positionName" placeholder="请输入需求岗位名称" />
</el-form-item> </el-form-item> -->
<el-form-item label="薪资4k-7k5k-8k10k-15k" prop="monthlySalary"> <el-form-item label="婚姻状况" prop="maritalStatus">
<el-input v-model="formData.monthlySalary" type="textarea" placeholder="请输入薪资4k-7k5k-8k10k-15k" /> <el-select v-model="formData.maritalStatus" placeholder="请选择婚姻状况">
</el-form-item>
<el-form-item label="最低学历1=高中2=大专3=本科4=硕士5=博士" prop="minEducation">
<el-select v-model="formData.minEducation" placeholder="请选择最低学历1=高中2=大专3=本科4=硕士5=博士">
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EDUCATION)" v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MARITAL_STATUS)"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
@ -71,17 +81,41 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="婚姻状况:未婚、已婚、离异、丧偶" prop="maritalStatus"> <el-form-item label="薪资(月)" prop="monthlySalary">
<el-select v-model="formData.maritalStatus" placeholder="请选择婚姻状况:未婚、已婚、离异、丧偶"> <el-select v-model="formData.monthlySalary" placeholder="请选择薪资(月)">
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MARITAL_STATUS)" v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MONTHLY_SALARY)"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="从业经验" prop="experience"> <el-form-item label="年龄范围" prop="ageRange">
<el-select v-model="formData.monthlySalary" placeholder="请选择年龄范围">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_AGE_RANGE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="最低学历" prop="minEducation">
<el-select v-model="formData.minEducation" placeholder="请选择最低学历">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EDUCATION)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="行业年限" prop="minEducation">
<el-input v-model="formData.experience" placeholder="请输入从业经验" />
</el-form-item>
<el-form-item label="岗位年限" prop="experience">
<el-input v-model="formData.experience" placeholder="请输入从业经验" /> <el-input v-model="formData.experience" placeholder="请输入从业经验" />
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -97,10 +131,12 @@ import { RecruitmentRequestApi, RecruitmentRequestVO } from '@/api/hrm/recruitme
/** 招聘需求申请 表单 */ /** 招聘需求申请 表单 */
defineOptions({ name: 'RecruitmentRequestForm' }) defineOptions({ name: 'RecruitmentRequestForm' })
import * as PostApi from '@/api/system/post'
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const postList = ref([] as PostApi.PostVO[]) //
const dialogVisible = ref(false) // const dialogVisible = ref(false) //
const dialogTitle = ref('') // const dialogTitle = ref('') //
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
@ -198,4 +234,9 @@ const resetForm = () => {
} }
formRef.value?.resetFields() formRef.value?.resetFields()
} }
onMounted( async() => {
//
postList.value = await PostApi.getSimplePostList()
})
</script> </script>

View File

@ -8,10 +8,10 @@
:inline="true" :inline="true"
label-width="68px" label-width="68px"
> >
<el-form-item label="需求类型:新增需求、替换需求、储备需求" prop="requestType"> <el-form-item label="需求类型" prop="requestType">
<el-select <el-select
v-model="queryParams.requestType" v-model="queryParams.requestType"
placeholder="请选择需求类型:新增需求、替换需求、储备需求" placeholder="请选择需求类型"
clearable clearable
class="!w-240px" class="!w-240px"
> >

View File

@ -1,5 +1,5 @@
<template> <template>
<Dialog :title="dialogTitle" v-model="dialogVisible"> <ContentWrap>
<el-form <el-form
ref="formRef" ref="formRef"
:model="formData" :model="formData"
@ -7,101 +7,164 @@
label-width="100px" label-width="100px"
v-loading="formLoading" v-loading="formLoading"
> >
<el-form-item label="招聘需求ID" prop="recruitmentRequestId"> <el-row>
<el-input v-model="formData.recruitmentRequestId" placeholder="请输入招聘需求ID" /> <el-col :span="24">
</el-form-item> <ContentWrap style="border: none;font-weight: 700">
<el-form-item label="姓名" prop="name"> 个人信息
<el-input v-model="formData.name" placeholder="请输入姓名" /> </ContentWrap>
</el-form-item> </el-col>
<el-form-item label="性别" prop="gender"> <el-col :span="8">
<el-select v-model="formData.gender" placeholder="请选择性别"> <el-form-item label="姓名" prop="realName">
<el-option <el-input v-model="formData.realName" placeholder="请输入姓名" />
v-for="dict in getStrDictOptions(DICT_TYPE.SYSTEM_USER_SEX)" </el-form-item>
:key="dict.value" </el-col>
:label="dict.label"
:value="dict.value" <el-col :span="8">
/> <el-form-item label="手机号" prop="phone">
</el-select> <el-input v-model="formData.phone" placeholder="请输入手机号" />
</el-form-item> </el-form-item>
<el-form-item label="籍贯" prop="birthPlace"> </el-col>
<el-input v-model="formData.birthPlace" placeholder="请输入籍贯" />
</el-form-item> <el-col :span="8">
<el-form-item label="年龄" prop="age"> <el-form-item label="电子邮箱" prop="email">
<el-input v-model="formData.age" placeholder="请输入年龄" /> <el-input v-model="formData.email" placeholder="请输入电子邮箱" />
</el-form-item> </el-form-item>
<el-form-item label="电子邮箱" prop="email"> </el-col>
<el-input v-model="formData.email" placeholder="请输入电子邮箱" />
</el-form-item> <el-col :span="8">
<el-form-item label="学校" prop="school"> <el-form-item label="学校" prop="school">
<el-input v-model="formData.school" placeholder="请输入学校" /> <el-input v-model="formData.school" placeholder="请输入学校" />
</el-form-item> </el-form-item>
<el-form-item label="专业" prop="major"> </el-col>
<el-input v-model="formData.major" placeholder="请输入专业" /> <el-col :span="8">
</el-form-item> <el-form-item label="专业" prop="major">
<el-form-item label="手机号" prop="phone"> <el-input v-model="formData.major" placeholder="请输入专业" />
<el-input v-model="formData.phone" placeholder="请输入手机号" /> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="出生日期" prop="birthday"> <el-col :span="8">
<el-input v-model="formData.birthday" placeholder="请输入出生日期" /> <el-form-item label="年龄" prop="age">
</el-form-item> <el-input v-model="formData.age" placeholder="请输入年龄" />
<el-form-item label="岗位id" prop="postId"> </el-form-item>
<el-input v-model="formData.postId" placeholder="请输入岗位id" /> </el-col>
</el-form-item> <el-col :span="8">
<el-form-item label="意向岗位名称" prop="desiredPosition"> <el-form-item label="最高学历" prop="highestEducation">
<el-input v-model="formData.desiredPosition" placeholder="请输入意向岗位名称" /> <el-select v-model="formData.highestEducation" placeholder="请选择最高学历" >
</el-form-item> <el-option
<el-form-item label="意向城市" prop="desiredCity"> v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EDUCATION)"
<el-input v-model="formData.desiredCity" placeholder="请输入意向城市" /> :key="dict.value"
</el-form-item> :label="dict.label"
<el-form-item label="最高学历(大专、本科、硕士、博士)" prop="highestEducation"> :value="dict.value"
<el-input v-model="formData.highestEducation" placeholder="请输入最高学历(大专、本科、硕士、博士)" /> />
</el-form-item> </el-select>
<el-form-item label="个人照片" prop="personalPhoto"> </el-form-item>
<el-input v-model="formData.personalPhoto" placeholder="请输入个人照片" /> </el-col>
</el-form-item> <el-col :span="8">
<el-form-item label="工作案例附件" prop="workCaseAttachment"> <el-form-item label="性别" prop="gender">
<el-input v-model="formData.workCaseAttachment" placeholder="请输入工作案例附件" /> <el-select v-model="formData.gender" placeholder="请选择性别">
</el-form-item> <el-option
<el-form-item label="简历附件" prop="resumeAttachment"> v-for="dict in getStrDictOptions(DICT_TYPE.SYSTEM_USER_SEX)"
<el-input v-model="formData.resumeAttachment" placeholder="请输入简历附件" /> :key="dict.value"
</el-form-item> :label="dict.label"
<el-form-item label="是否内推内部推荐、BOSS直聘、猎聘、智联招聘、脉脉、公众号" prop="isInternalRef"> :value="dict.value"
<el-select v-model="formData.isInternalRef" placeholder="请选择是否内推内部推荐、BOSS直聘、猎聘、智联招聘、脉脉、公众号"> />
<el-option </el-select>
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_INTERNAL_REF)" </el-form-item>
:key="dict.value" </el-col>
:label="dict.label" <el-col :span="8">
:value="dict.value" <el-form-item label="籍贯" prop="birthPlace">
/> <el-input v-model="formData.birthPlace" placeholder="请输入籍贯" />
</el-select> </el-form-item>
</el-form-item> </el-col>
<el-form-item label="婚育情况(未婚、已婚未育、已婚已育)" prop="maritalStatus"> <el-col :span="8">
<el-select v-model="formData.maritalStatus" placeholder="请选择婚育情况(未婚、已婚未育、已婚已育)">
<el-option <el-form-item label="婚育情况" prop="maritalStatus">
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MARITAL_STATUS)" <el-select v-model="formData.maritalStatus" placeholder="请选择婚育情况">
:key="dict.value" <el-option
:label="dict.label" v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MARITAL_STATUS)"
:value="dict.value" :key="dict.value"
/> :label="dict.label"
</el-select> :value="dict.value"
</el-form-item> />
<el-form-item label="部门ID" prop="deptId"> </el-select>
<el-input v-model="formData.deptId" placeholder="请输入部门ID" /> </el-form-item>
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="是否内推" prop="isInternalRef">
<el-select v-model="formData.isInternalRef" placeholder="请选择是否内推">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_INTERNAL_REF)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<ContentWrap style="border: none;font-weight: 700">
关联招聘需求
</ContentWrap>
</el-col>
<el-col :span="8">
<el-form-item label="岗位" prop="desiredPosition">
<el-select v-model="formData.desiredPosition" @change="changePost" placeholder="请选择">
<el-option
v-for="item in postList"
:key="item.id"
:label="item.name"
:value="item.id!"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="意向城市" prop="desiredCity">
<el-input v-model="formData.desiredCity" placeholder="请输入意向城市" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="部门ID" prop="deptId">
<el-input v-model="formData.deptId" placeholder="请输入部门ID" />
</el-form-item>
</el-col>
<el-col :span="24">
<ContentWrap style="border: none;font-weight: 700" v-if="formData.auditStatus == 2">
附件资料
</ContentWrap>
</el-col>
<el-col :span="8">
<el-form-item label="简历附件" prop="deptId">
<UploadFile v-model="formData.attachment" :limit="1" :fileType="['doc','docx']"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工作案例" prop="deptId">
<UploadFile v-model="formData.attachment" :limit="1" :fileType="['doc','docx']"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="个人照片" prop="deptId">
<UploadImg v-model="formData.picUrls" class="min-w-80px" />
</el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
<template #footer> <div style="text-align: right">
<el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button> <el-button @click="submitForm" type="primary" :disabled="formLoading"> </el-button>
<el-button @click="dialogVisible = false"> </el-button> <el-button @click="dialogVisible = false"> </el-button>
</template> </div>
</Dialog> </ContentWrap>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict' import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { TalentPoolApi, TalentPoolVO } from '@/api/hrm/talentpool' import { TalentPoolApi, TalentPoolVO } from '@/api/hrm/talentpool'
import * as PostApi from '@/api/system/post'
/** 人才库 表单 */ /** 人才库 表单 */
defineOptions({ name: 'TalentPoolForm' }) defineOptions({ name: 'TalentPoolForm' })
const postList = ref([] as PostApi.PostVO[]) //
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
@ -112,7 +175,7 @@ const formType = ref('') // 表单的类型create - 新增update - 修改
const formData = ref({ const formData = ref({
id: undefined, id: undefined,
recruitmentRequestId: undefined, recruitmentRequestId: undefined,
name: undefined, realName: undefined,
gender: undefined, gender: undefined,
birthPlace: undefined, birthPlace: undefined,
age: undefined, age: undefined,
@ -133,7 +196,7 @@ const formData = ref({
deptId: undefined deptId: undefined
}) })
const formRules = reactive({ const formRules = reactive({
name: [{ required: true, message: '姓名不能为空', trigger: 'blur' }], realName: [{ required: true, message: '姓名不能为空', trigger: 'blur' }],
phone: [{ required: true, message: '手机号不能为空', trigger: 'blur' }], phone: [{ required: true, message: '手机号不能为空', trigger: 'blur' }],
desiredPosition: [{ required: true, message: '意向岗位名称不能为空', trigger: 'blur' }], desiredPosition: [{ required: true, message: '意向岗位名称不能为空', trigger: 'blur' }],
desiredCity: [{ required: true, message: '意向城市不能为空', trigger: 'blur' }], desiredCity: [{ required: true, message: '意向城市不能为空', trigger: 'blur' }],
@ -171,7 +234,7 @@ const submitForm = async () => {
formLoading.value = true formLoading.value = true
try { try {
const data = formData.value as unknown as TalentPoolVO const data = formData.value as unknown as TalentPoolVO
if (formType.value === 'create') { if (!formType.value) {
await TalentPoolApi.createTalentPool(data) await TalentPoolApi.createTalentPool(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
} else { } else {
@ -185,13 +248,17 @@ const submitForm = async () => {
formLoading.value = false formLoading.value = false
} }
} }
const changePost = (val) => {
let arr = postList.value.filter( v => v.id === val)
formData.value.psotName = arr.length ? arr[0]['name'] : ''
}
/** 重置表单 */ /** 重置表单 */
const resetForm = () => { const resetForm = () => {
formData.value = { formData.value = {
id: undefined, id: undefined,
recruitmentRequestId: undefined, recruitmentRequestId: undefined,
name: undefined, realName: undefined,
gender: undefined, gender: undefined,
birthPlace: undefined, birthPlace: undefined,
age: undefined, age: undefined,
@ -213,4 +280,9 @@ const resetForm = () => {
} }
formRef.value?.resetFields() formRef.value?.resetFields()
} }
onMounted( async() => {
//
postList.value = await PostApi.getSimplePostList()
})
</script> </script>

View File

@ -8,15 +8,6 @@
:inline="true" :inline="true"
label-width="68px" label-width="68px"
> >
<el-form-item label="招聘需求ID" prop="recruitmentRequestId">
<el-input
v-model="queryParams.recruitmentRequestId"
placeholder="请输入招聘需求ID"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="姓名" prop="name"> <el-form-item label="姓名" prop="name">
<el-input <el-input
v-model="queryParams.name" v-model="queryParams.name"
@ -26,66 +17,16 @@
class="!w-240px" class="!w-240px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="性别" prop="gender"> <el-form-item label="最高学历" prop="highestEducation">
<el-select <el-select v-model="queryParams.highestEducation" class="!w-240px" placeholder="请选择最高学历" >
v-model="queryParams.gender"
placeholder="请选择性别"
clearable
class="!w-240px"
>
<el-option <el-option
v-for="dict in getStrDictOptions(DICT_TYPE.SYSTEM_USER_SEX)" v-for="dict in getIntDictOptions(DICT_TYPE.HRM_EDUCATION)"
:key="dict.value" :key="dict.value"
:label="dict.label" :label="dict.label"
:value="dict.value" :value="dict.value"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="籍贯" prop="birthPlace">
<el-input
v-model="queryParams.birthPlace"
placeholder="请输入籍贯"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="年龄" prop="age">
<el-input
v-model="queryParams.age"
placeholder="请输入年龄"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="电子邮箱" prop="email">
<el-input
v-model="queryParams.email"
placeholder="请输入电子邮箱"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="学校" prop="school">
<el-input
v-model="queryParams.school"
placeholder="请输入学校"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="专业" prop="major">
<el-input
v-model="queryParams.major"
placeholder="请输入专业"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="手机号" prop="phone"> <el-form-item label="手机号" prop="phone">
<el-input <el-input
v-model="queryParams.phone" v-model="queryParams.phone"
@ -95,33 +36,6 @@
class="!w-240px" class="!w-240px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="出生日期" prop="birthday">
<el-input
v-model="queryParams.birthday"
placeholder="请输入出生日期"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="岗位id" prop="postId">
<el-input
v-model="queryParams.postId"
placeholder="请输入岗位id"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="意向岗位名称" prop="desiredPosition">
<el-input
v-model="queryParams.desiredPosition"
placeholder="请输入意向岗位名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="意向城市" prop="desiredCity"> <el-form-item label="意向城市" prop="desiredCity">
<el-input <el-input
v-model="queryParams.desiredCity" v-model="queryParams.desiredCity"
@ -131,81 +45,6 @@
class="!w-240px" class="!w-240px"
/> />
</el-form-item> </el-form-item>
<el-form-item label="最高学历(大专、本科、硕士、博士)" prop="highestEducation">
<el-input
v-model="queryParams.highestEducation"
placeholder="请输入最高学历(大专、本科、硕士、博士)"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="个人照片" prop="personalPhoto">
<el-input
v-model="queryParams.personalPhoto"
placeholder="请输入个人照片"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="工作案例附件" prop="workCaseAttachment">
<el-input
v-model="queryParams.workCaseAttachment"
placeholder="请输入工作案例附件"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="简历附件" prop="resumeAttachment">
<el-input
v-model="queryParams.resumeAttachment"
placeholder="请输入简历附件"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="是否内推内部推荐、BOSS直聘、猎聘、智联招聘、脉脉、公众号" prop="isInternalRef">
<el-select
v-model="queryParams.isInternalRef"
placeholder="请选择是否内推内部推荐、BOSS直聘、猎聘、智联招聘、脉脉、公众号"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_INTERNAL_REF)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="婚育情况(未婚、已婚未育、已婚已育)" prop="maritalStatus">
<el-select
v-model="queryParams.maritalStatus"
placeholder="请选择婚育情况(未婚、已婚未育、已婚已育)"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MARITAL_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="部门ID" prop="deptId">
<el-input
v-model="queryParams.deptId"
placeholder="请输入部门ID"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime"> <el-form-item label="创建时间" prop="createTime">
<el-date-picker <el-date-picker
v-model="queryParams.createTime" v-model="queryParams.createTime"
@ -223,7 +62,7 @@
<el-button <el-button
type="primary" type="primary"
plain plain
@click="openForm('create')" @click="openFormAdd('create')"
v-hasPermi="['hrm:talent-pool:create']" v-hasPermi="['hrm:talent-pool:create']"
> >
<Icon icon="ep:plus" class="mr-5px" /> 新增 <Icon icon="ep:plus" class="mr-5px" /> 新增
@ -244,39 +83,21 @@
<!-- 列表 --> <!-- 列表 -->
<ContentWrap> <ContentWrap>
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="主键ID" align="center" prop="id" />
<el-table-column label="招聘需求ID" align="center" prop="recruitmentRequestId" />
<el-table-column label="姓名" align="center" prop="name" /> <el-table-column label="姓名" align="center" prop="name" />
<el-table-column label="手机号" align="center" prop="phone" />
<el-table-column label="年龄" align="center" prop="age" />
<el-table-column label="性别" align="center" prop="gender"> <el-table-column label="性别" align="center" prop="gender">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="scope.row.gender" /> <dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="scope.row.gender" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="籍贯" align="center" prop="birthPlace" />
<el-table-column label="年龄" align="center" prop="age" />
<el-table-column label="电子邮箱" align="center" prop="email" />
<el-table-column label="学校" align="center" prop="school" />
<el-table-column label="专业" align="center" prop="major" />
<el-table-column label="手机号" align="center" prop="phone" />
<el-table-column label="出生日期" align="center" prop="birthday" />
<el-table-column label="岗位id" align="center" prop="postId" />
<el-table-column label="意向岗位名称" align="center" prop="desiredPosition" /> <el-table-column label="意向岗位名称" align="center" prop="desiredPosition" />
<el-table-column label="意向城市" align="center" prop="desiredCity" /> <el-table-column label="意向城市" align="center" prop="desiredCity" />
<el-table-column label="最高学历(大专、本科、硕士、博士)" align="center" prop="highestEducation" /> <el-table-column label="最高学历" align="center" prop="highestEducation">
<el-table-column label="个人照片" align="center" prop="personalPhoto" />
<el-table-column label="工作案例附件" align="center" prop="workCaseAttachment" />
<el-table-column label="简历附件" align="center" prop="resumeAttachment" />
<el-table-column label="是否内推内部推荐、BOSS直聘、猎聘、智联招聘、脉脉、公众号" align="center" prop="isInternalRef">
<template #default="scope"> <template #default="scope">
<dict-tag :type="DICT_TYPE.HRM_INTERNAL_REF" :value="scope.row.isInternalRef" /> <dict-tag :type="DICT_TYPE.HRM_EDUCATION" :value="scope.row.highestEducation" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="婚育情况(未婚、已婚未育、已婚已育)" align="center" prop="maritalStatus">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HRM_MARITAL_STATUS" :value="scope.row.maritalStatus" />
</template>
</el-table-column>
<el-table-column label="部门ID" align="center" prop="deptId" />
<el-table-column <el-table-column
label="创建时间" label="创建时间"
align="center" align="center"
@ -315,7 +136,7 @@
</ContentWrap> </ContentWrap>
<!-- 表单弹窗添加/修改 --> <!-- 表单弹窗添加/修改 -->
<TalentPoolForm ref="formRef" @success="getList" /> <!-- <TalentPoolForm ref="formRef" @success="getList" /> -->
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -323,7 +144,7 @@ import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime' import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download' import download from '@/utils/download'
import { TalentPoolApi, TalentPoolVO } from '@/api/hrm/talentpool' import { TalentPoolApi, TalentPoolVO } from '@/api/hrm/talentpool'
import TalentPoolForm from './TalentPoolForm.vue' // import TalentPoolForm from './TalentPoolForm.vue'
/** 人才库 列表 */ /** 人才库 列表 */
defineOptions({ name: 'TalentPool' }) defineOptions({ name: 'TalentPool' })
@ -388,8 +209,10 @@ const resetQuery = () => {
/** 添加/修改操作 */ /** 添加/修改操作 */
const formRef = ref() const formRef = ref()
const openForm = (type: string, id?: number) => { const router = useRouter() //
formRef.value.open(type, id) const { push } = useRouter()
const openFormAdd = () => {
push({ name: 'TalentPoolAdd' })
} }
/** 删除按钮操作 */ /** 删除按钮操作 */

View File

@ -1,28 +1,31 @@
<template> <template>
<ContentWrap> <ContentWrap>
<el-form <processForm
ref="formRef" ref="formRef"
:model="formData" :model="formData"
:rules="formRules" :rules="formRules"
:fields="formFields"
label-width="120px" label-width="120px"
v-loading="formLoading" v-loading="formLoading"
> >
<el-row> <template #briefStartDate>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="简报开始日期" prop="briefStartDate"> <el-form-item label="简报开始日期" prop="briefStartDate">
<el-date-picker <el-date-picker
v-model="formData.briefStartDate" v-model="formData.briefStartDate"
type="date" type="date"
disabled :disabled="formFields.briefStartDate !== 2 || isTrue"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
placeholder="选择简报开始日期" placeholder="选择简报开始日期"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #briefEndDate>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="简报结束日期" prop="briefEndDate"> <el-form-item label="简报结束日期" prop="briefEndDate">
<el-date-picker <el-date-picker
disabled :disabled="formFields.briefEndDate !== 2 || isTrue"
v-model="formData.briefEndDate" v-model="formData.briefEndDate"
type="date" type="date"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@ -30,50 +33,62 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #selectCustomer>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="是否选择客户" prop="selectCustomer"> <el-form-item label="是否选择客户" prop="selectCustomer">
<el-radio-group v-model="formData.selectCustomer" disabled> <el-radio-group v-model="formData.selectCustomer" :disabled="formFields.selectCustomer !== 2 || isTrue">
<el-radio :label="true"></el-radio> <el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio> <el-radio :label="false"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #other>
<el-col :span="24"> <el-col :span="24">
<ContentWrap style="border: none;font-weight: 700" v-if="formData.selectCustomer"> <ContentWrap style="border: none;font-weight: 700" v-if="formData.selectCustomer">
选择客户 选择客户
</ContentWrap> </ContentWrap>
<CustomerForm ref="customerFormRef" :userOptions="userOptions" :type="1" :dataList="formData.followUpRecords" v-if="formData.selectCustomer" /> <CustomerForm ref="customerFormRef" :formFields="formFields" :userOptions="userOptions" :type="1" :dataList="formData.followUpRecords" v-if="formData.selectCustomer" />
<ContentWrap style="border: none;font-weight: 700" > <ContentWrap style="border: none;font-weight: 700" >
选择任务 选择任务
</ContentWrap> </ContentWrap>
<TaskForm ref="taskFormRef" :type="1" :dataList="formData.tasks" /> <TaskForm ref="taskFormRef" :type="1" :dataList="formData.tasks" :formFields="formFields" />
<!-- <ContentWrap style="border: none;font-weight: 700" > <!-- <ContentWrap style="border: none;font-weight: 700" >
日报信息 日报信息
</ContentWrap> </ContentWrap>
<DayReportForm :reportType="2" :type="1" ref="dayReportFormRef" :time="time" /> --> <DayReportForm :reportType="2" :type="1" ref="dayReportFormRef" :time="time" /> -->
</el-col> </el-col>
</template>
<template #workComplate>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="本月完成工作" prop="workComplate"> <el-form-item label="本月完成工作" prop="workComplate">
<el-input type="textarea" disabled :rows="5" v-model="formData.workComplate" placeholder="请输入本日完成工作" /> <el-input type="textarea" :disabled="formFields.workComplate !== 2 || isTrue" :rows="5" v-model="formData.workComplate" placeholder="请输入本日完成工作" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #workPlan>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="下月工作计划" prop="workPlan"> <el-form-item label="下月工作计划" prop="workPlan">
<el-input type="textarea" disabled :rows="5" v-model="formData.workPlan" placeholder="请输入明日工作计划" /> <el-input type="textarea" :disabled="formFields.workPlan !== 2 || isTrue" :rows="5" v-model="formData.workPlan" placeholder="请输入明日工作计划" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #workAssistance>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="工作困难及协助" prop="workAssistance"> <el-form-item label="工作困难及协助" prop="workAssistance">
<el-input type="textarea" disabled :rows="5" v-model="formData.workAssistance" placeholder="请输入工作困难及协助" /> <el-input type="textarea" :disabled="formFields.workAssistance !== 2 || isTrue" :rows="5" v-model="formData.workAssistance" placeholder="请输入工作困难及协助" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #attachment>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="附件" prop="attachment"> <el-form-item label="附件" prop="attachment">
<UploadFile v-model="formData.attachment" :disabled="true" :limit="1" :fileType="['doc','docx']"/> <UploadFile v-model="formData.attachment" :disabled="formFields.attachment !== 2 || isTrue" :limit="1" :fileType="['doc','docx']"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </template>
</el-form> </processForm>
</ContentWrap> </ContentWrap>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -85,6 +100,7 @@ import TaskForm from '../briefWeekWork/components/selectTask.vue'
import DayReportForm from '../briefWeekWork/components/selectDayReport.vue' import DayReportForm from '../briefWeekWork/components/selectDayReport.vue'
import { propTypes } from '@/utils/propTypes' import { propTypes } from '@/utils/propTypes'
import * as UserApi from '@/api/system/user' import * as UserApi from '@/api/system/user'
import { getLimitForm } from '@/api/bpm/form'
/** 工作简报 表单 */ /** 工作简报 表单 */
defineOptions({ name: 'BriefWorkForm' }) defineOptions({ name: 'BriefWorkForm' })
@ -93,12 +109,32 @@ const props = defineProps({
id: propTypes.number.def(undefined) id: propTypes.number.def(undefined)
}) })
const userOptions = ref<UserApi.UserVO[]>([]) // const userOptions = ref<UserApi.UserVO[]>([]) //
const isTrue = ref(false)
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const dialogTitle = ref('') // const dialogTitle = ref('') //
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
const formType = ref('') // create - update - const formType = ref('') // create - update -
const time = ref([]) // const time = ref([]) //
const formFields = ref({ //,
briefStartDate: 1,
briefEndDate: 1,
selectCustomer: 1,
other: 1,
workComplate: 1 ,
workPlan: 1,
workAssistance: 1,
attachment: 1,
name: 1,
followUpStatus: 1 ,
contactLastContent: 1,
contactLastTime: 1,
followUpUserId: 1,
taskName: 1,
taskLevel: 1,
userId: 1,
taskDescribe: 1,
})
const formData = ref({ const formData = ref({
id: undefined, id: undefined,
briefType: 3, briefType: 3,
@ -160,15 +196,43 @@ const resetForm = () => {
processInstanceId: undefined, processInstanceId: undefined,
auditStatus: undefined auditStatus: undefined
} }
formRef.value?.resetFields() // formRef.value?.resetFields()
} }
const route = useRoute(); const route = useRoute();
onMounted(async () => { //
formType.value = props.id || route.query.id const getLimit = async () => {
let data = {
modelNodeId: route.query.taskDefinitionKey,
processDefinitionId: route.query.processDefinitionId
}
let field = await getLimitForm(data)
formFields.value = Object.assign(formFields.value, field.fields)
for(let key in formFields.value) {
let newKey = key
if(formFields.value.hasOwnProperty(newKey)) {
field.fields.map( v => {
let newKey = v.field
if(v.field.indexOf('.') > -1) {
newKey = v.field.split('.')[1]
}
if(newKey === key) formFields.value[key] = v.permission
})
}
}
}
onMounted(async () => {
formType.value = props.id || route.query.id
isTrue.value = !!route.query.isDetail
if (formType.value) await open(formType.value) if (formType.value) await open(formType.value)
if(route.query.processDefinitionId) getLimit()
// //
userOptions.value = await UserApi.getSimpleUserList() userOptions.value = await UserApi.getSimpleUserList()

View File

@ -42,13 +42,13 @@
<ContentWrap style="border: none;font-weight: 700" v-if="formData.selectCustomer"> <ContentWrap style="border: none;font-weight: 700" v-if="formData.selectCustomer">
选择客户 选择客户
</ContentWrap> </ContentWrap>
<CustomerForm ref="customerFormRef" :userOptions="userOptions" v-if="formData.selectCustomer" /> <CustomerForm ref="customerFormRef" :formFields="formFields" :userOptions="userOptions" v-if="formData.selectCustomer" />
<ContentWrap style="border: none;font-weight: 700" > <ContentWrap style="border: none;font-weight: 700" >
选择任务 选择任务
</ContentWrap> </ContentWrap>
<TaskForm ref="taskFormRef" /> <TaskForm ref="taskFormRef" :formFields="formFields" />
<ContentWrap style="border: none;font-weight: 700" > <ContentWrap style="border: none;font-weight: 700" >
报信息 报信息
</ContentWrap> </ContentWrap>
<DayReportForm :reportType="2" ref="dayReportFormRef" :time="time" /> <DayReportForm :reportType="2" ref="dayReportFormRef" :time="time" />
</el-col> </el-col>
@ -99,6 +99,17 @@ const dialogTitle = ref('') // 弹窗的标题
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
const formType = ref('') // create - update - const formType = ref('') // create - update -
const time = ref([]) // const time = ref([]) //
const formFields = ref({ //,
name: 1,
followUpStatus: 1 ,
contactLastContent: 1,
contactLastTime: 1,
followUpUserId: 1,
taskName: 1,
taskLevel: 1,
userId: 1,
taskDescribe: 1,
})
const formData = ref({ const formData = ref({
id: undefined, id: undefined,
briefType: 3, briefType: 3,

View File

@ -14,7 +14,7 @@
<el-date-picker <el-date-picker
v-model="formData.briefStartDate" v-model="formData.briefStartDate"
type="date" type="date"
disabled :disabled="formFields.briefStartDate !== 2 || isTrue"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
placeholder="选择简报开始日期" placeholder="选择简报开始日期"
/> />
@ -25,7 +25,7 @@
<el-col :span="8"> <el-col :span="8">
<el-form-item label="简报结束日期" prop="briefEndDate"> <el-form-item label="简报结束日期" prop="briefEndDate">
<el-date-picker <el-date-picker
disabled :disabled="formFields.briefStartDate !== 2 || isTrue"
v-model="formData.briefEndDate" v-model="formData.briefEndDate"
type="date" type="date"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@ -37,7 +37,7 @@
<template #selectCustomer> <template #selectCustomer>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="是否选择客户" prop="selectCustomer"> <el-form-item label="是否选择客户" prop="selectCustomer">
<el-radio-group v-model="formData.selectCustomer" disabled> <el-radio-group v-model="formData.selectCustomer" :disabled="formFields.briefStartDate !== 2 || isTrue">
<el-radio :label="true"></el-radio> <el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio> <el-radio :label="false"></el-radio>
</el-radio-group> </el-radio-group>
@ -63,28 +63,28 @@
<template #workComplate> <template #workComplate>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="本周完成工作" prop="workComplate"> <el-form-item label="本周完成工作" prop="workComplate">
<el-input type="textarea" disabled :rows="5" v-model="formData.workComplate" placeholder="请输入本日完成工作" /> <el-input type="textarea" :disabled="formFields.briefStartDate !== 2 || isTrue" :rows="5" v-model="formData.workComplate" placeholder="请输入本日完成工作" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template> </template>
<template #workPlan> <template #workPlan>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="下周工作计划" prop="workPlan"> <el-form-item label="下周工作计划" prop="workPlan">
<el-input type="textarea" disabled :rows="5" v-model="formData.workPlan" placeholder="请输入明日工作计划" /> <el-input type="textarea" :disabled="formFields.briefStartDate !== 2 || isTrue" :rows="5" v-model="formData.workPlan" placeholder="请输入明日工作计划" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template> </template>
<template #workAssistance> <template #workAssistance>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="工作困难及协助" prop="workAssistance"> <el-form-item label="工作困难及协助" prop="workAssistance">
<el-input type="textarea" disabled :rows="5" v-model="formData.workAssistance" placeholder="请输入工作困难及协助" /> <el-input type="textarea" :disabled="formFields.briefStartDate !== 2 || isTrue" :rows="5" v-model="formData.workAssistance" placeholder="请输入工作困难及协助" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template> </template>
<template #attachment> <template #attachment>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="附件" prop="attachment"> <el-form-item label="附件" prop="attachment">
<UploadFile v-model="formData.attachment" :disabled="!!formType" :limit="1" :fileType="['doc','docx']"/> <UploadFile v-model="formData.attachment" :disabled="formFields.briefStartDate !== 2 || isTrue" :limit="1" :fileType="['doc','docx']"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template> </template>
@ -100,6 +100,7 @@ import TaskForm from './components/selectTask.vue'
import DayReportForm from './components/selectDayReport.vue' import DayReportForm from './components/selectDayReport.vue'
import { propTypes } from '@/utils/propTypes' import { propTypes } from '@/utils/propTypes'
import * as UserApi from '@/api/system/user' import * as UserApi from '@/api/system/user'
import { getLimitForm } from '@/api/bpm/form'
/** 工作简报 表单 */ /** 工作简报 表单 */
defineOptions({ name: 'BriefWorkForm' }) defineOptions({ name: 'BriefWorkForm' })
@ -108,6 +109,7 @@ const props = defineProps({
id: propTypes.number.def(undefined) id: propTypes.number.def(undefined)
}) })
const userOptions = ref<UserApi.UserVO[]>([]) // const userOptions = ref<UserApi.UserVO[]>([]) //
const isTrue = ref(false)
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const dialogTitle = ref('') // const dialogTitle = ref('') //
@ -115,23 +117,23 @@ const formLoading = ref(false) // 表单的加载中1修改时的数据加
const formType = ref('') // create - update - const formType = ref('') // create - update -
const time = ref([]) // const time = ref([]) //
const formFields = ref({ //, const formFields = ref({ //,
briefStartDate: false, briefStartDate: 1,
briefEndDate: false, briefEndDate: 1,
selectCustomer: false, selectCustomer: 1,
other: false, other: 1,
workComplate: false , workComplate: 1 ,
workPlan: false, workPlan: 1,
workAssistance: false, workAssistance: 1,
attachment: false, attachment: 1,
name: false, name: 1,
followUpStatus: false , followUpStatus: 1 ,
contactLastContent: false, contactLastContent: 1,
contactLastTime: false, contactLastTime: 1,
followUpUserId: false, followUpUserId: 1,
taskName: false, taskName: 1,
taskLevel: false, taskLevel: 1,
userId: false, userId:1,
taskDescribe: false, taskDescribe: 1,
}) })
const formData = ref({ const formData = ref({
id: undefined, id: undefined,
@ -229,11 +231,36 @@ const resetForm = () => {
} }
const route = useRoute(); const route = useRoute();
onMounted(async () => { //
formType.value = props.id || route.query.id const getLimit = async () => {
let data = {
modelNodeId: route.query.taskDefinitionKey,
processDefinitionId: route.query.processDefinitionId
}
let field = await getLimitForm(data)
for(let key in formFields.value) {
if(formFields.value.hasOwnProperty(key)) {
field.fields.map( v => {
let newKey = v.field
if(v.field.indexOf('.') > -1) {
newKey = v.field.split('.')[1]
}
if(newKey === key) formFields.value[key] = v.permission
})
}
}
}
onMounted(async () => {
isTrue.value = !!route.query.isDetail
formType.value = props.id || route.query.id
if (formType.value) await open(formType.value) if (formType.value) await open(formType.value)
if(route.query.processDefinitionId) getLimit()
// //
userOptions.value = await UserApi.getSimpleUserList() userOptions.value = await UserApi.getSimpleUserList()

View File

@ -100,15 +100,15 @@ const formLoading = ref(false) // 表单的加载中1修改时的数据加
const formType = ref('') // create - update - const formType = ref('') // create - update -
const time = ref([]) // const time = ref([]) //
const formFields = ref({ //, const formFields = ref({ //,
name: false, name: 1,
followUpStatus: false , followUpStatus: 1 ,
contactLastContent: false, contactLastContent: 1,
contactLastTime: false, contactLastTime: 1,
followUpUserId: false, followUpUserId: 1,
taskName: false, taskName: 1,
taskLevel: false, taskLevel: 1,
userId: false, userId: 1,
taskDescribe: false, taskDescribe: 1,
}) })
const formData = ref({ const formData = ref({
id: undefined, id: undefined,

View File

@ -84,7 +84,17 @@ const props = defineProps({
id: propTypes.number.def(undefined), id: propTypes.number.def(undefined),
type: propTypes.number.def(undefined), type: propTypes.number.def(undefined),
dataList: propTypes.object.def([]), dataList: propTypes.object.def([]),
formFields: {}, formFields: {
type: Object,
default: () => {
return {
taskName: false,
taskLevel: false,
userId: false,
taskDescribe: false,
}
}
},
}) })
const userOptions = ref<UserApi.UserVO[]>([]) // const userOptions = ref<UserApi.UserVO[]>([]) //
const loading = ref(false) // const loading = ref(false) //

View File

@ -13,7 +13,7 @@
<el-col :span="8"> <el-col :span="8">
<el-form-item label="简报日期" prop="briefStartDate"> <el-form-item label="简报日期" prop="briefStartDate">
<el-date-picker <el-date-picker
disabled :disabled="formFields.briefStartDate !== 2 || isTrue"
v-model="formData.briefStartDate" v-model="formData.briefStartDate"
type="date" type="date"
value-format="YYYY-MM-DD" value-format="YYYY-MM-DD"
@ -26,28 +26,28 @@
<el-col :span="24"> <el-col :span="24">
<el-form-item label="本日完成工作" prop="workComplate"> <el-form-item label="本日完成工作" prop="workComplate">
<el-input type="textarea" disabled :rows="5" v-model="formData.workComplate" placeholder="请输入本日完成工作" /> <el-input type="textarea" :disabled="formFields.workComplate !== 2 || isTrue" :rows="5" v-model="formData.workComplate" placeholder="请输入本日完成工作" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template> </template>
<template #workPlan> <template #workPlan>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="明日工作计划" prop="workPlan"> <el-form-item label="明日工作计划" prop="workPlan">
<el-input type="textarea" disabled :rows="5" v-model="formData.workPlan" placeholder="请输入明日工作计划" /> <el-input type="textarea" :disabled="formFields.workPlan !== 2 || isTrue" :rows="5" v-model="formData.workPlan" placeholder="请输入明日工作计划" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template> </template>
<template #workAssistance> <template #workAssistance>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="工作困难及协助" prop="workAssistance"> <el-form-item label="工作困难及协助" prop="workAssistance">
<el-input type="textarea" disabled :rows="5" v-model="formData.workAssistance" placeholder="请输入工作困难及协助" /> <el-input type="textarea" :disabled="formFields.workAssistance !== 2 || isTrue" :rows="5" v-model="formData.workAssistance" placeholder="请输入工作困难及协助" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template> </template>
<template #attachment> <template #attachment>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="附件" prop="attachment"> <el-form-item label="附件" prop="attachment">
<UploadFile v-model="formData.attachment" :disabled="!!formType" :limit="1" :fileType="['doc','docx']"/> <UploadFile v-model="formData.attachment" :disabled="formFields.attachment !== 2 || isTrue" :limit="1" :fileType="['doc','docx']"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template> </template>
@ -59,6 +59,7 @@ import { getIntDictOptions, getBoolDictOptions, DICT_TYPE } from '@/utils/dict'
import { BriefWorkApi, BriefWorkVO } from '@/api/task/briefWork' import { BriefWorkApi, BriefWorkVO } from '@/api/task/briefWork'
import { useUserStore } from '@/store/modules/user' import { useUserStore } from '@/store/modules/user'
import { propTypes } from '@/utils/propTypes' import { propTypes } from '@/utils/propTypes'
import { getLimitForm } from '@/api/bpm/form'
/** 工作简报 表单 */ /** 工作简报 表单 */
defineOptions({ name: 'BriefWorkForm' }) defineOptions({ name: 'BriefWorkForm' })
@ -69,16 +70,17 @@ const message = useMessage() // 消息弹窗
const props = defineProps({ const props = defineProps({
id: propTypes.number.def(undefined), id: propTypes.number.def(undefined),
}) })
const isTrue = ref(false)
const dialogTitle = ref('') // const dialogTitle = ref('') //
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
const formType = ref('') // create - update - const formType = ref('') // create - update -
const authType = ref('') // const authType = ref('') //
const formFields = ref({ // const formFields = ref({ //
briefStartDate: false, briefStartDate: 1,
workComplate: false , workComplate: 1 ,
workPlan: false, workPlan: 1,
workAssistance: false, workAssistance: 1,
attachment: false attachment: 1
}) })
const formData = ref({ const formData = ref({
id: undefined, id: undefined,
@ -117,10 +119,6 @@ const open = async (id?: number) => {
} }
defineExpose({ open }) // open defineExpose({ open }) // open
const openAuth = () => {
}
/** 提交表单 */ /** 提交表单 */
const emit = defineEmits(['success']) // success const emit = defineEmits(['success']) // success
const submitForm = async () => { const submitForm = async () => {
@ -172,17 +170,39 @@ const resetForm = () => {
} }
const route = useRoute(); const route = useRoute();
//
const getLimit = async () => {
let data = {
modelNodeId: route.query.taskDefinitionKey,
processDefinitionId: route.query.processDefinitionId
}
let field = await getLimitForm(data)
formFields.value = Object.assign(formFields.value, field.fields)
for(let key in formFields.value) {
let newKey = key
if(formFields.value.hasOwnProperty(newKey)) {
field.fields.map( v => {
let newKey = v.field
if(v.field.indexOf('.') > -1) {
newKey = v.field.split('.')[1]
}
if(newKey === key) formFields.value[key] = v.permission
})
}
}
}
onMounted(async () => { onMounted(async () => {
formType.value = props.id || route.query.id formType.value = props.id || route.query.id
authType.value = route.query.authId authType.value = route.query.authId
isTrue.value = !!route.query.isDetail
if (formType.value) await open(formType.value) if (formType.value) await open(formType.value)
if (!authType.value) await openAuth() if(route.query.processDefinitionId) getLimit()
if (!formType.value) { if (!formType.value) {
formData.value.userId = useUserStore().getUser.id formData.value.userId = useUserStore().getUser.id

View File

@ -1,114 +1,137 @@
<template> <template>
<ContentWrap> <ContentWrap>
<el-form <processForm
ref="formRef" ref="formRef"
:model="formData" :model="formData"
:rules="formRules" :rules="formRules"
:fields="formFields"
label-width="130px" label-width="130px"
v-loading="formLoading" v-loading="formLoading"
> >
<el-row> <template #projectName>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="名称" prop="projectName"> <el-form-item label="名称" prop="projectName">
<el-input v-model="formData.projectName" disabled placeholder="请输入名称" /> <el-input v-model="formData.projectName" :disabled="formFields.projectName !== 2 || isTrue" placeholder="请输入名称" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> </template>
<el-form-item label="项目类型" prop="projectType"> <template #projectType>
<el-select v-model="formData.projectType" disabled placeholder="请选择项目类型"> <el-col :span="8">
<el-option <el-form-item label="项目类型" prop="projectType">
v-for="dict in getIntDictOptions(DICT_TYPE.TTS_PROJECT_TYPE)" <el-select v-model="formData.projectType" :disabled="formFields.projectType !== 2 || isTrue" placeholder="请选择项目类型">
:key="dict.value" <el-option
:label="dict.label" v-for="dict in getIntDictOptions(DICT_TYPE.TTS_PROJECT_TYPE)"
:value="dict.value" :key="dict.value"
/> :label="dict.label"
</el-select> :value="dict.value"
</el-form-item> />
</el-col> </el-select>
<el-col :span="8"> </el-form-item>
<el-form-item label="申请部门" prop="deptId"> </el-col>
<el-tree-select </template>
disabled <template #deptId>
v-model="formData.deptId" <el-col :span="8">
:data="deptTree" <el-form-item label="申请部门" prop="deptId">
:props="defaultProps" <el-tree-select
check-strictly :disabled="formFields.deptId !== 2 || isTrue"
node-key="id" v-model="formData.deptId"
placeholder="" :data="deptTree"
/> :props="defaultProps"
</el-form-item> check-strictly
</el-col> node-key="id"
<el-col :span="8"> placeholder=""
<el-form-item label="申请人" prop="userId">
<el-select v-model="formData.userId" disabled placeholder="请选择申请人">
<el-option
v-for="dict in userOptions"
:key="dict.id"
:label="dict.nickname"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="测试完成日期" prop="testCompletionDate">
<el-date-picker
disabled
v-model="formData.testCompletionDate"
style="width: 100%"
type="date"
value-format="YYYY-MM-DD"
placeholder="选择测试完成日期"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> </template>
<el-form-item label="申请上线日期" prop="onlineDate"> <template #userId>
<el-date-picker <el-col :span="8">
v-model="formData.onlineDate" <el-form-item label="申请人" prop="userId">
style="width: 100%" <el-select v-model="formData.userId" :disabled="formFields.userId !== 2 || isTrue" placeholder="请选择申请人">
disabled <el-option
type="date" v-for="dict in userOptions"
value-format="YYYY-MM-DD" :key="dict.id"
placeholder="选择申请上线日期" :label="dict.nickname"
/> :value="dict.id"
</el-form-item> />
</el-col> </el-select>
<el-col :span="8"> </el-form-item>
<el-form-item label="涉及第三方系统" prop="externalSystem"> </el-col>
<el-radio-group v-model="formData.externalSystem" disabled> </template>
<el-radio :label="true"></el-radio> <template #testCompletionDate>
<el-radio :label="false"></el-radio> <el-col :span="8">
</el-radio-group> <el-form-item label="测试完成日期" prop="testCompletionDate">
</el-form-item> <el-date-picker
</el-col> :disabled="formFields.testCompletionDate !== 2 || isTrue"
<el-col :span="24"> v-model="formData.testCompletionDate"
<OnlineApplicationList ref="onlineApplicationFormRef" :type="1" :onlineModuleInfo="formData.onlineModuleInfo" /> style="width: 100%"
</el-col> type="date"
<el-col :span="24"> value-format="YYYY-MM-DD"
<el-form-item label="上线注意事项" prop="precautions"> placeholder="选择测试完成日期"
<el-input type="textarea" disabled :rows="5" v-model="formData.precautions" placeholder="请输入上线注意事项" /> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24"> </template>
<el-form-item label="失败应急处理" prop="emergencyManagement"> <template #onlineDate>
<el-input type="textarea" disabled :rows="5" v-model="formData.emergencyManagement" placeholder="请输入失败应急处理" /> <el-col :span="8">
</el-form-item> <el-form-item label="申请上线日期" prop="onlineDate">
</el-col> <el-date-picker
<el-col :span="24"> v-model="formData.onlineDate"
<el-form-item label="申请人签字" prop="applicantSign"> style="width: 100%"
<div class="signature-preview"> :disabled="formFields.onlineDate !== 2 || isTrue"
<el-image class="image" v-if="formData.applicantSign" :src="formData.applicantSign" alt="签名预览" /> type="date"
</div> value-format="YYYY-MM-DD"
</el-form-item> placeholder="选择申请上线日期"
</el-col> />
</el-row> </el-form-item>
<el-form-item v-if="visible" > </el-col>
<div> </template>
<HandleSign @success="setSign" @close="visible = false" /> <template #externalSystem>
</div> <el-col :span="8">
</el-form-item> <el-form-item label="涉及第三方系统" prop="externalSystem">
<el-radio-group v-model="formData.externalSystem" :disabled="formFields.externalSystem !== 2 || isTrue">
<el-radio :label="true"></el-radio>
<el-radio :label="false"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</template>
<template #other>
<el-col :span="24">
<OnlineApplicationList ref="onlineApplicationFormRef" :formFields="formFields" :type="1" :onlineModuleInfo="formData.onlineModuleInfo" />
</el-col>
</template>
<template #precautions>
<el-col :span="24">
<el-form-item label="上线注意事项" prop="precautions">
<el-input type="textarea" :disabled="formFields.precautions !== 2 || isTrue" :rows="5" v-model="formData.precautions" placeholder="请输入上线注意事项" />
</el-form-item>
</el-col>
</template>
<template #emergencyManagement>
<el-col :span="24">
<el-form-item label="失败应急处理" prop="emergencyManagement">
<el-input type="textarea" :disabled="formFields.emergencyManagement !== 2 || isTrue" :rows="5" v-model="formData.emergencyManagement" placeholder="请输入失败应急处理" />
</el-form-item>
</el-col>
</template>
<template #applicantSign>
<el-col :span="24">
<el-form-item label="申请人签字" prop="applicantSign">
<div class="signature-preview">
<el-image class="image" v-if="formData.applicantSign" :src="formData.applicantSign" alt="签名预览" />
</div>
</el-form-item>
</el-col>
</template>
<template #other1>
<el-form-item v-if="visible" >
<div>
<HandleSign @success="setSign" @close="visible = false" />
</div>
</el-form-item>
</template>
<!-- <el-form-item label="工作流编号" prop="processInstanceId"> <!-- <el-form-item label="工作流编号" prop="processInstanceId">
<el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" /> <el-input v-model="formData.processInstanceId" placeholder="请输入工作流编号" />
@ -118,7 +141,7 @@
<el-radio value="1">请选择字典生成</el-radio> <el-radio value="1">请选择字典生成</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> --> </el-form-item> -->
</el-form> </processForm>
</ContentWrap> </ContentWrap>
@ -132,6 +155,8 @@ import { defaultProps, handleTree } from '@/utils/tree'
import * as DeptApi from '@/api/system/dept' import * as DeptApi from '@/api/system/dept'
import { propTypes } from '@/utils/propTypes' import { propTypes } from '@/utils/propTypes'
import * as UserApi from '@/api/system/user' import * as UserApi from '@/api/system/user'
import { getLimitForm } from '@/api/bpm/form'
/** 上线申请 表单 */ /** 上线申请 表单 */
defineOptions({ name: 'OnlineApplicationForm' }) defineOptions({ name: 'OnlineApplicationForm' })
const { proxy }: any = getCurrentInstance(); const { proxy }: any = getCurrentInstance();
@ -144,12 +169,31 @@ const props = defineProps({
id: propTypes.number.def(undefined), id: propTypes.number.def(undefined),
type: propTypes.number.def(undefined), type: propTypes.number.def(undefined),
}) })
const isTrue = ref(false)
const dialogVisible = ref(false) // const dialogVisible = ref(false) //
const dialogTitle = ref('') // const dialogTitle = ref('') //
const formLoading = ref(false) // 12 const formLoading = ref(false) // 12
const formType = ref('') // create - update - const formType = ref('') // create - update -
const visible = ref(false) const visible = ref(false)
const onlineApplicationFormRef = ref('') const onlineApplicationFormRef = ref('')
const formFields = ref({ //
projectName: 1,
projectType: 1 ,
deptId: 1,
userId: 1,
testCompletionDate: 1,
onlineDate: 1,
externalSystem: 1,
other: 1,
precautions: 1,
emergencyManagement: 1,
applicantSign: 1,
other1: 1,
involvingModule: 1,
version: 1,
moduleDescription: 1,
tableOther: 1,
})
const formData = ref({ const formData = ref({
id: undefined, id: undefined,
projectName: undefined, projectName: undefined,
@ -197,7 +241,6 @@ defineExpose({ open }) // 提供 open 方法,用于打开弹窗
const setSign = (val) => { const setSign = (val) => {
console.log('%csrc/views/task/online/OnlineApplicationForm.vue:143 val', 'color: #007acc;', val);
formData.value.applicantSign = val formData.value.applicantSign = val
visible.value = false visible.value = false
} }
@ -251,14 +294,43 @@ const resetForm = () => {
processInstanceId: undefined, processInstanceId: undefined,
auditStatus: undefined auditStatus: undefined
} }
formRef.value?.resetFields() // formRef.value?.resetFields()
} }
const route = useRoute(); const route = useRoute();
//
const getLimit = async () => {
let data = {
modelNodeId: route.query.taskDefinitionKey,
processDefinitionId: route.query.processDefinitionId
}
let field = await getLimitForm(data)
formFields.value = Object.assign(formFields.value, field.fields)
for(let key in formFields.value) {
let newKey = key
if(formFields.value.hasOwnProperty(newKey)) {
field.fields.map( v => {
let newKey = v.field
if(v.field.indexOf('.') > -1) {
newKey = v.field.split('.')[1]
}
if(newKey === key) formFields.value[key] = v.permission
})
}
}
console.log('%csrc/views/project/online/OnlineApplicationDetail.vue:322 object', 'color: #007acc;', formFields.value);
}
onMounted(async()=> { onMounted(async()=> {
isTrue.value = !!route.query.isDetail
formType.value = props.id || route.query.id formType.value = props.id || route.query.id
if (formType.value) await open(formType.value) if (formType.value) await open(formType.value)
if(route.query.processDefinitionId) getLimit()
deptTree.value = handleTree(await DeptApi.getSimpleDeptList()) deptTree.value = handleTree(await DeptApi.getSimpleDeptList())
// //
userOptions.value = await UserApi.getSimpleUserList() userOptions.value = await UserApi.getSimpleUserList()

View File

@ -10,58 +10,66 @@
label-width="0px" label-width="0px"
:inline-message="true" :inline-message="true"
> >
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true"> <AuthTable v-loading="loading" :fields="formFields" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="涉及模块" align="center"> <template #involvingModule>
<template #default="{ row, $index }"> <el-table-column label="涉及模块" align="center" prop="involvingModule">
<el-form-item :prop="`${$index}.involvingModule`" :rules="formRules.involvingModule" class="mb-0px!" v-if="!type"> <template #default="{ row, $index }">
<el-input v-model="row.involvingModule" placeholder="请输入涉及模块" /> <el-form-item :prop="`${$index}.involvingModule`" :rules="formRules.involvingModule" class="mb-0px!" v-if="!type">
</el-form-item> <el-input v-model="row.involvingModule" placeholder="请输入涉及模块" />
<div v-else> </el-form-item>
{{row.involvingModule}} <div v-else>
</div> {{row.involvingModule}}
</div>
</template>
</el-table-column>
</template>
<template #version>
<el-table-column label="版本" align="center" prop="version">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.version`" :rules="formRules.version" class="mb-0px!" v-if="!type">
<el-input v-model="row.version" placeholder="请输入版本" />
</el-form-item>
<div v-else>
{{row.version}}
</div>
</template>
</el-table-column>
</template> </template>
<template #moduleDescription>
<el-table-column label="模块说明" align="center" prop="moduleDescription">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.moduleDescription`" :rules="formRules.moduleDescription" class="mb-0px!" v-if="!type">
<el-input v-model="row.moduleDescription" placeholder="请输入模块说明" />
</el-form-item>
<div v-else>
{{row.moduleDescription}}
</div>
</template>
</el-table-column>
</template>
<template #tableOther>
<el-table-column label="操作" align="center" width="120px" v-if="!type">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['tts:online-module-info:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['tts:online-module-info:delete']"
>
删除
</el-button>
</template>
</el-table-column> </el-table-column>
<el-table-column label="版本" align="center"> </template>
<template #default="{ row, $index }"> </AuthTable>
<el-form-item :prop="`${$index}.version`" :rules="formRules.version" class="mb-0px!" v-if="!type">
<el-input v-model="row.version" placeholder="请输入版本" />
</el-form-item>
<div v-else>
{{row.version}}
</div>
</template>
</el-table-column>
<el-table-column label="模块说明" align="center">
<template #default="{ row, $index }">
<el-form-item :prop="`${$index}.moduleDescription`" :rules="formRules.moduleDescription" class="mb-0px!" v-if="!type">
<el-input v-model="row.moduleDescription" placeholder="请输入模块说明" />
</el-form-item>
<div v-else>
{{row.moduleDescription}}
</div>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="120px" v-if="!type">
<template #default="scope">
<el-button
link
type="primary"
@click="openForm('update', scope.row.id)"
v-hasPermi="['tts:online-module-info:update']"
>
编辑
</el-button>
<el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['tts:online-module-info:delete']"
>
删除
</el-button>
</template>
</el-table-column>
</el-table>
</el-form> </el-form>
<el-row justify="center" class="mt-3" v-if="!type"> <el-row justify="center" class="mt-3" v-if="!type">
@ -94,7 +102,18 @@ const message = useMessage() // 消息弹窗
const { t } = useI18n() // const { t } = useI18n() //
const props = defineProps({ const props = defineProps({
onlineModuleInfo: [], onlineModuleInfo: [],
type: propTypes.number.def(undefined) type: propTypes.number.def(undefined),
formFields: {
type: Object,
default: () => {
return {
involvingModule: 1,
version: 1,
moduleDescription: 1,
tableOther: 1,
}
}
}
}) })
const loading = ref(false) // const loading = ref(false) //
const list = ref<OnlineModuleInfoVO[]>([]) // const list = ref<OnlineModuleInfoVO[]>([]) //

View File

@ -1,19 +1,19 @@
<template> <template>
<ContentWrap> <ContentWrap>
<el-form <processForm
ref="formRef" ref="formRef"
:model="formData" :model="formData"
:rules="formRules" :rules="formRules"
:fields="formFields"
label-width="120px" label-width="120px"
v-loading="formLoading" v-loading="formLoading"
> >
<el-row>
<!-- <el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="项目编号" prop="projectCode"> <el-form-item label="项目编号" prop="projectCode">
<el-input v-model="formData.projectCode" placeholder="请输入项目编号" /> <el-input v-model="formData.projectCode" placeholder="请输入项目编号" />
</el-form-item> </el-form-item>
</el-col> --> </el-col> -->
<template #projectLevel>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目级别" prop="projectLevel"> <el-form-item label="项目级别" prop="projectLevel">
<el-select v-model="formData.projectLevel" :disabled="formType" placeholder="请输入项目级别"> <el-select v-model="formData.projectLevel" :disabled="formType" placeholder="请输入项目级别">
@ -26,6 +26,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #projectType>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目类型" prop="projectType"> <el-form-item label="项目类型" prop="projectType">
<el-select v-model="formData.projectType" :disabled="formType" placeholder="请选择项目类型"> <el-select v-model="formData.projectType" :disabled="formType" placeholder="请选择项目类型">
@ -38,11 +40,15 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #name>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目名称" prop="name"> <el-form-item label="项目名称" prop="name">
<el-input v-model="formData.name" :disabled="formType" placeholder="请输入项目名称" /> <el-input v-model="formData.name" :disabled="formType" placeholder="请输入项目名称" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #userId>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目负责人" prop="userId"> <el-form-item label="项目负责人" prop="userId">
<el-select <el-select
@ -60,6 +66,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #startDate>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目开始日期" prop="startDate"> <el-form-item label="项目开始日期" prop="startDate">
<el-date-picker <el-date-picker
@ -72,6 +80,8 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #endDate>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="项目结束日期" prop="endDate"> <el-form-item label="项目结束日期" prop="endDate">
<el-date-picker <el-date-picker
@ -84,6 +94,8 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #deptId>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="归属部门" prop="deptId"> <el-form-item label="归属部门" prop="deptId">
<el-tree-select <el-tree-select
@ -97,52 +109,68 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #bonusEvaluation>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="立项奖金评估" prop="bonusEvaluation"> <el-form-item label="立项奖金评估" prop="bonusEvaluation">
<el-radio-group v-model="formData.bonusEvaluation"> <el-radio-group v-model="formData.bonusEvaluation">
<el-switch <el-switch
disabled :disabled="formFields.bonusEvaluation !== 2 || isTrue"
v-model="formData.bonusEvaluation" v-model="formData.bonusEvaluation"
class="ml-2" class="ml-2"
/> />
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #bonusAmount>
<el-col :span="8" v-if="formData.bonusEvaluation"> <el-col :span="8" v-if="formData.bonusEvaluation">
<el-form-item label="立项奖金金额" prop="bonusAmount"> <el-form-item label="立项奖金金额" prop="bonusAmount">
<el-input v-model="formData.bonusAmount" disabled oninput="value=value.match(/^\d+(?:\.\d{0,2})?/)" placeholder="请输入奖金评估描述" /> <el-input v-model="formData.bonusAmount" :disabled="formFields.bonusAmount !== 2 || isTrue" oninput="value=value.match(/^\d+(?:\.\d{0,2})?/)" placeholder="请输入奖金评估描述" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #progress>
<el-col :span="8" v-if="formData.bonusEvaluation"> <el-col :span="8" v-if="formData.bonusEvaluation">
<el-form-item label="项目进度(%" prop="progress"> <el-form-item label="项目进度(%" prop="progress">
<el-input v-model="formData.progress" disabled oninput = "value=value.replace(/[^\d]/g,'')" placeholder="请输入奖金评估描述" /> <el-input v-model="formData.progress" :disabled="formFields.progress !== 2 || isTrue" oninput = "value=value.replace(/[^\d]/g,'')" placeholder="请输入奖金评估描述" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #attachment>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="项目附件" prop="attachment"> <el-form-item label="项目附件" prop="attachment">
<UploadFile v-model="formData.attachment" :disabled="!!formType" :limit="1" :fileType="['doc','docx']"/> <UploadFile v-model="formData.attachment" :disabled="!!formType" :limit="1" :fileType="['doc','docx']"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </template>
<ContentWrap style="border: none;font-weight: 700" v-if="formData.auditStatus == 2"> <template #other1>
项目信息 <ContentWrap style="border: none;font-weight: 700" v-if="formData.auditStatus == 2">
</ContentWrap> 项目信息
<el-row> </ContentWrap>
</template>
<template #background>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="项目背景" prop="background"> <el-form-item label="项目背景" prop="background">
<el-input v-model="formData.background" type="textarea" :disabled="formType" :rows="5" placeholder="请输入项目背景" /> <el-input v-model="formData.background" type="textarea" :disabled="formType" :rows="5" placeholder="请输入项目背景" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #introduction>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="项目简介" prop="introduction"> <el-form-item label="项目简介" prop="introduction">
<el-input v-model="formData.introduction" type="textarea" :disabled="formType" :rows="5" placeholder="请输入项目简介" /> <el-input v-model="formData.introduction" type="textarea" :disabled="formType" :rows="5" placeholder="请输入项目简介" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #expectation>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="项目预期" prop="expectation"> <el-form-item label="项目预期" prop="expectation">
<el-input v-model="formData.expectation" type="textarea" :disabled="formType" :rows="5" placeholder="请输入项目预期" /> <el-input v-model="formData.expectation" type="textarea" :disabled="formType" :rows="5" placeholder="请输入项目预期" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #other2>
<!-- <el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="项目进度" prop="progress"> <el-form-item label="项目进度" prop="progress">
<el-input v-model="formData.progress" placeholder="请输入项目进度" /> <el-input v-model="formData.progress" placeholder="请输入项目进度" />
@ -160,33 +188,36 @@
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
</el-col> --> </el-col> -->
</el-row> <ContentWrap style="border: none;font-weight: 700" v-if="formData.auditStatus == 2">
<ContentWrap style="border: none;font-weight: 700" v-if="formData.auditStatus == 2"> 奖金信息
奖金信息 </ContentWrap>
</ContentWrap> <div style="width: 100%;display:flex" v-if="formData.auditStatus == 2">
<el-row v-if="formData.auditStatus == 2"> <el-col :span="8">
<el-col :span="8"> <el-form-item label="系数总和" prop="">
<el-form-item label="系数总和" prop=""> <el-input v-model="coefficient" disabled placeholder="系数总和" />
<el-input v-model="coefficient" disabled placeholder="系数总和" /> </el-form-item>
</el-form-item> </el-col>
<el-col :span="8">
<el-form-item label="团队奖金" prop="">
<el-input v-model="teamAmount" disabled placeholder="团队奖金" />
</el-form-item>
</el-col>
</div>
<ContentWrap style="border: none;font-weight: 700" v-if="formData.auditStatus == 2">
团队成员
</ContentWrap>
<el-col :span="24">
<Bonus ref="formRef" :formFields="formFields" v-if="formData.auditStatus == 2" :userOptions="userOptions" :type="formType" :id="formData.id" @success="getData" />
</el-col> </el-col>
<el-col :span="8">
<el-form-item label="团队奖金" prop="">
<el-input v-model="teamAmount" disabled placeholder="团队奖金" />
</el-form-item>
</el-col>
</el-row>
<ContentWrap style="border: none;font-weight: 700" v-if="formData.auditStatus == 2">
团队成员
</ContentWrap>
<Bonus ref="formRef" v-if="formData.auditStatus == 2" :userOptions="userOptions" :type="formType" :id="formData.id" @success="getData" />
<ContentWrap style="border: none;font-weight: 700" v-if="formData.auditStatus == 2"> <ContentWrap style="border: none;font-weight: 700" v-if="formData.auditStatus == 2">
任务信息 任务信息
</ContentWrap> </ContentWrap>
<Task ref="taskRef" v-if="formData.auditStatus == 2" :userOptions="userOptions" :type="formType" :id="formData.id" :userId="formData.userId" :name="formData.name" /> <el-col :span="24">
<Task ref="taskRef" :formFields="formFields" v-if="formData.auditStatus == 2" :userOptions="userOptions" :type="formType" :id="formData.id" :userId="formData.userId" :name="formData.name" />
</el-form> </el-col>
</template>
</processForm>
</ContentWrap> </ContentWrap>
@ -202,6 +233,9 @@ import * as DeptApi from '@/api/system/dept'
import { propTypes } from '@/utils/propTypes' import { propTypes } from '@/utils/propTypes'
import * as UserApi from '@/api/system/user' import * as UserApi from '@/api/system/user'
import { useUserStore } from '@/store/modules/user' import { useUserStore } from '@/store/modules/user'
import { getLimitForm } from '@/api/bpm/form'
const { proxy }: any = getCurrentInstance(); const { proxy }: any = getCurrentInstance();
/** 项目管理 表单 */ /** 项目管理 表单 */
@ -212,6 +246,7 @@ const props = defineProps({
id: propTypes.number.def(undefined), id: propTypes.number.def(undefined),
type: propTypes.number.def(undefined), type: propTypes.number.def(undefined),
}) })
const isTrue = ref(false)
const userOptions = ref<UserApi.UserVO[]>([]) // const userOptions = ref<UserApi.UserVO[]>([]) //
const message = useMessage() // const message = useMessage() //
const deptTree = ref() // const deptTree = ref() //
@ -232,6 +267,23 @@ const validateProgress = (_: any, __: any, callback: any) => {
callback() callback()
} }
const formFields = ref({ //
projectLevel: 1,
projectType: 1,
name: 1,
userId: 1,
startDate: 1,
endDate: 1,
deptId: 1,
bonusEvaluation: 1,
bonusAmount: 1,
progress: 1,
other1: 1,
background: 1,
introduction: 1,
expectation: 1,
other2: 1,
})
const formData = ref({ const formData = ref({
id: undefined, id: undefined,
projectCode: undefined, projectCode: undefined,
@ -345,16 +397,44 @@ const resetForm = () => {
processInstanceId: undefined, processInstanceId: undefined,
auditStatus: undefined auditStatus: undefined
} }
formRef.value?.resetFields() // formRef.value?.resetFields()
} }
const route = useRoute(); const route = useRoute();
//
const getLimit = async () => {
let data = {
modelNodeId: route.query.taskDefinitionKey,
processDefinitionId: route.query.processDefinitionId
}
let field = await getLimitForm(data)
formFields.value = Object.assign(formFields.value, field.fields)
for(let key in formFields.value) {
let newKey = key
if(formFields.value.hasOwnProperty(newKey)) {
field.fields.map( v => {
let newKey = v.field
if(v.field.indexOf('.') > -1) {
newKey = v.field.split('.')[1]
}
if(newKey === key) formFields.value[key] = v.permission
})
}
}
}
onMounted(async () => { onMounted(async () => {
formType.value = props.id || route.query.id formType.value = props.id || route.query.id
isTrue.value = !!route.query.isDetail
if (formType.value) await open(formType.value) if (formType.value) await open(formType.value)
if(route.query.processDefinitionId) getLimit()
deptTree.value = handleTree(await DeptApi.getSimpleDeptList()) deptTree.value = handleTree(await DeptApi.getSimpleDeptList())
// //
userOptions.value = await UserApi.getSimpleUserList() userOptions.value = await UserApi.getSimpleUserList()

View File

@ -1,19 +1,22 @@
<template> <template>
<ContentWrap style="margin-right:10px"> <ContentWrap style="margin-right:10px">
<el-form <processForm
ref="formRef" ref="formRef"
:model="formData" :model="formData"
:rules="formRules" :rules="formRules"
:fields="formFields"
label-width="100px" label-width="100px"
v-loading="formLoading" v-loading="formLoading"
> >
<el-row> <template #projectName>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="项目名称" prop="projectName"> <el-form-item label="项目名称" prop="projectName">
<el-input v-model="formData.projectName" disabled placeholder="请输入任务名称" /> <el-input v-model="formData.projectName" disabled placeholder="请输入任务名称" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #projectUser>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="项目负责人" prop="projectUser"> <el-form-item label="项目负责人" prop="projectUser">
<el-select v-model="formData.projectUser" disabled placeholder=""> <el-select v-model="formData.projectUser" disabled placeholder="">
@ -26,14 +29,18 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #taskName>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="任务标题" prop="taskName"> <el-form-item label="任务标题" prop="taskName">
<el-input v-model="formData.taskName" disabled placeholder="请输入任务名称" /> <el-input v-model="formData.taskName" :disabled="formFields.taskName !== 2 || isTrue" placeholder="请输入任务名称" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #userId>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="任务负责人" prop="userId"> <el-form-item label="任务负责人" prop="userId">
<el-select v-model="formData.userId" disabled placeholder="请选择成员姓名"> <el-select v-model="formData.userId" :disabled="formFields.userId !== 2 || isTrue" placeholder="请选择成员姓名">
<el-option <el-option
v-for="dict in userOptions" v-for="dict in userOptions"
:key="dict.id" :key="dict.id"
@ -43,10 +50,12 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #startDate>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="开始日期" prop="startDate"> <el-form-item label="开始日期" prop="startDate">
<el-date-picker <el-date-picker
disabled :disabled="formFields.startDate !== 2 || isTrue"
style="width: 100%" style="width: 100%"
v-model="formData.startDate" v-model="formData.startDate"
type="date" type="date"
@ -55,10 +64,12 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #endDate>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="截止日期" prop="endDate"> <el-form-item label="截止日期" prop="endDate">
<el-date-picker <el-date-picker
disabled :disabled="formFields.endDate !== 2 || isTrue"
v-model="formData.endDate" v-model="formData.endDate"
style="width: 100%" style="width: 100%"
type="date" type="date"
@ -67,9 +78,11 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #taskLevel>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="任务优先级" prop="taskLevel"> <el-form-item label="任务优先级" prop="taskLevel">
<el-select v-model="formData.taskLevel" disabled filterable clearable placeholder="请输入任务优先级" class="w-1/1"> <el-select v-model="formData.taskLevel" :disabled="formFields.taskLevel !== 2 || isTrue" filterable clearable placeholder="请输入任务优先级" class="w-1/1">
<el-option <el-option
v-for="dict in getIntDictOptions(DICT_TYPE.TTS_TASK_LEVEL)" v-for="dict in getIntDictOptions(DICT_TYPE.TTS_TASK_LEVEL)"
:key="dict.value" :key="dict.value"
@ -79,23 +92,29 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #taskProgress>
<el-col :span="12" v-if="formType === 'update'"> <el-col :span="12" v-if="formType === 'update'">
<el-form-item label="任务进度" prop="taskProgress"> <el-form-item label="任务进度" prop="taskProgress">
<el-input v-model="formData.taskProgress" disabled oninput = "value=value.replace(/[^\d]/g,'')" placeholder="请输入任务进度" /> <el-input v-model="formData.taskProgress" :disabled="formFields.taskProgress !== 2 || isTrue" oninput = "value=value.replace(/[^\d]/g,'')" placeholder="请输入任务进度" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #attachment>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="任务附件" prop="attachment"> <el-form-item label="任务附件" prop="attachment">
<UploadFile v-model="formData.attachment" :disabled="true" :limit="1" :fileType="['doc','docx']"/> <UploadFile v-model="formData.attachment" :disabled="formFields.attachment !== 2 || isTrue" :limit="1" :fileType="['doc','docx']"/>
</el-form-item> </el-form-item>
</el-col> </el-col>
</template>
<template #taskDescribe>
<el-col :span="24"> <el-col :span="24">
<el-form-item label="任务描述" prop="taskDescribe"> <el-form-item label="任务描述" prop="taskDescribe">
<el-input v-model="formData.taskDescribe" disabled type="textarea" :rows="5" placeholder="请输入任务描述" /> <el-input v-model="formData.taskDescribe" :disabled="formFields.taskDescribe !== 2 || isTrue" type="textarea" :rows="5" placeholder="请输入任务描述" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </template>
</el-form> </processForm>
</ContentWrap> </ContentWrap>
</template> </template>
@ -105,11 +124,13 @@ import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
import { propTypes } from '@/utils/propTypes' import { propTypes } from '@/utils/propTypes'
import * as DeptApi from '@/api/system/dept' import * as DeptApi from '@/api/system/dept'
import * as UserApi from '@/api/system/user' import * as UserApi from '@/api/system/user'
import { getLimitForm } from '@/api/bpm/form'
/** 任务 表单 */ /** 任务 表单 */
defineOptions({ name: 'ProjectTaskForm' }) defineOptions({ name: 'ProjectTaskForm' })
const userOptions = ref<UserApi.UserVO[]>([]) // const userOptions = ref<UserApi.UserVO[]>([]) //
const isTrue = ref(false)
const { t } = useI18n() // const { t } = useI18n() //
const message = useMessage() // const message = useMessage() //
const props = defineProps({ const props = defineProps({
@ -129,6 +150,18 @@ const validateProgress = (_: any, __: any, callback: any) => {
callback() callback()
} }
const formType = ref('') // create - update - const formType = ref('') // create - update -
const formFields = ref({ //,
projectName: 1,
projectUser: 1,
taskName: 1,
userId: 1,
startDate: 1 ,
endDate: 1,
taskLevel: 1,
taskProgress: 1,
attachment: 1,
taskDescribe: 1 ,
})
const formData = ref({ const formData = ref({
id: undefined, id: undefined,
taskName: undefined, taskName: undefined,
@ -220,13 +253,39 @@ const resetForm = () => {
projectUser: undefined, projectUser: undefined,
projectName: undefined, projectName: undefined,
} }
formRef.value?.resetFields() // formRef.value?.resetFields()
}
const route = useRoute();
//
const getLimit = async () => {
let data = {
modelNodeId: route.query.taskDefinitionKey,
processDefinitionId: route.query.processDefinitionId
}
let field = await getLimitForm(data)
for(let key in formFields.value) {
if(formFields.value.hasOwnProperty(key)) {
field.fields.map( v => {
let newKey = v.field
if(v.field.indexOf('.') > -1) {
newKey = v.field.split('.')[1]
}
if(newKey === key) formFields.value[key] = v.permission
})
}
}
} }
onMounted(async () => { onMounted(async () => {
isTrue.value = !!route.query.isDetail
formType.value = props.id formType.value = props.id
if (formType.value) await open(formType.value) if (formType.value) await open(formType.value)
if(route.query.processDefinitionId) getLimit()
// //
userOptions.value = await UserApi.getSimpleUserList() userOptions.value = await UserApi.getSimpleUserList()