问题处理

pull/781/head
zy 2025-05-19 19:02:17 +08:00
parent 4d78cc06f2
commit 990223ec34
12 changed files with 229 additions and 192 deletions

View File

@ -18,75 +18,78 @@
:key="item.id" :key="item.id"
:label="item.name" :label="item.name"
:value="item.id" /> :value="item.id" />
</el-select> </el-select>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { ref, watch, nextTick, onMounted, onBeforeUnmount } from 'vue'
import { propTypes } from '@/utils/propTypes' import { propTypes } from '@/utils/propTypes'
defineOptions({ name: 'SelectCustomer' }) defineOptions({ name: 'SelectCustomer' })
const props = defineProps({ const props = defineProps({
disabled: propTypes.number.def(undefined), disabled: propTypes.number.def(undefined),
modelValue: propTypes.number.def(undefined), modelValue: propTypes.number.def(undefined),
placeholder: { placeholder: {
type:String, type: String,
default: '请选择' default: '请选择'
}, },
customerList: propTypes.object.def([]), // customerList: propTypes.object.def([]), //
}) })
const options = ref([]) //
const selectValue = ref( '') const options = ref([]) //
const selectValue = ref('')
const loading = ref(false)
const allFilterEvents = ref([])
watch(() => props.modelValue, (val) => { watch(() => props.modelValue, (val) => {
selectValue.value = val selectValue.value = val
let arr = options.value.filter( v=> v.id === val) let arr = options.value.filter(v => v.id === val)
if (!arr.length) { if (!arr.length) {
let selectItem = props.customerList.filter( v=> v.id === val) let selectItem = props.customerList.filter(v => v.id === val)
options.value = [...options.value, ...selectItem] options.value = [...options.value, ...selectItem]
} }
}, { }, { immediate: true })
immediate: true,
});
watch(() => props.customerList, (val) => { watch(() => props.customerList, (val) => {
options.value = val.slice(0, 10) options.value = val.slice(0, 10)
}, { }, { deep: true })
deep: true,
});
let pageNo = ref(1) let pageNo = ref(1)
let pageSize = ref(10) let pageSize = ref(10)
const loading = ref(false);
const allFilterEvents = reactive([]);
const vElSelectLoadmore = { const vElSelectLoadmore = {
beforeMount(el, binding) { beforeMount(el, binding) {
const selectDom = document.querySelector('.event-select-poper .el-select-dropdown__wrap'); let selectDom = null;
const loadMores = function() { nextTick(() => {
const isBase = this.scrollHeight - this.scrollTop <= this.clientHeight + 20; selectDom = document.querySelector('.event-select-poper .el-select-dropdown__wrap');
if (isBase) { if (selectDom) {
binding.value && binding.value(); const loadMores = function () {
if (this.scrollHeight - this.scrollTop <= this.clientHeight + 20) {
binding.value && binding.value();
}
};
el.selectLoadMore = loadMores;
selectDom.addEventListener('scroll', loadMores.bind(selectDom));
} }
}; });
el.selectDomInfo = selectDom;
el.selectLoadMore = loadMores;
selectDom?.addEventListener('scroll', loadMores.bind(selectDom));
}, },
beforeUnmount(el) { beforeUnmount(el) {
if (el.selectLoadMore) { if (el.selectLoadMore) {
el.selectDomInfo.removeEventListener('scroll', el.selectLoadMore); const selectDom = document.querySelector('.event-select-poper .el-select-dropdown__wrap');
delete el.selectDomInfo; if (selectDom) {
selectDom.removeEventListener('scroll', el.selectLoadMore);
}
delete el.selectLoadMore; delete el.selectLoadMore;
} }
} }
}; }
watch(() => allFilterEvents, () => { watch(allFilterEvents, () => {
let startIndex = pageNo.value * pageSize.value - pageSize.value; let startIndex = pageNo.value * pageSize.value - pageSize.value;
let endIndex = pageNo.value * pageSize.value; let endIndex = pageNo.value * pageSize.value;
options.value = allFilterEvents.slice(startIndex, endIndex); options.value = allFilterEvents.value.slice(startIndex, endIndex);
}, { }, { immediate: true, deep: true })
immediate: true,
deep: true
});
const loadmore = () => { const loadmore = () => {
if (props.customerList.length <= options.value.length) return; if (props.customerList.length <= options.value.length) return;
@ -101,31 +104,31 @@ const loadmore = () => {
]; ];
loading.value = false; loading.value = false;
}); });
}; }
const filterOptions = (query = '') => { const filterOptions = (query = '') => {
pageNo.value = 1; pageNo.value = 1;
nextTick(() => { nextTick(() => {
if (query === '') { if (query === '') {
allFilterEvents.splice(0, allFilterEvents.length, ...props.customerList); allFilterEvents.value = [...props.customerList];
} else { } else {
allFilterEvents.splice(0, allFilterEvents.length, ...props.customerList.filter(item => item.name.includes(query))); allFilterEvents.value = props.customerList.filter(item => item.name.includes(query));
} }
}); });
}; }
const handleVisibleChange = (visible) => { const handleVisibleChange = (visible) => {
if (!visible) { if (!visible) {
pageNo.value = 1; pageNo.value = 1;
nextTick(() => { nextTick(() => {
allFilterEvents.splice(0, allFilterEvents.length, ...props.customerList); allFilterEvents.value = [...props.customerList];
}); });
} }
}; }
const emit = defineEmits(['update:modelValue', 'change']) const emit = defineEmits(['update:modelValue', 'change'])
const handleEventsChange = (val) => { const handleEventsChange = (val) => {
emit('update:modelValue', val); emit('update:modelValue', val);
emit('change', val); emit('change', val);
}; }
</script> </script>

View File

@ -217,6 +217,7 @@ export enum DICT_TYPE {
CRM_PRODUCT_INVOICE_ITEMS='crm_product_invoice_items',// 产品开票项目 CRM_PRODUCT_INVOICE_ITEMS='crm_product_invoice_items',// 产品开票项目
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',// 销售阶段
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 产品明细类型

View File

@ -233,4 +233,7 @@ onMounted(async () => {
// //
processDefinitionList.value = await DefinitionApi.getSimpleProcessDefinitionList() processDefinitionList.value = await DefinitionApi.getSimpleProcessDefinitionList()
}) })
onActivated(()=>{
getList()
})
</script> </script>

View File

@ -8,11 +8,11 @@
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> -->
<el-col :span="8"> <el-col :span="8">
<el-form-item label="线索拓展人" prop="ownerUserId"> <el-form-item label="线索拓展人" prop="ownerUserId">
<el-select <el-select
@ -85,7 +85,7 @@
/> />
</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 +102,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
@ -117,7 +117,7 @@
</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="type" clearable placeholder="请选择销售阶段"> <el-select v-model="formData.saleStage" disabled clearable placeholder="请选择销售阶段">
<el-option <el-option
v-for="dict in getIntDictOptions('sale_stage')" v-for="dict in getIntDictOptions('sale_stage')"
:key="dict.value" :key="dict.value"
@ -304,7 +304,7 @@ const formData = ref({
offlinePrice: 0, offlinePrice: 0,
totalProductPrice: 0, totalProductPrice: 0,
totalPrice: 0, totalPrice: 0,
saleStage: undefined, saleStage: 1,
paymentTerm: undefined, paymentTerm: undefined,
creditMethod: undefined, creditMethod: undefined,
creditCalcCycle: undefined, creditCalcCycle: undefined,

View File

@ -8,15 +8,25 @@
class="-mb-15px" class="-mb-15px"
label-width="68px" label-width="68px"
> >
<el-form-item label="商机名称" prop="name"> <el-form-item label="客户名称" prop="customerId">
<el-input <SelectComponent :customerList="customerList" class="!w-240px" v-model="queryParams.customerId" />
v-model="queryParams.name" <!-- <el-select
class="!w-240px" v-model="queryParams.customerId"
clearable class="!w-240px"
placeholder="请输入商机名称" clearable
@keyup.enter="handleQuery" lable-key="name"
/> placeholder="请选择客户"
</el-form-item> value-key="id"
@keyup.enter="handleQuery"
>
<el-option
v-for="item in customerList"
:key="item.id"
:label="item.name"
:value="item.id!"
/>
</el-select> -->
</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" />
@ -118,10 +128,15 @@
<el-table-column align="center" label="创建人" prop="creatorName" width="100px" /> <el-table-column align="center" label="创建人" prop="creatorName" width="100px" />
<el-table-column <el-table-column
align="center" align="center"
label="商机状态组" label="销售阶段"
prop="statusTypeName" prop="saleStage"
width="140" width="140"
/> >
<template #default="scope">
<dict-tag :type="DICT_TYPE.SALE_STAGE" :value="scope.row.saleStage" />
</template>
</el-table-column>
<el-table-column <el-table-column
align="center" align="center"
label="商机阶段" label="商机阶段"
@ -168,6 +183,11 @@ import * as BusinessApi from '@/api/crm/business'
import BusinessForm from './BusinessForm.vue' import BusinessForm from './BusinessForm.vue'
import { erpPriceTableColumnFormatter } from '@/utils' import { erpPriceTableColumnFormatter } from '@/utils'
import { TabsPaneContext } from 'element-plus' import { TabsPaneContext } from 'element-plus'
import SelectComponent from '@/components/SelectCustomer/src/index.vue'
import { DICT_TYPE } from '@/utils/dict'
import * as CustomerApi from '@/api/crm/customer'
const customerList = ref<CustomerApi.CustomerVO[]>([]) //
defineOptions({ name: 'CrmBusiness' }) defineOptions({ name: 'CrmBusiness' })
@ -267,7 +287,8 @@ const handleExport = async () => {
} }
/** 初始化 **/ /** 初始化 **/
onMounted(() => { onMounted( async () => {
customerList.value = await CustomerApi.getCustomerSimpleList()
getList() getList()
}) })
onActivated(()=>{ onActivated(()=>{

View File

@ -11,11 +11,11 @@
基础信息 基础信息
</ContentWrap> </ContentWrap>
<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" placeholder="请输入合同名称" /> <el-input v-model="formData.name" placeholder="请输入合同名称" />
</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="customerId">
@ -84,6 +84,18 @@
<el-input v-model="formData.creditCalcCycle" placeholder="" disabled /> <el-input v-model="formData.creditCalcCycle" placeholder="" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-col :span="8">
<el-form-item label="票据模板" prop="invoiceTemplateId">
<el-select v-model="formData.invoiceTemplateId" disabled placeholder="">
<el-option
v-for="dict in templateOptions"
:key="dict.id"
:label="dict.name"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col> -->
<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="" />
@ -102,10 +114,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="线上总金额" prop="onlinePrice"> <el-form-item label="基础服务费合计" prop="onlinePrice">
<el-input <el-input
disabled disabled
v-model="formData.onlinePrice" v-model="formData.onlinePrice"
@ -114,7 +124,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="线下总金额" prop="offlinePrice"> <el-form-item label="线下总金额" prop="offlinePrice">
<el-input <el-input
disabled disabled
@ -123,9 +133,9 @@
:formatter="erpPriceInputFormatter" :formatter="erpPriceInputFormatter"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col> -->
<el-col :span="8"> <el-col :span="8">
<el-form-item label="总金额" prop="price"> <el-form-item label="服务费收入合计" prop="price">
<el-input <el-input
disabled disabled
placeholder="" placeholder=""
@ -134,18 +144,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8">
<el-form-item label="票据模板" prop="invoiceTemplateId">
<el-select v-model="formData.invoiceTemplateId" disabled placeholder="">
<el-option
v-for="dict in templateOptions"
:key="dict.id"
:label="dict.name"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
@ -563,6 +562,7 @@ const formRules = reactive({
penaltyRate: [{ required: true, message: '违约金比例不能为空', trigger: 'blur' }], penaltyRate: [{ required: true, message: '违约金比例不能为空', trigger: 'blur' }],
latePaymentRate: [{ required: true, message: '延期付款利率不能为空', trigger: 'blur' }], latePaymentRate: [{ required: true, message: '延期付款利率不能为空', trigger: 'blur' }],
collUserId: [{ required: true, message: '协作人不能为空', trigger: 'blur' }], collUserId: [{ required: true, message: '协作人不能为空', trigger: 'blur' }],
settleMethod: [{ required: true, message: '财务结算方式不能为空', trigger: 'change' }],
}) })
const formRef = ref() // Ref const formRef = ref() // Ref
const userOptions = ref<UserApi.UserVO[]>([]) // const userOptions = ref<UserApi.UserVO[]>([]) //
@ -821,7 +821,6 @@ const getContactOptions = computed(() =>
const route = useRoute(); const route = useRoute();
onMounted(async () => { onMounted(async () => {
if(!props.changeType) { if(!props.changeType) {
console.log('%csrc/views/crm/contract/ContractForm.vue:835 props.id', 'color: #007acc;', props.id);
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)
@ -833,12 +832,12 @@ onMounted(async () => {
// //
quotationList.value = await QuotationApi.getSelfSimpleQuotationList() quotationList.value = await QuotationApi.getSelfSimpleQuotationList()
// // //
const tempData = await BillTemplateApi.getBillTemplatePage({ // const tempData = await BillTemplateApi.getBillTemplatePage({
pageNo: 1, // pageNo: 1,
pageSize: 1000, // pageSize: 1000,
}) // })
templateOptions.value = tempData.list // templateOptions.value = tempData.list
// //

View File

@ -11,11 +11,11 @@
基础信息 基础信息
</ContentWrap> </ContentWrap>
<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 placeholder="" /> <el-input v-model="formData.name" disabled placeholder="" />
</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="customerId">
<el-select <el-select
@ -98,6 +98,18 @@
<el-input v-model="formData.creditCalcCycle" placeholder="" disabled /> <el-input v-model="formData.creditCalcCycle" placeholder="" disabled />
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-col :span="8">
<el-form-item label="票据模板" prop="invoiceTemplateId">
<el-select v-model="formData.invoiceTemplateId" disabled placeholder="">
<el-option
v-for="dict in templateOptions"
:key="dict.id"
:label="dict.name"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col> -->
<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="" />
@ -115,22 +127,9 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8">
<el-form-item label="票据模板" prop="invoiceTemplateId">
<el-select v-model="formData.invoiceTemplateId" disabled placeholder="">
<el-option
v-for="dict in templateOptions"
:key="dict.id"
:label="dict.name"
:value="dict.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8"> <el-col :span="8">
<el-form-item label="线上总金额" prop="onlinePrice"> <el-form-item label="基础服务费合计" prop="onlinePrice">
<el-input <el-input
disabled disabled
v-model="formData.onlinePrice" v-model="formData.onlinePrice"
@ -139,7 +138,7 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="线下总金额" prop="offlinePrice"> <el-form-item label="线下总金额" prop="offlinePrice">
<el-input <el-input
disabled disabled
@ -148,9 +147,9 @@
:formatter="erpPriceInputFormatter" :formatter="erpPriceInputFormatter"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col> -->
<el-col :span="8"> <el-col :span="8">
<el-form-item label="总金额" prop="price"> <el-form-item label="服务费收入合计" prop="price">
<el-input <el-input
disabled disabled
placeholder="" placeholder=""
@ -847,11 +846,11 @@ onMounted(async () => {
quotationList.value = await QuotationApi.getSimpleQuotationList() quotationList.value = await QuotationApi.getSimpleQuotationList()
// //
const tempData = await BillTemplateApi.getBillTemplatePage({ // const tempData = await BillTemplateApi.getBillTemplatePage({
pageNo: 1, // pageNo: 1,
pageSize: 1000, // pageSize: 1000,
}) // })
templateOptions.value = tempData.list // templateOptions.value = tempData.list
// //

View File

@ -71,7 +71,7 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <!-- <el-col :span="12">
<el-form-item label="保险名称" prop="insuranceId"> <el-form-item label="保险名称" prop="insuranceId">
<el-select v-model="formData.insuranceId" class="w-1/1" placeholder="请选择保险名称"> <el-select v-model="formData.insuranceId" class="w-1/1" placeholder="请选择保险名称">
<el-option <el-option
@ -82,6 +82,19 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> -->
<el-col :span="12">
<el-form-item label="是否有保险" prop="hasInsurance">
<el-radio-group v-model="formData.hasInsurance" :disabled="type">
<el-radio
v-for="dict in getStrDictOptions(DICT_TYPE.TECH_SUPPORT)"
:key="dict.value"
:value="dict.value == 2 ? 0 : 1"
>
{{ dict.label }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
@ -99,8 +112,8 @@
</Dialog> </Dialog>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
import * as ProductApi from '@/api/crm/product' import * as ProductApi from '@/api/crm/product'
import { getIntDictOptions, getStrDictOptions, DICT_TYPE, getBoolDictOptions } from '@/utils/dict';
defineOptions({ name: 'CrmProductForm' }) defineOptions({ name: 'CrmProductForm' })

View File

@ -75,11 +75,11 @@
<el-input v-model="formData.regType" disabled clearable /> <el-input v-model="formData.regType" disabled clearable />
</el-form-item> </el-form-item>
</el-col> </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" disabled clearable /> <el-input v-model="formData.listingStatus" disabled clearable />
</el-form-item> </el-form-item>
</el-col> </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" disabled clearable /> <el-input v-model="formData.financingInfo" disabled clearable />
@ -105,11 +105,13 @@
<el-input v-model="formData.enterpriseType" clearable /> <el-input v-model="formData.enterpriseType" clearable />
</el-form-item> </el-form-item>
</el-col> --> </el-col> -->
<el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="营业状态" prop="serviceStatus"> <el-form-item label="营业状态" prop="serviceStatus">
<el-input v-model="formData.serviceStatus" disabled clearable /> <el-input v-model="formData.serviceStatus" disabled clearable />
</el-form-item> </el-form-item>
</el-col> </el-col> -->
</el-row>
<el-row>
<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> <el-radio-group v-model="formData.defendantRecord" disabled>

View File

@ -75,11 +75,11 @@
<el-input v-model="formData.regType" placeholder="请输入公司类型" clearable /> <el-input v-model="formData.regType" placeholder="请输入公司类型" clearable />
</el-form-item> </el-form-item>
</el-col> </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="请输入上市情况" clearable /> <el-input v-model="formData.listingStatus" placeholder="请输入上市情况" clearable />
</el-form-item> </el-form-item>
</el-col> </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="请输入融资信息" clearable /> <el-input v-model="formData.financingInfo" placeholder="请输入融资信息" clearable />
@ -100,16 +100,18 @@
<el-input v-model="formData.startDate" placeholder="请输入成立日期" clearable /> <el-input v-model="formData.startDate" placeholder="请输入成立日期" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row>
<el-row>
<!-- <el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="企业类型" prop="enterpriseType"> <el-form-item label="企业类型" prop="enterpriseType">
<el-input v-model="formData.enterpriseType" clearable /> <el-input v-model="formData.enterpriseType" clearable />
</el-form-item> </el-form-item>
</el-col> --> </el-col> -->
<el-col :span="8"> <!-- <el-col :span="8">
<el-form-item label="营业状态" prop="serviceStatus"> <el-form-item label="营业状态" prop="serviceStatus">
<el-input v-model="formData.serviceStatus" placeholder="请输入营业状态" clearable /> <el-input v-model="formData.serviceStatus" placeholder="请输入营业状态" clearable />
</el-form-item> </el-form-item>
</el-col> </el-col> -->
<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"> <el-radio-group v-model="formData.defendantRecord">
@ -534,16 +536,17 @@ watch(
for (const product of newProducts) { for (const product of newProducts) {
if (typeof product.basicServiceFee) { if (typeof product.basicServiceFee) {
totalOnlinePrice += Number(product.basicServiceFee); console.log('%csrc/views/crm/quotation/QuotationForm.vue:537 object', 'color: pink;', product.basicServiceFee);
totalOnlinePrice += Number(product.basicServiceFee || null);
} }
if (typeof product.totalServiceFee) { if (typeof product.totalServiceFee) {
totalOfflinePrice += Number(product.totalServiceFee); totalOfflinePrice += Number(product.totalServiceFee || null);
} }
} }
formData.value.onlinePrice = totalOnlinePrice.toFixed(2) formData.value.onlinePrice = totalOnlinePrice.toFixed(2) || ''
// formData.value.offlinePrice = (totalOfflinePrice + totalOnlinePrice).toFixed(2) // formData.value.offlinePrice = (totalOfflinePrice + totalOnlinePrice).toFixed(2)
// let all = totalOnlinePrice + totalOfflinePrice + totalOnlinePrice // let all = totalOnlinePrice + totalOfflinePrice + totalOnlinePrice
formData.value.totalPrice = totalOfflinePrice.toFixed(2) formData.value.totalPrice = totalOfflinePrice.toFixed(2) || ''
}, },
{ deep: true } { deep: true }
); );
@ -627,8 +630,8 @@ const onBusinessChange = async (businessId: string) => {
formData.value.creditCalcCycle = res.creditCalcCycle; formData.value.creditCalcCycle = res.creditCalcCycle;
formData.value.deptId = res.deptId; formData.value.deptId = res.deptId;
formData.value.offlinePrice = res.offlinePrice; formData.value.offlinePrice = res.offlinePrice;
formData.value.onlinePrice = res.onlinePrice; // formData.value.onlinePrice = res.onlinePrice || '';
formData.value.totalPrice = res.totalPrice; // formData.value.totalPrice = res.totalPrice || '';
formData.value.creditAmount = res.creditAmount; formData.value.creditAmount = res.creditAmount;
// 🔁 // 🔁

View File

@ -9,16 +9,28 @@
> >
<el-row> <el-row>
<el-col :span="24">
<ContentWrap style="border: none">
本人信息
</ContentWrap>
</el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="本人姓名" prop="userId"> <el-form-item label="师徒类型" prop="mentorsType">
<el-select v-model="formData.mentorsType" placeholder="请选择师徒类型">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MENTORS_TYPE)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="本人姓名" prop="acceptUserId">
<el-select <el-select
v-model="formData.userId" v-model="formData.acceptUserId"
filterable filterable
clearable
@change="changeUser"
> >
<el-option <el-option
v-for="item in userOptions" v-for="item in userOptions"
@ -31,64 +43,22 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="员工工号" prop="processInstanceId"> <el-form-item label="员工工号" prop="processInstanceId">
<el-input v-model="formData.processInstanceId" disabled placeholder="" /> <el-input v-model="formData.acceptUserId" disabled placeholder="" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="手机号" prop="auditStatus"> <el-form-item label="手机号" prop="">
<el-input v-model="formData.processInstanceId" disabled placeholder="" /> <el-input v-model="formData.mobile" disabled placeholder="" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="部门名称" prop="auditStatus"> <el-form-item label="部门名称" prop="">
<el-input v-model="formData.processInstanceId" disabled placeholder="" /> <el-input v-model="formData.postName" disabled placeholder="" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="岗位名称" prop="auditStatus"> <el-form-item label="岗位名称" prop="">
<el-input v-model="formData.processInstanceId" disabled placeholder="" /> <el-input v-model="formData.deptName" disabled placeholder="" />
</el-form-item>
</el-col>
<el-col :span="24">
<ContentWrap style="border: none">
师徒类型
</ContentWrap>
</el-col>
<el-col :span="24">
<el-form-item label="师徒类型" prop="mentorsType">
<el-select v-model="formData.mentorsType" placeholder="请选择师徒类型">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.HRM_MENTORS_TYPE)"
: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="userId">
<el-input v-model="formData.userId" placeholder="请输入员工档案ID" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="员工工号" prop="processInstanceId">
<el-input v-model="formData.processInstanceId" disabled placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手机号" prop="auditStatus">
<el-input v-model="formData.processInstanceId" disabled placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="部门名称" prop="auditStatus">
<el-input v-model="formData.processInstanceId" disabled placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="岗位名称" prop="auditStatus">
<el-input v-model="formData.processInstanceId" disabled placeholder="" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
@ -96,30 +66,35 @@
<el-date-picker <el-date-picker
v-model="formData.effectiverDate" v-model="formData.effectiverDate"
type="date" type="date"
value-format="x" value-format="YYYY-MM-DD"
style="width:100%"
placeholder="选择申请日期" placeholder="选择申请日期"
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </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>
</ContentWrap> </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'
import { MentorsApplyApi, MentorsApplyVO } from '@/api/hrm/mentorsapply' import { MentorsApplyApi, MentorsApplyVO } from '@/api/hrm/mentorsapply'
import * as UserApi from '@/api/system/user' import * as UserApi from '@/api/system/user'
import { propTypes } from '@/utils/propTypes'
import { useUserStore } from '@/store/modules/user'
/** 师徒申请 表单 */ /** 师徒申请 表单 */
defineOptions({ name: 'MentorsApplyForm' }) defineOptions({ name: 'MentorsApplyForm' })
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
@ -135,9 +110,8 @@ const formData = ref({
effectiverDate: undefined effectiverDate: undefined
}) })
const formRules = reactive({ const formRules = reactive({
userId: [{ required: true, message: '员工档案ID不能为空', trigger: 'blur' }],
auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }], auditStatus: [{ required: true, message: '审批状态不能为空', trigger: 'blur' }],
mentorsType: [{ required: true, message: '师徒类型. 0拜师 1收徒不能为空', trigger: 'change' }], mentorsType: [{ required: true, message: '师徒类型不能为空', trigger: 'change' }],
acceptUserId: [{ required: true, message: '接受员工Id不能为空', trigger: 'blur' }], acceptUserId: [{ required: true, message: '接受员工Id不能为空', trigger: 'blur' }],
effectiverDate: [{ required: true, message: '生效日期不能为空', trigger: 'blur' }] effectiverDate: [{ required: true, message: '生效日期不能为空', trigger: 'blur' }]
}) })
@ -170,7 +144,7 @@ const submitForm = async () => {
formLoading.value = true formLoading.value = true
try { try {
const data = formData.value as unknown as MentorsApplyVO const data = formData.value as unknown as MentorsApplyVO
if (formType.value === 'create') { if (!formType.value) {
await MentorsApplyApi.createMentorsApply(data) await MentorsApplyApi.createMentorsApply(data)
message.success(t('common.createSuccess')) message.success(t('common.createSuccess'))
} else { } else {
@ -199,8 +173,26 @@ const resetForm = () => {
formRef.value?.resetFields() formRef.value?.resetFields()
} }
const changeUser = (val) => {
let arr = userOptions.value.filter( v => v.id == val)
if (arr.length) {
formData.value.mobile = arr[0]['mobile']
formData.value.postName = arr[0]['postName']
formData.value.deptName = arr[0]['deptName']
formData.value.acceptUserId = arr[0]['id']
}
}
/** 初始化 **/ /** 初始化 **/
const route = useRoute();
onMounted(async() => { 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() userOptions.value = await UserApi.getSimpleUserList()
}) })

View File

@ -141,6 +141,7 @@ const formRules = reactive<FormRules>({
], ],
mobile: [ mobile: [
{ {
required: true,
pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/, pattern: /^(?:(?:\+|00)86)?1(?:3[\d]|4[5-79]|5[0-35-9]|6[5-7]|7[0-8]|8[\d]|9[189])\d{8}$/,
message: '请输入正确的手机号码', message: '请输入正确的手机号码',
trigger: 'blur' trigger: 'blur'