From 2d3227c5bcbe8e48b3ee7c093dd661c5205c7cd5 Mon Sep 17 00:00:00 2001
From: gexinzhineng/gxzn27 <1348660141@qq.com>
Date: Wed, 1 Mar 2023 14:51:26 +0800
Subject: [PATCH 01/17] =?UTF-8?q?1=E3=80=81=E5=8F=91=E8=B5=B7=E6=B5=81?=
 =?UTF-8?q?=E7=A8=8B=E9=A1=B5=E9=9D=A2=20=E6=B5=81=E7=A8=8B=E5=88=86?=
 =?UTF-8?q?=E7=B1=BB=E6=97=A0=E6=B3=95=E6=98=BE=E7=A4=BA=202=E3=80=81?=
 =?UTF-8?q?=E9=82=AE=E7=AE=B1=E6=A0=A1=E9=AA=8C=E7=BB=9F=E4=B8=80=203?=
 =?UTF-8?q?=E3=80=81=E8=A7=92=E8=89=B2=E7=AE=A1=E7=90=86=E9=A1=B5=E9=9D=A2?=
 =?UTF-8?q?=E8=A7=92=E8=89=B2=E7=BC=96=E5=8F=B7=E6=8D=A2=E6=88=90id?=
 =?UTF-8?q?=E5=AD=97=E6=AE=B5=EF=BC=88=E4=B9=8B=E5=89=8D=E6=98=AF=E5=BA=8F?=
 =?UTF-8?q?=E5=8F=B7=EF=BC=8Cvue2=E7=89=88=E6=9C=AC=E4=B8=BAid=EF=BC=8C?=
 =?UTF-8?q?=E6=B5=8B=E8=AF=95=E8=AF=B4=E5=AE=B9=E6=98=93=E5=92=8C=E6=98=BE?=
 =?UTF-8?q?=E7=A4=BA=E9=A1=BA=E5=BA=8F=E6=90=9E=E6=B7=B7=EF=BC=89=204?=
 =?UTF-8?q?=E3=80=81bpmnjs=E6=B5=81=E8=BD=AC=E6=9D=A1=E4=BB=B6=E6=97=A0?=
 =?UTF-8?q?=E6=B3=95=E8=87=AA=E5=8A=A8=E4=BF=9D=E5=AD=98=E5=9B=9E=E6=98=BE?=
 =?UTF-8?q?=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../package/penal/flow-condition/FlowCondition.vue | 14 ++++++++------
 src/views/bpm/processInstance/create.vue           |  5 +++++
 src/views/bpm/processInstance/process.create.ts    |  7 ++++++-
 src/views/system/dept/dept.data.ts                 | 10 +++++++++-
 src/views/system/mail/account/account.data.ts      | 12 +++++++++++-
 src/views/system/role/role.data.ts                 | 13 ++++++++++---
 6 files changed, 49 insertions(+), 12 deletions(-)

diff --git a/src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue b/src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue
index ee4512e7..ae1d1567 100644
--- a/src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue
+++ b/src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue
@@ -79,7 +79,7 @@ const resetFlowCondition = () => {
   if (
     bpmnElementSourceRef.value &&
     bpmnElementSourceRef.value.default &&
-    bpmnElementSourceRef.value.default.id === this.bpmnElement.id
+    bpmnElementSourceRef.value.default.id === bpmnElement.value.id
   ) {
     // 默认
     flowConditionForm.value = { type: 'default' }
@@ -175,11 +175,13 @@ onBeforeUnmount(() => {
 watch(
   () => props.businessObject,
   (val) => {
-    if (val) {
-      nextTick(() => {
-        resetFlowCondition()
-      })
-    }
+    console.log(val, 'val')
+    nextTick(() => {
+      resetFlowCondition()
+    })
+  },
+  {
+    immediate: true
   }
 )
 </script>
diff --git a/src/views/bpm/processInstance/create.vue b/src/views/bpm/processInstance/create.vue
index c0542b22..084c085c 100644
--- a/src/views/bpm/processInstance/create.vue
+++ b/src/views/bpm/processInstance/create.vue
@@ -3,6 +3,10 @@
     <!-- 第一步,通过流程定义的列表,选择对应的流程 -->
     <div v-if="!selectProcessInstance">
       <XTable @register="registerTable">
+        <!-- 流程分类 -->
+        <template #category_default="{ row }">
+          <DictTag :type="DICT_TYPE.BPM_MODEL_CATEGORY" :value="Number(row?.category)" />
+        </template>
         <template #version_default="{ row }">
           <el-tag v-if="row">v{{ row.version }}</el-tag>
         </template>
@@ -56,6 +60,7 @@ import * as DefinitionApi from '@/api/bpm/definition'
 import * as ProcessInstanceApi from '@/api/bpm/processInstance'
 import { setConfAndFields2 } from '@/utils/formCreate'
 import { ApiAttrs } from '@form-create/element-ui/types/config'
+import { DICT_TYPE } from '@/utils/dict'
 
 const router = useRouter() // 路由
 const message = useMessage() // 消息
diff --git a/src/views/bpm/processInstance/process.create.ts b/src/views/bpm/processInstance/process.create.ts
index b2282406..7516c0b4 100644
--- a/src/views/bpm/processInstance/process.create.ts
+++ b/src/views/bpm/processInstance/process.create.ts
@@ -14,7 +14,12 @@ const crudSchemas = reactive<VxeCrudSchema>({
       title: '流程分类',
       field: 'category',
       dictType: DICT_TYPE.BPM_MODEL_CATEGORY,
-      dictClass: 'number'
+      dictClass: 'number',
+      table: {
+        slots: {
+          default: 'category_default'
+        }
+      }
     },
     {
       title: '流程版本',
diff --git a/src/views/system/dept/dept.data.ts b/src/views/system/dept/dept.data.ts
index 5e3d0761..c6945841 100644
--- a/src/views/system/dept/dept.data.ts
+++ b/src/views/system/dept/dept.data.ts
@@ -6,7 +6,15 @@ const { t } = useI18n() // 国际化
 export const rules = reactive({
   name: [required],
   sort: [required],
-  email: [required],
+  // email: [required],
+  email: [
+    { required: true, message: t('profile.rules.mail'), trigger: 'blur' },
+    {
+      type: 'email',
+      message: t('profile.rules.truemail'),
+      trigger: ['blur', 'change']
+    }
+  ],
   phone: [
     {
       len: 11,
diff --git a/src/views/system/mail/account/account.data.ts b/src/views/system/mail/account/account.data.ts
index a2e29f85..bd05ce4f 100644
--- a/src/views/system/mail/account/account.data.ts
+++ b/src/views/system/mail/account/account.data.ts
@@ -1,8 +1,18 @@
 import type { VxeCrudSchema } from '@/hooks/web/useVxeCrudSchemas'
 
+const { t } = useI18n() // 国际化
+
 // 表单校验
 export const rules = reactive({
-  mail: [required],
+  // mail: [required],
+  mail: [
+    { required: true, message: t('profile.rules.mail'), trigger: 'blur' },
+    {
+      type: 'email',
+      message: t('profile.rules.truemail'),
+      trigger: ['blur', 'change']
+    }
+  ],
   username: [required],
   password: [required],
   host: [required],
diff --git a/src/views/system/role/role.data.ts b/src/views/system/role/role.data.ts
index fef2ec47..d55b5e21 100644
--- a/src/views/system/role/role.data.ts
+++ b/src/views/system/role/role.data.ts
@@ -9,12 +9,19 @@ export const rules = reactive({
 })
 // CrudSchema
 const crudSchemas = reactive<VxeCrudSchema>({
-  primaryKey: 'id',
-  primaryTitle: '角色编号',
-  primaryType: 'seq',
+  // primaryKey: 'id',
+  // primaryTitle: '角色编号',
+  // primaryType: 'seq',
   action: true,
   actionWidth: '400px',
   columns: [
+    {
+      title: '角色编号',
+      field: 'id',
+      table: {
+        width: 200
+      }
+    },
     {
       title: '角色名称',
       field: 'name',

From 3e2b5e1887a123dbf597503dd866e0a8654f51fa Mon Sep 17 00:00:00 2001
From: chengyangwang <1223440313@qq.com>
Date: Wed, 1 Mar 2023 17:09:03 +0800
Subject: [PATCH 02/17] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Del-tree=E7=BB=84?=
 =?UTF-8?q?=E4=BB=B6setCheckedKeys=E8=AE=BE=E7=BD=AE=E4=B8=80=E6=97=A6?=
 =?UTF-8?q?=E9=80=89=E4=B8=AD=E7=88=B6=E7=BA=A7=E5=AD=90=E7=BA=A7=E4=B9=9F?=
 =?UTF-8?q?=E8=A2=AB=E9=80=89=E4=B8=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/system/tenantPackage/index.vue | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/views/system/tenantPackage/index.vue b/src/views/system/tenantPackage/index.vue
index a665b8af..f8b81171 100644
--- a/src/views/system/tenantPackage/index.vue
+++ b/src/views/system/tenantPackage/index.vue
@@ -125,7 +125,9 @@ const handleUpdate = async (rowId: number) => {
   const res = await TenantPackageApi.getTenantPackageApi(rowId)
   unref(formRef)?.setValues(res)
   // 设置选中
-  unref(treeRef)?.setCheckedKeys(res.menuIds)
+  res.menuIds?.forEach((item: any) => {
+    unref(treeRef)?.setChecked(item, true,false);
+  })
 }
 
 // 提交按钮

From 60691df3a6df0abb948130e97dd7fbdc50e3c25d Mon Sep 17 00:00:00 2001
From: gexinzhineng/gxzn27 <1348660141@qq.com>
Date: Thu, 2 Mar 2023 11:26:28 +0800
Subject: [PATCH 03/17] =?UTF-8?q?bpmnjs=E6=B5=81=E7=A8=8B=E5=9B=BE=20?=
 =?UTF-8?q?=E6=B5=81=E8=BD=AC=E6=9D=A1=E4=BB=B6=E5=88=87=E6=8D=A2=E9=97=AE?=
 =?UTF-8?q?=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../package/penal/flow-condition/FlowCondition.vue             | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue b/src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue
index ae1d1567..833a14c2 100644
--- a/src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue
+++ b/src/components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue
@@ -79,7 +79,8 @@ const resetFlowCondition = () => {
   if (
     bpmnElementSourceRef.value &&
     bpmnElementSourceRef.value.default &&
-    bpmnElementSourceRef.value.default.id === bpmnElement.value.id
+    bpmnElementSourceRef.value.default.id === bpmnElement.value.id &&
+    flowConditionForm.value.type == 'default'
   ) {
     // 默认
     flowConditionForm.value = { type: 'default' }

From d461fed75c51c60d0bf3ea08c82f08cf44ee31f1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E5=BC=A0=E8=BF=AA=E7=94=9F?= <2046353594@qq.com>
Date: Thu, 2 Mar 2023 15:15:47 +0800
Subject: [PATCH 04/17] =?UTF-8?q?chore:=20=E8=A7=84=E8=8C=83=E4=B8=8D?=
 =?UTF-8?q?=E7=AC=A6=E5=90=88eslint=E6=A0=A1=E9=AA=8C=E8=A7=84=E5=88=99?=
 =?UTF-8?q?=E7=9A=84=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 types/global.d.ts | 1 -
 1 file changed, 1 deletion(-)

diff --git a/types/global.d.ts b/types/global.d.ts
index 3179c200..6f583ba7 100644
--- a/types/global.d.ts
+++ b/types/global.d.ts
@@ -1,4 +1,3 @@
-import type { CSSProperties } from 'vue'
 declare global {
   declare interface Fn<T = any> {
     (...arg: T[]): T

From 3156606c9027e043ee28c8cc4f13b44fe6b44f68 Mon Sep 17 00:00:00 2001
From: gexinzhineng/gxzn27 <1348660141@qq.com>
Date: Thu, 2 Mar 2023 15:34:14 +0800
Subject: [PATCH 05/17] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86?=
 =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7=E9=9C=80=E8=A6=81=E5=A1=AB?=
 =?UTF-8?q?=E5=86=99=E6=89=8B=E6=9C=BA=E5=8F=B7=EF=BC=88=E5=B7=A5=E4=BD=9C?=
 =?UTF-8?q?=E6=B5=81=E5=88=9B=E5=BB=BA=E9=9C=80=E8=A6=81=EF=BC=8C=E4=B8=8D?=
 =?UTF-8?q?=E7=84=B6=E4=BC=9A=E6=8A=A5=E9=94=99=EF=BC=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/system/user/index.vue | 39 +++++++++++++++++++--------------
 1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index d125112d..bccab852 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -386,24 +386,31 @@ const handleDetail = async (rowId: number) => {
 
 // 提交按钮
 const submitForm = async () => {
-  loading.value = true
   // 提交请求
-  try {
-    const data = unref(formRef)?.formModel as UserApi.UserVO
-    if (actionType.value === 'create') {
-      await UserApi.createUserApi(data)
-      message.success(t('common.createSuccess'))
-    } else {
-      await UserApi.updateUserApi(data)
-      message.success(t('common.updateSuccess'))
+  const elForm = unref(formRef)?.getElFormRef()
+  if (!elForm) return
+  elForm.validate(async (valid) => {
+    if (valid) {
+      try {
+        const data = unref(formRef)?.formModel as UserApi.UserVO
+        if (actionType.value === 'create') {
+          await UserApi.createUserApi(data)
+          loading.value = true
+          message.success(t('common.createSuccess'))
+        } else {
+          await UserApi.updateUserApi(data)
+          loading.value = true
+          message.success(t('common.updateSuccess'))
+        }
+        dialogVisible.value = false
+      } finally {
+        // unref(formRef)?.setSchema(allSchemas.formSchema)
+        // 刷新列表
+        await reload()
+        loading.value = false
+      }
     }
-    dialogVisible.value = false
-  } finally {
-    // unref(formRef)?.setSchema(allSchemas.formSchema)
-    // 刷新列表
-    await reload()
-    loading.value = false
-  }
+  })
 }
 // 改变用户状态操作
 const handleStatusChange = async (row: UserApi.UserVO) => {

From 9e66efdc508d6ba582fdff01a51967e8d827c07c Mon Sep 17 00:00:00 2001
From: gexinzhineng/gxzn27 <1348660141@qq.com>
Date: Thu, 2 Mar 2023 15:57:40 +0800
Subject: [PATCH 06/17] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86?=
 =?UTF-8?q?=E6=A0=A1=E9=AA=8C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/system/user/user.data.ts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/views/system/user/user.data.ts b/src/views/system/user/user.data.ts
index 12c777fc..7648faf2 100644
--- a/src/views/system/user/user.data.ts
+++ b/src/views/system/user/user.data.ts
@@ -5,6 +5,7 @@ const { t } = useI18n()
 export const rules = reactive({
   username: [required],
   nickname: [required],
+  password: [required],
   email: [
     { required: true, message: t('profile.rules.mail'), trigger: 'blur' },
     {

From 31505ae35bb6b55347f5832d8333d8e9466b102c Mon Sep 17 00:00:00 2001
From: gexinzhineng/gxzn27 <1348660141@qq.com>
Date: Thu, 2 Mar 2023 16:08:21 +0800
Subject: [PATCH 07/17] =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86?=
 =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E5=AF=BC=E8=87=B4=E5=B7=A5=E4=BD=9C=E6=B5=81?=
 =?UTF-8?q?=E6=8A=A5=E9=94=99bug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/system/user/user.data.ts | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/views/system/user/user.data.ts b/src/views/system/user/user.data.ts
index 7648faf2..eb20b999 100644
--- a/src/views/system/user/user.data.ts
+++ b/src/views/system/user/user.data.ts
@@ -6,6 +6,7 @@ export const rules = reactive({
   username: [required],
   nickname: [required],
   password: [required],
+  deptId: [required],
   email: [
     { required: true, message: t('profile.rules.mail'), trigger: 'blur' },
     {

From c5cb59f4ba25e67928d0e31af4ac287fa4c93fc6 Mon Sep 17 00:00:00 2001
From: gexinzhineng/gxzn27 <1348660141@qq.com>
Date: Thu, 2 Mar 2023 16:46:39 +0800
Subject: [PATCH 08/17] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E5=88=86=E9=85=8D?=
 =?UTF-8?q?=E8=A7=84=E5=88=99=E9=A1=B5=E9=9D=A2vxe=E6=93=8D=E4=BD=9C?=
 =?UTF-8?q?=E6=A0=8F=E6=98=BE=E7=A4=BA=E9=9A=90=E8=97=8Fbug?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/bpm/taskAssignRule/index.vue              | 12 ++++++++++--
 src/views/bpm/taskAssignRule/taskAssignRule.data.ts |  8 ++++++++
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/views/bpm/taskAssignRule/index.vue b/src/views/bpm/taskAssignRule/index.vue
index e6e4b88f..012e6f68 100644
--- a/src/views/bpm/taskAssignRule/index.vue
+++ b/src/views/bpm/taskAssignRule/index.vue
@@ -1,7 +1,7 @@
 <template>
   <ContentWrap>
     <!-- 列表 -->
-    <XTable @register="registerTable">
+    <XTable @register="registerTable" ref="xGrid">
       <template #options_default="{ row }">
         <span :key="option" v-for="option in row.options">
           <el-tag>
@@ -145,11 +145,12 @@ import { listSimpleUserGroupsApi } from '@/api/bpm/userGroup'
 import { listSimpleDeptApi } from '@/api/system/dept'
 import { DICT_TYPE, getDictOptions } from '@/utils/dict'
 import { handleTree, defaultProps } from '@/utils/tree'
-import { allSchemas, rules } from './taskAssignRule.data'
+import { allSchemas, rules, idShowActionClick } from './taskAssignRule.data'
 
 const { t } = useI18n() // 国际化
 const message = useMessage() // 消息弹窗
 const { query } = useRoute()
+const xGrid = ref()
 
 // ========== 列表相关 ==========
 
@@ -165,6 +166,8 @@ const taskAssignScriptDictDatas = getDictOptions(DICT_TYPE.BPM_TASK_ASSIGN_SCRIP
 const modelId = query.modelId
 // 流程定义的编号。如果 processDefinitionId 非空,则用于流程定义的查看,不支持配置
 const processDefinitionId = query.processDefinitionId
+let isShow = idShowActionClick(modelId)
+
 // 查询参数
 const queryParams = reactive({
   modelId: modelId,
@@ -346,5 +349,10 @@ onMounted(() => {
   listSimpleUserGroupsApi().then((data) => {
     userGroupOptions.value.push(...data)
   })
+  if (!isShow) {
+    setTimeout(() => {
+      xGrid.value.Ref.hideColumn('actionbtns')
+    }, 100)
+  }
 })
 </script>
diff --git a/src/views/bpm/taskAssignRule/taskAssignRule.data.ts b/src/views/bpm/taskAssignRule/taskAssignRule.data.ts
index 1ced3425..cad74325 100644
--- a/src/views/bpm/taskAssignRule/taskAssignRule.data.ts
+++ b/src/views/bpm/taskAssignRule/taskAssignRule.data.ts
@@ -43,4 +43,12 @@ const crudSchemas = reactive<VxeCrudSchema>({
     }
   ]
 })
+
+export const idShowActionClick = (modelId?: any) => {
+  if (modelId) {
+    return true
+  } else {
+    return false
+  }
+}
 export const { allSchemas } = useVxeCrudSchemas(crudSchemas)

From 0b9022c8a5b26d368c44b0fe920fd51aa4f57dee Mon Sep 17 00:00:00 2001
From: chengyangwang <1223440313@qq.com>
Date: Fri, 3 Mar 2023 12:52:50 +0800
Subject: [PATCH 09/17] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Del-tree=E7=BB=84?=
 =?UTF-8?q?=E4=BB=B6setCheckedKeys=E8=AE=BE=E7=BD=AE=E4=B8=80=E6=97=A6?=
 =?UTF-8?q?=E9=80=89=E4=B8=AD=E7=88=B6=E7=BA=A7=E5=AD=90=E7=BA=A7=E4=B9=9F?=
 =?UTF-8?q?=E8=A2=AB=E9=80=89=E4=B8=AD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/system/role/index.vue | 18 ++++++++++--------
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue
index 72c602c1..b2f12af3 100644
--- a/src/views/system/role/index.vue
+++ b/src/views/system/role/index.vue
@@ -122,7 +122,6 @@
             ref="treeRef"
             node-key="id"
             show-checkbox
-            :default-checked-keys="defaultCheckedKeys"
             :check-strictly="!checkStrictly"
             :props="defaultProps"
             :data="treeOptions"
@@ -245,7 +244,6 @@ const dialogScopeVisible = ref(false)
 const dialogScopeTitle = ref('数据权限')
 const actionScopeType = ref('')
 const dataScopeDictDatas = ref()
-const defaultCheckedKeys = ref()
 // 选项
 const checkStrictly = ref(true)
 const treeNodeAll = ref(false)
@@ -258,13 +256,17 @@ const handleScope = async (type: string, row: RoleApi.RoleVO) => {
   dataScopeForm.id = row.id
   dataScopeForm.name = row.name
   dataScopeForm.code = row.code
+
+  actionScopeType.value = type
+  dialogScopeVisible.value = true
   if (type === 'menu') {
     const menuRes = await listSimpleMenusApi()
     treeOptions.value = handleTree(menuRes)
     const role = await PermissionApi.listRoleMenusApi(row.id)
     if (role) {
-      // treeRef.value!.setCheckedKeys(role as unknown as Array<number>)
-      defaultCheckedKeys.value = role
+      role?.forEach((item: any) => {
+        unref(treeRef)?.setChecked(item, true,false);
+      })
     }
   } else if (type === 'data') {
     const deptRes = await listSimpleDeptApi()
@@ -272,12 +274,12 @@ const handleScope = async (type: string, row: RoleApi.RoleVO) => {
     const role = await RoleApi.getRoleApi(row.id)
     dataScopeForm.dataScope = role.dataScope
     if (role.dataScopeDeptIds) {
-      // treeRef.value!.setCheckedKeys(role.dataScopeDeptIds as unknown as Array<number>, false)
-      defaultCheckedKeys.value = role.dataScopeDeptIds
+      role.dataScopeDeptIds?.forEach((item: any) => {
+        unref(treeRef)?.setChecked(item, true,false);
+      })
     }
   }
-  actionScopeType.value = type
-  dialogScopeVisible.value = true
+
 }
 // 保存权限
 const submitScope = async () => {

From f63bccd1fe08ec29810443acfe3eca20c56157da Mon Sep 17 00:00:00 2001
From: gexinzhineng/gxzn27 <1348660141@qq.com>
Date: Fri, 3 Mar 2023 15:27:52 +0800
Subject: [PATCH 10/17] =?UTF-8?q?=E6=9F=A5=E7=9C=8BOA=E8=AF=B7=E5=81=87?=
 =?UTF-8?q?=E8=BF=94=E5=9B=9E=E6=B5=81=E7=A8=8B=E8=AF=A6=E6=83=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/bpm/oa/leave/detail.vue | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/views/bpm/oa/leave/detail.vue b/src/views/bpm/oa/leave/detail.vue
index bb30d075..25ac9981 100644
--- a/src/views/bpm/oa/leave/detail.vue
+++ b/src/views/bpm/oa/leave/detail.vue
@@ -2,6 +2,7 @@
   <ContentWrap>
     <!-- 详情 -->
     <Descriptions :schema="allSchemas.detailSchema" :data="formData" />
+    <el-button @click="routerReturn" type="primary">返回</el-button>
   </ContentWrap>
 </template>
 
@@ -9,7 +10,8 @@
 // 业务相关的 import
 import * as LeaveApi from '@/api/bpm/leave'
 import { allSchemas } from '@/views/bpm/oa/leave/leave.data'
-
+import { useRouter } from 'vue-router'
+const router = useRouter()
 const { query } = useRoute() // 查询参数
 const message = useMessage() // 消息弹窗
 
@@ -22,6 +24,10 @@ const formData = ref({
   reason: undefined
 })
 
+const routerReturn = () => {
+  router.back()
+}
+
 onMounted(() => {
   id.value = query.id
   if (!id.value) {

From 7a5a08d9a2dfbafc58c7b373974db2abcbf41d69 Mon Sep 17 00:00:00 2001
From: gexinzhineng/gxzn27 <1348660141@qq.com>
Date: Sat, 4 Mar 2023 10:37:07 +0800
Subject: [PATCH 11/17] =?UTF-8?q?=E7=A7=9F=E6=88=B7=E5=88=97=E8=A1=A8?=
 =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=A0=A1=E9=AA=8C=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/system/tenant/tenant.data.ts | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/views/system/tenant/tenant.data.ts b/src/views/system/tenant/tenant.data.ts
index 7e81138c..110bfbb3 100644
--- a/src/views/system/tenant/tenant.data.ts
+++ b/src/views/system/tenant/tenant.data.ts
@@ -27,6 +27,24 @@ export const rules = reactive({
   contactMobile: [required],
   accountCount: [required],
   expireTime: [required],
+  username: [
+    required,
+    {
+      min: 4,
+      max: 30,
+      trigger: 'blur',
+      message: '用户名称长度为 4-30 个字符'
+    }
+  ],
+  password: [
+    required,
+    {
+      min: 4,
+      max: 16,
+      trigger: 'blur',
+      message: '密码长度为 4-16 位'
+    }
+  ],
   domain: [required],
   status: [required]
 })

From cea7b41ae83353de1baf6bd91b4130432caaf290 Mon Sep 17 00:00:00 2001
From: gexinzhineng/gxzn27 <1348660141@qq.com>
Date: Sat, 4 Mar 2023 13:19:49 +0800
Subject: [PATCH 12/17] =?UTF-8?q?=E7=A7=9F=E6=88=B7=E5=92=8C=E8=A7=92?=
 =?UTF-8?q?=E8=89=B2=E7=AE=A1=E7=90=86=E7=9A=84=E8=8F=9C=E5=8D=95=E6=9D=83?=
 =?UTF-8?q?=E9=99=90=E4=B8=8D=E8=83=BD=E6=BB=9A=E5=8A=A8=20=E7=A7=9F?=
 =?UTF-8?q?=E6=88=B7=E6=96=B0=E5=A2=9E=E8=8F=9C=E5=8D=95=E6=9D=83=E9=99=90?=
 =?UTF-8?q?=E6=A0=A1=E9=AA=8C=E4=B8=8D=E9=80=9A=E8=BF=87=20=E8=A7=92?=
 =?UTF-8?q?=E8=89=B2=E7=AE=A1=E7=90=86=E8=AF=A6=E6=83=85=E9=A1=B5=E4=B8=8D?=
 =?UTF-8?q?=E5=B1=95=E7=A4=BA=E5=AF=B9=E5=BA=94=E7=9A=84=E9=83=A8=E9=97=A8?=
 =?UTF-8?q?=20XTable=E4=B8=AD=E4=B8=BB=E9=A2=98=E9=A2=9C=E8=89=B2=E4=B8=8D?=
 =?UTF-8?q?=E8=B7=9F=E9=9A=8F=E9=A1=B9=E7=9B=AE=E4=B8=BB=E4=BD=93=E4=B8=80?=
 =?UTF-8?q?=E8=B5=B7=E5=88=87=E6=8D=A2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/components/XTable/src/XTable.vue          | 31 ++++++++++++++++---
 .../tenantPackage/tenantPackage.data.ts       |  7 ++++-
 src/views/system/user/index.vue               | 24 +++++++++++++-
 3 files changed, 56 insertions(+), 6 deletions(-)

diff --git a/src/components/XTable/src/XTable.vue b/src/components/XTable/src/XTable.vue
index 34f91ce0..e5c503ec 100644
--- a/src/components/XTable/src/XTable.vue
+++ b/src/components/XTable/src/XTable.vue
@@ -12,7 +12,7 @@ import { useAppStore } from '@/store/modules/app'
 import { useDesign } from '@/hooks/web/useDesign'
 import { XTableProps } from './type'
 import { isBoolean, isFunction } from '@/utils/is'
-
+import styleCss from './style/dark.scss'
 import download from '@/utils/download'
 
 const { t } = useI18n()
@@ -25,15 +25,38 @@ const prefixCls = getPrefixCls('x-vxe-table')
 
 const attrs = useAttrs()
 const emit = defineEmits(['register'])
-
+const removeStyles = () => {
+  var filename = 'cssTheme'
+  //移除引入的文件名
+  var targetelement = 'style'
+  var targetattr = 'id'
+  var allsuspects = document.getElementsByTagName(targetelement)
+  for (var i = allsuspects.length; i >= 0; i--) {
+    if (
+      allsuspects[i] &&
+      allsuspects[i].getAttribute(targetattr) != null &&
+      allsuspects[i].getAttribute(targetattr)?.indexOf(filename) != -1
+    ) {
+      console.log(allsuspects[i], 'node')
+      allsuspects[i].parentNode?.removeChild(allsuspects[i])
+    }
+  }
+}
+const reImport = () => {
+  var head = document.getElementsByTagName('head')[0]
+  var style = document.createElement('style')
+  style.innerText = styleCss
+  style.id = 'cssTheme'
+  head.appendChild(style)
+}
 watch(
   () => appStore.getIsDark,
   () => {
     if (appStore.getIsDark == true) {
-      import('./style/dark.scss')
+      reImport()
     }
     if (appStore.getIsDark == false) {
-      import('./style/light.scss')
+      removeStyles()
     }
   },
   { immediate: true }
diff --git a/src/views/system/tenantPackage/tenantPackage.data.ts b/src/views/system/tenantPackage/tenantPackage.data.ts
index e28ea842..de06c2cb 100644
--- a/src/views/system/tenantPackage/tenantPackage.data.ts
+++ b/src/views/system/tenantPackage/tenantPackage.data.ts
@@ -33,7 +33,12 @@ const crudSchemas = reactive<VxeCrudSchema>({
     {
       title: '菜单权限',
       field: 'menuIds',
-      isTable: false
+      isTable: false,
+      form: {
+        colProps: {
+          span: 24
+        }
+      }
     },
     {
       title: t('form.remark'),
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index bccab852..5568ca2a 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -159,7 +159,7 @@
       :data="detailData"
     >
       <template #deptId="{ row }">
-        <span>{{ row.dept?.name }}</span>
+        <el-tag>{{ dataFormater(row.deptId) }}</el-tag>
       </template>
       <template #postIds="{ row }">
         <template v-if="row.postIds !== ''">
@@ -332,6 +332,28 @@ const getPostOptions = async () => {
   const res = await listSimplePostsApi()
   postOptions.value.push(...res)
 }
+const dataFormater = (val) => {
+  return deptFormater(deptOptions.value, val)
+}
+//部门回显
+const deptFormater = (ary, val: any) => {
+  var o = ''
+  if (ary && val) {
+    for (const v of ary) {
+      if (v.id == val) {
+        o = v.name
+        if (o) return o
+      } else if (v.children?.length) {
+        o = deptFormater(v.children, val)
+        if (o) return o
+      }
+    }
+    return o
+  } else {
+    return val
+  }
+}
+
 // 设置标题
 const setDialogTile = async (type: string) => {
   dialogTitle.value = t('action.' + type)

From 3c6554c05834c7ba12e7cc9303cc9f93ce9d02fd Mon Sep 17 00:00:00 2001
From: gexinzhineng/gxzn27 <1348660141@qq.com>
Date: Sat, 4 Mar 2023 13:44:46 +0800
Subject: [PATCH 13/17] =?UTF-8?q?=E7=A7=9F=E6=88=B7=E5=92=8C=E8=A7=92?=
 =?UTF-8?q?=E8=89=B2=E7=AE=A1=E7=90=86=E7=9A=84=E8=8F=9C=E5=8D=95=E6=9D=83?=
 =?UTF-8?q?=E9=99=90=E4=B8=8D=E8=83=BD=E6=BB=9A=E5=8A=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/system/role/index.vue          | 98 +++++++++++++-----------
 src/views/system/tenantPackage/index.vue | 23 +++++-
 2 files changed, 76 insertions(+), 45 deletions(-)

diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue
index 72c602c1..97993f5f 100644
--- a/src/views/system/role/index.vue
+++ b/src/views/system/role/index.vue
@@ -99,37 +99,41 @@
         </el-select>
       </el-form-item>
       <!-- 分配角色的菜单权限对话框 -->
-      <el-form-item
-        label="权限范围"
-        v-if="
-          actionScopeType === 'menu' || dataScopeForm.dataScope === SystemDataScopeEnum.DEPT_CUSTOM
-        "
-      >
-        <el-card shadow="never">
-          <template #header>
-            父子联动(选中父节点,自动选择子节点):
-            <el-switch v-model="checkStrictly" inline-prompt active-text="是" inactive-text="否" />
-            全选/全不选:
-            <el-switch
-              v-model="treeNodeAll"
-              inline-prompt
-              active-text="是"
-              inactive-text="否"
-              @change="handleCheckedTreeNodeAll()"
-            />
-          </template>
-          <el-tree
-            ref="treeRef"
-            node-key="id"
-            show-checkbox
-            :default-checked-keys="defaultCheckedKeys"
-            :check-strictly="!checkStrictly"
-            :props="defaultProps"
-            :data="treeOptions"
-            empty-text="加载中,请稍后"
-          />
-        </el-card>
-      </el-form-item>
+      <el-row>
+        <el-col :span="24">
+          <el-form-item
+            label="权限范围"
+            v-if="
+              actionScopeType === 'menu' ||
+              dataScopeForm.dataScope === SystemDataScopeEnum.DEPT_CUSTOM
+            "
+            style="display: flex"
+          >
+            <el-card class="card" shadow="never">
+              <template #header>
+                <!--父子联动(选中父节点,自动选择子节点):-->
+                <!--<el-switch v-model="checkStrictly" inline-prompt active-text="是" inactive-text="否" />-->
+                <!--全选/全不选:-->
+                <!--<el-switch-->
+                <!--  v-model="treeNodeAll"-->
+                <!--  inline-prompt-->
+                <!--  active-text="是"-->
+                <!--  inactive-text="否"-->
+                <!--  @change="handleCheckedTreeNodeAll()"-->
+                <!--/>-->
+              </template>
+              <el-tree
+                ref="treeRef"
+                node-key="id"
+                show-checkbox
+                :check-strictly="!checkStrictly"
+                :props="defaultProps"
+                :data="treeOptions"
+                empty-text="加载中,请稍后"
+              />
+            </el-card>
+          </el-form-item> </el-col
+      ></el-row>
     </el-form>
     <!-- 操作按钮 -->
     <template #footer>
@@ -245,26 +249,28 @@ const dialogScopeVisible = ref(false)
 const dialogScopeTitle = ref('数据权限')
 const actionScopeType = ref('')
 const dataScopeDictDatas = ref()
-const defaultCheckedKeys = ref()
 // 选项
-const checkStrictly = ref(true)
-const treeNodeAll = ref(false)
+const checkStrictly = ref(false)
+// const treeNodeAll = ref(false)
 // 全选/全不选
-const handleCheckedTreeNodeAll = () => {
-  treeRef.value!.setCheckedNodes(treeNodeAll.value ? treeOptions.value : [])
-}
+// const handleCheckedTreeNodeAll = () => {
+//   treeRef.value!.setCheckedNodes(treeNodeAll.value ? treeOptions.value : [])
+// }
 // 权限操作
 const handleScope = async (type: string, row: RoleApi.RoleVO) => {
   dataScopeForm.id = row.id
   dataScopeForm.name = row.name
   dataScopeForm.code = row.code
+  actionScopeType.value = type
+  dialogScopeVisible.value = true
   if (type === 'menu') {
     const menuRes = await listSimpleMenusApi()
     treeOptions.value = handleTree(menuRes)
     const role = await PermissionApi.listRoleMenusApi(row.id)
     if (role) {
-      // treeRef.value!.setCheckedKeys(role as unknown as Array<number>)
-      defaultCheckedKeys.value = role
+      role?.forEach((item: any) => {
+        unref(treeRef)?.setChecked(item, true, false)
+      })
     }
   } else if (type === 'data') {
     const deptRes = await listSimpleDeptApi()
@@ -272,12 +278,11 @@ const handleScope = async (type: string, row: RoleApi.RoleVO) => {
     const role = await RoleApi.getRoleApi(row.id)
     dataScopeForm.dataScope = role.dataScope
     if (role.dataScopeDeptIds) {
-      // treeRef.value!.setCheckedKeys(role.dataScopeDeptIds as unknown as Array<number>, false)
-      defaultCheckedKeys.value = role.dataScopeDeptIds
+      role.dataScopeDeptIds?.forEach((item: any) => {
+        unref(treeRef)?.setChecked(item, true, false)
+      })
     }
   }
-  actionScopeType.value = type
-  dialogScopeVisible.value = true
 }
 // 保存权限
 const submitScope = async () => {
@@ -312,3 +317,10 @@ onMounted(() => {
   init()
 })
 </script>
+<style scoped>
+.card {
+  width: 100%;
+  max-height: 400px;
+  overflow-y: scroll;
+}
+</style>
diff --git a/src/views/system/tenantPackage/index.vue b/src/views/system/tenantPackage/index.vue
index a665b8af..9222365b 100644
--- a/src/views/system/tenantPackage/index.vue
+++ b/src/views/system/tenantPackage/index.vue
@@ -25,7 +25,7 @@
       ref="formRef"
     >
       <template #menuIds>
-        <el-card class="w-120">
+        <el-card>
           <template #header>
             <div class="card-header">
               全选/全不选:
@@ -91,6 +91,16 @@ const dialogTitle = ref('edit') // 弹出层标题
 const handleCheckedTreeNodeAll = () => {
   treeRef.value!.setCheckedNodes(treeNodeAll.value ? menuOptions.value : [])
 }
+
+const validateCategory = (rule: any, value: any, callback: any) => {
+  if (!treeRef.value!.getCheckedKeys().length) {
+    callback(new Error('该项为必填项'))
+  } else {
+    callback()
+  }
+}
+rules.menuIds = [{ required: true, validator: validateCategory, trigger: 'blur' }]
+
 const getTree = async () => {
   const res = await listSimpleMenusApi()
   menuOptions.value = handleTree(res)
@@ -125,7 +135,9 @@ const handleUpdate = async (rowId: number) => {
   const res = await TenantPackageApi.getTenantPackageApi(rowId)
   unref(formRef)?.setValues(res)
   // 设置选中
-  unref(treeRef)?.setCheckedKeys(res.menuIds)
+  res.menuIds?.forEach((item: any) => {
+    unref(treeRef)?.setChecked(item, true, false)
+  })
 }
 
 // 提交按钮
@@ -166,3 +178,10 @@ onMounted(async () => {
 })
 // getList()
 </script>
+<style scoped>
+.el-card {
+  width: 100%;
+  max-height: 400px;
+  overflow-y: scroll;
+}
+</style>

From 8e575f359f5fdd6a96f5a989315eeeb2d9fd9425 Mon Sep 17 00:00:00 2001
From: gexinzhineng/gxzn27 <1348660141@qq.com>
Date: Sat, 4 Mar 2023 16:00:59 +0800
Subject: [PATCH 14/17] =?UTF-8?q?=E7=94=9F=E6=88=90json=E5=92=8Coptions?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/bpm/form/formEditor.vue | 46 +++++++++++++++++++++++++++++--
 1 file changed, 44 insertions(+), 2 deletions(-)

diff --git a/src/views/bpm/form/formEditor.vue b/src/views/bpm/form/formEditor.vue
index 52b3709d..1070739e 100644
--- a/src/views/bpm/form/formEditor.vue
+++ b/src/views/bpm/form/formEditor.vue
@@ -3,9 +3,21 @@
     <!-- 表单设计器 -->
     <fc-designer ref="designer" height="780px">
       <template #handle>
+        <XButton type="primary" title="生成JSON" @click="showJson" />
+        <XButton type="primary" title="生成Options" @click="showOption" />
         <XButton type="primary" :title="t('action.save')" @click="handleSave" />
       </template>
     </fc-designer>
+    <Dialog :title="dialogTitle" v-model="dialogVisible1" maxHeight="600">
+      <div ref="editor" v-if="dialogVisible1">
+        <XTextButton style="float: right" :title="t('common.copy')" @click="copy(formValue)" />
+        <el-scrollbar height="580">
+          <pre>
+            {{ formValue }}
+          </pre>
+        </el-scrollbar>
+      </div>
+    </Dialog>
     <!-- 表单保存的弹窗 -->
     <XModal v-model="dialogVisible" title="保存表单">
       <el-form ref="formRef" :model="formValues" :rules="formRules" label-width="80px">
@@ -48,13 +60,18 @@ import { DICT_TYPE, getIntDictOptions } from '@/utils/dict'
 import { CommonStatusEnum } from '@/utils/constants'
 import * as FormApi from '@/api/bpm/form'
 import { encodeConf, encodeFields, setConfAndFields } from '@/utils/formCreate'
+import { useClipboard } from '@vueuse/core'
+
 const { t } = useI18n() // 国际化
 const message = useMessage() // 消息
 const { query } = useRoute() // 路由
 
 const designer = ref() // 表单设计器
-
+const type = ref(-1)
+const formValue = ref('')
+const dialogTitle = ref('')
 const dialogVisible = ref(false) // 弹窗是否展示
+const dialogVisible1 = ref(false) // 弹窗是否展示
 const dialogLoading = ref(false) // 弹窗的加载中
 const formRef = ref<FormInstance>()
 const formRules = reactive({
@@ -98,7 +115,32 @@ const submitForm = async () => {
     dialogLoading.value = false
   }
 }
-
+const showJson = () => {
+  openModel('生成JSON')
+  type.value = 0
+  formValue.value = designer.value.getRule()
+}
+const showOption = () => {
+  openModel('生成Options')
+  type.value = 1
+  formValue.value = designer.value.getOption()
+}
+const openModel = (title: string) => {
+  dialogVisible1.value = true
+  dialogTitle.value = title
+}
+/** 复制 **/
+const copy = async (text: string) => {
+  const { copy, copied, isSupported } = useClipboard({ source: text })
+  if (!isSupported) {
+    message.error(t('common.copyError'))
+  } else {
+    await copy()
+    if (unref(copied)) {
+      message.success(t('common.copySuccess'))
+    }
+  }
+}
 // ========== 初始化 ==========
 onMounted(() => {
   // 场景一:新增表单

From 853dab7ffbd932e0eb2276f2ca780c55b8e636ae Mon Sep 17 00:00:00 2001
From: gexinzhineng/gxzn27 <1348660141@qq.com>
Date: Sat, 4 Mar 2023 16:40:47 +0800
Subject: [PATCH 15/17] =?UTF-8?q?=E6=90=9C=E7=B4=A2=E6=97=A5=E6=9C=9F?=
 =?UTF-8?q?=E6=98=BE=E7=A4=BA=E4=B8=8D=E5=85=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/views/bpm/group/group.data.ts    | 1 +
 src/views/bpm/oa/leave/leave.data.ts | 1 +
 src/views/bpm/task/todo/todo.data.ts | 1 +
 3 files changed, 3 insertions(+)

diff --git a/src/views/bpm/group/group.data.ts b/src/views/bpm/group/group.data.ts
index 9d30f3b2..613a7290 100644
--- a/src/views/bpm/group/group.data.ts
+++ b/src/views/bpm/group/group.data.ts
@@ -16,6 +16,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
   primaryType: 'id',
   primaryTitle: '编号',
   action: true,
+  searchSpan: 8,
   columns: [
     {
       title: '组名',
diff --git a/src/views/bpm/oa/leave/leave.data.ts b/src/views/bpm/oa/leave/leave.data.ts
index da113baf..5b6f2c52 100644
--- a/src/views/bpm/oa/leave/leave.data.ts
+++ b/src/views/bpm/oa/leave/leave.data.ts
@@ -16,6 +16,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
   primaryTitle: '申请编号',
   action: true,
   actionWidth: '260',
+  searchSpan: 8,
   columns: [
     {
       title: t('common.status'),
diff --git a/src/views/bpm/task/todo/todo.data.ts b/src/views/bpm/task/todo/todo.data.ts
index 85c58ce9..419a80fe 100644
--- a/src/views/bpm/task/todo/todo.data.ts
+++ b/src/views/bpm/task/todo/todo.data.ts
@@ -7,6 +7,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
   primaryKey: 'id',
   primaryType: null,
   action: true,
+  searchSpan: 8,
   columns: [
     {
       title: '任务编号',

From aa6c50b7d98f06ca5b464c7b9d060c28abaf1822 Mon Sep 17 00:00:00 2001
From: YunaiV <zhijiantianya@gmail.com>
Date: Sun, 5 Mar 2023 02:32:24 +0800
Subject: [PATCH 16/17] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20static=20=E6=BC=94?=
 =?UTF-8?q?=E7=A4=BA=E7=8E=AF=E5=A2=83=E7=9A=84=E6=89=93=E5=8C=85?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .env.static  | 31 +++++++++++++++++++++++++++++++
 package.json |  1 +
 2 files changed, 32 insertions(+)
 create mode 100644 .env.static

diff --git a/.env.static b/.env.static
new file mode 100644
index 00000000..034a7f4d
--- /dev/null
+++ b/.env.static
@@ -0,0 +1,31 @@
+# 开发环境
+NODE_ENV=production
+
+VITE_DEV=false
+
+# 请求路径
+VITE_BASE_URL='http://localhost:48080'
+
+# 上传路径
+VITE_UPLOAD_URL='http://localhost:48080/admin-api/infra/file/upload'
+
+# 接口前缀
+VITE_API_BASEPATH=
+
+# 接口地址
+VITE_API_URL=/admin-api
+
+# 是否删除debugger
+VITE_DROP_DEBUGGER=true
+
+# 是否删除console.log
+VITE_DROP_CONSOLE=true
+
+# 是否sourcemap
+VITE_SOURCEMAP=false
+
+# 打包路径
+VITE_BASE_PATH=/admin-ui-vue3/
+
+# 输出路径
+VITE_OUT_DIR=dist-dev
diff --git a/package.json b/package.json
index b98dbfc6..b6959d50 100644
--- a/package.json
+++ b/package.json
@@ -11,6 +11,7 @@
     "build:pro": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode pro",
     "build:dev": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode dev",
     "build:test": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode test",
+    "build:static": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode static",
     "serve:pro": "vite preview --mode pro",
     "serve:dev": "vite preview --mode dev",
     "serve:test": "vite preview --mode test",

From 73de987443fe69eb5a5bcb5d5cdbb67b1153b289 Mon Sep 17 00:00:00 2001
From: YunaiV <zhijiantianya@gmail.com>
Date: Sun, 5 Mar 2023 12:13:07 +0800
Subject: [PATCH 17/17] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20front=20=E7=8E=AF?=
 =?UTF-8?q?=E5=A2=83=E9=85=8D=E7=BD=AE=EF=BC=8C=E7=94=A8=E4=BA=8E=E5=89=8D?=
 =?UTF-8?q?=E7=AB=AF=E5=90=8C=E5=AD=A6=E7=9B=B4=E6=8E=A5=E5=90=AF=E5=8A=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .env.front   | 19 +++++++++++++++++++
 package.json |  1 +
 2 files changed, 20 insertions(+)
 create mode 100644 .env.front

diff --git a/.env.front b/.env.front
new file mode 100644
index 00000000..2641417d
--- /dev/null
+++ b/.env.front
@@ -0,0 +1,19 @@
+# 本地开发环境
+NODE_ENV=development
+
+VITE_DEV=true
+
+# 请求路径
+VITE_BASE_URL='http://api-dashboard.yudao.iocoder.cn'
+
+# 上传路径
+VITE_UPLOAD_URL='http://api-dashboard.yudao.iocoder.cn/admin-api/infra/file/upload'
+
+# 接口前缀
+VITE_API_BASEPATH=/dev-api
+
+# 接口地址
+VITE_API_URL=/admin-api
+
+# 打包路径
+VITE_BASE_PATH=/
diff --git a/package.json b/package.json
index b6959d50..ab8683a5 100644
--- a/package.json
+++ b/package.json
@@ -7,6 +7,7 @@
   "scripts": {
     "i": "pnpm install",
     "dev": "vite --mode base",
+    "front": "vite --mode front",
     "ts:check": "vue-tsc --noEmit",
     "build:pro": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode pro",
     "build:dev": "node --max_old_space_size=8000 ./node_modules/vite/bin/vite.js build --mode dev",