客户管理

pull/1/head
17602169347 1 year ago
parent 041916220e
commit acd1fba233

@ -17,7 +17,7 @@
</el-row>
<el-row>
<el-col :span="24">
<el-radio-group v-model="dbForm.k1" size="large">
<el-radio-group v-model="formData.calssify" size="large">
<el-radio-button label="一级客户">
<span>一级客户</span><br /><span style="font-size: 12px;">钢厂/回收机构</span>
</el-radio-button>
@ -43,7 +43,7 @@
<el-col :span="18">
<el-upload class="avatar-uploader2"
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" :show-file-list="false">
<img v-if="dbForm.k2 != ''" :src="dbForm.k2" class="avatar" />
<img v-if="formData.logo != ''" :src="formData.logo" class="avatar" />
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
@ -54,58 +54,61 @@
<el-col :span="8">
<el-row>
<el-col :span="24">
<el-form-item prop="k3" label="客户名称" :rules="[
<el-form-item prop="name" label="客户名称" :rules="[
{
required: true,
message: '请输入客户名称',
trigger: 'blur',
}
]">
<el-input v-model="dbForm.k3" placeholder="客户名称" />
<el-input v-model="formData.name" placeholder="客户名称" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="kx" label="行业分类" :rules="[
<el-form-item prop="industryClassify" label="行业分类" :rules="[
{
required: true,
message: '请输入行业分类',
trigger: 'blur',
}
]">
<el-select v-model="dbForm.k4" placeholder="行业分类" style="width: 100%;">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
<el-select v-model="formData.industryClassify" placeholder="行业分类" style="width: 100%;">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.industryClassify)" :key="dict.value"
:label="dict.label" :value="dict.value.toString()" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="kx" label="业务进度" :rules="[
<el-form-item prop="industrySchedule" label="业务进度" :rules="[
{
required: true,
message: '请输入业务进度',
trigger: 'blur',
}
]">
<el-select v-model="dbForm.k4" placeholder="业务进度" style="width: 100%;">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
<el-select v-model="formData.industrySchedule" placeholder="业务进度" style="width: 100%;">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.industrySchedule)" :key="dict.value"
:label="dict.label" :value="dict.value.toString()" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="kx" label="信用等级" :rules="[
<el-form-item prop="customerStarrating" label="信用等级" :rules="[
{
required: true,
message: '请输入信用等级',
trigger: 'blur',
}
]">
<el-select v-model="dbForm.k4" placeholder="信用等级" style="width: 100%;">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
<el-select v-model="formData.customerStarrating" placeholder="信用等级" style="width: 100%;">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.CUSTOMER_STARRATING)" :key="dict.value"
:label="dict.label" :value="dict.value.toString()" />
</el-select>
</el-form-item>
</el-col>
@ -114,44 +117,46 @@
<el-col :span="8">
<el-row>
<el-col :span="24">
<el-form-item prop="k4" label="企业性质" :rules="[
<el-form-item prop="enterpriseNature" label="企业性质" :rules="[
{
required: true,
message: '请输入企业性质',
trigger: 'blur',
}
]">
<el-select v-model="dbForm.k4" placeholder="企业性质" style="width: 100%;">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
<el-select v-model="formData.enterpriseNature" placeholder="企业性质" style="width: 100%;">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.enterpriseNature)" :key="dict.value"
:label="dict.label" :value="dict.value.toString()" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="k4" label="客户来源" :rules="[
<el-form-item prop="customerSource" label="客户来源" :rules="[
{
required: true,
message: '请输入客户来源',
trigger: 'blur',
}
]">
<el-select v-model="dbForm.k4" placeholder="客户来源" style="width: 100%;">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
<el-select v-model="formData.customerSource" placeholder="客户来源" style="width: 100%;">
<el-option v-for="dict in getIntDictOptions(DICT_TYPE.customerSource)" :key="dict.value"
:label="dict.label" :value="dict.value.toString()" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="k4" label="归属人员" :rules="[
<el-form-item prop="belongingPeople" label="归属人员" :rules="[
{
required: true,
message: '请输入归属人员',
trigger: 'blur',
}
]">
<el-select v-model="dbForm.k4" placeholder="归属人员" style="width: 100%;">
<el-select v-model="formData.belongingPeople" placeholder="归属人员" style="width: 100%;">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
@ -168,73 +173,69 @@
<template #default>
<el-row>
<el-col :span="8">
<el-form-item prop="kx" label="国家" :rules="[
<el-form-item prop="country" label="国家" :rules="[
{
required: true,
message: '请输入国家',
trigger: 'blur',
}
]">
<el-select v-model="dbForm.kx" placeholder="国家" style="width: 100%;">
<el-select v-model="formData.country" placeholder="国家" style="width: 100%;">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="kx" label="所在省/市" :rules="[
<el-form-item prop="city" label="所在省/市" :rules="[
{
required: true,
message: '请选择所在省/市',
trigger: 'blur',
}
]">
<el-select v-model="dbForm.kx" placeholder="所在省/市" style="width: 100%;">
<el-select v-model="formData.city" placeholder="所在省/市" style="width: 100%;">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="kx" label="详细地址" :rules="[
<el-form-item prop="address" label="详细地址" :rules="[
{
required: true,
message: '请输入详细地址',
trigger: 'blur',
}
]">
<el-input v-model="dbForm.k3" placeholder="详细地址" />
<el-input v-model="formData.address" placeholder="详细地址" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item prop="kx" label="公司电话" :rules="[
<el-form-item prop="phone" label="公司电话" :rules="[
{
required: true,
message: '请输入公司电话',
trigger: 'blur',
}
]">
<el-select v-model="dbForm.kx" placeholder="公司电话" style="width: 100%;">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-input v-model="formData.phone" placeholder="公司电话" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="kx" label="公司传真" :rules="[
<el-form-item prop="companyFax" label="公司传真" :rules="[
{
required: true,
message: '请选择公司传真',
trigger: 'blur',
}
]">
<el-select v-model="dbForm.kx" placeholder="公司传真" style="width: 100%;">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-input v-model="formData.companyFax" placeholder="公司传真" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="kx" label="公司网址" :rules="[]">
<el-input v-model="dbForm.kx" placeholder="公司网址">
<el-form-item prop="companyHttp" label="公司网址" :rules="[]">
<el-input v-model="formData.companyHttp" placeholder="公司网址">
<template #prepend>Http://</template>
</el-input>
</el-form-item>
@ -242,8 +243,8 @@
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="kx" label="公司介绍" :rules="[]">
<el-input v-model="dbForm.kx" placeholder="公司介绍" type="textarea"
<el-form-item prop="companyProfile" label="公司介绍" :rules="[]">
<el-input v-model="formData.companyProfile" placeholder="公司介绍" type="textarea"
:autosize="{ minRows: 2, maxRows: 4 }" />
</el-form-item>
</el-col>
@ -264,7 +265,7 @@
<el-col :span="18">
<el-upload class="avatar-uploader"
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" :show-file-list="false">
<img v-if="dbForm.k2 != ''" :src="dbForm.k2" class="avatar" />
<img v-if="formData.socialInformationCodeCertificate != ''" :src="formData.socialInformationCodeCertificate" class="avatar" />
<el-icon v-else class="avatar-uploader-icon">
<Plus />
</el-icon>
@ -275,14 +276,14 @@
<el-col :span="8">
<el-row>
<el-col :span="24">
<el-form-item prop="kx" label="注册地址" :rules="[
<el-form-item prop="registerAddress" label="注册地址" :rules="[
{
required: true,
message: '请输入注册地址',
trigger: 'blur',
}
]">
<el-input v-model="dbForm.kx" placeholder="注册地址" />
<el-input v-model="formData.registerAddress" placeholder="注册地址" />
</el-form-item>
</el-col>
</el-row>
@ -304,31 +305,27 @@
<el-col :span="8">
<el-row>
<el-col :span="24">
<el-form-item prop="kx" label="社会统一信息代码" :rules="[
<el-form-item prop="informationCode" label="社会统一信息代码" :rules="[
{
required: true,
message: '请选择社会统一信息代码',
trigger: 'blur',
}
]">
<el-select v-model="dbForm.kx" placeholder="社会统一信息代码" style="width: 100%;">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-input v-model="formData.informationCode" placeholder="社会统一信息代码" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="kx" label="注册资金" :rules="[
<el-form-item prop="registerCapital" label="注册资金" :rules="[
{
required: true,
message: '请选择注册资金',
trigger: 'blur',
}
]">
<el-select v-model="dbForm.kx" placeholder="注册资金" style="width: 100%;">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
<el-input v-model="formData.registerCapital" placeholder="注册资金" />
</el-form-item>
</el-col>
</el-row>
@ -336,14 +333,14 @@
</el-row>
<el-row>
<el-col :span="24">
<el-form-item prop="kx" label="经营范围" :rules="[
<el-form-item prop="businessScope" label="经营范围" :rules="[
{
required: true,
message: '请填写经营范围',
trigger: 'blur',
}
]">
<el-input v-model="dbForm.kx" placeholder="经营范围" type="textarea"
<el-input v-model="formData.businessScope" placeholder="经营范围" type="textarea"
:autosize="{ minRows: 2, maxRows: 4 }" />
</el-form-item>
</el-col>
@ -899,7 +896,214 @@
<script setup lang="ts" name="CustomerDetails">
import { Plus } from '@element-plus/icons-vue'
import { DICT_TYPE, getStrDictOptions, getIntDictOptions } from '@/utils/dict'
import * as SubjectBasicApi from '@/api/xxjj/subjectBasic'
const { t } = useI18n() //
const message = useMessage() //
const dialogVisible = ref(false) //
const dialogTitle = ref('') //
const formLoading = ref(false) // 12
const formType = ref('') // create - update -
const formData:any = ref({
id: undefined,
name: undefined,
businessType: undefined,
calssify: undefined,
logo: undefined,
enterpriseNature: undefined,
industryClassify: undefined,
customerSource: undefined,
customerStarrating: undefined,
industrySchedule: undefined,
belongingPeople: undefined,
city: undefined,
country: undefined,
address: undefined,
phone: undefined,
companyFax: undefined,
companyHttp: undefined,
companyProfile: undefined,
customerStatus: undefined,
socialInformationCodeCertificate: undefined,
registerAddress: undefined,
informationCode: undefined,
operateStart: undefined,
operateEnd: undefined,
registerCapital: undefined,
businessScope: undefined,
proofPaidCapital: undefined,
assetCertificate: undefined,
assetCertificateMortgage: undefined,
otherQualifications: undefined,
collaborationStart: undefined,
collaborationEnd: undefined,
demandVolumeDown: undefined,
demandVolumeUpper: undefined,
fundLimit: undefined,
businessHours: undefined,
businessStart: undefined,
businessEnd: undefined,
allowableUnloadingStart: undefined,
allowableUnloadingEnd: undefined,
unloading: undefined,
unloadingEfficiency: undefined,
allowableShipmentStart: undefined,
allowableShipmentEnd: undefined,
shipment: undefined,
shipmentEffciency: undefined,
paymentMethod: undefined,
accountName: undefined,
bankAccount: undefined,
bankDeposit: undefined,
depositArea: undefined,
bankBranch: undefined,
companyTaxNumber: undefined,
enterpriseName: undefined,
workAddress: undefined,
collaborationMethod: undefined,
settlementMethod: undefined,
accountPeriod: undefined,
underpaymentMethod: undefined,
applyForUnderpaymentRatio: undefined,
marginMethod: undefined,
applyForMarginRatio: undefined,
overdueInterestRate: undefined,
applyForOverdueRatio: undefined,
reservedFields1: undefined,
reservedFields2: undefined,
reservedFields3: undefined,
reservedFields4: undefined,
reservedFields5: undefined,
reservedFields6: undefined,
creditRating: undefined,
autoCreditRating: undefined,
accountsReceivableUpper: undefined,
orderQuantityDown: undefined,
orderQuantityUpper: undefined,
accountsReceivableOverdue: undefined,
taxPaymentCertificate: undefined
})
const formRules = reactive({
name: [{ required: true, message: '客户名称不能为空', trigger: 'change' }],
businessType: [{ required: true, message: '业务类型(0客户 1供应商 2服务商)不能为空', trigger: 'change' }],
calssify: [{ required: true, message: '分类(0一级 1二级 2三级)不能为空', trigger: 'blur' }],
customerStatus: [{ required: true, message: '客户状态(0待提交 1待审核 2待核准 3带启用 4已启用 5已禁用 6已关闭)不能为空', trigger: 'change' }]
})
const formRef = ref() // Ref
defineExpose({ open }) // open
/** 提交表单 */
const emit = defineEmits(['success']) // success
const submitForm = async () => {
//
if (!formRef) return
const valid = await formRef.value.validate()
if (!valid) return
//
formLoading.value = true
try {
const data = formData.value as unknown as SubjectBasicApi.SubjectBasicVO
if (formType.value === 'create') {
await SubjectBasicApi.createSubjectBasic(data)
message.success(t('common.createSuccess'))
} else {
await SubjectBasicApi.updateSubjectBasic(data)
message.success(t('common.updateSuccess'))
}
dialogVisible.value = false
//
emit('success')
} finally {
formLoading.value = false
}
}
/** 重置表单 */
const resetForm = () => {
formData.value = {
id: undefined,
businessType: undefined,
calssify: undefined,
name: undefined,
logo: undefined,
enterpriseNature: undefined,
industryClassify: undefined,
customerSource: undefined,
customerStarrating: undefined,
industrySchedule: undefined,
belongingPeople: undefined,
city: undefined,
country: undefined,
address: undefined,
phone: undefined,
companyFax: undefined,
companyHttp: undefined,
companyProfile: undefined,
customerStatus: undefined,
socialInformationCodeCertificate: undefined,
registerAddress: undefined,
informationCode: undefined,
operateStart: undefined,
operateEnd: undefined,
registerCapital: undefined,
businessScope: undefined,
proofPaidCapital: undefined,
assetCertificate: undefined,
assetCertificateMortgage: undefined,
otherQualifications: undefined,
collaborationStart: undefined,
collaborationEnd: undefined,
demandVolumeDown: undefined,
demandVolumeUpper: undefined,
fundLimit: undefined,
businessHours: undefined,
businessStart: undefined,
businessEnd: undefined,
allowableUnloadingStart: undefined,
allowableUnloadingEnd: undefined,
unloading: undefined,
unloadingEfficiency: undefined,
allowableShipmentStart: undefined,
allowableShipmentEnd: undefined,
shipment: undefined,
shipmentEffciency: undefined,
paymentMethod: undefined,
accountName: undefined,
bankAccount: undefined,
bankDeposit: undefined,
depositArea: undefined,
bankBranch: undefined,
companyTaxNumber: undefined,
enterpriseName: undefined,
workAddress: undefined,
collaborationMethod: undefined,
settlementMethod: undefined,
accountPeriod: undefined,
underpaymentMethod: undefined,
applyForUnderpaymentRatio: undefined,
marginMethod: undefined,
applyForMarginRatio: undefined,
overdueInterestRate: undefined,
applyForOverdueRatio: undefined,
reservedFields1: undefined,
reservedFields2: undefined,
reservedFields3: undefined,
reservedFields4: undefined,
reservedFields5: undefined,
reservedFields6: undefined,
creditRating: undefined,
autoCreditRating: undefined,
accountsReceivableUpper: undefined,
orderQuantityDown: undefined,
orderQuantityUpper: undefined,
accountsReceivableOverdue: undefined,
taxPaymentCertificate: undefined
}
formRef.value?.resetFields()
}
const tableDataA = [
{
k1: '法定代表人',
@ -959,6 +1163,32 @@ const options = [
label: '选项三',
}
]
/** 打开弹窗 */
//const open = async (type: string, id?: number) => {
//}
const route = useRoute() //
/** 初始化 */
onMounted(async() => {
const id:any = route.query.id
const type:any = route.query.type
dialogVisible.value = true
dialogTitle.value = t('action.' + type)
formType.value = type
resetForm()
//
if (id) {
formLoading.value = true
try {
formData.value = await SubjectBasicApi.getSubjectBasic(id)
} finally {
formLoading.value = false
}
}
})
</script>
<style lang="scss">

@ -314,7 +314,14 @@ const resetQuery = () => {
const formRef = ref()
const router = useRouter()
const openForm = (type: string, id?: number) => {
router.push({ path: '/customer/customer-add' })
//router.push({ path: '/customer/customer-add' })
router.push({
path: '/customer/customer-add',
query: {
type: type,
id: id
}
})
//formRef.value.open(type, id)
}

Loading…
Cancel
Save