From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目

---
 src/views/crm/business/detail/index.vue |  146 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 146 insertions(+), 0 deletions(-)

diff --git a/src/views/crm/business/detail/index.vue b/src/views/crm/business/detail/index.vue
new file mode 100644
index 0000000..dbab819
--- /dev/null
+++ b/src/views/crm/business/detail/index.vue
@@ -0,0 +1,146 @@
+<template>
+  <BusinessDetailsHeader v-loading="loading" :business="business">
+    <el-button v-if="permissionListRef?.validateWrite" @click="openForm('update', business.id)">
+      缂栬緫
+    </el-button>
+    <el-button
+      v-if="permissionListRef?.validateWrite"
+      :disabled="business.endStatus"
+      type="success"
+      @click="openStatusForm()"
+    >
+      鍙樻洿鍟嗘満鐘舵��
+    </el-button>
+    <el-button v-if="permissionListRef?.validateOwnerUser" type="primary" @click="transfer">
+      杞Щ
+    </el-button>
+  </BusinessDetailsHeader>
+  <el-col>
+    <el-tabs>
+      <el-tab-pane label="璺熻繘璁板綍">
+        <FollowUpList :biz-id="businessId" :biz-type="BizTypeEnum.CRM_BUSINESS" />
+      </el-tab-pane>
+      <el-tab-pane label="璇︾粏璧勬枡">
+        <BusinessDetailsInfo :business="business" />
+      </el-tab-pane>
+      <el-tab-pane label="鑱旂郴浜�" lazy>
+        <ContactList
+          :biz-id="business.id!"
+          :biz-type="BizTypeEnum.CRM_BUSINESS"
+          :business-id="business.id"
+          :customer-id="business.customerId"
+        />
+      </el-tab-pane>
+      <el-tab-pane label="浜у搧">
+        <BusinessProductList :business="business" />
+      </el-tab-pane>
+      <el-tab-pane label="鍚堝悓" lazy>
+        <ContractList :biz-id="business.id!" :biz-type="BizTypeEnum.CRM_BUSINESS" />
+      </el-tab-pane>
+      <el-tab-pane label="鎿嶄綔鏃ュ織">
+        <OperateLogV2 :log-list="logList" />
+      </el-tab-pane>
+      <el-tab-pane label="鍥㈤槦鎴愬憳">
+        <PermissionList
+          ref="permissionListRef"
+          :biz-id="business.id!"
+          :biz-type="BizTypeEnum.CRM_BUSINESS"
+          :show-action="true"
+          @quit-team="close"
+        />
+      </el-tab-pane>
+    </el-tabs>
+  </el-col>
+
+  <!-- 琛ㄥ崟寮圭獥锛氭坊鍔�/淇敼 -->
+  <BusinessForm ref="formRef" @success="getBusiness" />
+  <BusinessUpdateStatusForm ref="statusFormRef" @success="getBusiness" />
+  <CrmTransferForm ref="transferFormRef" :biz-type="BizTypeEnum.CRM_BUSINESS" @success="close" />
+</template>
+<script lang="ts" setup>
+import { useTagsViewStore } from '@/store/modules/tagsView'
+import * as BusinessApi from '@/api/crm/business'
+import BusinessDetailsHeader from './BusinessDetailsHeader.vue'
+import BusinessDetailsInfo from './BusinessDetailsInfo.vue'
+import PermissionList from '@/views/crm/permission/components/PermissionList.vue' // 鍥㈤槦鎴愬憳鍒楄〃锛堟潈闄愶級
+import { BizTypeEnum } from '@/api/crm/permission'
+import { OperateLogVO } from '@/api/system/operatelog'
+import { getOperateLogPage } from '@/api/crm/operateLog'
+import BusinessForm from '@/views/crm/business/BusinessForm.vue'
+import CrmTransferForm from '@/views/crm/permission/components/TransferForm.vue'
+import FollowUpList from '@/views/crm/followup/index.vue'
+import ContactList from '@/views/crm/contact/components/ContactList.vue'
+import BusinessUpdateStatusForm from '@/views/crm/business/BusinessUpdateStatusForm.vue'
+import ContractList from '@/views/crm/contract/components/ContractList.vue'
+import BusinessProductList from '@/views/crm/business/detail/BusinessProductList.vue'
+
+defineOptions({ name: 'CrmBusinessDetail' })
+
+const message = useMessage()
+
+const businessId = ref(0) // 绾跨储缂栧彿
+const loading = ref(true) // 鍔犺浇涓�
+const business = ref<BusinessApi.BusinessVO>({} as BusinessApi.BusinessVO) // 鍟嗘満璇︽儏
+const permissionListRef = ref<InstanceType<typeof PermissionList>>() // 鍥㈤槦鎴愬憳鍒楄〃 Ref
+
+/** 鑾峰彇璇︽儏 */
+const getBusiness = async () => {
+  loading.value = true
+  try {
+    business.value = await BusinessApi.getBusiness(businessId.value)
+    await getOperateLog(businessId.value)
+  } finally {
+    loading.value = false
+  }
+}
+
+/** 缂栬緫 */
+const formRef = ref()
+const openForm = (type: string, id?: number) => {
+  formRef.value.open(type, id)
+}
+
+/** 鍙樻洿鍟嗘満鐘舵�� */
+const statusFormRef = ref()
+const openStatusForm = () => {
+  statusFormRef.value.open(business.value)
+}
+
+/** 鑱旂郴浜鸿浆绉� */
+const transferFormRef = ref<InstanceType<typeof CrmTransferForm>>() // 鑱旂郴浜鸿浆绉昏〃鍗� ref
+const transfer = () => {
+  transferFormRef.value?.open(business.value.id)
+}
+
+/** 鑾峰彇鎿嶄綔鏃ュ織 */
+const logList = ref<OperateLogVO[]>([]) // 鎿嶄綔鏃ュ織鍒楄〃
+const getOperateLog = async (contactId: number) => {
+  if (!contactId) {
+    return
+  }
+  const data = await getOperateLogPage({
+    bizType: BizTypeEnum.CRM_BUSINESS,
+    bizId: contactId
+  })
+  logList.value = data.list
+}
+
+/** 鍏抽棴绐楀彛 */
+const { delView } = useTagsViewStore() // 瑙嗗浘鎿嶄綔
+const { currentRoute } = useRouter() // 璺敱
+const close = () => {
+  delView(unref(currentRoute))
+}
+
+/** 鍒濆鍖� */
+const { params } = useRoute()
+onMounted(async () => {
+  if (!params.id) {
+    message.warning('鍙傛暟閿欒锛屽晢鏈轰笉鑳戒负绌猴紒')
+    close()
+    return
+  }
+  businessId.value = params.id as unknown as number
+  await getBusiness()
+})
+</script>

--
Gitblit v1.8.0