# Conflicts:
#	src/views/crm/customer/CustomerForm.vue
pull/781/head
zy 2025-05-25 15:02:51 +08:00
parent 3a1bd12787
commit bee919cfb6
29 changed files with 1713 additions and 1318 deletions

View File

@ -7,10 +7,7 @@ VITE_DEV=true
# VITE_BASE_URL='http://8.130.12.151:48080'
# VITE_BASE_URL='http://lhy.free.idcfengye.com'
# VITE_BASE_URL='http://m94844f6.natappfree.cc'
# VITE_BASE_URL='http://172.22.3.168:48080'
# VITE_BASE_URL='http://m94844f6.natappfree.cc'
# VITE_BASE_URL='http://172.22.3.168:48080'
VITE_BASE_URL='http://localhost:48080'
VITE_BASE_URL='http://172.22.3.49:48080'
# VITE_BASE_URL='http://172.22.3.203:48080'
# 文件上传类型server - 后端上传, client - 前端直连上传,仅支持 S3 服务

View File

@ -12,7 +12,7 @@
"test-server": "vite --mode test",
"ts:check": "vue-tsc --noEmit",
"build:local": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build",
"build:dev": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode dev",
"build:dev": "node --max_old_space_size=5048 ./node_modules/vite/bin/vite.js build --mode dev",
"build:test": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode test",
"build:stage": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode stage",
"build:prod": "node --max_old_space_size=4096 ./node_modules/vite/bin/vite.js build --mode prod",

File diff suppressed because it is too large Load Diff

View File

@ -45,7 +45,6 @@ const allFilterEvents = ref([])
watch(() => props.modelValue, (val) => {
selectValue.value = val
console.log('%csrc/components/SelectCustomer/src/index.vue:48 val,', 'green', val,props.customerList);
nextTick(() => {
let arr = options.value.filter(v => v.id === val)
if (!arr.length) {
@ -57,12 +56,10 @@ watch(() => props.modelValue, (val) => {
watch(() => props.customerList, (val) => {
options.value = val.slice(0, 10)
console.log('%csrc/components/SelectCustomer/src/index.vue:60 props.customerList,4444', 'color: pink;', props.modelValue,props.customerList,4444);
nextTick(() => {
let arr = options.value.filter(v => v.id === props.modelValue)
if (!arr.length) {
let selectItem = props.customerList.filter(v => v.id === props.modelValue)
console.log('%csrc/components/SelectCustomer/src/index.vue:65 selectItem', 'color: #007acc;', selectItem);
options.value = [...options.value, ...selectItem]
}
})

View File

@ -1,5 +1,5 @@
<template>
<el-form :model="model" :rules="rules" label-width="120px" v-loading="loading">
<el-form :model="model" ref="innerFormRef" :rules="rules" label-width="120px" v-loading="loading">
<el-row>
<!-- 动态渲染插槽内容 -->
<template v-for="(field, index) in Object.keys(fields)" :key="index">
@ -12,8 +12,8 @@
</el-form>
</template>
<script lang="ts">
import { defineComponent, PropType } from 'vue';
<script lang="ts" >
import { defineComponent, PropType, defineExpose } from 'vue';
export default defineComponent({
name: 'processForm',
@ -35,5 +35,25 @@ export default defineComponent({
default: false,
},
},
setup(props) {
const innerFormRef = ref(null);
// validate
defineExpose({
validate: () => {
if (innerFormRef.value) {
return innerFormRef.value.validate();
} else {
console.error('innerFormRef.value is null');
return Promise.reject(new Error('Form reference is not available'));
}
},
});
return {
innerFormRef,
};
},
});
</script>

View File

@ -397,7 +397,7 @@ export enum DICT_TYPE {
// 考核类型
HRM_ASSESS_TYPE = 'hrm_assess_type',
//需求部门
HRM_EMAND_DEPARTMENT = 'hrm_emand_department'
HRM_EMAND_DEPARTMENT = 'hrm_emand_department',
HRM_CLOCK_STATUS = 'hrm-clock-status',
}

View File

@ -15,7 +15,7 @@
</el-col> -->
<el-col :span="8">
<el-form-item label="客户名称" prop="customerId">
<SelectComponent :customerList="customerList" :disabled="formData.customerDefault || type" v-model="formData.customerId" />
<SelectComponent :customerList="customerList" @change="changeCustomer" :disabled="formData.customerDefault || type || route.query.bizId" v-model="formData.customerId" />
<!-- <el-select
:disabled="formData.customerDefault || type"
v-model="formData.customerId"
@ -50,6 +50,24 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维护人" prop="maintenanceUserId">
<el-select
v-model="formData.maintenanceUserId"
clearable
disabled
placeholder=""
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-form-item label="需求提交人" prop="requestorUserId">
<el-select
@ -69,25 +87,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维护人" prop="maintenanceUserId">
<el-select
v-model="formData.maintenanceUserId"
clearable
:disabled="formType || type"
:placeholder="formType ? '' : '请选择维护人'"
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-form-item label="归属部门" prop="deptId">
@ -370,7 +370,7 @@ const techOptions = ref([]);
const difficultOptions = ref([]);
const deptTree = ref();
const props = defineProps({
type: propTypes.number.def(undefined)
type: propTypes.number.def(undefined),
})
const subTabsName = ref('product');
const productFormRef = ref();
@ -500,17 +500,29 @@ const resetForm = () => {
formRef.value?.resetFields();
};
const changeCustomer = async (val) => {
const customerRes = await CustomerApi.getCustomer(val);
formData.value.clueDeveloper = customerRes.clueDeveloper
formData.value.maintenanceUserId = customerRes.maintainer
}
const changeCheck = (val) => {
productFormRef.value.getData(val)
}
const route = useRoute();
onMounted(async () => {
console.log('%csrc/views/crm/business/BusinessForm.vue:512 props', 'color: #007acc;', route.query);
const customerId = route.query.customerId;
formData.value.clueDeveloper = customerId ? '' : useUserStore().getUser.id;
formData.value.customerId = Number(route.query.bizId) || ''
formData.value.clueDeveloper = Number(route.query.clueDeveloper) || ''
formData.value.maintenanceUserId = Number(route.query.maintenanceUserId) || ''
formData.value.requestorUserId = customerId ? '' : useUserStore().getUser.id;
formType.value = route.query.id || route.params.id;
if (formType.value) open(formType.value, customerId)
customerList.value = await CustomerApi.getSelfCustomerSimpleList();
statusTypeList.value = await BusinessStatusApi.getBusinessStatusTypeSimpleList();
userOptions.value = await UserApi.getSimpleUserList();

View File

@ -1,7 +1,7 @@
<template>
<!-- 操作栏 -->
<el-row justify="end">
<el-button @click="openForm">
<el-button @click="openForm" type="primary">
<Icon class="mr-5px" icon="ep:opportunity" />
创建商机
</el-button>
@ -74,6 +74,8 @@ const props = defineProps<{
bizId: number //
customerId?: number // customerId
contactId?: number //
clueDeveloper: number
maintenanceUserId: number
}>()
const loading = ref(true) //
@ -130,7 +132,15 @@ const handleQuery = () => {
const { push } = useRouter()
const formRef = ref()
const openForm = () => {
push({ name: 'CrmBusinessAdd' })
console.log('%csrc/views/crm/business/components/BusinessList.vue:135 props', 'color: green;', props);
push({
name: 'CrmBusinessAdd',
query: {
bizId: props.bizId,
clueDeveloper: props.clueDeveloper,
maintenanceUserId: props.maintenanceUserId
}
})
}
/** 打开联系人详情 */

View File

@ -34,13 +34,6 @@
</el-select> -->
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人" prop="name">
<el-input v-model="formData.name" placeholder="请输入联系人" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="登记人" prop="ownerUserId">
<el-select
@ -58,11 +51,35 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人" prop="name">
<el-input v-model="formData.name" placeholder="请输入联系人" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="角色" prop="contactRoleType">
<el-select v-model="formData.contactRoleType" placeholder="请选择角色" class="w-1/1">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CONTACT_ROLE_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="mobile">
<el-input v-model="formData.mobile" placeholder="请输入手机" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="职位" prop="post">
<el-input v-model="formData.post" placeholder="请输入职位" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<!-- <el-col :span="12">
@ -74,31 +91,13 @@
<el-form-item label="邮箱" prop="email">
<el-input v-model="formData.email" placeholder="请输入邮箱" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="角色" prop="contactRoleType">
<el-select v-model="formData.contactRoleType" placeholder="请选择角色" class="w-1/1">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CONTACT_ROLE_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="wechat">
<el-input v-model="formData.wechat" placeholder="请输入微信" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="职位" prop="post">
<el-input v-model="formData.post" placeholder="请输入职位" />
</el-form-item>
</el-col>
<el-col :span="12">
<!-- <el-col :span="12">
<el-form-item label="关键决策人" prop="master" style="width: 400px">
<el-radio-group v-model="formData.master">
<el-radio
@ -110,7 +109,7 @@
</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-col>-->
<el-col :span="12">
<el-form-item label="性别" prop="sex">
<el-select v-model="formData.sex" placeholder="请选择" class="w-1/1">
@ -128,7 +127,7 @@
<el-input v-model="formData.birthday" placeholder="请输入生日" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-col>
<el-form-item label="爱好" prop="hobby">
<el-input v-model="formData.hobby" placeholder="请输入爱好" />
</el-form-item>
@ -161,16 +160,16 @@
/>
</el-form-item>
</el-col>-->
<el-col >
<el-form-item label="注册地址" prop="registeredAddress">
<el-input v-model="formData.registeredAddress" disabled placeholder="请输入注册地址" />
</el-form-item>
</el-col>
<el-col >
<el-form-item label="家庭地址" prop="detailAddress">
<el-input v-model="formData.detailAddress" placeholder="请输入家庭地址" />
</el-form-item>
</el-col>
<el-col >
<el-form-item label="办公地址" prop="registeredAddress">
<el-input v-model="formData.registeredAddress" disabled placeholder="办公地址自动带出" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<!-- <el-col :span="12">

View File

@ -1,11 +1,11 @@
<template>
<!-- 操作栏 -->
<el-row justify="end">
<el-button @click="openForm">
<el-button @click="openForm" type="primary">
<Icon class="mr-5px" icon="system-uicons:contacts" />
创建联系人
</el-button>
<el-button
<el-button type="primary"
v-if="queryParams.businessId"
v-hasPermi="['crm:contact:create-business']"
@click="openBusinessModal"
@ -13,7 +13,7 @@
<Icon class="mr-5px" icon="ep:circle-plus" />
关联
</el-button>
<el-button
<el-button type="danger"
v-if="queryParams.businessId"
v-hasPermi="['crm:contact:delete-business']"
@click="deleteContactBusinessList"
@ -42,7 +42,7 @@
</el-table-column>
<el-table-column align="center" label="手机号" prop="mobile" />
<el-table-column align="center" label="职位" prop="post" />
<el-table-column align="center" label="直属上级" prop="parentName" />
<!-- <el-table-column align="center" label="直属上级" prop="parentName" />-->
<el-table-column align="center" label="是否关键决策人" min-width="100" prop="master">
<template #default="scope">
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.master" />

View File

@ -7,7 +7,7 @@
:inline="true"
:model="queryParams"
class="-mb-15px"
label-width="90px"
label-width="120px"
>
<el-form-item label="联系人名称" prop="name">
<el-input
@ -54,7 +54,7 @@
</el-table-column>
<el-table-column align="center" label="手机号" prop="mobile" />
<el-table-column align="center" label="职位" prop="post" />
<el-table-column align="center" label="直属上级" prop="parentName" />
<!-- <el-table-column align="center" label="直属上级" prop="parentName" />-->
<el-table-column align="center" label="是否关键决策人" min-width="100" prop="master">
<template #default="scope">
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.master" />

View File

@ -102,7 +102,7 @@
</el-link>
</template>
</el-table-column>
<el-table-column align="center" fixed="left" label="客户名称" prop="customerName" width="220">
<el-table-column align="center" fixed="left" label="客户名称" prop="customerName" width="280">
<!-- <template #default="scope">
<el-link
:underline="false"
@ -118,11 +118,11 @@
<el-table-column align="center" label="邮箱" prop="email" width="180" />
<el-table-column align="center" label="职位" prop="post" width="120" />
<el-table-column align="center" label="地址" prop="detailAddress" width="120" />
<el-table-column align="center" label="关键决策人" prop="master" width="100">
<!-- <el-table-column align="center" label="关键决策人" prop="master" width="100">
<template #default="scope">
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.master" />
</template>
</el-table-column>
</el-table-column>-->
<el-table-column align="center" label="直属上级" prop="parentName" width="160">
<template #default="scope">
<el-link :underline="false" type="primary" @click="openDetail(scope.row.parentId)">

View File

@ -77,7 +77,7 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="变更项目" prop="endTime">
<el-form-item label="变更项目" prop="changeItem">
<el-radio-group v-model="formData.changeItem">
<el-radio :value="1">额度</el-radio>
<el-radio :value="2">授权人</el-radio>
@ -96,7 +96,6 @@
v-if="formData.changeItem == 1"
ref="limitFormRef"
:formFields="formFields"
:data="formData"
:disabled="disabled"
/>
@ -104,18 +103,22 @@
<ContentWrap style="border: none">
甲方现授权人信息
</ContentWrap>
<ContractAuthPersonInfo
ref="personDataRef"
:products="formData.contractAAuthorizedPersons"
/>
<ContentWrap>
<ContractAuthPersonInfo
ref="personDataRef"
:products="formData.contractAAuthorizedPersons"
/>
</ContentWrap>
<ContentWrap style="border: none">
甲方授权人
</ContentWrap>
<ContractBAuthorizedPersonForm ref="ContractBAuthorizedPersonFormRef" :customerId="formData.customerId" :contract-id="formData.id" />
<ContentWrap>
<ContractBAuthorizedPersonForm ref="ContractBAuthorizedPersonFormRef" :formFields="formFields" :customerId="formData.customerId" :contract-id="formData.id" />
</ContentWrap>
</div>
<ContracExtension ref="contractExtensionFormRef" v-if="formData.changeItem == 3" :data="formData" />
<ContractStop ref="contractStopFormRef" :formData="formData" v-if="formData.changeItem == 4" />
<ContractAAuthorizedCompanyForm ref="contractAAuthorizedCompanyFormRef1" v-if="formData.changeItem == 5" :data="formData.contractAAuthorizedCompanys" />
<ContracExtension ref="contractExtensionFormRef" :formFields="formFields" v-if="formData.changeItem == 3" :data="formData" />
<ContractStop ref="contractStopFormRef" :formData="formData" :formFields="formFields" v-if="formData.changeItem == 4" />
<ContractAAuthorizedCompanyForm ref="contractAAuthorizedCompanyFormRef1" :formFields="formFields" v-if="formData.changeItem == 5" :data="formData.contractAAuthorizedCompanys" />
<ContractForm ref="contractFormRef" :type="1" v-if="formData.changeItem == 6" />
</ContentWrap>
</el-form>
@ -166,9 +169,35 @@ const formFields = ref({
creditAmount: 1,
creditLimit: 1,
partnerCompanyId: 1,
changeAmount: 1,
changeAmount: 2,
afterAmount: 1,
changeAmountDeadline: 1,
changeAmountDeadline: 2,
contractAAuthorizedCompanysother: 1,
contractAAuthorizedCompanysunifiedCreditCode: 1,
contractAAuthorizedCompanysinvoicingAddress: 1,
contractAAuthorizedCompanysinvoicingTelephone: 1,
contractAAuthorizedCompanyscompanyBank: 1,
contractAAuthorizedCompanyscompanyAccount: 1,
contractAAuthorizedCompanyscompanyAddress: 1,
contractAAuthorizedCompanysother2: 1,
contractAAuthorizedPersonsother: 1,
contractAAuthorizedPersonscustomerName: 1,
contractAAuthorizedPersonsauthPersonType: 1,
contractAAuthorizedPersonsphoneNumber: 1,
contractAAuthorizedPersonswechat: 1,
contractAAuthorizedPersonsidNumber: 1,
contractAAuthorizedPersonsemail: 1,
contractAAuthorizedPersonsother2: 1,
contractBAuthorizedPersonsother: 1,
contractBAuthorizedPersonsauthType: 1,
contractBAuthorizedPersonsuserId: 1,
contractBAuthorizedPersonspostName: 1,
contractBAuthorizedPersonsuserRank: 1,
contractBAuthorizedPersonsauthDesc: 1,
contractBAuthorizedPersonsphoneNumber: 1,
contractBAuthorizedPersonswechat: 1,
contractBAuthorizedPersonsemail: 1,
contractBAuthorizedPersonsother2: 1,
})
const formData = ref({
authPerson: [],

View File

@ -176,4 +176,4 @@ const getData = () => {
}
defineExpose({ validate, getData })
</script>
</script>

View File

@ -162,7 +162,7 @@
<template #changeAmount>
<el-col :span="8">
<el-form-item label="调整金额(元)" prop="changeAmount">
<el-input v-model="formData.changeAmount" :disabled="formFields.contractBody !== 2 || isTrue" oninput="value=value.match(/^\d+(?:\.\d{0,2})?/)" placeholder="请输入调整金额(元)" @input="onChangeAmount" />
<el-input v-model="formData.changeAmount" :disabled="formFields.changeAmount !== 2 || isTrue" oninput="value=value.match(/^\d+(?:\.\d{0,2})?/)" placeholder="请输入调整金额(元)" @input="onChangeAmount" />
</el-form-item>
</el-col>
</template>
@ -180,7 +180,7 @@
v-model="formData.changeAmountDeadline"
value-format="YYYY-MM-DD"
type="date"
:disabled="formFields.contractBody !== 2 || isTrue"
:disabled="formFields.changeAmountDeadline !== 2 || isTrue"
placeholder="请选择调整金额截止日期"
style="width: 100%"
/>
@ -293,27 +293,7 @@ const quotationProductFormRef = ref()
const props = defineProps<{
data: 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,
}
}
formFields: {}
}>()
watch(
@ -393,8 +373,9 @@ const open = async (type: string) => {
}
/** 表单校验 */
const validate = () => {
return formRef.value.validate()
const validate = async () => {
const isValid = await formRef.value.innerFormRef.validate()
return isValid
}
/** 表单值 */
@ -438,7 +419,7 @@ const resetForm = () => {
const route = useRoute();
onMounted(async () => {
isTrue.value = !!route.query.isDetail
console.log('%csrc/views/crm/quotation/QuotationForm.vue:596 route', 'color: #007acc;', props.formFields);
console.log('%csrc/views/crm/quotation/QuotationForm.vue:596 route', 'color: pink;', props.formFields.changeAmount !== 2 , isTrue.value);
// formType.value = route.query.id;
// if (formType.value) open(formType.value)

View File

@ -1,7 +1,7 @@
<template>
<!-- 操作栏 -->
<el-row justify="end">
<el-button @click="openForm">
<el-button @click="openForm" type="primary">
<Icon class="mr-5px" icon="clarity:contract-line" />
创建合同
</el-button>

View File

@ -1,7 +1,7 @@
<template>
<!-- 操作栏 -->
<el-row justify="end">
<el-button @click="openFormAdd">
<el-button @click="openFormAdd" type="primary">
<Icon class="mr-5px" icon="clarity:contract-line" />
创建方案报价
</el-button>

View File

@ -38,7 +38,7 @@
</el-form-item>
</el-col>
</template>
<template #auditStatus>
<!-- <template #auditStatus>
<el-col :span="8">
<el-form-item label="合同状态" prop="auditStatus">
<el-select v-model="formData.auditStatus" disabled clearable placeholder="请选择合同状态">
@ -51,7 +51,7 @@
</el-select>
</el-form-item>
</el-col>
</template>
</template> -->
<template #endTime>
<el-col :span="8">
<el-form-item label="协议截止日期" prop="endTime">
@ -103,11 +103,11 @@
<ContentWrap style="border: none">
甲方授权人
</ContentWrap>
<ContractBAuthorizedPersonForm :type="1" ref="ContractBAuthorizedPersonFormRef" :customerId="formData.customerId" :contract-id="formData.id" />
<ContractBAuthorizedPersonForm :formFields="formFields" :type="1" ref="ContractBAuthorizedPersonFormRef" :customerId="formData.customerId" :contract-id="formData.id" />
</div>
<ContracExtension ref="contractExtensionFormRef" v-if="formData.changeItem == 3" :disabled="true" :data="formData" />
<ContractStop ref="contractStopFormRef" :formData="formData" :disabled="true" v-if="formData.changeItem == 4" />
<ContractAAuthorizedCompanyForm ref="contractAAuthorizedCompanyFormRef1" :type="true" v-if="formData.changeItem == 5" :data="formData.contractAAuthorizedCompanys" />
<ContracExtension ref="contractExtensionFormRef" :formFields="formFields" v-if="formData.changeItem == 3" :disabled="true" :data="formData" />
<ContractStop ref="contractStopFormRef" :formFields="formFields" :formData="formData" :disabled="true" v-if="formData.changeItem == 4" />
<ContractAAuthorizedCompanyForm :formFields="formFields" ref="contractAAuthorizedCompanyFormRef1" :type="true" v-if="formData.changeItem == 5" :data="formData.contractAAuthorizedCompanys" />
<ContractForm ref="contractFormRef" :type="1" :id="formData.id" v-if="formData.changeItem == 6" />
</ContentWrap>
</template>
@ -184,6 +184,32 @@ const formFields = ref({
changeAmount: 1,
afterAmount: 1,
changeAmountDeadline: 1,
contractAAuthorizedCompanysother: 1,
contractAAuthorizedCompanysunifiedCreditCode: 1,
contractAAuthorizedCompanysinvoicingAddress: 1,
contractAAuthorizedCompanysinvoicingTelephone: 1,
contractAAuthorizedCompanyscompanyBank: 1,
contractAAuthorizedCompanyscompanyAccount: 1,
contractAAuthorizedCompanyscompanyAddress: 1,
contractAAuthorizedCompanysother2: 1,
contractAAuthorizedPersonsother: 1,
contractAAuthorizedPersonscustomerName: 1,
contractAAuthorizedPersonsauthPersonType: 1,
contractAAuthorizedPersonsphoneNumber: 1,
contractAAuthorizedPersonswechat: 1,
contractAAuthorizedPersonsidNumber: 1,
contractAAuthorizedPersonsemail: 1,
contractAAuthorizedPersonsother2: 1,
contractBAuthorizedPersonsother: 1,
contractBAuthorizedPersonsauthType: 1,
contractBAuthorizedPersonsuserId: 1,
contractBAuthorizedPersonspostName: 1,
contractBAuthorizedPersonsuserRank: 1,
contractBAuthorizedPersonsauthDesc: 1,
contractBAuthorizedPersonsphoneNumber: 1,
contractBAuthorizedPersonswechat: 1,
contractBAuthorizedPersonsemail: 1,
contractBAuthorizedPersonsother2: 1,
})
const formData = ref({
authPerson: [],

View File

@ -284,7 +284,19 @@
command="handlePrint"
v-if="checkPermi(['crm:contract:print']) && scope.row.auditStatus === 2"
>
合同下载
下载未盖章合同
</el-dropdown-item>
<el-dropdown-item
command="handleUpload"
v-if="checkPermi(['crm:contract:print']) && scope.row.auditStatus === 2"
>
合同上传
</el-dropdown-item>
<el-dropdown-item
command="handlePrintComplate"
v-if="checkPermi(['crm:contract:print']) && scope.row.contractFileUrl"
>
下载盖章合同
</el-dropdown-item>
<el-dropdown-item
command="handleDelete"
@ -411,6 +423,11 @@ const handleCommand = (command: string, row) => {
case 'handleDelete':
handleDelete(row.id)
break
case 'handleUpload':
handleUpload(row.id)
break
case 'handlePrintComplate':
handlePrintComplate(row.contractFileUrl)
default:
break
}
@ -457,6 +474,16 @@ const getPrintTemplate = (row) => {
formRef.value.open(row.id)
}
const handleUpload = (val) => {
}
//
const handlePrintComplate = (val) => {
window.open(val)
}
//
const onPrintContract = async (row: ContractApi.ContractVO) => {
try {
const res = await ContractApi.printContract(row.id)

View File

@ -44,19 +44,6 @@
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="客户来源" prop="source">
<el-select v-model="formData.source" filterable placeholder="请选择客户来源" class="w-1/1">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_SOURCE)"
: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="cooperationType">
<el-select v-model="formData.cooperationType" filterable placeholder="请选择合作类型" class="w-1/1">
@ -72,8 +59,8 @@
<el-col :span="12">
<el-form-item label="维护人" prop="maintainer">
<el-select
class="w-1/1"
placeholder="请选择维护人"
class="w-1/1"
placeholder="请选择维护人"
v-model="formData.maintainer"
filterable
>
@ -85,6 +72,47 @@
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="客户来源" prop="source">
<el-select v-model="formData.source" filterable placeholder="请选择客户来源" class="w-1/1">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_SOURCE)"
: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="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-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="cooperationArea">
@ -98,13 +126,45 @@
</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="legalPersonName">
<el-input v-model="formData.legalPersonName" disabled placeholder="" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="法人代表" prop="legalPersonName">
<el-input v-model="formData.legalPersonName" disabled placeholder="" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<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="ownerUserId">
@ -212,7 +272,38 @@
<el-form-item label="注册资本" prop="registerCapital">
<el-input v-model="formData.registerCapital" disabled placeholder="" />
</el-form-item>
</el-col>
</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="contactNextTime">
<el-date-picker
disabled
v-model="formData.startDate"
placeholder=""
type="date"
value-format="x"
class="!w-1/1"
/>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item label="网站" prop="">
<el-input v-model="formData.website" placeholder="请输入网站" />
@ -242,98 +333,12 @@
</el-select>
</el-form-item>
</el-col> -->
<el-col :span="12">
<el-form-item label="注册日期" prop="contactNextTime">
<el-date-picker
disabled
v-model="formData.startDate"
placeholder=""
type="date"
value-format="x"
class="!w-1/1"
/>
</el-form-item>
</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-form-item label="地址" prop="areaId">
<el-cascader

View File

@ -0,0 +1,263 @@
<template>
<!-- 操作栏 -->
<el-row justify="end">
<el-button @click="openFormAdd" type="primary">
<Icon class="mr-5px" icon="system-uicons:contacts" />
创建投诉建议
</el-button>
</el-row>
<!-- 列表 -->
<ContentWrap class="mt-10px">
<el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
<el-table-column label="客户名称" align="center" prop="customerId" />
<el-table-column label="反馈联系人" align="center" prop="contactId" />
<el-table-column label="联系电话" align="center" prop="mobile" />
<el-table-column label="电子邮箱" align="center" prop="email" />
<el-table-column label="反馈类型" align="center" prop="feedbackType">
<template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_FEEDBACK_TYPE" :value="scope.row.feedbackType" />
</template>
</el-table-column>
<el-table-column label="反馈级别" align="center" prop="feedbackLevel">
<template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_FEEDBACK_LEVEL" :value="scope.row.feedbackLevel" />
</template>
</el-table-column>
<el-table-column label="紧急程度" align="center" prop="urgencyLevel">
<template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_URGENCY_LEVEL" :value="scope.row.urgencyLevel" />
</template>
</el-table-column>
<el-table-column
label="反馈时间"
align="center"
prop="feedbackTime"
:formatter="dateFormatter"
width="180px"
/>
<el-table-column label="当事人" align="center" prop="relatedPerson" />
<el-table-column label="所属部门" align="center" prop="deptId" />
<el-table-column label="客户累计计数" align="center" prop="customerFeedbackCount" />
<el-table-column label="当事人累计计数" align="center" prop="relatedPersonFeedbackCount" />
<el-table-column label="反馈主体" align="center" prop="feedbackCompanyEntity" />
<el-table-column label="反馈内容" align="center" prop="feedbackContent" />
<el-table-column label="附件" align="center" prop="attachment">
<template #default="scope">
<el-link
v-if="scope.row.attachment"
:underline="false"
type="primary"
@click="previewFile(scope.row.attachment)"
>
预览
</el-link>
<span v-else></span>
</template>
</el-table-column>
<!-- <el-table-column
label="创建时间"
align="center"
prop="createTime"
:formatter="dateFormatter"
width="180px"
/> -->
<el-table-column label="操作" align="center" min-width="120px">
<template #default="scope">
<!-- <el-button
link
type="primary"
@click="openFormEdit(scope.row)"
v-hasPermi="['crm:customer-feedback:update']"
>
编辑
</el-button> -->
<el-button
v-hasPermi="['crm:customer-feedback:query']"
link
type="primary"
@click="openDetail(scope.row)"
>
详情
</el-button>
<el-button
v-if="scope.row.auditStatus !== 0"
link
v-hasPermi="['crm:customer-feedback:query']"
type="primary"
@click="handleProcessDetail(scope.row)"
>
进度
</el-button>
<!-- <el-button
link
type="danger"
@click="handleDelete(scope.row.id)"
v-hasPermi="['crm:customer-feedback:delete']"
>
删除
</el-button> -->
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Pagination
:total="total"
v-model:page="queryParams.pageNo"
v-model:limit="queryParams.pageSize"
@pagination="getList"
/>
</ContentWrap>
<!-- 表单弹窗添加/修改 -->
<!-- <CustomerFeedbackForm ref="formRef" @success="getList" /> -->
</template>
<script setup lang="ts">
import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
import { dateFormatter } from '@/utils/formatTime'
import download from '@/utils/download'
import { CustomerFeedbackApi, CustomerFeedbackVO } from '@/api/crm/feedback'
import CustomerFeedbackForm from './CustomerFeedbackForm.vue'
/** 客户反馈 列表 */
defineOptions({ name: 'CustomerFeedback' })
const message = useMessage() //
const { t } = useI18n() //
const props = defineProps<{
bizId: number //
}>()
const loading = ref(true) //
const list = ref<CustomerFeedbackVO[]>([]) //
const total = ref(0) //
const queryParams = reactive({
pageNo: 1,
pageSize: 10,
customerId: undefined,
contactId: undefined,
mobile: undefined,
email: undefined,
feedbackType: undefined,
feedbackLevel: undefined,
urgencyLevel: undefined,
feedbackTime: [],
relatedPerson: undefined,
deptId: undefined,
customerFeedbackCount: undefined,
relatedPersonFeedbackCount: undefined,
feedbackCompanyEntity: undefined,
feedbackContent: undefined,
attachment: undefined,
createTime: [],
})
const queryFormRef = ref() //
const exportLoading = ref(false) //
/** 查询列表 */
const route = useRouter()
const getList = async () => {
loading.value = true
try {
console.log('%csrc/views/crm/customer/detail/ComplaintsSuggestion.vue:159 route', 'color: #007acc;', route);
queryParams.customerId = props.bizId
console.log('%csrc/views/crm/customer/detail/ComplaintsSuggestion.vue:163 queryParams', 'color: #007acc;', queryParams);
const data = await CustomerFeedbackApi.getCustomerFeedbackPage(queryParams)
list.value = data.list
total.value = data.total
} finally {
loading.value = false
}
}
defineExpose({ getList })
/** 搜索按钮操作 */
const handleQuery = () => {
queryParams.pageNo = 1
getList()
}
/** 重置按钮操作 */
const resetQuery = () => {
queryFormRef.value.resetFields()
handleQuery()
}
//
const previewFile = (fileUrls) => {
// // fileUrls URL
if (!fileUrls) {
message.error('没有附件');
return;
}
//
const fileExtension = fileUrls.split('.').pop().toLowerCase();
router.push({
name: 'FileTemplatePreview',
query: {
src: encodeURIComponent(fileUrls),
type: fileExtension
}
})
}
/** 添加/修改操作 */
const formRef = ref()
// const openForm = (type: string, id?: number) => {
// formRef.value.open(type, id)
// }
const router = useRouter() //
const openFormAdd = () => {
router.push({ name: 'CustomerFeedbackCreate' })
}
const openFormEdit = (row: Object) => {
router.push({ name: 'CustomerFeedbackEdit', query: { id: row.id} })
}
const openDetail = (row: Object) => {
router.push({ name: 'CustomerFeedbackDetail', query: { id: row.id } })
}
/** 查看审批 */
const handleProcessDetail = (row) => {
router.push({ name: 'BpmProcessInstanceDetail', query: { id: row.processInstanceId } })
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {
//
await message.delConfirm()
//
await CustomerFeedbackApi.deleteCustomerFeedback(id)
message.success(t('common.delSuccess'))
//
await getList()
} catch {}
}
/** 导出按钮操作 */
const handleExport = async () => {
try {
//
await message.exportConfirm()
//
exportLoading.value = true
const data = await CustomerFeedbackApi.exportCustomerFeedback(queryParams)
download.excel(data, '客户反馈.xls')
} catch {
} finally {
exportLoading.value = false
}
}
/** 初始化 **/
onMounted(() => {
getList()
})
onActivated(()=>{
getList()
})
</script>

View File

@ -31,9 +31,9 @@
<!-- <el-collapse v-model="activeNames" class=""> -->
<el-descriptions :column="4">
<el-descriptions-item label="客户名称">
<!-- <el-descriptions-item label="客户名称">
{{ customer.name }}
</el-descriptions-item>
</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" />
@ -46,10 +46,13 @@
</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="行业">
<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="合作状态">
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_STSTUS" :value="customer.customerStatus" />
</el-descriptions-item>
<el-descriptions-item label=" 拓展人">{{ customer.clueDeveloperName }}</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>
@ -59,6 +62,7 @@
<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="最后跟进时间">{{ formatDate(customer.contactLastTime) }}</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>-->

View File

@ -61,7 +61,7 @@
/>
</el-tab-pane> -->
<el-tab-pane label="商机" lazy name="BusinessListRef">
<BusinessList ref="BusinessListRef" :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
<BusinessList ref="BusinessListRef" :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" :clueDeveloper="customer.clueDeveloper" :maintenanceUserId="customer.maintainer" />
</el-tab-pane>
<el-tab-pane label="方案报价" lazy name="QuotationListRef">
<QuotationList ref="QuotationListRef" :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
@ -76,6 +76,9 @@
<ReceivablePlanList :customer-id="customer.id!" @create-receivable="createReceivable" />
<ReceivableList ref="receivableListRef" :customer-id="customer.id!" />
</el-tab-pane> -->
<el-tab-pane label="投诉建议" name="ComplaintsSuggestionRef">
<ComplaintsSuggestion ref="ComplaintsSuggestionRef" :biz-id="customer.id!" />
</el-tab-pane>
<el-tab-pane label="操作日志">
<OperateLogV2 :log-list="logList" />
</el-tab-pane>
@ -93,6 +96,7 @@ import * as CustomerApi from '@/api/crm/customer'
import CustomerForm from '@/views/crm/customer/CustomerForm.vue'
import CompanyDetailsInfo from './companyDetailsInfo.vue' //
import CustomerDetailsInfo from './CustomerDetailsInfo.vue' // -
import ComplaintsSuggestion from './ComplaintsSuggestion.vue' // -
import CustomerDetailsHeader from './CustomerDetailsHeader.vue' // -
import ReturnVisitrecord from './returnvisitrecord/index.vue' // 访
import ContactList from '@/views/crm/contact/components/ContactList.vue' //
@ -227,6 +231,7 @@ const ContactListRef = ref('')
const BusinessListRef = ref('')
const QuotationListRef = ref('')
const ContractListRef = ref('')
const ComplaintsSuggestionRef = ref('')
const handleClick = async (val) => {
let name = val.props.name
@ -241,6 +246,7 @@ const handleClick = async (val) => {
BusinessListRef: BusinessListRef.value,
QuotationListRef: QuotationListRef.value,
ContractListRef: ContractListRef.value,
ComplaintsSuggestionRef: ComplaintsSuggestionRef.value
}
objRef[name].getList()
} else {

View File

@ -164,7 +164,7 @@
<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">
<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>
@ -176,12 +176,13 @@
<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"
/>
>
{{ moment(createTime).format('YYYY-MM-DD')}}
</el-table-column>
<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" />
@ -300,6 +301,7 @@ import * as CustomerApi from '@/api/crm/customer'
import CustomerForm from './CustomerForm.vue'
import CustomerImportForm from './CustomerImportForm.vue'
import { TabsPaneContext } from 'element-plus'
import moment from 'moment';
defineOptions({ name: 'CrmCustomer' })

View File

@ -55,7 +55,7 @@
<FollowUpRecordContactForm @success="del" :contacts="formData.contacts" />
</el-form-item>
</el-col>
<el-col :span="24" v-if="formData.bizType == BizTypeEnum.CRM_CUSTOMER">
<!-- <el-col :span="24" v-if="formData.bizType == BizTypeEnum.CRM_CUSTOMER">
<el-form-item label="关联商机" prop="businessIds">
<el-button @click="handleOpenBusiness">
<Icon class="mr-5px" icon="ep:plus" />
@ -63,7 +63,7 @@
</el-button>
<FollowUpRecordBusinessForm :businesses="formData.businesses" />
</el-form-item>
</el-col>
</el-col>-->
</el-row>
</el-form>
<template #footer>

View File

@ -9,7 +9,7 @@
</el-table-column>
<el-table-column label="手机号" align="center" prop="mobile" />
<el-table-column label="职位" align="center" prop="post" />
<el-table-column label="直属上级" align="center" prop="parentName" />
<!-- <el-table-column label="直属上级" align="center" prop="parentName" />-->
<el-table-column label="是否关键决策人" align="center" prop="master" min-width="100">
<template #default="scope">
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.master" />

View File

@ -32,30 +32,6 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="客单价" prop="customerPrice">
<el-input
v-model="queryParams.customerPrice"
placeholder="请输入客单价"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="单位" prop="unit">
<el-select
v-model="queryParams.unit"
placeholder="请选择单位"
clearable
class="!w-240px"
>
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PRODUCT_UNIT)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item label="采购成本" prop="procurementCost">
<el-input
v-model="queryParams.procurementCost"
@ -65,24 +41,6 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="客单价 - 采购成本" prop="profit">
<el-input
v-model="queryParams.profit"
placeholder="请输入客单价 - 采购成本"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="说明" prop="describe">
<el-input
v-model="queryParams.describe"
placeholder="请输入说明"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
@ -271,4 +229,4 @@ const handleExport = async () => {
onMounted(() => {
getList()
})
</script>
</script>

View File

@ -19,7 +19,7 @@
<el-form-item label="打卡状态(正常、迟到、早退、缺卡等)" prop="clockStatus">
<el-select v-model="formData.clockStatus" placeholder="请选择打卡状态(正常、迟到、早退、缺卡等)">
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HRM_ CLOCK_STATUS)"
v-for="dict in getStrDictOptions(DICT_TYPE.HRM_CLOCK_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
@ -151,4 +151,4 @@ const resetForm = () => {
}
formRef.value?.resetFields()
}
</script>
</script>

View File

@ -43,7 +43,7 @@
class="!w-240px"
>
<el-option
v-for="dict in getStrDictOptions(DICT_TYPE.HRM_ CLOCK_STATUS)"
v-for="dict in getStrDictOptions(DICT_TYPE.HRM_CLOCK_STATUS)"
:key="dict.value"
:label="dict.label"
:value="dict.value"
@ -140,7 +140,7 @@
<el-table-column label="岗位ID" align="center" prop="postId" />
<el-table-column label="打卡状态(正常、迟到、早退、缺卡等)" align="center" prop="clockStatus">
<template #default="scope">
<dict-tag :type="DICT_TYPE.HRM_ CLOCK_STATUS" :value="scope.row.clockStatus" />
<dict-tag :type="DICT_TYPE.HRM_CLOCK_STATUS" :value="scope.row.clockStatus" />
</template>
</el-table-column>
<el-table-column label="打卡类型(正常上下班、加班)" align="center" prop="clockType">
@ -298,4 +298,4 @@ const handleExport = async () => {
onMounted(() => {
getList()
})
</script>
</script>