| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295 | <template>  <m-dialog ref="editDialog" :title="title" v-bind="$attrs" @sure="handleSaveEdit">    <m-form ref="formRef" :items="items" v-model="query" v-loading="loading"></m-form>  </m-dialog></template><script>import { saveRoster } from '@/api/system'import { mapGetters } from 'vuex'import {  getSalaryLevelDict} from '@/api/salary'import {  getJobLevel,  getPositionCategory,  getPersonnelCategory,  getPositionSequence,  getJobName} from '@/api/dictionary'import {  EMPLOYEE_STATUS} from '@/utils/dict'export default {  name: 'roster-edit',  props: {    title: {      type: String,      default: '新增'    }  },  data () {    return {      query: {},      isEdit: false,      loading: false,      dict: {}    }  },  computed: {    ...mapGetters(['organizationTree']),    items () {      return [        {          prop: 'parentOrganizationName',          hidden: true        },        {          prop: 'parentOrganizationNo',          hidden: true        },        {          prop: 'deptName',          hidden: true        },        {          label: '部门名称',          prop: 'organizationNo',          type: 'cascader',          options: {            ref: 'organizationNo',            filterable: true,            clearable: true,            placeholder: '请选择部门',            options: this.organizationTree,            showAllLevels: false,            props: {              emitPath: false,              value: 'organizationNo',              label: 'organizationName',              children: 'child'            }          },          handles: {            change: this.onChange          }        },        {          label: '通行证号',          prop: 'passes',          type: 'input',          options: { disabled: this.isEdit, placeholder: '请输入通行证号' },          rules: [{ required: true, message: '请输入通行证号', trigger: 'blur' }]        },        {          label: '员工名称',          prop: 'employeeName',          type: 'input',          options: { disabled: this.isEdit, placeholder: '请输入员工名称' },          rules: { required: true, message: '请输入员工名称', trigger: 'blur' }        },        {          label: '工行时间',          prop: 'tradeUnionsTime',          type: 'datePicker',          options: { disabled: this.isEdit, placeholder: '请选择工行时间' },          rules: [{ required: true, message: '请选择工行时间', trigger: 'blur' }]        },        {          label: '员工状态',          prop: 'employeeStatus',          type: 'select',          options: {            placeholder: '请选择员工状态',            filterable: true,            items: EMPLOYEE_STATUS.map(e => ({ label: e.text, value: e.value }))          },          rules: { required: true, message: '请输入人员类别', trigger: 'change' }        },        {          label: '人员类别',          prop: 'personnelCategory',          type: 'select',          options: {            disabled: this.isEdit,            placeholder: '请输入人员类别',            filterable: true,            items: this.dict.personnelCategory          },          rules: { required: true, message: '请输入人员类别', trigger: 'change' }        },        {          label: '岗位名称',          prop: 'postName',          type: 'select',          options: {            placeholder: '请输入岗位名称',            filterable: true,            items: this.dict.jobName          },          rules: { required: true, message: '请输入岗位名称', trigger: 'change' }        },        {          label: '岗位序列',          prop: 'positionSequence',          type: 'select',          options: {            placeholder: '请输入岗位序列',            filterable: true,            items: this.dict.positionSequence          },          rules: [{ required: true, message: '请输入岗位序列', trigger: 'change' }]        },        {          label: '岗位类别',          prop: 'positionCategory',          type: 'select',          options: {            placeholder: '请输入岗位类别',            filterable: true,            items: this.dict.positionCategory          },          rules: [{ required: true, message: '请输入岗位类别', trigger: 'change' }]        },        {          label: '职务层级',          prop: 'jobLevel',          type: 'select',          options: {            placeholder: '请输入职务层级',            filterable: true,            items: this.dict.jobLevel          },          rules: [{ required: true, message: '请输入职务层级', trigger: 'change' }]        },        {          label: '薪酬档次',          prop: 'salaryCategory',          type: 'select',          options: {            placeholder: '薪酬档次',            items: this.dict.gradeDict          },          rules: [{ required: true, message: '请输入薪酬档次', trigger: 'blur' }]        },        {          label: '薪酬级别',          prop: 'salaryLevel',          type: 'select',          options: {            placeholder: '薪酬级别',            items: this.dict.levelDict          },          rules: [{ required: true, message: '请输入薪酬级别', trigger: 'blur' }]        }      ]    }  },  methods: {    async open (item) {      this.$refs.editDialog.open()      this.loading = true      this.query = this.items.reduce((res, item) => {        res[item.prop] = null        return res      }, {})      this.$nextTick(() => {        this.$refs.formRef.clearValidate()      })      this.isEdit = Boolean(item)      await this.getDict()      await this.getOtherDict()      if (item) {        Object.keys(this.query).forEach(key => {          this.query[key] = item[key]        })        this.query.personnelCode = item.personnelCode      }      this.loading = false    },    handleSaveEdit () {      this.$refs.formRef.validate(async valid => {        if (!valid) {          return        }        const { tradeUnionsTime, ...obj } = this.query        const date = new Date(tradeUnionsTime)        // 获取年、月、日        const year = date.getFullYear()        const month = String(date.getMonth() + 1).padStart(2, '0') // 月份从0开始,所以要加1        const day = String(date.getDate()).padStart(2, '0')        try {          await saveRoster({            ...obj,            tradeUnionsTime: `${year}${month}${day}`          })          this.$message.success('保存成功')          this.$refs.editDialog.close()          this.$emit('refresh')        } catch (error) {          this.$message.error(error)        }      })    },    onChange () {      const nodes = this.$refs.formRef.$refs.organizationNo.getCheckedNodes()      const node = nodes[0].data      const parent = nodes[0].parent.data      Object.assign(this.query, {        organizationNo: node.organizationNo,        deptName: node.organizationName,        parentOrganizationName: parent.organizationName,        parentOrganizationNo: parent.organizationNo      })    },    async getDict () {      try {        const { data } = await getSalaryLevelDict()        const dict = { ...this.dict }        Object.assign(dict, {          gradeDict: data.gradeDict.map(e => {            return {              label: e,              value: e            }          }),          levelDict: data.levelDict.map(e => {            return {              label: e,              value: e            }          })        })        this.dict = dict      } catch (error) {        this.$message.error(error)      }    },    async getOtherDict () {      const lists = [        { key: 'jobLevel', fn: getJobLevel },        { key: 'positionCategory', fn: getPositionCategory },        { key: 'personnelCategory', fn: getPersonnelCategory },        { key: 'positionSequence', fn: getPositionSequence },        { key: 'jobName', fn: getJobName }      ]      try {        const result = await Promise.all(lists.map(item => item.fn()))        const dict = { ...this.dict }        Object.assign(dict, lists.reduce((res, item, index) => {          res[item.key] = result[index].data.map(e => ({ label: e, value: e }))          return res        }, {}))        this.dict = dict      } catch (error) {        this.$message.error(error)      }    }  }}</script><style lang="scss" scoped></style>
 |