Browse Source

feat: ✨ 完成我的项目

@sun-chaoqun 2 years ago
parent
commit
bf444cf1b3

+ 4 - 0
components.d.ts

@@ -12,6 +12,7 @@ declare module '@vue/runtime-core' {
     404: typeof import('./src/components/ErrorMessage/404.vue')['default']
     Dialog: typeof import('./src/components/dialog/Dialog.vue')['default']
     Drawer: typeof import('./src/components/Drawer/index.vue')['default']
+    ElAlert: typeof import('element-plus/es')['ElAlert']
     ElAside: typeof import('element-plus/es')['ElAside']
     ElAutocomplete: typeof import('element-plus/es')['ElAutocomplete']
     ElAvatar: typeof import('element-plus/es')['ElAvatar']
@@ -66,4 +67,7 @@ declare module '@vue/runtime-core' {
     TableBase: typeof import('./src/components/TableBase/index.vue')['default']
     Upload: typeof import('./src/components/Upload/index.vue')['default']
   }
+  export interface ComponentCustomProperties {
+    vLoading: typeof import('element-plus/es')['ElLoadingDirective']
+  }
 }

+ 9 - 9
src/api/index.ts

@@ -35,15 +35,15 @@ class RequestHttp {
      */
     this.service.interceptors.request.use(
       (config: InternalAxiosRequestConfig) => {
-        const globalStore = GlobalStore()
+        // const globalStore = GlobalStore()
         // 开始loading
-        if (!globalStore.GET_isloading) {
-          loadingInstance = ElLoading.service({
-            lock: true,
-            text: 'Loading',
-            background: 'rgba(0, 0, 0, 0.7)'
-          })
-        }
+        // if (!globalStore.GET_isloading) {
+        //   loadingInstance = ElLoading.service({
+        //     lock: true,
+        //     text: 'Loading',
+        //     background: 'rgba(0, 0, 0, 0.7)'
+        //   })
+        // }
 
         // 加入token
         // if (globalStore.GET_User_tokey) {
@@ -64,7 +64,7 @@ class RequestHttp {
         const globalStore = GlobalStore()
 
         // * 在请求结束后,并关闭请求 loading
-        loadingInstance.close && loadingInstance.close()
+        // loadingInstance.close && loadingInstance.close()
         // 无权限访问 || 登录密码错误(code == 202)
         // if (data.Code === ResultEnum.ROLE) {
         //   return Promise.reject(data)

+ 9 - 1
src/components/TableBase/index.vue

@@ -36,7 +36,7 @@ const props = withDefaults(defineProps<ProTableProps>(), {
 })
 
 // 表格操作 Hooks
-const { tableData, pageable, getTableList, searchTable, handleSizeChange, handleCurrentChange } = useTable(
+const { tableData, pageable, loading, getTableList, searchTable, handleSizeChange, handleCurrentChange } = useTable(
   props.requestApi,
   props.initParam,
   props.pagination,
@@ -62,6 +62,7 @@ defineExpose({
 
   <div class="card table">
     <el-table
+      v-loading="loading"
       :data="tableData"
       @row-click="props.rowClick"
       @selection-change="props.selectionChange"
@@ -130,4 +131,11 @@ defineExpose({
 
 <style scoped lang="scss">
 @import './index.scss';
+:deep(.el-table--enable-row-hover .el-table__body tr) {
+  transition: all 0.5s ease-in-out;
+}
+:deep(.el-table--enable-row-hover .el-table__body tr:hover) {
+  box-shadow: 0 0 6px #dfdfdf;
+  transform: translateX(-2px);
+}
 </style>

+ 5 - 2
src/hooks/useTable.ts

@@ -8,6 +8,7 @@ interface Pageable {
   disabled: boolean
 }
 interface Table {
+  loading: boolean
   tableData: any[]
   pageable: Pageable
   searchParam: any
@@ -32,6 +33,7 @@ export const useTable = (
   const state = reactive<Table>({
     // 表格数据
     tableData: [],
+    loading: true,
     // 分页数据
     pageable: {
       // 当前页数
@@ -54,9 +56,9 @@ export const useTable = (
 
   const getTableList = async () => {
     const params: any = {
-      ...initParam,
       page: state.pageable.pageNum,
-      page_z: state.pageable.pageSize
+      page_z: state.pageable.pageSize,
+      ...initParam
     }
     const res = await requestApi(params)
     state.tableData = res.Data?.Data
@@ -65,6 +67,7 @@ export const useTable = (
     if (res.Data?.RemainingTime) {
       state.pageable.RemainingTime = res.Data.RemainingTime
     }
+    state.loading = false
   }
   if (isPagination) {
   }

+ 6 - 2
src/layouts/Header/Notice.vue

@@ -87,7 +87,9 @@ defineExpose({
             <el-dropdown-item v-for="item in newsList" :key="item.T_uuid" @click="previewNotice(item)">
               <div class="item">
                 <div class="item-box">
-                  <el-badge :is-dot="item.T_Tag === 0">{{ item.T_Title }}</el-badge>
+                  <el-badge :is-dot="item.T_Tag === 0"
+                    ><div class="item-content">{{ item.T_Title }}</div></el-badge
+                  >
                 </div>
                 <span>{{ item.CreateTime.split(' ')[0] }}</span>
               </div>
@@ -99,7 +101,9 @@ defineExpose({
             <el-dropdown-item v-for="item in newsList" :key="item.T_uuid" @click="previewNotice(item)">
               <div class="item">
                 <div class="item-box">
-                  <el-badge :is-dot="item.T_Tag === 0">{{ item.T_Title }}</el-badge>
+                  <el-badge :is-dot="item.T_Tag === 0"
+                    ><div class="item-content">{{ item.T_Title }}</div></el-badge
+                  >
                 </div>
                 <span>{{ item.CreateTime.split(' ')[0] }}</span>
               </div>

+ 8 - 0
src/views/account/roles/index.scss

@@ -48,3 +48,11 @@ h3 span {
   display: flex;
   justify-content: space-between;
 }
+
+:deep(.el-table--enable-row-hover .el-table__body tr > td) {
+  transition: all 0.5s ease-in-out;
+}
+:deep(.el-table--enable-row-hover .el-table__body tr:hover > td) {
+  box-shadow: 0 0 6px #dfdfdf;
+  transform: translateX(-2px);
+}

+ 267 - 3
src/views/project/MyProject.vue

@@ -1,6 +1,270 @@
-<script setup lang="ts"></script>
+<script setup lang="ts">
+import { ElMessage, ElMessageBox } from 'element-plus'
+import { GlobalStore } from '@/stores/index'
+import { ref, reactive, nextTick, computed } from 'vue'
+import { getFormatDuration } from '@/utils/common'
+import { UserFilled } from '@element-plus/icons-vue'
+import TableBase from '@/components/TableBase/index.vue'
+import { ColumnProps } from '@/components/TableBase/interface/index'
+import { User_List } from '@/api/user/index'
+import Drawer from '@/components/Drawer/index.vue'
+import {
+  User_Power_User_list,
+  User_Power_Add,
+  User_Power_Edit,
+  User_Power_Del,
+  User_Power_Get
+} from '@/api/project/index'
+import type { FormInstance, FormRules } from 'element-plus'
+import ProjectDetail from './ProjectDetail.vue'
+import receiveUser from '@/views/storehouse/outStock/receiveUser.vue'
+import { Edit, Delete, View } from '@element-plus/icons-vue'
+
+const isNew = ref(true)
+const TableRef = ref()
+const disabled = ref(false)
+const globalStore = GlobalStore()
+const formLabelWidth = ref('120px')
+const ruleFormRef = ref<FormInstance>()
+const User_tokey = globalStore.GET_User_tokey
+const initParam = { User_tokey }
+const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
+const receiveUserDrawerRef = ref<InstanceType<typeof receiveUser> | null>(null)
+const projectDetailRef = ref<InstanceType<typeof ProjectDetail> | null>(null)
+
+const columns: ColumnProps[] = [
+  { prop: 'Id', label: 'ID' },
+  { prop: 'T_name', label: '项目名称' },
+  { prop: 'T_user_name', label: '项目负责人' },
+  { prop: 'T_start_date', label: '立项日期' },
+  { prop: 'T_end_date', label: '结束时间' },
+  { prop: 'T_planning_cycle', label: '计划完成周期(工作日)' },
+  { prop: 'T_name', label: '绩效总金额' },
+  { prop: 'T_State', label: '状态' },
+  { prop: 'operation', label: '操作', width: 200, fixed: 'right' }
+]
+
+const form = ref({
+  Id: '',
+  T_name: '',
+  T_description: '',
+  T_detail: '',
+  T_planning_cycle: '',
+  T_remark: '',
+  T_approver: '',
+  T_uuid: ''
+})
+
+const rules = reactive<FormRules>({
+  T_name: [{ required: true, message: '请输入项目名称', trigger: 'blur' }]
+})
+
+const openProjectDrawer = (type: string, row?: any) => {
+  isNew.value = type === 'new' ? true : false
+  nextTick(async () => {
+    if (!isNew.value || type === 'view') {
+      if (type === 'view') disabled.value = true
+      form.value = { ...row }
+      form.value.T_approver = row.T_approver_name
+      form.value.T_uuid = row.T_approver
+      const res: any = await User_Power_Get({ T_id: row.Id })
+      if (res.Code === 200) {
+        projectDetailRef.value?.setDetailData(res.Data.T_Detail)
+      }
+    }
+  })
+  drawerRef.value?.openDrawer()
+}
+const callbackDrawer = (done: () => void) => {
+  resetForm(ruleFormRef.value)
+  projectDetailRef.value?.clearDetail()
+  isNew.value = true
+  disabled.value = false
+  done()
+}
+const resetForm = (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  formEl.resetFields()
+}
+const getProjectInfo = ({ T_uuid, T_name }: { T_uuid: string; T_name: string }) => {
+  form.value.T_approver = T_name
+  form.value.T_uuid = T_uuid
+}
+const selectApprover = () => receiveUserDrawerRef.value?.openDrawer()
+// 计算周期
+const getPlanningCycle = (info: any[]) => {
+  form.value.T_planning_cycle = info.reduce((cur, pre) => {
+    cur = cur + pre.T_planned_time
+    return cur
+  }, 0)
+}
+
+// 提交项目
+const addProject = (formEl: FormInstance | undefined) => {
+  if (!formEl) return
+  formEl.validate(async valid => {
+    if (valid) {
+      let res: any = ''
+      let detail = ''
+      projectDetailRef.value?.getDetailInfo().forEach((item: any) => {
+        detail += `${item.T_function},${item.T_planned_time},${item.T_finish}|`
+      })
+      const params = {
+        User_tokey,
+        ...form.value,
+        T_detail: detail,
+        T_approver: form.value.T_uuid
+      }
+      if (isNew.value) {
+        res = await User_Power_Add(params)
+      } else {
+        res = await User_Power_Edit({ ...params, T_id: form.value.Id })
+      }
+
+      if (res.Code === 200) {
+        ElMessage.success(`项目${isNew.value ? '添加' : '修改'}成功!`)
+        nextTick(() => {
+          isNew.value = true
+          TableRef.value?.getTableList()
+          drawerRef.value?.closeDrawer()
+          resetForm(ruleFormRef.value)
+        })
+      }
+    } else return false
+  })
+}
+// 删除
+const DeleteProject = (Id: number) => {
+  ElMessageBox.confirm('您确定要删除项目吗?', '警告', {
+    confirmButtonText: '确定',
+    cancelButtonText: '取消',
+    type: 'warning'
+  })
+    .then(async () => {
+      const res: any = await User_Power_Del({ User_tokey, T_id: Id })
+      if (res.Code === 200) {
+        ElMessage.success('删除成功!')
+        nextTick(() => {
+          TableRef.value?.getTableList()
+        })
+      }
+    })
+    .catch(() => {
+      ElMessage.warning('取消成功!')
+    })
+}
+</script>
 <template>
-  <div></div>
+  <div class="my-project">
+    <TableBase ref="TableRef" :columns="columns" :requestApi="User_Power_User_list" :initParam="initParam">
+      <template #table-header>
+        <el-row :gutter="20" class="w-100">
+          <el-col :span="4" :offset="20"
+            ><el-button type="primary" @click="openProjectDrawer('new')">立项申请</el-button></el-col
+          >
+        </el-row>
+      </template>
+      <template #right="{ row }">
+        <el-button link type="success" size="small" :icon="View" @click="openProjectDrawer('view', row)"
+          >详情</el-button
+        >
+        <el-button link type="primary" size="small" :icon="Edit" @click="openProjectDrawer('edit', row)"
+          >编辑</el-button
+        >
+        <el-button link type="danger" size="small" :icon="Delete" @click="DeleteProject(row.Id)">删除</el-button>
+      </template>
+    </TableBase>
+    <Drawer ref="drawerRef" :handleClose="callbackDrawer" size="50%">
+      <template #header="{ params }">
+        <h4 :id="params.titleId" :class="params.titleClass">{{ isNew ? '添加' : '编辑' }} - 项目</h4>
+      </template>
+      <el-form ref="ruleFormRef" :model="form" :rules="rules">
+        <el-form-item label="项目名称:" :label-width="formLabelWidth" prop="T_name">
+          <el-input
+            v-model="form.T_name"
+            :disabled="disabled"
+            type="text"
+            autocomplete="off"
+            placeholder="请输入项目名称"
+          />
+        </el-form-item>
+        <el-form-item label="项目简介:" :label-width="formLabelWidth" prop="T_description">
+          <el-input
+            v-model="form.T_description"
+            :disabled="disabled"
+            :autosize="{ minRows: 6, maxRows: 8 }"
+            type="textarea"
+            placeholder="请输入项目简介"
+          />
+        </el-form-item>
+        <el-form-item label="项目明细:" :label-width="formLabelWidth" prop="T_detail">
+          <ProjectDetail ref="projectDetailRef" @onPlanning="getPlanningCycle" :disabled="disabled"></ProjectDetail>
+        </el-form-item>
+        <el-form-item label="计划完成周期:" :label-width="formLabelWidth" prop="T_planning_cycle">
+          <div style="display: flex; white-space: nowrap; flex: 1">
+            <el-input
+              v-model="form.T_planning_cycle"
+              :disabled="disabled"
+              type="text"
+              autocomplete="off"
+              placeholder="请输入计划完成周期"
+            />
+            <span style="margin: 0 10px">工作日</span>
+            <span style="color: #bbb"
+              ><el-icon><QuestionFilled /></el-icon>备注;根据项目明细计划时间自动计算</span
+            >
+          </div>
+        </el-form-item>
+        <el-form-item label="备注:" :label-width="formLabelWidth" prop="T_remark">
+          <el-input
+            v-model="form.T_remark"
+            :disabled="disabled"
+            :autosize="{ minRows: 4, maxRows: 6 }"
+            type="textarea"
+            placeholder="请输入备注信息"
+          />
+        </el-form-item>
+        <el-form-item label="审批人:" :label-width="formLabelWidth" prop="T_approver">
+          <el-input
+            v-model="form.T_approver"
+            :disabled="disabled"
+            placeholder="请选择审批人"
+            class="w-50"
+            @focus="selectApprover"
+          />
+        </el-form-item>
+        <el-form-item :label-width="formLabelWidth" v-if="!disabled">
+          <el-button v-if="isNew" class="btn" color="#626aef" @click="addProject(ruleFormRef)">提交</el-button>
+          <el-button v-else class="btn" color="#626aef" @click="addProject(ruleFormRef)">修改</el-button>
+        </el-form-item>
+      </el-form>
+    </Drawer>
+    <receiveUser ref="receiveUserDrawerRef" @onUserInfo="getProjectInfo" title="选择审批人"></receiveUser>
+  </div>
 </template>
 
-<style scoped></style>
+<style scoped lang="scss">
+@import '@/styles/var.scss';
+:deep(.el-table--enable-row-hover .el-table__body tr) {
+  transition: all 0.5s ease-in-out;
+}
+:deep(.el-table--enable-row-hover .el-table__body tr:hover) {
+  box-shadow: 0 0 6px #dfdfdf;
+  transform: translateX(-2px);
+}
+.my-project {
+  height: 100%;
+  display: flex;
+  overflow: hidden;
+  @include f-direction;
+
+  :deep(.table-header),
+  :deep(.card) {
+    margin: 0;
+    border-radius: 8px;
+  }
+  .btn {
+    padding: 0 25px;
+  }
+}
+</style>

+ 164 - 0
src/views/project/ProjectDetail.vue

@@ -0,0 +1,164 @@
+<script setup lang="ts">
+import { ref, reactive, nextTick, computed } from 'vue'
+import Drawer from '@/components/Drawer/index.vue'
+import type { FormInstance, FormRules } from 'element-plus'
+import { ColumnProps } from '@/components/TableBase/interface/index'
+import { generateRandom } from '@/utils/common'
+
+const isNew = ref(true)
+const tableData = ref<any[]>([])
+const formLabelWidth = ref('120px')
+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({
+  id: '',
+  T_function: '',
+  T_planned_time: '',
+  T_finish: ''
+})
+const rules = reactive<FormRules>({
+  T_function: [{ required: true, message: '请输入功能与指标', trigger: 'blur' }],
+  T_planned_time: [{ required: true, message: '请输入计划时间(工作日)', trigger: 'blur' }],
+  T_finish: [{ required: true, message: '请选择是否完成(原因)', trigger: 'blur' }]
+})
+
+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
+  }
+  drawerRef.value?.openDrawer()
+}
+const callbackDrawer = (done: () => void) => {
+  resetForm(ruleFormRef.value)
+  done()
+}
+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() })
+      } else {
+        const index = tableData.value.findIndex(item => item.id === form.id)
+        console.log(index, form)
+        tableData.value[index] = { ...form }
+      }
+      emit('onPlanning', tableData.value)
+      nextTick(() => {
+        isNew.value = true
+        drawerRef.value?.closeDrawer()
+        resetForm(ruleFormRef.value)
+      })
+    } else return false
+  })
+}
+const emit = defineEmits<{ (event: 'onPlanning', value: any): void }>()
+const getDetailInfo = () => tableData.value
+const clearDetail = () => (tableData.value = [])
+const setDetailData = (info: any[]) => {
+  tableData.value = info.map((item: any) => {
+    item.id = generateRandom()
+    return item
+  })
+}
+defineExpose({
+  getDetailInfo,
+  clearDetail,
+  setDetailData
+})
+
+const props = defineProps<{ disabled: boolean }>()
+const disabled = computed(() => props.disabled)
+</script>
+
+<template>
+  <el-table
+    stripe
+    :data="tableData"
+    style="width: 100%"
+    :header-cell-style="{
+      background: 'rgb(225 226 228)',
+      color: '#000'
+    }"
+  >
+    <template v-for="item in columns" :key="item.prop">
+      <el-table-column v-bind="item" v-if="item.type === 'index'"></el-table-column>
+      <el-table-column v-bind="item" v-if="item.fixed !== 'right' && item.type !== 'index'"> </el-table-column>
+      <el-table-column v-bind="item" v-if="item.fixed === 'right'">
+        <template #default="{ row }">
+          <el-button size="small" :disabled="disabled" type="primary" @click="openProductionDetailed('edit', row)"
+            >编辑</el-button
+          >
+          <el-button size="small" :disabled="disabled" type="danger" @click="deleteProjectDetail(row.id)"
+            >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </template>
+    <template #append>
+      <el-button type="primary" :disabled="disabled" @click="openProductionDetailed('new')">
+        <el-icon><Plus /></el-icon><span style="margin-left: 6px">添加</span>
+      </el-button>
+    </template>
+  </el-table>
+  <Drawer ref="drawerRef" :handleClose="callbackDrawer">
+    <template #header="{ params }">
+      <h4 :id="params.titleId" :class="params.titleClass">{{ isNew ? '添加' : '编辑' }} - 项目明细</h4>
+    </template>
+    <el-form ref="ruleFormRef" :model="form" :rules="rules">
+      <el-form-item label="功能与指标:" :label-width="formLabelWidth" prop="T_function">
+        <el-input v-model="form.T_function" type="text" autocomplete="off" placeholder="请输入功能与指标" />
+      </el-form-item>
+      <el-form-item
+        label="计划时间:"
+        :label-width="formLabelWidth"
+        prop="T_planned_time"
+        :rules="[{ type: 'number', message: '必须是数字' }]"
+      >
+        <el-input v-model.number="form.T_planned_time" type="text" autocomplete="off" placeholder="请输入计划时间" />
+      </el-form-item>
+      <el-form-item label="是否完成:" :label-width="formLabelWidth" prop="T_finish">
+        <el-input v-model="form.T_finish" type="text" autocomplete="off" placeholder="请输入完成与否" />
+      </el-form-item>
+      <el-form-item :label-width="formLabelWidth">
+        <el-button v-if="isNew" class="btn" :disabled="disabled" type="primary" @click="addProjectDetail(ruleFormRef)"
+          >添加</el-button
+        >
+        <el-button v-else class="btn" :disabled="disabled" type="primary" @click="addProjectDetail(ruleFormRef)"
+          >修改</el-button
+        >
+      </el-form-item>
+    </el-form>
+  </Drawer>
+</template>
+
+<style scoped lang="scss">
+:deep(.el-drawer__body .el-table .cell) {
+  white-space: normal !important;
+}
+.el-form-item {
+  margin-bottom: 18px;
+}
+</style>

+ 15 - 2
src/views/project/ProjectFinance.vue

@@ -49,8 +49,8 @@ const tableRowClassName = (data: any): any => {
   }
   if (user !== undefined) {
     let rowBackground = {
-      background: '#f0f9eb',
-      color: '#67c23a'
+      background: '#e3eefd',
+      color: '#0d7bff'
     }
     return rowBackground
   } else {
@@ -109,6 +109,13 @@ const tableRowClassName = (data: any): any => {
 
 <style scoped lang="scss">
 @import '@/styles/var.scss';
+:deep(.el-table--enable-row-hover .el-table__body tr > td) {
+  transition: all 0.5s ease-in-out;
+}
+:deep(.el-table--enable-row-hover .el-table__body tr:hover > td) {
+  box-shadow: 0 0 6px #dfdfdf;
+  transform: translateX(-2px);
+}
 .project-finance {
   height: 100%;
   display: flex;
@@ -118,12 +125,18 @@ const tableRowClassName = (data: any): any => {
     @include f-direction;
   }
   .project-container {
+    @include f-direction;
     z-index: 0;
     flex: 1;
     margin-left: 12px;
     .box-card {
       border-radius: 8px;
     }
+    :deep(.el-table tr) {
+      &:hover {
+        transition: all 5s ease-in-out;
+      }
+    }
     .text {
       text-align: left;
     }

+ 7 - 0
src/views/salary/salary/Salary.vue

@@ -175,4 +175,11 @@ const tableRowClassName = (data: any): any => {
 
 <style scoped lang="scss">
 @import './index.scss';
+:deep(.el-table--enable-row-hover .el-table__body tr) {
+  transition: all 0.5s ease-in-out;
+}
+:deep(.el-table--enable-row-hover .el-table__body tr:hover) {
+  box-shadow: 0 0 6px #dfdfdf;
+  transform: translateX(-2px);
+}
 </style>

+ 1 - 1
src/views/storehouse/outStock/ReceiveOutStock.vue

@@ -328,7 +328,7 @@ const { options } = depotHooks()
       </div>
     </el-form>
     <InStorageSn ref="drawerSnRef" @onCount="autoGetCount" />
-    <ReceiveUser ref="receiveUserdialog" @onUserInfo="getReceiveInfo" />
+    <ReceiveUser ref="receiveUserdialog" @onUserInfo="getReceiveInfo" title="选择经办人" />
     <OutStockProduct
       ref="drawerProductRef"
       :depotId="form.T_depot_id"

+ 1 - 1
src/views/storehouse/outStock/SaleOutStock.vue

@@ -363,7 +363,7 @@ const { options } = depotHooks()
       </div>
     </el-form>
     <InStorageSn ref="drawerSnRef" @onCount="autoGetCount" />
-    <ReceiveUser ref="receiveUserdialog" @onUserInfo="getReceiveInfo" />
+    <ReceiveUser ref="receiveUserdialog" @onUserInfo="getReceiveInfo" title="选择经办人" />
     <ContractNumber ref="contractNumberRef" @onContactInfo="getContactInfo" />
   </div>
 </template>

+ 4 - 4
src/views/storehouse/outStock/receiveUser.vue

@@ -28,12 +28,12 @@ const getApproverInfo = (row: any) => {
   emit('onUserInfo', row)
   drawerRef.value?.closeDrawer()
 }
-const callbackDrawer = (done: () => void) => done()
 
+const props = defineProps<{ title: string }>()
+const title = ref(props.title)
+const callbackDrawer = (done: () => void) => done()
 const emit = defineEmits<{ (event: 'onUserInfo', value: any): void }>()
-
 const openDrawer = () => drawerRef.value?.openDrawer()
-
 defineExpose({
   openDrawer
 })
@@ -43,7 +43,7 @@ defineExpose({
   <div>
     <Drawer ref="drawerRef" :handleClose="callbackDrawer">
       <template #header="{ params }">
-        <h3 :id="params.titleId" :class="params.titleClass">选择经办人</h3>
+        <h3 :id="params.titleId" :class="params.titleClass">{{ title }}</h3>
       </template>
       <TableBase
         ref="tableRef"

+ 1 - 1
src/views/workAttendance/RecordsFinance.vue

@@ -100,7 +100,7 @@ const tableRowClassName = (data: any): any => {
 }
 
 const dataCallback = (res: any): any => {
-  return res.Data.Data.filter((item: any) => item.T_approver)
+  return res.Data.Data && res.Data.Data.filter((item: any) => item.T_approver)
 }
 
 // drawer

+ 17 - 17
vite.config.ts

@@ -23,28 +23,28 @@ export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
     css: {
       preprocessorOptions: {
         scss: {
-          additionalData: `@use "@/styles/index.scss";`
+          additionalData: '@use "@/styles/index.scss";'
         }
       }
     },
     server: {
       open: true,
-      host: '0.0.0.0'
-      // proxy: {
-      //   '/api': {
-      //     target: 'https://erp.baozhida.cn',
-      //     changeOrigin: true,
-      //     rewrite: path => path.replace(/^\/api/, '/testapi')
-      //   },
-      //   '/testapi': {
-      //     target: 'https://erp.baozhida.cn',
-      //     changeOrigin: true
-      //   },
-      //   '/ams': {
-      //     target: 'http://erp.baozhida.cn',
-      //     changeOrigin: true
-      //   }
-      // }
+      host: '0.0.0.0',
+      proxy: {
+        '/api': {
+          target: 'https://erp.baozhida.cn',
+          changeOrigin: true,
+          rewrite: path => path.replace(/^\/api/, '/testapi')
+        },
+        '/testapi': {
+          target: 'https://erp.baozhida.cn',
+          changeOrigin: true
+        },
+        '/ams': {
+          target: 'http://erp.baozhida.cn',
+          changeOrigin: true
+        }
+      }
     },
     plugins: [
       vue(),