Browse Source

人员信息变动

DESKTOP-MINPJAU\Administrator 3 years ago
parent
commit
1e6b0150f0

+ 8 - 0
src/api/public-api.js

@@ -128,4 +128,12 @@ export function getPeopleToFillInInformation() {
         url: '/publicApi/getPeopleToFillInInformation',
         method: 'get'
     });
+}
+
+export function idVerificationApi(idCard) {
+    return request({
+        url: '/publicApi/idVerification',
+        method: 'get',
+        params: {idCard}
+    });
 }

+ 9 - 0
src/api/settings/permission-settings.js

@@ -68,3 +68,12 @@ export function saveRoleMenus(data) {
         data,
     })
 }
+
+export function savePersonnelInformation(data) {
+    return request({
+        url: '/settings/savePersonnelInformation',
+        method: 'post',
+        data,
+    })
+}
+

+ 5 - 1
src/components/layer/index.vue

@@ -13,8 +13,9 @@
 </template>
 
 <script>
-import { defineComponent, ref } from 'vue'
+import {defineComponent, ref} from 'vue'
 import drag from '@/directive/drag/index'
+
 export default defineComponent({
   props: {
     layer: {
@@ -34,12 +35,15 @@ export default defineComponent({
   },
   setup(props, ctx) {
     const dialog = ref(null)
+
     function confirm() {
       ctx.emit('confirm')
     }
+
     function close() {
       dialog.value.handleClose()
     }
+
     return {
       dialog,
       confirm,

+ 5 - 1
src/components/settings/permissions/EmployeeInformationData.js

@@ -1,3 +1,7 @@
 import {getPeopleToFillInInformation} from "@/api/public-api";
 
-export const peopleAddData = await getPeopleToFillInInformation()
+export const peopleAddData = ref([])
+
+getPeopleToFillInInformation().then(res => {
+    peopleAddData.value = res
+})

+ 101 - 13
src/components/settings/permissions/PersonnelInformationEditing.vue

@@ -1,8 +1,7 @@
 <template>
-  <el-dialog v-model="dialog" :title="'正在编辑:'+userInfo.name" @closed="emit('close')">
+  <el-dialog v-model="dialog" :title="'正在编辑:'+ props.userInfo.name" @closed="emit('close')">
     <el-container>
-      <el-form :model="userInfo" :inline="true" label-width="80px">
-
+      <el-form :model="userInfo" :inline="true" label-width="80px" :rules="rules" ref="formRef">
         <el-form-item prop="name" label="姓名">
           <el-input v-model="userInfo.name"></el-input>
         </el-form-item>
@@ -12,7 +11,8 @@
         </el-form-item>
 
         <el-form-item prop="deptCode" label="科室">
-          <xc-select :data="peopleAddData.deptData" v-model="userInfo" :name="['deptCode','deptName']"></xc-select>
+          <xc-select :data="peopleAddData.deptData" v-model="userInfo"
+                     :name="['deptCode','deptName']"></xc-select>
         </el-form-item>
 
         <el-form-item prop="empPoCode" label="职务">
@@ -43,19 +43,37 @@
           <xc-select :data="peopleAddData.mzyZdChargeType" v-model="userInfo"
                      :name="['ghChargeType','ghChargeTypeName']"/>
         </el-form-item>
-
         <el-form-item prop="doctorXzYp" label="限制级别">
           <xc-select :data="peopleAddData.restrictedDrugLevels" v-model="userInfo"
                      :name="['doctorXzYp','doctorXzYpName']"/>
         </el-form-item>
-
-        <el-form-item prop="loginFlag" label="病区允许就诊">
-          <xc-select :data="peopleAddData.ysjbData" v-model="userInfo" :name="['loginFlag','loginFlagName']"></xc-select>
+        <el-form-item prop="loginFlag" label="病区就诊">
+          <el-switch v-model="userInfo.loginFlag" active-color="#ff4949" active-text="不允许" active-value="2"
+                     inactive-color="#13ce66" inactive-text="允许" inactive-value="1">
+          </el-switch>
+        </el-form-item>
+        <el-form-item prop="delFlag" label="停用">
+          <el-switch v-model="userInfo.delFlag" active-color="#ff4949" active-text="停用" active-value="1"
+                     inactive-color="#13ce66" inactive-text="开启" inactive-value="0">
+          </el-switch>
+        </el-form-item>
+        <el-form-item prop="socialNo" label="身份证">
+          <el-input v-model="userInfo.socialNo" clearable></el-input>
+        </el-form-item>
+        <el-form-item prop="phoneNo" label="手机号">
+          <el-input v-model="userInfo.phoneNo" clearable></el-input>
+        </el-form-item>
+        <el-form-item prop="ybCode" label="医保">
+          <el-input v-model="userInfo.ybCode" clearable></el-input>
         </el-form-item>
-
-
       </el-form>
     </el-container>
+    <template #footer>
+      <div>
+        <el-button type="primary" @click="confirm(formRef)">确认</el-button>
+        <el-button @click="emit('close')">取消</el-button>
+      </div>
+    </template>
   </el-dialog>
 </template>
 
@@ -64,10 +82,17 @@ import {peopleAddData} from "@/components/settings/permissions/EmployeeInformati
 import {clone} from "@/utils/clone";
 import XcSelect from "@/components/xc/select/XcSelect.vue";
 import Sleep from "element-plus/packages/test-utils/sleep";
+import {idVerificationApi} from "@/api/public-api";
+import {isValidPhone} from "@/utils/validate";
+import {ElMessage} from "element-plus";
+import {savePersonnelInformation} from "@/api/settings/permission-settings";
 
 const props = defineProps({
   userInfo: {
     type: Object,
+    default: {
+      name: '添加员工'
+    }
   }
 })
 const emit = defineEmits(['close'])
@@ -79,11 +104,74 @@ const doctorSPrescription = [
   {code: '2', name: '毒麻药处方权'},
 ]
 
+const wardVisit = [
+  {code: '1', name: '允许'},
+  {code: '2', name: '不允许'}
+]
+
+const formRef = ref(null)
+
+const idVerification = async (rule, value, callback) => {
+  if (value) {
+    const check = await idVerificationApi(value)
+    if (check) {
+      callback()
+    } else {
+      callback(new Error("请填写正确的身份证号码"))
+    }
+  } else {
+    callback(new Error("请填写身份证"))
+  }
+}
+
+const phoneNumber = (rule, value, callback) => {
+  if (value) {
+    if (isValidPhone(value)) {
+      callback()
+    } else {
+      callback(new Error("请填写正确的手机号"))
+    }
+  } else {
+    callback(new Error("该项不能为空"))
+  }
+}
+
+const rules = reactive({
+  name: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  codeRs: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  deptCode: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  empInmark: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  doctorXzYp: [{required: true, message: '该项不能为空', trigger: 'blur'}],
+  socialNo: [
+    {required: true, message: '该项不能为空', trigger: 'blur'},
+    {validator: idVerification, trigger: 'blur'}
+  ],
+  phoneNo: [
+    {required: true, message: '该项不能为空', trigger: 'change'},
+    {validator: phoneNumber, trigger: 'blur'}
+  ],
+})
+
+const confirm = (formRef) => {
+  if (!formRef) return
+  formRef.validate((valid) => {
+    if (valid) {
+      savePersonnelInformation(userInfo)
+    } else {
+      ElMessage.error("请仔细检查")
+    }
+  })
+
+}
+
 onMounted(async () => {
   await Sleep(500)
-  userInfo = clone(props.userInfo)
-  console.log(userInfo)
-  console.log(peopleAddData)
+  if (props.userInfo) {
+    userInfo = clone(props.userInfo)
+    userInfo.oldData = true
+  } else {
+    userInfo.oldData = false
+  }
 })
 
 

+ 173 - 173
src/utils/validate.js

@@ -1,193 +1,193 @@
-import { ElMessage } from 'element-plus'
-import { baseinfo } from '@/data/inpatient'
+import {ElMessage} from 'element-plus'
+import {baseinfo} from '@/data/inpatient'
 
 export function nullPatient() {
-  const patient = baseinfo()
-  if (patient.inpatientNo && patient.admissTimes) {
-    return false
-  } else {
-    ElMessage({
-      message: '请先选择患者!',
-      type: 'warning',
-      duration: 2500,
-      showClose: true,
-    })
-    return true
-  }
+    const patient = baseinfo()
+    if (patient.inpatientNo && patient.admissTimes) {
+        return false
+    } else {
+        ElMessage({
+            message: '请先选择患者!',
+            type: 'warning',
+            duration: 2500,
+            showClose: true,
+        })
+        return true
+    }
 }
 
-function isValidPhone(phone) {
-  const myreg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
-  return myreg.test(phone)
+export function isValidPhone(phone) {
+    const myreg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/
+    return myreg.test(phone)
 }
 
 function isValidIdcard(card) {
-  const provinces = {
-    11: '北京',
-    12: '天津',
-    13: '河北',
-    14: '山西',
-    15: '内蒙古',
-    21: '辽宁',
-    22: '吉林',
-    23: '黑龙江',
-    31: '上海',
-    32: '江苏',
-    33: '浙江',
-    34: '安徽',
-    35: '福建',
-    36: '江西',
-    37: '山东',
-    41: '河南',
-    42: '湖北',
-    43: '湖南',
-    44: '广东',
-    45: '广西',
-    46: '海南',
-    50: '重庆',
-    51: '四川',
-    52: '贵州',
-    53: '云南',
-    54: '西藏',
-    61: '陕西',
-    62: '甘肃',
-    63: '青海',
-    64: '宁夏',
-    65: '新疆',
-    71: '台湾',
-    81: '香港',
-    82: '澳门',
-    91: '国外',
-  }
+    const provinces = {
+        11: '北京',
+        12: '天津',
+        13: '河北',
+        14: '山西',
+        15: '内蒙古',
+        21: '辽宁',
+        22: '吉林',
+        23: '黑龙江',
+        31: '上海',
+        32: '江苏',
+        33: '浙江',
+        34: '安徽',
+        35: '福建',
+        36: '江西',
+        37: '山东',
+        41: '河南',
+        42: '湖北',
+        43: '湖南',
+        44: '广东',
+        45: '广西',
+        46: '海南',
+        50: '重庆',
+        51: '四川',
+        52: '贵州',
+        53: '云南',
+        54: '西藏',
+        61: '陕西',
+        62: '甘肃',
+        63: '青海',
+        64: '宁夏',
+        65: '新疆',
+        71: '台湾',
+        81: '香港',
+        82: '澳门',
+        91: '国外',
+    }
 
-  //检查号码是否符合规范,包括长度,类型
-  const isCardNo = function (card) {
-    //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
-    const reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/
-    return reg.test(card)
-  }
+    //检查号码是否符合规范,包括长度,类型
+    const isCardNo = function (card) {
+        //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
+        const reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/
+        return reg.test(card)
+    }
 
-  //取身份证前两位,校验省份
-  const checkProvince = function (card) {
-    const provinceCode = card.substr(0, 2)
-    return provinces[provinceCode]
-  }
+    //取身份证前两位,校验省份
+    const checkProvince = function (card) {
+        const provinceCode = card.substr(0, 2)
+        return provinces[provinceCode]
+    }
 
-  //检查生日是否正确
-  const checkBirthday = function (card) {
-    const len = card.length
-    //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字
-    if (len === 15) {
-      const re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/
-      let arr_data = card.match(re_fifteen)
-      let year = arr_data[2]
-      let month = arr_data[3]
-      let day = arr_data[4]
-      let birthday = new Date('19' + year + '/' + month + '/' + day)
-      return verifyBirthday('19' + year, month, day, birthday)
-    }
-    //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X
-    if (len === 18) {
-      const re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/
-      let arr_data = card.match(re_eighteen)
-      let year = arr_data[2]
-      let month = arr_data[3]
-      let day = arr_data[4]
-      let birthday = new Date(year + '/' + month + '/' + day)
-      return verifyBirthday(year, month, day, birthday)
-    }
-    return false
-  }
+    //检查生日是否正确
+    const checkBirthday = function (card) {
+        const len = card.length
+        //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字
+        if (len === 15) {
+            const re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/
+            let arr_data = card.match(re_fifteen)
+            let year = arr_data[2]
+            let month = arr_data[3]
+            let day = arr_data[4]
+            let birthday = new Date('19' + year + '/' + month + '/' + day)
+            return verifyBirthday('19' + year, month, day, birthday)
+        }
+        //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X
+        if (len === 18) {
+            const re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/
+            let arr_data = card.match(re_eighteen)
+            let year = arr_data[2]
+            let month = arr_data[3]
+            let day = arr_data[4]
+            let birthday = new Date(year + '/' + month + '/' + day)
+            return verifyBirthday(year, month, day, birthday)
+        }
+        return false
+    }
 
-  //校验日期
-  const verifyBirthday = function (year, month, day, birthday) {
-    const now = new Date()
-    var now_year = now.getFullYear()
-    //年月日是否合理
-    if (birthday.getFullYear() == year && birthday.getMonth() + 1 == month && birthday.getDate() == day) {
-      //判断年份的范围(3岁到120岁之间)
-      var time = now_year - year
-      return time >= 3 && time <= 120
-    }
-    return false
-  }
+    //校验日期
+    const verifyBirthday = function (year, month, day, birthday) {
+        const now = new Date()
+        var now_year = now.getFullYear()
+        //年月日是否合理
+        if (birthday.getFullYear() == year && birthday.getMonth() + 1 == month && birthday.getDate() == day) {
+            //判断年份的范围(3岁到120岁之间)
+            var time = now_year - year
+            return time >= 3 && time <= 120
+        }
+        return false
+    }
 
-  //校验位的检测
-  const checkParity = function (card) {
-    //15位转18位
-    card = changeFivteenToEighteen(card)
-    const len = card.length
-    if (len === 18) {
-      const arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
-      const arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
-      var cardTemp = 0,
-        i,
-        valnum
-      for (i = 0; i < 17; i++) {
-        cardTemp += card.substr(i, 1) * arrInt[i]
-      }
-      valnum = arrCh[cardTemp % 11]
-      return valnum == card.substr(17, 1)
-    }
-    return false
-  }
+    //校验位的检测
+    const checkParity = function (card) {
+        //15位转18位
+        card = changeFivteenToEighteen(card)
+        const len = card.length
+        if (len === 18) {
+            const arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
+            const arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
+            var cardTemp = 0,
+                i,
+                valnum
+            for (i = 0; i < 17; i++) {
+                cardTemp += card.substr(i, 1) * arrInt[i]
+            }
+            valnum = arrCh[cardTemp % 11]
+            return valnum == card.substr(17, 1)
+        }
+        return false
+    }
 
-  //15位转18位身份证号
-  const changeFivteenToEighteen = function (card) {
-    if (card.length === 15) {
-      const arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
-      const arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
-      var cardTemp = 0,
-        i
-      card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6)
-      for (i = 0; i < 17; i++) {
-        cardTemp += card.substr(i, 1) * arrInt[i]
-      }
-      card += arrCh[cardTemp % 11]
-      return card
-    }
-    return card
-  }
+    //15位转18位身份证号
+    const changeFivteenToEighteen = function (card) {
+        if (card.length === 15) {
+            const arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2)
+            const arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2')
+            var cardTemp = 0,
+                i
+            card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6)
+            for (i = 0; i < 17; i++) {
+                cardTemp += card.substr(i, 1) * arrInt[i]
+            }
+            card += arrCh[cardTemp % 11]
+            return card
+        }
+        return card
+    }
 
-  if (!card) {
-    return false
-  }
+    if (!card) {
+        return false
+    }
 
-  card = card.trim()
+    card = card.trim()
 
-  return card !== '' && isCardNo(card) && checkProvince(card) && checkBirthday(card) && checkParity(card)
+    return card !== '' && isCardNo(card) && checkProvince(card) && checkBirthday(card) && checkParity(card)
 }
 
 export function validateCovidAnswer(answer) {
-  if (!answer.name) {
-    return '请填写姓名!'
-  }
-  if (!isValidPhone(answer.phone)) {
-    return '请填写正确的手机号!'
-  }
-  if (!answer.patientId) {
-    if (!isValidIdcard(answer.idcard)) {
-      return '请填写正确的身份证号!'
-    }
-  }
-  if (!answer.temperature) {
-    return '请选择体温选项!'
-  }
-  if (answer.temperature === '2' && !answer.feverNumber) {
-    return '体温为发烧时请填写具体温度!'
-  }
-  if (answer.item5 === 51 && answer.symptoms.length < 1) {
-    return '请选择症状!'
-  }
-  let count = 0
-  for (let key in answer) {
-    if (key.indexOf('item') !== -1) {
-      count++
-    }
-  }
-  if (count < 5) {
-    return '有未选择的选项!'
-  }
-  answer.addrAdditional = ''
-  return ''
+    if (!answer.name) {
+        return '请填写姓名!'
+    }
+    if (!isValidPhone(answer.phone)) {
+        return '请填写正确的手机号!'
+    }
+    if (!answer.patientId) {
+        if (!isValidIdcard(answer.idcard)) {
+            return '请填写正确的身份证号!'
+        }
+    }
+    if (!answer.temperature) {
+        return '请选择体温选项!'
+    }
+    if (answer.temperature === '2' && !answer.feverNumber) {
+        return '体温为发烧时请填写具体温度!'
+    }
+    if (answer.item5 === 51 && answer.symptoms.length < 1) {
+        return '请选择症状!'
+    }
+    let count = 0
+    for (let key in answer) {
+        if (key.indexOf('item') !== -1) {
+            count++
+        }
+    }
+    if (count < 5) {
+        return '有未选择的选项!'
+    }
+    answer.addrAdditional = ''
+    return ''
 }

+ 2 - 3
src/views/settings/permissions/UserRoleSettings.vue

@@ -63,7 +63,7 @@
             </el-table-column>
             <el-table-column prop="delFlag" label="停用标志">
               <template #default="scope">
-                <span v-if="scope.row.loginFlag === '1'">√</span>
+                <span v-if="scope.row.delFlag === '1'">√</span>
               </template>
             </el-table-column>
             <el-table-column prop="socialNo" label="身份证"></el-table-column>
@@ -219,7 +219,6 @@ const toggleSelection = (rows) => {
 }
 
 const clickToEdit = (row) => {
-  console.log(row)
   editDialog = true
   userInfo = row
 }
@@ -283,8 +282,8 @@ onMounted(() => {
 })
 
 const dropDownSelection = [
+  {code: 0, name: '否'},
   {code: 1, name: '是'},
-  {code: 2, name: '否'},
   {code: 9, name: '全部'}
 ]