draftSql.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779
  1. /**
  2. * 人员档案暂存查询 key 及对应 SQL
  3. * 需在后台通用查询脚本中配置相同 key
  4. */
  5. export const draftQueryKeys = {
  6. main: 'getRydaZcxxbByRenYuan',
  7. jbqk: 'getRydaJbqkzcByParentId',
  8. jyjl: 'getRydaJyjlzcByParentId',
  9. gzjl: 'getRydaGzjlzcByParentId',
  10. zsb: 'getRydaZsbzcByParentId'
  11. }
  12. export const draftQuerySql = {
  13. // params: [renYuan, zhuangTai]
  14. [draftQueryKeys.main]:
  15. 'SELECT * FROM t_rydazcxxb WHERE renYuan = ? AND zhuangTai = ? ORDER BY create_time_ DESC LIMIT 1',
  16. // params: [parentId]
  17. [draftQueryKeys.jbqk]: 'SELECT * FROM t_jbqkxxzc WHERE parentId = ?',
  18. [draftQueryKeys.jyjl]:
  19. 'SELECT * FROM t_jyjlzc WHERE parentId = ? ORDER BY create_time_ ASC',
  20. [draftQueryKeys.gzjl]:
  21. 'SELECT * FROM t_gzjlzc WHERE parentId = ? ORDER BY create_time_ ASC',
  22. [draftQueryKeys.zsb]:
  23. 'SELECT * FROM t_zsbzc WHERE parentId = ? ORDER BY create_time_ ASC'
  24. }
  25. export const draftChildQueryKeys = {
  26. t_jbqkxxzc: draftQueryKeys.jbqk,
  27. t_jyjlzc: draftQueryKeys.jyjl,
  28. t_gzjlzc: draftQueryKeys.gzjl,
  29. t_zsbzc: draftQueryKeys.zsb
  30. }
  31. /** 暂存表单 formKey */
  32. export const draftFormKey = 'rydazcljgxbdqddmsy'
  33. /** 暂存表单 boCode */
  34. export const draftBoCode = 'rydazcxxb'
  35. /**
  36. * 查询结果下划线字段 → 代码驼峰字段
  37. * (与 BO / 数据库列名一致)
  38. */
  39. export const draftSnakeToCamelMap = {
  40. zhuang_tai_: 'zhuangTai',
  41. ren_yuan_: 'renYuan',
  42. parent_id_: 'parentId',
  43. shi_fou_guo_shen_: 'shiFouGuoShen',
  44. di_dian_: 'diDian',
  45. bian_zhi_ren_: 'bianZhiRen',
  46. bian_zhi_bu_men_: 'bianZhiBuMen',
  47. bian_zhi_shi_jian_: 'bianZhiShiJian',
  48. kuai_zhao_: 'kuaiZhao',
  49. jian_dang_ri_qi_: 'jianDangRiQi',
  50. nian_ling_: 'nianLing',
  51. chu_sheng_ri_qi_: 'chuShengRiQi',
  52. zui_gao_xue_li_x_: 'zuiGaoXueLiX',
  53. yuan_bi_ye_yuan_x: 'yuanBiYeYuanXi',
  54. yuan_bi_ye_yuan_xi_: 'yuanBiYeYuanXi',
  55. xian_cong_shi_zhu: 'xianCongShiZhua',
  56. xian_cong_shi_zhua_: 'xianCongShiZhua',
  57. can_jia_gong_zuo: 'canJiaGongZuo',
  58. can_jia_gong_zuo_: 'canJiaGongZuo',
  59. ru_zhi_shi_jian_: 'ruZhiShiJian',
  60. ren_zhi_shi_jian_: 'renZhiShiJian',
  61. xing_zheng_zhi_wu: 'xingZhengZhiWu',
  62. xing_zheng_zhi_wu_: 'xingZhengZhiWu',
  63. zhi_cheng_deng_ji: 'zhiChengDengJi',
  64. zhi_cheng_deng_ji_: 'zhiChengDengJi',
  65. zhi_cheng_: 'zhiCheng',
  66. shen_fen_zheng_ha: 'shenFenZhengHao',
  67. shen_fen_zheng_hao_: 'shenFenZhengHao',
  68. ren_yuan_lei_xing: 'renYuanLeiXing',
  69. ren_yuan_lei_xing_: 'renYuanLeiXing',
  70. bao_mi_xie_yi_: 'baoMiXieYi',
  71. qian_zi_tu_wen_: 'qianZiTuWen',
  72. cheng_nuo_han_: 'chengNuoHan',
  73. she_bao_: 'sheBao',
  74. fu_jian_: 'fuJian',
  75. kai_shi_shi_jian_: 'kaiShiShiJian',
  76. jie_shu_shi_jian_: 'jieShuShiJian',
  77. xue_xiao_: 'xueXiao',
  78. zhuan_ye_: 'zhuanYe',
  79. xue_li_xue_wei_: 'xueLiXueWei',
  80. li_zhi_shi_jian_: 'liZhiShiJian',
  81. dan_wei_ming_chen: 'danWeiMingCheng',
  82. dan_wei_ming_cheng_: 'danWeiMingCheng',
  83. zhi_wei_: 'zhiWei',
  84. bu_men_: 'buMen',
  85. gong_zuo_nei_rong: 'gongZuoNeiRong',
  86. gong_zuo_nei_rong_: 'gongZuoNeiRong',
  87. zheng_shu_ming_c_: 'zhengShuMingC',
  88. zheng_jian_hao_: 'zhengJianHao',
  89. fa_zheng_dan_wei_: 'faZhengDanWei',
  90. fa_zheng_shi_jian: 'faZhengShiJian',
  91. fa_zheng_shi_jian_: 'faZhengShiJian',
  92. dang_an_bao_cun_: 'dangAnBaoCun',
  93. huo_jiang_zheng_s: 'huoJiangZhengS',
  94. huo_jiang_zheng_s_: 'huoJiangZhengS'
  95. }
  96. /** 日期类字段(el-date-picker 需要 yyyy-MM-dd 字符串) */
  97. const draftDateFields = [
  98. 'bianZhiShiJian',
  99. 'jianDangRiQi',
  100. 'chuShengRiQi',
  101. 'canJiaGongZuo',
  102. 'ruZhiShiJian',
  103. 'renZhiShiJian',
  104. 'kaiShiShiJian',
  105. 'jieShuShiJian',
  106. 'liZhiShiJian',
  107. 'faZhengShiJian'
  108. ]
  109. function toYmd(date) {
  110. const y = date.getFullYear()
  111. const m = String(date.getMonth() + 1).padStart(2, '0')
  112. const d = String(date.getDate()).padStart(2, '0')
  113. return `${y}-${m}-${d}`
  114. }
  115. /** 将时间戳 / Date 等非字符串日期转为 yyyy-MM-dd */
  116. function formatDraftDateValue(value) {
  117. if (value === undefined || value === null || value === '') {
  118. return value === null ? '' : value
  119. }
  120. if (typeof value === 'string') {
  121. const trimmed = value.trim()
  122. if (!trimmed) {
  123. return ''
  124. }
  125. if (/^\d{4}-\d{2}-\d{2}/.test(trimmed)) {
  126. return trimmed.substring(0, 10)
  127. }
  128. if (/^\d{10,13}$/.test(trimmed)) {
  129. return formatDraftDateValue(Number(trimmed))
  130. }
  131. const parsed = new Date(trimmed)
  132. if (!isNaN(parsed.getTime()) && trimmed.length >= 8) {
  133. return toYmd(parsed)
  134. }
  135. return trimmed
  136. }
  137. if (typeof value === 'number' && !Number.isNaN(value)) {
  138. let parsed
  139. if (value > 1e11) {
  140. parsed = new Date(value)
  141. } else if (value > 1e9) {
  142. parsed = new Date(value * 1000)
  143. }
  144. if (parsed && !isNaN(parsed.getTime())) {
  145. return toYmd(parsed)
  146. }
  147. return String(value)
  148. }
  149. if (value instanceof Date && !isNaN(value.getTime())) {
  150. return toYmd(value)
  151. }
  152. return ''
  153. }
  154. function normalizeDraftDateFields(result = {}) {
  155. draftDateFields.forEach((camelKey) => {
  156. const snakeKeys = Object.keys(draftSnakeToCamelMap).filter(
  157. (k) => draftSnakeToCamelMap[k] === camelKey
  158. )
  159. ;[camelKey, ...snakeKeys].forEach((key) => {
  160. if (
  161. result[key] !== undefined &&
  162. result[key] !== null &&
  163. result[key] !== ''
  164. ) {
  165. result[key] = formatDraftDateValue(result[key])
  166. }
  167. })
  168. if (result[camelKey] && snakeKeys.length) {
  169. snakeKeys.forEach((snakeKey) => {
  170. result[snakeKey] = result[camelKey]
  171. })
  172. }
  173. })
  174. if (
  175. result.nian_ling_ !== undefined &&
  176. result.nian_ling_ !== null &&
  177. result.nian_ling_ !== ''
  178. ) {
  179. const age = Number(result.nian_ling_)
  180. if (!Number.isNaN(age)) {
  181. result.nianLing = age
  182. }
  183. } else if (
  184. result.nianLing !== undefined &&
  185. result.nianLing !== null &&
  186. result.nianLing !== ''
  187. ) {
  188. const age = Number(result.nianLing)
  189. if (!Number.isNaN(age)) {
  190. result.nianLing = age
  191. }
  192. }
  193. return result
  194. }
  195. /** 将 query 返回的单行数据转为驼峰字段名 */
  196. export function normalizeDraftQueryRow(row = {}) {
  197. if (!row || typeof row !== 'object') {
  198. return row
  199. }
  200. const result = { ...row }
  201. Object.keys(draftSnakeToCamelMap).forEach((snakeKey) => {
  202. const camelKey = draftSnakeToCamelMap[snakeKey]
  203. if (
  204. result[snakeKey] !== undefined &&
  205. result[snakeKey] !== null &&
  206. (result[camelKey] === undefined || result[camelKey] === null || result[camelKey] === '')
  207. ) {
  208. result[camelKey] = result[snakeKey]
  209. }
  210. })
  211. if (result.id_ !== undefined && (result.id === undefined || result.id === '')) {
  212. result.id = result.id_
  213. }
  214. if (
  215. result.parent_id_ !== undefined &&
  216. (result.parentId === undefined || result.parentId === '')
  217. ) {
  218. result.parentId = result.parent_id_
  219. }
  220. return normalizeDraftDateFields(result)
  221. }
  222. /** 将 query 返回的多行数据转为驼峰字段名 */
  223. export function normalizeDraftQueryRows(rows = []) {
  224. return (rows || []).map((row) => normalizeDraftQueryRow(row))
  225. }
  226. function normalizeGzjlRowForPage(row = {}) {
  227. const normalized = { ...row }
  228. if (
  229. normalized.danWeiMingCheng !== undefined &&
  230. normalized.danWeiMingCheng !== null &&
  231. normalized.danWeiMingCheng !== ''
  232. ) {
  233. normalized.danWeiMingChen =
  234. normalized.danWeiMingChen || normalized.danWeiMingCheng
  235. } else if (
  236. normalized.danWeiMingChen !== undefined &&
  237. normalized.danWeiMingChen !== null &&
  238. normalized.danWeiMingChen !== ''
  239. ) {
  240. normalized.danWeiMingCheng =
  241. normalized.danWeiMingCheng || normalized.danWeiMingChen
  242. }
  243. return normalized
  244. }
  245. function hasDraftValue(val) {
  246. return val !== undefined && val !== null && val !== ''
  247. }
  248. function formatDraftFieldValue(camelKey, val) {
  249. if (!hasDraftValue(val)) {
  250. return ''
  251. }
  252. return draftDateFields.includes(camelKey) ? formatDraftDateValue(val) : val
  253. }
  254. /**
  255. * 读取 VO 字段值:优先同名属性,其次别名/下划线对应关系
  256. */
  257. function getDraftFieldValue(source = {}, camelKey) {
  258. if (hasDraftValue(source[camelKey])) {
  259. return formatDraftFieldValue(camelKey, source[camelKey])
  260. }
  261. const aliases = draftFieldAliasMap[camelKey] || []
  262. for (const alias of aliases) {
  263. if (hasDraftValue(source[alias])) {
  264. return formatDraftFieldValue(camelKey, source[alias])
  265. }
  266. }
  267. const snakeKeys = Object.keys(draftSnakeToCamelMap).filter(
  268. (k) => draftSnakeToCamelMap[k] === camelKey
  269. )
  270. for (const snakeKey of snakeKeys) {
  271. if (hasDraftValue(source[snakeKey])) {
  272. return formatDraftFieldValue(camelKey, source[snakeKey])
  273. }
  274. }
  275. return ''
  276. }
  277. function getDraftFieldValueFromSources(sources = [], camelKey) {
  278. for (const source of sources) {
  279. const val = getDraftFieldValue(source || {}, camelKey)
  280. if (val !== '') {
  281. return val
  282. }
  283. }
  284. return ''
  285. }
  286. const draftCommonChildFields = [
  287. 'id',
  288. 'parentId',
  289. 'shiFouGuoShen',
  290. 'diDian',
  291. 'bianZhiRen',
  292. 'bianZhiBuMen',
  293. 'bianZhiShiJian',
  294. 'kuaiZhao'
  295. ]
  296. const draftJbqkFields = [
  297. 'jianDangRiQi',
  298. 'nianLing',
  299. 'chuShengRiQi',
  300. 'zuiGaoXueLiX',
  301. 'yuanBiYeYuanXi',
  302. 'xianCongShiZhua',
  303. 'canJiaGongZuo',
  304. 'ruZhiShiJian',
  305. 'renZhiShiJian',
  306. 'xingZhengZhiWu',
  307. 'zhiChengDengJi',
  308. 'zhiCheng',
  309. 'shenFenZhengHao',
  310. 'renYuanLeiXing',
  311. 'baoMiXieYi',
  312. 'qianZiTuWen',
  313. 'chengNuoHan',
  314. 'sheBao',
  315. 'fuJian'
  316. ]
  317. const draftJyjlFields = [
  318. 'kaiShiShiJian',
  319. 'jieShuShiJian',
  320. 'xueXiao',
  321. 'zhuanYe',
  322. 'xueLiXueWei',
  323. 'fuJian'
  324. ]
  325. const draftGzjlFields = [
  326. 'ruZhiShiJian',
  327. 'liZhiShiJian',
  328. 'danWeiMingCheng',
  329. 'zhiWei',
  330. 'buMen',
  331. 'gongZuoNeiRong'
  332. ]
  333. const draftZsbFields = [
  334. 'zhengShuMingC',
  335. 'zhengJianHao',
  336. 'faZhengDanWei',
  337. 'faZhengShiJian',
  338. 'dangAnBaoCun',
  339. 'huoJiangZhengS'
  340. ]
  341. function pickFields(source = {}, fields = []) {
  342. const result = {}
  343. fields.forEach((key) => {
  344. result[key] = getDraftFieldValue(source, key)
  345. })
  346. return result
  347. }
  348. function toPlainObject(value) {
  349. if (value === undefined || value === null) {
  350. return value
  351. }
  352. try {
  353. return JSON.parse(JSON.stringify(value))
  354. } catch (error) {
  355. return { ...value }
  356. }
  357. }
  358. function toDraftVoString(val) {
  359. if (val === undefined || val === null) {
  360. return ''
  361. }
  362. return String(val)
  363. }
  364. function flattenFirstRowFields(rows = [], fields = []) {
  365. const result = {}
  366. fields.forEach((key) => {
  367. result[key] = rows.length ? toDraftVoString(rows[0][key]) : ''
  368. })
  369. return result
  370. }
  371. function buildDraftChildVoRow(
  372. item = {},
  373. parentId,
  374. mainMeta,
  375. businessFields,
  376. index,
  377. isNewDraft = false
  378. ) {
  379. const source = toPlainObject(item)
  380. const normalized = normalizeDraftQueryRow(source)
  381. const row = {}
  382. draftCommonChildFields.forEach((key) => {
  383. if (key === 'parentId') {
  384. row.parentId = toDraftVoString(
  385. parentId ||
  386. (isNewDraft ? '' : getDraftFieldValue(normalized, 'parentId')) ||
  387. ''
  388. )
  389. return
  390. }
  391. if (key === 'id') {
  392. row.id = toDraftVoString(
  393. isNewDraft ? '' : getDraftFieldValue(normalized, 'id')
  394. )
  395. return
  396. }
  397. const selfVal = getDraftFieldValue(normalized, key)
  398. row[key] = toDraftVoString(
  399. selfVal !== '' ? selfVal : getDraftFieldValue(mainMeta, key) || ''
  400. )
  401. })
  402. businessFields.forEach((key) => {
  403. row[key] = toDraftVoString(getDraftFieldValue(normalized, key))
  404. })
  405. row.$index = index
  406. return row
  407. }
  408. function mapDraftChildRow(
  409. item = {},
  410. parentId,
  411. mainMeta,
  412. fields,
  413. index = 0,
  414. isNewDraft = false
  415. ) {
  416. return buildDraftChildVoRow(
  417. item,
  418. parentId,
  419. mainMeta,
  420. fields,
  421. index,
  422. isNewDraft
  423. )
  424. }
  425. function normalizeJbqkRow(row = {}) {
  426. const normalized = { ...row }
  427. if (normalized.fuJian !== undefined && normalized.fuJian !== '') {
  428. normalized.fujIan = normalized.fuJian
  429. } else if (normalized.fujIan !== undefined && normalized.fujIan !== '') {
  430. normalized.fuJian = normalized.fujIan
  431. }
  432. return normalized
  433. }
  434. export { normalizeJbqkRow }
  435. function hasDraftFieldValues(row = {}, fields = []) {
  436. return fields.some(
  437. (key) => row[key] !== undefined && row[key] !== null && row[key] !== ''
  438. )
  439. }
  440. /**
  441. * 将 VO / 暂存表查询结果转为页面 personInfoData 子表结构
  442. */
  443. export function parseDraftVoToPageData(voData = {}) {
  444. const normalizedVo = normalizeDraftQueryRow(voData)
  445. let jbqkList = (voData.jbqkxxzc || []).map((row) =>
  446. normalizeJbqkRow(normalizeDraftQueryRow(row))
  447. )
  448. let jyjlList = (voData.jyjlzc || []).map((row) => normalizeDraftQueryRow(row))
  449. let gzjlList = (voData.gzjlzc || []).map((row) =>
  450. normalizeGzjlRowForPage(normalizeDraftQueryRow(row))
  451. )
  452. let zsbList = (voData.zsbzc || []).map((row) => normalizeDraftQueryRow(row))
  453. if (!jbqkList.length || !hasDraftFieldValues(jbqkList[0], draftJbqkFields)) {
  454. const fromRoot = normalizeJbqkRow({
  455. ...(jbqkList[0] || {}),
  456. ...pickFields(normalizedVo, draftJbqkFields),
  457. parentId:
  458. jbqkList[0]?.parentId || normalizedVo.id || normalizedVo.id_ || ''
  459. })
  460. if (hasDraftFieldValues(fromRoot, draftJbqkFields)) {
  461. jbqkList = [fromRoot]
  462. }
  463. }
  464. if (!jyjlList.length || !hasDraftFieldValues(jyjlList[0], draftJyjlFields)) {
  465. const fromRoot = {
  466. ...(jyjlList[0] || {}),
  467. ...pickFields(normalizedVo, draftJyjlFields),
  468. parentId:
  469. jyjlList[0]?.parentId || normalizedVo.id || normalizedVo.id_ || ''
  470. }
  471. if (hasDraftFieldValues(fromRoot, draftJyjlFields)) {
  472. jyjlList = [fromRoot]
  473. }
  474. }
  475. if (!gzjlList.length || !hasDraftFieldValues(gzjlList[0], draftGzjlFields)) {
  476. const fromRoot = normalizeGzjlRowForPage({
  477. ...(gzjlList[0] || {}),
  478. ...pickFields(normalizedVo, draftGzjlFields),
  479. parentId:
  480. gzjlList[0]?.parentId || normalizedVo.id || normalizedVo.id_ || ''
  481. })
  482. if (hasDraftFieldValues(fromRoot, draftGzjlFields)) {
  483. gzjlList = [fromRoot]
  484. }
  485. }
  486. if (!zsbList.length || !hasDraftFieldValues(zsbList[0], draftZsbFields)) {
  487. const fromRoot = {
  488. ...(zsbList[0] || {}),
  489. ...pickFields(normalizedVo, draftZsbFields),
  490. parentId:
  491. zsbList[0]?.parentId || normalizedVo.id || normalizedVo.id_ || ''
  492. }
  493. if (hasDraftFieldValues(fromRoot, draftZsbFields)) {
  494. zsbList = [fromRoot]
  495. }
  496. }
  497. return {
  498. ryjbqkInfoPoList: jbqkList,
  499. educationInfoPoList: jyjlList,
  500. workInfoPoList: gzjlList,
  501. certificateInfoPoList: zsbList
  502. }
  503. }
  504. /**
  505. * VO 字段 → 页面别名字段(同名优先,此处为次级对应关系)
  506. */
  507. export const draftFieldAliasMap = {
  508. fuJian: ['fujIan'],
  509. danWeiMingCheng: ['danWeiMingChen']
  510. }
  511. /**
  512. * 页面 personInfoData 子表 → VO 子表字段名
  513. */
  514. export const pageToDraftChildMap = {
  515. ryjbqkInfoPoList: 'jbqkxxzc',
  516. educationInfoPoList: 'jyjlzc',
  517. workInfoPoList: 'gzjlzc',
  518. certificateInfoPoList: 'zsbzc'
  519. }
  520. const draftPersonHeaderFields = [
  521. 'name',
  522. 'jianDingZiGeZ',
  523. 'gender',
  524. 'mobile',
  525. 'email',
  526. 'photo',
  527. 'status'
  528. ]
  529. function buildPersonHeaderSnapshot(data = {}) {
  530. const snapshot = {}
  531. draftPersonHeaderFields.forEach((key) => {
  532. const val = data[key]
  533. if (val !== undefined && val !== null && val !== '') {
  534. snapshot[key] = val
  535. }
  536. })
  537. if (!Object.keys(snapshot).length) {
  538. return data.kuaiZhao || ''
  539. }
  540. try {
  541. return JSON.stringify(snapshot)
  542. } catch (error) {
  543. return data.kuaiZhao || ''
  544. }
  545. }
  546. export function parsePersonHeaderSnapshot(kuaiZhao = '') {
  547. if (!kuaiZhao || typeof kuaiZhao !== 'string') {
  548. return {}
  549. }
  550. const trimmed = kuaiZhao.trim()
  551. if (!trimmed.startsWith('{')) {
  552. return {}
  553. }
  554. try {
  555. const parsed = JSON.parse(trimmed)
  556. return parsed && typeof parsed === 'object' ? parsed : {}
  557. } catch (error) {
  558. return {}
  559. }
  560. }
  561. /**
  562. * 将页面 personInfoData 转为 saveFormData/vo 所需 data 结构
  563. */
  564. export function buildDraftVoData(data = {}, options = {}) {
  565. return buildDraftFormData({
  566. ...options,
  567. personInfoData: data
  568. })
  569. }
  570. /**
  571. * 组装 saveFormData/vo 的 data 字段
  572. * 结构:
  573. * {
  574. * id, shiFouGuoShen, diDian, bianZhiRen, bianZhiBuMen, bianZhiShiJian, kuaiZhao, zhuangTai, renYuan,
  575. * jbqkxxzc: [...], jyjlzc: [...], gzjlzc: [...], zsbzc: [...],
  576. * ...jbqk/jyjl/gzjl/zsb 首行字段平铺
  577. * }
  578. */
  579. export function buildDraftFormData({
  580. draftMainId = '',
  581. renYuan = '',
  582. personInfoData = {},
  583. userId = '',
  584. zhuangTai = '已暂存'
  585. }) {
  586. const safePersonInfoData =
  587. personInfoData && typeof personInfoData === 'object' ? personInfoData : {}
  588. const jbqkSrc = safePersonInfoData.ryjbqkInfoPoList?.[0] || {}
  589. const jyjlSrc = safePersonInfoData.educationInfoPoList || []
  590. const gzjlSrc = safePersonInfoData.workInfoPoList || []
  591. const zsbSrc = safePersonInfoData.certificateInfoPoList || []
  592. const parentId = draftMainId || ''
  593. const isNewDraft = !parentId
  594. const mainMeta = {
  595. shiFouGuoShen: getDraftFieldValueFromSources(
  596. [jbqkSrc, safePersonInfoData],
  597. 'shiFouGuoShen'
  598. ),
  599. diDian: getDraftFieldValueFromSources(
  600. [safePersonInfoData, jbqkSrc],
  601. 'diDian'
  602. ),
  603. bianZhiRen:
  604. getDraftFieldValueFromSources(
  605. [safePersonInfoData, jbqkSrc],
  606. 'bianZhiRen'
  607. ) ||
  608. userId ||
  609. '',
  610. bianZhiBuMen: getDraftFieldValueFromSources(
  611. [safePersonInfoData, jbqkSrc],
  612. 'bianZhiBuMen'
  613. ),
  614. bianZhiShiJian: getDraftFieldValueFromSources(
  615. [safePersonInfoData, jbqkSrc],
  616. 'bianZhiShiJian'
  617. ),
  618. kuaiZhao: getDraftFieldValueFromSources(
  619. [safePersonInfoData, jbqkSrc],
  620. 'kuaiZhao'
  621. )
  622. }
  623. const jbqkxxzc = safePersonInfoData.ryjbqkInfoPoList?.length
  624. ? [
  625. buildDraftChildVoRow(
  626. jbqkSrc,
  627. parentId,
  628. mainMeta,
  629. draftJbqkFields,
  630. 0,
  631. isNewDraft
  632. )
  633. ]
  634. : []
  635. const jyjlzc = jyjlSrc.map((item, index) =>
  636. buildDraftChildVoRow(
  637. item,
  638. parentId,
  639. mainMeta,
  640. draftJyjlFields,
  641. index,
  642. isNewDraft
  643. )
  644. )
  645. const gzjlzc = gzjlSrc.map((item, index) =>
  646. buildDraftChildVoRow(
  647. item,
  648. parentId,
  649. mainMeta,
  650. draftGzjlFields,
  651. index,
  652. isNewDraft
  653. )
  654. )
  655. const zsbzc = zsbSrc.map((item, index) =>
  656. buildDraftChildVoRow(
  657. item,
  658. parentId,
  659. mainMeta,
  660. draftZsbFields,
  661. index,
  662. isNewDraft
  663. )
  664. )
  665. return {
  666. id: toDraftVoString(parentId),
  667. shiFouGuoShen: toDraftVoString(mainMeta.shiFouGuoShen),
  668. diDian: toDraftVoString(mainMeta.diDian),
  669. bianZhiRen: toDraftVoString(mainMeta.bianZhiRen),
  670. bianZhiBuMen: toDraftVoString(mainMeta.bianZhiBuMen),
  671. bianZhiShiJian: toDraftVoString(mainMeta.bianZhiShiJian),
  672. kuaiZhao: toDraftVoString(mainMeta.kuaiZhao),
  673. zhuangTai: toDraftVoString(zhuangTai),
  674. renYuan: toDraftVoString(renYuan),
  675. jbqkxxzc,
  676. jyjlzc,
  677. gzjlzc,
  678. zsbzc,
  679. ...flattenFirstRowFields(jbqkxxzc, draftJbqkFields),
  680. ...flattenFirstRowFields(jyjlzc, draftJyjlFields),
  681. ...flattenFirstRowFields(gzjlzc, draftGzjlFields),
  682. ...flattenFirstRowFields(zsbzc, draftZsbFields)
  683. }
  684. }
  685. /** 暂存相关表名 */
  686. export const draftTableNames = {
  687. main: 't_rydazcxxb',
  688. jbqk: 't_jbqkxxzc',
  689. jyjl: 't_jyjlzc',
  690. gzjl: 't_gzjlzc',
  691. zsb: 't_zsbzc'
  692. }
  693. /**
  694. * 构建提交后更新暂存主表状态的 update 参数
  695. */
  696. export function buildDraftSubmittedUpdateParams(
  697. parentId = '',
  698. zhuangTai = '已提交'
  699. ) {
  700. if (!parentId) {
  701. return []
  702. }
  703. return [
  704. {
  705. tableName: draftTableNames.main,
  706. updList: [
  707. {
  708. where: { id_: parentId },
  709. param: { zhuang_tai_: zhuangTai }
  710. }
  711. ]
  712. }
  713. ]
  714. }
  715. export default {
  716. draftQueryKeys,
  717. draftQuerySql,
  718. draftChildQueryKeys,
  719. draftTableNames,
  720. draftFormKey,
  721. draftBoCode,
  722. pageToDraftChildMap,
  723. draftFieldAliasMap,
  724. buildDraftVoData,
  725. buildDraftFormData,
  726. buildDraftSubmittedUpdateParams,
  727. parseDraftVoToPageData,
  728. parsePersonHeaderSnapshot,
  729. normalizeJbqkRow,
  730. draftSnakeToCamelMap,
  731. normalizeDraftQueryRow,
  732. normalizeDraftQueryRows
  733. }