staffDetail.vue 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747
  1. <script setup lang="ts">
  2. /**
  3. * @description 档案详情
  4. */
  5. defineOptions({ name: 'StaffDetail' })
  6. import { useQuery, useMutation } from '@tanstack/vue-query'
  7. import { getRecordsDetail, editRecordsDetail, generateStaffNum } from '@/api/oa/staffRecords'
  8. import { getConfigDict } from './index'
  9. import { FormInstance } from 'element-plus'
  10. import moment from 'moment'
  11. import TechCertificate from './TechCertificate.vue'
  12. import avatarImg from '@/assets/imgs/avatar.jpg'
  13. import DeptSelect from '@/components/DeptSelect/index.vue'
  14. import UserOrgTree from '@/views/OaSystem/components/UserOrgTree/index.vue'
  15. import { createImageViewer } from '@/components/ImageViewer'
  16. import WorkTable from './WorkTable.vue'
  17. import FamilyTable from './familyTable.vue'
  18. import SchoolTable from './SchoolTable.vue'
  19. import PerformanceTable from './performanceTable.vue'
  20. const formConfigList = getConfigDict()
  21. const { query } = useRoute()
  22. const { id, type } = query
  23. const formRef = ref<FormInstance>()
  24. const formData = ref({})
  25. const tabNav = ref<string>('#gsxx')
  26. let avatar = avatarImg
  27. /**获取员工档案详情 */
  28. useQuery(
  29. ['fetch-staff-detail', id],
  30. async () => {
  31. return await getRecordsDetail({ userId: id })
  32. },
  33. {
  34. onSuccess: (res) => {
  35. formData.value = handleTimeData(res)
  36. // formData.value = res
  37. // if (Array.isArray(formData.value['bysj'])) {
  38. // formData.value['bysj'] = res.bysj.join('-')
  39. // }
  40. avatar = res.avatar ? res.avatar : avatar
  41. }
  42. }
  43. )
  44. // 处理 [2001, 1, 1] 格式的时间数据
  45. const handleTimeData = (dataSource) => {
  46. const keyList = ['birthday', 'bysj', 'cjgzsj', 'yshtqssj', 'htdqs', 'htqdsj', 'rgssj', 'zzsj']
  47. Object.keys(dataSource).forEach((key) => {
  48. if (keyList.includes(key) && Array.isArray(dataSource[key])) {
  49. const dateString = dataSource[key].join('-')
  50. const dateValue = moment(dateString).valueOf()
  51. dataSource[key] = dateValue
  52. }
  53. })
  54. return dataSource
  55. }
  56. const treeNodeClick = (item, type) => {
  57. formData.value[type] = item['label']
  58. console.log(formData.value)
  59. }
  60. /**编辑员工档案详情 */
  61. const { mutate: addUserMutate } = useMutation({
  62. mutationFn: async (values: any) => {
  63. return await editRecordsDetail(values)
  64. },
  65. onSuccess() {
  66. ElMessage({
  67. message: '员工档案修改成功!',
  68. type: 'success'
  69. })
  70. },
  71. onError() {
  72. ElMessage({
  73. message: '员工档案修改失败,请稍后再试!',
  74. type: 'error'
  75. })
  76. }
  77. })
  78. /**生成工号 */
  79. const { mutate: generateStaffNumber } = useMutation({
  80. mutationFn: async () => {
  81. return await generateStaffNum()
  82. },
  83. onSuccess(res) {
  84. formData.value['loginName'] = res
  85. },
  86. onError() {
  87. ElMessage({
  88. message: '工号生成失败!',
  89. type: 'error'
  90. })
  91. }
  92. })
  93. /**表单保存 */
  94. const submitForm = (formEl: FormInstance | undefined) => {
  95. if (!formEl) return
  96. if (formData.value['schoolList'] && formData.value['schoolList'].length > 0) {
  97. formData.value.zgxl = formData.value['schoolList'][0]['xl']
  98. }
  99. formEl.validate((valid) => {
  100. if (valid) {
  101. formData.value['zzsj'] = formData.value['zzsj'] === null ? '' : formData.value['zzsj']
  102. addUserMutate(formData.value)
  103. } else {
  104. return false
  105. }
  106. })
  107. }
  108. /**点击预览 */
  109. const imagePreview = (imgUrl: string) => {
  110. createImageViewer({
  111. zIndex: 99999999,
  112. urlList: [imgUrl]
  113. })
  114. }
  115. //模拟锚点跳转
  116. const goAnchor = (selector) => {
  117. tabNav.value = selector
  118. //参数selector是id选择器(#anchor14)
  119. document.querySelector(selector).scrollIntoView({
  120. behavior: 'smooth'
  121. })
  122. }
  123. /**是否是编辑页面 */
  124. const isEdit = computed(() => {
  125. return type === 'edit'
  126. })
  127. // 上传路径
  128. const updateUrl =
  129. import.meta.env.VITE_BASE_URL + import.meta.env.VITE_API_URL + import.meta.env.VITE_UPLOAD_URL
  130. // 回填正确路径
  131. const imageUrl = (url) => {
  132. if (!url) return []
  133. return url.split(',').map((item, index) => ({
  134. url: item,
  135. uid: index
  136. }))
  137. }
  138. const getImgUrlList = (url) => {
  139. if (!url) return []
  140. return url.split(',')
  141. }
  142. // 附件上传成功
  143. const onUploadSuccess = (file: any, type: string) => {
  144. const fileList = file.map((item) => item.url)
  145. formData.value[type] = fileList.join(',')
  146. }
  147. // 修改并保存工作经历
  148. const saveWorkList = (data: any[]) => {
  149. // console.log('data', data)
  150. formData.value['workList'] = data.map((item) => ({ ...item, userId: id }))
  151. }
  152. // 修改并保存家庭成员
  153. const saveFamilyList = (data: any[]) => {
  154. // console.log('data', data)
  155. formData.value['familyList'] = data.map((item) => ({ ...item, userId: id }))
  156. }
  157. // 修改并保存学习经历
  158. const saveSchoolList = (data: any[]) => {
  159. // console.log('data', data)
  160. formData.value['schoolList'] = data.map((item) => ({ ...item, userId: id }))
  161. }
  162. // 修改并保存绩效考核记录
  163. const savePerformanceList = (data: any[]) => {
  164. // console.log('data', data)
  165. formData.value['performanceList'] = data.map((item) => ({ ...item, userId: id }))
  166. }
  167. //修改病保存职称证书
  168. const saveTechCertificateList = (data: any[]) => {
  169. formData.value['certList'] = data.map((item) => ({ ...item, userId: id }))
  170. }
  171. </script>
  172. <template>
  173. <div class="staff-files-wrap">
  174. <div
  175. v-if="formData && Object.keys(formData)?.length > 0"
  176. :class="isEdit ? 'my-portrait' : 'my-portrait form-unable-edit'"
  177. >
  178. <el-form ref="formRef" :model="formData" label-width="150px" :disabled="!isEdit">
  179. <div class="my-portrait-header">
  180. <div class="user-card">
  181. <el-image
  182. class="staff-avator"
  183. :src="avatar"
  184. :zoom-rate="1.2"
  185. :max-scale="7"
  186. :min-scale="0.2"
  187. @click="imagePreview(avatar)"
  188. :initial-index="0"
  189. />
  190. </div>
  191. <div class="my-portrait-card">
  192. <div class="btn_box">
  193. <el-form-item v-if="isEdit">
  194. <el-button color="#1B80EB" type="primary" @click="submitForm(formRef)"
  195. >保存</el-button
  196. >
  197. </el-form-item>
  198. </div>
  199. <div class="user-base-info">
  200. <h4>{{ formData?.['nickname'] }}</h4>
  201. <span>{{ formData?.['deptName'] }}</span>
  202. </div>
  203. <ul>
  204. <li v-for="(child, c) in formConfigList[0].children" :key="c">
  205. <el-form-item :label="`${child.title}:`" :prop="child.name" label-width="110px">
  206. <el-date-picker
  207. v-if="child.type === 'time'"
  208. v-model="formData[child?.name]"
  209. style="width: 100%"
  210. :placeholder="isEdit ? child.title : ''"
  211. type="date"
  212. format="YYYY-MM-DD"
  213. value-format="x"
  214. />
  215. <DeptSelect
  216. v-if="child.type === 'dept-select'"
  217. v-model="formData['deptId']"
  218. :defaultValue="formData['deptId'] ?? ''"
  219. />
  220. <el-select
  221. v-if="child.type === 'select'"
  222. v-model="formData[child?.name]"
  223. style="width: 100%"
  224. :placeholder="isEdit ? child.title : '-'"
  225. >
  226. <el-option
  227. v-for="opt in child.options"
  228. :key="opt.value"
  229. :label="opt.label"
  230. :value="opt.value"
  231. />
  232. </el-select>
  233. <el-input
  234. v-if="child?.type === undefined"
  235. v-model="formData[child?.name]"
  236. :title="child?.tip ? formData[child?.name] : ''"
  237. placeholder=""
  238. />
  239. <div v-if="child?.type === 'button'" class="generate-num">
  240. <el-input v-model="formData[child?.name]" placeholder="" :disabled="true" />
  241. <ElButton
  242. v-if="isEdit"
  243. type="primary"
  244. style="width: 70px; height: 30px; margin-left: 10px"
  245. @click="generateStaffNumber()"
  246. >生成工号</ElButton
  247. >
  248. </div>
  249. </el-form-item>
  250. </li>
  251. </ul>
  252. </div>
  253. </div>
  254. <div class="my-portrait-wrap">
  255. <ul class="my-portrait-nav">
  256. <li @click="goAnchor('#gsxx')" :class="{ active: tabNav === '#gsxx' }">公司信息</li>
  257. <li @click="goAnchor('#gzkxx')" :class="{ active: tabNav === '#gzkxx' }">工资卡信息</li>
  258. <li @click="goAnchor('#sfzxx')" :class="{ active: tabNav === '#sfzxx' }">
  259. 身份证信息
  260. </li>
  261. <li @click="goAnchor('#jjlxrxx')" :class="{ active: tabNav === '#jjlxrxx' }">
  262. 紧急联系人信息
  263. </li>
  264. <li @click="goAnchor('#gzjl')" :class="{ active: tabNav === '#gzjl' }">工作经历</li>
  265. <li @click="goAnchor('#jtcy')" :class="{ active: tabNav === '#jtcy' }">家庭成员</li>
  266. <li @click="goAnchor('#xxjl')" :class="{ active: tabNav === '#xxjl' }">学习经历</li>
  267. <li @click="goAnchor('#jxkh')" :class="{ active: tabNav === '#jxkh' }">绩效考核</li>
  268. <li @click="goAnchor('#zczs')" :class="{ active: tabNav === '#zczs' }">职称证书</li>
  269. </ul>
  270. <div class="my-portrait-container">
  271. <div class="my-portrait-item" id="gsxx">
  272. <div class="title">
  273. <i></i>
  274. <span>公司信息</span>
  275. </div>
  276. <div class="my-portrait-card">
  277. <ul>
  278. <li v-for="(child, c) in formConfigList[1].children" :key="c">
  279. <el-form-item :label="`${child.title}:`" :prop="child.name">
  280. <el-date-picker
  281. v-if="child.type === 'time'"
  282. v-model="formData[child?.name]"
  283. style="width: 100%"
  284. :placeholder="isEdit ? child.title : ''"
  285. type="date"
  286. format="YYYY-MM-DD"
  287. value-format="x"
  288. />
  289. <UserOrgTree
  290. v-if="child.type === 'user-select'"
  291. v-model="formData[child?.name]"
  292. @node-click="(item) => treeNodeClick(item, child?.sname)"
  293. />
  294. <el-select
  295. v-if="child.type === 'select'"
  296. v-model="formData[child?.name]"
  297. style="width: 100%"
  298. :placeholder="isEdit ? child.title : '-'"
  299. >
  300. <el-option
  301. v-for="opt in child.options"
  302. :key="opt.value"
  303. :label="opt.label"
  304. :value="opt.value"
  305. />
  306. </el-select>
  307. <el-input
  308. v-if="child?.type === undefined"
  309. v-model="formData[child?.name]"
  310. placeholder=""
  311. >
  312. <template v-if="child?.append" #append>{{ child?.append }}</template>
  313. </el-input>
  314. <div v-if="child?.type === 'button'" class="generate-num">
  315. <el-input v-model="formData[child?.name]" placeholder="" :disabled="true" />
  316. <ElButton
  317. v-if="isEdit"
  318. type="primary"
  319. style="width: 70px; height: 30px; margin-left: 10px"
  320. @click="generateStaffNumber()"
  321. >生成工号</ElButton
  322. >
  323. </div>
  324. </el-form-item>
  325. </li>
  326. <li></li>
  327. </ul>
  328. </div>
  329. </div>
  330. <div class="my-portrait-item" id="gzkxx">
  331. <div class="title">
  332. <i></i>
  333. <span>工资卡信息</span>
  334. </div>
  335. <div class="my-portrait-card">
  336. <ul>
  337. <li v-for="(child, c) in formConfigList[2].children" :key="c">
  338. <el-form-item :label="`${child.title}:`" :prop="child.name">
  339. <el-date-picker
  340. v-if="child.type === 'time'"
  341. v-model="formData[child?.name]"
  342. style="width: 100%"
  343. :placeholder="isEdit ? child.title : ''"
  344. type="date"
  345. format="YYYY-MM-DD"
  346. value-format="x"
  347. />
  348. <DeptSelect
  349. v-if="child.type === 'dept-select'"
  350. v-model="formData['deptId']"
  351. :defaultValue="formData['deptId'] ?? ''"
  352. />
  353. <el-select
  354. v-if="child.type === 'select'"
  355. v-model="formData[child?.name]"
  356. style="width: 100%"
  357. :placeholder="isEdit ? child.title : '-'"
  358. >
  359. <el-option
  360. v-for="opt in child.options"
  361. :key="opt.value"
  362. :label="opt.label"
  363. :value="opt.value"
  364. />
  365. </el-select>
  366. <el-input
  367. v-if="child?.type === undefined"
  368. v-model="formData[child?.name]"
  369. placeholder=""
  370. />
  371. <div v-if="child?.type === 'button'" class="generate-num">
  372. <el-input v-model="formData[child?.name]" placeholder="" :disabled="true" />
  373. <ElButton
  374. v-if="isEdit"
  375. type="primary"
  376. style="width: 70px; height: 30px; margin-left: 10px"
  377. @click="generateStaffNumber()"
  378. >生成工号</ElButton
  379. >
  380. </div>
  381. </el-form-item>
  382. </li>
  383. <li></li>
  384. </ul>
  385. </div>
  386. </div>
  387. <div class="my-portrait-item" id="sfzxx">
  388. <div class="title">
  389. <i></i>
  390. <span>身份证信息</span>
  391. </div>
  392. <div class="my-portrait-card">
  393. <ul>
  394. <li v-for="(child, c) in formConfigList[3].children" :key="c">
  395. <el-form-item :label="`${child.title}:`" :prop="child.name">
  396. <template v-if="child.type === 'time'">
  397. <el-date-picker
  398. v-model="formData[child?.name]"
  399. style="width: 100%"
  400. :placeholder="isEdit ? child.title : ''"
  401. type="date"
  402. format="YYYY-MM-DD"
  403. value-format="x"
  404. />
  405. </template>
  406. <template v-else-if="child?.type === 'upload'">
  407. <UploadImgs
  408. v-if="isEdit"
  409. :modelValue="imageUrl(formData[child?.name])"
  410. :updateUrl="updateUrl"
  411. height="55px"
  412. :callback="(file) => onUploadSuccess(file, child?.name)"
  413. />
  414. <div v-else>
  415. <span
  416. style="margin-left: 3px"
  417. v-for="(item, index) in getImgUrlList(formData[child?.name])"
  418. :key="index"
  419. >
  420. <el-image
  421. style="width: 100px; height: 100px"
  422. :src="item"
  423. fit="scale-down"
  424. :preview-src-list="[item]"
  425. />
  426. </span>
  427. </div>
  428. </template>
  429. <el-input
  430. v-if="child?.type === undefined"
  431. v-model="formData[child?.name]"
  432. placeholder=""
  433. />
  434. </el-form-item>
  435. </li>
  436. <li></li>
  437. </ul>
  438. </div>
  439. </div>
  440. <div class="my-portrait-item" id="jjlxrxx">
  441. <div class="title">
  442. <i></i>
  443. <span>紧急联系人信息</span>
  444. </div>
  445. <div class="my-portrait-card">
  446. <ul>
  447. <li v-for="(child, c) in formConfigList[4].children" :key="c">
  448. <el-form-item :label="`${child.title}:`" :prop="child.name">
  449. <el-date-picker
  450. v-if="child.type === 'time'"
  451. v-model="formData[child?.name]"
  452. style="width: 100%"
  453. :placeholder="isEdit ? child.title : ''"
  454. type="date"
  455. format="YYYY-MM-DD"
  456. value-format="x"
  457. />
  458. <DeptSelect
  459. v-if="child.type === 'dept-select'"
  460. v-model="formData['deptId']"
  461. :defaultValue="formData['deptId'] ?? ''"
  462. />
  463. <el-select
  464. v-if="child.type === 'select'"
  465. v-model="formData[child?.name]"
  466. style="width: 100%"
  467. :placeholder="isEdit ? child.title : '-'"
  468. >
  469. <el-option
  470. v-for="opt in child.options"
  471. :key="opt.value"
  472. :label="opt.label"
  473. :value="opt.value"
  474. />
  475. </el-select>
  476. <el-input
  477. v-if="child?.type === undefined"
  478. v-model="formData[child?.name]"
  479. placeholder=""
  480. />
  481. </el-form-item>
  482. </li>
  483. <li></li>
  484. </ul>
  485. </div>
  486. </div>
  487. <div class="my-portrait-item" id="gzjl">
  488. <WorkTable
  489. :defaultData="formData['workList']"
  490. @onSave="saveWorkList"
  491. :onlyRead="type == 'view'"
  492. />
  493. </div>
  494. <div class="my-portrait-item" id="jtcy">
  495. <FamilyTable
  496. :defaultData="formData['familyList']"
  497. @onSave="saveFamilyList"
  498. :onlyRead="type == 'view'"
  499. />
  500. </div>
  501. <div class="my-portrait-item" id="xxjl">
  502. <SchoolTable
  503. :defaultData="formData['schoolList']"
  504. @onSave="saveSchoolList"
  505. :onlyRead="type == 'view'"
  506. />
  507. </div>
  508. <div class="my-portrait-item" id="jxkh">
  509. <PerformanceTable
  510. :defaultData="formData['performanceList']"
  511. @onSave="savePerformanceList"
  512. :onlyRead="type == 'view'"
  513. />
  514. </div>
  515. <div class="my-portrait-item" id="zczs">
  516. <TechCertificate
  517. :defaultData="formData['certList']"
  518. @onSave="saveTechCertificateList"
  519. :onlyRead="type == 'view'"
  520. />
  521. </div>
  522. </div>
  523. </div>
  524. </el-form>
  525. </div>
  526. </div>
  527. </template>
  528. <style lang="scss" scoped>
  529. .staff-files-wrap {
  530. height: 100%;
  531. .my-portrait {
  532. width: 100%;
  533. height: 100%;
  534. padding: 0 0 10px;
  535. overflow: hidden;
  536. :deep(.el-form) {
  537. display: flex;
  538. flex-direction: column;
  539. height: 100% !important;
  540. }
  541. .my-portrait-header {
  542. background: #fff;
  543. padding: 26px 30px;
  544. padding-bottom: 0px;
  545. overflow: hidden;
  546. border-radius: 20px;
  547. display: flex;
  548. align-content: center;
  549. margin-bottom: 15px;
  550. > .user-card {
  551. width: 160px;
  552. margin-right: 10px;
  553. }
  554. > .my-portrait-card {
  555. flex: 1;
  556. position: relative;
  557. > .btn_box {
  558. position: absolute;
  559. right: 0px;
  560. }
  561. > .user-base-info {
  562. display: flex;
  563. align-items: center;
  564. margin-bottom: 10px;
  565. margin-left: 20px;
  566. > h4 {
  567. font-size: 22px;
  568. color: #111518;
  569. margin-right: 10px;
  570. }
  571. > span {
  572. color: #777c80;
  573. }
  574. }
  575. > ul {
  576. > li {
  577. display: inline-block;
  578. width: calc(20% - 30px);
  579. text-align: left;
  580. &:not(:nth-child(5n + 5)) {
  581. margin-right: 30px;
  582. }
  583. }
  584. }
  585. }
  586. }
  587. .my-portrait-wrap {
  588. background: #fff;
  589. padding: 26px 30px;
  590. padding-top: 0px;
  591. border-radius: 20px;
  592. overflow-y: auto;
  593. flex: 1;
  594. flex-grow: 1;
  595. display: flex;
  596. flex-direction: column;
  597. > .my-portrait-nav {
  598. display: flex;
  599. border-bottom: 1px solid #e5eff7;
  600. margin: 0px -30px;
  601. margin-bottom: 15px;
  602. padding: 0px 20px;
  603. > li {
  604. padding: 15px;
  605. cursor: pointer;
  606. font-size: 17px;
  607. position: relative;
  608. &.active {
  609. color: #2e77e6;
  610. &::after {
  611. display: block;
  612. content: '';
  613. width: 20px;
  614. height: 3px;
  615. background: #2e77e6;
  616. position: absolute;
  617. bottom: 0px;
  618. left: 0px;
  619. right: 0px;
  620. margin: auto;
  621. }
  622. }
  623. }
  624. }
  625. > .my-portrait-container {
  626. overflow-y: auto;
  627. flex: 1;
  628. flex-grow: 1;
  629. > .my-portrait-item {
  630. margin-bottom: 20px;
  631. width: 100%;
  632. .title {
  633. display: flex;
  634. align-items: center;
  635. margin-bottom: 8px;
  636. i {
  637. display: block;
  638. width: 16px;
  639. height: 16px;
  640. margin-right: 9px;
  641. background: url('../../../../assets/imgs/OA/mine/star.png') center no-repeat;
  642. background-size: 100%;
  643. }
  644. span {
  645. font-size: 18px;
  646. font-weight: bold;
  647. color: #000000;
  648. }
  649. }
  650. ul {
  651. display: flex;
  652. padding: 20px 40px 0;
  653. background: #f7f8fa;
  654. border-radius: 4px;
  655. flex-wrap: wrap;
  656. justify-content: space-between;
  657. li {
  658. width: calc(33.3% - 40px);
  659. }
  660. }
  661. }
  662. }
  663. }
  664. }
  665. .form-unable-edit {
  666. .my-portrait-item {
  667. ul {
  668. background: linear-gradient(90deg, #f2f7ff 0%, rgb(245 249 255 / 0%) 100%);
  669. border: 1px solid #e4e9f1;
  670. }
  671. }
  672. :deep(.el-form) {
  673. .el-input.is-disabled .el-input__wrapper {
  674. background-color: unset;
  675. box-shadow: none;
  676. }
  677. .el-input-group__append {
  678. border: 0px;
  679. box-shadow: none;
  680. }
  681. .el-input.is-disabled .el-input__inner {
  682. color: #000000;
  683. -webkit-text-fill-color: #000000;
  684. }
  685. .el-form-item__label {
  686. font-size: 16px;
  687. color: #455773;
  688. }
  689. .el-form-item--default {
  690. margin-bottom: 10px;
  691. }
  692. .el-input__inner {
  693. font-family: 'Microsoft YaHei';
  694. font-size: 16px;
  695. font-weight: 500;
  696. color: #000000;
  697. }
  698. .el-input__suffix {
  699. display: none;
  700. }
  701. }
  702. }
  703. }
  704. .generate-num {
  705. display: flex;
  706. width: 100%;
  707. }
  708. .staff-avator {
  709. width: 100%;
  710. max-height: 180px;
  711. }
  712. </style>