feat: 完成管理后台冗余菜单、路由及无用页面的清理
parent
2cb3b5b492
commit
1bd98e2f95
10
.env
10
.env
|
|
@ -1,5 +1,5 @@
|
||||||
# 标题
|
# 标题
|
||||||
VITE_APP_TITLE=芋道管理系统
|
VITE_APP_TITLE=空山管理系统
|
||||||
|
|
||||||
# 项目本地运行端口号
|
# 项目本地运行端口号
|
||||||
VITE_PORT=80
|
VITE_PORT=80
|
||||||
|
|
@ -13,15 +13,17 @@ VITE_APP_TENANT_ENABLE=true
|
||||||
# 验证码的开关
|
# 验证码的开关
|
||||||
VITE_APP_CAPTCHA_ENABLE=true
|
VITE_APP_CAPTCHA_ENABLE=true
|
||||||
|
|
||||||
# 文档地址的开关
|
# 文档地址提示条开关(空山版统一帮助入口)
|
||||||
VITE_APP_DOCALERT_ENABLE=true
|
VITE_APP_DOCALERT_ENABLE=true
|
||||||
|
# 统一帮助入口(帮助中心 / 内部Wiki)
|
||||||
|
VITE_APP_HELP_CENTER_URL=http://m.swelife.cn/#/pages/index
|
||||||
|
|
||||||
# 百度统计
|
# 百度统计
|
||||||
VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc
|
VITE_APP_BAIDU_CODE = a1ff8825baa73c3a78eb96aa40325abc
|
||||||
|
|
||||||
# 默认账户密码
|
# 默认账户密码
|
||||||
VITE_APP_DEFAULT_LOGIN_TENANT = 芋道源码
|
VITE_APP_DEFAULT_LOGIN_TENANT = 空山平台
|
||||||
VITE_APP_DEFAULT_LOGIN_USERNAME = admin
|
VITE_APP_DEFAULT_LOGIN_USERNAME = admin
|
||||||
VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123
|
VITE_APP_DEFAULT_LOGIN_PASSWORD = admin123
|
||||||
|
|
||||||
# API 加解密
|
# API 加解密
|
||||||
|
|
|
||||||
|
|
@ -30,5 +30,10 @@ VITE_MALL_H5_DOMAIN='http://localhost:3000'
|
||||||
# 验证码的开关
|
# 验证码的开关
|
||||||
VITE_APP_CAPTCHA_ENABLE=false
|
VITE_APP_CAPTCHA_ENABLE=false
|
||||||
|
|
||||||
|
# 文档地址提示条开关(本地联调启用统一帮助入口)
|
||||||
|
VITE_APP_DOCALERT_ENABLE=true
|
||||||
|
# 统一帮助入口(帮助中心 / 内部Wiki)
|
||||||
|
VITE_APP_HELP_CENTER_URL=http://m.swelife.cn/#/pages/index
|
||||||
|
|
||||||
# GoView域名
|
# GoView域名
|
||||||
VITE_GOVIEW_URL='http://127.0.0.1:3000'
|
VITE_GOVIEW_URL='http://127.0.0.1:3000'
|
||||||
|
|
@ -68,8 +68,8 @@ module.exports = defineConfig({
|
||||||
],
|
],
|
||||||
'vue/multi-word-component-names': 'off',
|
'vue/multi-word-component-names': 'off',
|
||||||
'vue/no-v-html': 'off',
|
'vue/no-v-html': 'off',
|
||||||
'prettier/prettier': 'off', // 芋艿:默认关闭 prettier 的 ESLint 校验,因为我们使用的是 IDE 的 Prettier 插件
|
'prettier/prettier': 'off', // 项目组:默认关闭 prettier 的 ESLint 校验,因为我们使用的是 IDE 的 Prettier 插件
|
||||||
'@unocss/order': 'off', // 芋艿:禁用 unocss 【css】顺序的提示,因为暂时不需要这么严格,警告也有点繁琐
|
'@unocss/order': 'off', // 项目组:禁用 unocss 【css】顺序的提示,因为暂时不需要这么严格,警告也有点繁琐
|
||||||
'@unocss/order-attributify': 'off' // 芋艿:禁用 unocss 【属性】顺序的提示,因为暂时不需要这么严格,警告也有点繁琐
|
'@unocss/order-attributify': 'off' // 项目组:禁用 unocss 【属性】顺序的提示,因为暂时不需要这么严格,警告也有点繁琐
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
||||||
24
README.md
24
README.md
|
|
@ -10,15 +10,15 @@
|
||||||
## 🐶 新手必读
|
## 🐶 新手必读
|
||||||
|
|
||||||
* nodejs > 16.18.0 && pnpm > 8.6.0 (强制使用pnpm)
|
* nodejs > 16.18.0 && pnpm > 8.6.0 (强制使用pnpm)
|
||||||
* 演示地址【Vue3 + element-plus】:<http://dashboard-vue3.yudao.iocoder.cn>
|
* 演示地址【Vue3 + element-plus】:待补充
|
||||||
* 演示地址【Vue3 + vben5.0(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn>
|
* 演示地址【Vue3 + vben5.0(ant-design-vue)】:待补充
|
||||||
* 演示地址【Vue2 + element-ui】:<http://dashboard.yudao.iocoder.cn>
|
* 演示地址【Vue2 + element-ui】:待补充
|
||||||
* 启动文档:<https://doc.iocoder.cn/quick-start/>
|
* 启动文档:待补充
|
||||||
* 视频教程:<https://doc.iocoder.cn/video/>
|
* 视频教程:待补充
|
||||||
|
|
||||||
## 🐯 平台简介
|
## 🐯 平台简介
|
||||||
|
|
||||||
**芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。
|
**空山**,一个 AI + 电商平台项目,聚焦可持续迭代的业务开发与工程落地。
|
||||||
|
|
||||||
* 采用 [vue-element-plus-admin](https://gitee.com/kailong110120130/vue-element-plus-admin) 实现
|
* 采用 [vue-element-plus-admin](https://gitee.com/kailong110120130/vue-element-plus-admin) 实现
|
||||||
* 改换 saas,自动引入等功能
|
* 改换 saas,自动引入等功能
|
||||||
|
|
@ -69,11 +69,11 @@
|
||||||
|
|
||||||
支持 Spring Boot、Spring Cloud 两种架构:
|
支持 Spring Boot、Spring Cloud 两种架构:
|
||||||
|
|
||||||
① Spring Boot 单体架构:<https://doc.iocoder.cn>
|
① Spring Boot 单体架构:待补充
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
② Spring Cloud 微服务架构:<https://cloud.iocoder.cn>
|
② Spring Cloud 微服务架构:待补充
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
@ -216,7 +216,7 @@
|
||||||
|
|
||||||
### 商城系统
|
### 商城系统
|
||||||
|
|
||||||
演示地址:<https://doc.iocoder.cn/mall-preview/>
|
演示地址:待补充
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
@ -224,19 +224,19 @@
|
||||||
|
|
||||||
### ERP 系统
|
### ERP 系统
|
||||||
|
|
||||||
演示地址:<https://doc.iocoder.cn/erp-preview/>
|
演示地址:待补充
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### CRM 系统
|
### CRM 系统
|
||||||
|
|
||||||
演示地址:<https://doc.iocoder.cn/crm-preview/>
|
演示地址:待补充
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
### AI 大模型
|
### AI 大模型
|
||||||
|
|
||||||
演示地址:<https://doc.iocoder.cn/ai-preview/>
|
演示地址:待补充
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
|
|
||||||
12
index.html
12
index.html
|
|
@ -2,16 +2,16 @@
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" href="/favicon.ico" />
|
<link rel="icon" href="/brand-logo.png" />
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<meta
|
<meta
|
||||||
name="keywords"
|
name="keywords"
|
||||||
content="芋道管理系统 基于 vue3 + CompositionAPI + typescript + vite3 + element plus 的后台开源免费管理系统!"
|
content="空山管理系统 AI+电商平台 管理后台 vue3 typescript vite element-plus"
|
||||||
/>
|
/>
|
||||||
<meta
|
<meta
|
||||||
name="description"
|
name="description"
|
||||||
content="芋道管理系统 基于 vue3 + CompositionAPI + typescript + vite3 + element plus 的后台开源免费管理系统!"
|
content="空山 AI+电商平台管理后台,基于 Vue3 + TypeScript + Vite + Element Plus。"
|
||||||
/>
|
/>
|
||||||
<title>%VITE_APP_TITLE%</title>
|
<title>%VITE_APP_TITLE%</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
@ -65,7 +65,7 @@
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
border: 4px solid #2d8cf0;
|
border: 4px solid #1e88e5;
|
||||||
border-bottom: 0;
|
border-bottom: 0;
|
||||||
border-left-color: transparent;
|
border-left-color: transparent;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
|
|
@ -78,7 +78,7 @@
|
||||||
left: calc(50% - 20px);
|
left: calc(50% - 20px);
|
||||||
width: 40px;
|
width: 40px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
border: 4px solid #87bdff;
|
border: 4px solid #7fbaf2;
|
||||||
border-right: 0;
|
border-right: 0;
|
||||||
border-top-color: transparent;
|
border-top-color: transparent;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
|
|
@ -136,7 +136,7 @@
|
||||||
<div class="app-loading">
|
<div class="app-loading">
|
||||||
<div class="app-loading-wrap">
|
<div class="app-loading-wrap">
|
||||||
<div class="app-loading-title">
|
<div class="app-loading-title">
|
||||||
<img src="/logo.gif" class="app-loading-logo" alt="Logo" />
|
<img src="/brand-logo.png" class="app-loading-logo" alt="Logo" />
|
||||||
<div class="app-loading-title">%VITE_APP_TITLE%</div>
|
<div class="app-loading-title">%VITE_APP_TITLE%</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="app-loading-item">
|
<div class="app-loading-item">
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
|
|
@ -95,7 +95,7 @@ export interface OrderItemRespVO {
|
||||||
orderPartPrice?: number | null //子订单分摊金额(总)
|
orderPartPrice?: number | null //子订单分摊金额(总)
|
||||||
orderDividePrice?: number | null //分摊后子订单实付金额(总)
|
orderDividePrice?: number | null //分摊后子订单实付金额(总)
|
||||||
// ========== 营销基本信息 ==========
|
// ========== 营销基本信息 ==========
|
||||||
// TODO 芋艿:在捉摸一下
|
// TODO 项目组:在捉摸一下
|
||||||
// ========== 售后基本信息 ==========
|
// ========== 售后基本信息 ==========
|
||||||
afterSaleStatus?: number | null // 售后状态
|
afterSaleStatus?: number | null // 售后状态
|
||||||
properties?: ProductPropertiesVO[] //属性数组
|
properties?: ProductPropertiesVO[] //属性数组
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 4.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 3.4 KiB |
|
|
@ -0,0 +1,47 @@
|
||||||
|
<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="ksAdminBg" x1="14%" y1="10%" x2="88%" y2="92%">
|
||||||
|
<stop offset="0%" stop-color="#0d47a1"/>
|
||||||
|
<stop offset="55%" stop-color="#1976d2"/>
|
||||||
|
<stop offset="100%" stop-color="#42a5f5"/>
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient id="ksAdminGlow" x1="0%" y1="0%" x2="100%" y2="100%">
|
||||||
|
<stop offset="0%" stop-color="#b3e5fc" stop-opacity="0.85"/>
|
||||||
|
<stop offset="100%" stop-color="#e1f5fe" stop-opacity="0.2"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
|
||||||
|
<circle cx="64" cy="64" r="60" fill="url(#ksAdminBg)"/>
|
||||||
|
<circle cx="64" cy="64" r="56" fill="none" stroke="url(#ksAdminGlow)" stroke-width="2"/>
|
||||||
|
|
||||||
|
<!-- AI circuit motif -->
|
||||||
|
<g stroke="#b3e5fc" stroke-width="2" stroke-linecap="round" opacity="0.85">
|
||||||
|
<path d="M18 44h12"/>
|
||||||
|
<path d="M98 44h12"/>
|
||||||
|
<path d="M20 84h10"/>
|
||||||
|
<path d="M98 84h10"/>
|
||||||
|
<path d="M31 30l7 7"/>
|
||||||
|
<path d="M90 30l-7 7"/>
|
||||||
|
</g>
|
||||||
|
<g fill="#e1f5fe" opacity="0.95">
|
||||||
|
<circle cx="18" cy="44" r="3"/>
|
||||||
|
<circle cx="110" cy="44" r="3"/>
|
||||||
|
<circle cx="20" cy="84" r="3"/>
|
||||||
|
<circle cx="110" cy="84" r="3"/>
|
||||||
|
<circle cx="31" cy="30" r="2.8"/>
|
||||||
|
<circle cx="90" cy="30" r="2.8"/>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<!-- Admin bust -->
|
||||||
|
<circle cx="64" cy="50" r="18" fill="#ffffff"/>
|
||||||
|
<path d="M32 96c4-14 17-22 32-22s28 8 32 22" fill="#ffffff"/>
|
||||||
|
|
||||||
|
<!-- Face details -->
|
||||||
|
<circle cx="57" cy="50" r="2.5" fill="#1e88e5"/>
|
||||||
|
<circle cx="71" cy="50" r="2.5" fill="#1e88e5"/>
|
||||||
|
<path d="M59 58c3.5 2.5 6.5 2.5 10 0" stroke="#1e88e5" stroke-width="2.6" fill="none" stroke-linecap="round"/>
|
||||||
|
|
||||||
|
<!-- Crown-like brand accent -->
|
||||||
|
<path d="M45 31l8-6 11 6 11-6 8 6v6H45z" fill="#ffd54f"/>
|
||||||
|
<circle cx="64" cy="31" r="2.8" fill="#ff8f00"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.8 KiB |
|
|
@ -0,0 +1,36 @@
|
||||||
|
<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="ksNoticeBg" x1="10%" y1="8%" x2="88%" y2="90%">
|
||||||
|
<stop offset="0%" stop-color="#004d99"/>
|
||||||
|
<stop offset="55%" stop-color="#0288d1"/>
|
||||||
|
<stop offset="100%" stop-color="#29b6f6"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
|
||||||
|
<circle cx="64" cy="64" r="60" fill="url(#ksNoticeBg)"/>
|
||||||
|
<circle cx="64" cy="64" r="55" fill="none" stroke="#b3e5fc" stroke-opacity="0.45" stroke-width="2"/>
|
||||||
|
|
||||||
|
<!-- Shopping bag -->
|
||||||
|
<rect x="34" y="40" width="60" height="52" rx="8" fill="#ffffff"/>
|
||||||
|
<path d="M48 46c0-9 7-16 16-16s16 7 16 16" stroke="#1e88e5" stroke-width="4" fill="none" stroke-linecap="round"/>
|
||||||
|
|
||||||
|
<!-- AI chip symbol on bag -->
|
||||||
|
<rect x="50" y="56" width="28" height="20" rx="4" fill="#e3f2fd" stroke="#0288d1" stroke-width="2"/>
|
||||||
|
<g stroke="#0288d1" stroke-width="2" stroke-linecap="round">
|
||||||
|
<path d="M64 52v4"/>
|
||||||
|
<path d="M64 76v4"/>
|
||||||
|
<path d="M46 66h4"/>
|
||||||
|
<path d="M78 66h4"/>
|
||||||
|
<path d="M53 59l-3-3"/>
|
||||||
|
<path d="M75 59l3-3"/>
|
||||||
|
<path d="M53 73l-3 3"/>
|
||||||
|
<path d="M75 73l3 3"/>
|
||||||
|
</g>
|
||||||
|
<circle cx="64" cy="66" r="4.2" fill="#29b6f6"/>
|
||||||
|
|
||||||
|
<!-- Notification sparkle -->
|
||||||
|
<g fill="#ffd54f">
|
||||||
|
<path d="M95 28l3 7 7 3-7 3-3 7-3-7-7-3 7-3z"/>
|
||||||
|
<circle cx="28" cy="34" r="3"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.3 KiB |
|
|
@ -5,7 +5,7 @@
|
||||||
<el-avatar :size="60">
|
<el-avatar :size="60">
|
||||||
<Icon icon="ep:avatar" :size="60" />
|
<Icon icon="ep:avatar" :size="60" />
|
||||||
</el-avatar>
|
</el-avatar>
|
||||||
<span class="text-18px font-bold">芋道源码</span>
|
<span class="text-18px font-bold">空山平台</span>
|
||||||
</div>
|
</div>
|
||||||
<Icon icon="tdesign:qrcode" :size="20" />
|
<Icon icon="tdesign:qrcode" :size="20" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -171,7 +171,7 @@
|
||||||
/>
|
/>
|
||||||
<div class="flex flex-col">
|
<div class="flex flex-col">
|
||||||
<el-text>手机扫码预览</el-text>
|
<el-text>手机扫码预览</el-text>
|
||||||
<Qrcode :text="previewUrl" logo="/logo.gif" />
|
<Qrcode :text="previewUrl" logo="/brand-logo.png" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Dialog>
|
</Dialog>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,9 @@
|
||||||
<template>
|
<template>
|
||||||
<el-alert v-if="getEnable()" type="success" show-icon>
|
<el-alert v-if="getEnable()" type="success" show-icon>
|
||||||
<template #title>
|
<template #title>
|
||||||
<div @click="goToUrl">{{ '【' + title + '】文档地址:' + url }}</div>
|
<div @click="goToUrl">
|
||||||
|
{{ '【' + (title || '模块说明') + '】空山帮助中心 / 内部Wiki:' + helpCenterUrl }}
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-alert>
|
</el-alert>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -17,13 +19,15 @@ const props = defineProps({
|
||||||
|
|
||||||
/** 跳转 URL 链接 */
|
/** 跳转 URL 链接 */
|
||||||
const goToUrl = () => {
|
const goToUrl = () => {
|
||||||
window.open(props.url)
|
window.open(helpCenterUrl)
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 是否开启 */
|
/** 是否开启 */
|
||||||
const getEnable = () => {
|
const getEnable = () => {
|
||||||
return import.meta.env.VITE_APP_DOCALERT_ENABLE !== 'false'
|
return import.meta.env.VITE_APP_DOCALERT_ENABLE !== 'false'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const helpCenterUrl = import.meta.env.VITE_APP_HELP_CENTER_URL || 'http://m.swelife.cn/#/pages/index'
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
.el-alert--success.is-light {
|
.el-alert--success.is-light {
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ export default defineComponent({
|
||||||
default: () => []
|
default: () => []
|
||||||
},
|
},
|
||||||
// 是否需要栅格布局
|
// 是否需要栅格布局
|
||||||
// update by 芋艿:将 true 改成 false,因为项目更常用这种方式
|
// update by 项目组:将 true 改成 false,因为项目更常用这种方式
|
||||||
isCol: propTypes.bool.def(false),
|
isCol: propTypes.bool.def(false),
|
||||||
// 表单数据对象
|
// 表单数据对象
|
||||||
model: {
|
model: {
|
||||||
|
|
@ -49,7 +49,7 @@ export default defineComponent({
|
||||||
isCustom: propTypes.bool.def(false),
|
isCustom: propTypes.bool.def(false),
|
||||||
// 表单label宽度
|
// 表单label宽度
|
||||||
labelWidth: propTypes.oneOfType([String, Number]).def('auto'),
|
labelWidth: propTypes.oneOfType([String, Number]).def('auto'),
|
||||||
// 是否 loading 数据中 add by 芋艿
|
// 是否 loading 数据中 add by 项目组
|
||||||
vLoading: propTypes.bool.def(false)
|
vLoading: propTypes.bool.def(false)
|
||||||
},
|
},
|
||||||
emits: ['register'],
|
emits: ['register'],
|
||||||
|
|
|
||||||
|
|
@ -100,7 +100,7 @@ const setVisible = () => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<!-- update by 芋艿:class="-mb-15px" 用于降低和 ContentWrap 组件的底部距离,避免空隙过大 -->
|
<!-- update by 项目组:class="-mb-15px" 用于降低和 ContentWrap 组件的底部距离,避免空隙过大 -->
|
||||||
<Form
|
<Form
|
||||||
:inline="inline"
|
:inline="inline"
|
||||||
:is-col="isCol"
|
:is-col="isCol"
|
||||||
|
|
@ -113,12 +113,12 @@ const setVisible = () => {
|
||||||
>
|
>
|
||||||
<template #action>
|
<template #action>
|
||||||
<div v-if="layout === 'inline'">
|
<div v-if="layout === 'inline'">
|
||||||
<!-- update by 芋艿:去除搜索的 type="primary",颜色变淡一点 -->
|
<!-- update by 项目组:去除搜索的 type="primary",颜色变淡一点 -->
|
||||||
<ElButton v-if="showSearch" @click="search">
|
<ElButton v-if="showSearch" @click="search">
|
||||||
<Icon class="mr-5px" icon="ep:search" />
|
<Icon class="mr-5px" icon="ep:search" />
|
||||||
{{ t('common.query') }}
|
{{ t('common.query') }}
|
||||||
</ElButton>
|
</ElButton>
|
||||||
<!-- update by 芋艿:将 icon="ep:refresh-right" 修改成 icon="ep:refresh",和 ruoyi-vue 搜索保持一致 -->
|
<!-- update by 项目组:将 icon="ep:refresh-right" 修改成 icon="ep:refresh",和 ruoyi-vue 搜索保持一致 -->
|
||||||
<ElButton v-if="showReset" @click="reset">
|
<ElButton v-if="showReset" @click="reset">
|
||||||
<Icon class="mr-5px" icon="ep:refresh" />
|
<Icon class="mr-5px" icon="ep:refresh" />
|
||||||
{{ t('common.reset') }}
|
{{ t('common.reset') }}
|
||||||
|
|
@ -127,7 +127,7 @@ const setVisible = () => {
|
||||||
{{ t(visible ? 'common.shrink' : 'common.expand') }}
|
{{ t(visible ? 'common.shrink' : 'common.expand') }}
|
||||||
<Icon :icon="visible ? 'ep:arrow-up' : 'ep:arrow-down'" />
|
<Icon :icon="visible ? 'ep:arrow-up' : 'ep:arrow-down'" />
|
||||||
</ElButton>
|
</ElButton>
|
||||||
<!-- add by 芋艿:补充在搜索后的按钮 -->
|
<!-- add by 项目组:补充在搜索后的按钮 -->
|
||||||
<slot name="actionMore"></slot>
|
<slot name="actionMore"></slot>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -150,7 +150,7 @@ const setVisible = () => {
|
||||||
{{ t(visible ? 'common.shrink' : 'common.expand') }}
|
{{ t(visible ? 'common.shrink' : 'common.expand') }}
|
||||||
<Icon :icon="visible ? 'ep:arrow-up' : 'ep:arrow-down'" />
|
<Icon :icon="visible ? 'ep:arrow-up' : 'ep:arrow-down'" />
|
||||||
</ElButton>
|
</ElButton>
|
||||||
<!-- add by 芋艿:补充在搜索后的按钮 -->
|
<!-- add by 项目组:补充在搜索后的按钮 -->
|
||||||
<slot name="actionMore"></slot>
|
<slot name="actionMore"></slot>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,7 @@ export function useFormFields() {
|
||||||
return parseFormCreateFields(unref(formFields))
|
return parseFormCreateFields(unref(formFields))
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO @芋艿:后续需要把各种类似 useFormFieldsPermission 的逻辑,抽成一个通用方法。
|
// TODO @项目组:后续需要把各种类似 useFormFieldsPermission 的逻辑,抽成一个通用方法。
|
||||||
/**
|
/**
|
||||||
* @description 获取流程表单的字段和发起人字段
|
* @description 获取流程表单的字段和发起人字段
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ export default defineComponent({
|
||||||
})
|
})
|
||||||
|
|
||||||
const pagination = computed(() => {
|
const pagination = computed(() => {
|
||||||
// update by 芋艿:保持和 Pagination 组件的逻辑一致
|
// update by 项目组:保持和 Pagination 组件的逻辑一致
|
||||||
return Object.assign(
|
return Object.assign(
|
||||||
{
|
{
|
||||||
small: false,
|
small: false,
|
||||||
|
|
@ -285,7 +285,7 @@ export default defineComponent({
|
||||||
}}
|
}}
|
||||||
</ElTable>
|
</ElTable>
|
||||||
{unref(getProps).pagination ? (
|
{unref(getProps).pagination ? (
|
||||||
// update by 芋艿:保持和 Pagination 组件一致
|
// update by 项目组:保持和 Pagination 组件一致
|
||||||
<ElPagination
|
<ElPagination
|
||||||
v-model:pageSize={pageSizeRef.value}
|
v-model:pageSize={pageSizeRef.value}
|
||||||
v-model:currentPage={currentPageRef.value}
|
v-model:currentPage={currentPageRef.value}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<!-- 列表选择通用组件,参考 ProductList 组件使用 -->
|
<!-- 列表选择通用组件,参考 ProductList 组件使用 -->
|
||||||
<!-- TODO 芋艿:可能会移除 -->
|
<!-- TODO 项目组:可能会移除 -->
|
||||||
<template>
|
<template>
|
||||||
<Dialog v-model="dialogVisible" :appendToBody="true" :scroll="true" :title="title" width="60%">
|
<Dialog v-model="dialogVisible" :appendToBody="true" :scroll="true" :title="title" width="60%">
|
||||||
<el-table
|
<el-table
|
||||||
|
|
|
||||||
|
|
@ -642,7 +642,7 @@ const previewProcessJson = () => {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ------------------------------------------------ 芋道源码 methods ------------------------------------------------------ */
|
/* ------------------------------------------------ 空山团队 methods ------------------------------------------------------ */
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
initBpmnModeler()
|
initBpmnModeler()
|
||||||
createNewDiagram(props.value)
|
createNewDiagram(props.value)
|
||||||
|
|
|
||||||
|
|
@ -208,7 +208,7 @@ const clearViewer = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 添加自定义箭头 */
|
/** 添加自定义箭头 */
|
||||||
// TODO 芋艿:自定义箭头不生效,有点奇怪!!!!相关的 marker-end、marker-start 暂时也注释了!!!
|
// TODO 项目组:自定义箭头不生效,有点奇怪!!!!相关的 marker-end、marker-start 暂时也注释了!!!
|
||||||
const addCustomDefs = () => {
|
const addCustomDefs = () => {
|
||||||
if (!bpmnViewer.value) {
|
if (!bpmnViewer.value) {
|
||||||
return
|
return
|
||||||
|
|
|
||||||
|
|
@ -99,7 +99,7 @@ const handleNameUpdate = (value) => {
|
||||||
}, 100)
|
}, 100)
|
||||||
}
|
}
|
||||||
// const handleDescriptionUpdate=(value)=> {
|
// const handleDescriptionUpdate=(value)=> {
|
||||||
// TODO 芋艿:documentation 暂时无法修改,后续在看看
|
// TODO 项目组:documentation 暂时无法修改,后续在看看
|
||||||
// this.elementBaseInfo['documentation'] = value;
|
// this.elementBaseInfo['documentation'] = value;
|
||||||
// this.updateBaseInfo('documentation');
|
// this.updateBaseInfo('documentation');
|
||||||
// }
|
// }
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@
|
||||||
<el-form-item label="集合" key="collection" v-show="false">
|
<el-form-item label="集合" key="collection" v-show="false">
|
||||||
<el-input v-model="loopInstanceForm.collection" clearable @change="updateLoopBase" />
|
<el-input v-model="loopInstanceForm.collection" clearable @change="updateLoopBase" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- add by 芋艿:由于「元素变量」暂时用不到,所以这里 display 为 none -->
|
<!-- add by 项目组:由于「元素变量」暂时用不到,所以这里 display 为 none -->
|
||||||
<el-form-item label="元素变量" key="elementVariable" style="display: none">
|
<el-form-item label="元素变量" key="elementVariable" style="display: none">
|
||||||
<el-input v-model="loopInstanceForm.elementVariable" clearable @change="updateLoopBase" />
|
<el-input v-model="loopInstanceForm.elementVariable" clearable @change="updateLoopBase" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
@ -71,7 +71,7 @@
|
||||||
@change="updateLoopCondition"
|
@change="updateLoopCondition"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- add by 芋艿:由于「异步状态」暂时用不到,所以这里 display 为 none -->
|
<!-- add by 项目组:由于「异步状态」暂时用不到,所以这里 display 为 none -->
|
||||||
<el-form-item label="异步状态" key="async" style="display: none">
|
<el-form-item label="异步状态" key="async" style="display: none">
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
v-model="loopInstanceForm.asyncBefore"
|
v-model="loopInstanceForm.asyncBefore"
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="panel-tab__content">
|
<div class="panel-tab__content">
|
||||||
<el-form size="small" label-width="90px">
|
<el-form size="small" label-width="90px">
|
||||||
<!-- add by 芋艿:由于「异步延续」暂时用不到,所以这里 display 为 none -->
|
<!-- add by 项目组:由于「异步延续」暂时用不到,所以这里 display 为 none -->
|
||||||
<el-form-item label="异步延续" style="display: none">
|
<el-form-item label="异步延续" style="display: none">
|
||||||
<el-checkbox
|
<el-checkbox
|
||||||
v-model="taskConfigForm.asyncBefore"
|
v-model="taskConfigForm.asyncBefore"
|
||||||
|
|
|
||||||
|
|
@ -354,7 +354,7 @@ const resetTaskForm = () => {
|
||||||
const changeCandidateStrategy = () => {
|
const changeCandidateStrategy = () => {
|
||||||
userTaskForm.value.candidateParam = []
|
userTaskForm.value.candidateParam = []
|
||||||
deptLevel.value = 1
|
deptLevel.value = 1
|
||||||
// 注释 by 芋艿:这个交互很多用户反馈费解,https://t.zsxq.com/xNmas 所以暂时屏蔽
|
// 注释 by 项目组:这个交互很多用户反馈费解,https://t.zsxq.com/xNmas 所以暂时屏蔽
|
||||||
// if (userTaskForm.value.candidateStrategy === CandidateStrategy.FORM_USER) {
|
// if (userTaskForm.value.candidateStrategy === CandidateStrategy.FORM_USER) {
|
||||||
// // 特殊处理表单内用户字段,当只有发起人选项时应选中发起人
|
// // 特殊处理表单内用户字段,当只有发起人选项时应选中发起人
|
||||||
// if (!userFieldOnFormOptions.value || userFieldOnFormOptions.value.length <= 1) {
|
// if (!userFieldOnFormOptions.value || userFieldOnFormOptions.value.length <= 1) {
|
||||||
|
|
|
||||||
|
|
@ -162,7 +162,7 @@ const filterTableSchema = (crudSchema: CrudSchema[]): TableColumn[] => {
|
||||||
const tableColumns = treeMap<CrudSchema>(crudSchema, {
|
const tableColumns = treeMap<CrudSchema>(crudSchema, {
|
||||||
conversion: (schema: CrudSchema) => {
|
conversion: (schema: CrudSchema) => {
|
||||||
if (schema?.isTable !== false && schema?.table?.show !== false) {
|
if (schema?.isTable !== false && schema?.table?.show !== false) {
|
||||||
// add by 芋艿:增加对 dict 字典数据的支持
|
// add by 项目组:增加对 dict 字典数据的支持
|
||||||
if (!schema.formatter && schema.dictType) {
|
if (!schema.formatter && schema.dictType) {
|
||||||
schema.formatter = (_: Recordable, __: TableColumn, cellValue: any) => {
|
schema.formatter = (_: Recordable, __: TableColumn, cellValue: any) => {
|
||||||
return h(DictTag, {
|
return h(DictTag, {
|
||||||
|
|
|
||||||
|
|
@ -217,7 +217,7 @@ export const useTable = <T = any>(config?: UseTableConfig<T>) => {
|
||||||
elTableRef,
|
elTableRef,
|
||||||
tableObject,
|
tableObject,
|
||||||
methods,
|
methods,
|
||||||
// add by 芋艿:返回 tableMethods 属性,和 tableObject 更统一
|
// add by 项目组:返回 tableMethods 属性,和 tableObject 更统一
|
||||||
tableMethods: methods
|
tableMethods: methods
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -68,7 +68,7 @@ watch(
|
||||||
>
|
>
|
||||||
<img
|
<img
|
||||||
class="h-[calc(var(--logo-height)-10px)] w-[calc(var(--logo-height)-10px)]"
|
class="h-[calc(var(--logo-height)-10px)] w-[calc(var(--logo-height)-10px)]"
|
||||||
src="@/assets/imgs/logo.png"
|
src="/brand-logo.png"
|
||||||
/>
|
/>
|
||||||
<div
|
<div
|
||||||
v-if="show"
|
v-if="show"
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ const toProfile = async () => {
|
||||||
push('/user/profile')
|
push('/user/profile')
|
||||||
}
|
}
|
||||||
const toDocument = () => {
|
const toDocument = () => {
|
||||||
window.open('https://doc.iocoder.cn/')
|
window.open('http://m.swelife.cn/#/pages/index')
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ export default {
|
||||||
login: 'Login',
|
login: 'Login',
|
||||||
required: 'This is required',
|
required: 'This is required',
|
||||||
loginOut: 'Login out',
|
loginOut: 'Login out',
|
||||||
document: 'Document',
|
document: 'Project Portal',
|
||||||
profile: 'User Center',
|
profile: 'User Center',
|
||||||
reminder: 'Reminder',
|
reminder: 'Reminder',
|
||||||
loginOutMessage: 'Exit the system?',
|
loginOutMessage: 'Exit the system?',
|
||||||
|
|
@ -113,8 +113,8 @@ export default {
|
||||||
small: 'Small'
|
small: 'Small'
|
||||||
},
|
},
|
||||||
login: {
|
login: {
|
||||||
welcome: 'Welcome to the system',
|
welcome: 'Welcome to Kongshan AI + E-commerce Platform',
|
||||||
message: 'Backstage management system',
|
message: 'An operations console focused on AI-enabled commerce',
|
||||||
tenantname: 'TenantName',
|
tenantname: 'TenantName',
|
||||||
username: 'Username',
|
username: 'Username',
|
||||||
password: 'Password',
|
password: 'Password',
|
||||||
|
|
@ -163,10 +163,10 @@ export default {
|
||||||
analysis: {
|
analysis: {
|
||||||
newUser: 'New user',
|
newUser: 'New user',
|
||||||
unreadInformation: 'Unread information',
|
unreadInformation: 'Unread information',
|
||||||
transactionAmount: 'Transaction amount',
|
transactionAmount: 'GMV',
|
||||||
totalShopping: 'Total Shopping',
|
totalShopping: 'Paid Orders',
|
||||||
monthlySales: 'Monthly sales',
|
monthlySales: 'Monthly Sales Trend',
|
||||||
userAccessSource: 'User access source',
|
userAccessSource: 'Traffic Sources',
|
||||||
january: 'January',
|
january: 'January',
|
||||||
february: 'February',
|
february: 'February',
|
||||||
march: 'March',
|
march: 'March',
|
||||||
|
|
@ -179,15 +179,15 @@ export default {
|
||||||
october: 'October',
|
october: 'October',
|
||||||
november: 'November',
|
november: 'November',
|
||||||
december: 'December',
|
december: 'December',
|
||||||
estimate: 'Estimate',
|
estimate: 'Target',
|
||||||
actual: 'Actual',
|
actual: 'Actual',
|
||||||
directAccess: 'Airect access',
|
directAccess: 'Organic',
|
||||||
mailMarketing: 'Mail marketing',
|
mailMarketing: 'Private Domain',
|
||||||
allianceAdvertising: 'Alliance advertising',
|
allianceAdvertising: 'Paid Channels',
|
||||||
videoAdvertising: 'Video advertising',
|
videoAdvertising: 'Short Video',
|
||||||
searchEngines: 'Search engines',
|
searchEngines: 'Search',
|
||||||
weeklyUserActivity: 'Weekly user activity',
|
weeklyUserActivity: 'Weekly Ops Activity',
|
||||||
activeQuantity: 'Active quantity',
|
activeQuantity: 'Activity Index',
|
||||||
monday: 'Monday',
|
monday: 'Monday',
|
||||||
tuesday: 'Tuesday',
|
tuesday: 'Tuesday',
|
||||||
wednesday: 'Wednesday',
|
wednesday: 'Wednesday',
|
||||||
|
|
@ -199,13 +199,13 @@ export default {
|
||||||
workplace: {
|
workplace: {
|
||||||
welcome: 'Hello',
|
welcome: 'Hello',
|
||||||
happyDay: 'Wish you happy every day!',
|
happyDay: 'Wish you happy every day!',
|
||||||
toady: `It's sunny today`,
|
toady: 'Today Focus',
|
||||||
notice: 'Announcement',
|
notice: 'Operations Bulletin',
|
||||||
project: 'Project',
|
project: 'Business Modules',
|
||||||
access: 'Project access',
|
access: 'Site Visits',
|
||||||
toDo: 'To do',
|
toDo: 'Pending Tasks',
|
||||||
introduction: 'A serious introduction',
|
introduction: 'A serious introduction',
|
||||||
shortcutOperation: 'Quick entry',
|
shortcutOperation: 'Operations Shortcuts',
|
||||||
operation: 'Operation',
|
operation: 'Operation',
|
||||||
index: 'Index',
|
index: 'Index',
|
||||||
personal: 'Personal',
|
personal: 'Personal',
|
||||||
|
|
@ -376,8 +376,8 @@ export default {
|
||||||
signUpFormTitle: 'Sign up',
|
signUpFormTitle: 'Sign up',
|
||||||
forgetFormTitle: 'Reset password',
|
forgetFormTitle: 'Reset password',
|
||||||
|
|
||||||
signInTitle: 'Backstage management system',
|
signInTitle: 'Kongshan AI + E-commerce Admin Console',
|
||||||
signInDesc: 'Enter your personal details and get started!',
|
signInDesc: 'Sign in with your account to start managing the platform',
|
||||||
policy: 'I agree to the xxx Privacy Policy',
|
policy: 'I agree to the xxx Privacy Policy',
|
||||||
scanSign: `scanning the code to complete the login`,
|
scanSign: `scanning the code to complete the login`,
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ export default {
|
||||||
login: '登录',
|
login: '登录',
|
||||||
required: '该项为必填项',
|
required: '该项为必填项',
|
||||||
loginOut: '退出系统',
|
loginOut: '退出系统',
|
||||||
document: '项目文档',
|
document: '项目入口',
|
||||||
profile: '个人中心',
|
profile: '个人中心',
|
||||||
reminder: '温馨提示',
|
reminder: '温馨提示',
|
||||||
loginOutMessage: '是否退出本系统?',
|
loginOutMessage: '是否退出本系统?',
|
||||||
|
|
@ -114,8 +114,8 @@ export default {
|
||||||
small: '小'
|
small: '小'
|
||||||
},
|
},
|
||||||
login: {
|
login: {
|
||||||
welcome: '欢迎使用本系统',
|
welcome: '欢迎使用空山 AI+电商平台',
|
||||||
message: '开箱即用的中后台管理系统',
|
message: '聚焦 AI 赋能实业的电商中后台管理系统',
|
||||||
tenantname: '租户名称',
|
tenantname: '租户名称',
|
||||||
username: '用户名',
|
username: '用户名',
|
||||||
password: '密码',
|
password: '密码',
|
||||||
|
|
@ -165,10 +165,10 @@ export default {
|
||||||
analysis: {
|
analysis: {
|
||||||
newUser: '新增用户',
|
newUser: '新增用户',
|
||||||
unreadInformation: '未读消息',
|
unreadInformation: '未读消息',
|
||||||
transactionAmount: '成交金额',
|
transactionAmount: 'GMV 成交额',
|
||||||
totalShopping: '购物总量',
|
totalShopping: '支付订单量',
|
||||||
monthlySales: '每月销售额',
|
monthlySales: '月度销售趋势',
|
||||||
userAccessSource: '用户访问来源',
|
userAccessSource: '流量渠道来源',
|
||||||
january: '一月',
|
january: '一月',
|
||||||
february: '二月',
|
february: '二月',
|
||||||
march: '三月',
|
march: '三月',
|
||||||
|
|
@ -181,15 +181,15 @@ export default {
|
||||||
october: '十月',
|
october: '十月',
|
||||||
november: '十一月',
|
november: '十一月',
|
||||||
december: '十二月',
|
december: '十二月',
|
||||||
estimate: '预计',
|
estimate: '目标',
|
||||||
actual: '实际',
|
actual: '实际',
|
||||||
directAccess: '直接访问',
|
directAccess: '自然访问',
|
||||||
mailMarketing: '邮件营销',
|
mailMarketing: '私域触达',
|
||||||
allianceAdvertising: '联盟广告',
|
allianceAdvertising: '渠道投放',
|
||||||
videoAdvertising: '视频广告',
|
videoAdvertising: '短视频内容',
|
||||||
searchEngines: '搜索引擎',
|
searchEngines: '搜索流量',
|
||||||
weeklyUserActivity: '每周用户活跃量',
|
weeklyUserActivity: '每周经营活跃度',
|
||||||
activeQuantity: '活跃量',
|
activeQuantity: '活跃指标',
|
||||||
monday: '周一',
|
monday: '周一',
|
||||||
tuesday: '周二',
|
tuesday: '周二',
|
||||||
wednesday: '周三',
|
wednesday: '周三',
|
||||||
|
|
@ -201,13 +201,13 @@ export default {
|
||||||
workplace: {
|
workplace: {
|
||||||
welcome: '你好',
|
welcome: '你好',
|
||||||
happyDay: '祝你开心每一天!',
|
happyDay: '祝你开心每一天!',
|
||||||
toady: '今日晴',
|
toady: '今日运营重点',
|
||||||
notice: '通知公告',
|
notice: '运营公告',
|
||||||
project: '项目数',
|
project: '业务模块',
|
||||||
access: '项目访问',
|
access: '全站访问',
|
||||||
toDo: '待办',
|
toDo: '待处理',
|
||||||
introduction: '一个正经的简介',
|
introduction: '一个正经的简介',
|
||||||
shortcutOperation: '快捷入口',
|
shortcutOperation: '运营快捷入口',
|
||||||
operation: '操作',
|
operation: '操作',
|
||||||
index: '指数',
|
index: '指数',
|
||||||
personal: '个人',
|
personal: '个人',
|
||||||
|
|
@ -374,8 +374,8 @@ export default {
|
||||||
qrSignInFormTitle: '二维码登录',
|
qrSignInFormTitle: '二维码登录',
|
||||||
signUpFormTitle: '注册',
|
signUpFormTitle: '注册',
|
||||||
forgetFormTitle: '重置密码',
|
forgetFormTitle: '重置密码',
|
||||||
signInTitle: '开箱即用的中后台管理系统',
|
signInTitle: '空山 AI+电商平台管理端',
|
||||||
signInDesc: '输入您的个人详细信息开始使用!',
|
signInDesc: '输入账号信息后开始使用平台能力',
|
||||||
policy: '我同意xxx隐私政策',
|
policy: '我同意xxx隐私政策',
|
||||||
scanSign: `扫码后点击"确认",即可完成登录`,
|
scanSign: `扫码后点击"确认",即可完成登录`,
|
||||||
loginButton: '登录',
|
loginButton: '登录',
|
||||||
|
|
|
||||||
|
|
@ -73,13 +73,13 @@ export const useAppStore = defineStore('app', {
|
||||||
currentSize: wsCache.get('default') || 'default', // 组件尺寸
|
currentSize: wsCache.get('default') || 'default', // 组件尺寸
|
||||||
theme: wsCache.get(CACHE_KEY.THEME) || {
|
theme: wsCache.get(CACHE_KEY.THEME) || {
|
||||||
// 主题色
|
// 主题色
|
||||||
elColorPrimary: '#409eff',
|
elColorPrimary: '#1e88e5',
|
||||||
// 左侧菜单边框颜色
|
// 左侧菜单边框颜色
|
||||||
leftMenuBorderColor: 'inherit',
|
leftMenuBorderColor: 'inherit',
|
||||||
// 左侧菜单背景颜色
|
// 左侧菜单背景颜色
|
||||||
leftMenuBgColor: '#001529',
|
leftMenuBgColor: '#0f4c9a',
|
||||||
// 左侧菜单浅色背景颜色
|
// 左侧菜单浅色背景颜色
|
||||||
leftMenuBgLightColor: '#0f2438',
|
leftMenuBgLightColor: '#1763c3',
|
||||||
// 左侧菜单选中背景颜色
|
// 左侧菜单选中背景颜色
|
||||||
leftMenuBgActiveColor: 'var(--el-color-primary)',
|
leftMenuBgActiveColor: 'var(--el-color-primary)',
|
||||||
// 左侧菜单收起选中背景颜色
|
// 左侧菜单收起选中背景颜色
|
||||||
|
|
@ -93,11 +93,11 @@ export const useAppStore = defineStore('app', {
|
||||||
// logo边框颜色
|
// logo边框颜色
|
||||||
logoBorderColor: 'inherit',
|
logoBorderColor: 'inherit',
|
||||||
// 头部背景颜色
|
// 头部背景颜色
|
||||||
topHeaderBgColor: '#fff',
|
topHeaderBgColor: '#f5f9ff',
|
||||||
// 头部字体颜色
|
// 头部字体颜色
|
||||||
topHeaderTextColor: 'inherit',
|
topHeaderTextColor: 'inherit',
|
||||||
// 头部悬停颜色
|
// 头部悬停颜色
|
||||||
topHeaderHoverColor: '#f6f6f6',
|
topHeaderHoverColor: '#eaf2ff',
|
||||||
// 头部边框颜色
|
// 头部边框颜色
|
||||||
topToolBorderColor: '#eee'
|
topToolBorderColor: '#eee'
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/**
|
/**
|
||||||
* Created by 芋道源码
|
* Created by 空山团队
|
||||||
*
|
*
|
||||||
* 枚举类
|
* 枚举类
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
/**
|
/**
|
||||||
* Independent time operation tool to facilitate subsequent switch to dayjs
|
* Independent time operation tool to facilitate subsequent switch to dayjs
|
||||||
*/
|
*/
|
||||||
// TODO 芋艿:【锁屏】可能后面删除掉
|
// TODO 项目组:【锁屏】可能后面删除掉
|
||||||
import dayjs from 'dayjs'
|
import dayjs from 'dayjs'
|
||||||
|
|
||||||
const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'
|
const DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss'
|
||||||
|
|
|
||||||
|
|
@ -240,7 +240,7 @@ export enum DICT_TYPE {
|
||||||
IOT_THING_MODEL_TYPE = 'iot_thing_model_type', // IOT 产品功能类型
|
IOT_THING_MODEL_TYPE = 'iot_thing_model_type', // IOT 产品功能类型
|
||||||
IOT_THING_MODEL_UNIT = 'iot_thing_model_unit', // IOT 物模型单位
|
IOT_THING_MODEL_UNIT = 'iot_thing_model_unit', // IOT 物模型单位
|
||||||
IOT_RW_TYPE = 'iot_rw_type', // IOT 读写类型
|
IOT_RW_TYPE = 'iot_rw_type', // IOT 读写类型
|
||||||
// TODO @芋艿:貌似这几个多了 _enum 后缀
|
// TODO @项目组:貌似这几个多了 _enum 后缀
|
||||||
IOT_DATA_SINK_TYPE_ENUM = 'iot_data_sink_type_enum', // IoT 数据流转目的类型
|
IOT_DATA_SINK_TYPE_ENUM = 'iot_data_sink_type_enum', // IoT 数据流转目的类型
|
||||||
IOT_RULE_SCENE_TRIGGER_TYPE_ENUM = 'iot_rule_scene_trigger_type_enum', // IoT 场景流转的触发类型枚举
|
IOT_RULE_SCENE_TRIGGER_TYPE_ENUM = 'iot_rule_scene_trigger_type_enum', // IoT 场景流转的触发类型枚举
|
||||||
IOT_RULE_SCENE_ACTION_TYPE_ENUM = 'iot_rule_scene_action_type_enum', // IoT 规则场景的触发类型枚举
|
IOT_RULE_SCENE_ACTION_TYPE_ENUM = 'iot_rule_scene_action_type_enum', // IoT 规则场景的触发类型枚举
|
||||||
|
|
|
||||||
|
|
@ -328,7 +328,7 @@ export const formatToFraction = (num: number | string | undefined): string => {
|
||||||
*
|
*
|
||||||
* @param num 整数
|
* @param num 整数
|
||||||
*/
|
*/
|
||||||
// TODO @芋艿:看看怎么融合掉
|
// TODO @项目组:看看怎么融合掉
|
||||||
export const floatToFixed2 = (num: number | string | undefined): string => {
|
export const floatToFixed2 = (num: number | string | undefined): string => {
|
||||||
let str = '0.00'
|
let str = '0.00'
|
||||||
if (typeof num === 'undefined') {
|
if (typeof num === 'undefined') {
|
||||||
|
|
@ -355,7 +355,7 @@ export const floatToFixed2 = (num: number | string | undefined): string => {
|
||||||
* 将一个分数转换为整数
|
* 将一个分数转换为整数
|
||||||
* @param num
|
* @param num
|
||||||
*/
|
*/
|
||||||
// TODO @芋艿:看看怎么融合掉
|
// TODO @项目组:看看怎么融合掉
|
||||||
export const convertToInteger = (num: number | string | undefined): number => {
|
export const convertToInteger = (num: number | string | undefined): number => {
|
||||||
if (typeof num === 'undefined') return 0
|
if (typeof num === 'undefined') return 0
|
||||||
const parsedNumber = typeof num === 'string' ? parseFloat(num) : num
|
const parsedNumber = typeof num === 'string' ? parseFloat(num) : num
|
||||||
|
|
|
||||||
|
|
@ -6,14 +6,14 @@
|
||||||
<el-col :xl="12" :lg="12" :md="12" :sm="24" :xs="24">
|
<el-col :xl="12" :lg="12" :md="12" :sm="24" :xs="24">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<el-avatar :src="avatar" :size="70" class="mr-16px">
|
<el-avatar :src="avatar" :size="70" class="mr-16px">
|
||||||
<img src="@/assets/imgs/avatar.gif" alt="" />
|
<img :src="avatar" alt="" />
|
||||||
</el-avatar>
|
</el-avatar>
|
||||||
<div>
|
<div>
|
||||||
<div class="text-20px">
|
<div class="text-20px">
|
||||||
{{ t('workplace.welcome') }} {{ username }} {{ t('workplace.happyDay') }}
|
{{ t('workplace.welcome') }} {{ username }} {{ t('workplace.happyDay') }}
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-10px text-14px text-gray-500">
|
<div class="mt-10px text-14px text-gray-500">
|
||||||
{{ t('workplace.toady') }},20℃ - 32℃!
|
{{ t('workplace.toady') }}:转化率、客单价、复购率
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -65,7 +65,7 @@
|
||||||
<el-link
|
<el-link
|
||||||
type="primary"
|
type="primary"
|
||||||
:underline="false"
|
:underline="false"
|
||||||
href="https://github.com/yudaocode"
|
href="https://github.com/"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
>
|
>
|
||||||
{{ t('action.more') }}
|
{{ t('action.more') }}
|
||||||
|
|
@ -86,7 +86,7 @@
|
||||||
<el-card
|
<el-card
|
||||||
shadow="hover"
|
shadow="hover"
|
||||||
class="mr-5px mt-5px cursor-pointer"
|
class="mr-5px mt-5px cursor-pointer"
|
||||||
@click="handleProjectClick(item.message)"
|
@click="handleProjectClick(item.url)"
|
||||||
>
|
>
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<Icon
|
<Icon
|
||||||
|
|
@ -97,7 +97,7 @@
|
||||||
/>
|
/>
|
||||||
<span class="text-16px">{{ item.name }}</span>
|
<span class="text-16px">{{ item.name }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-12px text-12px text-gray-400">{{ t(item.message) }}</div>
|
<div class="mt-12px text-12px text-gray-400">{{ item.message }}</div>
|
||||||
<div class="mt-12px flex justify-between text-12px text-gray-400">
|
<div class="mt-12px flex justify-between text-12px text-gray-400">
|
||||||
<span>{{ item.personal }}</span>
|
<span>{{ item.personal }}</span>
|
||||||
<span>{{ formatTime(item.time, 'yyyy-MM-dd') }}</span>
|
<span>{{ formatTime(item.time, 'yyyy-MM-dd') }}</span>
|
||||||
|
|
@ -159,8 +159,8 @@
|
||||||
<el-skeleton :loading="loading" animated>
|
<el-skeleton :loading="loading" animated>
|
||||||
<div v-for="(item, index) in notice" :key="`dynamics-${index}`">
|
<div v-for="(item, index) in notice" :key="`dynamics-${index}`">
|
||||||
<div class="flex items-center">
|
<div class="flex items-center">
|
||||||
<el-avatar :src="avatar" :size="35" class="mr-16px">
|
<el-avatar :src="noticeAvatar" :size="35" class="mr-16px">
|
||||||
<img src="@/assets/imgs/avatar.gif" alt="" />
|
<img :src="noticeAvatar" alt="" />
|
||||||
</el-avatar>
|
</el-avatar>
|
||||||
<div>
|
<div>
|
||||||
<div class="text-14px">
|
<div class="text-14px">
|
||||||
|
|
@ -184,6 +184,8 @@
|
||||||
import { set } from 'lodash-es'
|
import { set } from 'lodash-es'
|
||||||
import { EChartsOption } from 'echarts'
|
import { EChartsOption } from 'echarts'
|
||||||
import { formatTime } from '@/utils'
|
import { formatTime } from '@/utils'
|
||||||
|
import adminAvatar from '@/assets/imgs/kongshan-admin-avatar.svg'
|
||||||
|
import noticeAvatar from '@/assets/imgs/kongshan-notice-avatar.svg'
|
||||||
|
|
||||||
import { useUserStore } from '@/store/modules/user'
|
import { useUserStore } from '@/store/modules/user'
|
||||||
// import { useWatermark } from '@/hooks/web/useWatermark'
|
// import { useWatermark } from '@/hooks/web/useWatermark'
|
||||||
|
|
@ -198,7 +200,7 @@ const router = useRouter()
|
||||||
const userStore = useUserStore()
|
const userStore = useUserStore()
|
||||||
// const { setWatermark } = useWatermark()
|
// const { setWatermark } = useWatermark()
|
||||||
const loading = ref(true)
|
const loading = ref(true)
|
||||||
const avatar = userStore.getUser.avatar
|
const avatar = adminAvatar
|
||||||
const username = userStore.getUser.nickname
|
const username = userStore.getUser.nickname
|
||||||
const pieOptionsData = reactive<EChartsOption>(pieOptions) as EChartsOption
|
const pieOptionsData = reactive<EChartsOption>(pieOptions) as EChartsOption
|
||||||
// 获取统计数
|
// 获取统计数
|
||||||
|
|
@ -210,9 +212,9 @@ let totalSate = reactive<WorkplaceTotal>({
|
||||||
|
|
||||||
const getCount = async () => {
|
const getCount = async () => {
|
||||||
const data = {
|
const data = {
|
||||||
project: 40,
|
project: 28,
|
||||||
access: 2340,
|
access: 18640,
|
||||||
todo: 10
|
todo: 7
|
||||||
}
|
}
|
||||||
totalSate = Object.assign(totalSate, data)
|
totalSate = Object.assign(totalSate, data)
|
||||||
}
|
}
|
||||||
|
|
@ -222,52 +224,58 @@ let projects = reactive<Project[]>([])
|
||||||
const getProject = async () => {
|
const getProject = async () => {
|
||||||
const data = [
|
const data = [
|
||||||
{
|
{
|
||||||
name: 'ruoyi-vue-pro',
|
name: '空山管理后台',
|
||||||
icon: 'simple-icons:springboot',
|
icon: 'ep:monitor',
|
||||||
message: 'github.com/YunaiV/ruoyi-vue-pro',
|
message: 'kshan.yootron.net',
|
||||||
personal: 'Spring Boot 单体架构',
|
url: 'https://kshan.yootron.net/',
|
||||||
time: new Date('2025-01-02'),
|
personal: 'Vue3 + Element Plus 管理端',
|
||||||
color: '#6DB33F'
|
time: new Date('2026-04-10'),
|
||||||
},
|
|
||||||
{
|
|
||||||
name: 'yudao-ui-admin-vue3',
|
|
||||||
icon: 'ep:element-plus',
|
|
||||||
message: 'github.com/yudaocode/yudao-ui-admin-vue3',
|
|
||||||
personal: 'Vue3 + element-plus 管理后台',
|
|
||||||
time: new Date('2025-02-03'),
|
|
||||||
color: '#409EFF'
|
color: '#409EFF'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'yudao-ui-mall-uniapp',
|
name: '空山商城 H5',
|
||||||
icon: 'icon-park-outline:mall-bag',
|
icon: 'icon-park-outline:mall-bag',
|
||||||
message: 'github.com/yudaocode/yudao-ui-mall-uniapp',
|
message: 'm.swelife.cn/#/pages/index',
|
||||||
personal: 'Vue3 + uniapp 商城手机端',
|
url: 'http://m.swelife.cn/#/pages/index',
|
||||||
time: new Date('2025-03-04'),
|
personal: '用户端商城与活动运营',
|
||||||
color: '#ff4d4f'
|
time: new Date('2026-04-11'),
|
||||||
|
color: '#ff6b6b'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'yudao-cloud',
|
name: '空山 AI 助手',
|
||||||
icon: 'material-symbols:cloud-outline',
|
icon: 'tabler:ai',
|
||||||
message: 'github.com/YunaiV/yudao-cloud',
|
message: 'kshan.yootron.net',
|
||||||
personal: 'Spring Cloud 微服务架构',
|
url: '/ai/chat',
|
||||||
time: new Date('2025-04-05'),
|
personal: '客服/内容/运营 AI 工作台',
|
||||||
color: '#1890ff'
|
time: new Date('2026-04-12'),
|
||||||
|
color: '#7c3aed'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'yudao-ui-admin-vben',
|
name: '订单履约中心',
|
||||||
icon: 'devicon:antdesign',
|
icon: 'solar:box-outline',
|
||||||
message: 'github.com/yudaocode/yudao-ui-admin-vben',
|
message: 'kshan.yootron.net',
|
||||||
personal: 'Vue3 + vben5(antd) 管理后台',
|
url: '/mall/trade/order',
|
||||||
time: new Date('2025-05-06'),
|
personal: '订单、发货、售后与履约监控',
|
||||||
color: '#e18525'
|
time: new Date('2026-04-13'),
|
||||||
|
color: '#14b8a6'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'yudao-ui-admin-uniapp',
|
name: '会员增长中心',
|
||||||
icon: 'ant-design:mobile',
|
icon: 'mdi:account-group-outline',
|
||||||
message: 'github.com/yudaocode/yudao-ui-admin-uniapp',
|
message: 'kshan.yootron.net',
|
||||||
personal: 'Vue3 + uniapp 管理手机端',
|
url: '/member/user',
|
||||||
time: new Date('2025-06-01'),
|
personal: '会员分层、积分、营销活动',
|
||||||
color: '#2979ff'
|
time: new Date('2026-04-14'),
|
||||||
|
color: '#f59e0b'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '数据与报表中心',
|
||||||
|
icon: 'carbon:chart-line-data',
|
||||||
|
message: 'kshan.yootron.net',
|
||||||
|
url: '/report/jmreport',
|
||||||
|
personal: '经营数据、渠道分析、复盘报表',
|
||||||
|
time: new Date('2026-04-15'),
|
||||||
|
color: '#0ea5e9'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
projects = Object.assign(projects, data)
|
projects = Object.assign(projects, data)
|
||||||
|
|
@ -278,27 +286,27 @@ let notice = reactive<Notice[]>([])
|
||||||
const getNotice = async () => {
|
const getNotice = async () => {
|
||||||
const data = [
|
const data = [
|
||||||
{
|
{
|
||||||
title: '系统支持 JDK 8/17/21,Vue 2/3',
|
title: '空山 V1 联调已打通,管理端与后端可稳定登录',
|
||||||
type: '技术兼容性',
|
type: '项目进展',
|
||||||
keys: ['JDK', 'Vue'],
|
keys: ['联调', '登录'],
|
||||||
date: new Date()
|
date: new Date()
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '后端提供 Spring Boot 2.7/3.2 + Cloud 双架构',
|
title: 'AI+电商看板上线,支持客服与运营场景快速入口',
|
||||||
type: '架构灵活性',
|
type: '功能更新',
|
||||||
keys: ['Boot', 'Cloud'],
|
keys: ['AI', '运营'],
|
||||||
date: new Date()
|
date: new Date()
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '全部开源,个人与企业可 100% 直接使用,无需授权',
|
title: '本周重点:商品中心、订单履约、会员体系数据校验',
|
||||||
type: '开源免授权',
|
type: '本周任务',
|
||||||
keys: ['无需授权'],
|
keys: ['商品', '订单'],
|
||||||
date: new Date()
|
date: new Date()
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '国内使用最广泛的快速开发平台,远超 10w+ 企业使用',
|
title: '研发协同规范:需求、问题、上线节奏统一在任务平台跟踪',
|
||||||
type: '广泛企业认可',
|
type: '协作规范',
|
||||||
keys: ['最广泛', '10w+'],
|
keys: ['需求', '问题反馈'],
|
||||||
date: new Date()
|
date: new Date()
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -317,7 +325,7 @@ const getShortcut = async () => {
|
||||||
color: '#1fdaca'
|
color: '#1fdaca'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: '商城中心',
|
name: '商品中心',
|
||||||
icon: 'ep:shop',
|
icon: 'ep:shop',
|
||||||
url: '/mall/home',
|
url: '/mall/home',
|
||||||
color: '#ff6b6b'
|
color: '#ff6b6b'
|
||||||
|
|
@ -329,21 +337,21 @@ const getShortcut = async () => {
|
||||||
color: '#7c3aed'
|
color: '#7c3aed'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'ERP 系统',
|
name: '订单履约',
|
||||||
icon: 'simple-icons:erpnext',
|
icon: 'simple-icons:erpnext',
|
||||||
url: '/erp/home',
|
url: '/erp/home',
|
||||||
color: '#3fb27f'
|
color: '#3fb27f'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'CRM 系统',
|
name: '会员运营',
|
||||||
icon: 'simple-icons:civicrm',
|
icon: 'simple-icons:civicrm',
|
||||||
url: '/crm/backlog',
|
url: '/crm/backlog',
|
||||||
color: '#4daf1bc9'
|
color: '#4daf1bc9'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'IoT 物联网',
|
name: '数据看板',
|
||||||
icon: 'fa-solid:hdd',
|
icon: 'mdi:chart-bar',
|
||||||
url: '/iot/home',
|
url: '/report/jmreport',
|
||||||
color: '#1a73e8'
|
color: '#1a73e8'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -410,8 +418,12 @@ const getAllApi = async () => {
|
||||||
loading.value = false
|
loading.value = false
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleProjectClick = (message: string) => {
|
const handleProjectClick = (url: string) => {
|
||||||
window.open(`https://${message}`, '_blank')
|
if (url.startsWith('http://') || url.startsWith('https://')) {
|
||||||
|
window.open(url, '_blank')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
router.push(url)
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleShortcutClick = (url: string) => {
|
const handleShortcutClick = (url: string) => {
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ export type Project = {
|
||||||
name: string
|
name: string
|
||||||
icon: string
|
icon: string
|
||||||
message: string
|
message: string
|
||||||
|
url: string
|
||||||
personal: string
|
personal: string
|
||||||
time: Date | number | string
|
time: Date | number | string
|
||||||
color: string
|
color: string
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,11 @@
|
||||||
>
|
>
|
||||||
<div class="relative mx-auto h-full flex">
|
<div class="relative mx-auto h-full flex">
|
||||||
<div
|
<div
|
||||||
:class="`${prefixCls}__left flex-1 bg-gray-500 bg-opacity-20 relative p-30px lt-xl:hidden overflow-x-hidden overflow-y-auto`"
|
:class="`${prefixCls}__left flex-1 relative p-30px lt-xl:hidden overflow-x-hidden overflow-y-auto`"
|
||||||
>
|
>
|
||||||
<!-- 左上角的 logo + 系统标题 -->
|
<!-- 左上角的 logo + 系统标题 -->
|
||||||
<div class="relative flex items-center text-white">
|
<div class="relative flex items-center text-white">
|
||||||
<img alt="" class="mr-10px h-48px w-48px" src="@/assets/imgs/logo.png" />
|
<img alt="" class="mr-10px h-48px w-48px" src="/brand-logo.png" />
|
||||||
<span class="text-20px font-bold">{{ underlineToHump(appStore.getTitle) }}</span>
|
<span class="text-20px font-bold">{{ underlineToHump(appStore.getTitle) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<!-- 左边的背景图 + 欢迎语 -->
|
<!-- 左边的背景图 + 欢迎语 -->
|
||||||
|
|
@ -19,9 +19,9 @@
|
||||||
enter-active-class="animate__animated animate__bounceInLeft"
|
enter-active-class="animate__animated animate__bounceInLeft"
|
||||||
tag="div"
|
tag="div"
|
||||||
>
|
>
|
||||||
<img key="1" alt="" class="w-350px" src="@/assets/svgs/login-box-bg.svg" />
|
<img key="1" alt="" class="w-350px rounded-16px shadow-lg" src="@/assets/svgs/login-box-bg.svg" />
|
||||||
<div key="2" class="text-3xl text-white">{{ t('login.welcome') }}</div>
|
<div key="2" class="text-3xl text-white font-700">{{ t('login.welcome') }}</div>
|
||||||
<div key="3" class="mt-5 text-14px font-normal text-white">
|
<div key="3" class="mt-5 text-14px font-normal text-white/90">
|
||||||
{{ t('login.message') }}
|
{{ t('login.message') }}
|
||||||
</div>
|
</div>
|
||||||
</TransitionGroup>
|
</TransitionGroup>
|
||||||
|
|
@ -36,7 +36,7 @@
|
||||||
style="color: var(--el-text-color-primary);"
|
style="color: var(--el-text-color-primary);"
|
||||||
>
|
>
|
||||||
<div class="flex items-center at-2xl:hidden at-xl:hidden">
|
<div class="flex items-center at-2xl:hidden at-xl:hidden">
|
||||||
<img alt="" class="mr-10px h-48px w-48px" src="@/assets/imgs/logo.png" />
|
<img alt="" class="mr-10px h-48px w-48px" src="/brand-logo.png" />
|
||||||
<span class="text-20px font-bold" >{{ underlineToHump(appStore.getTitle) }}</span>
|
<span class="text-20px font-bold" >{{ underlineToHump(appStore.getTitle) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-end space-x-10px h-48px">
|
<div class="flex items-center justify-end space-x-10px h-48px">
|
||||||
|
|
@ -92,6 +92,8 @@ $prefix-cls: #{$namespace}-login;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
|
||||||
&__left {
|
&__left {
|
||||||
|
background: linear-gradient(135deg, #0f4c9a 0%, #1e88e5 55%, #46b3ff 100%);
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
|
|
@ -102,6 +104,7 @@ $prefix-cls: #{$namespace}-login;
|
||||||
background-image: url('@/assets/svgs/login-bg.svg');
|
background-image: url('@/assets/svgs/login-bg.svg');
|
||||||
background-position: center;
|
background-position: center;
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
|
opacity: 0.18;
|
||||||
content: '';
|
content: '';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
>
|
>
|
||||||
<!-- 左上角的 logo + 系统标题 -->
|
<!-- 左上角的 logo + 系统标题 -->
|
||||||
<div class="relative flex items-center text-white">
|
<div class="relative flex items-center text-white">
|
||||||
<img alt="" class="mr-10px h-48px w-48px" src="@/assets/imgs/logo.png" />
|
<img alt="" class="mr-10px h-48px w-48px" src="/brand-logo.png" />
|
||||||
<span class="text-20px font-bold">{{ underlineToHump(appStore.getTitle) }}</span>
|
<span class="text-20px font-bold">{{ underlineToHump(appStore.getTitle) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<!-- 左边的背景图 + 欢迎语 -->
|
<!-- 左边的背景图 + 欢迎语 -->
|
||||||
|
|
@ -35,7 +35,7 @@
|
||||||
class="flex items-center justify-between text-white at-2xl:justify-end at-xl:justify-end"
|
class="flex items-center justify-between text-white at-2xl:justify-end at-xl:justify-end"
|
||||||
>
|
>
|
||||||
<div class="flex items-center at-2xl:hidden at-xl:hidden">
|
<div class="flex items-center at-2xl:hidden at-xl:hidden">
|
||||||
<img alt="" class="mr-10px h-48px w-48px" src="@/assets/imgs/logo.png" />
|
<img alt="" class="mr-10px h-48px w-48px" src="/brand-logo.png" />
|
||||||
<span class="text-20px font-bold">{{ underlineToHump(appStore.getTitle) }}</span>
|
<span class="text-20px font-bold">{{ underlineToHump(appStore.getTitle) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center justify-end space-x-10px h-48px">
|
<div class="flex items-center justify-end space-x-10px h-48px">
|
||||||
|
|
@ -199,7 +199,7 @@ const loginData = reactive({
|
||||||
captchaEnable: import.meta.env.VITE_APP_CAPTCHA_ENABLE !== 'false',
|
captchaEnable: import.meta.env.VITE_APP_CAPTCHA_ENABLE !== 'false',
|
||||||
tenantEnable: import.meta.env.VITE_APP_TENANT_ENABLE !== 'false',
|
tenantEnable: import.meta.env.VITE_APP_TENANT_ENABLE !== 'false',
|
||||||
loginForm: {
|
loginForm: {
|
||||||
tenantName: '芋道源码',
|
tenantName: '空山平台',
|
||||||
username: 'admin',
|
username: 'admin',
|
||||||
password: 'admin123',
|
password: 'admin123',
|
||||||
captchaVerification: '',
|
captchaVerification: '',
|
||||||
|
|
|
||||||
|
|
@ -129,17 +129,17 @@
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-divider content-position="center">萌新必读</el-divider>
|
<el-divider content-position="center">空山项目入口</el-divider>
|
||||||
<el-col :span="24" class="px-10px">
|
<el-col :span="24" class="px-10px">
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<div class="w-full flex justify-between">
|
<div class="w-full flex justify-between">
|
||||||
<el-link href="https://doc.iocoder.cn/" target="_blank">📚开发指南</el-link>
|
<el-link href="http://m.swelife.cn/#/pages/index" target="_blank">🏠项目官网</el-link>
|
||||||
<el-link href="https://doc.iocoder.cn/video/" target="_blank">🔥视频教程</el-link>
|
<el-link href="http://127.0.0.1:5173/" target="_blank">🧭管理端入口</el-link>
|
||||||
<el-link href="https://www.iocoder.cn/Interview/good-collection/" target="_blank">
|
<el-link href="https://github.com/" target="_blank">
|
||||||
⚡面试手册
|
📋需求与任务
|
||||||
</el-link>
|
</el-link>
|
||||||
<el-link href="http://static.yudao.iocoder.cn/mp/Aix9975.jpeg" target="_blank">
|
<el-link href="https://github.com/" target="_blank">
|
||||||
🤝外包咨询
|
🛠问题反馈
|
||||||
</el-link>
|
</el-link>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
|
|
||||||
|
|
@ -133,7 +133,7 @@ const loginData = reactive({
|
||||||
},
|
},
|
||||||
loginForm: {
|
loginForm: {
|
||||||
uuid: '',
|
uuid: '',
|
||||||
tenantName: '芋道源码',
|
tenantName: '空山平台',
|
||||||
mobileNumber: '',
|
mobileNumber: '',
|
||||||
code: ''
|
code: ''
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
</el-row>
|
</el-row>
|
||||||
</template>
|
</template>
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import logoImg from '@/assets/imgs/logo.png'
|
const logoImg = '/brand-logo.png'
|
||||||
|
|
||||||
import LoginFormTitle from './LoginFormTitle.vue'
|
import LoginFormTitle from './LoginFormTitle.vue'
|
||||||
import { LoginStateEnum, useLoginState } from './useLogin'
|
import { LoginStateEnum, useLoginState } from './useLogin'
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<!-- TODO @芋艿:可优化,对标 vben 版本 -->
|
<!-- TODO @项目组:可优化,对标 vben 版本 -->
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<el-card class="user w-1/3" shadow="hover">
|
<el-card class="user w-1/3" shadow="hover">
|
||||||
<template #header>
|
<template #header>
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
<div class="relative flex flex-row justify-center w-full h-full">
|
<div class="relative flex flex-row justify-center w-full h-full">
|
||||||
<!-- title -->
|
<!-- title -->
|
||||||
<div class="flex flex-col justify-center">
|
<div class="flex flex-col justify-center">
|
||||||
<div class="text-28px font-bold text-center">芋道 AI</div>
|
<div class="text-28px font-bold text-center">空山 AI</div>
|
||||||
<div class="flex flex-row flex-wrap items-center justify-center w-460px mt-20px">
|
<div class="flex flex-row flex-wrap items-center justify-center w-460px mt-20px">
|
||||||
<div
|
<div
|
||||||
class="flex justify-center w-180px leading-50px border border-solid border-[#e4e4e4] rounded-10px m-10px cursor-pointer hover:bg-[rgba(243,243,243,0.73)]"
|
class="flex justify-center w-180px leading-50px border border-solid border-[#e4e4e4] rounded-10px m-10px cursor-pointer hover:bg-[rgba(243,243,243,0.73)]"
|
||||||
|
|
@ -20,10 +20,16 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
const promptList = [
|
const promptList = [
|
||||||
{
|
{
|
||||||
prompt: '今天气怎么样?'
|
prompt: '帮我分析本周店铺转化率下降的可能原因'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
prompt: '写一首好听的诗歌?'
|
prompt: '给我生成一份大促活动商品文案与主图卖点'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prompt: '根据近30天订单数据,给出会员复购提升建议'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
prompt: '为新上架商品生成客服常见问题回复话术'
|
||||||
}
|
}
|
||||||
] // prompt 列表
|
] // prompt 列表
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@
|
||||||
|
|
||||||
<!-- 底部 -->
|
<!-- 底部 -->
|
||||||
<el-footer class="flex flex-col !h-auto !p-0">
|
<el-footer class="flex flex-col !h-auto !p-0">
|
||||||
<!-- TODO @芋艿:这块要想办法迁移下! -->
|
<!-- TODO @项目组:这块要想办法迁移下! -->
|
||||||
<form
|
<form
|
||||||
class="mt-10px mx-20px mb-20px py-9px px-10px flex flex-col h-auto rounded-10px"
|
class="mt-10px mx-20px mb-20px py-9px px-10px flex flex-col h-auto rounded-10px"
|
||||||
style="border: 1px solid var(--el-border-color)"
|
style="border: 1px solid var(--el-border-color)"
|
||||||
|
|
@ -393,7 +393,7 @@ const handlePromptInput = (event) => {
|
||||||
isComposing.value = false
|
isComposing.value = false
|
||||||
}, 400)
|
}, 400)
|
||||||
}
|
}
|
||||||
// TODO @芋艿:是不是可以通过 @keydown.enter、@keydown.shift.enter 来实现,回车发送、shift+回车换行;主要看看,是不是可以简化 isComposing 相关的逻辑
|
// TODO @项目组:是不是可以通过 @keydown.enter、@keydown.shift.enter 来实现,回车发送、shift+回车换行;主要看看,是不是可以简化 isComposing 相关的逻辑
|
||||||
const onCompositionstart = () => {
|
const onCompositionstart = () => {
|
||||||
isComposing.value = true
|
isComposing.value = true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/**
|
/**
|
||||||
* Created by 芋道源码
|
* Created by 空山团队
|
||||||
*
|
*
|
||||||
* AI 枚举类
|
* AI 枚举类
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/**
|
/**
|
||||||
* Created by 芋道源码
|
* Created by 空山团队
|
||||||
*
|
*
|
||||||
* AI 枚举类
|
* AI 枚举类
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -812,7 +812,7 @@ const handleAudit = async (pass: boolean, formRef: FormInstance | undefined) =>
|
||||||
data.signPicUrl = approveReasonForm.signPicUrl
|
data.signPicUrl = approveReasonForm.signPicUrl
|
||||||
}
|
}
|
||||||
// 多表单处理,并且有额外的 approveForm 表单,需要校验 + 拼接到 data 表单里提交
|
// 多表单处理,并且有额外的 approveForm 表单,需要校验 + 拼接到 data 表单里提交
|
||||||
// TODO 芋艿 任务有多表单这里要如何处理,会和可编辑的字段冲突
|
// TODO 项目组 任务有多表单这里要如何处理,会和可编辑的字段冲突
|
||||||
const formCreateApi = approveFormFApi.value
|
const formCreateApi = approveFormFApi.value
|
||||||
if (Object.keys(formCreateApi)?.length > 0) {
|
if (Object.keys(formCreateApi)?.length > 0) {
|
||||||
await formCreateApi.validate()
|
await formCreateApi.validate()
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@
|
||||||
<!-- 列表 -->
|
<!-- 列表 -->
|
||||||
<ContentWrap>
|
<ContentWrap>
|
||||||
<el-table v-loading="loading" :data="list">
|
<el-table v-loading="loading" :data="list">
|
||||||
<!-- TODO 芋艿:增加摘要 -->
|
<!-- TODO 项目组:增加摘要 -->
|
||||||
<el-table-column align="center" label="流程名" prop="processInstanceName" min-width="180" />
|
<el-table-column align="center" label="流程名" prop="processInstanceName" min-width="180" />
|
||||||
<el-table-column label="摘要" prop="summary" min-width="180">
|
<el-table-column label="摘要" prop="summary" min-width="180">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
|
|
|
||||||
|
|
@ -389,6 +389,6 @@ onMounted(async () => {
|
||||||
userList.value = await UserApi.getSimpleUserList()
|
userList.value = await UserApi.getSimpleUserList()
|
||||||
accountList.value = await AccountApi.getAccountSimpleList()
|
accountList.value = await AccountApi.getAccountSimpleList()
|
||||||
})
|
})
|
||||||
// TODO 芋艿:可优化功能:列表界面,支持导入
|
// TODO 项目组:可优化功能:列表界面,支持导入
|
||||||
// TODO 芋艿:可优化功能:详情界面,支持打印
|
// TODO 项目组:可优化功能:详情界面,支持打印
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -389,6 +389,6 @@ onMounted(async () => {
|
||||||
userList.value = await UserApi.getSimpleUserList()
|
userList.value = await UserApi.getSimpleUserList()
|
||||||
accountList.value = await AccountApi.getAccountSimpleList()
|
accountList.value = await AccountApi.getAccountSimpleList()
|
||||||
})
|
})
|
||||||
// TODO 芋艿:可优化功能:列表界面,支持导入
|
// TODO 项目组:可优化功能:列表界面,支持导入
|
||||||
// TODO 芋艿:可优化功能:详情界面,支持打印
|
// TODO 项目组:可优化功能:详情界面,支持打印
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -438,6 +438,6 @@ onMounted(async () => {
|
||||||
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
|
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
|
||||||
accountList.value = await AccountApi.getAccountSimpleList()
|
accountList.value = await AccountApi.getAccountSimpleList()
|
||||||
})
|
})
|
||||||
// TODO 芋艿:可优化功能:列表界面,支持导入
|
// TODO 项目组:可优化功能:列表界面,支持导入
|
||||||
// TODO 芋艿:可优化功能:详情界面,支持打印
|
// TODO 项目组:可优化功能:详情界面,支持打印
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -402,6 +402,6 @@ onMounted(async () => {
|
||||||
supplierList.value = await SupplierApi.getSupplierSimpleList()
|
supplierList.value = await SupplierApi.getSupplierSimpleList()
|
||||||
userList.value = await UserApi.getSimpleUserList()
|
userList.value = await UserApi.getSimpleUserList()
|
||||||
})
|
})
|
||||||
// TODO 芋艿:可优化功能:列表界面,支持导入
|
// TODO 项目组:可优化功能:列表界面,支持导入
|
||||||
// TODO 芋艿:可优化功能:详情界面,支持打印
|
// TODO 项目组:可优化功能:详情界面,支持打印
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -438,6 +438,6 @@ onMounted(async () => {
|
||||||
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
|
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
|
||||||
accountList.value = await AccountApi.getAccountSimpleList()
|
accountList.value = await AccountApi.getAccountSimpleList()
|
||||||
})
|
})
|
||||||
// TODO 芋艿:可优化功能:列表界面,支持导入
|
// TODO 项目组:可优化功能:列表界面,支持导入
|
||||||
// TODO 芋艿:可优化功能:详情界面,支持打印
|
// TODO 项目组:可优化功能:详情界面,支持打印
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -402,6 +402,6 @@ onMounted(async () => {
|
||||||
customerList.value = await CustomerApi.getCustomerSimpleList()
|
customerList.value = await CustomerApi.getCustomerSimpleList()
|
||||||
userList.value = await UserApi.getSimpleUserList()
|
userList.value = await UserApi.getSimpleUserList()
|
||||||
})
|
})
|
||||||
// TODO 芋艿:可优化功能:列表界面,支持导入
|
// TODO 项目组:可优化功能:列表界面,支持导入
|
||||||
// TODO 芋艿:可优化功能:详情界面,支持打印
|
// TODO 项目组:可优化功能:详情界面,支持打印
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -433,6 +433,6 @@ onMounted(async () => {
|
||||||
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
|
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
|
||||||
accountList.value = await AccountApi.getAccountSimpleList()
|
accountList.value = await AccountApi.getAccountSimpleList()
|
||||||
})
|
})
|
||||||
// TODO 芋艿:可优化功能:列表界面,支持导入
|
// TODO 项目组:可优化功能:列表界面,支持导入
|
||||||
// TODO 芋艿:可优化功能:详情界面,支持打印
|
// TODO 项目组:可优化功能:详情界面,支持打印
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -438,6 +438,6 @@ onMounted(async () => {
|
||||||
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
|
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
|
||||||
accountList.value = await AccountApi.getAccountSimpleList()
|
accountList.value = await AccountApi.getAccountSimpleList()
|
||||||
})
|
})
|
||||||
// TODO 芋艿:可优化功能:列表界面,支持导入
|
// TODO 项目组:可优化功能:列表界面,支持导入
|
||||||
// TODO 芋艿:可优化功能:详情界面,支持打印
|
// TODO 项目组:可优化功能:详情界面,支持打印
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -354,6 +354,6 @@ onMounted(async () => {
|
||||||
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
|
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
|
||||||
userList.value = await UserApi.getSimpleUserList()
|
userList.value = await UserApi.getSimpleUserList()
|
||||||
})
|
})
|
||||||
// TODO 芋艿:可优化功能:列表界面,支持导入
|
// TODO 项目组:可优化功能:列表界面,支持导入
|
||||||
// TODO 芋艿:可优化功能:详情界面,支持打印
|
// TODO 项目组:可优化功能:详情界面,支持打印
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -371,6 +371,6 @@ onMounted(async () => {
|
||||||
supplierList.value = await SupplierApi.getSupplierSimpleList()
|
supplierList.value = await SupplierApi.getSupplierSimpleList()
|
||||||
userList.value = await UserApi.getSimpleUserList()
|
userList.value = await UserApi.getSimpleUserList()
|
||||||
})
|
})
|
||||||
// TODO 芋艿:可优化功能:列表界面,支持导入
|
// TODO 项目组:可优化功能:列表界面,支持导入
|
||||||
// TODO 芋艿:可优化功能:详情界面,支持打印
|
// TODO 项目组:可优化功能:详情界面,支持打印
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -354,6 +354,6 @@ onMounted(async () => {
|
||||||
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
|
warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
|
||||||
userList.value = await UserApi.getSimpleUserList()
|
userList.value = await UserApi.getSimpleUserList()
|
||||||
})
|
})
|
||||||
// TODO 芋艿:可优化功能:列表界面,支持导入
|
// TODO 项目组:可优化功能:列表界面,支持导入
|
||||||
// TODO 芋艿:可优化功能:详情界面,支持打印
|
// TODO 项目组:可优化功能:详情界面,支持打印
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -373,6 +373,6 @@ onMounted(async () => {
|
||||||
customerList.value = await CustomerApi.getCustomerSimpleList()
|
customerList.value = await CustomerApi.getCustomerSimpleList()
|
||||||
userList.value = await UserApi.getSimpleUserList()
|
userList.value = await UserApi.getSimpleUserList()
|
||||||
})
|
})
|
||||||
// TODO 芋艿:可优化功能:列表界面,支持导入
|
// TODO 项目组:可优化功能:列表界面,支持导入
|
||||||
// TODO 芋艿:可优化功能:详情界面,支持打印
|
// TODO 项目组:可优化功能:详情界面,支持打印
|
||||||
</script>
|
</script>
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-button-group>
|
</el-button-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<!-- TODO @芋艿:参考阿里云,实时刷新! -->
|
<!-- TODO @项目组:参考阿里云,实时刷新! -->
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-switch
|
<el-switch
|
||||||
size="large"
|
size="large"
|
||||||
|
|
|
||||||
|
|
@ -199,7 +199,7 @@ const openForm = (type: string, id?: number) => {
|
||||||
formRef.value.open(type, id)
|
formRef.value.open(type, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO 芋艿:这里要改下
|
// TODO 项目组:这里要改下
|
||||||
/** 关闭按钮操作 */
|
/** 关闭按钮操作 */
|
||||||
const handleClose = async (id: number) => {
|
const handleClose = async (id: number) => {
|
||||||
try {
|
try {
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
<!-- TODO 芋艿:这块后续抽个独立的组件出来 -->
|
<!-- TODO 项目组:这块后续抽个独立的组件出来 -->
|
||||||
<template>
|
<template>
|
||||||
<Dialog :title="dialogTitle" v-model="dialogVisible" width="60%">
|
<Dialog :title="dialogTitle" v-model="dialogVisible" width="60%">
|
||||||
<el-row :gutter="20">
|
<el-row :gutter="20">
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@
|
||||||
<el-table-column label="描述" align="center" prop="description" />
|
<el-table-column label="描述" align="center" prop="description" />
|
||||||
<el-table-column label="业务编号" align="center" prop="bizId" width="150px" />
|
<el-table-column label="业务编号" align="center" prop="bizId" width="150px" />
|
||||||
<el-table-column label="业务类型" align="center" prop="bizType" width="150px">
|
<el-table-column label="业务类型" align="center" prop="bizType" width="150px">
|
||||||
<!-- TODO 芋艿:此处应创建对应的字典 -->
|
<!-- TODO 项目组:此处应创建对应的字典 -->
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :type="DICT_TYPE.MEMBER_EXPERIENCE_BIZ_TYPE" :value="scope.row.bizType" />
|
<dict-tag :type="DICT_TYPE.MEMBER_EXPERIENCE_BIZ_TYPE" :value="scope.row.bizType" />
|
||||||
</template>
|
</template>
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@
|
||||||
</el-card>
|
</el-card>
|
||||||
</el-col>
|
</el-col>
|
||||||
<!-- 下边:账户明细 -->
|
<!-- 下边:账户明细 -->
|
||||||
<!-- TODO 芋艿:【订单管理】【售后管理】【收藏记录】-->
|
<!-- TODO 项目组:【订单管理】【售后管理】【收藏记录】-->
|
||||||
<el-card header="账户明细" shadow="never" style="width: 100%; margin-top: 20px">
|
<el-card header="账户明细" shadow="never" style="width: 100%; margin-top: 20px">
|
||||||
<template #header>
|
<template #header>
|
||||||
<CardTitle title="账户明细" />
|
<CardTitle title="账户明细" />
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<!--
|
<!--
|
||||||
- Copyright (C) 2018-2019
|
- Copyright (C) 2018-2019
|
||||||
- All rights reserved, Designed By www.joolun.com
|
- All rights reserved, Designed By www.joolun.com
|
||||||
芋道源码:
|
空山团队:
|
||||||
① 移除 avue 组件,使用 ElementUI 原生组件
|
① 移除 avue 组件,使用 ElementUI 原生组件
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<!--
|
<!--
|
||||||
- Copyright (C) 2018-2019
|
- Copyright (C) 2018-2019
|
||||||
- All rights reserved, Designed By www.joolun.com
|
- All rights reserved, Designed By www.joolun.com
|
||||||
芋道源码:
|
空山团队:
|
||||||
① 移除暂时用不到的 websocket
|
① 移除暂时用不到的 websocket
|
||||||
② 代码优化,补充注释,提升阅读性
|
② 代码优化,补充注释,提升阅读性
|
||||||
-->
|
-->
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
- Copyright (C) 2018-2019
|
- Copyright (C) 2018-2019
|
||||||
- All rights reserved, Designed By www.joolun.com
|
- All rights reserved, Designed By www.joolun.com
|
||||||
【微信消息 - 图文】
|
【微信消息 - 图文】
|
||||||
芋道源码:
|
空山团队:
|
||||||
① 代码优化,补充注释,提升阅读性
|
① 代码优化,补充注释,提升阅读性
|
||||||
-->
|
-->
|
||||||
<template>
|
<template>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<!--
|
<!--
|
||||||
- Copyright (C) 2018-2019
|
- Copyright (C) 2018-2019
|
||||||
- All rights reserved, Designed By www.joolun.com
|
- All rights reserved, Designed By www.joolun.com
|
||||||
芋道源码:
|
空山团队:
|
||||||
① 移除多余的 rep 为前缀的变量,让 message 消息更简单
|
① 移除多余的 rep 为前缀的变量,让 message 消息更简单
|
||||||
② 代码优化,补充注释,提升阅读性
|
② 代码优化,补充注释,提升阅读性
|
||||||
③ 优化消息的临时缓存策略,发送消息时,只清理被发送消息的 tab,不会强制切回到 text 输入
|
③ 优化消息的临时缓存策略,发送消息时,只清理被发送消息的 tab,不会强制切回到 text 输入
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
- Copyright (C) 2018-2019
|
- Copyright (C) 2018-2019
|
||||||
- All rights reserved, Designed By www.joolun.com
|
- All rights reserved, Designed By www.joolun.com
|
||||||
【微信消息 - 视频】
|
【微信消息 - 视频】
|
||||||
芋道源码:
|
空山团队:
|
||||||
① bug 修复:
|
① bug 修复:
|
||||||
1)joolun 的做法:使用 mediaId 从微信公众号,下载对应的 mp4 素材,从而播放内容;
|
1)joolun 的做法:使用 mediaId 从微信公众号,下载对应的 mp4 素材,从而播放内容;
|
||||||
存在的问题:mediaId 有效期是 3 天,超过时间后无法播放
|
存在的问题:mediaId 有效期是 3 天,超过时间后无法播放
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
- Copyright (C) 2018-2019
|
- Copyright (C) 2018-2019
|
||||||
- All rights reserved, Designed By www.joolun.com
|
- All rights reserved, Designed By www.joolun.com
|
||||||
【微信消息 - 语音】
|
【微信消息 - 语音】
|
||||||
芋道源码:
|
空山团队:
|
||||||
① bug 修复:
|
① bug 修复:
|
||||||
1)joolun 的做法:使用 mediaId 从微信公众号,下载对应的 mp4 素材,从而播放内容;
|
1)joolun 的做法:使用 mediaId 从微信公众号,下载对应的 mp4 素材,从而播放内容;
|
||||||
存在的问题:mediaId 有效期是 3 天,超过时间后无法播放
|
存在的问题:mediaId 有效期是 3 天,超过时间后无法播放
|
||||||
|
|
@ -84,7 +84,7 @@ const amrStop = () => {
|
||||||
playing.value = false
|
playing.value = false
|
||||||
amr.value.stop()
|
amr.value.stop()
|
||||||
}
|
}
|
||||||
// TODO 芋艿:下面样式有点问题
|
// TODO 项目组:下面样式有点问题
|
||||||
</script>
|
</script>
|
||||||
<style lang="scss" scoped>
|
<style lang="scss" scoped>
|
||||||
.wx-voice-div {
|
.wx-voice-div {
|
||||||
|
|
|
||||||
|
|
@ -63,7 +63,7 @@ const emit = defineEmits<{
|
||||||
column-count: 5;
|
column-count: 5;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
|
|
||||||
/* 芋道源码:增加 10px,避免顶着上面 */
|
/* 空山团队:增加 10px,避免顶着上面 */
|
||||||
}
|
}
|
||||||
|
|
||||||
.waterfall-item {
|
.waterfall-item {
|
||||||
|
|
|
||||||
|
|
@ -267,7 +267,7 @@ const menuListToBackend = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 将前端的 menu,转换成后端接收的 menu
|
// 将前端的 menu,转换成后端接收的 menu
|
||||||
// TODO: @芋艿,需要根据后台API删除不需要的字段
|
// TODO: @项目组,需要根据后台API删除不需要的字段
|
||||||
const menuToBackend = (menu: any) => {
|
const menuToBackend = (menu: any) => {
|
||||||
const result = {
|
const result = {
|
||||||
...menu,
|
...menu,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue