Merge remote-tracking branch 'origin/master'

pull/781/head
苑坤 2025-05-25 20:15:33 +08:00
commit bcb3ba5755
31 changed files with 354 additions and 364 deletions

View File

@ -126,7 +126,6 @@ watch(allFilterEvents, () => {
}, { immediate: true, deep: true })
const loadmore = () => {
console.log('%csrc/components/SelectCustomer/src/index.vue:116 123', 'color: #007acc;', 123);
if (props.customerList.length <= options.value.length) return;
pageNo.value++;
nextTick(() => {

View File

@ -25,11 +25,8 @@
选取文件
</el-button>
<template v-if="isShowTip" #tip>
<div style="font-size: 8px">
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>
</div>
<div style="font-size: 8px">
格式为 <b style="color: #f56c6c">{{ fileType.join('/') }}</b> 的文件
<div style="font-size: 14px">
大小不超过 <b style="color: #f56c6c">{{ fileSize }}MB</b>格式为 <b style="color: #f56c6c">{{ fileType.join('/') }}</b> 的文件
</div>
</template>
<template #file="row">
@ -88,7 +85,7 @@ const emit = defineEmits(['update:modelValue'])
const props = defineProps({
modelValue: propTypes.oneOfType<string | string[]>([String, Array<String>]).isRequired,
fileType: propTypes.array.def(['doc', 'xls', 'ppt', 'txt', 'pdf']), // , ['png', 'jpg', 'jpeg']
fileSize: propTypes.number.def(5), // (MB)
fileSize: propTypes.number.def(20), // (MB)
limit: propTypes.number.def(5), //
autoUpload: propTypes.bool.def(true), //
drag: propTypes.bool.def(false), //

View File

@ -99,7 +99,6 @@ const queryFormRef = ref() // 搜索的表单
const exportLoading = ref(false) //
/** 打开弹窗 */
const open = async (data: []) => {
console.log('%csrc/components/product/index.vue:102 data', 'color: #007acc;', data);
dialogVisible.value = true
multipleSelection.value = data
await getList()
@ -154,7 +153,6 @@ const setSelections = async () => {
id: item.productId
}
})
console.log('%csrc/components/product/index.vue:153 list.value', 'color: #007acc;', list.value);
if (selections && selections.length > 0) {
list.value.forEach((row: any) => {

View File

@ -1,8 +1,8 @@
<template>
<doc-alert title="【通用】跟进记录、待办事项" url="https://doc.iocoder.cn/crm/follow-up/" />
<el-row :gutter="20">
<el-col :span="4" class="min-w-[200px]">
<el-row style="display: flex">
<el-col :span="4" >
<div class="side-item-list">
<div
v-for="(item, index) in leftSides"
@ -16,7 +16,7 @@
</div>
</div>
</el-col>
<el-col :span="20" :xs="24">
<el-col :span="19" style="margin-left: 20px;flex: 1">
<CustomerTodayContactList v-if="leftMenu === 'customerTodayContact'" />
<ClueFollowList v-if="leftMenu === 'clueFollow'" />
<ContractAuditList v-if="leftMenu === 'contractAudit'" />

View File

@ -8,11 +8,7 @@
v-loading="formLoading"
>
<el-row>
<!-- <el-col :span="8">
<el-form-item label="商机名称" prop="name">
<el-input v-model="formData.name" :disabled="type" clearable placeholder="请输入商机名称" />
</el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="客户名称" prop="customerId">
<SelectComponent :customerList="customerList" @change="changeCustomer" :disabled="formData.customerDefault || type || route.query.bizId" v-model="formData.customerId" />
@ -33,12 +29,17 @@
</el-select> -->
</el-form-item>
</el-col>
<el-col :span="8" v-if="formType">
<el-form-item label="商机名称" prop="name">
<el-input v-model="formData.name" disabled clearable placeholder="请输入商机名称" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="拓展人" prop="clueDeveloper">
<el-select
v-model="formData.clueDeveloper"
disabled
placeholder="请选择线拓展人"
placeholder=""
class="w-1/1"
>
<el-option
@ -51,12 +52,12 @@
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="维护人" prop="maintenanceUserId">
<el-form-item label="维护人" prop="maintainer">
<el-select
v-model="formData.maintenanceUserId"
v-model="formData.maintainer"
clearable
disabled
placeholder=""
:disabled="type"
placeholder="请选择线维护人"
class="w-1/1"
>
<el-option
@ -214,7 +215,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="项目难度" prop="projectDifficultyId">
<el-select v-model="formData.projectDifficultyId" :disabled="type" clearable placeholder="请选择项目难度">
<el-select v-model="formData.projectDifficultyId" :disabled="type" clearable placeholder="请选择项目难度" @change="changeDifficult">
<el-option
v-for="dict in difficultOptions"
:key="dict.id"
@ -226,7 +227,7 @@
</el-col>
<el-col :span="8" class="toop">
行政自主在线上预定无审批流无差标无客服服务
{{remark}}
<!-- <el-form-item label="" prop="platformId">
</el-form-item> -->
@ -238,7 +239,7 @@
</el-col>
<el-col :span="24">
<el-form-item label="产品类型" prop="remark">
<el-checkbox-group v-model="checkList" @change="changeCheck">
<el-checkbox-group v-model="checkList" :disabled="type" @change="changeCheck">
<el-checkbox v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PRODUCT_CATEGORY)"
:key="dict.value"
:label="dict.value">{{dict.label}}</el-checkbox>
@ -317,6 +318,7 @@ const { proxy }: any = getCurrentInstance();
const { t } = useI18n();
const message = useMessage();
const remark = ref('')
const checkList = ref([])
const productsTypeList = ref([])
const dialogVisible = ref(false);
@ -360,6 +362,8 @@ const formRules = reactive({
techSupport: [{ required: true, message: '技术需求支持不能为空', trigger: 'change' }],
projectDifficultyId: [{ required: true, message: '项目难度不能为空', trigger: 'change' }],
platformId: [{ required: true, message: '平台不能为空', trigger: 'change' }],
maintenanceUserId: [{ required: true, message: '维护人不能为空', trigger: 'change' }],
requestorUserId: [{ required: true, message: '需求提交人不能为空', trigger: 'change' }],
});
const formRef = ref();
@ -387,6 +391,7 @@ watch(
let totalOfflinePrice = 0;
for (const product of newProducts) {
console.log('%csrc/views/crm/business/BusinessForm.vue:381 22222', 'color: #007acc;', product,22222);
if (typeof product.onlinePrice) {
totalOnlinePrice += Number(product.onlinePrice);
}
@ -425,7 +430,9 @@ const open = async (id?: number, customerId?: number) => {
data.products.map(v => {
newData.push(v.category)
})
checkList.value = [...new Set(newData)]
checkList.value = newData.filter((value, index, self) => {
return self.indexOf(value) === index;
});
} finally {
formLoading.value = false;
}
@ -439,7 +446,6 @@ const open = async (id?: number, customerId?: number) => {
};
const setList = (newProducts) => {
checkList.value = []
formData.value.products = newProducts;
};
@ -510,10 +516,19 @@ const changeCheck = (val) => {
productFormRef.value.getData(val)
}
const changeDifficult = (val) => {
let arr = difficultOptions.value.filter(v => v.id === val)
let serviceDesc = (arr.length && arr[0]['dockingMode'])
if(serviceDesc) {
remark.value = '注:' + serviceDesc
} else {
remark.value = ''
}
}
const route = useRoute();
onMounted(async () => {
console.log('%csrc/views/crm/business/BusinessForm.vue:512 props', 'color: #007acc;', route.query);
console.log('%csrc/views/crm/business/BusinessForm.vue:516 getIntDictOptions(DICT_TYPE.CRM_PRODUCT_CATEGORY)', 'color: #007acc;', getIntDictOptions(DICT_TYPE.CRM_PRODUCT_CATEGORY));
const customerId = route.query.customerId;
formData.value.customerId = Number(route.query.bizId) || ''
formData.value.clueDeveloper = Number(route.query.clueDeveloper) || ''
@ -527,7 +542,6 @@ onMounted(async () => {
statusTypeList.value = await BusinessStatusApi.getBusinessStatusTypeSimpleList();
userOptions.value = await UserApi.getSimpleUserList();
let techData = await BusinessApi.getTechnicalList({pageNo: 1, pageSize: 1000});//
console.log('%csrc/views/crm/business/BusinessForm.vue:468 diffData', 'color: #007acc;', techData);
techOptions.value = techData.list
let diffData = await BusinessApi.getDifficult({pageNo: 1, pageSize: 1000});//
difficultOptions.value = diffData.list

View File

@ -69,9 +69,9 @@
</el-table>
</el-form>
<el-row justify="center" class="mt-3" v-if="!disabled">
<!-- <el-row justify="center" class="mt-3" v-if="!disabled">
<el-button @click="handleAdd" type="primary" round>+ 添加产品</el-button>
</el-row>
</el-row> -->
<!-- 表单弹窗添加/修改 -->
<ProductForm ref="productRef" @success="getList" />
</template>
@ -110,31 +110,32 @@ watch(
{ immediate: true }
);
watch(
() => props.productsTypeList,
(val) => {
listData.value = val || []; // formData
},
{ immediate: true }
);
// watch(
// () => props.productsTypeList,
// (val) => {
// listData.value = val || []; // formData
// },
// { immediate: true }
// );
//
const emit = defineEmits(['success']) // success
watch(
() => formData.value,
(val) => {
console.log('%csrc/views/crm/business/components/BusinessProductForm.vue:126 formData.value', 'color: #007acc;', formData.value);
if (!val || val.length === 0) {
return;
}
//
val.forEach((item) => {
if (item.offlinePrice != null && item.onlinePrice != null) {
item.totalPrice = Number(item.offlinePrice) + Number(item.onlinePrice);
item.totalPrice = (Number(item.offlinePrice) + Number(item.onlinePrice)).toFixed(2);
} else {
item.totalPrice = 0;
}
});
// emit('success', formData.value)
emit('success', formData.value)
},
{ deep: true }
@ -157,27 +158,29 @@ watch(
// };
// formData.value.push(newRow);
// };
const getList = (val: []) => {
for(let i = formData.value.length - 1; i >= 0; i--) {
let obj = formData.value[i]
if(!val.some(v => v.id === obj.productId)) formData.value.splice(i, 1)
}
val.forEach(item => {
if(!formData.value.some(v => v.productId === item.id)) {
formData.value.push({
"productId": item.id,
"category": item.category,
"productName": item.name,
"detailType": item.detailType,
"productUnit": item.unit,
const getList = async (val: []) => {
const data = await ProductApi.getProductPage({
pageNo: 1,
pageSize: 999,
status: 1,
})
let dataList = JSON.parse(JSON.stringify(data.list))
for(let i = dataList.length - 1; i >= 0; i--) {
let obj = dataList[i]
// if(!val.some(v => v.id === obj.productId)) formData.value.splice(i, 1)
// }
listData.value.push({
"productId": obj.id,
"category": obj.category,
"productName": obj.name,
"detailType": obj.detailType,
"productUnit": obj.unit,
"onlinePrice": '',
"offlinePrice": ''
})
}
})
listData.value = JSON.parse(JSON.stringify(formData.value))
console.log('%csrc/views/crm/business/components/BusinessProductForm.vue:170 listData', 'color: #007acc;', listData.value);
emit('success', formData.value)
}
// listData.value = JSON.parse(JSON.stringify(data.list))
// emit('success', formData.value)
}
const productRef = ref() // Ref
@ -213,7 +216,6 @@ const validate = () => {
};
const getData = (val) => {
let newArrList = []
for(let i = 0; i < val.length; i++) {
let item = val[i]
@ -222,17 +224,13 @@ const getData = (val) => {
}
formData.value = newArrList
console.log('%csrc/views/crm/business/components/BusinessProductForm.vue:215 listData.value', 'color: #007acc;',!val.length, listData.value);
if(!val.length) {
console.log('%csrc/views/crm/business/components/BusinessProductForm.vue:208 121212', 'color: #007acc;', 121212);
return formData.value = JSON.parse(JSON.stringify(listData.value))
}
console.log('%csrc/views/crm/business/components/BusinessProductForm.vue:218 formData.value', 'color: #007acc;', formData.value);
};
defineExpose({ validate, getData });
//
onMounted(async () => {
getList()
productList.value = await ProductApi.getProductSimpleList();
});
</script>

View File

@ -14,7 +14,7 @@
</div>
</div>
</div>
<ContentWrap class="mt-10px">
<!-- <ContentWrap class="mt-10px">
<el-descriptions :column="5" direction="vertical">
<el-descriptions-item label="客户名称">{{ business.customerName }}</el-descriptions-item>
<el-descriptions-item label="商机金额(元)">
@ -26,7 +26,7 @@
{{ formatDate(business.createTime) }}
</el-descriptions-item>
</el-descriptions>
</ContentWrap>
</ContentWrap> -->
</template>
<script lang="ts" setup>
import * as BusinessApi from '@/api/crm/business'

View File

@ -1,9 +1,9 @@
<template>
<BusinessDetailsHeader v-loading="loading" :business="business">
<!-- <BusinessDetailsHeader v-loading="loading" :business="business"> -->
<!-- <el-button v-if="permissionListRef?.validateWrite" @click="openForm('update', business.id)">
编辑
</el-button> -->
<el-button
<!-- <el-button
v-if="permissionListRef?.validateWrite"
:disabled="business.endStatus"
type="success"
@ -13,8 +13,8 @@
</el-button>
<el-button v-if="permissionListRef?.validateOwnerUser" type="primary" @click="transfer">
转移
</el-button>
</BusinessDetailsHeader>
</el-button> -->
<!-- </BusinessDetailsHeader> -->
<el-col>
<!-- <el-tabs> -->
<!-- <el-tab-pane label="跟进记录">

View File

@ -68,13 +68,6 @@
<el-tab-pane label="下属负责的" name="3" />
</el-tabs>
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true">
<el-table-column align="center" fixed="left" label="商机名称" prop="name" width="200">
<template #default="scope">
<el-link :underline="false" type="primary" @click="openDetail(scope.row.id)">
{{ scope.row.name }}
</el-link>
</template>
</el-table-column>
<el-table-column align="center" label="客户名称" prop="customerName" width="220">
<!-- <template #default="scope">
<el-link
@ -86,6 +79,14 @@
</el-link>
</template> -->
</el-table-column>
<el-table-column align="center" fixed="left" label="商机名称" prop="name" width="200">
<template #default="scope">
<el-link :underline="false" type="primary" @click="openDetail(scope.row.id)">
{{ scope.row.name }}
</el-link>
</template>
</el-table-column>
<el-table-column
:formatter="erpPriceTableColumnFormatter"
align="center"
@ -108,8 +109,9 @@
prop="contactNextTime"
width="180px"
/>
<el-table-column align="center" label="负责人" prop="ownerUserName" width="100px" />
<el-table-column align="center" label="所属部门" prop="ownerUserDeptName" width="100px" />
<el-table-column align="center" label="拓展人" prop="clueDeveloperName" width="130px" />
<el-table-column align="center" label="维护人" prop="maintainerName" width="130px" />
<!-- <el-table-column align="center" label="所属部门" prop="ownerUserDeptName" width="100px" /> -->
<el-table-column
:formatter="dateFormatter"
align="center"

View File

@ -124,7 +124,14 @@
</el-col>
<el-col :span="12">
<el-form-item label="生日" prop="birthday">
<el-input v-model="formData.birthday" placeholder="请输入生日" />
<el-date-picker
v-model="formData.birthday"
placeholder="请选择生日"
type="date"
value-format="YYYY-MM-DD"
format="YYYY-MM-DD"
class="!w-1/1"
/>
</el-form-item>
</el-col>
<el-col>

View File

@ -43,9 +43,9 @@
<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="是否关键决策人" min-width="100" prop="master">
<el-table-column align="center" label="角色" min-width="100" prop="contactRoleType">
<template #default="scope">
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="scope.row.master" />
<dict-tag :type="DICT_TYPE.CRM_CONTACT_ROLE_TYPE" :value="scope.row.contactRoleType" />
</template>
</el-table-column>
</el-table>

View File

@ -8,29 +8,29 @@
<el-descriptions :column="4">
<el-descriptions-item label="姓名">{{ contact.name }}</el-descriptions-item>
<el-descriptions-item label="客户名称">{{ contact.customerName }}</el-descriptions-item>
<el-descriptions-item label="登记人">{{ contact.ownerUserName }}</el-descriptions-item>
<el-descriptions-item label="角色">
<dict-tag :type="DICT_TYPE.CRM_CONTACT_ROLE_TYPE" :value="contact.contactRoleType" />
</el-descriptions-item>
<el-descriptions-item label="手机">{{ contact.mobile }}</el-descriptions-item>
<el-descriptions-item label="电话">{{ contact.telephone }}</el-descriptions-item>
<el-descriptions-item label="职位">{{ contact.post }}</el-descriptions-item>
<el-descriptions-item label="邮箱">{{ contact.email }}</el-descriptions-item>
<el-descriptions-item label="QQ">{{ contact.qq }}</el-descriptions-item>
<el-descriptions-item label="微信">{{ contact.wechat }}</el-descriptions-item>
<el-descriptions-item label="地址">
{{ contact.areaName }} {{ contact.detailAddress }}
</el-descriptions-item>
<el-descriptions-item label="职务">{{ contact.post }}</el-descriptions-item>
<el-descriptions-item label="直属上级">{{ contact.parentName }}</el-descriptions-item>
<el-descriptions-item label="关键决策人">
<dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="contact.master" />
</el-descriptions-item>
<el-descriptions-item label="性别">
<dict-tag :type="DICT_TYPE.SYSTEM_USER_SEX" :value="contact.sex" />
</el-descriptions-item>
<el-descriptions-item label="下次联系时间">
{{ formatDate(contact.contactNextTime) }}
<el-descriptions-item label="生日">
{{ contact.birthday }}
</el-descriptions-item>
<el-descriptions-item label="爱好">{{ contact.hobby }}</el-descriptions-item>
<el-descriptions-item label="家庭地址">{{ contact.detailAddress }}</el-descriptions-item>
<el-descriptions-item label="办公地址">{{ contact.registeredAddress }}</el-descriptions-item>
<el-descriptions-item label="创建时间">
{{ formatDate(contact.createTime) }}
</el-descriptions-item>
<el-descriptions-item label="备注">{{ contact.remark }}</el-descriptions-item>
</el-descriptions>
</el-collapse-item>
<el-collapse-item name="systemInfo">
<!-- <el-collapse-item name="systemInfo">
<template #title>
<span class="text-base font-bold">系统信息</span>
</template>
@ -51,7 +51,7 @@
{{ formatDate(contact.updateTime) }}
</el-descriptions-item>
</el-descriptions>
</el-collapse-item>
</el-collapse-item> -->
</el-collapse>
</ContentWrap>
</template>

View File

@ -1,21 +1,21 @@
<template>
<ContactDetailsHeader v-loading="loading" :contact="contact">
<el-button v-if="permissionListRef?.validateWrite" @click="openForm('update', contact.id)">
<!-- <ContactDetailsHeader v-loading="loading" :contact="contact"> -->
<!-- <el-button v-if="permissionListRef?.validateWrite" @click="openForm('update', contact.id)">
编辑
</el-button>
</el-button> -->
<!-- <el-button v-if="permissionListRef?.validateOwnerUser" type="primary" @click="transfer">
转移
</el-button> -->
</ContactDetailsHeader>
<!-- </ContactDetailsHeader> -->
<el-col>
<el-tabs>
<el-tab-pane label="跟进记录">
<!-- <el-tabs> -->
<!-- <el-tab-pane label="跟进记录">
<FollowUpList :biz-id="contactId" :biz-type="BizTypeEnum.CRM_CONTACT" />
</el-tab-pane>
<el-tab-pane label="详细资料">
</el-tab-pane> -->
<!-- <el-tab-pane label="详细资料"> -->
<ContactDetailsInfo :contact="contact" />
</el-tab-pane>
<el-tab-pane label="操作日志">
<!-- </el-tab-pane> -->
<!-- <el-tab-pane label="操作日志">
<OperateLogV2 :log-list="logList" />
</el-tab-pane>
<el-tab-pane label="团队成员">
@ -34,8 +34,8 @@
:contact-id="contact.id"
:customer-id="contact.customerId"
/>
</el-tab-pane>
</el-tabs>
</el-tab-pane> -->
<!-- </el-tabs> -->
</el-col>
<!-- 表单弹窗添加/修改 -->
<ContactForm ref="formRef" @success="getContact" />

View File

@ -28,6 +28,7 @@
<el-input
v-model="queryParams.mobile"
class="!w-240px"
oninput = "value=value.replace(/[^\d]/g,'')"
clearable
placeholder="请输入手机号"
@keyup.enter="handleQuery"
@ -92,7 +93,7 @@
<el-tabs v-model="activeName" @tab-click="handleTabClick">
<el-tab-pane label="我负责的" name="1" />
<el-tab-pane label="我参与的" name="2" />
<!-- <el-tab-pane label="下属负责的" name="3" /> -->
<el-tab-pane label="下属负责的" name="3" />
</el-tabs>
<el-table v-loading="loading" :data="list" :show-overflow-tooltip="true" :stripe="true">
<el-table-column align="center" fixed="left" label="联系人姓名" prop="name" width="160">
@ -168,7 +169,7 @@
width="180px"
/>
<el-table-column align="center" label="创建人" prop="creatorName" width="120" />
<el-table-column align="center" fixed="right" label="操作" width="200">
<el-table-column align="center" fixed="right" label="操作" width="200" v-if="activeName == 1">
<template #default="scope">
<el-button
v-hasPermi="['crm:contact:update']"
@ -315,4 +316,7 @@ onMounted(async () => {
await getList()
customerList.value = await CustomerApi.getCustomerSimpleList()
})
onActivated(()=>{
getList()
})
</script>

View File

@ -65,9 +65,9 @@
</el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="协议截止日期" prop="endTime">
<el-form-item label="协议截止日期" prop="agreementDeadline">
<el-date-picker
v-model="formData.endTime"
v-model="formData.agreementDeadline"
disabled
type="date"
value-format="x"
@ -198,6 +198,12 @@ const formFields = ref({
contractBAuthorizedPersonswechat: 1,
contractBAuthorizedPersonsemail: 1,
contractBAuthorizedPersonsother2: 1,
agreementDeadline: 1,
extensionYears: 2,
extensionDate: 2,
terminationDate: 2,
terminationReason: 2,
note: 2
})
const formData = ref({
authPerson: [],
@ -210,7 +216,7 @@ const formData = ref({
processInstanceId: undefined,
auditStatus: undefined,
startTime: undefined,
endTime: undefined,
agreementDeadline: undefined,
penaltyRate: undefined,
latePaymentRate: undefined,
settleMethod: undefined,
@ -421,7 +427,7 @@ const resetForm = () => {
processInstanceId: undefined,
auditStatus: undefined,
startTime: undefined,
endTime: undefined,
agreementDeadline: undefined,
penaltyRate: undefined,
latePaymentRate: undefined,
settleMethod: undefined,

View File

@ -11,15 +11,16 @@
基础信息
</ContentWrap>
<el-row>
<!-- <el-col :span="8">
<el-form-item label="合同名称" prop="name">
<el-input v-model="formData.name" placeholder="请输入合同名称" />
</el-form-item>
</el-col> -->
<el-col :span="8">
<el-form-item label="客户名称" prop="customerId">
<SelectComponent :customerList="customerList" :disabled="!!formType" v-model="formData.customerId" @change="onCustomerChange" />
<SelectComponent :customerList="customerList" :disabled="!!formType || route.query.bizId" v-model="formData.customerId" @change="onCustomerChange" />
</el-form-item>
</el-col>
<el-col :span="8" v-if="formType">
<el-form-item label="合同名称" prop="name">
<el-input v-model="formData.name" disabled placeholder="请输入合同名称" />
</el-form-item>
</el-col>
<!-- <el-col :span="8" v-if="formType">
@ -416,7 +417,7 @@
</el-col> -->
<el-col :span="8">
<el-form-item label="维护人" prop="afterSaleUserId">
<el-select v-model="formData.afterSaleUserId" placeholder="请选择售后维护人">
<el-select v-model="formData.afterSaleUserId" disabled placeholder="请选择售后维护人">
<el-option
v-for="dict in userOptions"
:key="dict.id"
@ -431,6 +432,7 @@
<el-select
class="w-1/1"
placeholder="请选择拓展人"
disabled
v-model="formData.clueDeveloper"
filterable
>
@ -703,6 +705,9 @@ const formRules = reactive({
latePaymentRate: [{ required: true, message: '延期付款利率不能为空', trigger: 'blur' }],
collUserId: [{ required: true, message: '协作人不能为空', trigger: 'blur' }],
settleMethod: [{ required: true, message: '财务结算方式不能为空', trigger: 'change' }],
servicor: [{ required: true, message: '服务对接人不能为空', trigger: 'change' }],
technicalLead: [{ required: true, message: '技术对接人不能为空', trigger: 'change' }],
settlementLead: [{ required: true, message: '结算对接人不能为空', trigger: 'change' }],
})
const formRef = ref() // Ref
const userOptions = ref<UserApi.UserVO[]>([]) //
@ -991,6 +996,10 @@ onMounted(async () => {
if (formType.value) await open(formType.value)
}
formData.value.customerId = Number(route.query.bizId) || ''
if(formData.value.customerId) onCustomerChange(formData.value.customerId)
//
customerList.value = await CustomerApi.getCustomerSimpleList()
//

View File

@ -1,43 +1,45 @@
<template>
<el-form
<processForm
ref="formRef"
:model="formData"
:rules="formRules"
:fields="formFields"
label-width="130px"
v-loading="formLoading"
>
<el-row>
<template #terminationDate>
<el-col :span="8">
<el-form-item label="终止日期" prop="terminationDate">
<el-date-picker
v-model="formData.terminationDate"
type="date"
:disabled="!!type"
:disabled="formFields.changeAmount !== 2 || isTrue"
value-format="x"
placeholder="请选择终止日期"
style="width: 100%"
/>
</el-form-item>
</el-col>
</template>
<template #terminationReason>
<el-col :span="16">
<el-form-item label="终止原因" prop="terminationReason">
<el-radio-group v-model="formData.terminationReason" :disabled="!!type">
<el-radio-group v-model="formData.terminationReason" :disabled="formFields.changeAmount !== 2 || isTrue">
<el-radio :label="1">合同到期</el-radio>
<el-radio :label="2">甲方违反协议</el-radio>
<el-radio :label="3">乙方不可抗力</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<el-form-item label="终止说明" prop="note">
<el-input v-model="formData.note" :disabled="!!type" type="textarea" :row="5" placeholder="必须确保账款已全部回收" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<template #note>
<el-col :span="24">
<el-form-item label="终止说明" prop="note">
<el-input v-model="formData.note" :disabled="formFields.changeAmount !== 2 || isTrue" type="textarea" :row="5" placeholder="必须确保账款已全部回收" />
</el-form-item>
</el-col>
</template>
</processForm>
<!-- 子表的表单 -->
</template>
@ -55,7 +57,10 @@ import { propTypes } from '@/utils/propTypes'
/** CRM 方案报价 表单 */
defineOptions({ name: 'QuotationForm' })
const props = defineProps<{
formFields: {},
isTrue: false
}>()
const { t } = useI18n() //
const message = useMessage() //
const customerList = ref([]) //

View File

@ -1,12 +1,13 @@
<template>
<el-form
<processForm
ref="formRef"
:model="formData"
:rules="formRules"
:fields="formFields"
label-width="130px"
v-loading="formLoading"
>
<el-row>
<template #cooperationType>
<el-col :span="8">
<el-form-item label="合作类型" prop="cooperationType">
<el-select v-model="formData.cooperationType" :disabled="!!type" filterable placeholder="请选择合作类型" class="w-1/1">
@ -19,14 +20,13 @@
</el-select>
</el-form-item>
</el-col>
</template>
<template #no>
<el-col :span="8">
<el-form-item label="企业类型" prop="">
<el-input v-model="formData.no" disabled placeholder="自动获取" />
</el-form-item>
</el-col>
</el-row>
<el-row>
<!-- <el-col :span="8">
<el-form-item label="上市情况" prop="customerId">
<el-select v-model="formData.customerId" :disabled="!!type" placeholder="请选择上市情况" @change="onCustomerChange">
@ -56,17 +56,22 @@
</el-select>
</el-form-item>
</el-col> -->
</template>
<template #actualCapital>
<el-col :span="8">
<el-form-item label="实缴资金" prop="paidInCapital">
<el-input v-model="formData.actualCapital" disabled />
</el-form-item>
</el-col>
</template>
<template #socialEmployeeNum>
<el-col :span="8">
<el-form-item label="参保人数" prop="insuredCount">
<el-input v-model="formData.socialEmployeeNum" disabled />
</el-form-item>
</el-col>
</template>
<template #defendantRecord>
<el-col :span="8">
<el-form-item label="被告记录" prop="defendantRecord">
<el-radio-group v-model="formData.defendantRecord" :disabled="true">
@ -75,6 +80,8 @@
</el-radio-group>
</el-form-item>
</el-col>
</template>
<template #abnormalService>
<el-col :span="8">
<el-form-item label="经营异常" prop="abnormalService">
<el-radio-group v-model="formData.abnormalService" :disabled="true">
@ -83,6 +90,8 @@
</el-radio-group>
</el-form-item>
</el-col>
</template>
<template #equityPledge>
<el-col :span="8">
<el-form-item label="股权出质" prop="equityPledge">
<el-radio-group v-model="formData.equityPledge" :disabled="true">
@ -91,6 +100,8 @@
</el-radio-group>
</el-form-item>
</el-col>
</template>
<template #dishonestyRecord>
<el-col :span="8">
<el-form-item label="失信记录" prop="dishonestyRecord">
<el-radio-group v-model="formData.dishonestyRecord" :disabled="true">
@ -99,6 +110,8 @@
</el-radio-group>
</el-form-item>
</el-col>
</template>
<template #financeRecord>
<el-col :span="8">
<el-form-item label="融资记录" prop="financeRecord">
<el-radio-group v-model="formData.financeRecord" :disabled="true">
@ -107,6 +120,8 @@
</el-radio-group>
</el-form-item>
</el-col>
</template>
<template #judgmentRecord>
<el-col :span="8">
<el-form-item label="被执行记录" prop="judgmentRecord">
<el-radio-group v-model="formData.judgmentRecord" :disabled="true">
@ -115,33 +130,36 @@
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="协议截止日" prop="endTime">
<el-date-picker
disabled
v-model="formData.endTime"
type="date"
@change="changeYear"
value-format="x"
placeholder="请选择协议截止日"
style="width: 100%"
/>
</template>
<template #agreementDeadline>
<el-col :span="8">
<el-form-item label="协议截止日" prop="agreementDeadline">
<el-date-picker
disabled
v-model="formData.agreementDeadline"
type="date"
@change="changeYear"
value-format="x"
placeholder="请选择协议截止日"
style="width: 100%"
/>
</el-form-item>
</el-col>
</template>
<template #extensionYears>
<el-col :span="8">
<el-form-item label="顺延年限" prop="extensionYears">
<el-input v-model="formData.extensionYears" :disabled="formFields.extensionYears !== 2 || isTrue" placeholder="请输入顺延年限" @change="changeYear" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="顺延年限" prop="extensionYears">
<el-input v-model="formData.extensionYears" :disabled="!!type" placeholder="请输入顺延年限" @change="changeYear" />
</el-form-item>
</el-col>
<el-col :span="8">
</el-col>
</template>
<template #extensionDate>
<el-col :span="8">
<el-form-item label="调整金额截止日期" prop="extensionDate">
<el-date-picker
v-model="formData.extensionDate"
:disabled="!!type"
:disabled="formFields.extensionDate !== 2 || isTrue"
type="date"
value-format="x"
placeholder="调整金额截止日期"
@ -149,13 +167,15 @@
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="延期说明" prop="signEmail">
<el-input v-model="formData.signEmail" :disabled="!!type" type="textarea" :row="5" placeholder="请输入延期说明" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<template #note>
<el-col :span="24">
<el-form-item label="延期说明" prop="note">
<el-input v-model="formData.note" :disabled="formFields.note !== 2 || isTrue" type="textarea" :row="5" placeholder="请输入延期说明" />
</el-form-item>
</el-col>
</template>
</processForm>
<!-- 子表的表单 -->
</template>
@ -205,7 +225,7 @@ const formData = ref({
pricingUserId: undefined,
signUserId: undefined,
signPhoneNumber: undefined,
signEmail: undefined,
note: undefined,
signWechat: undefined,
paymentTerm: undefined,
creditMethod: undefined,
@ -254,7 +274,9 @@ const subTabsName = ref('quotationProduct')
const quotationProductFormRef = ref()
const props = defineProps<{
data: undefined
data: undefined,
formFields: {},
isTrue: false
}>()
/** 监听主表的关联字段的变化,加载对应的子表数据 */
@ -336,8 +358,8 @@ const onPartnerChange = async (id: string) => {
}
const changeYear = (val) => {
if (formData.value.extensionYears && formData.value.endTime) {
let time = new Date(formData.value.endTime)
if (formData.value.extensionYears && formData.value.agreementDeadline) {
let time = new Date(formData.value.agreementDeadline)
let year = time.getFullYear()
let month = time.getMonth() + 1
let day = time.getDate()

View File

@ -114,7 +114,7 @@ const handleQuery = () => {
/** 添加 */
const formRef = ref()
const openForm = () => {
push({ name: 'CrmContractAdd' })
push({ name: 'CrmContractAdd', query: { bizId: props.bizId } })
}
/** 打开合同详情 */

View File

@ -105,8 +105,8 @@
</ContentWrap>
<ContractBAuthorizedPersonForm :formFields="formFields" :type="1" ref="ContractBAuthorizedPersonFormRef" :customerId="formData.customerId" :contract-id="formData.id" />
</div>
<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" />
<ContracExtension ref="contractExtensionFormRef" :isTrue="isTrue" :formFields="formFields" v-if="formData.changeItem == 3" :disabled="true" :data="formData" />
<ContractStop ref="contractStopFormRef" :isTrue="isTrue" :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>

View File

@ -8,6 +8,9 @@
class="-mb-15px"
label-width="68px"
>
<el-form-item label="客户" prop="customerId">
<SelectComponent :customerList="customerList" class="!w-240px" v-model="queryParams.customerId" />
</el-form-item>
<el-form-item label="合同编号" prop="no">
<el-input
v-model="queryParams.no"
@ -25,25 +28,7 @@
placeholder="请输入合同名称"
@keyup.enter="handleQuery"
/>
<el-form-item label="客户" prop="customerId">
<SelectComponent :customerList="customerList" class="!w-240px" v-model="queryParams.customerId" />
<!-- <el-select
v-model="queryParams.customerId"
class="!w-240px"
clearable
lable-key="name"
placeholder="请选择客户"
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">

View File

@ -158,9 +158,7 @@ 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
@ -208,7 +206,7 @@ const formRef = ref()
// }
const router = useRouter() //
const openFormAdd = () => {
router.push({ name: 'CustomerFeedbackCreate' })
router.push({ name: 'CustomerFeedbackCreate', query: { bizId: props.bizId } })
}
const openFormEdit = (row: Object) => {

View File

@ -193,6 +193,7 @@ import { defaultProps, handleTree } from '@/utils/tree'
import * as DeptApi from '@/api/system/dept'
import * as UserApi from '@/api/system/user'
import { getLimitForm } from '@/api/bpm/form'
import { propTypes } from '@/utils/propTypes'
/** 客户反馈 表单 */
defineOptions({ name: 'CustomerFeedbackForm' })
@ -200,7 +201,10 @@ defineOptions({ name: 'CustomerFeedbackForm' })
const { t } = useI18n() //
const message = useMessage() //
const { proxy }: any = getCurrentInstance();
const props = defineProps({
id: propTypes.number.def(undefined),
type: propTypes.number.def(undefined),
})
const isTrue = ref(false)
const userOptions = ref<UserApi.UserVO[]>([]) //
const userList = ref([]) //
@ -359,7 +363,7 @@ const getLimit = async () => {
const route = useRoute();
onMounted(async() => {
isTrue.value = !!route.query.isDetail
formType.value = route.query.id
formType.value = props.id || route.query.id
if (formType.value) await open(formType.value)

View File

@ -11,7 +11,7 @@
<el-col :span="8">
<el-form-item label="客户名称" prop="customerId">
<SelectComponent :customerList="customerList" placeholder="请选择客户名称" v-model="formData.customerId" />
<SelectComponent :customerList="customerList" :disabled="route.query.bizId" placeholder="请选择客户名称" v-model="formData.customerId" />
</el-form-item>
</el-col>
@ -301,6 +301,7 @@ const resetForm = () => {
const route = useRoute();
onMounted(async() => {
formData.value.customerId = Number(route.query.bizId) || ''
formType.value = route.query.id
if (formType.value) await open(formType.value)

View File

@ -50,7 +50,7 @@
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
<!-- <el-button
type="success"
plain
@click="handleExport"
@ -58,7 +58,7 @@
v-hasPermi="['crm:customer-feedback:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-button> -->
</el-form-item>
</el-form>
</ContentWrap>

View File

@ -138,7 +138,7 @@ const submitForm = async () => {
...formData.value,
contactIds: formData.value.contacts.map((item) => item.id),
businessIds: formData.value.businesses.map((item) => item.id),
fileUrls: [formData.value.fileUrls]
fileUrls: formData.value.fileUrls ? [formData.value.fileUrls] : []
} as unknown as FollowUpRecordVO
await FollowUpRecordApi.createFollowUpRecord(data)
message.success(t('common.createSuccess'))

View File

@ -40,7 +40,7 @@
<el-table-column label="附件" align="center" prop="fileUrls">
<template #default="scope">
<el-link
v-if="scope.row.fileUrls"
v-if="scope.row.fileUrls && scope.row.fileUrls.length"
:underline="false"
type="primary"
@click="previewFile(scope.row.fileUrls)"

View File

@ -80,19 +80,19 @@
<el-input v-model="formData.listingStatus" placeholder="请输入上市情况" clearable />
</el-form-item>
</el-col> -->
<el-col :span="8">
<!-- <el-col :span="8">
<el-form-item label="融资信息" prop="financingInfo">
<el-input v-model="formData.financingInfo" disabled placeholder="" clearable />
</el-form-item>
</el-col>
</el-col> -->
<el-col :span="8">
<el-form-item label="实缴资金" prop="actualCapital">
<el-input v-model="formData.actualCapital" placeholder="" clearable />
<el-input v-model="formData.actualCapital" disabled placeholder="" clearable />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="参保人数" prop="socialEmployeeNum">
<el-input v-model="formData.socialEmployeeNum" placeholder="" clearable />
<el-input v-model="formData.socialEmployeeNum" disabled placeholder="" clearable />
</el-form-item>
</el-col>
<el-col :span="8">
@ -114,7 +114,7 @@
</el-col> -->
<el-col :span="8">
<el-form-item label="被告记录" prop="defendantRecord">
<el-radio-group v-model="formData.defendantRecord" >
<el-radio-group v-model="formData.defendantRecord" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
@ -122,7 +122,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="经营异常" prop="abnormalService">
<el-radio-group v-model="formData.abnormalService" >
<el-radio-group v-model="formData.abnormalService" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
@ -130,7 +130,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="股权出质" prop="equityPledge">
<el-radio-group v-model="formData.equityPledge" >
<el-radio-group v-model="formData.equityPledge" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
@ -138,7 +138,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="失信记录" prop="dishonestyRecord">
<el-radio-group v-model="formData.dishonestyRecord" >
<el-radio-group v-model="formData.dishonestyRecord" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
@ -146,7 +146,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="融资记录" prop="financeRecord">
<el-radio-group v-model="formData.financeRecord" >
<el-radio-group v-model="formData.financeRecord" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
@ -154,7 +154,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="被执行记录" prop="judgmentRecord">
<el-radio-group v-model="formData.judgmentRecord" >
<el-radio-group v-model="formData.judgmentRecord" disabled>
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
@ -166,7 +166,7 @@
<el-row>
<el-col :span="8">
<el-form-item label="合作类型" prop="partnerType">
<el-select v-model="formData.partnerType" clearable placeholder="请选择合作类型">
<el-select v-model="formData.partnerType" @change="changePartnerType" clearable placeholder="请选择合作类型">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PARTNER_TYPE1)"
:key="dict.value"
@ -238,8 +238,8 @@
</el-col>
<el-col :span="8">
<el-form-item label="商机负责人" prop="ownerUserId">
<el-select v-model="formData.ownerUserId" placeholder="请选择商机负责人">
<el-form-item label="商机负责人" prop="requestorUserId">
<el-select v-model="formData.requestorUserId" disabled placeholder="请选择商机负责人">
<el-option
v-for="dict in userOptions"
:key="dict.id"
@ -303,7 +303,7 @@
<el-col :span="8">
<el-form-item label="账期" prop="paymentTerm">
<el-select v-model="formData.paymentTerm" placeholder="请选择账期">
<el-select v-model="formData.paymentTerm" disabled placeholder="请选择账期">
<el-option
v-for="dict in getStrDictOptions('payment_term')"
:key="dict.value"
@ -315,7 +315,7 @@
</el-col>
<el-col :span="8">
<el-form-item label="授信方式" prop="creditMethod">
<el-select v-model="formData.creditMethod" placeholder="请选择授信方式">
<el-select v-model="formData.creditMethod" disabled placeholder="请选择授信方式">
<el-option
v-for="dict in getIntDictOptions('credit_method')"
:key="dict.value"
@ -505,7 +505,7 @@ const formFields = ref({ //字段显示隐藏权限控制,字段顺序就是显
bankAccount: 1,
legalRepresentative: 1,
deptId: 1,
ownerUserId: 1,
requestorUserId: 1,
pricingUserId: 1,
paymentTerm: 1,
creditMethod: 1,
@ -549,7 +549,7 @@ const formData = ref({
processInstanceId: undefined,
auditStatus: undefined,
serviceFeeCollectionMethodId: undefined,
ownerUserId: undefined,
requestorUserId: undefined,
expanderUserId: undefined,
pricingUserId: undefined,
signUserId: undefined,
@ -612,6 +612,7 @@ const formRules = reactive({
quotationTimes: [{ required: true, message: '第几次报价不能为空', trigger: 'change' }],
serviceFeeCollectionMethodId: [{ required: true, message: '服务费收取方式不能为空', trigger: 'change' }],
insuranceId: [{ required: true, message: '保险类型不能为空', trigger: 'change' }],
partnerType: [{ required: true, message: '合作类型不能为空', trigger: 'change' }],
})
const formRef = ref() // Ref
@ -735,7 +736,7 @@ const onBusinessChange = async (businessId: string) => {
const res = await BusinessApi.getBusiness(businessId);
formData.value.customerId = res.customerId;
// formData.value.creditLimit = res.creditLimit; //
formData.value.ownerUserId = res.ownerUserId; //
formData.value.requestorUserId = res.requestorUserId; //
formData.value.paymentTerm = res.paymentTerm;
formData.value.creditMethod = res.creditMethod;
formData.value.creditCalcCycle = res.creditCalcCycle;
@ -779,6 +780,12 @@ const onCustomerChange = async (customerId: string) => {
formData.value.dishonestRecord = customerRes.dishonestRecord;
formData.value.financingRecord = customerRes.financingRecord;
formData.value.enforcementRecord = customerRes.enforcementRecord;
formData.value.regType = customerRes.regType;
formData.value.abnormalService = customerRes.abnormalService;
formData.value.dishonestyRecord = customerRes.dishonestyRecord;
formData.value.financeRecord = customerRes.financeRecord;
formData.value.judgmentRecord = customerRes.judgmentRecord;
formData.value.creditAmount = customerRes.creditAmount || 0;
formData.value.creditLimit = ((formData.value.creditAmount || 0) + (formData.value.creditLimitNum || 0)).toFixed(2)
} catch (err) {
@ -888,7 +895,7 @@ const resetForm = () => {
invoiceTemplateId: undefined,
processInstanceId: undefined,
auditStatus: undefined,
ownerUserId: undefined,
requestorUserId: undefined,
expanderUserId: undefined,
pricingUserId: undefined,
signUserId: undefined,
@ -910,6 +917,15 @@ const resetForm = () => {
formRef.value?.resetFields()
}
const changePartnerType = async (val) => {
const org = await ContractApi.getOrg({
pageNo: 1,
pageSize: 1000,
partnerType: val
})
orgList.value = org.list
}
const route = useRoute();
onMounted(async () => {
formType.value = props.id || route.query.id;
@ -935,11 +951,6 @@ onMounted(async () => {
//
insuranceList.value = await QuotationApi.getInsuranceList()
const org = await ContractApi.getOrg({
pageNo: 1,
pageSize: 1000
})
orgList.value = org.list
});
</script>

View File

@ -143,23 +143,23 @@
</template>
</el-table-column>
<el-table-column label="商机负责人" align="center" prop="ownerUserId">
<template #default="scope">
<el-table-column label="商机负责人" align="center" prop="requestorUserName" width="120">
<!-- <template #default="scope">
{{getName(userOptions, scope.row.creator)}}
</template>
</template> -->
</el-table-column>
<el-table-column label="拓展人" align="center" prop="expandingUserId">
<template #default="scope">
<el-table-column label="拓展人" align="center" prop="clueDeveloperName">
<!-- <template #default="scope">
{{getName(userOptions, scope.row.expandingUserId)}}
</template>
</template> -->
</el-table-column>
<el-table-column label="维护人" align="center" prop="ownerUserId">
<template #default="scope">
<el-table-column label="维护人" align="center" prop="maintainerName">
<!-- <template #default="scope">
{{getName(userOptions, scope.row.maintenanceUserId)}}
</template>
</template> -->
</el-table-column>
<el-table-column label="账期" align="center" prop="paymentTerm" width="120">
<template #default="scope">
@ -171,14 +171,14 @@
<dict-tag :type="'credit_method'" :value="scope.row.creditMethod" />
</template>
</el-table-column>
<el-table-column label="项目难度" align="center" prop="projectDifficultyName" width="120" />
<el-table-column label="项目难度" align="center" prop="projectDifficultyName" width="180" />
<!-- <el-table-column label="授信计算周期" align="center" prop="creditCalcCycle" width="120" /> -->
<!-- <template #default="scope">
<dict-tag :type="DICT_TYPE.CREDIT_CALC_CYCLE" :value="scope.row.creditCalcCycle" />
</template>
</el-table-column> -->
<el-table-column label="授信额度" align="center" prop="creditLimit" width="180" />
<el-table-column label="合作主体" align="center" prop="partnerCompanyName" />
<el-table-column label="合作主体" align="center" prop="partnerCompanyName" width="150" />
<el-table-column label="审批状态" align="center" prop="auditStatus" width="100">
<template #default="scope">
<dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.auditStatus" />

View File

@ -48,17 +48,30 @@
<el-input v-model="formData.registeredAddress" placeholder="请输入注册地址" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="开户行" prop="bankName">
<el-input v-model="formData.bankName" placeholder="请输入开户行" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="银行账号" prop="bankAccount">
<el-input v-model="formData.bankAccount" placeholder="请输入银行账号" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="合作类型" prop="partnerType">
<el-select v-model="formData.partnerType" clearable placeholder="请选择合作类型">
<el-option
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_PARTNER_TYPE1)"
: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="bankName">
<el-input v-model="formData.bankName" placeholder="请输入开户行" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="营业执照文件路径" prop="businessLicense">
<UploadImg v-model="formData.businessLicense" />
@ -75,6 +88,7 @@
</template>
<script setup lang="ts">
import { OrganizationsApi, OrganizationsVO } from '@/api/system/organizations'
import { getIntDictOptions, getStrDictOptions, DICT_TYPE } from '@/utils/dict'
/** 组织机构 表单 */
defineOptions({ name: 'OrganizationsForm' })
@ -108,7 +122,8 @@ const formRules = reactive({
creditCode: [{ required: true, message: '统一信用代码不能为空', trigger: 'blur' }],
legalRepresentative: [{ required: true, message: '法人代表不能为空', trigger: 'blur' }],
registeredAddress: [{ required: true, message: '注册地址不能为空', trigger: 'blur' }],
bankAccount: [{ required: true, message: '银行账号不能为空', trigger: 'blur' }]
bankAccount: [{ required: true, message: '银行账号不能为空', trigger: 'blur' }],
partnerType: [{ required: true, message: '合作类型不能为空', trigger: 'blur' }],
})
const formRef = ref() // Ref

View File

@ -17,107 +17,7 @@
class="!w-240px"
/>
</el-form-item>
<el-form-item label="工作地址" prop="workplace">
<el-input
v-model="queryParams.workplace"
placeholder="请输入工作地址"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="企业微信凭证" prop="corpId">
<el-input
v-model="queryParams.corpId"
placeholder="请输入企业微信凭证"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="企业微信凭证密钥" prop="corpSecret">
<el-input
v-model="queryParams.corpSecret"
placeholder="请输入企业微信凭证密钥"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="主体名称" prop="subjectName">
<el-input
v-model="queryParams.subjectName"
placeholder="请输入主体名称"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="统一信用代码" prop="creditCode">
<el-input
v-model="queryParams.creditCode"
placeholder="请输入统一信用代码"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="法人代表" prop="legalRepresentative">
<el-input
v-model="queryParams.legalRepresentative"
placeholder="请输入法人代表"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="注册地址" prop="registeredAddress">
<el-input
v-model="queryParams.registeredAddress"
placeholder="请输入注册地址"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="开户行" prop="bankName">
<el-input
v-model="queryParams.bankName"
placeholder="请输入开户行"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="银行账号" prop="bankAccount">
<el-input
v-model="queryParams.bankAccount"
placeholder="请输入银行账号"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="营业执照文件路径" prop="businessLicense">
<el-input
v-model="queryParams.businessLicense"
placeholder="请输入营业执照文件路径"
clearable
@keyup.enter="handleQuery"
class="!w-240px"
/>
</el-form-item>
<el-form-item label="创建时间" prop="createTime">
<el-date-picker
v-model="queryParams.createTime"
value-format="YYYY-MM-DD HH:mm:ss"
type="daterange"
start-placeholder="开始日期"
end-placeholder="结束日期"
:default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class="!w-220px"
/>
</el-form-item>
<el-form-item>
<el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
<el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
@ -129,15 +29,6 @@
>
<Icon icon="ep:plus" class="mr-5px" /> 新增
</el-button>
<el-button
type="success"
plain
@click="handleExport"
:loading="exportLoading"
v-hasPermi="['system:organizations:export']"
>
<Icon icon="ep:download" class="mr-5px" /> 导出
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
@ -156,7 +47,19 @@
<el-table-column label="注册地址" align="center" prop="registeredAddress" />
<el-table-column label="开户行" align="center" prop="bankName" />
<el-table-column label="银行账号" align="center" prop="bankAccount" />
<el-table-column label="营业执照文件路径" align="center" prop="businessLicense" />
<el-table-column label="营业执照文件" align="center" prop="businessLicense">
<template #default="scope">
<el-link
v-if="scope.row.businessLicense"
:underline="false"
type="primary"
@click="previewPic(scope.row.businessLicense)"
>
预览
</el-link>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="创建者" align="center" prop="creator" />
<el-table-column
label="创建时间"
@ -202,7 +105,13 @@
@pagination="getList"
/>
</ContentWrap>
<el-image-viewer
v-if="show"
:url-list="urlList"
show-progress
@close="show = false"
/>
<!-- 表单弹窗添加/修改 -->
<OrganizationsForm ref="formRef" @success="getList" />
</template>
@ -218,7 +127,8 @@ defineOptions({ name: 'Organizations' })
const message = useMessage() //
const { t } = useI18n() //
const show = ref(false)
const urlList = ref([])
const loading = ref(true) //
const list = ref<OrganizationsVO[]>([]) //
const total = ref(0) //
@ -271,6 +181,11 @@ const openForm = (type: string, id?: number) => {
formRef.value.open(type, id)
}
const previewPic = (val) => {
show.value = true
urlList.value = [val]
}
/** 删除按钮操作 */
const handleDelete = async (id: number) => {
try {