فهرست منبع

perf: 🚀 提取公共代码

@sun-chaoqun 1 سال پیش
والد
کامیت
3d423a64df

+ 2 - 0
src/api/project/index.ts

@@ -18,3 +18,5 @@ export const Project_Edit = (params: any) => $http.post('/api/project/Project/Ed
 export const Project_Del = (params: any) => $http.post('/api/project/Project/Del', params)
 // 左侧用户列表
 export const Project_User_List = (params: any) => $http.post('/api/project/User/List', params)
+// 导出word
+export const Project_Word = (params: any) => $http.post('/testapi/project/Project/Word', params)

+ 26 - 1
src/hooks/useTablePublic.ts

@@ -1,4 +1,5 @@
 import type { FormInstance } from 'element-plus'
+import { GlobalStore } from '@/stores/index'
 
 export interface LeaveUserInfoIn {
   T_user_name: string
@@ -100,7 +101,24 @@ export const verifyFormColumns = [
   { prop: 'operation', label: '操作', width: 80, fixed: 'right' }
 ]
 
+export const options = [
+  { name: '已通过', id: 1 },
+  { name: '未通过', id: 2 },
+  { name: '待审核', id: 3 }
+]
+
 export function useTablePublic() {
+  const globalStore = GlobalStore()
+  const validate_T_product = (rule: any, value: any, callback: any) => {
+    if (value === '') {
+      callback(new Error('请选择产品明细'))
+    } else if (value.includes(undefined)) {
+      callback(new Error('请填写产品数量'))
+    } else {
+      callback()
+    }
+  }
+
   //判断是否相等,相同时改变背景颜色
   const tableRowClassName = (T_uuid: string, T_uuid2: string): any => {
     let user: any = undefined
@@ -122,8 +140,15 @@ export function useTablePublic() {
     formEl.resetFields()
   }
 
+  const searchOnTableList = (TableRef: any) => TableRef?.searchTable()
+  const updateOnTableList = (TableRef: any) => TableRef?.getTableList()
+
   return {
+    validate_T_product,
     resetForm,
-    tableRowClassName
+    globalStore,
+    tableRowClassName,
+    searchOnTableList,
+    updateOnTableList
   }
 }

+ 16 - 15
src/views/project/MyProject.vue

@@ -1,20 +1,19 @@
 <script setup lang="ts">
+import { ref, nextTick, defineAsyncComponent } from 'vue'
 import { ElMessage, ElMessageBox } from 'element-plus'
-import { GlobalStore } from '@/stores/index'
-import { ref, nextTick } from 'vue'
 import TableBase from '@/components/TableBase/index.vue'
-import { ColumnProps } from '@/components/TableBase/interface/index'
+import { useTablePublic } from '@/hooks/useTablePublic'
 import { Edit, Delete, View } from '@element-plus/icons-vue'
+import { ColumnProps } from '@/components/TableBase/interface/index'
 import { Project_Del, Project_Project_User_list } from '@/api/project/index'
-import ProjectForm from './ProjectForm.vue'
 
-const TableRef = ref()
-const globalStore = GlobalStore()
-const User_tokey = globalStore.GET_User_tokey
+const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
 const projctFormRef = ref<InstanceType<typeof ProjectForm> | null>(null)
+const { globalStore, updateOnTableList } = useTablePublic()
+const ProjectForm = defineAsyncComponent(() => import(/*webpackChunkName: 'ProjectForm'*/ './ProjectForm.vue'))
 
 const columns: ColumnProps[] = [
-  { type: 'index', label: '序号' },
+  { type: 'index', label: '序号', width: 80 },
   { prop: 'T_name', label: '项目名称' },
   { prop: 'T_user_name', label: '项目负责人' },
   { prop: 'T_set_up_date', label: '立项日期' },
@@ -31,24 +30,26 @@ const DeleteProject = (Id: number) => {
     type: 'warning'
   })
     .then(async () => {
-      const res: any = await Project_Del({ User_tokey, T_id: Id })
+      const res: any = await Project_Del({ User_tokey: globalStore.GET_User_tokey, T_id: Id })
       if (res.Code === 200) {
         ElMessage.success('删除成功!')
-        nextTick(() => {
-          onUpdateTableList
-        })
+        nextTick(() => updateOnTableList(TableRef.value))
       }
     })
     .catch(() => {
       ElMessage.warning('取消成功!')
     })
 }
-const onUpdateTableList = () => TableRef.value?.getTableList()
 const openProjectDrawer = (type: string, row?: any) => projctFormRef.value?.projectFromOpen(type, row)
 </script>
 <template>
   <div class="my-project">
-    <TableBase ref="TableRef" :columns="columns" :requestApi="Project_Project_User_list" :initParam="{ User_tokey }">
+    <TableBase
+      ref="TableRef"
+      :columns="columns"
+      :requestApi="Project_Project_User_list"
+      :initParam="{ User_tokey: globalStore.GET_User_tokey }"
+    >
       <template #table-header>
         <el-row :gutter="20" class="w-100">
           <el-col :span="4"><h3 class="title">我的项目</h3></el-col>
@@ -87,7 +88,7 @@ const openProjectDrawer = (type: string, row?: any) => projctFormRef.value?.proj
         >
       </template>
     </TableBase>
-    <ProjectForm ref="projctFormRef" projectName="myProject" @onTableList="onUpdateTableList" />
+    <ProjectForm ref="projctFormRef" projectName="myProject" @onTableList="updateOnTableList(TableRef)" />
   </div>
 </template>
 

+ 10 - 21
src/views/project/Project.vue

@@ -1,14 +1,13 @@
 <script setup lang="ts">
-import { ElMessage } from 'element-plus'
-import { GlobalStore } from '@/stores/index'
 import { ref, reactive } from 'vue'
+import { ElMessage } from 'element-plus'
+import ProjectForm from './ProjectForm.vue'
 import { UserFilled } from '@element-plus/icons-vue'
 import TableBase from '@/components/TableBase/index.vue'
 import { Edit, View, CircleCheck } from '@element-plus/icons-vue'
 import { useTablePublic, Project_State } from '@/hooks/useTablePublic'
 import { ColumnProps } from '@/components/TableBase/interface/index'
 import { Project_List, Project_User_List, Project_Approval } from '@/api/project/index'
-import ProjectForm from './ProjectForm.vue'
 
 interface UserInfoIn {
   T_name: string
@@ -26,15 +25,6 @@ const userInfo = ref<UserInfoIn>({
   T_dept_name: '',
   T_post_name: ''
 })
-
-const globalStore = GlobalStore()
-const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
-const TableProjectRef = ref<InstanceType<typeof TableBase> | null>(null)
-const projctFormRef = ref<InstanceType<typeof ProjectForm> | null>(null)
-
-const { tableRowClassName } = useTablePublic()
-const tableRowClassNameHandle = (data: any): any => tableRowClassName(data.row.T_uuid, userInfo.value.T_uuid)
-
 const columns: ColumnProps[] = [{ prop: 'T_name', label: '姓名' }]
 const columnsProject: ColumnProps[] = [
   { type: 'index', label: '序号' },
@@ -47,9 +37,12 @@ const columnsProject: ColumnProps[] = [
   { prop: 'T_State', label: '状态', name: 'T_State', width: 120 },
   { prop: 'operation', label: '操作', width: 160, fixed: 'right' }
 ]
-const initParam = { User_tokey: globalStore.GET_User_tokey }
+const TableProjectRef = ref<InstanceType<typeof TableBase> | null>(null)
+const projctFormRef = ref<InstanceType<typeof ProjectForm> | null>(null)
+const { tableRowClassName, globalStore, updateOnTableList } = useTablePublic()
+const openProjectDrawer = (type: string, row?: any) => projctFormRef.value?.projectFromOpen(type, row)
+const tableRowClassNameHandle = (data: any): any => tableRowClassName(data.row.T_uuid, userInfo.value.T_uuid)
 const initParamProject = reactive({ User_tokey: globalStore.GET_User_tokey, T_uuid: userInfo.value.T_uuid, page_z: 99 })
-
 const getSalaryParams = (row: any) => {
   userInfo.value.T_uuid = ''
   setTimeout(() => {
@@ -61,21 +54,17 @@ const changeState = async (id: number, row: any) => {
   const res: any = await Project_Approval({ User_tokey: globalStore.GET_User_tokey, T_id: row.Id, T_State: id })
   if (res.Code === 200) {
     ElMessage.success('审核成功!')
-    onUpdateTableList()
+    updateOnTableList(TableProjectRef.value)
   }
 }
-
-const onUpdateTableList = () => TableProjectRef.value?.getTableList()
-const openProjectDrawer = (type: string, row?: any) => projctFormRef.value?.projectFromOpen(type, row)
 </script>
 <template>
   <div class="project">
     <div style="width: 290px" class="project-table">
       <TableBase
-        ref="TableRef"
         :columns="columns"
         :requestApi="Project_User_List"
-        :initParam="initParam"
+        :initParam="{ User_tokey: globalStore.GET_User_tokey }"
         layout="prev, pager, next"
         :rowClick="getSalaryParams"
         :tableRowClassName="tableRowClassNameHandle"
@@ -139,7 +128,7 @@ const openProjectDrawer = (type: string, row?: any) => projctFormRef.value?.proj
         </TableBase>
       </div>
     </transition>
-    <ProjectForm ref="projctFormRef" projectName="project" @onTableList="onUpdateTableList" />
+    <ProjectForm ref="projctFormRef" projectName="project" @onTableList="updateOnTableList(TableProjectRef)" />
   </div>
 </template>
 

+ 13 - 19
src/views/project/ProjectDetail.vue

@@ -11,14 +11,7 @@ const formLabelWidth = ref('140px')
 const ruleFormRef = ref<FormInstance>()
 const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
 
-const columns: ColumnProps[] = [
-  { type: 'index', label: '序号', width: 80, align: 'center' },
-  { prop: 'T_function', label: '功能与指标', align: 'center' },
-  { prop: 'T_planned_time', label: '计划时间(工作日)', align: 'center', width: 160 },
-  { prop: 'T_finish', label: '是否完成(原因)', align: 'center', width: 140 },
-  { prop: 'operation', label: '操作', width: 160, fixed: 'right', align: 'center' }
-]
-const form = reactive({
+const form = ref({
   id: '',
   T_function: '',
   T_planned_time: '',
@@ -28,40 +21,42 @@ const rules = reactive<FormRules>({
   T_function: [{ required: true, message: '请输入功能与指标', trigger: 'blur' }],
   T_planned_time: [{ required: true, message: '请输入计划时间(工作日)', trigger: 'blur' }]
 })
+const columns: ColumnProps[] = [
+  { type: 'index', label: '序号', width: 80, align: 'center' },
+  { prop: 'T_function', label: '功能与指标', align: 'center' },
+  { prop: 'T_planned_time', label: '计划时间(工作日)', align: 'center', width: 160 },
+  { prop: 'T_finish', label: '是否完成(原因)', align: 'center', width: 140 },
+  { prop: 'operation', label: '操作', width: 160, fixed: 'right', align: 'center' }
+]
 
 const openProductionDetailed = (type: string, row?: any) => {
   isNew.value = type === 'new' ? true : false
   if (!isNew.value) {
-    form.id = row.id
-    form.T_function = row.T_function
-    form.T_planned_time = row.T_planned_time
-    form.T_finish = row.T_finish
+    form.value = { ...row }
   }
   drawerRef.value?.openDrawer()
 }
 const callbackDrawer = (done: () => void) => {
-  resetForm(ruleFormRef.value)
   done()
+  resetForm(ruleFormRef.value)
 }
 const resetForm = (formEl: FormInstance | undefined) => {
   if (!formEl) return
   formEl.resetFields()
 }
-// 删除
 const deleteProjectDetail = (id: string) => {
   tableData.value = tableData.value.filter((item: any) => item.id !== id)
   emit('onPlanning', tableData.value)
 }
-// 添加 编辑项目明细
 const addProjectDetail = (formEl: FormInstance | undefined) => {
   if (!formEl) return
   formEl.validate(async valid => {
     if (valid) {
       if (isNew.value) {
-        tableData.value.push({ ...form, id: generateRandom() })
+        tableData.value.push({ ...form.value, id: generateRandom() })
       } else {
-        const index = tableData.value.findIndex(item => item.id === form.id)
-        tableData.value[index] = { ...form }
+        const index = tableData.value.findIndex(item => item.id === form.value.id)
+        tableData.value[index] = { ...form.value }
       }
       emit('onPlanning', tableData.value)
       nextTick(() => {
@@ -86,7 +81,6 @@ defineExpose({
   clearDetail,
   setDetailData
 })
-
 const props = defineProps<{ disabled: boolean; isShow?: string }>()
 const disabled = computed(() => props.disabled)
 const isShow = ref(props.isShow)

+ 18 - 17
src/views/project/ProjectFinance.vue

@@ -1,14 +1,13 @@
 <script setup lang="ts">
-import { ElMessage } from 'element-plus'
-import { GlobalStore } from '@/stores/index'
 import { ref, reactive } from 'vue'
+import { ElMessage } from 'element-plus'
+import ProjectForm from './ProjectForm.vue'
 import { UserFilled } from '@element-plus/icons-vue'
 import TableBase from '@/components/TableBase/index.vue'
+import { View, CircleCheck, Share } from '@element-plus/icons-vue'
 import { ColumnProps } from '@/components/TableBase/interface/index'
-import { Project_Finance_List, Project_User_List, Project_Approval } from '@/api/project/index'
-import { View, CircleCheck } from '@element-plus/icons-vue'
 import { useTablePublic, Project_F_State } from '@/hooks/useTablePublic'
-import ProjectForm from './ProjectForm.vue'
+import { Project_Finance_List, Project_User_List, Project_Approval, Project_Word } from '@/api/project/index'
 
 interface UserInfoIn {
   T_name: string
@@ -27,11 +26,10 @@ const userInfo = ref<UserInfoIn>({
   T_post_name: ''
 })
 
-const globalStore = GlobalStore()
 const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
 const projctFormRef = ref<InstanceType<typeof ProjectForm> | null>(null)
-const { tableRowClassName } = useTablePublic()
-const tableRowClassNameHandle = (data: any): any => tableRowClassName(data.row.T_uuid, userInfo.value.T_uuid)
+const { tableRowClassName, globalStore, updateOnTableList } = useTablePublic()
+const initParamProject = reactive({ User_tokey: globalStore.GET_User_tokey, T_uuid: userInfo.value.T_uuid, page_z: 99 })
 
 const columns: ColumnProps[] = [{ prop: 'T_name', label: '姓名' }]
 const columnsProject: ColumnProps[] = [
@@ -43,12 +41,9 @@ const columnsProject: ColumnProps[] = [
   { prop: 'T_planning_cycle', label: '计划完成周期(工作日)', width: 125 },
   { prop: 'T_bonus', label: '绩效总金额' },
   { prop: 'T_State', label: '状态', name: 'T_State', width: 120 },
-  { prop: 'operation', label: '操作', width: 80, fixed: 'right' }
+  { prop: 'operation', label: '操作', width: 160, fixed: 'right' }
 ]
-const initParam = { User_tokey: globalStore.GET_User_tokey, T_Finance: 1 }
-const initParamProject = reactive({ User_tokey: globalStore.GET_User_tokey, T_uuid: userInfo.value.T_uuid, page_z: 99 })
 
-const openProjectDrawer = (type: string, row?: any) => projctFormRef.value?.projectFromOpen(type, row)
 const getSalaryParams = (row: any) => {
   userInfo.value.T_uuid = ''
   setTimeout(() => {
@@ -56,15 +51,19 @@ const getSalaryParams = (row: any) => {
     initParamProject.T_uuid = userInfo.value.T_uuid
   }, 100)
 }
-// 切换状态
 const changeState = async (id: number, row: any) => {
   const res: any = await Project_Approval({ User_tokey: globalStore.GET_User_tokey, T_id: row.Id, T_State: id })
   if (res.Code === 200) {
     ElMessage.success('审核成功!')
-    TableRef.value?.getTableList()
+    updateOnTableList(TableRef.value)
   }
 }
-const onUpdateTableList = () => TableRef.value?.getTableList()
+const exportWord = async (row: any) => {
+  const res: any = await Project_Word({ User_tokey: globalStore.GET_User_tokey, T_id: row.Id })
+  if (res.Code === 200) window.open(res.Data)
+}
+const tableRowClassNameHandle = (data: any): any => tableRowClassName(data.row.T_uuid, userInfo.value.T_uuid)
+const openProjectDrawer = (type: string, row?: any) => projctFormRef.value?.projectFromOpen(type, row)
 </script>
 <template>
   <div class="project-finance">
@@ -72,7 +71,7 @@ const onUpdateTableList = () => TableRef.value?.getTableList()
       <TableBase
         :columns="columns"
         :requestApi="Project_User_List"
-        :initParam="initParam"
+        :initParam="{ User_tokey: globalStore.GET_User_tokey, T_Finance: 1 }"
         layout="prev, pager, next"
         :rowClick="getSalaryParams"
         :tableRowClassName="tableRowClassNameHandle"
@@ -89,6 +88,7 @@ const onUpdateTableList = () => TableRef.value?.getTableList()
       <div class="project-container" v-if="userInfo.T_uuid">
         <el-card class="box-card">
           <h3 class="text title m-b-5">员工基本信息</h3>
+          <!-- <el-button type="primary" @click="exportWord">导出</el-button> -->
           <div class="info-content">
             <el-avatar shape="square" size="large" :icon="UserFilled" />
             <div class="info-name">
@@ -129,11 +129,12 @@ const onUpdateTableList = () => TableRef.value?.getTableList()
             <el-button link type="success" size="small" :icon="View" @click="openProjectDrawer('view', row)"
               >详情</el-button
             >
+            <el-button link type="primary" size="small" :icon="Share" @click="exportWord(row)">导出</el-button>
           </template>
         </TableBase>
       </div>
     </transition>
-    <ProjectForm ref="projctFormRef" projectName="projectFinance" @onTableList="onUpdateTableList" />
+    <ProjectForm ref="projctFormRef" projectName="projectFinance" @onTableList="updateOnTableList(TableRef)" />
   </div>
 </template>
 

+ 0 - 8
src/views/project/ProjectForm.vue

@@ -120,14 +120,6 @@ const getTitle = (type: string) => {
   }
 }
 
-// const isDisabled = computed(() => {
-//   console.log(typeTip.value)
-//   if ((projectName !== 'myProject' && typeTip !== 'new') ||
-//             (projectName === 'myProject' && typeTip === 'view') ||
-//             projectName !== 'project') return true
-//   else return false
-// })
-
 const emit = defineEmits<{ (event: 'onTableList'): void }>()
 
 defineExpose({

+ 11 - 26
src/views/storehouse/Classify.vue

@@ -5,7 +5,6 @@ import {
   Storehouse_ProductClass_Edit,
   Storehouse_ProductClass_Del
 } from '@/api/storehouse/index'
-import { GlobalStore } from '@/stores/index'
 import { ref, reactive, nextTick } from 'vue'
 import Drawer from '@/components/Drawer/index.vue'
 import TableBase from '@/components/TableBase/index.vue'
@@ -13,17 +12,18 @@ import { Edit, Delete } from '@element-plus/icons-vue'
 import { ElMessageBox, ElMessage } from 'element-plus'
 import type { FormInstance, FormRules } from 'element-plus'
 import type { ColumnProps } from '@/components/TableBase/interface/index'
+import { useTablePublic } from '@/hooks/useTablePublic'
 
 const isNew = ref(true)
-const globalStore = GlobalStore()
 const formLabelWidth = ref('130px')
 const ruleFormRef = ref<FormInstance>()
 const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
 const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
-const initParam = {
+const { resetForm, globalStore, searchOnTableList, updateOnTableList } = useTablePublic()
+const initParam = reactive({
   User_tokey: globalStore.GET_User_tokey,
   T_name: ''
-}
+})
 
 const columns: ColumnProps[] = [
   { type: 'index', label: '序号', width: 80 },
@@ -32,7 +32,6 @@ const columns: ColumnProps[] = [
 ]
 
 // 添加仓库名称
-type Fn = () => void
 const form = reactive({
   name: '',
   id: ''
@@ -42,7 +41,7 @@ const rules = reactive<FormRules>({
   name: [{ required: true, message: '请输入分类名称', trigger: 'blur' }]
 })
 
-const callbackDrawer = (done: Fn) => {
+const callbackDrawer = (done: () => void) => {
   resetForm(ruleFormRef.value)
   done()
 }
@@ -54,11 +53,6 @@ const openDrawer = (type: string, row?: any) => {
   drawerRef.value?.openDrawer()
 }
 
-const resetForm = (formEl: FormInstance | undefined) => {
-  if (!formEl) return
-  formEl.resetFields()
-}
-
 const AddUserName = (formEl: FormInstance | undefined) => {
   if (!formEl) return
   formEl.validate(async valid => {
@@ -76,10 +70,10 @@ const AddUserName = (formEl: FormInstance | undefined) => {
       if (res.Code === 200) {
         ElMessage.success('产品分类添加成功!!')
         nextTick(() => {
-          drawerRef.value?.closeDrawer()
-          TableRef.value?.getTableList()
+          updateOnTableList(TableRef.value)
           resetForm(ruleFormRef.value)
           isNew.value = true
+          drawerRef.value?.closeDrawer()
         })
       }
     } else {
@@ -99,22 +93,13 @@ const UserDelete = (row: any) => {
       const res: any = await Storehouse_ProductClass_Del({ User_tokey: globalStore.GET_User_tokey, T_id: row.Id })
       if (res.Code === 200) {
         ElMessage.success('删除成功!')
-        nextTick(() => {
-          TableRef.value?.getTableList()
-        })
+        nextTick(() => updateOnTableList(TableRef.value))
       }
     })
     .catch(() => {
       ElMessage.warning('取消成功!')
     })
 }
-
-// 搜索
-const search = ref('')
-const searchHandle = () => {
-  initParam.T_name = search.value
-  TableRef.value?.searchTable()
-}
 </script>
 
 <template>
@@ -126,13 +111,13 @@ const searchHandle = () => {
             <el-col :span="12">
               <span class="inline-flex items-center">产品分类名称:</span>
               <el-input
-                v-model="search"
+                v-model="initParam.T_name"
                 type="text"
                 class="w-50 m-2"
-                @change="searchHandle"
+                @change="searchOnTableList(TableRef)"
                 placeholder="按产品分类名称搜索"
               />
-              <el-button type="primary" @click.enter="searchHandle">搜索</el-button>
+              <el-button type="primary" @click.enter="searchOnTableList(TableRef)">搜索</el-button>
             </el-col>
             <el-col :span="6" :offset="6"><el-button type="primary" @click="openDrawer('new')">添加</el-button></el-col>
           </el-row>

+ 10 - 32
src/views/storehouse/List.vue

@@ -5,7 +5,6 @@ import {
   Storehouse_Depot_Edit,
   Storehouse_Depot_Del
 } from '@/api/storehouse/index'
-import { GlobalStore } from '@/stores/index'
 import { ref, reactive, nextTick } from 'vue'
 import Drawer from '@/components/Drawer/index.vue'
 import TableBase from '@/components/TableBase/index.vue'
@@ -13,17 +12,18 @@ import type { FormInstance, FormRules } from 'element-plus'
 import { Edit, Delete } from '@element-plus/icons-vue'
 import type { ColumnProps } from '@/components/TableBase/interface/index'
 import { ElMessageBox, ElMessage } from 'element-plus'
+import { useTablePublic } from '@/hooks/useTablePublic'
 
 const isNew = ref(true)
-const globalStore = GlobalStore()
 const formLabelWidth = ref('100px')
 const ruleFormRef = ref<FormInstance>()
 const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
 const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
-const initParam = {
+const { resetForm, globalStore, searchOnTableList, updateOnTableList } = useTablePublic()
+const initParam = reactive({
   User_tokey: globalStore.GET_User_tokey,
   T_name: ''
-}
+})
 const columns: ColumnProps[] = [
   { type: 'index', label: '序号', width: 80 },
   { prop: 'T_name', label: '仓库名称' },
@@ -31,15 +31,10 @@ const columns: ColumnProps[] = [
 ]
 
 // 添加仓库名称
-const form = reactive({
-  name: '',
-  id: ''
-})
-
+const form = reactive({ name: '', id: '' })
 const rules = reactive<FormRules>({
   name: [{ required: true, message: '请输入仓库名称', trigger: 'blur' }]
 })
-
 const callbackDrawer = (done: () => void) => {
   resetForm(ruleFormRef.value)
   done()
@@ -51,12 +46,6 @@ const openDrawer = (type: string, row?: any) => {
   })
   drawerRef.value?.openDrawer()
 }
-
-const resetForm = (formEl: FormInstance | undefined) => {
-  if (!formEl) return
-  formEl.resetFields()
-}
-
 const AddUserName = (formEl: FormInstance | undefined) => {
   if (!formEl) return
   formEl.validate(async valid => {
@@ -71,7 +60,7 @@ const AddUserName = (formEl: FormInstance | undefined) => {
         ElMessage.success('添加仓库名称成功!!')
         nextTick(() => {
           drawerRef.value?.closeDrawer()
-          TableRef.value?.getTableList()
+          updateOnTableList(TableRef.value)
           resetForm(ruleFormRef.value)
           isNew.value = true
         })
@@ -81,8 +70,6 @@ const AddUserName = (formEl: FormInstance | undefined) => {
     }
   })
 }
-
-// 删除
 const UserDelete = (row: any) => {
   ElMessageBox.confirm('您确定要删除该仓库吗?', '警告', {
     confirmButtonText: '确定',
@@ -93,22 +80,13 @@ const UserDelete = (row: any) => {
       const res: any = await Storehouse_Depot_Del({ User_tokey: globalStore.GET_User_tokey, T_id: row.Id })
       if (res.Code === 200) {
         ElMessage.success('删除成功!')
-        nextTick(() => {
-          TableRef.value?.getTableList()
-        })
+        nextTick(() => updateOnTableList(TableRef.value))
       }
     })
     .catch(() => {
       ElMessage.warning('取消成功!')
     })
 }
-
-// 搜索
-const search = ref('')
-const searchHandle = () => {
-  initParam.T_name = search.value
-  TableRef.value?.searchTable()
-}
 </script>
 
 <template>
@@ -120,13 +98,13 @@ const searchHandle = () => {
             <el-col :span="12">
               <span class="inline-flex items-center">仓库名称:</span>
               <el-input
-                v-model="search"
+                v-model="initParam.T_name"
                 type="text"
                 class="w-50 m-2"
-                @change="searchHandle"
+                @change="searchOnTableList(TableRef)"
                 placeholder="按仓库名称搜索"
               />
-              <el-button type="primary" @click="searchHandle">搜索</el-button>
+              <el-button type="primary" @click="searchOnTableList(TableRef)">搜索</el-button>
             </el-col>
             <el-col :span="6" :offset="6"><el-button type="primary" @click="openDrawer('new')">添加</el-button></el-col>
           </el-row>

+ 17 - 29
src/views/storehouse/ProductionList.vue

@@ -7,7 +7,6 @@ import {
   Storehouse_Product_Del,
   Storehouse_Product_Spec_List
 } from '@/api/storehouse/index'
-import { GlobalStore } from '@/stores/index'
 import { ref, reactive, nextTick, onMounted } from 'vue'
 import Upload from '@/components/Upload/index.vue'
 import Drawer from '@/components/Drawer/index.vue'
@@ -17,14 +16,16 @@ import type { FormInstance, FormRules } from 'element-plus'
 import { Edit, Delete, Plus } from '@element-plus/icons-vue'
 import type { ColumnProps } from '@/components/TableBase/interface/index'
 import ImageCom from '@/components/Image/index.vue'
+import { useTablePublic } from '@/hooks/useTablePublic'
 
 const isNew = ref(true)
-const globalStore = GlobalStore()
 const formLabelWidth = ref('100px')
 const ruleFormRef = ref<FormInstance>()
 const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
 const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
 const uploadRef = ref<InstanceType<typeof Upload> | null>(null)
+const { resetForm, globalStore, searchOnTableList, updateOnTableList } = useTablePublic()
+
 const columns: ColumnProps[] = [
   { type: 'index', label: '序号', width: 80 },
   { prop: 'T_img', label: '产品图片', name: 'T_img' },
@@ -44,8 +45,8 @@ const rules = reactive<FormRules>({
   T_spec: [{ required: true, message: '请选择产品规格', trigger: 'blur' }],
   T_relation_sn: [{ required: true, message: '请选择关联SN', trigger: 'blur' }]
 })
-const form = reactive({
-  T_id: '',
+const form = ref({
+  Id: '',
   T_name: '',
   T_class: '',
   T_model: '',
@@ -60,14 +61,7 @@ const openDrawer = (type: string, row?: any) => {
   !specList.value.length && getSpecList()
   nextTick(() => {
     if (!isNew.value) {
-      form.T_id = row.Id
-      form.T_img = row.T_img
-      form.T_name = row.T_name
-      form.T_spec = row.T_spec
-      form.T_model = row.T_model
-      form.T_class = row.T_class
-      form.T_remark = row.T_remark
-      form.T_relation_sn = row.T_relation_sn
+      form.value = { ...row }
     }
   })
   drawerRef.value?.openDrawer()
@@ -79,15 +73,19 @@ const AddProduction = (formEl: FormInstance | undefined) => {
     if (valid) {
       let res: any = {}
       if (isNew.value) {
-        res = await Storehouse_Product_Add({ User_tokey: globalStore.GET_User_tokey, ...form })
+        res = await Storehouse_Product_Add({ User_tokey: globalStore.GET_User_tokey, ...form.value })
       } else {
-        res = await Storehouse_Product_Edit({ User_tokey: globalStore.GET_User_tokey, ...form })
+        res = await Storehouse_Product_Edit({
+          User_tokey: globalStore.GET_User_tokey,
+          ...form.value,
+          T_id: form.value.Id
+        })
       }
       if (res.Code === 200) {
         ElMessage.success(`产品${isNew.value ? '添加' : '修改'}成功!!`)
         nextTick(() => {
           drawerRef.value?.closeDrawer()
-          TableRef.value?.getTableList()
+          updateOnTableList(TableRef.value)
           resetForm(ruleFormRef.value)
           isNew.value = true
         })
@@ -111,9 +109,7 @@ const ProductDelete = (row: any) => {
       })
       if (res.Code === 200) {
         ElMessage.success('删除成功!')
-        nextTick(() => {
-          TableRef.value?.getTableList()
-        })
+        nextTick(() => updateOnTableList(TableRef.value))
       }
     })
     .catch(() => {
@@ -123,13 +119,8 @@ const ProductDelete = (row: any) => {
 
 const callbackDrawer = (done: () => void) => {
   resetForm(ruleFormRef.value)
-  done()
-}
-
-const resetForm = (formEl: FormInstance | undefined) => {
-  if (!formEl) return
   uploadRef.value?.clearfileList()
-  formEl.resetFields()
+  done()
 }
 // 搜索
 const initParam = reactive({
@@ -137,9 +128,6 @@ const initParam = reactive({
   T_name: '',
   T_class: ''
 })
-
-const searchHandle = () => TableRef.value?.searchTable()
-
 // 获取产品分类
 const options = ref<any[]>([])
 const getProductClassList = async () => {
@@ -177,9 +165,9 @@ onMounted(() => {
                 type="text"
                 class="w-50 m-2"
                 placeholder="按产品名称、产品型号搜索"
-                @change="searchHandle"
+                @change="searchOnTableList(TableRef)"
               />
-              <el-button type="primary" @click="searchHandle">搜索</el-button>
+              <el-button type="primary" @click="searchOnTableList(TableRef)">搜索</el-button>
             </el-col>
             <el-col :xl="6" :md="2" class="btn"
               ><el-button type="primary" @click="openDrawer('new')">添加</el-button></el-col

+ 1 - 3
src/views/storehouse/outStock/OutStock.vue

@@ -12,8 +12,6 @@ import type { ColumnProps } from '@/components/TableBase/interface/index'
 import { Storehouse_StockOut_List, Storehouse_StockOut_Edit } from '@/api/storehouse/index'
 import { depotHooks, delivery_type } from '@/hooks/useDepot'
 
-type Fn = () => void
-
 const router = useRouter()
 const formLabelWidth = ref('120px')
 const globalStore = GlobalStore()
@@ -75,7 +73,7 @@ const deliveryEdit = (number: string) => {
   form.T_number = number
   DrawerRef.value?.openDrawer()
 }
-const callbackDrawer = (done: Fn) => done()
+const callbackDrawer = (done: () => void) => done()
 const closeDrawer = () => {
   resetForm(ruleFormRef.value)
   DrawerRef.value?.closeDrawer()

+ 17 - 16
src/views/storehouse/sales/Contract.vue

@@ -1,7 +1,5 @@
 <script setup lang="ts">
-import { GlobalStore } from '@/stores/index'
-import { ref, reactive, nextTick } from 'vue'
-import ContractForm from './ContractForm.vue'
+import { ref, reactive, nextTick, defineAsyncComponent } from 'vue'
 import { useRouter } from 'vue-router'
 import { fnMd5 } from '@/utils/common'
 import { ElMessageBox, ElMessage } from 'element-plus'
@@ -9,11 +7,18 @@ import TableBase from '@/components/TableBase/index.vue'
 import { Edit, Delete, Finished, View } from '@element-plus/icons-vue'
 import type { ColumnProps } from '@/components/TableBase/interface/index'
 import { Storehouse_Contract_List, Storehouse_Contract_Del } from '@/api/storehouse/index'
+import { useTablePublic, options } from '@/hooks/useTablePublic'
 
+const ContractForm = defineAsyncComponent({
+  loader: () => import(/*webpackChunkName: 'ContractForm'*/ './ContractForm.vue'),
+  delay: 500,
+  timeout: 3000,
+  suspensible: true
+})
 const router = useRouter()
-const globalStore = GlobalStore()
 const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
 const ContractFormRef = ref<InstanceType<typeof ContractForm> | null>(null)
+const { globalStore, searchOnTableList, updateOnTableList } = useTablePublic()
 
 const columns: ColumnProps[] = [
   { type: 'index', label: '序号', width: 80 },
@@ -25,9 +30,9 @@ const columns: ColumnProps[] = [
   { prop: 'operation', label: '操作', width: 260, fixed: 'right' }
 ]
 
-const searchHandle = () => TableRef.value?.searchTable()
-const updateOnTableList = () => TableRef.value?.getTableList()
-const openContractFormDrawer = (type: string, row?: any) => ContractFormRef.value?.openDrawer(type, row)
+const openContractFormDrawer = (type: string, row?: any) => {
+  ContractFormRef.value?.openDrawer(type, row)
+}
 const processContract = (id: string) => router.push({ name: 'ContractDetail', params: { id, type: fnMd5('contract') } })
 const UserDelete = (row: any) => {
   ElMessageBox.confirm('您确定要删除该销售合同吗?', '警告', {
@@ -40,7 +45,7 @@ const UserDelete = (row: any) => {
       if (res.Code === 200) {
         ElMessage.success('删除成功!')
         nextTick(() => {
-          TableRef.value?.getTableList()
+          updateOnTableList(TableRef.value)
         })
       }
     })
@@ -48,11 +53,7 @@ const UserDelete = (row: any) => {
       ElMessage.warning('取消成功!')
     })
 }
-const options = reactive([
-  { name: '已通过', id: 1 },
-  { name: '未通过', id: 2 },
-  { name: '待审核', id: 3 }
-])
+
 const initParam = reactive({
   User_tokey: globalStore.GET_User_tokey,
   T_name: '',
@@ -73,7 +74,7 @@ const initParam = reactive({
                 type="text"
                 class="w-50 m-2"
                 placeholder="按产品名称搜索"
-                @change="searchHandle"
+                @change="searchOnTableList(TableRef)"
               />
             </el-col>
             <el-col :xl="10" :md="12">
@@ -81,7 +82,7 @@ const initParam = reactive({
               <el-select v-model="initParam.T_state" class="w-50" clearable placeholder="请选择状态~">
                 <el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id" />
               </el-select>
-              <el-button type="primary" @click="searchHandle">搜索</el-button>
+              <el-button type="primary" @click="searchOnTableList(TableRef)">搜索</el-button>
             </el-col>
             <el-col :xl="6" :md="2" class="btn"
               ><el-button type="primary" @click="openContractFormDrawer('new')">添加</el-button></el-col
@@ -118,7 +119,7 @@ const initParam = reactive({
         <el-button link type="danger" size="small" :icon="Delete" @click="UserDelete(row)">删除</el-button>
       </template>
     </TableBase>
-    <ContractForm ref="ContractFormRef" @onTableList="updateOnTableList" />
+    <ContractForm ref="ContractFormRef" @onTableList="updateOnTableList(TableRef)" />
   </div>
 </template>
 

+ 3 - 1
src/views/storehouse/sales/ContractDetail.vue

@@ -185,7 +185,9 @@ onUnmounted(() => {
           >
         </el-row>
         <el-row>
-          <el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="2"><span>产品明细</span></el-col>
+          <el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="2"
+            ><span>{{ isVerify ? '产品' : '验证' }}明细</span></el-col
+          >
           <el-col :span="21">
             <el-table border stripe :data="tableData" style="width: 100%" :header-cell-style="headerCellStyle">
               <template v-for="item in columns" :key="item.prop">

+ 1 - 13
src/views/storehouse/sales/ContractForm.vue

@@ -16,7 +16,6 @@ import {
 } from '@/api/storehouse/index'
 import { ElMessage } from 'element-plus'
 import TableDetail from './TableDetail.vue'
-import { GlobalStore } from '@/stores/index'
 import { ref, reactive, nextTick } from 'vue'
 import Drawer from '@/components/Drawer/index.vue'
 import { Delete } from '@element-plus/icons-vue'
@@ -30,9 +29,8 @@ const isNew = ref(true)
 const isProduct = ref(false)
 const tableData = ref<any[]>([])
 let selectProductData: any[] = []
-const globalStore = GlobalStore()
 const formLabelWidth = ref('120px')
-const { resetForm } = useTablePublic()
+const { resetForm, globalStore, validate_T_product } = useTablePublic()
 const ruleFormRef = ref<FormInstance>()
 const contractNumberLoading = ref(false)
 const User_tokey = globalStore.GET_User_tokey
@@ -42,16 +40,6 @@ const receiveUserdialog = ref<InstanceType<typeof ContractUser> | null>(null)
 const RecoveriesRef = ref<InstanceType<typeof TableDetail> | null>(null)
 const InvoiceRef = ref<InstanceType<typeof TableDetail> | null>(null)
 
-const validate_T_product = (rule: any, value: any, callback: any) => {
-  if (value === '') {
-    callback(new Error('请选择产品明细'))
-  } else if (value.includes(undefined)) {
-    callback(new Error('请填写产品数量'))
-  } else {
-    callback()
-  }
-}
-
 const rules = reactive<FormRules>({
   T_number: [{ required: true, message: '请输入合同编号', trigger: 'blur' }],
   T_customer: [{ required: true, message: '请输入客户名称', trigger: 'blur' }],

+ 6 - 18
src/views/storehouse/sales/ContractSale.vue

@@ -1,5 +1,4 @@
 <script setup lang="ts">
-import { GlobalStore } from '@/stores/index'
 import { ref, reactive, nextTick } from 'vue'
 import ContractForm from './ContractForm.vue'
 import { useRouter } from 'vue-router'
@@ -8,11 +7,12 @@ import TableBase from '@/components/TableBase/index.vue'
 import { Edit, Delete, View } from '@element-plus/icons-vue'
 import type { ColumnProps } from '@/components/TableBase/interface/index'
 import { Storehouse_Contract_Del, Storehouse_Contract_User_List } from '@/api/storehouse/index'
+import { useTablePublic, options } from '@/hooks/useTablePublic'
 
 const router = useRouter()
-const globalStore = GlobalStore()
 const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
 const ContractFormRef = ref<InstanceType<typeof ContractForm> | null>(null)
+const { globalStore, searchOnTableList, updateOnTableList } = useTablePublic()
 
 const columns: ColumnProps[] = [
   { type: 'index', label: '序号', width: 80 },
@@ -22,9 +22,6 @@ const columns: ColumnProps[] = [
   { prop: 'T_date', label: '更新时间' },
   { prop: 'operation', label: '操作', width: 260, fixed: 'right' }
 ]
-
-const searchHandle = () => TableRef.value?.searchTable()
-const updateOnTableList = () => TableRef.value?.getTableList()
 const openContractFormDrawer = (type: string, row?: any) => ContractFormRef.value?.openDrawer(type, row)
 const processContract = (id: string) => router.push({ name: 'ContractDetail', params: { id } })
 const UserDelete = (row: any) => {
@@ -38,7 +35,7 @@ const UserDelete = (row: any) => {
       if (res.Code === 200) {
         ElMessage.success('删除成功!')
         nextTick(() => {
-          TableRef.value?.getTableList()
+          updateOnTableList(TableRef.value)
         })
       }
     })
@@ -46,11 +43,6 @@ const UserDelete = (row: any) => {
       ElMessage.warning('取消成功!')
     })
 }
-const options = reactive([
-  { name: '已通过', id: 1 },
-  { name: '未通过', id: 2 },
-  { name: '待审核', id: 3 }
-])
 const initParam = reactive({
   User_tokey: globalStore.GET_User_tokey,
   T_name: '',
@@ -71,7 +63,7 @@ const initParam = reactive({
                 type="text"
                 class="w-50 m-2"
                 placeholder="按产品名称搜索"
-                @change="searchHandle"
+                @change="searchOnTableList(TableRef)"
               />
             </el-col>
             <el-col :xl="10" :md="12">
@@ -79,7 +71,7 @@ const initParam = reactive({
               <el-select v-model="initParam.T_state" class="w-50" clearable placeholder="请选择状态~">
                 <el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id" />
               </el-select>
-              <el-button type="primary" @click="searchHandle">搜索</el-button>
+              <el-button type="primary" @click="searchOnTableList(TableRef)">搜索</el-button>
             </el-col>
             <el-col :xl="6" :md="2" class="btn"
               ><el-button type="primary" @click="openContractFormDrawer('new')">添加</el-button></el-col
@@ -115,7 +107,7 @@ const initParam = reactive({
         >
       </template>
     </TableBase>
-    <ContractForm ref="ContractFormRef" @onTableList="updateOnTableList" />
+    <ContractForm ref="ContractFormRef" @onTableList="updateOnTableList(TableRef)" />
   </div>
 </template>
 
@@ -133,10 +125,6 @@ const initParam = reactive({
     .inline-flex {
       white-space: nowrap;
     }
-    .btn {
-      display: flex;
-      justify-content: end;
-    }
     .w-50 {
       width: 12.5rem;
     }

+ 14 - 20
src/views/storehouse/sales/VerifyContract.vue

@@ -1,25 +1,25 @@
 <script setup lang="ts">
-import { GlobalStore } from '@/stores/index'
-import { ref, reactive, nextTick } from 'vue'
+import {
+  Storehouse_VerifyContract_Add_Customer,
+  Storehouse_VerifyContract_Customer_List,
+  Storehouse_VerifyContract_Update_Customer
+} from '@/api/storehouse/index'
 import { useRouter } from 'vue-router'
-import Drawer from '@/components/Drawer/index.vue'
 import { ElMessage } from 'element-plus'
+import { ref, reactive, nextTick } from 'vue'
+import Drawer from '@/components/Drawer/index.vue'
 import TableBase from '@/components/TableBase/index.vue'
 import { Edit, View } from '@element-plus/icons-vue'
 import type { ColumnProps } from '@/components/TableBase/interface/index'
 import type { FormInstance, FormRules } from 'element-plus'
-import {
-  Storehouse_VerifyContract_Add_Customer,
-  Storehouse_VerifyContract_Customer_List,
-  Storehouse_VerifyContract_Update_Customer
-} from '@/api/storehouse/index'
+import { useTablePublic } from '@/hooks/useTablePublic'
 
 const isNew = ref(true)
 const router = useRouter()
-const globalStore = GlobalStore()
 const ruleFormRef = ref<FormInstance>()
 const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
 const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
+const { resetForm, globalStore, searchOnTableList, updateOnTableList } = useTablePublic()
 
 const columns: ColumnProps[] = [
   { type: 'index', label: '序号', width: 80 },
@@ -48,9 +48,7 @@ const openContract = (type: string, row?: any) => {
   }
   drawerRef.value?.openDrawer()
 }
-const updateOnTableList = () => TableRef.value?.getTableList()
 const processContract = (id: string) => router.push({ name: 'VerifyContractDetail', params: { id } })
-const searchHandle = () => TableRef.value?.searchTable()
 const callbackDrawer = (done: () => void) => {
   resetForm(ruleFormRef.value)
   done()
@@ -75,7 +73,7 @@ const AddContract = (formEl: FormInstance | undefined) => {
       if (res.Code === 200) {
         ElMessage.success('添加客户成功!!')
         nextTick(() => {
-          updateOnTableList()
+          updateOnTableList(TableRef.value)
           isNew.value = true
           resetForm(ruleFormRef.value)
           drawerRef.value?.closeDrawer()
@@ -86,10 +84,6 @@ const AddContract = (formEl: FormInstance | undefined) => {
     }
   })
 }
-const resetForm = (formEl: FormInstance | undefined) => {
-  if (!formEl) return
-  formEl.resetFields()
-}
 </script>
 
 <template>
@@ -108,8 +102,8 @@ const resetForm = (formEl: FormInstance | undefined) => {
               v-model="initParam.T_name"
               type="text"
               class="w-50 m-2"
-              placeholder="按产品名称搜索"
-              @change="searchHandle"
+              placeholder="按客户名称搜索"
+              @change="searchOnTableList(TableRef)"
             />
           </el-col>
           <el-col :xl="6" :md="8" class="d-flex">
@@ -117,7 +111,7 @@ const resetForm = (formEl: FormInstance | undefined) => {
             <el-select v-model="initParam.T_state" class="w-50" clearable placeholder="请选择状态~">
               <el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id" />
             </el-select>
-            <el-button type="primary" @click="searchHandle">搜索</el-button>
+            <el-button type="primary" @click="searchOnTableList(TableRef)">搜索</el-button>
           </el-col>
           <el-col :xl="6" :md="2" :offset="4" class="btn"
             ><el-button type="primary" @click="openContract('new')">添加</el-button></el-col
@@ -127,7 +121,7 @@ const resetForm = (formEl: FormInstance | undefined) => {
       <template #T_State="{ row }">
         <el-tag v-if="row.T_State === 1" type="warning" effect="dark"> 未签约 </el-tag>
         <el-tag v-else-if="row.T_State === 2" type="info" effect="dark"> 已作废 </el-tag>
-        <el-tag v-else-if="row.T_State === 3" type="danger" effect="dark"> 已签约 </el-tag>
+        <el-tag v-else-if="row.T_State === 3" type="success" effect="dark"> 已签约 </el-tag>
         <el-tag v-else type="danger" effect="dark"> 即将到期 </el-tag>
       </template>
       <template #right="{ row }">

+ 12 - 7
src/views/storehouse/sales/VerifyContractDetail.vue

@@ -1,20 +1,26 @@
 <script setup lang="ts">
-import VerifyForm from './VerifyForm.vue'
-import { GlobalStore } from '@/stores/index'
+// import VerifyForm from './VerifyForm.vue'
 import { useRouter, useRoute } from 'vue-router'
 import { ElMessageBox, ElMessage } from 'element-plus'
-import { ref, reactive, onMounted, nextTick } from 'vue'
+import { ref, reactive, onMounted, nextTick, defineAsyncComponent } from 'vue'
 import TableBase from '@/components/TableBase/index.vue'
 import { Edit, Delete, View } from '@element-plus/icons-vue'
 import type { ColumnProps } from '@/components/TableBase/interface/index'
 import { Storehouse_VerifyContract_List, Storehouse_VerifyContract_Del } from '@/api/storehouse/index'
+import { useTablePublic } from '@/hooks/useTablePublic'
 
+const VerifyForm = defineAsyncComponent({
+  loader: () => import(/*webpackChunkName: 'ContractForm'*/ './VerifyForm.vue'),
+  delay: 500,
+  timeout: 3000,
+  suspensible: true
+})
 const customer_id = ref('')
 const route = useRoute()
 const router = useRouter()
-const globalStore = GlobalStore()
 const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
 const VerifyFormRef = ref<InstanceType<typeof VerifyForm> | null>(null)
+const { globalStore, updateOnTableList } = useTablePublic()
 
 const columns: ColumnProps[] = [
   { type: 'index', label: '序号', width: 80 },
@@ -31,7 +37,6 @@ const initParam = reactive({
   T_customer_id: route.params.id
 })
 const openContract = (type: string, row?: any) => VerifyFormRef.value?.openDrawer(type, row)
-const updateOnTableList = () => TableRef.value?.getTableList()
 const verifyDetail = (id: string) => router.push({ name: 'ContractDetail', params: { id, verify: 'verify' } })
 const verifyDelete = (number: number) => {
   ElMessageBox.confirm('您确定要删除该合同明细吗?', '警告', {
@@ -47,7 +52,7 @@ const verifyDelete = (number: number) => {
       if (res.Code === 200) {
         ElMessage.success('删除成功!')
         nextTick(() => {
-          TableRef.value?.getTableList()
+          updateOnTableList(TableRef.value)
         })
       }
     })
@@ -87,7 +92,7 @@ onMounted(() => {
         <el-button link type="danger" size="small" :icon="Delete" @click="verifyDelete(row.T_number)">删除</el-button>
       </template>
     </TableBase>
-    <VerifyForm ref="VerifyFormRef" @onTableList="updateOnTableList" :verify_customer_id="customer_id" />
+    <VerifyForm ref="VerifyFormRef" @onTableList="updateOnTableList(TableRef)" :verify_customer_id="customer_id" />
   </div>
 </template>
 

+ 6 - 19
src/views/storehouse/sales/VerifyForm.vue

@@ -17,7 +17,6 @@ import {
 import { validate_float } from '@/views/salary/salary/relus'
 import { ElMessage } from 'element-plus'
 import TableDetail from './TableDetail.vue'
-import { GlobalStore } from '@/stores/index'
 import { ref, reactive, nextTick } from 'vue'
 import Drawer from '@/components/Drawer/index.vue'
 import { Delete } from '@element-plus/icons-vue'
@@ -31,27 +30,15 @@ const isNew = ref(true)
 const isProduct = ref(false)
 const tableData = ref<any[]>([])
 let selectProductData: any[] = []
-const globalStore = GlobalStore()
 const formLabelWidth = ref('120px')
-const { resetForm } = useTablePublic()
 const ruleFormRef = ref<FormInstance>()
 const contractNumberLoading = ref(false)
-const User_tokey = globalStore.GET_User_tokey
 const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
 const uploadRef = ref<InstanceType<typeof Upload> | null>(null)
 const receiveUserdialog = ref<InstanceType<typeof ContractUser> | null>(null)
 const RecoveriesRef = ref<InstanceType<typeof TableDetail> | null>(null)
 const InvoiceRef = ref<InstanceType<typeof TableDetail> | null>(null)
-
-const validate_T_product = (rule: any, value: any, callback: any) => {
-  if (value === '') {
-    callback(new Error('请选择产品明细'))
-  } else if (value.includes(undefined)) {
-    callback(new Error('请填写产品数量'))
-  } else {
-    callback()
-  }
-}
+const { resetForm, globalStore, validate_T_product } = useTablePublic()
 
 const rules = reactive<FormRules>({
   T_number: [{ required: true, message: '请输入合同编号', trigger: 'blur' }],
@@ -103,7 +90,7 @@ const openDrawer = (type: string, row?: any) => {
 const editDataEcho = async (row: any) => {
   form.value = { ...row }
   const res: any = await Storehouse_Contract_Get({
-    User_tokey,
+    User_tokey: globalStore.GET_User_tokey,
     T_number: row.T_number
   })
   if (res.Code === 200) {
@@ -163,7 +150,7 @@ const getFomrParams = () => {
   const product = getMontageStr(tableData.value, 'Id', 'count')
   const params = {
     ...form.value,
-    User_tokey,
+    User_tokey: globalStore.GET_User_tokey,
     T_submit: form.value.T_uuid,
     T_product: product
   }
@@ -177,7 +164,7 @@ const AddContract = (formEl: FormInstance | undefined) => {
       let res: any = {}
       const params = getFomrParams()
       if (isNew.value) {
-        res = await Storehouse_VerifyContract_Add({  ...params, T_customer_id: props.verify_customer_id })
+        res = await Storehouse_VerifyContract_Add({ ...params, T_customer_id: props.verify_customer_id })
       } else {
         res = await Storehouse_VerifyContract_Edit({ ...params, T_customer_id: props.verify_customer_id })
       }
@@ -224,7 +211,7 @@ const ProductSelectionAllChange = (selection: any[]) => (tableData.value = selec
  */
 const getContractNumber = async () => {
   contractNumberLoading.value = true
-  const res: any = await Storehouse_Contract_Gen_Number({ User_tokey }).catch(() => {
+  const res: any = await Storehouse_Contract_Gen_Number({ User_tokey: globalStore.GET_User_tokey }).catch(() => {
     contractNumberLoading.value = false
   })
   if (res.Code === 200) {
@@ -310,7 +297,7 @@ defineExpose({
             </el-button>
           </div>
         </el-form-item>
-        <el-form-item label="产品明细:" :label-width="formLabelWidth" prop="T_product">
+        <el-form-item label="验证明细:" :label-width="formLabelWidth" prop="T_product">
           <el-table
             border
             show-summary

+ 0 - 1
src/views/storehouse/sales/VerifyProject.vue

@@ -26,7 +26,6 @@ const getProductList = async () => {
     // 设置产品的选中
     tableProductData.value.forEach((row: any) => {
       const matchedIndex = selectProductData.value?.findIndex((item: any) => item.Id == row.Id)
-      console.log(matchedIndex)
       selectTable.value?.toggleRowSelection(row, matchedIndex != -1)
     })
   }

+ 4 - 9
src/views/workAttendance/Leave.vue

@@ -1,6 +1,5 @@
 <script setup lang="ts">
 import { ElMessage } from 'element-plus'
-import { GlobalStore } from '@/stores/index'
 import { ref } from 'vue'
 import { getFormatDuration } from '@/utils/common'
 import { UserFilled } from '@element-plus/icons-vue'
@@ -9,10 +8,9 @@ import TableBase from '@/components/TableBase/index.vue'
 import { ColumnProps } from '@/components/TableBase/interface/index'
 import { Leave_List, Leave_Approval } from '@/api/workAttendance/index'
 
-const TableRef = ref()
-const globalStore = GlobalStore()
+const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
 const columns: ColumnProps[] = [{ prop: 'T_user_name', label: '姓名' }]
-const { tableRowClassName } = useTablePublic()
+const { tableRowClassName, globalStore, updateOnTableList } = useTablePublic()
 const tableRowClassNameHandle = (data: any): any => tableRowClassName(data.row.Id, userInfo.value.Id)
 
 const userInfo = ref<LeaveUserInfoIn>({
@@ -26,15 +24,12 @@ const userInfo = ref<LeaveUserInfoIn>({
   Id: '',
   T_duration: 0
 })
-
-const initParam = { User_tokey: globalStore.GET_User_tokey }
 const getSalaryParams = (row: any) => {
   userInfo.value.Id = ''
   setTimeout(() => {
     userInfo.value = { ...row }
   }, 100)
 }
-
 const LeaveUser = async (T_State: number) => {
   if (!userInfo.value.Id) return
   const params = {
@@ -49,7 +44,7 @@ const LeaveUser = async (T_State: number) => {
     } else {
       ElMessage.warning('审核不通过!')
     }
-    TableRef.value.getTableList()
+    updateOnTableList(TableRef.value)
     userInfo.value = {} as LeaveUserInfoIn
   }
 }
@@ -62,7 +57,7 @@ const LeaveUser = async (T_State: number) => {
         ref="TableRef"
         :columns="columns"
         :requestApi="Leave_List"
-        :initParam="initParam"
+        :initParam="{ User_tokey: globalStore.GET_User_tokey }"
         layout="prev, pager, next"
         :rowClick="getSalaryParams"
         :tableRowClassName="tableRowClassNameHandle"

+ 15 - 19
src/views/workAttendance/MyLeave.vue

@@ -8,7 +8,6 @@ import {
   Leave_DaysOff,
   Leave_Duration
 } from '@/api/workAttendance/index'
-import { GlobalStore } from '@/stores/index'
 import { User_List } from '@/api/user/index'
 import Drawer from '@/components/Drawer/index.vue'
 import Dialog from '@/components/dialog/Dialog.vue'
@@ -20,16 +19,15 @@ import type { FormInstance, FormRules } from 'element-plus'
 import { ref, reactive, onMounted, nextTick } from 'vue'
 import { floatReg } from '@/views/salary/salary/relus'
 import { ColumnProps } from '@/components/TableBase/interface/index'
+import { useTablePublic } from '@/hooks/useTablePublic'
 
-let uuid = ''
 let isNew = true
 const LeaveType = ref<any>([])
-const globalStore = GlobalStore()
 const formLabelWidth = ref('100px')
 const ruleFormRef = ref<FormInstance>()
 const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
 const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
-const initParam = { User_tokey: globalStore.GET_User_tokey }
+const { resetForm, globalStore, updateOnTableList } = useTablePublic()
 
 const columns: ColumnProps[] = [
   { prop: 'T_type_name', label: '请假类型' },
@@ -41,23 +39,17 @@ const columns: ColumnProps[] = [
   { prop: 'operation', label: '操作', width: 200, fixed: 'right' }
 ]
 
-//drawer
 const callbackDrawer = (done: () => void) => {
   resetForm(ruleFormRef.value)
   done()
 }
-const resetForm = (formEl: FormInstance | undefined) => {
-  if (!formEl) return
-  formEl.resetFields()
-}
-
 const openDrawerLeave = (str: string, row: any) => {
   drawerRef.value && drawerRef.value.openDrawer()
   if (str === 'edit') {
     isNew = false
     nextTick(() => {
       form.value = { ...row }
-      uuid = row.T_approver
+      form.value.uuid = row.T_approver
       form.value.T_approver = row.T_approver_name
       form.value.T_id = row.Id
       form.value.T_duration = row.T_duration / 60
@@ -74,9 +66,7 @@ const LeaveDelete = (row: any) => {
       const res: any = await Leave_Del({ User_tokey: globalStore.GET_User_tokey, T_id: row.Id })
       if (res.Code === 200) {
         ElMessage.success('删除成功!')
-        nextTick(() => {
-          TableRef.value && TableRef.value.getTableList()
-        })
+        nextTick(() => updateOnTableList(TableRef.value))
       }
     })
     .catch(() => {
@@ -94,15 +84,15 @@ const AddLeave = (formEl: FormInstance | undefined) => {
         return
       }
       if (isNew) {
-        res = await Leave_Add({ ...form.value, T_approver: uuid, T_duration: time })
+        res = await Leave_Add({ ...form.value, T_approver: form.value.uuid, T_duration: time })
       } else {
-        res = await Leave_Edit({ ...form.value, T_approver: uuid, T_duration: time })
+        res = await Leave_Edit({ ...form.value, T_approver: form.value.uuid, T_duration: time })
       }
       if (res.Code === 200) {
         ElMessage.success(`${isNew ? '申请' : '修改'}成功!`)
         nextTick(() => {
           drawerRef.value && drawerRef.value.closeDrawer()
-          TableRef.value && TableRef.value.getTableList()
+          updateOnTableList(TableRef.value)
           resetForm(ruleFormRef.value)
           isNew = true
         })
@@ -114,6 +104,7 @@ const AddLeave = (formEl: FormInstance | undefined) => {
 }
 
 const form = ref({
+  uuid: '',
   T_id: '',
   T_text: '',
   T_type: '',
@@ -165,7 +156,7 @@ const searchHandle = () => {
 }
 const selectApprover = () => dialog.value.DialogOpen()
 const getApproverInfo = (row: any) => {
-  uuid = row.T_uuid
+  form.value.uuid = row.T_uuid
   form.value.T_approver = row.T_name
   dialog.value.DialogClose()
 }
@@ -196,7 +187,12 @@ onMounted(() => {
 
 <template>
   <div class="my-leave">
-    <TableBase ref="TableRef" :columns="columns" :requestApi="Leave_User_list" :initParam="initParam">
+    <TableBase
+      ref="TableRef"
+      :columns="columns"
+      :requestApi="Leave_User_list"
+      :initParam="{ User_tokey: globalStore.GET_User_tokey }"
+    >
       <template #table-header>
         <el-row :gutter="24" class="input-suffix">
           <el-col :span="8" :offset="16" class="d-flex padding-right-0">

+ 16 - 22
src/views/workAttendance/MyOvertime.vue

@@ -7,33 +7,31 @@ import {
   Overtime_Edit
 } from '@/api/workAttendance/index'
 import { User_List } from '@/api/user/index'
-import { GlobalStore } from '@/stores/index'
+import Upload from '@/components/Upload/index.vue'
 import Drawer from '@/components/Drawer/index.vue'
 import Dialog from '@/components/dialog/Dialog.vue'
 import { floatReg } from '@/views/salary/salary/relus'
 import { reactive, ref, nextTick, computed } from 'vue'
 import TableBase from '@/components/TableBase/index.vue'
 import { getFormatDuration, dayJs } from '@/utils/common'
-import { Edit, Delete, View, Plus } from '@element-plus/icons-vue'
 import { ElMessageBox, ElMessage } from 'element-plus'
-import { ColumnProps } from '@/components/TableBase/interface/index'
+import { useTablePublic } from '@/hooks/useTablePublic'
 import type { FormInstance, FormRules } from 'element-plus'
-import Upload from '@/components/Upload/index.vue'
+import { Edit, Delete, View, Plus } from '@element-plus/icons-vue'
+import { ColumnProps } from '@/components/TableBase/interface/index'
 
-let uuid = ''
 let isNew = ref(true)
 const search = ref('')
 const TableStatRef = ref()
 const disabled = ref(false)
 const tableApproverRef = ref()
-const globalStore = GlobalStore()
 const formLabelWidth = ref('100px')
 const ruleFormRef = ref<FormInstance>()
 const dialog = ref<InstanceType<typeof Dialog> | null>(null)
 const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
 const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
 const uploadRef = ref<InstanceType<typeof Upload> | null>(null)
-const initParam = { User_tokey: globalStore.GET_User_tokey }
+const { resetForm, globalStore, updateOnTableList } = useTablePublic()
 
 const columns: ColumnProps[] = [
   { prop: 'T_start_time', label: '开始时间', ellipsis: true },
@@ -51,6 +49,7 @@ const columns_Stat: ColumnProps[] = [
 ]
 
 const form = ref({
+  uuid: '',
   T_id: '',
   T_text: '',
   T_duration: 0,
@@ -84,7 +83,7 @@ const openDrawerOvertime = (str: string, row?: any) => {
   if (!isNew.value) {
     nextTick(() => {
       form.value = { ...row }
-      uuid = row.T_approver
+      form.value.uuid = row.T_approver
       form.value.T_approver = row.T_approver_name
       form.value.T_id = row.Id
       form.value.T_duration = row.T_duration / 60
@@ -112,9 +111,7 @@ const OvertimeDelete = (row: any) => {
       const res: any = await Overtime_Del({ User_tokey: globalStore.GET_User_tokey, T_id: row.Id })
       if (res.Code === 200) {
         ElMessage.success('删除成功!')
-        nextTick(() => {
-          TableRef.value?.getTableList()
-        })
+        nextTick(() => updateOnTableList(TableRef.value))
       }
     })
     .catch(() => {
@@ -128,16 +125,17 @@ const AddOvertime = (formEl: FormInstance | undefined) => {
       let res: any = {}
       let time = duration.value * 60
       if (isNew.value) {
-        res = await Overtime_Add({ ...form.value, T_approver: uuid, T_duration: time })
+        res = await Overtime_Add({ ...form.value, T_approver: form.value.uuid, T_duration: time })
       } else {
-        res = await Overtime_Edit({ ...form.value, T_approver: uuid, T_duration: time })
+        res = await Overtime_Edit({ ...form.value, T_approver: form.value.uuid, T_duration: time })
       }
       if (res.Code === 200) {
         ElMessage.success(`${isNew.value ? '申请' : '修改'}成功!`)
         nextTick(() => {
           drawerRef.value?.closeDrawer()
-          TableRef.value?.getTableList()
+          updateOnTableList(TableRef.value)
           resetForm(ruleFormRef.value)
+          uploadRef.value?.clearfileList()
           isNew.value = true
         })
       }
@@ -153,14 +151,10 @@ const callbackDrawer = (done: () => void) => {
   isNew.value = true
   nextTick(() => {
     resetForm(ruleFormRef.value)
+    uploadRef.value?.clearfileList()
     done()
   })
 }
-const resetForm = (formEl: FormInstance | undefined) => {
-  if (!formEl) return
-  uploadRef.value?.clearfileList()
-  formEl.resetFields()
-}
 
 // dialog
 const Dialogcolumns: ColumnProps[] = [{ prop: 'T_name', label: '名字', name: 'T_name' }]
@@ -177,7 +171,7 @@ const selectApprover = () => {
   dialog.value?.DialogOpen()
 }
 const getApproverInfo = (row: any) => {
-  uuid = row.T_uuid
+  form.value.uuid = row.T_uuid
   form.value.T_approver = row.T_name
   dialog.value?.DialogClose()
 }
@@ -200,7 +194,7 @@ const duration = computed(() => {
         ref="TableRef"
         :columns="columns"
         :requestApi="Overtime_User_list"
-        :initParam="initParam"
+        :initParam="{ User_tokey: globalStore.GET_User_tokey }"
         layout="total,sizes,prev, pager, next"
       >
         <template #table-header>
@@ -243,7 +237,7 @@ const duration = computed(() => {
         ref="TableStatRef"
         :columns="columns_Stat"
         :requestApi="Overtime_Stat"
-        :initParam="initParam"
+        :initParam="{ User_tokey: globalStore.GET_User_tokey }"
         layout="total,sizes,prev, pager, next"
       >
         <template #table-header="{ pageable }">