PersonnelInformationEditing.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. <template>
  2. <el-dialog v-model="dialog" :title="title" @closed="emit('close')">
  3. <el-form
  4. :model="userInfo"
  5. :inline="true"
  6. label-width="80px"
  7. :rules="rules"
  8. ref="formRef"
  9. >
  10. <el-form-item prop="name" label="姓名">
  11. <el-input v-model="userInfo.name"></el-input>
  12. </el-form-item>
  13. <el-form-item prop="ybName" label="医保姓名">
  14. <el-input v-model="userInfo.ybName"></el-input>
  15. </el-form-item>
  16. <el-form-item prop="codeRs" label="人事工号">
  17. <el-input v-model="userInfo.codeRs"></el-input>
  18. </el-form-item>
  19. <el-form-item prop="deptCode" label="科室">
  20. <xc-select
  21. :data="peopleAddData.deptData"
  22. clearable
  23. v-model="userInfo"
  24. :name="['deptCode', 'deptName']"
  25. ></xc-select>
  26. </el-form-item>
  27. <el-form-item prop="empPoCode" label="职务">
  28. <xc-select
  29. :data="peopleAddData.empPosition"
  30. clearable
  31. v-model="userInfo"
  32. :name="['empPoCode', 'position']"
  33. ></xc-select>
  34. </el-form-item>
  35. <el-form-item prop="empTitCode" label="职称">
  36. <xc-select
  37. :data="peopleAddData.zdEmpTitle"
  38. clearable
  39. v-model="userInfo"
  40. :name="['empTitCode', 'title']"
  41. ></xc-select>
  42. </el-form-item>
  43. <el-form-item prop="mark" label="在院标志">
  44. <xc-select
  45. :data="peopleAddData.empInmark"
  46. clearable
  47. v-model="userInfo"
  48. :name="['mark', 'markName']"
  49. ></xc-select>
  50. </el-form-item>
  51. <el-form-item prop="ifcader" label="干工标志">
  52. <xc-select
  53. :data="peopleAddData.zdIfcadre"
  54. clearable
  55. v-model="userInfo"
  56. :name="['ifcadre', 'ifcadreName']"
  57. ></xc-select>
  58. </el-form-item>
  59. <el-form-item prop="orderYn" label="处方权">
  60. <xc-select
  61. :data="doctorSPrescription"
  62. clearable
  63. v-model="userInfo"
  64. :name="['orderYn', 'orderYnName']"
  65. ></xc-select>
  66. </el-form-item>
  67. <el-form-item prop="ysjb" label="病历级别">
  68. <xc-select
  69. :data="peopleAddData.ysjbData"
  70. clearable
  71. v-model="userInfo"
  72. :name="['ysjb', 'ysjbName']"
  73. ></xc-select>
  74. </el-form-item>
  75. <el-form-item prop="ghChargeType" label="挂号号别">
  76. <xc-select
  77. :data="peopleAddData.mzyZdChargeType"
  78. clearable
  79. v-model="userInfo"
  80. :name="['ghChargeType', 'ghChargeTypeName']"
  81. />
  82. </el-form-item>
  83. <el-form-item prop="doctorXzYp" label="限制级别">
  84. <xc-select
  85. :data="peopleAddData.restrictedDrugLevels"
  86. clearable
  87. v-model="userInfo"
  88. :name="['doctorXzYp', 'doctorXzYpName']"
  89. />
  90. </el-form-item>
  91. <el-form-item prop="loginFlag" label="病区就诊">
  92. <el-switch
  93. v-model="userInfo.loginFlag"
  94. active-color="#ff4949"
  95. active-text="不允许"
  96. active-value="2"
  97. inactive-color="#13ce66"
  98. inactive-text="允许"
  99. inactive-value="1"
  100. >
  101. </el-switch>
  102. </el-form-item>
  103. <el-form-item prop="delFlag" label="停用">
  104. <el-switch
  105. v-model="userInfo.delFlag"
  106. active-color="#ff4949"
  107. active-text="停用"
  108. active-value="1"
  109. inactive-color="#13ce66"
  110. inactive-text="开启"
  111. inactive-value="0"
  112. >
  113. </el-switch>
  114. </el-form-item>
  115. <el-form-item prop="socialNo" label="身份证">
  116. <el-input v-model="userInfo.socialNo" clearable></el-input>
  117. </el-form-item>
  118. <el-form-item prop="phoneNo" label="手机号">
  119. <el-input
  120. v-model="userInfo.phoneNo"
  121. clearable
  122. style="width: 190px"
  123. ></el-input>
  124. </el-form-item>
  125. <el-form-item prop="ybCode" label="医保">
  126. <el-input v-model="userInfo.ybCode" clearable></el-input>
  127. </el-form-item>
  128. <el-form-item prop="doctorZy" label="中医处方权">
  129. <el-switch
  130. v-model="userInfo.doctorZy"
  131. active-color="#ff4949"
  132. active-text="是"
  133. :active-value="1"
  134. inactive-color="#13ce66"
  135. inactive-text="否"
  136. :inactive-value="0"
  137. />
  138. </el-form-item>
  139. <el-form-item
  140. prop="doctorYpZl"
  141. label="肿瘤药物分级限制"
  142. label-width="112px"
  143. >
  144. <el-select v-model="userInfo.doctorYpZl" clearable style="width: 120px">
  145. <el-option
  146. v-for="item in peopleAddData.doctorYpZl"
  147. :value="item.code"
  148. :label="item.name"
  149. />
  150. </el-select>
  151. </el-form-item>
  152. <el-form-item label="兼诊科室">
  153. <el-select
  154. v-model="userInfo.partTimeDept"
  155. multiple
  156. filterable
  157. placeholder="兼诊科室"
  158. style="width: 240px"
  159. >
  160. <el-option
  161. v-for="item in peopleAddData.deptData"
  162. :key="item.code"
  163. :label="item.name"
  164. :value="item.code"
  165. />
  166. </el-select>
  167. </el-form-item>
  168. <el-form-item prop="dualchnlFlag" label="双通道医生">
  169. <el-switch
  170. v-model="userInfo.dualchnlFlag"
  171. active-color="#ff4949"
  172. active-text="是"
  173. :active-value="1"
  174. inactive-color="#13ce66"
  175. inactive-text="否"
  176. :inactive-value="0"
  177. />
  178. </el-form-item>
  179. <el-form-item prop="practiceCertificate" label="执业证编码">
  180. <el-input
  181. v-model="userInfo.practiceCertificate"
  182. style="width: 120px"
  183. clearable
  184. ></el-input>
  185. </el-form-item>
  186. <el-form-item prop="autoDaily" label="自动日结">
  187. <el-switch
  188. v-model="userInfo.autoDaily"
  189. active-color="#ff4949"
  190. active-text="是"
  191. active-value="1"
  192. inactive-color="#13ce66"
  193. inactive-text="否"
  194. inactive-value="0"
  195. />
  196. </el-form-item>
  197. <el-form-item prop="referralCode" label="推荐码">
  198. <el-image
  199. style="width: 50px; height: 50px; cursor: pointer"
  200. :src="referralCodeUrl"
  201. fit="contain"
  202. @load="handleReferralCodeLoad"
  203. @error="handleReferralCodeError"
  204. @click="downloadReferralCode(referralCodeUrl)"
  205. ></el-image>
  206. </el-form-item>
  207. <el-form-item prop="image" label="签名">
  208. <el-image
  209. style="width: 100px; height: 50px"
  210. :src="imageUrl"
  211. fit="contain"
  212. ></el-image>
  213. </el-form-item>
  214. </el-form>
  215. <template #footer>
  216. <div>
  217. <el-button type="primary" @click="confirm(formRef)">确认</el-button>
  218. <el-button @click="emit('close')">取消</el-button>
  219. </div>
  220. </template>
  221. </el-dialog>
  222. </template>
  223. <script setup name="PersonnelInformationEditing">
  224. import { peopleAddData } from "@/components/settings/permissions/EmployeeInformationData";
  225. import { clone } from "@/utils/clone";
  226. import XcSelect from "@/components/xiao-chan/select/XcSelect.vue";
  227. import Sleep from "@/utils/sleep";
  228. import { idVerificationApi } from "@/api/public-api";
  229. import { isValidPhone } from "@/utils/validate";
  230. import { ElMessage } from "element-plus";
  231. import {
  232. modifyEmployeeInfo,
  233. saveEmployeeInfo,
  234. } from "@/api/settings/permission-settings";
  235. import { stringIsBlank } from "@/utils/blank-utils";
  236. import env from "@/utils/setting";
  237. const props = defineProps({
  238. userInfo: {
  239. type: Object,
  240. default: {
  241. name: "添加员工",
  242. },
  243. },
  244. index: {
  245. type: Number,
  246. default: -1,
  247. },
  248. });
  249. const emit = defineEmits(["close", "changeTheData"]);
  250. const dialog = ref(true);
  251. const title = stringIsBlank(props.userInfo.name)
  252. ? "添加员工"
  253. : "正在编辑:" + props.userInfo.name;
  254. const userInfo = ref({});
  255. const doctorSPrescription = [
  256. { code: "0", name: "无处方权" },
  257. { code: "1", name: "普通处方权" },
  258. { code: "2", name: "毒麻药处方权" },
  259. ];
  260. const wardVisit = [
  261. { code: "1", name: "允许" },
  262. { code: "2", name: "不允许" },
  263. ];
  264. const formRef = ref(null);
  265. const referralCodeIsLoaded = ref(false);
  266. const imageUrl = ref(
  267. env.RESOURCE_BASE_URL +
  268. "/doctorSignatureImage/" +
  269. props.userInfo.code +
  270. ".png"
  271. );
  272. // const referralCodeUrl = ref("http://130.150.161.72:8080" + props.userInfo.referralCode);
  273. const referralCodeUrl = ref(
  274. // env.RESOURCE_BASE_URL + props.userInfo.referralCode
  275. props.userInfo.referralCode
  276. );
  277. const handleReferralCodeLoad = () => {
  278. referralCodeIsLoaded.value = true;
  279. };
  280. const handleReferralCodeError = () => {
  281. referralCodeIsLoaded.value = false;
  282. };
  283. const downloadReferralCode = url => {
  284. if (referralCodeIsLoaded.value) {
  285. window.open(url);
  286. }
  287. };
  288. const idVerification = async (rule, value, callback) => {
  289. if (value) {
  290. const check = await idVerificationApi(value);
  291. if (check) {
  292. callback();
  293. } else {
  294. callback(new Error("请填写正确的身份证号码"));
  295. }
  296. } else {
  297. callback(new Error("请填写身份证"));
  298. }
  299. };
  300. const phoneNumber = (rule, value, callback) => {
  301. if (value) {
  302. if (isValidPhone(value)) {
  303. callback();
  304. } else {
  305. callback(new Error("请填写正确的手机号"));
  306. }
  307. } else {
  308. callback(new Error("该项不能为空"));
  309. }
  310. };
  311. const rules = reactive({
  312. name: [{ required: true, message: "该项不能为空", trigger: "blur" }],
  313. codeRs: [{ required: true, message: "该项不能为空", trigger: "blur" }],
  314. deptCode: [{ required: true, message: "该项不能为空", trigger: "blur" }],
  315. empInmark: [{ required: true, message: "该项不能为空", trigger: "blur" }],
  316. doctorXzYp: [{ required: true, message: "该项不能为空", trigger: "blur" }],
  317. orderYn: [{ required: true, message: "该项不能为空", trigger: "blur" }],
  318. });
  319. const confirm = formRef => {
  320. if (!formRef) return;
  321. formRef.validate(async valid => {
  322. if (valid) {
  323. if (props.index !== -1) {
  324. await modifyEmployeeInfo(userInfo.value);
  325. emit("changeTheData", props.index, userInfo.value);
  326. } else {
  327. await saveEmployeeInfo(userInfo.value);
  328. emit("changeTheData", props.index, userInfo.value);
  329. }
  330. } else {
  331. ElMessage.error("请仔细检查");
  332. }
  333. });
  334. };
  335. onMounted(async () => {
  336. await Sleep(500);
  337. if (props.userInfo) {
  338. userInfo.value = clone(props.userInfo);
  339. userInfo.value.oldData = true;
  340. if (userInfo.value.partTimeDeptCode) {
  341. userInfo.value.partTimeDept = userInfo.value.partTimeDeptCode.split(",");
  342. }
  343. } else {
  344. userInfo.value.oldData = false;
  345. }
  346. });
  347. </script>
  348. <style scoped></style>