This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
FROM node:18-alpine AS builder
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Set NPM Registry if needed
|
||||
# RUN npm config set registry https://registry.npmmirror.com
|
||||
|
||||
COPY package*.json ./
|
||||
RUN npm install
|
||||
|
||||
COPY . .
|
||||
|
||||
# Set the production API URL
|
||||
ARG VITE_API_BASE_URL
|
||||
ENV VITE_API_BASE_URL=${VITE_API_BASE_URL}
|
||||
|
||||
RUN npm run build
|
||||
|
||||
FROM nginx:alpine
|
||||
|
||||
COPY --from=builder /app/dist /usr/share/nginx/html
|
||||
# COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
EXPOSE 80
|
||||
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="./src/assets/logo.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>ZOCRM</title>
|
||||
<title>灵犀客户通 (LingXi CRM)</title>
|
||||
</head>
|
||||
<body style="background-color: #FAFAFA;padding: 0;margin: 0;">
|
||||
<div id="app"></div>
|
||||
|
||||
@@ -14,6 +14,7 @@ import Product from '../views/Product.vue'
|
||||
import Config from '../views/Config.vue'
|
||||
import Subscribe from '../views/Subscribe.vue'
|
||||
import Result from '../views/Result.vue'
|
||||
import About from '../views/About.vue'
|
||||
|
||||
const routes = [
|
||||
{
|
||||
@@ -74,6 +75,11 @@ const routes = [
|
||||
path: '/result',
|
||||
name: 'result',
|
||||
component: Result,
|
||||
},
|
||||
{
|
||||
path: '/about',
|
||||
name: 'about',
|
||||
component: About,
|
||||
}
|
||||
],
|
||||
},
|
||||
|
||||
@@ -0,0 +1,146 @@
|
||||
<template>
|
||||
<div class="about-container">
|
||||
<a-card :bordered="false" class="about-card">
|
||||
<div class="about-header">
|
||||
<img src="../assets/logo.svg" class="about-logo" />
|
||||
<h1 class="about-title">关于 灵犀客户通</h1>
|
||||
<p class="about-subtitle">LingXi CRM - 极简、高效、智能的客户关系管理系统</p>
|
||||
</div>
|
||||
|
||||
<a-divider />
|
||||
|
||||
<div class="about-section">
|
||||
<h2>项目简介</h2>
|
||||
<p>
|
||||
灵犀客户通(LingXi CRM)是一款专为中小企业设计的轻量级客户关系管理系统。
|
||||
系统采用前后端分离架构,后端基于高性能的 Go 语言(Gin 框架),前端使用现代化的 Vue 3 与 Vite 构建,
|
||||
旨在为企业提供最直观、最快捷的客户管理体验。
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="about-section">
|
||||
<h2>核心功能</h2>
|
||||
<a-row :gutter="[16, 16]">
|
||||
<a-col :span="8">
|
||||
<a-card hoverable size="small" title="客户管理">
|
||||
全生命周期追踪客户信息,建立完善的客户档案。
|
||||
</a-card>
|
||||
</a-col>
|
||||
<a-col :span="8">
|
||||
<a-card hoverable size="small" title="合同管理">
|
||||
在线管理商务合同,实时把控交付与回款进度。
|
||||
</a-card>
|
||||
</a-col>
|
||||
<a-col :span="8">
|
||||
<a-card hoverable size="small" title="产品管理">
|
||||
统一维护产品库,支持多规格管理与库存关联。
|
||||
</a-card>
|
||||
</a-col>
|
||||
<a-col :span="8">
|
||||
<a-card hoverable size="small" title="仪表盘分析">
|
||||
多维度数据可视化,一眼洞察销售业绩与客户增长。
|
||||
</a-card>
|
||||
</a-col>
|
||||
<a-col :span="8">
|
||||
<a-card hoverable size="small" title="角色权限">
|
||||
精细化的权限控制,确保企业数据安全可控。
|
||||
</a-card>
|
||||
</a-col>
|
||||
<a-col :span="8">
|
||||
<a-card hoverable size="small" title="响应式设计">
|
||||
完美适配多种终端,随时随地处理业务需求。
|
||||
</a-card>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</div>
|
||||
|
||||
<div class="about-section">
|
||||
<h2>技术栈</h2>
|
||||
<a-tag color="blue">Go 1.21</a-tag>
|
||||
<a-tag color="blue">Gin</a-tag>
|
||||
<a-tag color="blue">GORM</a-tag>
|
||||
<a-tag color="green">Vue 3</a-tag>
|
||||
<a-tag color="green">Vite</a-tag>
|
||||
<a-tag color="green">Ant Design Vue</a-tag>
|
||||
<a-tag color="orange">MySQL 8.0</a-tag>
|
||||
<a-tag color="red">Redis</a-tag>
|
||||
<a-tag color="cyan">Docker</a-tag>
|
||||
</div>
|
||||
|
||||
<div class="about-footer">
|
||||
<p>版本信息:v1.0.0 Stable</p>
|
||||
<p>由 <a href="http://code.xinmi.cloud/" target="_blank">新觅源码库</a> 驱动</p>
|
||||
</div>
|
||||
</a-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.about-container {
|
||||
padding: 24px;
|
||||
background: #f0f2f5;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
.about-card {
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
.about-header {
|
||||
text-align: center;
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
.about-logo {
|
||||
width: 64px;
|
||||
height: 64px;
|
||||
margin-bottom: 16px;
|
||||
filter: drop-shadow(0 4px 8px rgba(71, 111, 255, 0.3));
|
||||
}
|
||||
|
||||
.about-title {
|
||||
font-size: 28px;
|
||||
font-weight: 600;
|
||||
color: #1f1f1f;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.about-subtitle {
|
||||
color: #8c8c8c;
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.about-section {
|
||||
margin-bottom: 32px;
|
||||
}
|
||||
|
||||
.about-section h2 {
|
||||
font-size: 20px;
|
||||
font-weight: 500;
|
||||
border-left: 4px solid #476FFF;
|
||||
padding-left: 12px;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.about-section p {
|
||||
line-height: 1.8;
|
||||
color: #595959;
|
||||
}
|
||||
|
||||
.about-footer {
|
||||
text-align: center;
|
||||
margin-top: 48px;
|
||||
color: #bfbfbf;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.about-footer a {
|
||||
color: #476FFF;
|
||||
}
|
||||
</style>
|
||||
@@ -107,7 +107,6 @@ import { QuestionCircleTwoTone } from '@ant-design/icons-vue'
|
||||
import * as echarts from "echarts";
|
||||
import { reactive, ref, onBeforeMount } from 'vue';
|
||||
import { getSummary } from "../api/dashboard";
|
||||
import { getSubscribeInfo } from '../api/subscribe';
|
||||
import { useRouter } from 'vue-router'
|
||||
|
||||
const daysRange = ref(7);
|
||||
@@ -122,7 +121,6 @@ const data = reactive({
|
||||
})
|
||||
|
||||
onBeforeMount(() => {
|
||||
subscribeInfo();
|
||||
initChart();
|
||||
});
|
||||
|
||||
@@ -207,15 +205,6 @@ const initChart = () => {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 获取用户订阅信息
|
||||
const subscribeInfo = () => {
|
||||
getSubscribeInfo().then((res) => {
|
||||
if (res.data.code == 0 && res.data.data.version == 1) {
|
||||
router.push('/result')
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<div class="logo">
|
||||
<div><img src="../assets/logo.svg"
|
||||
style="width: 32px;height: 32px;filter: drop-shadow(2px 2px 6px #79bbff);" /></div>
|
||||
<div v-if="collapsed == false" class="title"><b>Z</b>O<b style="color: #1283FF;">C</b>RM</div>
|
||||
<div v-if="collapsed == false" class="title">灵犀客户通</div>
|
||||
</div>
|
||||
<a-menu style="border-right: none;width: 149px;" v-model:selectedKeys="selectedKeys" mode="inline">
|
||||
<a-menu-item :key="item.key" v-for="item in menuItem">
|
||||
@@ -98,6 +98,9 @@
|
||||
<component :is="Component" />
|
||||
</router-view>
|
||||
</transition>
|
||||
<div style="text-align: center; padding: 15px; color: #999;">
|
||||
© 2026 灵犀客户通 | <a href="http://code.xinmi.cloud/" target="_blank">新觅源码库</a>
|
||||
</div>
|
||||
</a-layout-content>
|
||||
</a-layout>
|
||||
</a-layout>
|
||||
@@ -110,7 +113,7 @@ import { useStore } from '../store/index';
|
||||
import { message } from 'ant-design-vue';
|
||||
import { getUserInfo, getVerifyCode, userDelete } from '../api/user';
|
||||
import { updateNotice, getNoticeCount, getNoticeList, deleteNotice } from '../api/notice';
|
||||
import { DashboardOutlined, SmileOutlined, MehOutlined, ShoppingOutlined, ProfileOutlined, CrownOutlined } from '@ant-design/icons-vue';
|
||||
import { DashboardOutlined, SmileOutlined, MehOutlined, ShoppingOutlined, ProfileOutlined, CrownOutlined, InfoCircleOutlined } from '@ant-design/icons-vue';
|
||||
import { QuestionCircleFilled, BellFilled, ExclamationCircleOutlined, LogoutOutlined } from '@ant-design/icons-vue';
|
||||
import moment from 'moment'
|
||||
|
||||
@@ -141,10 +144,10 @@ const menuItem = reactive([{
|
||||
icon: ProfileOutlined,
|
||||
name: "配置"
|
||||
}, {
|
||||
key: "subscribe",
|
||||
to: "/subscribe",
|
||||
icon: CrownOutlined,
|
||||
name: "订阅"
|
||||
key: "about",
|
||||
to: "/about",
|
||||
icon: InfoCircleOutlined,
|
||||
name: "关于我们"
|
||||
}])
|
||||
|
||||
// 表单校验
|
||||
|
||||
Reference in New Issue
Block a user