diff --git a/.env.development b/.env.development
index 08ed73986d37ccf001ad99151f47556fe3cbf8ca..b8bd007b170629ae5eaa317287fa2f08cb44c584 100644
--- a/.env.development
+++ b/.env.development
@@ -1,9 +1,14 @@
# 环境变量 (命名必须以 VITE_ 开头)
# 接口前缀
VITE_API_PREFIX = '/dev-api'
+VITE_WECHAT_API_PREFIX = ''
+
# 接口地址
-VITE_API_BASE_URL = 'http://localhost:8000'
+# VITE_API_BASE_URL = 'http://localhost:18000'
+# VITE_API_BASE_URL = 'http://139.159.135.57:18000'
+VITE_API_BASE_URL = 'http://120.55.80.212:18000'
+VITE_WECHAT_API_BASE_URL = 'https://qyapi.weixin.qq.com'
# 接口地址 (WebSocket)
VITE_API_WS_URL = 'ws://localhost:8000'
@@ -18,4 +23,12 @@ VITE_OPEN_DEVTOOLS = false
VITE_APP_SETTING = true
# 客户端ID
-VITE_CLIENT_ID = 'ef51c9a3e9046c4f2ea45142c8a8344a'
\ No newline at end of file
+VITE_CLIENT_ID = 'ef51c9a3e9046c4f2ea45142c8a8344a'
+
+# 钉钉信息
+VITE_DINGDING_CLIENT_ID = 'ding1b3cit9z6hplgzot'
+VITE_DINGDING_CORP_ID = 'dingc75227ef1c528388ffe93478753d9884'
+
+# 强制识别为钉钉移动端
+# 设置true后,登录后,请访问 /business/main
+VITE_IS_DINGTALK_MOBILE = true
\ No newline at end of file
diff --git a/.env.production b/.env.production
index debf235197cae333d005eab7bfe30a31e53b3feb..48b828a1c4abe71764c73d35abcf1979e5f772d3 100644
--- a/.env.production
+++ b/.env.production
@@ -4,8 +4,10 @@
VITE_BUILD_MOCK = false
# 接口地址
-VITE_API_BASE_URL = 'https://api.continew.top'
+# VITE_API_BASE_URL = 'https://api.continew.top'
+VITE_API_BASE_URL = '/prod-api'
VITE_API_WS_URL = 'wss://api.continew.top'
+VITE_WECHAT_API_BASE_URL = 'https://qyapi.weixin.qq.com'
# 地址前缀
VITE_BASE = '/'
@@ -14,4 +16,8 @@ VITE_BASE = '/'
VITE_APP_SETTING = true
# 客户端ID
-VITE_CLIENT_ID = 'ef51c9a3e9046c4f2ea45142c8a8344a'
\ No newline at end of file
+VITE_CLIENT_ID = 'ef51c9a3e9046c4f2ea45142c8a8344a'
+
+# 钉钉信息
+VITE_DINGDING_CLIENT_ID = 'ding1b3cit9z6hplgzot'
+VITE_DINGDING_CORP_ID = 'dingc75227ef1c528388ffe93478753d9884'
diff --git a/.env.test b/.env.test
index 03671398cae0135c58e9ebeccde576984d8d0b5f..4282100349cbec7a1e6c7da5f0243b8fa8f82345 100644
--- a/.env.test
+++ b/.env.test
@@ -20,3 +20,7 @@ VITE_APP_SETTING = false
# 客户端ID
VITE_CLIENT_ID = 'ef51c9a3e9046c4f2ea45142c8a8344a'
+
+# 钉钉信息
+VITE_DINGDING_CLIENT_ID = 'ding1b3cit9z6hplgzot'
+VITE_DINGDING_CORP_ID = 'dingc75227ef1c528388ffe93478753d9884'
diff --git a/.workflow/branch-pipeline.yml b/.workflow/branch-pipeline.yml
new file mode 100644
index 0000000000000000000000000000000000000000..2d229fd7703cd769ed0268f5c32728a1cd63a597
--- /dev/null
+++ b/.workflow/branch-pipeline.yml
@@ -0,0 +1,96 @@
+version: '1.0'
+name: branch-pipeline
+displayName: BranchPipeline
+triggers:
+ trigger: manual
+ push:
+ branches:
+ include:
+ - dev
+ exclude:
+ - master
+stages:
+ - name: compile
+ displayName: 编译
+ strategy: naturally
+ trigger: auto
+ steps:
+ - step: build@nodejs
+ name: build_nodejs
+ displayName: 依赖安装 打包编译
+ nodeVersion: 18.16.0
+ commands:
+ - '# 全局安装 Pnpm'
+ - npm install -g pnpm@8.7.6
+ - ''
+ - '# 查看 pnpm 版本'
+ - pnpm -v
+ - ''
+ - '# 设置NPM源,提升安装速度'
+ - '# npm config set registry https://registry.npmmirror.com'
+ - pnpm config set registry https://registry.npmmirror.com
+ - ''
+ - '# 执行编译命令'
+ - pnpm install && pnpm run build
+ artifacts:
+ - name: BUILD_ARTIFACT
+ path:
+ - ./dist
+ caches:
+ - ~/.pnpm-store
+ notify: []
+ strategy:
+ retry: '0'
+ - name: release
+ displayName: 上传制品
+ strategy: naturally
+ trigger: auto
+ steps:
+ - step: publish@general_artifacts
+ name: publish_general_artifacts
+ displayName: 上传制品
+ dependArtifact: BUILD_ARTIFACT
+ artifactName: continew-admin-ui-dist
+ notify: []
+ strategy:
+ retry: '0'
+ - name: stage-a4379beb
+ displayName: 部署到阿里云
+ strategy: naturally
+ trigger: auto
+ executor: []
+ steps:
+ - step: deploy@agent
+ name: deploy_agent
+ displayName: 主机部署
+ hostGroupID:
+ ID: aliyun_main_host
+ hostID:
+ - 911314be-ae87-47c7-b5d6-4912f2a35731
+ deployArtifact:
+ - source: artifact
+ name: output
+ target: ~/gitee_go/deploy
+ artifactRepository: default
+ artifactName: continew-admin-ui-dist
+ artifactVersion: latest
+ script:
+ - '# 功能:部署脚本会在部署主机组的每台机器上执行'
+ - '# 使用场景:先将制品包解压缩到指定目录中,再执行启动脚本deploy.sh,脚本示例地址:https://gitee.com/gitee-go/spring-boot-maven-deploy-case/blob/master/deploy.sh'
+ - '# 备份旧目录(如果存在)'
+ - if [ -d "/home/continew-admin/continew-admin-ui-dist" ]; then
+ - ' mv /home/continew-admin/continew-admin-ui-dist /home/continew-admin/continew-admin-ui-dist.bak-$(date +%Y%m%d)'
+ - fi
+ - ''
+ - '# 解压新包'
+ - mkdir -p /home/continew-admin/continew-admin-ui-dist
+ - tar zxvf ~/gitee_go/deploy/continew-admin-ui-dist.tar.gz -C /home/continew-admin/continew-admin-ui-dist
+ - ''
+ - '# sh /home/admin/app/deploy.sh restart'
+ - '# 如果你是php之类的无需制品包的制品方式,可以使用 git clone 或者 git pull 将源代码更新到服务器,再执行其他命令'
+ - '# git clone ***@***.git'
+ - echo 'Hello Gitee Go!'
+ notify: []
+ strategy:
+ retry: '0'
+ expression: []
diff --git a/.workflow/master-pipeline.yml b/.workflow/master-pipeline.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5d926c26f79e41d10427f87bf003ef99fe2fbd79
--- /dev/null
+++ b/.workflow/master-pipeline.yml
@@ -0,0 +1,51 @@
+version: '1.0'
+name: master-pipeline
+displayName: MasterPipeline
+stages:
+ - stage:
+ name: compile
+ displayName: 编译
+ steps:
+ - step: build@maven
+ name: build_maven
+ displayName: Maven 构建
+ # 支持6、7、8、9、10、11六个版本
+ jdkVersion: 8
+ # 支持2.2.1、3.2.5、3.3.9、3.5.2、3.5.3、3.5.4、3.6.1、3.6.3八个版本
+ mavenVersion: 3.3.9
+ # 构建命令
+ commands:
+ - mvn -B clean package -Dmaven.test.skip=true
+ # 非必填字段,开启后表示将构建产物暂存,但不会上传到制品库中,7天后自动清除
+ artifacts:
+ # 构建产物名字,作为产物的唯一标识可向下传递,支持自定义,默认为BUILD_ARTIFACT。在下游可以通过${BUILD_ARTIFACT}方式引用来获取构建物地址
+ - name: BUILD_ARTIFACT
+ # 构建产物获取路径,是指代码编译完毕之后构建物的所在路径,如通常jar包在target目录下。当前目录为代码库根目录
+ path:
+ - ./target
+ - step: publish@general_artifacts
+ name: publish_general_artifacts
+ displayName: 上传制品
+ # 上游构建任务定义的产物名,默认BUILD_ARTIFACT
+ dependArtifact: BUILD_ARTIFACT
+ # 上传到制品库时的制品命名,默认output
+ artifactName: output
+ dependsOn: build_maven
+ - stage:
+ name: release
+ displayName: 发布
+ steps:
+ - step: publish@release_artifacts
+ name: publish_release_artifacts
+ displayName: '发布'
+ # 上游上传制品任务的产出
+ dependArtifact: output
+ # 发布制品版本号
+ version: '1.0.0.0'
+ # 是否开启版本号自增,默认开启
+ autoIncrement: true
+triggers:
+ push:
+ branches:
+ include:
+ - master
diff --git a/.workflow/pr-pipeline.yml b/.workflow/pr-pipeline.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3f7579dd405c85f97f77df0357ec4893e616f85f
--- /dev/null
+++ b/.workflow/pr-pipeline.yml
@@ -0,0 +1,40 @@
+version: '1.0'
+name: pr-pipeline
+displayName: PRPipeline
+stages:
+ - stage:
+ name: compile
+ displayName: 编译
+ steps:
+ - step: build@maven
+ name: build_maven
+ displayName: Maven 构建
+ # 支持6、7、8、9、10、11六个版本
+ jdkVersion: 8
+ # 支持2.2.1、3.2.5、3.3.9、3.5.2、3.5.3、3.5.4、3.6.1、3.6.3八个版本
+ mavenVersion: 3.3.9
+ # 构建命令
+ commands:
+ - mvn -B clean package -Dmaven.test.skip=true
+ # 非必填字段,开启后表示将构建产物暂存,但不会上传到制品库中,7天后自动清除
+ artifacts:
+ # 构建产物名字,作为产物的唯一标识可向下传递,支持自定义,默认为BUILD_ARTIFACT。在下游可以通过${BUILD_ARTIFACT}方式引用来获取构建物地址
+ - name: BUILD_ARTIFACT
+ # 构建产物获取路径,是指代码编译完毕之后构建物的所在路径,如通常jar包在target目录下。当前目录为代码库根目录
+ path:
+ - ./target
+ - step: publish@general_artifacts
+ name: publish_general_artifacts
+ displayName: 上传制品
+ # 上游构建任务定义的产物名,默认BUILD_ARTIFACT
+ dependArtifact: BUILD_ARTIFACT
+ # 构建产物制品库,默认default,系统默认创建
+ artifactRepository: default
+ # 上传到制品库时的制品命名,默认output
+ artifactName: output
+ dependsOn: build_maven
+triggers:
+ pr:
+ branches:
+ include:
+ - master
diff --git a/auto-imports.d.ts b/auto-imports.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..918aad88084b5f3573e72b56518eb8210dd24e45
--- /dev/null
+++ b/auto-imports.d.ts
@@ -0,0 +1,8 @@
+/* eslint-disable */
+/* prettier-ignore */
+// @ts-nocheck
+// Generated by unplugin-auto-import
+export {}
+declare global {
+
+}
diff --git a/components.d.ts b/components.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..804688b7762145a0c9f526a3ca0af0f51f82fc44
--- /dev/null
+++ b/components.d.ts
@@ -0,0 +1,91 @@
+/* eslint-disable */
+/* prettier-ignore */
+// @ts-nocheck
+// Generated by unplugin-vue-components
+// Read more: https://github.com/vuejs/core/pull/3399
+export {}
+
+declare module 'vue' {
+ export interface GlobalComponents {
+ Avatar: typeof import('./src/components/Avatar/index.vue')['default']
+ Breadcrumb: typeof import('./src/components/Breadcrumb/index.vue')['default']
+ CellCopy: typeof import('./src/components/CellCopy/index.vue')['default']
+ Chart: typeof import('./src/components/Chart/index.vue')['default']
+ ColumnSetting: typeof import('./src/components/GiTable/src/components/ColumnSetting.vue')['default']
+ ContactSelector: typeof import('./src/components/ContactSelector/index.vue')['default']
+ CronForm: typeof import('./src/components/GenCron/CronForm/index.vue')['default']
+ CronModal: typeof import('./src/components/GenCron/CronModal/index.vue')['default']
+ DateRangePicker: typeof import('./src/components/DateRangePicker/index.vue')['default']
+ DayForm: typeof import('./src/components/GenCron/CronForm/component/day-form.vue')['default']
+ DynamicForm: typeof import('./src/components/DynamicForm.vue')['default']
+ Example: typeof import('./src/components/ContactSelector/example.vue')['default']
+ FilePreview: typeof import('./src/components/FilePreview/index.vue')['default']
+ FileUploader: typeof import('./src/components/FileUploader.vue')['default']
+ GiCellAvatar: typeof import('./src/components/GiCell/GiCellAvatar.vue')['default']
+ GiCellGender: typeof import('./src/components/GiCell/GiCellGender.vue')['default']
+ GiCellStatus: typeof import('./src/components/GiCell/GiCellStatus.vue')['default']
+ GiCellTag: typeof import('./src/components/GiCell/GiCellTag.vue')['default']
+ GiCellTags: typeof import('./src/components/GiCell/GiCellTags.vue')['default']
+ GiCodeView: typeof import('./src/components/GiCodeView/index.vue')['default']
+ GiEditTable: typeof import('./src/components/GiEditTable/GiEditTable.vue')['default']
+ GiFooter: typeof import('./src/components/GiFooter/index.vue')['default']
+ GiForm: typeof import('./src/components/GiForm/src/GiForm.vue')['default']
+ GiIconBox: typeof import('./src/components/GiIconBox/index.vue')['default']
+ GiIconSelector: typeof import('./src/components/GiIconSelector/index.vue')['default']
+ GiIframe: typeof import('./src/components/GiIframe/index.vue')['default']
+ GiOption: typeof import('./src/components/GiOption/index.vue')['default']
+ GiOptionItem: typeof import('./src/components/GiOptionItem/index.vue')['default']
+ GiPageLayout: typeof import('./src/components/GiPageLayout/index.vue')['default']
+ GiSpace: typeof import('./src/components/GiSpace/index.vue')['default']
+ GiSplitButton: typeof import('./src/components/GiSplitButton/index.vue')['default']
+ GiSplitPane: typeof import('./src/components/GiSplitPane/index.vue')['default']
+ GiSplitPaneFlexibleBox: typeof import('./src/components/GiSplitPane/components/GiSplitPaneFlexibleBox.vue')['default']
+ GiSvgIcon: typeof import('./src/components/GiSvgIcon/index.vue')['default']
+ GiTable: typeof import('./src/components/GiTable/src/GiTable.vue')['default']
+ GiThemeBtn: typeof import('./src/components/GiThemeBtn/index.vue')['default']
+ HourForm: typeof import('./src/components/GenCron/CronForm/component/hour-form.vue')['default']
+ Icon403: typeof import('./src/components/icons/Icon403.vue')['default']
+ Icon404: typeof import('./src/components/icons/Icon404.vue')['default']
+ Icon500: typeof import('./src/components/icons/Icon500.vue')['default']
+ IconBorders: typeof import('./src/components/icons/IconBorders.vue')['default']
+ IconTableSize: typeof import('./src/components/icons/IconTableSize.vue')['default']
+ IconTreeAdd: typeof import('./src/components/icons/IconTreeAdd.vue')['default']
+ IconTreeReduce: typeof import('./src/components/icons/IconTreeReduce.vue')['default']
+ JsonPretty: typeof import('./src/components/JsonPretty/index.vue')['default']
+ MinuteForm: typeof import('./src/components/GenCron/CronForm/component/minute-form.vue')['default']
+ MonthForm: typeof import('./src/components/GenCron/CronForm/component/month-form.vue')['default']
+ ParentView: typeof import('./src/components/ParentView/index.vue')['default']
+ RouterLink: typeof import('vue-router')['RouterLink']
+ RouterView: typeof import('vue-router')['RouterView']
+ SecondForm: typeof import('./src/components/GenCron/CronForm/component/second-form.vue')['default']
+ SplitPanel: typeof import('./src/components/SplitPanel/index.vue')['default']
+ TextCopy: typeof import('./src/components/TextCopy/index.vue')['default']
+ UserSelect: typeof import('./src/components/UserSelect/index.vue')['default']
+ VanButton: typeof import('vant/es')['Button']
+ VanCell: typeof import('vant/es')['Cell']
+ VanCellGroup: typeof import('vant/es')['CellGroup']
+ VanCollapse: typeof import('vant/es')['Collapse']
+ VanCollapseItem: typeof import('vant/es')['CollapseItem']
+ VanConfigProvider: typeof import('vant/es')['ConfigProvider']
+ VanDatePicker: typeof import('vant/es')['DatePicker']
+ VanField: typeof import('vant/es')['Field']
+ VanForm: typeof import('vant/es')['Form']
+ VanIcon: typeof import('vant/es')['Icon']
+ VanList: typeof import('vant/es')['List']
+ VanNavBar: typeof import('vant/es')['NavBar']
+ VanPicker: typeof import('vant/es')['Picker']
+ VanPickerGroup: typeof import('vant/es')['PickerGroup']
+ VanPopup: typeof import('vant/es')['Popup']
+ VanRadio: typeof import('vant/es')['Radio']
+ VanRadioGroup: typeof import('vant/es')['RadioGroup']
+ VanSearch: typeof import('vant/es')['Search']
+ VanTag: typeof import('vant/es')['Tag']
+ VanTimePicker: typeof import('vant/es')['TimePicker']
+ VanUploader: typeof import('vant/es')['Uploader']
+ Verify: typeof import('./src/components/Verify/index.vue')['default']
+ VerifyPoints: typeof import('./src/components/Verify/Verify/VerifyPoints.vue')['default']
+ VerifySlide: typeof import('./src/components/Verify/Verify/VerifySlide.vue')['default']
+ WeekForm: typeof import('./src/components/GenCron/CronForm/component/week-form.vue')['default']
+ YearForm: typeof import('./src/components/GenCron/CronForm/component/year-form.vue')['default']
+ }
+}
diff --git a/config/plugins/index.ts b/config/plugins/index.ts
index 8a976a8ba0c4836729d5c501449e8cdd710e8ce5..5cdbca036694e37ddcb61e1c09884861a97dd90d 100644
--- a/config/plugins/index.ts
+++ b/config/plugins/index.ts
@@ -2,6 +2,9 @@ import type { PluginOption } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
+import AutoImport from 'unplugin-auto-import/vite'
+import Components from 'unplugin-vue-components/vite'
+import { VantResolver } from '@vant/auto-import-resolver'
import appInfo from './app-info'
import createDevtools from './devtools'
import createAutoImport from './auto-import'
@@ -11,6 +14,12 @@ import createMock from './mock'
export default function createVitePlugins(viteEnv, isBuild = false) {
const vitePlugins: (PluginOption | PluginOption[])[] = [appInfo(), vue(), vueJsx()]
+ vitePlugins.push(AutoImport({
+ resolvers: [VantResolver()],
+ }))
+ vitePlugins.push(Components({
+ resolvers: [VantResolver()],
+ }))
vitePlugins.push(createDevtools(viteEnv))
vitePlugins.push(createAutoImport())
vitePlugins.push(createComponents())
diff --git a/index.html b/index.html
index 88a8e7b3c4ae346ac913b7e5830b13ceac29e762..5b4819589ee2beccb64bd888503366c970d8bb49 100644
--- a/index.html
+++ b/index.html
@@ -20,8 +20,10 @@
+
+
-
+ -->