Pre Merge pull request !159 from xingyu/dev
commit
9e8cd2020e
|
@ -305,7 +305,7 @@ onMounted(async () => {
|
||||||
<template>
|
<template>
|
||||||
<Layout.Sider
|
<Layout.Sider
|
||||||
width="280px"
|
width="280px"
|
||||||
class="!bg-primary-foreground conversation-container relative flex h-full flex-col justify-between overflow-hidden p-4"
|
class="conversation-container relative flex h-full flex-col justify-between overflow-hidden p-4"
|
||||||
>
|
>
|
||||||
<Drawer />
|
<Drawer />
|
||||||
<!-- 左顶部:对话 -->
|
<!-- 左顶部:对话 -->
|
||||||
|
@ -358,7 +358,9 @@ onMounted(async () => {
|
||||||
<div
|
<div
|
||||||
class="conversation flex cursor-pointer flex-row items-center justify-between rounded-lg px-2 leading-10"
|
class="conversation flex cursor-pointer flex-row items-center justify-between rounded-lg px-2 leading-10"
|
||||||
:class="[
|
:class="[
|
||||||
conversation.id === activeConversationId ? 'bg-gray-100' : '',
|
conversation.id === activeConversationId
|
||||||
|
? 'bg-primary-200'
|
||||||
|
: '',
|
||||||
]"
|
]"
|
||||||
>
|
>
|
||||||
<div class="title-wrapper flex items-center">
|
<div class="title-wrapper flex items-center">
|
||||||
|
@ -418,7 +420,7 @@ onMounted(async () => {
|
||||||
|
|
||||||
<!-- 左底部:工具栏 -->
|
<!-- 左底部:工具栏 -->
|
||||||
<div
|
<div
|
||||||
class="absolute bottom-1 left-0 right-0 mb-4 flex items-center justify-between bg-gray-50 px-5 leading-9 text-gray-400 shadow-sm"
|
class="bg-card absolute bottom-1 left-0 right-0 mb-4 flex items-center justify-between px-5 leading-9 text-gray-400 shadow-sm"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="flex cursor-pointer items-center text-gray-400"
|
class="flex cursor-pointer items-center text-gray-400"
|
||||||
|
|
|
@ -79,7 +79,7 @@ async function handleTabsScroll() {
|
||||||
}"
|
}"
|
||||||
>
|
>
|
||||||
<!-- 更多操作 -->
|
<!-- 更多操作 -->
|
||||||
<div v-if="showMore" class="absolute right-3 top-0">
|
<div v-if="showMore" class="absolute right-2 top-0">
|
||||||
<Dropdown>
|
<Dropdown>
|
||||||
<Button type="link">
|
<Button type="link">
|
||||||
<IconifyIcon icon="lucide:ellipsis-vertical" />
|
<IconifyIcon icon="lucide:ellipsis-vertical" />
|
||||||
|
@ -89,7 +89,7 @@ async function handleTabsScroll() {
|
||||||
<Menu.Item @click="handleMoreClick(['edit', role])">
|
<Menu.Item @click="handleMoreClick(['edit', role])">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<IconifyIcon icon="lucide:edit" color="#787878" />
|
<IconifyIcon icon="lucide:edit" color="#787878" />
|
||||||
<span>编辑</span>
|
<span class="text-primary">编辑</span>
|
||||||
</div>
|
</div>
|
||||||
</Menu.Item>
|
</Menu.Item>
|
||||||
<Menu.Item @click="handleMoreClick(['delete', role])">
|
<Menu.Item @click="handleMoreClick(['delete', role])">
|
||||||
|
@ -108,12 +108,12 @@ async function handleTabsScroll() {
|
||||||
<Avatar :src="role.avatar" class="h-10 w-10 overflow-hidden" />
|
<Avatar :src="role.avatar" class="h-10 w-10 overflow-hidden" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="ml-2 w-full">
|
<div class="ml-2 w-4/5">
|
||||||
<div class="h-20">
|
<div class="h-20">
|
||||||
<div class="max-w-36 text-lg font-bold text-gray-600">
|
<div class="max-w-32 text-lg font-bold">
|
||||||
{{ role.name }}
|
{{ role.name }}
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-2 text-sm text-gray-400">
|
<div class="mt-2 text-sm">
|
||||||
{{ role.description }}
|
{{ role.description }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -174,7 +174,7 @@ onMounted(async () => {
|
||||||
<template>
|
<template>
|
||||||
<Drawer>
|
<Drawer>
|
||||||
<Layout
|
<Layout
|
||||||
class="absolute inset-0 flex h-full w-full flex-col overflow-hidden bg-white"
|
class="bg-card absolute inset-0 flex h-full w-full flex-col overflow-hidden"
|
||||||
>
|
>
|
||||||
<FormModal @success="handlerAddRoleSuccess" />
|
<FormModal @success="handlerAddRoleSuccess" />
|
||||||
|
|
||||||
|
|
|
@ -495,6 +495,7 @@ onMounted(async () => {
|
||||||
<Layout class="absolute left-0 top-0 m-4 h-full w-full flex-1">
|
<Layout class="absolute left-0 top-0 m-4 h-full w-full flex-1">
|
||||||
<!-- 左侧:对话列表 -->
|
<!-- 左侧:对话列表 -->
|
||||||
<ConversationList
|
<ConversationList
|
||||||
|
class="!bg-card"
|
||||||
:active-id="activeConversationId as any"
|
:active-id="activeConversationId as any"
|
||||||
ref="conversationListRef"
|
ref="conversationListRef"
|
||||||
@on-conversation-create="handleConversationCreateSuccess"
|
@on-conversation-create="handleConversationCreateSuccess"
|
||||||
|
@ -504,9 +505,9 @@ onMounted(async () => {
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- 右侧:详情部分 -->
|
<!-- 右侧:详情部分 -->
|
||||||
<Layout class="mx-4 bg-white">
|
<Layout class="bg-card mx-4">
|
||||||
<Layout.Header
|
<Layout.Header
|
||||||
class="flex items-center justify-between !bg-gray-50 shadow-none"
|
class="!bg-card border-border flex items-center justify-between border-b"
|
||||||
>
|
>
|
||||||
<div class="text-lg font-bold">
|
<div class="text-lg font-bold">
|
||||||
{{ activeConversation?.title ? activeConversation?.title : '对话' }}
|
{{ activeConversation?.title ? activeConversation?.title : '对话' }}
|
||||||
|
@ -565,9 +566,9 @@ onMounted(async () => {
|
||||||
</div>
|
</div>
|
||||||
</Layout.Content>
|
</Layout.Content>
|
||||||
|
|
||||||
<Layout.Footer class="m-0 flex flex-col !bg-white p-0">
|
<Layout.Footer class="!bg-card m-0 flex flex-col p-0">
|
||||||
<form
|
<form
|
||||||
class="my-5 mb-5 mt-2 flex flex-col rounded-xl border border-gray-200 px-2 py-2.5"
|
class="border-border my-5 mb-5 mt-2 flex flex-col rounded-xl border px-2 py-2.5"
|
||||||
>
|
>
|
||||||
<textarea
|
<textarea
|
||||||
class="box-border h-24 resize-none overflow-auto border-none px-0 py-1 focus:outline-none"
|
class="box-border h-24 resize-none overflow-auto border-none px-0 py-1 focus:outline-none"
|
||||||
|
|
|
@ -90,9 +90,9 @@ onMounted(async () => {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<Page auto-content-height>
|
<Page auto-content-height>
|
||||||
<div class="bg-card absolute inset-0 flex h-full w-full flex-row">
|
<div class="absolute inset-0 m-4 flex h-full w-full flex-row">
|
||||||
<div class="left-0 flex w-96 flex-col p-4">
|
<div class="bg-card left-0 mr-4 flex w-96 flex-col rounded-lg p-4">
|
||||||
<div class="segmented flex justify-center">
|
<div class="flex justify-center">
|
||||||
<Segmented
|
<Segmented
|
||||||
v-model:value="selectPlatform"
|
v-model:value="selectPlatform"
|
||||||
:options="platformOptions"
|
:options="platformOptions"
|
||||||
|
@ -125,7 +125,7 @@ onMounted(async () => {
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="bg-card ml-4 flex-1">
|
<div class="bg-card flex-1">
|
||||||
<ImageList ref="imageListRef" @on-regeneration="handleRegeneration" />
|
<ImageList ref="imageListRef" @on-regeneration="handleRegeneration" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -123,8 +123,10 @@ function submit() {
|
||||||
<template>
|
<template>
|
||||||
<DefineTab v-slot="{ active, text, itemClick }">
|
<DefineTab v-slot="{ active, text, itemClick }">
|
||||||
<span
|
<span
|
||||||
:class="active ? 'text-black shadow-md' : 'hover:bg-gray-200'"
|
:class="
|
||||||
class="relative z-10 inline-block w-1/2 cursor-pointer rounded-full text-center leading-7 text-gray-400 hover:text-black"
|
active ? 'bg-primary-600 text-white shadow-md' : 'hover:bg-primary-200'
|
||||||
|
"
|
||||||
|
class="relative z-10 inline-block w-1/2 cursor-pointer rounded-full text-center leading-7 hover:text-black"
|
||||||
@click="itemClick"
|
@click="itemClick"
|
||||||
>
|
>
|
||||||
{{ text }}
|
{{ text }}
|
||||||
|
@ -136,7 +138,7 @@ function submit() {
|
||||||
<span>{{ label }}</span>
|
<span>{{ label }}</span>
|
||||||
<span
|
<span
|
||||||
v-if="hint"
|
v-if="hint"
|
||||||
class="flex cursor-pointer select-none items-center text-xs text-purple-500"
|
class="text-primary-500 flex cursor-pointer select-none items-center text-xs"
|
||||||
@click="hintClick"
|
@click="hintClick"
|
||||||
>
|
>
|
||||||
<IconifyIcon icon="lucide:circle-help" />
|
<IconifyIcon icon="lucide:circle-help" />
|
||||||
|
@ -145,14 +147,14 @@ function submit() {
|
||||||
</h3>
|
</h3>
|
||||||
</DefineLabel>
|
</DefineLabel>
|
||||||
<div class="flex flex-col" v-bind="$attrs">
|
<div class="flex flex-col" v-bind="$attrs">
|
||||||
<div class="flex w-full justify-center bg-gray-50 pt-2">
|
<div class="bg-card flex w-full justify-center pt-2">
|
||||||
<div class="z-10 w-72 rounded-full bg-gray-200 p-1">
|
<div class="bg-card z-10 w-72 rounded-full p-1">
|
||||||
<div
|
<div
|
||||||
:class="
|
:class="
|
||||||
selectedTab === AiWriteTypeEnum.REPLY &&
|
selectedTab === AiWriteTypeEnum.REPLY &&
|
||||||
'after:translate-x-[100%] after:transform'
|
'after:translate-x-[100%] after:transform'
|
||||||
"
|
"
|
||||||
class="relative flex items-center after:absolute after:left-0 after:top-0 after:block after:h-7 after:w-1/2 after:rounded-full after:bg-white after:transition-transform after:content-['']"
|
class="after:bg-card relative flex items-center after:absolute after:left-0 after:top-0 after:block after:h-7 after:w-1/2 after:rounded-full after:transition-transform after:content-['']"
|
||||||
>
|
>
|
||||||
<ReuseTab
|
<ReuseTab
|
||||||
v-for="tab in tabs"
|
v-for="tab in tabs"
|
||||||
|
@ -166,7 +168,7 @@ function submit() {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
class="box-border h-full w-96 flex-grow overflow-y-auto bg-gray-50 px-7 pb-2 lg:block"
|
class="bg-card box-border h-full w-96 flex-grow overflow-y-auto px-7 pb-2 lg:block"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
<template v-if="selectedTab === 1">
|
<template v-if="selectedTab === 1">
|
||||||
|
@ -233,11 +235,7 @@ function submit() {
|
||||||
<Button :disabled="isWriting" class="mr-2" @click="reset">
|
<Button :disabled="isWriting" class="mr-2" @click="reset">
|
||||||
重置
|
重置
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button type="primary" :loading="isWriting" @click="submit">
|
||||||
:loading="isWriting"
|
|
||||||
class="bg-purple-500 text-white"
|
|
||||||
@click="submit"
|
|
||||||
>
|
|
||||||
生成
|
生成
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -54,22 +54,18 @@ watch(copied, (val) => {
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<Card class="my-card flex h-full flex-col">
|
<Card class="flex h-full flex-col">
|
||||||
<template #title>
|
<template #title>
|
||||||
<h3 class="m-0 flex shrink-0 items-center justify-between px-7">
|
<h3 class="m-0 flex shrink-0 items-center justify-between px-7">
|
||||||
<span>预览</span>
|
<span>预览</span>
|
||||||
<!-- 展示在右上角 -->
|
<!-- 展示在右上角 -->
|
||||||
<Button
|
<Button
|
||||||
class="flex bg-purple-500 text-white"
|
type="primary"
|
||||||
v-show="showCopy"
|
v-show="showCopy"
|
||||||
@click="copyContent"
|
@click="copyContent"
|
||||||
size="small"
|
size="small"
|
||||||
>
|
>
|
||||||
<template #icon>
|
<IconifyIcon icon="lucide:copy" />
|
||||||
<div class="flex items-center justify-center">
|
|
||||||
<IconifyIcon icon="lucide:copy" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
复制
|
复制
|
||||||
</Button>
|
</Button>
|
||||||
</h3>
|
</h3>
|
||||||
|
@ -79,7 +75,7 @@ watch(copied, (val) => {
|
||||||
class="hide-scroll-bar box-border h-full overflow-y-auto"
|
class="hide-scroll-bar box-border h-full overflow-y-auto"
|
||||||
>
|
>
|
||||||
<div
|
<div
|
||||||
class="relative box-border min-h-full w-full flex-grow bg-white p-3 sm:p-7"
|
class="bg-card relative box-border min-h-full w-full flex-grow p-3 sm:p-7"
|
||||||
>
|
>
|
||||||
<!-- 终止生成内容的按钮 -->
|
<!-- 终止生成内容的按钮 -->
|
||||||
<Button
|
<Button
|
||||||
|
|
|
@ -21,8 +21,10 @@ const emits = defineEmits<{
|
||||||
<span
|
<span
|
||||||
v-for="tag in props.tags"
|
v-for="tag in props.tags"
|
||||||
:key="tag.value"
|
:key="tag.value"
|
||||||
class="mb-2 cursor-pointer rounded border-2 border-solid border-gray-200 bg-gray-200 px-1 text-xs leading-6"
|
class="bg-card border-card-100 mb-2 cursor-pointer rounded border-2 border-solid px-1 text-xs leading-6"
|
||||||
:class="modelValue === tag.value && '!border-purple-500 !text-purple-500'"
|
:class="
|
||||||
|
modelValue === tag.value && '!border-primary-500 !text-primary-500'
|
||||||
|
"
|
||||||
@click="emits('update:modelValue', tag.value)"
|
@click="emits('update:modelValue', tag.value)"
|
||||||
>
|
>
|
||||||
{{ tag.label }}
|
{{ tag.label }}
|
||||||
|
|
|
@ -66,10 +66,10 @@ function reset() {
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<Page auto-content-height>
|
<Page auto-content-height>
|
||||||
<div class="absolute bottom-0 left-0 right-0 top-0 flex">
|
<div class="absolute bottom-0 left-0 right-0 top-0 m-4 flex">
|
||||||
<Left
|
<Left
|
||||||
:is-writing="isWriting"
|
:is-writing="isWriting"
|
||||||
class="h-full"
|
class="mr-4 h-full rounded-lg"
|
||||||
@submit="submit"
|
@submit="submit"
|
||||||
@reset="reset"
|
@reset="reset"
|
||||||
@example="handleExampleClick"
|
@example="handleExampleClick"
|
||||||
|
|
|
@ -8,13 +8,20 @@ import { useRoute, useRouter } from 'vue-router';
|
||||||
import { confirm, Page, useVbenModal } from '@vben/common-ui';
|
import { confirm, Page, useVbenModal } from '@vben/common-ui';
|
||||||
import { useTabs } from '@vben/hooks';
|
import { useTabs } from '@vben/hooks';
|
||||||
|
|
||||||
import { Button, Card, message, Tabs } from 'ant-design-vue';
|
import { Card, message, Tabs } from 'ant-design-vue';
|
||||||
|
|
||||||
import { getCustomer, updateCustomerDealStatus } from '#/api/crm/customer';
|
import {
|
||||||
|
getCustomer,
|
||||||
|
lockCustomer,
|
||||||
|
putCustomerPool,
|
||||||
|
receiveCustomer,
|
||||||
|
updateCustomerDealStatus,
|
||||||
|
} from '#/api/crm/customer';
|
||||||
import { getOperateLogPage } from '#/api/crm/operateLog';
|
import { getOperateLogPage } from '#/api/crm/operateLog';
|
||||||
import { BizTypeEnum } from '#/api/crm/permission';
|
import { BizTypeEnum } from '#/api/crm/permission';
|
||||||
import { useDescription } from '#/components/description';
|
import { useDescription } from '#/components/description';
|
||||||
import { AsyncOperateLog } from '#/components/operate-log';
|
import { AsyncOperateLog } from '#/components/operate-log';
|
||||||
|
import { ACTION_ICON, TableAction } from '#/components/table-action';
|
||||||
import { BusinessDetailsList } from '#/views/crm/business';
|
import { BusinessDetailsList } from '#/views/crm/business';
|
||||||
import { ContactDetailsList } from '#/views/crm/contact';
|
import { ContactDetailsList } from '#/views/crm/contact';
|
||||||
import { ContractDetailsList } from '#/views/crm/contract';
|
import { ContractDetailsList } from '#/views/crm/contract';
|
||||||
|
@ -99,18 +106,45 @@ function handleTransfer() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 锁定客户 */
|
/** 锁定客户 */
|
||||||
function handleLock() {
|
function handleLock(lockStatus: boolean): Promise<boolean | undefined> {
|
||||||
transferModalApi.setData({ id: customerId.value }).open();
|
return new Promise((resolve, reject) => {
|
||||||
}
|
confirm({
|
||||||
|
content: `确定锁定客户【${customer.value.name}】吗?`,
|
||||||
/** 解锁客户 */
|
})
|
||||||
function handleUnlock() {
|
.then(async () => {
|
||||||
transferModalApi.setData({ id: customerId.value }).open();
|
const res = await lockCustomer(customerId.value, lockStatus);
|
||||||
|
if (res) {
|
||||||
|
message.success(lockStatus ? '锁定客户成功' : '解锁客户成功');
|
||||||
|
resolve(true);
|
||||||
|
} else {
|
||||||
|
reject(new Error(lockStatus ? '锁定客户失败' : '解锁客户失败'));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
reject(new Error('取消操作'));
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 领取客户 */
|
/** 领取客户 */
|
||||||
function handleReceive() {
|
function handleReceive(): Promise<boolean | undefined> {
|
||||||
transferModalApi.setData({ id: customerId.value }).open();
|
return new Promise((resolve, reject) => {
|
||||||
|
confirm({
|
||||||
|
content: `确定领取客户【${customer.value.name}】吗?`,
|
||||||
|
})
|
||||||
|
.then(async () => {
|
||||||
|
const res = await receiveCustomer([customerId.value]);
|
||||||
|
if (res) {
|
||||||
|
message.success('领取客户成功');
|
||||||
|
resolve(true);
|
||||||
|
} else {
|
||||||
|
reject(new Error('领取客户失败'));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
reject(new Error('取消操作'));
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 分配客户 */
|
/** 分配客户 */
|
||||||
|
@ -119,8 +153,24 @@ function handleDistributeForm() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 客户放入公海 */
|
/** 客户放入公海 */
|
||||||
function handlePutPool() {
|
function handlePutPool(): Promise<boolean | undefined> {
|
||||||
transferModalApi.setData({ id: customerId.value }).open();
|
return new Promise((resolve, reject) => {
|
||||||
|
confirm({
|
||||||
|
content: `确定将客户【${customer.value.name}】放入公海吗?`,
|
||||||
|
})
|
||||||
|
.then(async () => {
|
||||||
|
const res = await putCustomerPool(customerId.value);
|
||||||
|
if (res) {
|
||||||
|
message.success('放入公海成功');
|
||||||
|
resolve(true);
|
||||||
|
} else {
|
||||||
|
reject(new Error('放入公海失败'));
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(() => {
|
||||||
|
reject(new Error('取消操作'));
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 更新成交状态操作 */
|
/** 更新成交状态操作 */
|
||||||
|
@ -161,61 +211,62 @@ onMounted(() => {
|
||||||
<TransferModal @success="loadCustomerDetail" />
|
<TransferModal @success="loadCustomerDetail" />
|
||||||
<DistributeModal @success="loadCustomerDetail" />
|
<DistributeModal @success="loadCustomerDetail" />
|
||||||
<template #extra>
|
<template #extra>
|
||||||
<div class="flex items-center gap-2">
|
<TableAction
|
||||||
<Button
|
:actions="[
|
||||||
v-if="permissionListRef?.validateWrite"
|
{
|
||||||
type="primary"
|
label: $t('ui.actionTitle.edit'),
|
||||||
@click="handleEdit"
|
type: 'primary',
|
||||||
v-access:code="['crm:customer:update']"
|
icon: ACTION_ICON.EDIT,
|
||||||
>
|
auth: ['crm:customer:update'],
|
||||||
{{ $t('ui.actionTitle.edit') }}
|
ifShow: permissionListRef?.validateWrite,
|
||||||
</Button>
|
onClick: handleEdit,
|
||||||
<Button
|
},
|
||||||
v-if="permissionListRef?.validateOwnerUser"
|
{
|
||||||
type="primary"
|
label: '转移',
|
||||||
@click="handleTransfer"
|
type: 'primary',
|
||||||
>
|
ifShow: permissionListRef?.validateOwnerUser,
|
||||||
转移
|
onClick: handleTransfer,
|
||||||
</Button>
|
},
|
||||||
<Button
|
{
|
||||||
v-if="permissionListRef?.validateWrite"
|
label: '更改成交状态',
|
||||||
@click="handleUpdateDealStatus"
|
type: 'default',
|
||||||
>
|
ifShow: permissionListRef?.validateWrite,
|
||||||
更改成交状态
|
onClick: handleUpdateDealStatus,
|
||||||
</Button>
|
},
|
||||||
<Button
|
{
|
||||||
v-if="customer.lockStatus && permissionListRef?.validateOwnerUser"
|
label: '锁定',
|
||||||
@click="handleUnlock"
|
type: 'default',
|
||||||
>
|
ifShow:
|
||||||
解锁
|
!customer.lockStatus && permissionListRef?.validateOwnerUser,
|
||||||
</Button>
|
onClick: handleLock.bind(null, true),
|
||||||
<Button
|
},
|
||||||
v-if="!customer.lockStatus && permissionListRef?.validateOwnerUser"
|
{
|
||||||
@click="handleLock"
|
label: '解锁',
|
||||||
>
|
type: 'default',
|
||||||
锁定
|
ifShow: customer.lockStatus && permissionListRef?.validateOwnerUser,
|
||||||
</Button>
|
onClick: handleLock.bind(null, false),
|
||||||
<Button
|
},
|
||||||
v-if="!customer.ownerUserId"
|
{
|
||||||
type="primary"
|
label: '领取',
|
||||||
@click="handleReceive"
|
type: 'primary',
|
||||||
>
|
ifShow: !customer.ownerUserId,
|
||||||
领取
|
onClick: handleReceive,
|
||||||
</Button>
|
},
|
||||||
<Button
|
{
|
||||||
v-if="!customer.ownerUserId"
|
label: '分配',
|
||||||
type="primary"
|
type: 'default',
|
||||||
@click="handleDistributeForm"
|
ifShow: !customer.ownerUserId,
|
||||||
>
|
onClick: handleDistributeForm,
|
||||||
分配
|
},
|
||||||
</Button>
|
{
|
||||||
<Button
|
label: '放入公海',
|
||||||
v-if="customer.ownerUserId && permissionListRef?.validateOwnerUser"
|
type: 'default',
|
||||||
@click="handlePutPool"
|
ifShow:
|
||||||
>
|
!!customer.ownerUserId && permissionListRef?.validateOwnerUser,
|
||||||
放入公海
|
onClick: handlePutPool,
|
||||||
</Button>
|
},
|
||||||
</div>
|
]"
|
||||||
|
/>
|
||||||
</template>
|
</template>
|
||||||
<Card class="min-h-[10%]">
|
<Card class="min-h-[10%]">
|
||||||
<Description :data="customer" />
|
<Description :data="customer" />
|
||||||
|
|
|
@ -78,7 +78,7 @@ export function useFormSchema(): VbenFormSchema[] {
|
||||||
options: contracts.map((item) => ({
|
options: contracts.map((item) => ({
|
||||||
label: item.name,
|
label: item.name,
|
||||||
value: item.id,
|
value: item.id,
|
||||||
disabled: item.auditStatus === 20,
|
disabled: item.auditStatus !== 20,
|
||||||
})),
|
})),
|
||||||
placeholder: '请选择合同',
|
placeholder: '请选择合同',
|
||||||
} as any;
|
} as any;
|
||||||
|
|
Loading…
Reference in New Issue