diff --git a/$null b/$null new file mode 100644 index 0000000..32eecff --- /dev/null +++ b/$null @@ -0,0 +1 @@ +mysql: [Warning] Using a password on the command line interface can be insecure. diff --git a/.codebuddy/commands/mcp.md b/.codebuddy/commands/mcp.md new file mode 100644 index 0000000..e69de29 diff --git a/backend/components.d.ts b/backend/components.d.ts index 2f3d0d6..50d3e79 100644 --- a/backend/components.d.ts +++ b/backend/components.d.ts @@ -21,14 +21,12 @@ declare module 'vue' { ElButton: typeof import('element-plus/es')['ElButton'] ElButtonGroup: typeof import('element-plus/es')['ElButtonGroup'] ElCard: typeof import('element-plus/es')['ElCard'] - ElCascader: typeof import('element-plus/es')['ElCascader'] ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] ElCheckboxGroup: typeof import('element-plus/es')['ElCheckboxGroup'] ElCol: typeof import('element-plus/es')['ElCol'] ElCollapse: typeof import('element-plus/es')['ElCollapse'] ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem'] ElCollapseTransition: typeof import('element-plus/es')['ElCollapseTransition'] - ElColorPicker: typeof import('element-plus/es')['ElColorPicker'] ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider'] ElContainer: typeof import('element-plus/es')['ElContainer'] ElDatePicker: typeof import('element-plus/es')['ElDatePicker'] @@ -46,6 +44,7 @@ declare module 'vue' { ElHeader: typeof import('element-plus/es')['ElHeader'] ElIcon: typeof import('element-plus/es')['ElIcon'] ElImage: typeof import('element-plus/es')['ElImage'] + ElImageViewer: typeof import('element-plus/es')['ElImageViewer'] ElInput: typeof import('element-plus/es')['ElInput'] ElInputNumber: typeof import('element-plus/es')['ElInputNumber'] ElLink: typeof import('element-plus/es')['ElLink'] diff --git a/backend/src/api/crmPipeline.js b/backend/src/api/crmPipeline.js index c482bde..533a39c 100644 --- a/backend/src/api/crmPipeline.js +++ b/backend/src/api/crmPipeline.js @@ -82,6 +82,42 @@ export function deleteProject(id) { return request({ url: `/backend/crm/project/${id}`, method: "delete" }); } +/* --------------------------- 项目文档(OA 文档库) --------------------------- */ + +/** + * 项目文档列表:对应文档库「共享文档 / 项目文档 / {项目名称}」文件夹(含子文件夹)。 + * 存量项目在首次调用时自动补建文件夹。 + */ +export function getProjectDocs(id, params) { + return request({ url: `/backend/crm/project/${id}/docs`, method: "get", params }); +} + +/** + * 上传项目文档:文件先经 POST /backend/uploadfile 上传, + * 再调用本接口写入文档库项目文件夹并同步登记 CRM 附件。 + */ +export function uploadProjectDoc(id, data) { + return request({ url: `/backend/crm/project/${id}/doc-upload`, method: "post", data }); +} + +/** 删除项目文档:同步软删文档库文档与对应 CRM 附件记录 */ +export function deleteProjectDoc(id, data) { + return request({ url: `/backend/crm/project/${id}/doc-delete`, method: "post", data }); +} + +/** + * 新建项目文档文件夹(对应文档库中项目文件夹下的子分类),用于分类存放文档。 + * data: { name, parent_id },parent_id 缺省时建在项目根文件夹下。 + */ +export function createProjectDocFolder(id, data) { + return request({ url: `/backend/crm/project/${id}/doc-folder`, method: "post", data }); +} + +/** 删除项目文档文件夹(需为空:无子文件夹、无文档;项目根文件夹不可删除) */ +export function deleteProjectDocFolder(id, data) { + return request({ url: `/backend/crm/project/${id}/doc-folder-delete`, method: "post", data }); +} + /* --------------------------------- 回访 --------------------------------- */ export function getFollowList(params) { diff --git a/backend/src/views/apps/crm/business/components/detail.vue b/backend/src/views/apps/crm/business/components/detail.vue new file mode 100644 index 0000000..915b4d4 --- /dev/null +++ b/backend/src/views/apps/crm/business/components/detail.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/backend/src/views/apps/crm/business/components/detail_attach.vue b/backend/src/views/apps/crm/business/components/detail_attach.vue new file mode 100644 index 0000000..875af71 --- /dev/null +++ b/backend/src/views/apps/crm/business/components/detail_attach.vue @@ -0,0 +1,156 @@ + + + + + diff --git a/backend/src/views/apps/crm/business/components/detail_basic.vue b/backend/src/views/apps/crm/business/components/detail_basic.vue new file mode 100644 index 0000000..010b8d9 --- /dev/null +++ b/backend/src/views/apps/crm/business/components/detail_basic.vue @@ -0,0 +1,60 @@ + + + diff --git a/backend/src/views/apps/crm/business/components/detail_contact.vue b/backend/src/views/apps/crm/business/components/detail_contact.vue new file mode 100644 index 0000000..5e067fe --- /dev/null +++ b/backend/src/views/apps/crm/business/components/detail_contact.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/backend/src/views/apps/crm/business/components/detail_follow.vue b/backend/src/views/apps/crm/business/components/detail_follow.vue new file mode 100644 index 0000000..7d7de18 --- /dev/null +++ b/backend/src/views/apps/crm/business/components/detail_follow.vue @@ -0,0 +1,315 @@ + + + + + diff --git a/backend/src/views/apps/crm/business/components/detail_log.vue b/backend/src/views/apps/crm/business/components/detail_log.vue new file mode 100644 index 0000000..211950a --- /dev/null +++ b/backend/src/views/apps/crm/business/components/detail_log.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/backend/src/views/apps/crm/business/index.vue b/backend/src/views/apps/crm/business/index.vue index 2dcd2c7..6aa953f 100644 --- a/backend/src/views/apps/crm/business/index.vue +++ b/backend/src/views/apps/crm/business/index.vue @@ -3,7 +3,7 @@