问题修改
parent
a55437683e
commit
912dd110fb
|
|
@ -101,6 +101,11 @@ export const getCustomerSimpleList = async () => {
|
||||||
return await request.get({ url: `/crm/customer/simple-list` })
|
return await request.get({ url: `/crm/customer/simple-list` })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 模糊查询公司
|
||||||
|
export const getCompanyList = async (params) => {
|
||||||
|
return await request.get({ url: `/crm/customer/fuzzyQueryCompany`, params })
|
||||||
|
}
|
||||||
|
|
||||||
// ======================= 业务操作 =======================
|
// ======================= 业务操作 =======================
|
||||||
|
|
||||||
// 客户转移
|
// 客户转移
|
||||||
|
|
|
||||||
|
|
@ -116,8 +116,8 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-divider content-position="center">{{ t('login.otherLogin') }}</el-divider>
|
<!-- <el-divider content-position="center">{{ t('login.otherLogin') }}</el-divider> -->
|
||||||
<el-col :span="24" style="padding-right: 10px; padding-left: 10px">
|
<!-- <el-col :span="24" style="padding-right: 10px; padding-left: 10px">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<div class="w-[100%] flex justify-between">
|
<div class="w-[100%] flex justify-between">
|
||||||
<Icon
|
<Icon
|
||||||
|
|
@ -131,7 +131,7 @@
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col> -->
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,19 @@ const open = async (id?: number, customerId?: number) => {
|
||||||
formLoading.value = true
|
formLoading.value = true
|
||||||
try {
|
try {
|
||||||
formData.value = await BillTemplateApi.getBillTemplate(id)
|
formData.value = await BillTemplateApi.getBillTemplate(id)
|
||||||
formData.value.products = formData.value.productItems
|
formData.value.products = formData.value.productItems.map(v => {
|
||||||
|
return {
|
||||||
|
category: v.category,
|
||||||
|
detailType: v.detailType,
|
||||||
|
productName: v.name,
|
||||||
|
productId: v.productId,
|
||||||
|
productInvoice: v.productInvoice,
|
||||||
|
productInvoiceItems: v.productInvoiceItems,
|
||||||
|
serviceFeeInvoice: v.serviceFeeInvoice,
|
||||||
|
serviceFeeInvoiceItems: v.serviceFeeInvoiceItems,
|
||||||
|
productUnit: v.unit
|
||||||
|
}
|
||||||
|
})
|
||||||
} finally {
|
} finally {
|
||||||
formLoading.value = false
|
formLoading.value = false
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@
|
||||||
</el-table>
|
</el-table>
|
||||||
</el-form>
|
</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" round>+ 添加产品</el-button>
|
<el-button @click="handleAdd" type="primary" round>+ 添加产品</el-button>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
||||||
<!-- 表单弹窗:添加/修改 -->
|
<!-- 表单弹窗:添加/修改 -->
|
||||||
|
|
@ -130,7 +130,6 @@ watch(
|
||||||
|
|
||||||
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
|
||||||
const getList = (val: []) => {
|
const getList = (val: []) => {
|
||||||
console.log('%csrc/views/crm/billtemplate/components/index.vue:133 object', 'color: #007acc;', formData.value);
|
|
||||||
for(let i = formData.value.length - 1; i >= 0; i--) {
|
for(let i = formData.value.length - 1; i >= 0; i--) {
|
||||||
let obj = formData.value[i]
|
let obj = formData.value[i]
|
||||||
if(!val.some(v => v.id === obj.productId)) formData.value.splice(i, 1)
|
if(!val.some(v => v.id === obj.productId)) formData.value.splice(i, 1)
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@
|
||||||
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
|
<dict-tag :type="DICT_TYPE.COMMON_STATUS" :value="scope.row.status" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="创建人" align="center" prop="creator" />
|
<el-table-column label="创建人" align="center" prop="creatorName" />
|
||||||
<el-table-column
|
<el-table-column
|
||||||
label="创建时间"
|
label="创建时间"
|
||||||
align="center"
|
align="center"
|
||||||
|
|
|
||||||
|
|
@ -10,14 +10,14 @@
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="商机名称" prop="name">
|
<el-form-item label="商机名称" prop="name">
|
||||||
<el-input v-model="formData.name" placeholder="请输入商机名称" />
|
<el-input v-model="formData.name" clearable placeholder="请输入商机名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="负责人" prop="ownerUserId">
|
<el-form-item label="负责人" prop="ownerUserId">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="formData.ownerUserId"
|
v-model="formData.ownerUserId"
|
||||||
:disabled="formType"
|
disabled
|
||||||
placeholder="请选择负责人"
|
placeholder="请选择负责人"
|
||||||
class="w-1/1"
|
class="w-1/1"
|
||||||
>
|
>
|
||||||
|
|
@ -34,6 +34,7 @@
|
||||||
<el-form-item label="需求提交人" prop="requestorUserId">
|
<el-form-item label="需求提交人" prop="requestorUserId">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="formData.requestorUserId"
|
v-model="formData.requestorUserId"
|
||||||
|
clearable
|
||||||
:disabled="formType"
|
:disabled="formType"
|
||||||
placeholder="请选择需求提交人"
|
placeholder="请选择需求提交人"
|
||||||
class="w-1/1"
|
class="w-1/1"
|
||||||
|
|
@ -52,6 +53,7 @@
|
||||||
<el-select
|
<el-select
|
||||||
:disabled="formData.customerDefault"
|
:disabled="formData.customerDefault"
|
||||||
v-model="formData.customerId"
|
v-model="formData.customerId"
|
||||||
|
clearable
|
||||||
placeholder="请选择客户"
|
placeholder="请选择客户"
|
||||||
class="w-1/1"
|
class="w-1/1"
|
||||||
>
|
>
|
||||||
|
|
@ -72,6 +74,7 @@
|
||||||
:data="deptTree"
|
:data="deptTree"
|
||||||
:props="defaultProps"
|
:props="defaultProps"
|
||||||
filterable
|
filterable
|
||||||
|
clearable
|
||||||
check-strictly
|
check-strictly
|
||||||
node-key="id"
|
node-key="id"
|
||||||
placeholder="请选择归属部门"
|
placeholder="请选择归属部门"
|
||||||
|
|
@ -109,7 +112,7 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="销售阶段" prop="saleStage">
|
<el-form-item label="销售阶段" prop="saleStage">
|
||||||
<el-select v-model="formData.saleStage" placeholder="请选择销售阶段">
|
<el-select v-model="formData.saleStage" clearable placeholder="请选择销售阶段">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getIntDictOptions('sale_stage')"
|
v-for="dict in getIntDictOptions('sale_stage')"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
|
|
@ -119,11 +122,12 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="账期" prop="paymentTerm">
|
<el-form-item label="授信方式" prop="creditMethod">
|
||||||
<el-select v-model="formData.paymentTerm" @change="changePayment" placeholder="请选择账期">
|
<el-select v-model="formData.creditMethod" clearable placeholder="请选择授信方式">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getStrDictOptions(DICT_TYPE.PAYMENT_TERM)"
|
v-for="dict in getIntDictOptions('credit_method')"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
:label="dict.label"
|
:label="dict.label"
|
||||||
:value="dict.value"
|
:value="dict.value"
|
||||||
|
|
@ -132,10 +136,10 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="授信方式" prop="creditMethod">
|
<el-form-item label="账期" prop="paymentTerm">
|
||||||
<el-select v-model="formData.creditMethod" placeholder="请选择授信方式">
|
<el-select v-model="formData.paymentTerm" @change="changePayment" clearable placeholder="请选择账期">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in getIntDictOptions('credit_method')"
|
v-for="dict in getStrDictOptions(DICT_TYPE.PAYMENT_TERM)"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
:label="dict.label"
|
:label="dict.label"
|
||||||
:value="dict.value"
|
:value="dict.value"
|
||||||
|
|
@ -174,9 +178,9 @@
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="24">
|
||||||
<el-form-item label="备注" prop="remark">
|
<el-form-item label="备注" prop="remark">
|
||||||
<el-input type="textarea" v-model="formData.remark" placeholder="请输入备注" />
|
<el-input type="textarea" v-model="formData.remark" clearable placeholder="请输入备注" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
|
@ -282,7 +286,12 @@ const formRules = reactive({
|
||||||
name: [{ required: true, message: '商机名称不能为空', trigger: 'blur' }],
|
name: [{ required: true, message: '商机名称不能为空', trigger: 'blur' }],
|
||||||
customerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }],
|
customerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }],
|
||||||
ownerUserId: [{ required: true, message: '负责人不能为空', trigger: 'blur' }],
|
ownerUserId: [{ required: true, message: '负责人不能为空', trigger: 'blur' }],
|
||||||
statusTypeId: [{ required: true, message: '商机状态组不能为空', trigger: 'blur' }]
|
statusTypeId: [{ required: true, message: '商机状态组不能为空', trigger: 'blur' }],
|
||||||
|
saleStage: [{ required: true, message: '销售阶段不能为空', trigger: 'change' }],
|
||||||
|
paymentTerm: [{ required: true, message: '账期不能为空', trigger: 'change' }],
|
||||||
|
creditMethod: [{ required: true, message: '授信方式不能为空', trigger: 'change' }],
|
||||||
|
techSupport: [{ required: true, message: '技术需求支持不能为空', trigger: 'change' }],
|
||||||
|
|
||||||
});
|
});
|
||||||
const formRef = ref();
|
const formRef = ref();
|
||||||
const userOptions = ref<UserApi.UserVO[]>([]);
|
const userOptions = ref<UserApi.UserVO[]>([]);
|
||||||
|
|
@ -323,8 +332,7 @@ watch(
|
||||||
watch(
|
watch(
|
||||||
() => formData.value.totalPrice,
|
() => formData.value.totalPrice,
|
||||||
(newProducts) => {
|
(newProducts) => {
|
||||||
console.log('%csrc/views/crm/business/BusinessForm.vue:326 111', 'color: #007acc;', 111);
|
formData.value.creditLimit = parseInt(newProducts / 365 * formData.value.creditCalcCycle) || ''
|
||||||
formData.value.creditLimit = parseInt(newProducts / 365 * formData.value.creditCalcCycle)
|
|
||||||
|
|
||||||
},
|
},
|
||||||
{ deep: true }
|
{ deep: true }
|
||||||
|
|
@ -349,9 +357,6 @@ const open = async (id?: number, customerId?: number) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!formType.value) {
|
|
||||||
formData.value.ownerUserId = useUserStore().getUser.id;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const setList = (newProducts) => {
|
const setList = (newProducts) => {
|
||||||
|
|
@ -370,8 +375,9 @@ const daysInMonth = new Date(currentDate.getFullYear(), currentMonth, 0).getDate
|
||||||
const { push } = useRouter()
|
const { push } = useRouter()
|
||||||
|
|
||||||
const submitForm = async () => {
|
const submitForm = async () => {
|
||||||
if (!productFormRef.value) return;
|
const productFormRef1 = await productFormRef.value.validate();
|
||||||
const valid = await productFormRef.value.validate();
|
if (!productFormRef1) return;
|
||||||
|
const valid = await formRef.value.validate();
|
||||||
if (!valid) return;
|
if (!valid) return;
|
||||||
|
|
||||||
formLoading.value = true;
|
formLoading.value = true;
|
||||||
|
|
@ -414,8 +420,9 @@ const resetForm = () => {
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
console.log('%csrc/views/crm/business/BusinessForm.vue:406 getStrDictOptions(DICT_TYPE.PAYMENT_TERM)', 'color: #007acc;', getStrDictOptions(DICT_TYPE.PAYMENT_TERM));
|
|
||||||
const customerId = route.query.customerId;
|
const customerId = route.query.customerId;
|
||||||
|
console.log('%csrc/views/crm/business/BusinessForm.vue:422 useUserStore().getUser.id', 'color: #007acc;', useUserStore().getUser.id);
|
||||||
|
formData.value.ownerUserId = customerId ? '' : useUserStore().getUser.id;
|
||||||
formType.value = route.query.id;
|
formType.value = route.query.id;
|
||||||
if (formType.value) open(formType.value, customerId)
|
if (formType.value) open(formType.value, customerId)
|
||||||
customerList.value = await CustomerApi.getCustomerSimpleList();
|
customerList.value = await CustomerApi.getCustomerSimpleList();
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@
|
||||||
</el-table>
|
</el-table>
|
||||||
</el-form>
|
</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" round>+ 添加产品</el-button>
|
<el-button @click="handleAdd" type="primary" round>+ 添加产品</el-button>
|
||||||
</el-row>
|
</el-row>
|
||||||
<!-- 表单弹窗:添加/修改 -->
|
<!-- 表单弹窗:添加/修改 -->
|
||||||
<ProductForm ref="productRef" @success="getList" />
|
<ProductForm ref="productRef" @success="getList" />
|
||||||
|
|
|
||||||
|
|
@ -74,13 +74,6 @@
|
||||||
<el-input v-model="formData.wechat" placeholder="请输入微信" />
|
<el-input v-model="formData.wechat" placeholder="请输入微信" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
|
||||||
<el-form-item label="QQ" prop="qq">
|
|
||||||
<el-input v-model="formData.qq" placeholder="请输入 QQ" />
|
|
||||||
</el-form-item>
|
|
||||||
</el-col>
|
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="职位" prop="post">
|
<el-form-item label="职位" prop="post">
|
||||||
<el-input v-model="formData.post" placeholder="请输入职位" />
|
<el-input v-model="formData.post" placeholder="请输入职位" />
|
||||||
|
|
@ -99,8 +92,6 @@
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
|
||||||
<el-row>
|
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="性别" prop="sex">
|
<el-form-item label="性别" prop="sex">
|
||||||
<el-select v-model="formData.sex" placeholder="请选择" class="w-1/1">
|
<el-select v-model="formData.sex" placeholder="请选择" class="w-1/1">
|
||||||
|
|
@ -113,7 +104,7 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<!-- <el-col :span="12">
|
||||||
<el-form-item label="直属上级" prop="parentId">
|
<el-form-item label="直属上级" prop="parentId">
|
||||||
<el-select v-model="formData.parentId" filterable placeholder="请选择直属上级" class="w-1/1">
|
<el-select v-model="formData.parentId" filterable placeholder="请选择直属上级" class="w-1/1">
|
||||||
<el-option
|
<el-option
|
||||||
|
|
@ -125,7 +116,7 @@
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col> -->
|
||||||
</el-row>
|
</el-row>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
<el-tab-pane label="产品">
|
<el-tab-pane label="产品">
|
||||||
<ContractProductList :contract="contract" />
|
<ContractProductList :contract="contract" />
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="回款">
|
<!-- <el-tab-pane label="回款">
|
||||||
<ReceivablePlanList
|
<ReceivablePlanList
|
||||||
:type="1"
|
:type="1"
|
||||||
:contract-id="contract.id!"
|
:contract-id="contract.id!"
|
||||||
|
|
@ -25,7 +25,7 @@
|
||||||
:contract-id="contract.id!"
|
:contract-id="contract.id!"
|
||||||
:customer-id="contract.customerId"
|
:customer-id="contract.customerId"
|
||||||
/>
|
/>
|
||||||
</el-tab-pane>
|
</el-tab-pane> -->
|
||||||
<el-tab-pane label="团队成员">
|
<el-tab-pane label="团队成员">
|
||||||
<PermissionList
|
<PermissionList
|
||||||
ref="permissionListRef"
|
ref="permissionListRef"
|
||||||
|
|
|
||||||
|
|
@ -199,6 +199,7 @@
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column fixed="right" label="操作" width="250">
|
<el-table-column fixed="right" label="操作" width="250">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
<div style="display:flex">
|
||||||
<el-button
|
<el-button
|
||||||
v-if="scope.row.auditStatus === 0"
|
v-if="scope.row.auditStatus === 0"
|
||||||
v-hasPermi="['crm:contract:update']"
|
v-hasPermi="['crm:contract:update']"
|
||||||
|
|
@ -208,7 +209,7 @@
|
||||||
>
|
>
|
||||||
编辑
|
编辑
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<!-- <el-button
|
||||||
v-if="scope.row.auditStatus === 0"
|
v-if="scope.row.auditStatus === 0"
|
||||||
v-hasPermi="['crm:contract:update']"
|
v-hasPermi="['crm:contract:update']"
|
||||||
link
|
link
|
||||||
|
|
@ -225,16 +226,7 @@
|
||||||
@click="handleChange(scope.row)"
|
@click="handleChange(scope.row)"
|
||||||
>
|
>
|
||||||
合同变更
|
合同变更
|
||||||
</el-button>
|
</el-button> -->
|
||||||
<el-button
|
|
||||||
v-else
|
|
||||||
link
|
|
||||||
v-hasPermi="['crm:customer-suggestion:query']"
|
|
||||||
type="primary"
|
|
||||||
@click="handleProcessDetail(scope.row)"
|
|
||||||
>
|
|
||||||
进度
|
|
||||||
</el-button>
|
|
||||||
<el-button
|
<el-button
|
||||||
v-hasPermi="['crm:contract:query']"
|
v-hasPermi="['crm:contract:query']"
|
||||||
link
|
link
|
||||||
|
|
@ -243,14 +235,58 @@
|
||||||
>
|
>
|
||||||
详情
|
详情
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-button
|
||||||
v-hasPermi="['crm:contract:delete']"
|
v-if="scope.row.auditStatus !== 0"
|
||||||
link
|
link
|
||||||
type="danger"
|
v-hasPermi="['crm:customer-suggestion:query']"
|
||||||
@click="handleDelete(scope.row.id)"
|
type="primary"
|
||||||
>
|
@click="handleProcessDetail(scope.row)"
|
||||||
删除
|
>
|
||||||
</el-button>
|
进度
|
||||||
|
</el-button>
|
||||||
|
|
||||||
|
<el-button
|
||||||
|
v-if="scope.row.auditStatus !== 0 && scope.row.auditStatus !== 10"
|
||||||
|
v-hasPermi="['crm:contract:delete']"
|
||||||
|
link
|
||||||
|
type="danger"
|
||||||
|
@click="handleDelete(scope.row.id)"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
<el-dropdown
|
||||||
|
v-if="scope.row.auditStatus === 0"
|
||||||
|
@command="(command) => handleCommand(command, scope.row)"
|
||||||
|
v-hasPermi="[
|
||||||
|
'crm:contract:update',
|
||||||
|
'crm:contract:delete'
|
||||||
|
]"
|
||||||
|
>
|
||||||
|
<el-button type="primary" link><Icon icon="ep:d-arrow-right" /> 更多</el-button>
|
||||||
|
<template #dropdown>
|
||||||
|
<el-dropdown-menu>
|
||||||
|
<el-dropdown-item
|
||||||
|
command="handleSubmit"
|
||||||
|
v-if="checkPermi(['crm:contract:update']) && scope.row.auditStatus === 0"
|
||||||
|
>
|
||||||
|
提交审核
|
||||||
|
</el-dropdown-item>
|
||||||
|
<el-dropdown-item
|
||||||
|
command="handleChange"
|
||||||
|
v-if="checkPermi(['crm:contract:update']) && scope.row.auditStatus === 0"
|
||||||
|
>
|
||||||
|
合同变更
|
||||||
|
</el-dropdown-item>
|
||||||
|
<el-dropdown-item
|
||||||
|
command="handleDelete"
|
||||||
|
v-if="checkPermi(['crm:contract:delete']) && scope.row.auditStatus === 0"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-dropdown-item>
|
||||||
|
</el-dropdown-menu>
|
||||||
|
</template>
|
||||||
|
</el-dropdown>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
@ -271,6 +307,7 @@ import * as ContractApi from '@/api/crm/contract'
|
||||||
import { DICT_TYPE } from '@/utils/dict'
|
import { DICT_TYPE } from '@/utils/dict'
|
||||||
import { erpPriceInputFormatter, erpPriceTableColumnFormatter } from '@/utils'
|
import { erpPriceInputFormatter, erpPriceTableColumnFormatter } from '@/utils'
|
||||||
import * as CustomerApi from '@/api/crm/customer'
|
import * as CustomerApi from '@/api/crm/customer'
|
||||||
|
import { checkPermi } from '@/utils/permission'
|
||||||
import { TabsPaneContext } from 'element-plus'
|
import { TabsPaneContext } from 'element-plus'
|
||||||
|
|
||||||
defineOptions({ name: 'CrmContract' })
|
defineOptions({ name: 'CrmContract' })
|
||||||
|
|
@ -345,6 +382,22 @@ const handleChange = (row) => {
|
||||||
router.push({ name: 'CrmContractChange', query: { id: row.id } })
|
router.push({ name: 'CrmContractChange', query: { id: row.id } })
|
||||||
|
|
||||||
}
|
}
|
||||||
|
/** 操作分发 */
|
||||||
|
const handleCommand = (command: string, row: UserApi.UserVO) => {
|
||||||
|
switch (command) {
|
||||||
|
case 'handleSubmit':
|
||||||
|
handleSubmit(row)
|
||||||
|
break
|
||||||
|
case 'handleChange':
|
||||||
|
handleChange(row)
|
||||||
|
break
|
||||||
|
case 'handleDelete':
|
||||||
|
handleDelete(row.id)
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (id: number) => {
|
const handleDelete = async (id: number) => {
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,20 @@
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="客户名称" prop="name">
|
<el-form-item label="客户名称" prop="name">
|
||||||
<el-input v-model="formData.name" placeholder="请输入客户名称" />
|
<el-autocomplete
|
||||||
|
v-model="formData.name"
|
||||||
|
:fetch-suggestions="querySearchAsync"
|
||||||
|
:trigger-on-focus="false"
|
||||||
|
clearable
|
||||||
|
class="inline-input w-50"
|
||||||
|
placeholder="请输入客户名称"
|
||||||
|
@select="handleSelect"
|
||||||
|
>
|
||||||
|
<template #default="{ item }">
|
||||||
|
<div class="value">{{ item.name }}</div>
|
||||||
|
<span class="link">{{ item.link }}</span>
|
||||||
|
</template>
|
||||||
|
</el-autocomplete>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
|
|
@ -126,7 +139,7 @@
|
||||||
<el-input v-model="formData.email" placeholder="请输入邮箱" />
|
<el-input v-model="formData.email" placeholder="请输入邮箱" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>-->
|
</el-col>-->
|
||||||
<el-col :span="12">
|
<!-- <el-col :span="12">
|
||||||
<el-form-item label="客户行业" prop="industryId">
|
<el-form-item label="客户行业" prop="industryId">
|
||||||
<el-select v-model="formData.industryId" placeholder="请选择客户行业" >
|
<el-select v-model="formData.industryId" placeholder="请选择客户行业" >
|
||||||
<el-option
|
<el-option
|
||||||
|
|
@ -137,7 +150,7 @@
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col> -->
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="客户级别" prop="level">
|
<el-form-item label="客户级别" prop="level">
|
||||||
<el-select v-model="formData.level" placeholder="请选择客户级别" >
|
<el-select v-model="formData.level" placeholder="请选择客户级别" >
|
||||||
|
|
@ -163,6 +176,55 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>-->
|
</el-row>-->
|
||||||
|
<!-- <el-col :span="12">
|
||||||
|
<el-form-item label="统一信用代码" prop="creditNo">
|
||||||
|
<el-input v-model="formData.creditNo" disabled placeholder="请输入详细地址" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="营业状态" prop="serviceStatus">
|
||||||
|
<el-input v-model="formData.serviceStatus" 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-col :span="12">
|
||||||
|
<el-form-item label="注册资本" prop="registerCapital">
|
||||||
|
<el-input v-model="formData.registerCapital" disabled placeholder="注册资本" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col> -->
|
||||||
|
<el-col :span="12">
|
||||||
|
<el-form-item label="网站" prop="">
|
||||||
|
<el-input v-model="formData.website" placeholder="请输入网站" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<!-- <el-col :span="12">
|
||||||
|
<el-form-item label="所属行业" prop="industryId">
|
||||||
|
<el-select v-model="formData.industryId" placeholder="所属行业" disabled>
|
||||||
|
<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="registeredAddress">
|
||||||
|
<el-select v-model="formData.registeredAddress" placeholder="请选择注册地址" >
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_CUSTOMER_LEVEL)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col> -->
|
||||||
<el-col :span="12">
|
<el-col :span="12">
|
||||||
<el-form-item label="地址" prop="areaId">
|
<el-form-item label="地址" prop="areaId">
|
||||||
<el-cascader
|
<el-cascader
|
||||||
|
|
@ -244,7 +306,13 @@ const formData = ref({
|
||||||
remark: undefined,
|
remark: undefined,
|
||||||
developer: undefined,
|
developer: undefined,
|
||||||
assist: [],
|
assist: [],
|
||||||
|
creditNo: undefined,
|
||||||
clueDeveloper: undefined,
|
clueDeveloper: undefined,
|
||||||
|
serviceStatus: undefined,
|
||||||
|
legalPersonName: undefined,
|
||||||
|
registerCapital: undefined,
|
||||||
|
website: undefined,
|
||||||
|
registeredAddress: undefined,
|
||||||
})
|
})
|
||||||
const formRules = reactive({
|
const formRules = reactive({
|
||||||
name: [{ required: true, message: '客户名称不能为空', trigger: 'blur' }],
|
name: [{ required: true, message: '客户名称不能为空', trigger: 'blur' }],
|
||||||
|
|
@ -252,6 +320,7 @@ const formRules = reactive({
|
||||||
developer: [{ required: true, message: '商务拓展人不能为空', trigger: 'change' }],
|
developer: [{ required: true, message: '商务拓展人不能为空', trigger: 'change' }],
|
||||||
cooperationType: [{ required: true, message: '合作类型不能为空', trigger: 'change' }],
|
cooperationType: [{ required: true, message: '合作类型不能为空', trigger: 'change' }],
|
||||||
cooperationArea: [{ required: true, message: '合作地区不能为空', trigger: 'change' }],
|
cooperationArea: [{ required: true, message: '合作地区不能为空', trigger: 'change' }],
|
||||||
|
website: [{ required: true, message: '网站不能为空', trigger: 'change' }],
|
||||||
})
|
})
|
||||||
const formRef = ref() // 表单 Ref
|
const formRef = ref() // 表单 Ref
|
||||||
|
|
||||||
|
|
@ -269,7 +338,8 @@ const open = async (type: string, id?: number) => {
|
||||||
} finally {
|
} finally {
|
||||||
formLoading.value = false
|
formLoading.value = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
restaurants.value = await CustomerApi.getCompanyList({companyName: '小米科技有限责任公司'})
|
||||||
// 获得地区列表
|
// 获得地区列表
|
||||||
areaList.value = await AreaApi.getAreaTree()
|
areaList.value = await AreaApi.getAreaTree()
|
||||||
// 获得用户列表
|
// 获得用户列表
|
||||||
|
|
@ -310,6 +380,49 @@ const submitForm = async () => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// const loadAll = async (val) => {
|
||||||
|
// restaurants.value = await CustomerApi.getCompanyList({
|
||||||
|
// companyName: val
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
|
||||||
|
interface RestaurantItem {
|
||||||
|
value: string
|
||||||
|
link: string
|
||||||
|
}
|
||||||
|
let timeout: ReturnType<typeof setTimeout>
|
||||||
|
const restaurants = ref<RestaurantItem[]>([])
|
||||||
|
const querySearchAsync = async (queryString: string, cb: (arg: any) => void) => {
|
||||||
|
let data = await CustomerApi.getCompanyList({
|
||||||
|
companyName: queryString
|
||||||
|
})
|
||||||
|
restaurants.value = data.list.map(v => {
|
||||||
|
return {
|
||||||
|
name: v.name,
|
||||||
|
value: v.name,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
console.log('%csrc/views/crm/customer/CustomerForm.vue:400 restaurants.value', 'color: #007acc;', restaurants.value);
|
||||||
|
const results = queryString
|
||||||
|
? restaurants.value.filter(createFilter(queryString))
|
||||||
|
: restaurants.value
|
||||||
|
|
||||||
|
clearTimeout(timeout)
|
||||||
|
timeout = setTimeout(() => {
|
||||||
|
cb(results)
|
||||||
|
}, 3000 * Math.random())
|
||||||
|
}
|
||||||
|
const createFilter = (queryString: string) => {
|
||||||
|
return (restaurant: RestaurantItem) => {
|
||||||
|
return (
|
||||||
|
restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const handleSelect = (item: Record<string, any>) => {
|
||||||
|
console.log(item)
|
||||||
|
}
|
||||||
/** 重置表单 */
|
/** 重置表单 */
|
||||||
const resetForm = () => {
|
const resetForm = () => {
|
||||||
formData.value = {
|
formData.value = {
|
||||||
|
|
|
||||||
|
|
@ -21,6 +21,9 @@
|
||||||
<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.assistName }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="所属行业">{{ customer.industryId }}</el-descriptions-item>
|
<el-descriptions-item label="所属行业">{{ customer.industryId }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="售后维护人">{{ customer.maintainerName }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="商务签约人">{{ customer.contractorName }}</el-descriptions-item>
|
||||||
|
<el-descriptions-item label="信用统一代码">{{ customer.creditNo }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="手机号">{{ customer.mobile }}</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.telephone }}</el-descriptions-item>
|
||||||
<el-descriptions-item label="邮箱">{{ customer.email }}</el-descriptions-item>
|
<el-descriptions-item label="邮箱">{{ customer.email }}</el-descriptions-item>
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@
|
||||||
<el-tab-pane label="商机" lazy>
|
<el-tab-pane label="商机" lazy>
|
||||||
<BusinessList :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
|
<BusinessList :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="报价" lazy>
|
<el-tab-pane label="方案报价" lazy>
|
||||||
<QuotationList :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
|
<QuotationList :biz-id="customer.id!" :biz-type="BizTypeEnum.CRM_CUSTOMER" />
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="合同" lazy>
|
<el-tab-pane label="合同" lazy>
|
||||||
|
|
|
||||||
|
|
@ -125,14 +125,41 @@
|
||||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="scope.row.source" />
|
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_SOURCE" :value="scope.row.source" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column align="center" label="手机" prop="mobile" width="120" />
|
<el-table-column align="center" label="客户状态" prop="mobile" width="120" />
|
||||||
<el-table-column align="center" label="电话" prop="telephone" width="130" />
|
<!-- <el-table-column align="center" label="电话" prop="telephone" width="130" />
|
||||||
<el-table-column align="center" label="邮箱" prop="email" width="180" />
|
<el-table-column align="center" label="邮箱" prop="email" width="180" /> -->
|
||||||
<el-table-column align="center" label="客户级别" prop="level" width="135">
|
<el-table-column align="center" label="客户级别" prop="level" width="135">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="scope.row.level" />
|
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_LEVEL" :value="scope.row.level" />
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
<el-table-column align="center" label="商务拓展人" prop="developerName" width="120">
|
||||||
|
<template #default="scope">
|
||||||
|
{{scope.row.developerName || '暂无'}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="center" label="商务签约人" prop="contractorName" width="120">
|
||||||
|
<template #default="scope">
|
||||||
|
{{scope.row.contractorName || '暂无'}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="center" label="归属部门" prop="ownerUserDeptName" width="120">
|
||||||
|
<template #default="scope">
|
||||||
|
{{scope.row.ownerUserDeptName || '暂无'}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="center" label="售后维护人" prop="maintainerName" width="120">
|
||||||
|
<template #default="scope">
|
||||||
|
{{scope.row.maintainerName || '暂无'}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="center" label="协助人" prop="assistName" width="120">
|
||||||
|
<template #default="scope">
|
||||||
|
{{scope.row.assistName || '暂无'}}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column align="center" label="信用统一代码" prop="creditNo" 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">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="scope.row.industryId" />
|
<dict-tag :type="DICT_TYPE.CRM_CUSTOMER_INDUSTRY" :value="scope.row.industryId" />
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,14 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="合作类型" prop="cooperationType">
|
<el-form-item label="合作类型" prop="cooperationType">
|
||||||
<el-input v-model="formData.cooperationType" disabled />
|
<el-select v-model="formData.cooperationType" disabled filterable placeholder="合作类型" class="w-1/1">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_COOPERATION_TYPE)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
|
|
@ -593,7 +600,6 @@ const resetForm = () => {
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
console.log('%csrc/views/crm/quotation/QuotationDetail.vue:596 props.id', 'color: #007acc;', props.id);
|
|
||||||
formType.value = props.id || route.query.id
|
formType.value = props.id || route.query.id
|
||||||
if (formType.value) open(formType.value)
|
if (formType.value) open(formType.value)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<ContentWrap style="border: none; font-weight: 700">风控信息</ContentWrap>
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="系统授信额度" prop="customerId">
|
<el-form-item label="系统授信额度" prop="customerId">
|
||||||
|
|
@ -59,52 +59,59 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="合作类型" prop="cooperationType">
|
<el-form-item label="合作类型" prop="cooperationType">
|
||||||
<el-input v-model="formData.cooperationType" disabled />
|
<el-select v-model="formData.cooperationType" filterable placeholder="请选择合作类型" class="w-1/1">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in getIntDictOptions(DICT_TYPE.CRM_COOPERATION_TYPE)"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="公司类型" prop="companyType">
|
<el-form-item label="公司类型" prop="companyType">
|
||||||
<el-input v-model="formData.companyType" disabled />
|
<el-input v-model="formData.companyType" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="上市情况" prop="listingStatus">
|
<el-form-item label="上市情况" prop="listingStatus">
|
||||||
<el-input v-model="formData.listingStatus" disabled />
|
<el-input v-model="formData.listingStatus" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="融资信息" prop="financingInfo">
|
<el-form-item label="融资信息" prop="financingInfo">
|
||||||
<el-input v-model="formData.financingInfo" disabled />
|
<el-input v-model="formData.financingInfo" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="实缴资金" prop="paidInCapital">
|
<el-form-item label="实缴资金" prop="paidInCapital">
|
||||||
<el-input v-model="formData.paidInCapital" disabled />
|
<el-input v-model="formData.paidInCapital" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="参保人数" prop="insuredCount">
|
<el-form-item label="参保人数" prop="insuredCount">
|
||||||
<el-input v-model="formData.insuredCount" disabled />
|
<el-input v-model="formData.insuredCount" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="成立日期" prop="establishmentDate">
|
<el-form-item label="成立日期" prop="establishmentDate">
|
||||||
<el-input v-model="formData.establishmentDate" disabled />
|
<el-input v-model="formData.establishmentDate" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="企业类型" prop="enterpriseType">
|
<el-form-item label="企业类型" prop="enterpriseType">
|
||||||
<el-input v-model="formData.enterpriseType" disabled />
|
<el-input v-model="formData.enterpriseType" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="营业状态" prop="businessStatus">
|
<el-form-item label="营业状态" prop="businessStatus">
|
||||||
<el-input v-model="formData.businessStatus" disabled />
|
<el-input v-model="formData.businessStatus" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="被告记录" prop="defendantRecord">
|
<el-form-item label="被告记录" prop="defendantRecord">
|
||||||
<el-radio-group v-model="formData.defendantRecord" :disabled="true">
|
<el-radio-group v-model="formData.defendantRecord">
|
||||||
<el-radio :label="true">是</el-radio>
|
<el-radio :label="true">是</el-radio>
|
||||||
<el-radio :label="false">否</el-radio>
|
<el-radio :label="false">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
|
|
@ -112,7 +119,7 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="经营异常" prop="businessAbnormal">
|
<el-form-item label="经营异常" prop="businessAbnormal">
|
||||||
<el-radio-group v-model="formData.businessAbnormal" :disabled="true">
|
<el-radio-group v-model="formData.businessAbnormal">
|
||||||
<el-radio :label="true">是</el-radio>
|
<el-radio :label="true">是</el-radio>
|
||||||
<el-radio :label="false">否</el-radio>
|
<el-radio :label="false">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
|
|
@ -120,7 +127,7 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="股权出质" prop="equityPledge">
|
<el-form-item label="股权出质" prop="equityPledge">
|
||||||
<el-radio-group v-model="formData.equityPledge" :disabled="true">
|
<el-radio-group v-model="formData.equityPledge">
|
||||||
<el-radio :label="true">是</el-radio>
|
<el-radio :label="true">是</el-radio>
|
||||||
<el-radio :label="false">否</el-radio>
|
<el-radio :label="false">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
|
|
@ -128,7 +135,7 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="失信记录" prop="dishonestRecord">
|
<el-form-item label="失信记录" prop="dishonestRecord">
|
||||||
<el-radio-group v-model="formData.dishonestRecord" :disabled="true">
|
<el-radio-group v-model="formData.dishonestRecord">
|
||||||
<el-radio :label="true">是</el-radio>
|
<el-radio :label="true">是</el-radio>
|
||||||
<el-radio :label="false">否</el-radio>
|
<el-radio :label="false">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
|
|
@ -136,7 +143,7 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="融资记录" prop="financingRecord">
|
<el-form-item label="融资记录" prop="financingRecord">
|
||||||
<el-radio-group v-model="formData.financingRecord" :disabled="true">
|
<el-radio-group v-model="formData.financingRecord">
|
||||||
<el-radio :label="true">是</el-radio>
|
<el-radio :label="true">是</el-radio>
|
||||||
<el-radio :label="false">否</el-radio>
|
<el-radio :label="false">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
|
|
@ -144,13 +151,14 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="被执行记录" prop="enforcementRecord">
|
<el-form-item label="被执行记录" prop="enforcementRecord">
|
||||||
<el-radio-group v-model="formData.enforcementRecord" :disabled="true">
|
<el-radio-group v-model="formData.enforcementRecord">
|
||||||
<el-radio :label="true">是</el-radio>
|
<el-radio :label="true">是</el-radio>
|
||||||
<el-radio :label="false">否</el-radio>
|
<el-radio :label="false">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
|
<ContentWrap style="border: none; font-weight: 700">需求信息</ContentWrap>
|
||||||
|
|
||||||
<el-row>
|
<el-row>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
|
|
@ -159,7 +167,7 @@
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in orgList"
|
v-for="dict in orgList"
|
||||||
:key="dict.id"
|
:key="dict.id"
|
||||||
:label="dict.name"
|
:label="dict.orgName"
|
||||||
:value="dict.id"
|
:value="dict.id"
|
||||||
/>
|
/>
|
||||||
</el-select>
|
</el-select>
|
||||||
|
|
@ -257,7 +265,7 @@
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<!-- <el-col :span="8">
|
||||||
<el-form-item label="签约人联系电话" prop="signPhoneNumber">
|
<el-form-item label="签约人联系电话" prop="signPhoneNumber">
|
||||||
<el-input v-model="formData.signPhoneNumber" placeholder="请输入签约人联系电话" />
|
<el-input v-model="formData.signPhoneNumber" placeholder="请输入签约人联系电话" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -271,7 +279,7 @@
|
||||||
<el-form-item label="签约人微信" prop="signWechat">
|
<el-form-item label="签约人微信" prop="signWechat">
|
||||||
<el-input v-model="formData.signWechat" placeholder="请输入签约人微信" />
|
<el-input v-model="formData.signWechat" placeholder="请输入签约人微信" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col> -->
|
||||||
|
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="账期" prop="paymentTerm">
|
<el-form-item label="账期" prop="paymentTerm">
|
||||||
|
|
@ -316,7 +324,7 @@
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="8">
|
<el-col :span="8">
|
||||||
<el-form-item label="票据模板" prop="invoiceTemplateId">
|
<el-form-item label="票据模板" prop="invoiceTemplateId">
|
||||||
<el-select v-model="formData.invoiceTemplateId" placeholder="请选择票据模板">
|
<el-select v-model="formData.invoiceTemplateId" :disabled="!formData.businessId" placeholder="请选择票据模板">
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in templateOptions"
|
v-for="dict in templateOptions"
|
||||||
:key="dict.id"
|
:key="dict.id"
|
||||||
|
|
|
||||||
|
|
@ -62,14 +62,14 @@
|
||||||
<el-table-column label="线上价格" min-width="150">
|
<el-table-column label="线上价格" min-width="150">
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.onlinePrice`" :rules="formRules.onlinePrice" class="mb-0px!">
|
<el-form-item :prop="`${$index}.onlinePrice`" :rules="formRules.onlinePrice" class="mb-0px!">
|
||||||
<el-input v-model="row.onlinePrice" placeholder="请输入线上价格" disabled />
|
<el-input v-model="row.onlinePrice" placeholder="请输入线上价格" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="线下价格" min-width="150">
|
<el-table-column label="线下价格" min-width="150">
|
||||||
<template #default="{ row, $index }">
|
<template #default="{ row, $index }">
|
||||||
<el-form-item :prop="`${$index}.offlinePrice`" :rules="formRules.offlinePrice" class="mb-0px!">
|
<el-form-item :prop="`${$index}.offlinePrice`" :rules="formRules.offlinePrice" class="mb-0px!">
|
||||||
<el-input v-model="row.offlinePrice" placeholder="请输入线下价格" disabled />
|
<el-input v-model="row.offlinePrice" placeholder="请输入线下价格" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
@ -225,7 +225,24 @@ watch(
|
||||||
},
|
},
|
||||||
{ immediate: true }
|
{ immediate: true }
|
||||||
)
|
)
|
||||||
|
// 监听合同产品变化,计算合同产品总价
|
||||||
|
watch(
|
||||||
|
() => formData.value,
|
||||||
|
(val) => {
|
||||||
|
if (!val || val.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 循环处理
|
||||||
|
val.forEach((item) => {
|
||||||
|
if (item.offlinePrice != null && item.onlinePrice != null) {
|
||||||
|
item.totalPrice = Number((Number(item.offlinePrice) + Number(item.onlinePrice)).toFixed(2));
|
||||||
|
} else {
|
||||||
|
item.totalPrice = 0;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
{ deep: true }
|
||||||
|
);
|
||||||
/** 新增按钮操作 */
|
/** 新增按钮操作 */
|
||||||
const handleAdd = () => {
|
const handleAdd = () => {
|
||||||
const row = {
|
const row = {
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,8 @@
|
||||||
/>
|
/>
|
||||||
<el-table-column label="操作" align="center" min-width="120px">
|
<el-table-column label="操作" align="center" min-width="120px">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button
|
<div style="display:flex">
|
||||||
|
<el-button
|
||||||
link
|
link
|
||||||
type="primary"
|
type="primary"
|
||||||
@click="openFormDetail(scope.row)"
|
@click="openFormDetail(scope.row)"
|
||||||
|
|
@ -154,22 +155,34 @@
|
||||||
>
|
>
|
||||||
编辑
|
编辑
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button
|
<el-dropdown
|
||||||
v-hasPermi="['crm:customer-suggestion:query']"
|
@command="(command) => handleCommand(command, scope.row)"
|
||||||
link
|
v-hasPermi="[
|
||||||
type="primary"
|
'crm:quotation:delete',
|
||||||
@click="handleProcessDetail(scope.row)"
|
'crm:customer-suggestion:query',
|
||||||
|
'system:permission:assign-user-role'
|
||||||
|
]"
|
||||||
>
|
>
|
||||||
进度
|
<el-button type="primary" link><Icon icon="ep:d-arrow-right" /> 更多</el-button>
|
||||||
</el-button>
|
<template #dropdown>
|
||||||
<el-button
|
<el-dropdown-menu>
|
||||||
link
|
<el-dropdown-item
|
||||||
type="danger"
|
command="handleProcessDetail"
|
||||||
@click="handleDelete(scope.row.id)"
|
v-if="checkPermi(['crm:customer-suggestion:query'])"
|
||||||
v-hasPermi="['crm:quotation:delete']"
|
>
|
||||||
>
|
进度
|
||||||
删除
|
</el-dropdown-item>
|
||||||
</el-button>
|
<el-dropdown-item
|
||||||
|
command="handleDelete"
|
||||||
|
v-if="checkPermi(['crm:quotation:delete'])"
|
||||||
|
>
|
||||||
|
删除
|
||||||
|
</el-dropdown-item>
|
||||||
|
|
||||||
|
</el-dropdown-menu>
|
||||||
|
</template>
|
||||||
|
</el-dropdown>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
|
@ -192,6 +205,7 @@ import { QuotationApi, QuotationVO } from '@/api/crm/quotation'
|
||||||
import * as CustomerApi from '@/api/crm/customer'
|
import * as CustomerApi from '@/api/crm/customer'
|
||||||
import * as UserApi from '@/api/system/user'
|
import * as UserApi from '@/api/system/user'
|
||||||
import * as DeptApi from '@/api/system/dept'
|
import * as DeptApi from '@/api/system/dept'
|
||||||
|
import { checkPermi } from '@/utils/permission'
|
||||||
|
|
||||||
/** CRM 方案报价 列表 */
|
/** CRM 方案报价 列表 */
|
||||||
defineOptions({ name: 'Quotation' })
|
defineOptions({ name: 'Quotation' })
|
||||||
|
|
@ -256,6 +270,19 @@ const openFormDetail = (row: Object) => {
|
||||||
|
|
||||||
router.push({ name: 'QuotationDetail', query: { id: row.id } })
|
router.push({ name: 'QuotationDetail', query: { id: row.id } })
|
||||||
}
|
}
|
||||||
|
/** 操作分发 */
|
||||||
|
const handleCommand = (command: string, row: UserApi.UserVO) => {
|
||||||
|
switch (command) {
|
||||||
|
case 'handleDelete':
|
||||||
|
handleDelete(row.id)
|
||||||
|
break
|
||||||
|
case 'handleProcessDetail':
|
||||||
|
handleProcessDetail(row)
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
const handleDelete = async (id: number) => {
|
const handleDelete = async (id: number) => {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue