Parcourir la source

员工档案字段调整

songxy il y a 9 mois
Parent
commit
5d88c5eb59

+ 5 - 0
client/src/api/oa/staffRecords/index.ts

@@ -28,3 +28,8 @@ export const generateStaffNum = () => {
 export const reportWorkloadStatistics = (params) => {
   return request.get({ url: '/adm/reportWorkloadStatistics/index', params })
 }
+
+// 导出API 访问日志
+export const excelStaffRecord = async (params) => {
+  return await request.download({ url: '/adm/staff-records/excel', params })
+}

BIN
client/src/assets/imgs/menus/xmgz_icon.png


+ 0 - 8
client/src/router/modules/remaining.ts

@@ -241,14 +241,6 @@ const remainingRouter: AppRouteRecordRaw[] = [
           title: '学习中心详情'
         }
       },
-      {
-        path: 'projectTrack',
-        component: () => import('@/views/OaSystem/projectCenter/projectTrack/index.vue'),
-        name: 'ProjectTrack',
-        meta: {
-          title: '项目跟踪'
-        }
-      },
       {
         path: 'projectDetail',
         component: () => import('@/views/OaSystem/projectCenter/projectDetail/projectDetail.vue'),

+ 157 - 64
client/src/views/OaSystem/officeCenter/gdzccgsqPage/index.vue

@@ -33,11 +33,21 @@
       </div>
       <div class="form">
         <span class="formSpan">资产编号:</span>
-        <el-input v-model="qrs.assetNo" placeholder="请输入资产编号" style="width: 160px" />
+        <el-input
+          v-model="qrs.assetNo"
+          placeholder="请输入资产编号"
+          style="width: 160px"
+          @keydown="keydonwHandle"
+        />
       </div>
       <div class="form">
         <span class="formSpan">资产名称:</span>
-        <el-input v-model="qrs.assetName" placeholder="请输入资产名称" style="width: 160px" />
+        <el-input
+          v-model="qrs.assetName"
+          placeholder="请输入资产名称"
+          style="width: 160px"
+          @keydown="keydonwHandle"
+        />
       </div>
       <div class="form">
         <span class="formSpan">资产类型:</span>
@@ -52,15 +62,30 @@
       </div>
       <div class="form">
         <span class="formSpan">资产型号:</span>
-        <el-input v-model="qrs.assetModel" placeholder="请输入资产型号" style="width: 160px" />
+        <el-input
+          v-model="qrs.assetModel"
+          placeholder="请输入资产型号"
+          style="width: 160px"
+          @keydown="keydonwHandle"
+        />
       </div>
       <div class="form">
         <span class="formSpan">资产序列号:</span>
-        <el-input v-model="qrs.assetSequence" placeholder="请输入资产序列号" style="width: 160px" />
+        <el-input
+          v-model="qrs.assetSequence"
+          placeholder="请输入资产序列号"
+          style="width: 160px"
+          @keydown="keydonwHandle"
+        />
       </div>
       <div class="form">
         <span class="formSpan">保管人:</span>
-        <el-input v-model="qrs.custodianName" placeholder="请输入保管人" style="width: 160px" />
+        <el-input
+          v-model="qrs.custodianName"
+          placeholder="请输入保管人"
+          style="width: 160px"
+          @keydown="keydonwHandle"
+        />
       </div>
       <div class="form">
         <span class="formSpan">保管人部门:</span>
@@ -87,10 +112,10 @@
             <img src="@/assets/imgs/OA/open.png" class="mr-8px" alt="" />
             导出</el-button
           >
-          <!-- <el-button type="primary" @click="addOrEditDialogHandle">
+          <el-button type="primary" @click="queryAssetProcure">
             <el-icon size="16" style="margin-right: 5px; font-weight: bold"><Plus /></el-icon>
             新增</el-button
-          > -->
+          >
           <el-button type="danger" @click="changeCustodian">
             <img src="@/assets/imgs/OA/open.png" class="mr-8px" alt="" />
             变更</el-button
@@ -145,27 +170,30 @@
           <el-table-column :show-overflow-tooltip="true" prop="assetName" label="资产名称" />
           <el-table-column :show-overflow-tooltip="true" prop="assetType" label="资产类型" />
           <el-table-column :show-overflow-tooltip="true" prop="assetModel" label="资产型号" />
-          <el-table-column
-            :show-overflow-tooltip="true"
-            prop="custodianName"
-            label="保管人"
-            width="120"
-          />
           <!-- <el-table-column
             :show-overflow-tooltip="true"
             prop="custodianDeptName"
             label="保管人部门"
           /> -->
           <el-table-column :show-overflow-tooltip="true" prop="assetSequence" label="资产序列号" />
+          <el-table-column
+            :show-overflow-tooltip="true"
+            prop="custodianName"
+            label="保管人"
+            width="120"
+          />
           <el-table-column :show-overflow-tooltip="true" prop="amount" label="金额" width="120" />
           <!-- <el-table-column :show-overflow-tooltip="true" prop="assetConfig" label="资产配置" /> -->
           <el-table-column :show-overflow-tooltip="true" prop="bz1" label="备注" />
 
-          <el-table-column label="操作" width="80" fixed="right">
+          <el-table-column label="操作" width="160" fixed="right">
             <template #default="scope">
-              <div class="operateBtn" @click="operateClick(scope.row)">
-                <span>查看</span>
-              </div>
+              <el-button type="primary" plain round @click="operateClick(scope.row)"
+                >查看</el-button
+              >
+              <el-button type="primary" plain round @click="addOrEditDialogHandle(scope.row)"
+                >编辑</el-button
+              >
             </template>
           </el-table-column>
         </el-table>
@@ -193,78 +221,75 @@
     >
       <el-row :gutter="20">
         <el-col :span="12">
-          <el-form-item label="项目名称" prop="name">
-            <el-input v-model="ruleForm.name" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="项目编号" prop="name">
-            <el-input v-model="ruleForm.name" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-form-item label="项目责任部门" prop="name">
-            <el-input v-model="ruleForm.name" />
+          <el-form-item label="采购时间">
+            <el-date-picker
+              style="width: 100%"
+              v-model="ruleForm.procureTime"
+              type="date"
+              placeholder="请选择采购时间"
+            />
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="采购时间" prop="name">
-            <el-input v-model="ruleForm.name" />
+          <el-form-item label="资产编号">
+            <el-input v-model="ruleForm.assetNo" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
-          <el-form-item label="资产编号" prop="name">
-            <el-input v-model="ruleForm.name" />
+          <el-form-item label="资产名称">
+            <el-input v-model="ruleForm.assetName" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="资产名称" prop="name">
-            <el-input v-model="ruleForm.name" />
+          <el-form-item label="资产类型">
+            <el-select
+              v-model="ruleForm.assetType"
+              style="width: 100%"
+              placeholder="请选择资产类型"
+            >
+              <el-option
+                v-for="item in typeList2"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              />
+            </el-select>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
-          <el-form-item label="资产类型" prop="name">
-            <el-input v-model="ruleForm.name" />
+          <el-form-item label="资产型号">
+            <el-input v-model="ruleForm.assetModel" />
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="资产型号" prop="name">
-            <el-input v-model="ruleForm.name" />
+          <el-form-item label="资产序列号">
+            <el-input v-model="ruleForm.assetSequence" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20">
         <el-col :span="12">
-          <el-form-item label="资产序列号" prop="name">
-            <el-input v-model="ruleForm.name" />
+          <el-form-item label="保管人">
+            <UserOrgTree
+              v-model="ruleForm.custodian"
+              @node-click="nodeClickHandle"
+              :all="true"
+              placeholder="请选择人员"
+            />
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="保管人" prop="name">
-            <el-input v-model="ruleForm.name" />
+          <el-form-item label="金额">
+            <el-input v-model="ruleForm.amount" />
           </el-form-item>
         </el-col>
       </el-row>
-      <el-row :gutter="20">
-        <el-col :span="12">
-          <el-form-item label="金额" prop="name">
-            <el-input v-model="ruleForm.name" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="状态" prop="name">
-            <el-input v-model="ruleForm.name" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-form-item label="备注" prop="desc">
-        <el-input v-model="ruleForm.desc" type="textarea" />
+      <el-form-item label="备注">
+        <el-input v-model="ruleForm.bz1" type="textarea" />
       </el-form-item>
     </el-form>
     <template #footer>
@@ -281,6 +306,7 @@ import request from '@/config/axios'
 import * as DeptApi from '@/api/system/dept'
 import { defaultProps, handleTree } from '@/utils/tree'
 import { arrFlatten } from '../../attendanceCenter/attendAuth'
+import { openFlow } from '@/utils/flow'
 import UserForm from './UserForm.vue'
 import UserOrgTree from '@/views/OaSystem/components/UserOrgTree/index.vue'
 
@@ -348,6 +374,24 @@ const typeList: any = ref([
     value: '行政办公设备'
   }
 ])
+const typeList2 = [
+  {
+    label: '计算机设备',
+    value: '计算机设备'
+  },
+  {
+    label: '机器设备',
+    value: '机器设备'
+  },
+  {
+    label: '办公家具',
+    value: '办公家具'
+  },
+  {
+    label: '行政办公设备',
+    value: '行政办公设备'
+  }
+]
 const handleCurrentChange = (pageNo: number) => {
   qrs.pageNo = pageNo
   queryProjectListAjax()
@@ -388,19 +432,68 @@ const queryProjectListAjax = async () => {
 }
 
 queryProjectListAjax()
+const keydonwHandle = (evt) => {
+  console.log(evt)
+  if (evt.keyCode === 13) {
+    queryProjectListAjax()
+    console.log(evt)
+  }
+}
 /**
  * 固定资产投资新增、编辑
  */
-const title = ref<string>('添加固定资产')
-interface IFormType {}
+const title = ref<string>('编辑固定资产')
+interface IFormType {
+  procureTime: string
+  assetNo: string
+  assetName: string
+  assetType: string
+  assetModel: string
+  assetSequence: string
+  custodian: string
+  custodianName: string
+  amount: string
+  bz1: string
+}
 const ruleForm = ref<IFormType>({
-  name: ''
+  procureTime: '',
+  assetNo: '',
+  assetName: '',
+  assetType: '',
+  assetModel: '',
+  assetSequence: '',
+  custodian: '',
+  custodianName: '',
+  amount: '',
+  bz1: ''
 })
+const nodeClickHandle = (node) => {
+  ruleForm.value.custodianName = node['label']
+}
 const dialogVisible = ref<boolean>(false)
-const addOrEditDialogHandle = () => {
+const addOrEditDialogHandle = (row) => {
   dialogVisible.value = true
+  ruleForm.value = row
+}
+
+const queryAssetProcure = async () => {
+  const urlApi = `/AssetProcure/process`
+  const result = await request.get({ url: urlApi }, '/business')
+  openFlow(router, result, '固定资产录入')
+}
+
+const message = useMessage() // 消息弹窗
+const onSaveHandle = async () => {
+  try {
+    const urlApi = `/AssetProcure/updateDetail`
+    const result = await request.post({ url: urlApi, data: ruleForm.value }, '/business')
+    console.log('result---------------')
+    console.log(result)
+    message.success('变更成功')
+  } finally {
+    dialogVisible.value = false
+  }
 }
-const onSaveHandle = () => {}
 /**
  * 获取行政区tree结构数据
  */

+ 630 - 0
client/src/views/OaSystem/personnelManagement/ygdaPage/index copy.ts

@@ -0,0 +1,630 @@
+import { getDictOptions } from '@/utils/dict'
+import { cloneDeep } from 'lodash-es'
+export const getDictList = () => {
+  const dictOptionsObj: any = {}
+  // 性别
+  const sex = getDictOptions('sex_type')
+  // 状态
+  const state = getDictOptions('staff_state_type')
+  // 在岗职位
+  const drzw = getDictOptions('post_type')
+  // 民族
+  const nation = getDictOptions('nation_type')
+  // 婚姻情况
+  const hyzk = getDictOptions('hy_type')
+  // 户口性质
+  const hkxz = getDictOptions('hk_type')
+  // 政治面貌
+  const zzmm = getDictOptions('polity_type')
+  // 能力等级
+  const nldj = getDictOptions('ABILITY_LEVEL')
+  // 最高学历
+  const zgxl = getDictOptions('xl_type')
+  // 紧急联系人关系
+  const jjlxrgx = getDictOptions('contact_type')
+  //家庭成员关系
+  const jtcygx = getDictOptions('family_type')
+
+  dictOptionsObj.sex = sex
+  dictOptionsObj.state = state
+  dictOptionsObj.drzw = drzw
+  dictOptionsObj.nation = nation
+  dictOptionsObj.hyzk = hyzk
+  dictOptionsObj.hkxz = hkxz
+  dictOptionsObj.zzmm = zzmm
+  dictOptionsObj.nldj = nldj
+  dictOptionsObj.zgxl = zgxl
+  dictOptionsObj.jjlxrgx = jjlxrgx
+  dictOptionsObj.jtcygx = jtcygx
+  return dictOptionsObj
+}
+
+export const formConfigList = [
+  {
+    title: '基本信息',
+    children: [
+      {
+        name: 'nickname',
+        title: '员工名称'
+      },
+      {
+        name: 'sex',
+        title: '性别',
+        type: 'select',
+        options: [
+          {
+            value: 0,
+            label: '女'
+          },
+          {
+            value: 1,
+            label: '男'
+          }
+        ]
+      },
+      {
+        name: 'mobilePhone',
+        title: '手机'
+      },
+      {
+        name: 'state',
+        title: '状态',
+        type: 'select',
+        options: [
+          {
+            value: 1,
+            label: '实习'
+          },
+          {
+            value: 2,
+            label: '试用'
+          },
+          {
+            value: 3,
+            label: '正式'
+          },
+          {
+            value: 4,
+            label: '离职'
+          }
+        ]
+      },
+      {
+        name: 'drzw',
+        title: '在岗职位',
+        type: 'select',
+        options: [
+          {
+            value: '1',
+            label: 'JAVA工程师'
+          },
+          {
+            value: '2',
+            label: '前端工程师'
+          }
+        ]
+      },
+      {
+        name: 'nation',
+        title: '民族',
+        type: 'select',
+        options: [
+          {
+            value: '1',
+            label: '汉族'
+          },
+          {
+            value: '2',
+            label: '其他'
+          }
+        ]
+      },
+      {
+        name: 'loginName',
+        title: '员工工号',
+        type: 'button'
+      },
+      {
+        name: 'deptName',
+        title: '所属部门',
+        type: 'dept-select'
+      },
+      {
+        name: 'qdgs',
+        title: '签订公司'
+      },
+      {
+        name: 'birthday',
+        title: '出生日期',
+        type: 'time'
+      },
+
+      {
+        name: 'hyzk',
+        title: '婚姻状况',
+        type: 'select',
+        options: [
+          {
+            value: 1,
+            label: '已婚'
+          },
+          {
+            value: 2,
+            label: '未婚'
+          }
+        ]
+      },
+      {
+        name: 'hkxz',
+        title: '户口性质',
+        type: 'select',
+        options: [
+          {
+            value: 1,
+            label: '城镇'
+          },
+          {
+            value: 2,
+            label: '农村'
+          }
+        ]
+      },
+      {
+        name: 'zzmm',
+        title: '政治面貌',
+        type: 'select',
+        options: [
+          {
+            value: 1,
+            label: '群众'
+          },
+          {
+            value: 2,
+            label: '团员'
+          },
+          {
+            value: 3,
+            label: '党员'
+          }
+        ]
+      },
+      {
+        name: 'xjzdz',
+        title: '现居住地址'
+      },
+      {
+        name: 'hkszd',
+        title: '户口所在地'
+      },
+      {
+        name: 'rgssj',
+        title: '入职时间',
+        type: 'time'
+      },
+      {
+        name: 'cjgzsj',
+        title: '参加工作时间',
+        type: 'time'
+      },
+      {
+        name: 'nldj',
+        title: '能力等级',
+        type: 'select',
+        options: [
+          {
+            value: '1',
+            label: 'L1'
+          },
+          {
+            value: '2',
+            label: 'L2'
+          },
+          {
+            value: '3',
+            label: 'L3'
+          },
+          {
+            value: '4',
+            label: 'L4'
+          },
+          {
+            value: '5',
+            label: 'L5'
+          },
+          {
+            value: '6',
+            label: 'L6'
+          },
+          {
+            value: '7',
+            label: 'L7'
+          },
+          {
+            value: '8',
+            label: 'L8'
+          },
+          {
+            value: '9',
+            label: 'L9'
+          },
+          {
+            value: '10',
+            label: 'L10'
+          }
+        ]
+      },
+      {
+        name: 'htqdsj',
+        title: '合同签订时间',
+        type: 'time'
+      },
+      {
+        name: 'htdqs',
+        title: '合同到期时间',
+        type: 'time'
+      },
+      {
+        name: 'xqah',
+        title: '兴趣爱好'
+      },
+      {
+        name: 'jntc',
+        title: '技能特长'
+      },
+      {
+        name: 'cgjl',
+        title: '成果奖励'
+      }
+    ]
+  },
+  {
+    title: '工资卡信息',
+    children: [
+      {
+        name: 'khyh',
+        title: '开户行'
+      },
+      {
+        name: 'yhzh',
+        title: '银行卡号'
+      }
+    ]
+  },
+  // {
+  //   title: '教育信息',
+  //   children: [
+  //     {
+  //       name: 'byxx',
+  //       title: '毕业院校'
+  //     },
+  //     {
+  //       name: 'bysj',
+  //       title: '毕业时间',
+  //       type: 'time'
+  //     },
+  //     {
+  //       name: 'zgxl',
+  //       title: '最高学历',
+  //       type: 'select',
+  //       options: [
+  //         {
+  //           value: 1,
+  //           label: '高中'
+  //         },
+  //         {
+  //           value: 2,
+  //           label: '中专'
+  //         },
+  //         {
+  //           value: 3,
+  //           label: '大专'
+  //         },
+  //         {
+  //           value: 4,
+  //           label: '本科'
+  //         },
+  //         {
+  //           value: 5,
+  //           label: '硕士'
+  //         },
+  //         {
+  //           value: 6,
+  //           label: '博士'
+  //         }
+  //       ]
+  //     },
+  //     {
+  //       name: 'major',
+  //       title: '专业'
+  //     }
+  //   ]
+  // },
+  {
+    title: '紧急联系人信息',
+    children: [
+      {
+        name: 'jjlxrxm',
+        title: '紧急联系人姓名'
+      },
+      {
+        name: 'jjlxrhm',
+        title: '紧急联系人电话'
+      },
+      {
+        name: 'jjlxrgx',
+        title: '紧急联系人关系',
+        type: 'select',
+        options: []
+      }
+    ]
+  }
+]
+
+export const getConfigDict = () => {
+  const dictList = getDictList()
+  const configList = cloneDeep(formConfigList)
+  // const numberType = ['sex', 'state', 'hyzk', 'hkxz', 'zzmm', 'zgxl', 'jjlxrgx']
+  configList.forEach((item) => {
+    item.children.forEach((child: any) => {
+      if (child.type == 'select' && dictList[child.name]) {
+        const options = dictList[child.name].map((item) => {
+          return {
+            label: item.label,
+            // value: numberType.includes(child.name) ? Number(item.value) : item.value
+            value: item.value
+          }
+        })
+        child.options = options
+      }
+    })
+  })
+
+  return configList
+}
+
+export const formRules = {
+  nickname: [{ required: true, message: '名称不能为空', trigger: 'blur' }]
+}
+
+// 表格
+export const tableColumnConfig = [
+  {
+    name: 'deptName',
+    title: '所属部门'
+  },
+
+  {
+    name: 'state',
+    title: '状态',
+    type: 'select',
+    options: [
+      {
+        value: 1,
+        label: '实习'
+      },
+      {
+        value: 2,
+        label: '试用'
+      },
+      {
+        value: 3,
+        label: '正式'
+      },
+      {
+        value: 4,
+        label: '离职'
+      }
+    ]
+  },
+  {
+    name: 'zzmm',
+    title: '政治面貌',
+    type: 'select',
+    options: [
+      {
+        value: 1,
+        label: '群众'
+      },
+      {
+        value: 2,
+        label: '团员'
+      },
+      {
+        value: 3,
+        label: '党员'
+      }
+    ]
+  },
+  {
+    name: 'hkxz',
+    title: '户口性质',
+    type: 'select',
+    options: [
+      {
+        value: 1,
+        label: '城镇'
+      },
+      {
+        value: 2,
+        label: '农村'
+      }
+    ]
+  },
+  {
+    name: 'byxx',
+    title: '毕业院校'
+  },
+  {
+    name: 'bysj',
+    title: '毕业时间',
+    type: 'time'
+  },
+  {
+    name: 'zgxl',
+    title: '最高学历',
+    type: 'select',
+    options: [
+      {
+        value: 1,
+        label: '高中'
+      },
+      {
+        value: 2,
+        label: '中专'
+      },
+      {
+        value: 3,
+        label: '大专'
+      },
+      {
+        value: 4,
+        label: '本科'
+      },
+      {
+        value: 5,
+        label: '硕士'
+      },
+      {
+        value: 6,
+        label: '博士'
+      }
+    ]
+  },
+  {
+    name: 'major',
+    title: '专业'
+  },
+
+  {
+    name: 'cjgzsj',
+    title: '参加工作时间',
+    type: 'time'
+  },
+  {
+    name: 'rgssj',
+    title: '入职时间',
+    type: 'time'
+  },
+  {
+    name: 'htdqs',
+    title: '合同到期时间',
+    type: 'time'
+  },
+  {
+    name: 'zzsj',
+    title: '转正时间',
+    type: 'time'
+  }
+]
+//搜索
+export const searchConfig = [
+  {
+    name: 'nickname',
+    title: '员工名称'
+  },
+  // {
+  //   name: 'loginName',
+  //   title: '员工工号'
+  // },
+  {
+    name: 'deptName',
+    title: '所属部门',
+    type: 'dept-select'
+  },
+  {
+    name: 'state',
+    title: '状态',
+    type: 'select',
+    options: [
+      {
+        value: 1,
+        label: '实习'
+      },
+      {
+        value: 2,
+        label: '试用'
+      },
+      {
+        value: 3,
+        label: '正式'
+      },
+      {
+        value: 4,
+        label: '离职'
+      }
+    ]
+  },
+  {
+    name: 'zzmm',
+    title: '政治面貌',
+    type: 'select',
+    options: [
+      {
+        value: 1,
+        label: '群众'
+      },
+      {
+        value: 2,
+        label: '团员'
+      },
+      {
+        value: 3,
+        label: '党员'
+      }
+    ]
+  },
+  {
+    name: 'major',
+    title: '专业'
+  },
+
+  {
+    name: 'zgxl',
+    title: '最高学历',
+    type: 'select',
+    options: [
+      {
+        value: 1,
+        label: '高中'
+      },
+      {
+        value: 2,
+        label: '中专'
+      },
+      {
+        value: 3,
+        label: '大专'
+      },
+      {
+        value: 4,
+        label: '本科'
+      },
+      {
+        value: 5,
+        label: '硕士'
+      },
+      {
+        value: 6,
+        label: '博士'
+      }
+    ]
+  }
+]
+
+export const getTableConfigDict = (dataSource) => {
+  const dictList = getDictList()
+  const configList = cloneDeep(dataSource)
+  const numberType = ['sex', 'state', 'hyzk', 'hkxz', 'zzmm', 'zgxl', 'jjlxrgx']
+  configList.forEach((item) => {
+    if (item.type == 'select' && dictList[item.name]) {
+      const options = dictList[item.name].map((item) => {
+        return {
+          label: item.label,
+          value: numberType.includes(item.name) ? Number(item.value) : item.value
+        }
+      })
+      item.options = options
+    }
+  })
+  return configList
+}

+ 105 - 80
client/src/views/OaSystem/personnelManagement/ygdaPage/index.ts

@@ -43,10 +43,6 @@ export const formConfigList = [
   {
     title: '基本信息',
     children: [
-      {
-        name: 'nickname',
-        title: '员工名称'
-      },
       {
         name: 'sex',
         title: '性别',
@@ -67,78 +63,48 @@ export const formConfigList = [
         title: '手机'
       },
       {
-        name: 'state',
-        title: '状态',
-        type: 'select',
-        options: [
-          {
-            value: 1,
-            label: '实习'
-          },
-          {
-            value: 2,
-            label: '试用'
-          },
-          {
-            value: 3,
-            label: '正式'
-          },
-          {
-            value: 4,
-            label: '离职'
-          }
-        ]
+        name: 'birthday',
+        title: '出生日期',
+        type: 'time'
       },
       {
-        name: 'drzw',
-        title: '在岗职位',
+        name: 'nation',
+        title: '民族',
         type: 'select',
         options: [
           {
             value: '1',
-            label: 'JAVA工程师'
+            label: '汉族'
           },
           {
             value: '2',
-            label: '前端工程师'
+            label: '其他'
           }
         ]
       },
       {
-        name: 'nation',
-        title: '民族',
+        name: 'jg',
+        title: '籍贯'
+      },
+      {
+        name: 'zzmm',
+        title: '政治面貌',
         type: 'select',
         options: [
           {
-            value: '1',
-            label: '汉族'
+            value: 1,
+            label: '群众'
           },
           {
-            value: '2',
-            label: '其他'
+            value: 2,
+            label: '团员'
+          },
+          {
+            value: 3,
+            label: '党员'
           }
         ]
       },
-      {
-        name: 'loginName',
-        title: '员工工号',
-        type: 'button'
-      },
-      {
-        name: 'deptName',
-        title: '所属部门',
-        type: 'dept-select'
-      },
-      {
-        name: 'qdgs',
-        title: '签订公司'
-      },
-      {
-        name: 'birthday',
-        title: '出生日期',
-        type: 'time'
-      },
-
       {
         name: 'hyzk',
         title: '婚姻状况',
@@ -154,6 +120,21 @@ export const formConfigList = [
           }
         ]
       },
+      {
+        name: 'jkzk',
+        title: '健康状况',
+        type: 'select',
+        options: []
+      },
+      {
+        name: 'cjgzsj',
+        title: '参加工作时间',
+        type: 'time'
+      },
+      {
+        name: 'xjzdz',
+        title: '现居住地址'
+      },
       {
         name: 'hkxz',
         title: '户口性质',
@@ -170,41 +151,72 @@ export const formConfigList = [
         ]
       },
       {
-        name: 'zzmm',
-        title: '政治面貌',
+        name: 'hkszd',
+        title: '户口所在地'
+      },
+      {
+        name: 'xqah',
+        title: '兴趣爱好'
+      },
+      {
+        name: 'jntc',
+        title: '技能特长'
+      },
+      {
+        name: 'cgjl',
+        title: '成果奖励'
+      }
+    ]
+  },
+  {
+    title: '公司信息',
+    children: [
+      {
+        name: 'state',
+        title: '状态',
         type: 'select',
         options: [
           {
             value: 1,
-            label: '群众'
+            label: '实习'
           },
           {
             value: 2,
-            label: '团员'
+            label: '试用'
           },
           {
             value: 3,
-            label: '党员'
+            label: '正式'
+          },
+          {
+            value: 4,
+            label: '离职'
           }
         ]
       },
       {
-        name: 'xjzdz',
-        title: '现居住地址'
-      },
-      {
-        name: 'hkszd',
-        title: '户口所在地'
+        name: 'loginName',
+        title: '员工工号',
+        type: 'button'
       },
       {
-        name: 'rgssj',
-        title: '入职时间',
-        type: 'time'
+        name: 'qdgs',
+        title: '签订公司'
       },
       {
-        name: 'cjgzsj',
-        title: '参加工作时间',
-        type: 'time'
+        name: 'drzw',
+        title: '在岗职位',
+        type: 'select',
+        options: [
+          {
+            value: '1',
+            label: 'JAVA工程师'
+          },
+          {
+            value: '2',
+            label: '前端工程师'
+          }
+        ]
       },
       {
         name: 'nldj',
@@ -253,6 +265,21 @@ export const formConfigList = [
           }
         ]
       },
+      {
+        name: 'cjgzsj',
+        title: '初次入职时间',
+        type: 'time'
+      },
+      {
+        name: 'rgssj',
+        title: '万维空间入职时间',
+        type: 'time'
+      },
+      {
+        name: 'zzsj',
+        title: '拟转正时间',
+        type: 'time'
+      },
       {
         name: 'htqdsj',
         title: '合同签订时间',
@@ -264,16 +291,14 @@ export const formConfigList = [
         type: 'time'
       },
       {
-        name: 'xqah',
-        title: '兴趣爱好'
-      },
-      {
-        name: 'jntc',
-        title: '技能特长'
+        name: 'htdqs',
+        title: '续签次数',
+        type: 'time'
       },
       {
-        name: 'cgjl',
-        title: '成果奖励'
+        name: 'htdqs',
+        title: '司龄',
+        type: 'time'
       }
     ]
   },

+ 4 - 2
client/src/views/OaSystem/personnelManagement/ygdaPage/index.vue

@@ -112,6 +112,7 @@ import { getTableConfigDict, tableColumnConfig, searchConfig } from './index'
 // import DeptSelect from '@/components/DeptSelect/index.vue'
 import TableLayout from '../../oaViews/layout/TableLayout.vue'
 import DeptTree from '@/views/OaSystem/components/DeptTree/index.vue'
+import download from '@/utils/download'
 
 const tableColumnConfigList = getTableConfigDict(tableColumnConfig)
 const searchConfigList = getTableConfigDict(searchConfig)
@@ -172,8 +173,9 @@ const deptOnChange = (id) => {
   console.log(id)
   queryParams.deptId = id
 }
-const exportHandle = () => {
-  '/adm/staff-records/excel'
+const exportHandle = async () => {
+  const result = await StaffRecordsApi.excelStaffRecord(queryParams)
+  download.excel(result, '员工档案.xls')
 }
 /** 初始化 */
 onMounted(() => {

+ 216 - 4
client/src/views/OaSystem/personnelManagement/ygdaPage/staffDetail.vue

@@ -161,14 +161,146 @@ const savePerformanceList = (data: any[]) => {
       :class="isEdit ? 'my-portrait' : 'my-portrait form-unable-edit'"
     >
       <el-form ref="formRef" :model="formData" label-width="150px" :disabled="!isEdit">
-        <div class="my-portrait-item" v-for="(item, index) in formConfigList" :key="index">
+        <div class="my-portrait-item-first">
+          <div class="user-card">
+            <el-image
+              class="staff-avator"
+              :src="avatar"
+              :zoom-rate="1.2"
+              :max-scale="7"
+              :min-scale="0.2"
+              @click="imagePreview(avatar)"
+              :initial-index="0"
+            />
+          </div>
+          <div class="my-portrait-card">
+            <div class="user-base-info">
+              <h4>{{ formData?.['nickname'] }}</h4>
+              <span>{{ formData?.['deptName'] }}</span>
+            </div>
+            <ul>
+              <li v-for="(child, c) in formConfigList[0].children" :key="c">
+                <el-form-item :label="`${child.title}:`" :prop="child.name" label-width="auto">
+                  <el-date-picker
+                    v-if="child.type === 'time'"
+                    v-model="formData[child?.name]"
+                    style="width: 100%"
+                    :placeholder="isEdit ? child.title : ''"
+                    type="date"
+                    format="YYYY-MM-DD"
+                    value-format="x"
+                  />
+
+                  <DeptSelect
+                    v-if="child.type === 'dept-select'"
+                    v-model="formData['deptId']"
+                    :defaultValue="formData['deptId'] ?? ''"
+                  />
+
+                  <el-select
+                    v-if="child.type === 'select'"
+                    v-model="formData[child?.name]"
+                    style="width: 100%"
+                    :placeholder="isEdit ? child.title : '-'"
+                  >
+                    <el-option
+                      v-for="opt in child.options"
+                      :key="opt.value"
+                      :label="opt.label"
+                      :value="opt.value"
+                    />
+                  </el-select>
+
+                  <el-input
+                    v-if="child?.type === undefined"
+                    v-model="formData[child?.name]"
+                    placeholder=""
+                  />
+                  <div v-if="child?.type === 'button'" class="generate-num">
+                    <el-input v-model="formData[child?.name]" placeholder="" :disabled="true" />
+                    <ElButton
+                      v-if="isEdit"
+                      type="primary"
+                      style="width: 70px; height: 30px; margin-left: 10px"
+                      @click="generateStaffNumber()"
+                      >生成工号</ElButton
+                    >
+                  </div>
+                </el-form-item>
+              </li>
+              <li></li>
+            </ul>
+          </div>
+        </div>
+
+        <div class="my-portrait-item">
+          <div class="title">
+            <i></i>
+            <span>公司信息</span>
+          </div>
+          <div class="my-portrait-card">
+            <ul>
+              <li v-for="(child, c) in formConfigList[1].children" :key="c">
+                <el-form-item :label="`${child.title}:`" :prop="child.name">
+                  <el-date-picker
+                    v-if="child.type === 'time'"
+                    v-model="formData[child?.name]"
+                    style="width: 100%"
+                    :placeholder="isEdit ? child.title : ''"
+                    type="date"
+                    format="YYYY-MM-DD"
+                    value-format="x"
+                  />
+
+                  <DeptSelect
+                    v-if="child.type === 'dept-select'"
+                    v-model="formData['deptId']"
+                    :defaultValue="formData['deptId'] ?? ''"
+                  />
+
+                  <el-select
+                    v-if="child.type === 'select'"
+                    v-model="formData[child?.name]"
+                    style="width: 100%"
+                    :placeholder="isEdit ? child.title : '-'"
+                  >
+                    <el-option
+                      v-for="opt in child.options"
+                      :key="opt.value"
+                      :label="opt.label"
+                      :value="opt.value"
+                    />
+                  </el-select>
+
+                  <el-input
+                    v-if="child?.type === undefined"
+                    v-model="formData[child?.name]"
+                    placeholder=""
+                  />
+                  <div v-if="child?.type === 'button'" class="generate-num">
+                    <el-input v-model="formData[child?.name]" placeholder="" :disabled="true" />
+                    <ElButton
+                      v-if="isEdit"
+                      type="primary"
+                      style="width: 70px; height: 30px; margin-left: 10px"
+                      @click="generateStaffNumber()"
+                      >生成工号</ElButton
+                    >
+                  </div>
+                </el-form-item>
+              </li>
+              <li></li>
+            </ul>
+          </div>
+        </div>
+        <div class="my-portrait-item">
           <div class="title">
             <i></i>
-            <span>{{ item.title }}</span>
+            <span>工资卡信息</span>
           </div>
           <div class="my-portrait-card">
             <ul>
-              <li v-for="(child, c) in item.children" :key="c">
+              <li v-for="(child, c) in formConfigList[2].children" :key="c">
                 <el-form-item :label="`${child.title}:`" :prop="child.name">
                   <el-date-picker
                     v-if="child.type === 'time'"
@@ -221,6 +353,56 @@ const savePerformanceList = (data: any[]) => {
             </ul>
           </div>
         </div>
+        <div class="my-portrait-item">
+          <div class="title">
+            <i></i>
+            <span>紧急联系人信息</span>
+          </div>
+          <div class="my-portrait-card">
+            <ul>
+              <li v-for="(child, c) in formConfigList[3].children" :key="c">
+                <el-form-item :label="`${child.title}:`" :prop="child.name">
+                  <el-date-picker
+                    v-if="child.type === 'time'"
+                    v-model="formData[child?.name]"
+                    style="width: 100%"
+                    :placeholder="isEdit ? child.title : ''"
+                    type="date"
+                    format="YYYY-MM-DD"
+                    value-format="x"
+                  />
+
+                  <DeptSelect
+                    v-if="child.type === 'dept-select'"
+                    v-model="formData['deptId']"
+                    :defaultValue="formData['deptId'] ?? ''"
+                  />
+
+                  <el-select
+                    v-if="child.type === 'select'"
+                    v-model="formData[child?.name]"
+                    style="width: 100%"
+                    :placeholder="isEdit ? child.title : '-'"
+                  >
+                    <el-option
+                      v-for="opt in child.options"
+                      :key="opt.value"
+                      :label="opt.label"
+                      :value="opt.value"
+                    />
+                  </el-select>
+
+                  <el-input
+                    v-if="child?.type === undefined"
+                    v-model="formData[child?.name]"
+                    placeholder=""
+                  />
+                </el-form-item>
+              </li>
+              <li></li>
+            </ul>
+          </div>
+        </div>
 
         <div class="my-portrait-item">
           <WorkTable
@@ -297,7 +479,6 @@ const savePerformanceList = (data: any[]) => {
     height: calc(100% - 40px);
     padding: 0 0 10px;
     overflow: auto;
-
     .my-portrait-item {
       margin-bottom: 20px;
       width: 100%;
@@ -335,6 +516,37 @@ const savePerformanceList = (data: any[]) => {
         }
       }
     }
+    .my-portrait-item-first {
+      display: flex;
+      > .user-card {
+        width: 160px;
+        margin-right: 20px;
+      }
+      > .my-portrait-card {
+        flex: 1;
+        > .user-base-info {
+          display: flex;
+          align-items: center;
+          margin-bottom: 10px;
+          > h4 {
+            font-size: 22px;
+            color: #111518;
+            margin-right: 10px;
+          }
+          > span {
+            color: #777c80;
+          }
+        }
+        > ul {
+          > li {
+            display: inline-block;
+            width: calc(25% - 50px);
+            text-align: left;
+            margin-right: 50px;
+          }
+        }
+      }
+    }
   }
 
   .form-unable-edit {

+ 7 - 9
client/src/views/OaSystem/projectCenter/projectTrack/index.vue

@@ -11,7 +11,7 @@
       </div>
       <div class="form">
         <span class="formSpan">跟踪人员:</span>
-        <UserOrgTree v-model="queryParams['gzryId']" :all="true" placeholder="请选择项目经理" />
+        <UserOrgTree v-model="queryParams['gzryId']" placeholder="请选择项目经理" />
       </div>
       <div class="from">
         <div class="btnBox">
@@ -125,7 +125,6 @@
             <el-form-item label="跟踪人员" prop="region">
               <UserOrgTree
                 v-model="formData.gzryId"
-                :all="true"
                 placeholder="请选择跟踪人员"
                 @node-click="(item) => treeNodeClick(item, 'gzry')"
               />
@@ -182,11 +181,7 @@
           </el-col>
           <el-col :span="12">
             <el-form-item label="谁可见" prop="region">
-              <UserOrgTree
-                v-model="formData.visibleUserIds"
-                :all="true"
-                placeholder="请选择跟谁可见"
-              />
+              <UserOrgTree v-model="visibleUserIds" :multiple="true" placeholder="请选择跟谁可见" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -219,6 +214,7 @@ const ztMap = {
   '1': '待上会',
   '2': '待招标'
 }
+const visibleUserIds = ref<string[]>([])
 const tableRef: any = ref(null)
 const tableHeight: any = ref(0)
 const { queryParams, formData, initFormData } = useMixins()
@@ -235,12 +231,14 @@ const dialogVisible = ref<boolean>(false)
 const addOrEditHandle = (row?: IFormType) => {
   dialogVisible.value = true
   if (!row) {
-    initFormData()
     dialogTitle.value = '项目跟踪填报'
+    initFormData()
+    visibleUserIds.value = []
   } else {
     dialogTitle.value = '项目跟踪编辑'
     queryProjectTrackByDetail(row['id']).then((result) => {
       initFormData(result as any)
+      visibleUserIds.value = result['visibleUserIds'].split(',')
     })
   }
 }
@@ -253,6 +251,7 @@ const saveProjectTracking = async (): Promise<void> => {
   const sendData = {
     ...formData.value
   }
+  sendData['visibleUserIds'] = visibleUserIds.value.join(',')
   const result = await request.post({ url: urlApi, data: sendData }, '/business')
   if (result) {
     searchHandle()
@@ -260,7 +259,6 @@ const saveProjectTracking = async (): Promise<void> => {
   }
 }
 const switchChange = (item) => {
-  console.log(item.status)
   updateStatus({
     id: item['id'],
     status: item['status']