Browse Source

fix: web端小问题修改

qiny 11 months ago
parent
commit
818352f2d9

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

@@ -3,7 +3,7 @@ import { cloneDeep } from 'lodash-es'
 export const getDictList = () => {
   const dictOptionsObj: any = {}
   // 性别
-  // const sex = getDictOptions('system_user_sex')
+  const sex = getDictOptions('system_user_sex')
   // 状态
   const state = getDictOptions('staff_state_type')
   // 在岗职位
@@ -23,7 +23,7 @@ export const getDictList = () => {
   // 紧急联系人关系
   const jjlxrgx = getDictOptions('contact_type')
 
-  // dictOptionsObj.sex = sex
+  dictOptionsObj.sex = sex
   dictOptionsObj.state = state
   dictOptionsObj.drzw = drzw
   dictOptionsObj.nation = nation

+ 192 - 0
client/src/views/OaSystem/personnelManagement/ygdaPage/performanceTable.vue

@@ -0,0 +1,192 @@
+<template>
+  <div class="casually-name">
+    <div class="star-title">
+      <i></i>
+      <span>绩效考核</span>
+    </div>
+    <el-tag
+      class="add-tag"
+      type="primary"
+      effect="plain"
+      v-if="!tableData.length && !onlyRead"
+      @click="onAddItem(-1)"
+      >+ 新增</el-tag
+    >
+    <el-table
+      class="detail-table"
+      :header-cell-style="{
+        background: '#F2F4F8',
+        color: '#000000'
+      }"
+      :data="tableData"
+      v-else
+    >
+      <el-table-column prop="year" label="年份" width="300">
+        <template #default="scope">
+          <el-date-picker
+            v-model="scope.row.year"
+            type="year"
+            value-format="YYYY"
+            v-if="scope.row.isEdit"
+          />
+          <span v-else>{{ scope.row.year }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="season" label="季度" width="300">
+        <template #default="scope">
+          <el-select v-if="scope.row.isEdit" v-model="scope.row.season" style="width: 100%">
+            <el-option
+              v-for="item in seasonData"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+          <span v-else>{{ scope.row.season }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column prop="detail" label="奖惩情况(嘉奖、处罚)">
+        <template #default="scope">
+          <el-input v-model="scope.row.detail" v-if="scope.row.isEdit" />
+          <span v-else>{{ scope.row.detail }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column fixed="right" label="操作" width="140">
+        <template #default="scope">
+          <el-button
+            link
+            type="primary"
+            size="small"
+            @click="onSaveItem(scope.$index)"
+            v-if="scope.row.isEdit"
+          >
+            保存
+          </el-button>
+          <el-button link type="primary" size="small" @click="onEditItem(scope.$index)" v-else>
+            编辑
+          </el-button>
+          <el-button link type="primary" size="small" @click="deleteRow(scope.$index)">
+            删除
+          </el-button>
+          <el-button link type="primary" size="small" @click="onAddItem(scope.$index)">
+            新增
+          </el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+  </div>
+</template>
+<script lang="ts" setup>
+/**
+ * @description 绩效考核
+ */
+
+import { cloneDeep } from 'lodash-es'
+
+interface ITable {
+  id?: string
+  userId?: string
+  year?: string // 年份
+  season?: string // 季度
+  detail?: string // 奖惩情况
+  isEdit?: boolean // 是否可编辑
+}
+const tableData = ref<ITable[]>([])
+
+const $emit = defineEmits<{
+  (e: 'onSave', v: any): void
+}>()
+
+interface IProps {
+  defaultData: any[]
+  onlyRead?: boolean
+}
+const props = defineProps<IProps>()
+const { defaultData, onlyRead } = props
+onMounted(() => {
+  if (defaultData && defaultData.length) {
+    tableData.value = defaultData.map((item: any) => {
+      return {
+        ...item,
+        isEdit: false
+      }
+    })
+  }
+})
+
+const seasonData = [
+  { label: '第一季度', value: '第一季度' },
+  { label: '第二季度', value: '第二季度' },
+  { label: '第三季度', value: '第三季度' },
+  { label: '第四季度', value: '第四季度' }
+]
+
+// 新增行
+const onAddItem = (index: number) => {
+  tableData.value.splice(index + 1, 0, {
+    year: '',
+    season: '',
+    detail: '',
+    isEdit: true
+  })
+}
+
+// 保存行
+const onSaveItem = (index: number) => {
+  tableData.value.forEach((item: any, num: number) => {
+    if (num == index) {
+      item.isEdit = false
+    }
+  })
+  const changeData = cloneDeep(tableData.value).map((item: any) => {
+    delete item.isEdit
+    return item
+  })
+  $emit('onSave', changeData)
+}
+
+// 编辑行
+const onEditItem = (index: number) => {
+  tableData.value[index].isEdit = true
+}
+
+// 删除
+const deleteRow = (index: number) => {
+  tableData.value.splice(index, 1)
+}
+</script>
+<style scoped lang="scss">
+.casually-name {
+  position: relative;
+}
+.star-title {
+  display: flex;
+  align-items: center;
+  margin-bottom: 8px;
+
+  i {
+    display: block;
+    width: 16px;
+    height: 16px;
+    margin-right: 9px;
+    background: url('../../../../assets/imgs/OA/mine/star.png') center no-repeat;
+    background-size: 100%;
+  }
+
+  span {
+    font-size: 18px;
+    font-weight: bold;
+    color: #000000;
+  }
+}
+.add-tag {
+  position: absolute;
+  top: 2px;
+  left: 120px;
+  cursor: pointer;
+}
+.detail-table {
+  width: 100%;
+  min-height: 100px;
+}
+</style>

+ 13 - 1
client/src/views/OaSystem/personnelManagement/ygdaPage/staffDetail.vue

@@ -9,6 +9,7 @@ import { useQuery, useMutation } from '@tanstack/vue-query'
 import { getRecordsDetail, editRecordsDetail, generateStaffNum } from '@/api/oa/staffRecords'
 import { getConfigDict } from './index'
 import { ElRow, FormInstance } from 'element-plus'
+import moment from 'moment'
 // import TechCertificate from './TechCertificate.vue'
 import avatarImg from '@/assets/imgs/avatar.jpg'
 import DeptSelect from '@/components/DeptSelect/index.vue'
@@ -16,7 +17,7 @@ import { createImageViewer } from '@/components/ImageViewer'
 import WorkTable from './WorkTable.vue'
 import FamilyTable from './familyTable.vue'
 import SchoolTable from './SchoolTable.vue'
-import moment from 'moment'
+import PerformanceTable from './performanceTable.vue'
 
 const formConfigList = getConfigDict()
 
@@ -139,6 +140,11 @@ const saveSchoolList = (data: any[]) => {
   // console.log('data', data)
   formData.value['schoolList'] = data
 }
+// 修改并保存绩效考核记录
+const savePerformanceList = (data: any[]) => {
+  // console.log('data', data)
+  formData.value['performanceList'] = data
+}
 </script>
 <template>
   <div class="staff-files-wrap">
@@ -230,6 +236,12 @@ const saveSchoolList = (data: any[]) => {
         <div class="my-portrait-item">
           <SchoolTable :defaultData="formData['schoolList']" @onSave="saveSchoolList" />
         </div>
+        <div class="my-portrait-item">
+          <PerformanceTable
+            :defaultData="formData['performanceList']"
+            @onSave="savePerformanceList"
+          />
+        </div>
         <el-row justify="end">
           <el-form-item v-if="isEdit">
             <el-button color="#1B80EB" type="primary" @click="submitForm(formRef)">保存</el-button>