From 68a5db5933c50f736119e0ca4d5d3175ee6bd139 Mon Sep 17 00:00:00 2001
From: zmj <1493694146@qq.com>
Date: Sat, 25 May 2024 20:59:42 +0800
Subject: [PATCH] 'add'

---
 src/api/oa_Initiate.ts                      |  51 ++++++
 src/components/generateForm/index.vue       |  72 ++++-----
 src/components/oaFlow/index.vue             |  68 ++++++++
 src/views/oa_CopyMe/index.vue               | 124 ++++++++++++++
 src/views/oa_Deal/detail.vue                |   0
 src/views/oa_Deal/index.vue                 | 118 ++++++++++++++
 src/views/oa_Initiate/detail.vue            |  76 +++++++++
 src/views/oa_Initiate/edit.vue              |  87 ++++++++++
 src/views/oa_Initiate/index.vue             | 169 ++++++++++++++++++++
 src/views/oa_flow_type/edit.vue             |  72 +++------
 src/views/oa_plan/detail.vue                |   2 -
 src/views/oa_work/components/sendReport.vue |  19 +++
 src/views/oa_work/index.vue                 |   2 +-
 13 files changed, 764 insertions(+), 96 deletions(-)
 create mode 100644 src/api/oa_Initiate.ts
 create mode 100644 src/components/oaFlow/index.vue
 create mode 100644 src/views/oa_CopyMe/index.vue
 create mode 100644 src/views/oa_Deal/detail.vue
 create mode 100644 src/views/oa_Deal/index.vue
 create mode 100644 src/views/oa_Initiate/detail.vue
 create mode 100644 src/views/oa_Initiate/edit.vue
 create mode 100644 src/views/oa_Initiate/index.vue

diff --git a/src/api/oa_Initiate.ts b/src/api/oa_Initiate.ts
new file mode 100644
index 0000000..302a35e
--- /dev/null
+++ b/src/api/oa_Initiate.ts
@@ -0,0 +1,51 @@
+import request from "@/utils/request";
+
+// // 审批流程表列表
+// export function apiOaFlowLists(params: any) {
+//   return request.get({ url: "/works.bgsp.oa_flow/lists", params });
+// }
+
+// // 添加审批流程表
+// export function apiOaFlowAdd(params: any) {
+//   return request.post({ url: "/works.bgsp.oa_flow/add", params });
+// }
+
+// // 编辑审批流程表
+// export function apiOaFlowEdit(params: any) {
+//   return request.post({ url: "/works.bgsp.oa_flow/edit", params });
+// }
+
+// // 删除审批流程表
+// export function apiOaFlowDelete(params: any) {
+//   return request.post({ url: "/works.bgsp.oa_flow/delete", params });
+// }
+
+// // 审批流程表详情
+// export function apiOaFlowDetail(params: any) {
+//   return request.get({ url: "/works.bgsp.oa_flow/detail", params });
+// }
+
+// 审批流程表列表
+export function apiOaFlowTypeLists(params: any) {
+  return request.get({ url: "/works.bgsp.oa_flow_type/all", params });
+}
+
+export function apiOaoaApproveLists(params: any) {
+  return request.get({ url: "/works.bgsp.oa_approve/lists", params });
+}
+
+export function apiOaoaApproveDetail(params: any) {
+  return request.get({ url: "/works.bgsp.oa_approve/detail", params });
+}
+
+export function apiOaoaApproveAdd(params: any) {
+  return request.post({ url: "/works.bgsp.oa_approve/add", params });
+}
+
+export function apiOaoaApproveCopy(params: any) {
+  return request.get({ url: "/works.bgsp.oa_approve/copy", params });
+}
+
+export function apiOaoaApprovelst(params: any) {
+  return request.get({ url: "/works.bgsp.oa_approve/lst", params });
+}
diff --git a/src/components/generateForm/index.vue b/src/components/generateForm/index.vue
index 1a82dc9..5c34024 100644
--- a/src/components/generateForm/index.vue
+++ b/src/components/generateForm/index.vue
@@ -2,28 +2,29 @@
     <el-form ref="formRef" :model="formData" label-width="90px" :rules="formRules">
         <el-row>
             <el-col :span="8" v-for="(item, index) in config" :key="index">
-                <el-form-item :label="item.label" v-if="item.type == 0" :prop="item.isRequired ? item.value : ''">
-                    <el-input v-model="formData[item.value]" clearable :placeholder="'请输入' + item.label" />
+                <el-form-item :label="item.label" v-if="item.type == 0">
+                    <el-input v-model="formData[item.value].value" clearable :placeholder="'请输入' + item.label" />
                 </el-form-item>
-                <el-form-item :label="item.label" v-if="item.type == 1" :prop="item.isRequired ? item.value : ''">
-                    <el-date-picker class="flex-1 !flex" v-model="formData[item.value]" clearable type="date"
+                <el-form-item :label="item.label" v-if="item.type == 1">
+                    <el-date-picker class="flex-1 !flex" v-model="formData[item.value].value" clearable type="date"
                         value-format="YYYY-MM-DD" :placeholder="'请选择' + item.label">
                     </el-date-picker>
                 </el-form-item>
-                <el-form-item :label="item.label" v-if="item.type == 2" :prop="item.isRequired ? item.value : ''">
-                    <el-select v-model="formData[item.value]" :placeholder="'请选择' + item.label" class="flex-1">
+                <el-form-item :label="item.label" v-if="item.type == 2">
+                    <el-select v-model="formData[item.value].value" :placeholder="'请选择' + item.label" class="flex-1">
                         <el-option :label="item.name" :value="item.id" v-for="item in deptList">
                         </el-option>
                     </el-select>
                 </el-form-item>
-                <el-form-item :label="item.label" v-if="item.type == 3" :prop="item.isRequired ? item.value : ''">
-                    <el-input v-model="formData[item.value + '_name']" readonly :placeholder="'点击选择' + item.label"
+                <el-form-item :label="item.label" v-if="item.type == 3">
+                    <el-input v-model="formData[item.value].value" readonly :placeholder="'点击选择' + item.label"
                         @click="userclick(item.value)" />
                 </el-form-item>
-                <el-form-item :label="item.label" v-if="item.type == 4" :prop="item.isRequired ? item.value : ''">
-                    <el-input v-model="formData[item.value]" clearable type="textarea" :placeholder="'请输入' + item.label" />
+                <el-form-item :label="item.label" v-if="item.type == 4">
+                    <el-input v-model="formData[item.value].value" clearable type="textarea"
+                        :placeholder="'请输入' + item.label" />
                 </el-form-item>
-                <el-form-item :label="item.label" v-if="item.type == 5" :prop="item.isRequired ? item.value : ''">
+                <el-form-item :label="item.label" v-if="item.type == 5">
                     <uploadAnnex :form-data="formData"></uploadAnnex>
                 </el-form-item>
             </el-col>
@@ -45,6 +46,10 @@ const props = defineProps({
         type: Array,
         required: true
     },
+    formData: {
+        type: Object,
+        required: true
+    }
 })
 
 const deptList = ref([])
@@ -53,39 +58,11 @@ const getDeptList = async () => {
     deptList.value = res.lists
 }
 getDeptList()
-const formData = reactive({})
-
 // 表单验证
 const formRules = reactive({
 
 });
 
-const setRules = () => {
-    props.config.forEach(item => {
-        if (item.isRequired) {
-            formRules[item.value] = [
-                {
-                    required: true,
-                    message: "请输入" + item.label,
-                    trigger: ["blur"],
-                },
-            ]
-        }
-    })
-}
-
-setRules()
-
-
-
-
-
-
-
-
-
-
-
 
 const showPerDialog = ref(false)
 const personnel = ref(null)
@@ -98,12 +75,19 @@ const userclick = async (val) => {
     personnel.value.open()
 }
 const submituser = (e) => {
-    formData[value + '_name'] = e.name
-    formData[value] = e.id
+    props.formData[value + '_name'] = e.name
+    props.formData[value] = e.id
     showPerDialog.value = false
 }
 
-
-
-
+const setKey = () => {
+    props.config.forEach(item => {
+        props.formData[item.value] = {
+            name: item.label,
+            value: ""
+        }
+    })
+    console.log(props.formData, 'formData');
+}
+setKey()
 </script>
\ No newline at end of file
diff --git a/src/components/oaFlow/index.vue b/src/components/oaFlow/index.vue
new file mode 100644
index 0000000..e1f6461
--- /dev/null
+++ b/src/components/oaFlow/index.vue
@@ -0,0 +1,68 @@
+<template>
+    <el-form ref="formRef" :model="formData" label-width="100px" :rules="formRules">
+        <el-row>
+            <el-col :span="8">
+                <el-form-item label="审批流程">
+                    <el-select v-model="formData.flow_id" placeholder="选择审批流程" class="flex-1">
+                        <el-option :label="item.name" :value="item.id" v-for="item in flowList">
+                        </el-option>
+                    </el-select>
+                </el-form-item>
+            </el-col>
+            <el-col :span="8">
+                <el-form-item label="审核人" prop="name">
+                    <el-input v-model="formData.check_admin_names" clearable placeholder="点击选择审核人" readonly
+                        @click="userclick('check_admin')" />
+                </el-form-item>
+            </el-col>
+            <el-col :span="8">
+                <el-form-item label="抄送人">
+                    <el-input v-model="formData.copy_names" clearable placeholder="点击选择抄送人" readonly
+                        @click="userclick('copy')" />
+                </el-form-item>
+            </el-col>
+        </el-row>
+        <div v-if="showPerDialog">
+            <personnelselector ref="personnel" @confirm="submituser" type="2">
+            </personnelselector>
+        </div>
+    </el-form>
+</template>
+<script setup>
+import { reactive, ref, defineProps } from 'vue'
+import { apiOaFlowLists } from '@/api/oa_flow'
+
+const props = defineProps({
+    formData: {
+        type: Object,
+        required: true
+    },
+})
+
+
+const showPerDialog = ref(false)
+const personnel = ref(null)
+
+let value
+const userclick = async (val) => {
+    showPerDialog.value = true
+    value = val
+    await nextTick()
+    personnel.value.open()
+}
+const submituser = (e) => {
+    props.formData[value + '_names'] = e.map(item => item.name).join(',')
+    props.formData[value + '_ids'] = e.map(item => item.id).join(',')
+    showPerDialog.value = false
+}
+
+
+const flowList = ref([])
+const getFlowList = async () => {
+    const res = await apiOaFlowLists()
+    flowList.value = res.lists
+}
+getFlowList()
+
+
+</script>
\ No newline at end of file
diff --git a/src/views/oa_CopyMe/index.vue b/src/views/oa_CopyMe/index.vue
new file mode 100644
index 0000000..94cfd6a
--- /dev/null
+++ b/src/views/oa_CopyMe/index.vue
@@ -0,0 +1,124 @@
+<template>
+    <div>
+        <el-card class="!border-none mb-4" shadow="never">
+            <el-form class="mb-[-16px]" :model="queryParams" inline>
+                <el-form-item label="印章类型名称" prop="title">
+                    <el-input class="w-[280px]" v-model="queryParams.title" clearable placeholder="请输入印章类型名称" />
+                </el-form-item>
+                <el-form-item label="状态" prop="status">
+                    <el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!flex-1">
+                        <el-option label="禁用" :value="0" />
+                        <el-option label="启用" :value="1" />
+                    </el-select>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="resetPage">查询</el-button>
+                    <el-button @click="resetParams">重置</el-button>
+                </el-form-item>
+            </el-form>
+        </el-card>
+        <el-card class="!border-none" v-loading="pager.loading" shadow="never">
+            <el-button v-perms="['works/xzgl.oa_seal_cate/add']" type="primary" @click="handleAdd">
+                <template #icon>
+                    <icon name="el-icon-Plus" />
+                </template>
+                新增
+            </el-button>
+            <el-button v-perms="['works/xzgl.oa_seal_cate/delete']" :disabled="!selectData.length"
+                @click="handleDelete(selectData)">
+                删除
+            </el-button>
+            <div class="mt-4">
+                <el-table :data="pager.lists" @selection-change="handleSelectionChange">
+                    <el-table-column type="selection" width="55" />
+                    <el-table-column label="id" prop="title" show-overflow-tooltip />
+                    <el-table-column label="申请人" prop="user_name" show-overflow-tooltip />
+                    <el-table-column label="申请时间" prop="create_time" show-overflow-tooltip />
+                    <el-table-column label="审批类型" prop="type_name" show-overflow-tooltip />
+                    <el-table-column label="所属部门" prop="dept_name" show-overflow-tooltip />
+                    <el-table-column label="当前审批人" prop="check_admin_users" show-overflow-tooltip />
+                    <el-table-column label="审批状态" prop="check_status_text" show-overflow-tooltip />
+                    <el-table-column label="备注" prop="status_text" show-overflow-tooltip />
+                    <el-table-column label="操作" width="120" fixed="right">
+                        <template #default="{ row }">
+                            <el-button v-perms="['works/xzgl.oa_seal_cate/edit']" type="primary" link
+                                @click="handleEdit(row)">
+                                编辑
+                            </el-button>
+                            <el-button v-perms="['works/xzgl.oa_seal_cate/delete']" type="danger" link
+                                @click="handleDelete(row.id)">
+                                删除
+                            </el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+            </div>
+            <div class="flex mt-4 justify-end">
+                <pagination v-model="pager" @change="getLists" />
+            </div>
+        </el-card>
+        <!-- <edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> -->
+    </div>
+</template>
+
+<script lang="ts" setup name="oaSealCateLists">
+import { usePaging } from '@/hooks/usePaging'
+import { useDictData } from '@/hooks/useDictOptions'
+import { apiOaoaApproveCopy } from '@/api/oa_Initiate'
+import { timeFormat } from '@/utils/util'
+import feedback from '@/utils/feedback'
+// import EditPopup from './edit.vue'
+
+const editRef = shallowRef<InstanceType<typeof EditPopup>>()
+// 是否显示编辑框
+const showEdit = ref(false)
+
+
+// 查询条件
+const queryParams = reactive({
+    title: '',
+    status: ''
+})
+
+// 选中数据
+const selectData = ref<any[]>([])
+
+// 表格选择后回调事件
+const handleSelectionChange = (val: any[]) => {
+    selectData.value = val.map(({ id }) => id)
+}
+
+// 获取字典数据
+const { dictData } = useDictData('')
+
+// 分页相关
+const { pager, getLists, resetParams, resetPage } = usePaging({
+    fetchFun: apiOaoaApproveCopy,
+    params: queryParams
+})
+
+// 添加
+const handleAdd = async () => {
+    showEdit.value = true
+    await nextTick()
+    editRef.value?.open('add')
+}
+
+// 编辑
+const handleEdit = async (data: any) => {
+    showEdit.value = true
+    await nextTick()
+    editRef.value?.open('edit')
+    editRef.value?.setFormData(data)
+}
+
+// 删除
+const handleDelete = async (id: number | any[]) => {
+    await feedback.confirm('确定要删除?')
+    await apiOaSealCateDelete({ id })
+    getLists()
+}
+
+getLists()
+</script>
+
diff --git a/src/views/oa_Deal/detail.vue b/src/views/oa_Deal/detail.vue
new file mode 100644
index 0000000..e69de29
diff --git a/src/views/oa_Deal/index.vue b/src/views/oa_Deal/index.vue
new file mode 100644
index 0000000..69baab3
--- /dev/null
+++ b/src/views/oa_Deal/index.vue
@@ -0,0 +1,118 @@
+<template>
+    <div>
+        <el-card class="!border-none mb-4" shadow="never">
+            <el-form class="mb-[-16px]" :model="queryParams" inline>
+                <el-form-item label="印章类型名称" prop="title">
+                    <el-input class="w-[280px]" v-model="queryParams.title" clearable placeholder="请输入印章类型名称" />
+                </el-form-item>
+                <el-form-item label="状态" prop="status">
+                    <el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!flex-1">
+                        <el-option label="禁用" :value="0" />
+                        <el-option label="启用" :value="1" />
+                    </el-select>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="resetPage">查询</el-button>
+                    <el-button @click="resetParams">重置</el-button>
+                </el-form-item>
+            </el-form>
+        </el-card>
+        <el-card class="!border-none" v-loading="pager.loading" shadow="never">
+            <el-button v-perms="['works/xzgl.oa_seal_cate/add']" type="primary" @click="handleAdd">
+                <template #icon>
+                    <icon name="el-icon-Plus" />
+                </template>
+                新增
+            </el-button>
+            <el-button v-perms="['works/xzgl.oa_seal_cate/delete']" :disabled="!selectData.length"
+                @click="handleDelete(selectData)">
+                删除
+            </el-button>
+            <div class="mt-4">
+                <el-table :data="pager.lists" @selection-change="handleSelectionChange">
+                    <el-table-column type="selection" width="55" />
+                    <el-table-column label="申请人" prop="user_name" show-overflow-tooltip />
+                    <el-table-column label="申请时间" prop="create_time" show-overflow-tooltip />
+                    <el-table-column label="审批类型" prop="type_name" show-overflow-tooltip />
+                    <el-table-column label="所属部门" prop="dept_name" show-overflow-tooltip />
+                    <el-table-column label="当前审批人" prop="check_admin_users" show-overflow-tooltip />
+                    <el-table-column label="审批状态" prop="check_status_text" show-overflow-tooltip />
+                    <el-table-column label="操作" width="120" fixed="right">
+                        <template #default="{ row }">
+                            <el-button v-perms="['works/xzgl.oa_seal_cate/edit']" type="primary" link
+                                @click="handleEdit(row)">
+                                详情
+                            </el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+            </div>
+            <div class="flex mt-4 justify-end">
+                <pagination v-model="pager" @change="getLists" />
+            </div>
+        </el-card>
+        <!-- <edit-popup v-if="showEdit" ref="editRef" :dict-data="dictData" @success="getLists" @close="showEdit = false" /> -->
+    </div>
+</template>
+
+<script lang="ts" setup name="oaSealCateLists">
+import { usePaging } from '@/hooks/usePaging'
+import { useDictData } from '@/hooks/useDictOptions'
+import { apiOaoaApprovelst } from '@/api/oa_Initiate'
+import { timeFormat } from '@/utils/util'
+import feedback from '@/utils/feedback'
+// import EditPopup from './edit.vue'
+
+const editRef = shallowRef<InstanceType<typeof EditPopup>>()
+// 是否显示编辑框
+const showEdit = ref(false)
+
+
+// 查询条件
+const queryParams = reactive({
+    title: '',
+    status: ''
+})
+
+// 选中数据
+const selectData = ref<any[]>([])
+
+// 表格选择后回调事件
+const handleSelectionChange = (val: any[]) => {
+    selectData.value = val.map(({ id }) => id)
+}
+
+// 获取字典数据
+const { dictData } = useDictData('')
+
+// 分页相关
+const { pager, getLists, resetParams, resetPage } = usePaging({
+    fetchFun: apiOaoaApprovelst,
+    params: queryParams
+})
+
+// 添加
+const handleAdd = async () => {
+    showEdit.value = true
+    await nextTick()
+    editRef.value?.open('add')
+}
+
+// 编辑
+const handleEdit = async (data: any) => {
+    showEdit.value = true
+    await nextTick()
+    editRef.value?.open('edit')
+    editRef.value?.setFormData(data)
+}
+
+// 删除
+const handleDelete = async (id: number | any[]) => {
+    await feedback.confirm('确定要删除?')
+    await apiOaSealCateDelete({ id })
+    getLists()
+}
+
+getLists()
+</script>
+
diff --git a/src/views/oa_Initiate/detail.vue b/src/views/oa_Initiate/detail.vue
new file mode 100644
index 0000000..a44ff22
--- /dev/null
+++ b/src/views/oa_Initiate/detail.vue
@@ -0,0 +1,76 @@
+<template>
+    <div class="detail-popup">
+        <popup ref="popupRef" title="日程安排详情" :async="true" width="550px" @confirm="handleSubmit" @close="handleClose">
+            <el-descriptions :column="1" border>
+                <el-descriptions-item label="工作安排主题" label-align="left" align="left" label-class-name="my-label">
+                    {{ formData.title }}
+                </el-descriptions-item>
+                <el-descriptions-item label="日程优先级" label-align="left" align="left" label-class-name="my-label">
+                    {{ formData.type_text }}
+                </el-descriptions-item>
+                <el-descriptions-item label="开始时间" label-align="left" align="left" label-class-name="my-label">
+                    {{ formData.start_time }}
+                </el-descriptions-item>
+                <el-descriptions-item label="结束时间" label-align="left" align="left" label-class-name="my-label">
+                    {{ formData.end_time }}
+                </el-descriptions-item>
+                <el-descriptions-item label="提醒类型" label-align="left" align="left" label-class-name="my-label">
+                    {{ formData.remind_type_text }}
+                </el-descriptions-item>
+                <el-descriptions-item label="描述" label-align="left" align="left" label-class-name="my-label">
+                    {{ formData.remark }}
+                </el-descriptions-item>
+            </el-descriptions>
+        </popup>
+    </div>
+</template>
+
+<script lang="ts" setup name="customdetail">
+import Popup from '@/components/popup/index.vue'
+import type { PropType } from 'vue'
+
+const emit = defineEmits(['close'])
+const popupRef = shallowRef<InstanceType<typeof Popup>>()
+
+// 表单数据
+const formData = reactive({
+
+})
+
+// 获取详情
+const setFormData = async (data: Record<any, any>) => {
+    for (const key in data) {
+        if (data[key] != null && data[key] != undefined) {
+            //@ts-ignore
+            formData[key] = data[key]
+        }
+    }
+    console.log(formData, 'formData')
+}
+
+
+// 提交按钮
+const handleSubmit = async () => {
+    popupRef.value?.close()
+
+}
+
+//打开弹窗
+const open = () => {
+    popupRef.value?.open()
+}
+
+// 关闭回调
+const handleClose = () => {
+    emit('close')
+}
+
+
+
+
+defineExpose({
+    open,
+    setFormData,
+})
+</script>
+
diff --git a/src/views/oa_Initiate/edit.vue b/src/views/oa_Initiate/edit.vue
new file mode 100644
index 0000000..0ee7509
--- /dev/null
+++ b/src/views/oa_Initiate/edit.vue
@@ -0,0 +1,87 @@
+<template>
+    <div class="edit-popup">
+        <popup ref="popupRef" :title="popupTitle" :async="true" width="60vw" @confirm="handleSubmit" @close="handleClose">
+            <el-card>
+                <template #header>
+                    审批内容
+                </template>
+                <generateForm :config="formData.data" :form-data="formData.extends"></generateForm>
+            </el-card>
+            <el-card>
+                <template #header>
+                    审批流程
+                </template>
+                <oaFlow :form-data="formData"></oaFlow>
+            </el-card>
+        </popup>
+    </div>
+</template>
+
+<script lang="ts" setup name="oaFlowTypeEdit">
+import generateForm from './../../components/generateForm/index.vue'
+import Popup from "@/components/popup/index.vue";
+import { apiOaoaApproveAdd } from "@/api/oa_Initiate"
+
+const emit = defineEmits(["success", "close"]);
+const formRef = shallowRef<FormInstance>();
+const popupRef = shallowRef<InstanceType<typeof Popup>>();
+const mode = ref("add");
+const showDialog = ref(false)
+
+// 弹窗标题
+const popupTitle = computed(() => {
+    return mode.value == "edit" ? "编辑审批类型" : "新增审批类型";
+});
+
+// 表单数据
+const formData = reactive({
+    data: [],
+    extends: {}
+});
+
+
+// 表单验证
+const formRules = reactive<any>({
+    type: [
+        {
+            required: true,
+            message: "请输入所属分类",
+            trigger: ["blur"],
+        },
+    ]
+});
+
+// 获取详情
+const setFormData = async (data: Record<any, any>) => {
+    formData.data = data.data;
+};
+
+
+
+
+// 提交按钮
+const handleSubmit = async () => {
+    console.log(formData)
+    await formRef.value?.validate();
+    const data = { ...formData };
+    await apiOaoaApproveAdd(data)
+    popupRef.value?.close();
+    emit("success");
+};
+
+//打开弹窗
+const open = (type = "add") => {
+    mode.value = type;
+    popupRef.value?.open();
+};
+
+// 关闭回调
+const handleClose = () => {
+    emit("close");
+};
+
+defineExpose({
+    open,
+    setFormData,
+});
+</script>
\ No newline at end of file
diff --git a/src/views/oa_Initiate/index.vue b/src/views/oa_Initiate/index.vue
new file mode 100644
index 0000000..c1d653b
--- /dev/null
+++ b/src/views/oa_Initiate/index.vue
@@ -0,0 +1,169 @@
+<template>
+    <div class="flex content">
+        <el-card style="flex:1" class="mr-5">
+            <template #header>
+                审批新申请
+            </template>
+            <div v-for="(item, index) in lists.filter(e => e.children.length > 0)" :key="index" class="tit">
+                {{ item.name }}
+                <div class="tit-content">
+                    <div v-for="(e, i) in item.children" :key="i" class="tit-li" @click="handleEdit(e.id)">{{ e.title }}
+                    </div>
+                </div>
+            </div>
+        </el-card>
+        <el-card style="flex:4">
+            <template #header>
+                审批列表
+            </template>
+            <el-form class="mb-[-16px] mt-5" :model="queryParams" inline>
+                <el-form-item label="类型" prop="type">
+                    <el-select v-model="queryParams.type" clearable placeholder="请选择类型" class="flex-1">
+                        <el-option label="全部" :value="1" />
+                        <el-option label="待审核" :value="2" />
+                        <el-option label="审核通过," :value="3" />
+                        <el-option label="审核不通过" :value="4" />
+                    </el-select>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" @click="resetPage">查询</el-button>
+                    <el-button @click="resetParams">重置</el-button>
+                </el-form-item>
+            </el-form>
+            <div class="mt-4">
+                <el-table :data="pager.lists" @selection-change="handleSelectionChange">
+                    <el-table-column type="selection" width="55" />
+                    <el-table-column label="申请人" prop="user_name" show-overflow-tooltip />
+                    <el-table-column label="申请时间" prop="create_time" show-overflow-tooltip />
+                    <el-table-column label="审批类型" prop="type_name" show-overflow-tooltip />
+                    <el-table-column label="所属部门" prop="dept_name" show-overflow-tooltip />
+                    <el-table-column label="当前审批人" prop="check_admin_users" show-overflow-tooltip />
+                    <el-table-column label="审批状态" prop="check_status_text" show-overflow-tooltip />
+                    <el-table-column label="操作" width="120" fixed="right">
+                        <template #default="{ row }">
+                            <el-button link @click="handDetail(row.id)">
+                                详情
+                            </el-button>
+                        </template>
+                    </el-table-column>
+                </el-table>
+            </div>
+            <div class="flex mt-4 justify-end">
+                <pagination v-model="pager" @change="getLists" />
+            </div>
+        </el-card>
+        <edit-popup v-if="showEdit" ref="editRef" :deptList="deptList" :dict-data="dictData" @success="getLists"
+            @close="showEdit = false" />
+        <detailPopup v-if="showDetail" ref="detailRef" @success="showDetail = false" @close="showDetail = false" />
+
+    </div>
+</template>
+
+<script lang="ts" setup >
+import { ref, shallowRef, nextTick, reactive } from 'vue'
+import { usePaging } from '@/hooks/usePaging';
+import { apiOaWorkLists } from '@/api/oa_work'
+import { apiOaFlowTypeLists, apiOaoaApproveLists, apiOaoaApproveAdd, apiOaoaApproveDetail } from "@/api/oa_Initiate"
+import EditPopup from './edit.vue'
+import detailPopup from './detail.vue'
+import { apiOaFlowTypeDetail } from '@/api/oa_flow_type'
+
+const editRef = shallowRef<InstanceType<typeof EditPopup>>()
+// 是否显示编辑框
+const showEdit = ref(false)
+
+const detailRef = ref(null)
+// 是否显示编辑框
+const showDetail = ref(false)
+
+
+// 查询条件
+const queryParams = reactive({
+    type: 1
+})
+
+
+// 编辑
+const handleEdit = async (id: any) => {
+    let res = await apiOaFlowTypeDetail({ id })
+    showEdit.value = true
+    await nextTick()
+    editRef.value?.open('edit')
+    editRef.value?.setFormData(res)
+}
+
+const handDetail = async (id: any) => {
+    let res = await apiOaoaApproveDetail({ id })
+    showDetail.value = true
+    await nextTick()
+    detailRef.value?.open()
+    detailRef.value?.setFormData(res)
+}
+
+
+
+// 删除
+const handleDelete = async (id: number) => {
+    await apiOaFlowTypeDelete({ id })
+    getLists()
+}
+
+// 批量删除
+const handleBatchDelete = async () => {
+    const ids = pager.lists.map((item) => item.id)
+    await apiOaFlowTypeDelete({ ids })
+    getLists()
+
+}
+
+// 分页相关
+const { pager, getLists, resetParams, resetPage } = usePaging({
+    fetchFun: apiOaoaApproveLists,
+    params: queryParams
+})
+const activeName = ref('first')
+
+getLists()
+
+
+
+const lists = ref([])
+
+const getTypeList = async () => {
+    const res = await apiOaFlowTypeLists()
+    lists.value = res
+}
+getTypeList()
+
+
+
+
+</script>
+
+<style lang="scss" scoped>
+.content {
+    height: 82vh;
+}
+
+.tit {
+    margin-bottom: 10px;
+
+    .tit-content {
+        display: flex;
+        justify-content: space-between;
+        flex-wrap: wrap;
+
+        .tit-li {
+            width: 60px;
+            background: #FF8F4A;
+            color: white;
+            text-align: center;
+            height: 60px;
+            line-height: 60px;
+            cursor: pointer;
+
+        }
+    }
+
+}
+</style>
\ No newline at end of file
diff --git a/src/views/oa_flow_type/edit.vue b/src/views/oa_flow_type/edit.vue
index a315624..5971628 100644
--- a/src/views/oa_flow_type/edit.vue
+++ b/src/views/oa_flow_type/edit.vue
@@ -56,12 +56,12 @@
                         <el-col :span="8">
                             <el-form-item label="类型">
                                 <el-select v-model="item.type" clearable placeholder="请选择所属类型" class="flex-1">
-                                    <el-option label="文本框" :value="parseInt(0)" />
-                                    <el-option label="日期选择框" :value="parseInt(1)" />
-                                    <el-option label="部门选择器" :value="parseInt(2)" />
-                                    <el-option label="人员选择器" :value="parseInt(3)" />
-                                    <el-option label="文本域" :value="parseInt(4)" />
-                                    <el-option label="文件上传" :value="parseInt(5)" />
+                                    <el-option label="文本框" value="0" />
+                                    <el-option label="日期选择框" value="1" />
+                                    <el-option label="部门选择器" value="2" />
+                                    <el-option label="人员选择器" value="3" />
+                                    <el-option label="文本域" value="4" />
+                                    <el-option label="文件上传" value="5" />
                                 </el-select>
                             </el-form-item>
                         </el-col>
@@ -70,11 +70,11 @@
                                 <el-input v-model="item.label" clearable placeholder="请输入名称" />
                             </el-form-item>
                         </el-col>
-                        <el-col :span="4">
+                        <!-- <el-col :span="4">
                             <el-form-item label="是否必填">
                                 <el-switch v-model="item.isRequired"></el-switch>
                             </el-form-item>
-                        </el-col>
+                        </el-col> -->
                         <el-col :span="4">
                             <el-button @click="formData.data.splice(index, 1)">
                                 删除
@@ -85,7 +85,7 @@
             </el-form>
         </popup>
         <el-dialog v-if="showDialog" v-model="showDialog" title="预览审批内容" width="70%">
-            <generateForm :config="formData.data"></generateForm>
+            <generateForm :config="formData.data" :form-data="previewObj"></generateForm>
         </el-dialog>
     </div>
 </template>
@@ -133,49 +133,14 @@ const formData = reactive({
     department_ids: "",
     data: [
         {
-            "type": 0,
-            "label": "请假类型",
-            "value": "DZFS",
-            isRequired: true,
-        },
-        {
-            "type": 1,
-            "label": "开始时间",
-            "value": "SD",
-            isRequired: true,
-
-        },
-        {
-            "type": 1,
-            "label": "结束时间",
-            "value": "DSFSD",
-            isRequired: true,
-
-        },
-        {
-            "type": 0,
-            "label": "请假天数",
-            "value": "DSF",
-            isRequired: false,
-
-        },
-        {
-            "type": 4,
-            "label": "请假事由",
-            "value": "SDS",
-            isRequired: true,
-
-        },
-        {
-            "type": 5,
-            "label": "附件",
-            "value": "DZFS",
-            isRequired: false,
-
+            "type": '0',
+            "label": "",
+            "value": "",
         },
     ]
 });
 
+const previewObj = reactive({})
 
 // 表单验证
 const formRules = reactive<any>({
@@ -238,12 +203,21 @@ const previewFn = () => {
     formData.data.forEach((item: any) => {
         item.value = Pinyin.getCamelChars(item.label)
     });
+    console.log(formData.data)
+    showDialog.value = true;
+}
+
+const handleDelete = (index: number) => {
+    formData.data.splice(index, 1);
+}
+
+const handleEdit = (index: number) => {
     showDialog.value = true;
 }
 
 const handAdd = () => {
     formData.data.push({
-        "type": 0,
+        "type": '',
         "label": "",
         "value": "",
         isRequired: false,
diff --git a/src/views/oa_plan/detail.vue b/src/views/oa_plan/detail.vue
index 2f7f69d..69a1555 100644
--- a/src/views/oa_plan/detail.vue
+++ b/src/views/oa_plan/detail.vue
@@ -56,8 +56,6 @@ const setFormData = async (data: Record<any, any>) => {
 }
 
 
-
-
 // 提交按钮
 const handleSubmit = async () => {
     popupRef.value?.close()
diff --git a/src/views/oa_work/components/sendReport.vue b/src/views/oa_work/components/sendReport.vue
index bf5f97a..5accf87 100644
--- a/src/views/oa_work/components/sendReport.vue
+++ b/src/views/oa_work/components/sendReport.vue
@@ -122,5 +122,24 @@ const handleDelete = async (id: number | any[]) => {
     getLists()
 }
 
+[
+    {
+        name: "假勤",
+        children: [
+            {
+                name: "请假"
+            },
+            {
+                name: "请假"
+            },
+            {
+                name: "请假"
+            },
+        ]
+    }
+
+]
+
+
 getLists()
 </script>
\ No newline at end of file
diff --git a/src/views/oa_work/index.vue b/src/views/oa_work/index.vue
index ac7a39d..641e730 100644
--- a/src/views/oa_work/index.vue
+++ b/src/views/oa_work/index.vue
@@ -8,7 +8,6 @@
                 <reciveReport></reciveReport>
             </el-tab-pane>
         </el-tabs>
-
     </el-card>
 </template>
 
@@ -24,3 +23,4 @@ const activeName = ref('first')
 
 
 </script>
+