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/clue/detail/index.vue | 130 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 130 insertions(+), 0 deletions(-)
diff --git a/src/views/crm/clue/detail/index.vue b/src/views/crm/clue/detail/index.vue
new file mode 100644
index 0000000..4c211e6
--- /dev/null
+++ b/src/views/crm/clue/detail/index.vue
@@ -0,0 +1,130 @@
+<template>
+ <ClueDetailsHeader :clue="clue" :loading="loading">
+ <el-button
+ v-if="permissionListRef?.validateWrite"
+ v-hasPermi="['crm:clue:update']"
+ type="primary"
+ @click="openForm"
+ >
+ 缂栬緫
+ </el-button>
+ <el-button v-if="permissionListRef?.validateOwnerUser" type="primary" @click="transfer">
+ 杞Щ
+ </el-button>
+ <el-button
+ v-if="permissionListRef?.validateOwnerUser && !clue.transformStatus"
+ type="success"
+ @click="handleTransform"
+ >
+ 杞寲涓哄鎴�
+ </el-button>
+ <el-button v-else disabled type="success">宸茶浆鍖栧鎴�</el-button>
+ </ClueDetailsHeader>
+ <el-col>
+ <el-tabs>
+ <el-tab-pane label="璺熻繘璁板綍">
+ <FollowUpList :biz-id="clueId" :biz-type="BizTypeEnum.CRM_CLUE" />
+ </el-tab-pane>
+ <el-tab-pane label="鍩烘湰淇℃伅">
+ <ClueDetailsInfo :clue="clue" />
+ </el-tab-pane>
+ <el-tab-pane label="鍥㈤槦鎴愬憳">
+ <PermissionList
+ ref="permissionListRef"
+ :biz-id="clue.id!"
+ :biz-type="BizTypeEnum.CRM_CLUE"
+ :show-action="true"
+ @quit-team="close"
+ />
+ </el-tab-pane>
+ <el-tab-pane label="鎿嶄綔鏃ュ織">
+ <OperateLogV2 :log-list="logList" />
+ </el-tab-pane>
+ </el-tabs>
+ </el-col>
+
+ <!-- 琛ㄥ崟寮圭獥锛氭坊鍔�/淇敼 -->
+ <ClueForm ref="formRef" @success="getClue" />
+ <CrmTransferForm ref="transferFormRef" :biz-type="BizTypeEnum.CRM_CLUE" @success="close" />
+</template>
+<script lang="ts" setup>
+import { useTagsViewStore } from '@/store/modules/tagsView'
+import * as ClueApi from '@/api/crm/clue'
+import ClueForm from '@/views/crm/clue/ClueForm.vue'
+import ClueDetailsHeader from './ClueDetailsHeader.vue' // 绾跨储鏄庣粏 - 澶撮儴
+import ClueDetailsInfo from './ClueDetailsInfo.vue' // 绾跨储鏄庣粏 - 璇︾粏淇℃伅
+import PermissionList from '@/views/crm/permission/components/PermissionList.vue' // 鍥㈤槦鎴愬憳鍒楄〃锛堟潈闄愶級
+import CrmTransferForm from '@/views/crm/permission/components/TransferForm.vue'
+import FollowUpList from '@/views/crm/followup/index.vue'
+import { BizTypeEnum } from '@/api/crm/permission'
+import type { OperateLogVO } from '@/api/system/operatelog'
+import { getOperateLogPage } from '@/api/crm/operateLog'
+
+defineOptions({ name: 'CrmClueDetail' })
+
+const clueId = ref(0) // 绾跨储缂栧彿
+const loading = ref(true) // 鍔犺浇涓�
+const message = useMessage() // 娑堟伅寮圭獥
+const { delView } = useTagsViewStore() // 瑙嗗浘鎿嶄綔
+const { currentRoute } = useRouter() // 璺敱
+
+const permissionListRef = ref<InstanceType<typeof PermissionList>>() // 鍥㈤槦鎴愬憳鍒楄〃 Ref
+
+/** 鑾峰彇璇︽儏 */
+const clue = ref<ClueApi.ClueVO>({} as ClueApi.ClueVO) // 绾跨储璇︽儏
+const getClue = async () => {
+ loading.value = true
+ try {
+ clue.value = await ClueApi.getClue(clueId.value)
+ await getOperateLog()
+ } finally {
+ loading.value = false
+ }
+}
+
+/** 缂栬緫绾跨储 */
+const formRef = ref<InstanceType<typeof ClueForm>>() // 绾跨储琛ㄥ崟 Ref
+const openForm = () => {
+ formRef.value?.open('update', clueId.value)
+}
+
+/** 绾跨储杞Щ */
+const transferFormRef = ref<InstanceType<typeof CrmTransferForm>>() // 绾跨储杞Щ琛ㄥ崟 ref
+const transfer = () => {
+ transferFormRef.value?.open(clueId.value)
+}
+
+/** 杞寲涓哄鎴� */
+const handleTransform = async () => {
+ await message.confirm(`纭畾灏嗐��${clue.value.name}銆戣浆鍖栦负瀹㈡埛鍚楋紵`)
+ await ClueApi.transformClue(clueId.value)
+ message.success(`杞寲瀹㈡埛銆�${clue.value.name}銆戞垚鍔焋)
+ await getClue()
+}
+
+/** 鑾峰彇鎿嶄綔鏃ュ織 */
+const logList = ref<OperateLogVO[]>([]) // 鎿嶄綔鏃ュ織鍒楄〃
+const getOperateLog = async () => {
+ const data = await getOperateLogPage({
+ bizType: BizTypeEnum.CRM_CLUE,
+ bizId: clueId.value
+ })
+ logList.value = data.list
+}
+
+const close = () => {
+ delView(unref(currentRoute))
+}
+
+/** 鍒濆鍖� */
+const { params } = useRoute()
+onMounted(() => {
+ if (!params.id) {
+ message.warning('鍙傛暟閿欒锛岀嚎绱笉鑳戒负绌猴紒')
+ close()
+ return
+ }
+ clueId.value = params.id as unknown as number
+ getClue()
+})
+</script>
--
Gitblit v1.8.0