|
|
@@ -0,0 +1,779 @@
|
|
|
+/**
|
|
|
+ * 人员档案暂存查询 key 及对应 SQL
|
|
|
+ * 需在后台通用查询脚本中配置相同 key
|
|
|
+ */
|
|
|
+export const draftQueryKeys = {
|
|
|
+ main: 'getRydaZcxxbByRenYuan',
|
|
|
+ jbqk: 'getRydaJbqkzcByParentId',
|
|
|
+ jyjl: 'getRydaJyjlzcByParentId',
|
|
|
+ gzjl: 'getRydaGzjlzcByParentId',
|
|
|
+ zsb: 'getRydaZsbzcByParentId'
|
|
|
+}
|
|
|
+
|
|
|
+export const draftQuerySql = {
|
|
|
+ // params: [renYuan, zhuangTai]
|
|
|
+ [draftQueryKeys.main]:
|
|
|
+ 'SELECT * FROM t_rydazcxxb WHERE renYuan = ? AND zhuangTai = ? ORDER BY create_time_ DESC LIMIT 1',
|
|
|
+ // params: [parentId]
|
|
|
+ [draftQueryKeys.jbqk]: 'SELECT * FROM t_jbqkxxzc WHERE parentId = ?',
|
|
|
+ [draftQueryKeys.jyjl]:
|
|
|
+ 'SELECT * FROM t_jyjlzc WHERE parentId = ? ORDER BY create_time_ ASC',
|
|
|
+ [draftQueryKeys.gzjl]:
|
|
|
+ 'SELECT * FROM t_gzjlzc WHERE parentId = ? ORDER BY create_time_ ASC',
|
|
|
+ [draftQueryKeys.zsb]:
|
|
|
+ 'SELECT * FROM t_zsbzc WHERE parentId = ? ORDER BY create_time_ ASC'
|
|
|
+}
|
|
|
+
|
|
|
+export const draftChildQueryKeys = {
|
|
|
+ t_jbqkxxzc: draftQueryKeys.jbqk,
|
|
|
+ t_jyjlzc: draftQueryKeys.jyjl,
|
|
|
+ t_gzjlzc: draftQueryKeys.gzjl,
|
|
|
+ t_zsbzc: draftQueryKeys.zsb
|
|
|
+}
|
|
|
+
|
|
|
+/** 暂存表单 formKey */
|
|
|
+export const draftFormKey = 'rydazcljgxbdqddmsy'
|
|
|
+
|
|
|
+/** 暂存表单 boCode */
|
|
|
+export const draftBoCode = 'rydazcxxb'
|
|
|
+
|
|
|
+/**
|
|
|
+ * 查询结果下划线字段 → 代码驼峰字段
|
|
|
+ * (与 BO / 数据库列名一致)
|
|
|
+ */
|
|
|
+export const draftSnakeToCamelMap = {
|
|
|
+ zhuang_tai_: 'zhuangTai',
|
|
|
+ ren_yuan_: 'renYuan',
|
|
|
+ parent_id_: 'parentId',
|
|
|
+ shi_fou_guo_shen_: 'shiFouGuoShen',
|
|
|
+ di_dian_: 'diDian',
|
|
|
+ bian_zhi_ren_: 'bianZhiRen',
|
|
|
+ bian_zhi_bu_men_: 'bianZhiBuMen',
|
|
|
+ bian_zhi_shi_jian_: 'bianZhiShiJian',
|
|
|
+ kuai_zhao_: 'kuaiZhao',
|
|
|
+ jian_dang_ri_qi_: 'jianDangRiQi',
|
|
|
+ nian_ling_: 'nianLing',
|
|
|
+ chu_sheng_ri_qi_: 'chuShengRiQi',
|
|
|
+ zui_gao_xue_li_x_: 'zuiGaoXueLiX',
|
|
|
+ yuan_bi_ye_yuan_x: 'yuanBiYeYuanXi',
|
|
|
+ yuan_bi_ye_yuan_xi_: 'yuanBiYeYuanXi',
|
|
|
+ xian_cong_shi_zhu: 'xianCongShiZhua',
|
|
|
+ xian_cong_shi_zhua_: 'xianCongShiZhua',
|
|
|
+ can_jia_gong_zuo: 'canJiaGongZuo',
|
|
|
+ can_jia_gong_zuo_: 'canJiaGongZuo',
|
|
|
+ ru_zhi_shi_jian_: 'ruZhiShiJian',
|
|
|
+ ren_zhi_shi_jian_: 'renZhiShiJian',
|
|
|
+ xing_zheng_zhi_wu: 'xingZhengZhiWu',
|
|
|
+ xing_zheng_zhi_wu_: 'xingZhengZhiWu',
|
|
|
+ zhi_cheng_deng_ji: 'zhiChengDengJi',
|
|
|
+ zhi_cheng_deng_ji_: 'zhiChengDengJi',
|
|
|
+ zhi_cheng_: 'zhiCheng',
|
|
|
+ shen_fen_zheng_ha: 'shenFenZhengHao',
|
|
|
+ shen_fen_zheng_hao_: 'shenFenZhengHao',
|
|
|
+ ren_yuan_lei_xing: 'renYuanLeiXing',
|
|
|
+ ren_yuan_lei_xing_: 'renYuanLeiXing',
|
|
|
+ bao_mi_xie_yi_: 'baoMiXieYi',
|
|
|
+ qian_zi_tu_wen_: 'qianZiTuWen',
|
|
|
+ cheng_nuo_han_: 'chengNuoHan',
|
|
|
+ she_bao_: 'sheBao',
|
|
|
+ fu_jian_: 'fuJian',
|
|
|
+ kai_shi_shi_jian_: 'kaiShiShiJian',
|
|
|
+ jie_shu_shi_jian_: 'jieShuShiJian',
|
|
|
+ xue_xiao_: 'xueXiao',
|
|
|
+ zhuan_ye_: 'zhuanYe',
|
|
|
+ xue_li_xue_wei_: 'xueLiXueWei',
|
|
|
+ li_zhi_shi_jian_: 'liZhiShiJian',
|
|
|
+ dan_wei_ming_chen: 'danWeiMingCheng',
|
|
|
+ dan_wei_ming_cheng_: 'danWeiMingCheng',
|
|
|
+ zhi_wei_: 'zhiWei',
|
|
|
+ bu_men_: 'buMen',
|
|
|
+ gong_zuo_nei_rong: 'gongZuoNeiRong',
|
|
|
+ gong_zuo_nei_rong_: 'gongZuoNeiRong',
|
|
|
+ zheng_shu_ming_c_: 'zhengShuMingC',
|
|
|
+ zheng_jian_hao_: 'zhengJianHao',
|
|
|
+ fa_zheng_dan_wei_: 'faZhengDanWei',
|
|
|
+ fa_zheng_shi_jian: 'faZhengShiJian',
|
|
|
+ fa_zheng_shi_jian_: 'faZhengShiJian',
|
|
|
+ dang_an_bao_cun_: 'dangAnBaoCun',
|
|
|
+ huo_jiang_zheng_s: 'huoJiangZhengS',
|
|
|
+ huo_jiang_zheng_s_: 'huoJiangZhengS'
|
|
|
+}
|
|
|
+
|
|
|
+/** 日期类字段(el-date-picker 需要 yyyy-MM-dd 字符串) */
|
|
|
+const draftDateFields = [
|
|
|
+ 'bianZhiShiJian',
|
|
|
+ 'jianDangRiQi',
|
|
|
+ 'chuShengRiQi',
|
|
|
+ 'canJiaGongZuo',
|
|
|
+ 'ruZhiShiJian',
|
|
|
+ 'renZhiShiJian',
|
|
|
+ 'kaiShiShiJian',
|
|
|
+ 'jieShuShiJian',
|
|
|
+ 'liZhiShiJian',
|
|
|
+ 'faZhengShiJian'
|
|
|
+]
|
|
|
+
|
|
|
+function toYmd(date) {
|
|
|
+ const y = date.getFullYear()
|
|
|
+ const m = String(date.getMonth() + 1).padStart(2, '0')
|
|
|
+ const d = String(date.getDate()).padStart(2, '0')
|
|
|
+ return `${y}-${m}-${d}`
|
|
|
+}
|
|
|
+
|
|
|
+/** 将时间戳 / Date 等非字符串日期转为 yyyy-MM-dd */
|
|
|
+function formatDraftDateValue(value) {
|
|
|
+ if (value === undefined || value === null || value === '') {
|
|
|
+ return value === null ? '' : value
|
|
|
+ }
|
|
|
+ if (typeof value === 'string') {
|
|
|
+ const trimmed = value.trim()
|
|
|
+ if (!trimmed) {
|
|
|
+ return ''
|
|
|
+ }
|
|
|
+ if (/^\d{4}-\d{2}-\d{2}/.test(trimmed)) {
|
|
|
+ return trimmed.substring(0, 10)
|
|
|
+ }
|
|
|
+ if (/^\d{10,13}$/.test(trimmed)) {
|
|
|
+ return formatDraftDateValue(Number(trimmed))
|
|
|
+ }
|
|
|
+ const parsed = new Date(trimmed)
|
|
|
+ if (!isNaN(parsed.getTime()) && trimmed.length >= 8) {
|
|
|
+ return toYmd(parsed)
|
|
|
+ }
|
|
|
+ return trimmed
|
|
|
+ }
|
|
|
+ if (typeof value === 'number' && !Number.isNaN(value)) {
|
|
|
+ let parsed
|
|
|
+ if (value > 1e11) {
|
|
|
+ parsed = new Date(value)
|
|
|
+ } else if (value > 1e9) {
|
|
|
+ parsed = new Date(value * 1000)
|
|
|
+ }
|
|
|
+ if (parsed && !isNaN(parsed.getTime())) {
|
|
|
+ return toYmd(parsed)
|
|
|
+ }
|
|
|
+ return String(value)
|
|
|
+ }
|
|
|
+ if (value instanceof Date && !isNaN(value.getTime())) {
|
|
|
+ return toYmd(value)
|
|
|
+ }
|
|
|
+ return ''
|
|
|
+}
|
|
|
+
|
|
|
+function normalizeDraftDateFields(result = {}) {
|
|
|
+ draftDateFields.forEach((camelKey) => {
|
|
|
+ const snakeKeys = Object.keys(draftSnakeToCamelMap).filter(
|
|
|
+ (k) => draftSnakeToCamelMap[k] === camelKey
|
|
|
+ )
|
|
|
+ ;[camelKey, ...snakeKeys].forEach((key) => {
|
|
|
+ if (
|
|
|
+ result[key] !== undefined &&
|
|
|
+ result[key] !== null &&
|
|
|
+ result[key] !== ''
|
|
|
+ ) {
|
|
|
+ result[key] = formatDraftDateValue(result[key])
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (result[camelKey] && snakeKeys.length) {
|
|
|
+ snakeKeys.forEach((snakeKey) => {
|
|
|
+ result[snakeKey] = result[camelKey]
|
|
|
+ })
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (
|
|
|
+ result.nian_ling_ !== undefined &&
|
|
|
+ result.nian_ling_ !== null &&
|
|
|
+ result.nian_ling_ !== ''
|
|
|
+ ) {
|
|
|
+ const age = Number(result.nian_ling_)
|
|
|
+ if (!Number.isNaN(age)) {
|
|
|
+ result.nianLing = age
|
|
|
+ }
|
|
|
+ } else if (
|
|
|
+ result.nianLing !== undefined &&
|
|
|
+ result.nianLing !== null &&
|
|
|
+ result.nianLing !== ''
|
|
|
+ ) {
|
|
|
+ const age = Number(result.nianLing)
|
|
|
+ if (!Number.isNaN(age)) {
|
|
|
+ result.nianLing = age
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result
|
|
|
+}
|
|
|
+
|
|
|
+/** 将 query 返回的单行数据转为驼峰字段名 */
|
|
|
+export function normalizeDraftQueryRow(row = {}) {
|
|
|
+ if (!row || typeof row !== 'object') {
|
|
|
+ return row
|
|
|
+ }
|
|
|
+ const result = { ...row }
|
|
|
+ Object.keys(draftSnakeToCamelMap).forEach((snakeKey) => {
|
|
|
+ const camelKey = draftSnakeToCamelMap[snakeKey]
|
|
|
+ if (
|
|
|
+ result[snakeKey] !== undefined &&
|
|
|
+ result[snakeKey] !== null &&
|
|
|
+ (result[camelKey] === undefined || result[camelKey] === null || result[camelKey] === '')
|
|
|
+ ) {
|
|
|
+ result[camelKey] = result[snakeKey]
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (result.id_ !== undefined && (result.id === undefined || result.id === '')) {
|
|
|
+ result.id = result.id_
|
|
|
+ }
|
|
|
+ if (
|
|
|
+ result.parent_id_ !== undefined &&
|
|
|
+ (result.parentId === undefined || result.parentId === '')
|
|
|
+ ) {
|
|
|
+ result.parentId = result.parent_id_
|
|
|
+ }
|
|
|
+ return normalizeDraftDateFields(result)
|
|
|
+}
|
|
|
+
|
|
|
+/** 将 query 返回的多行数据转为驼峰字段名 */
|
|
|
+export function normalizeDraftQueryRows(rows = []) {
|
|
|
+ return (rows || []).map((row) => normalizeDraftQueryRow(row))
|
|
|
+}
|
|
|
+
|
|
|
+function normalizeGzjlRowForPage(row = {}) {
|
|
|
+ const normalized = { ...row }
|
|
|
+ if (
|
|
|
+ normalized.danWeiMingCheng !== undefined &&
|
|
|
+ normalized.danWeiMingCheng !== null &&
|
|
|
+ normalized.danWeiMingCheng !== ''
|
|
|
+ ) {
|
|
|
+ normalized.danWeiMingChen =
|
|
|
+ normalized.danWeiMingChen || normalized.danWeiMingCheng
|
|
|
+ } else if (
|
|
|
+ normalized.danWeiMingChen !== undefined &&
|
|
|
+ normalized.danWeiMingChen !== null &&
|
|
|
+ normalized.danWeiMingChen !== ''
|
|
|
+ ) {
|
|
|
+ normalized.danWeiMingCheng =
|
|
|
+ normalized.danWeiMingCheng || normalized.danWeiMingChen
|
|
|
+ }
|
|
|
+ return normalized
|
|
|
+}
|
|
|
+
|
|
|
+function hasDraftValue(val) {
|
|
|
+ return val !== undefined && val !== null && val !== ''
|
|
|
+}
|
|
|
+
|
|
|
+function formatDraftFieldValue(camelKey, val) {
|
|
|
+ if (!hasDraftValue(val)) {
|
|
|
+ return ''
|
|
|
+ }
|
|
|
+ return draftDateFields.includes(camelKey) ? formatDraftDateValue(val) : val
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 读取 VO 字段值:优先同名属性,其次别名/下划线对应关系
|
|
|
+ */
|
|
|
+function getDraftFieldValue(source = {}, camelKey) {
|
|
|
+ if (hasDraftValue(source[camelKey])) {
|
|
|
+ return formatDraftFieldValue(camelKey, source[camelKey])
|
|
|
+ }
|
|
|
+ const aliases = draftFieldAliasMap[camelKey] || []
|
|
|
+ for (const alias of aliases) {
|
|
|
+ if (hasDraftValue(source[alias])) {
|
|
|
+ return formatDraftFieldValue(camelKey, source[alias])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ const snakeKeys = Object.keys(draftSnakeToCamelMap).filter(
|
|
|
+ (k) => draftSnakeToCamelMap[k] === camelKey
|
|
|
+ )
|
|
|
+ for (const snakeKey of snakeKeys) {
|
|
|
+ if (hasDraftValue(source[snakeKey])) {
|
|
|
+ return formatDraftFieldValue(camelKey, source[snakeKey])
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ''
|
|
|
+}
|
|
|
+
|
|
|
+function getDraftFieldValueFromSources(sources = [], camelKey) {
|
|
|
+ for (const source of sources) {
|
|
|
+ const val = getDraftFieldValue(source || {}, camelKey)
|
|
|
+ if (val !== '') {
|
|
|
+ return val
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return ''
|
|
|
+}
|
|
|
+
|
|
|
+const draftCommonChildFields = [
|
|
|
+ 'id',
|
|
|
+ 'parentId',
|
|
|
+ 'shiFouGuoShen',
|
|
|
+ 'diDian',
|
|
|
+ 'bianZhiRen',
|
|
|
+ 'bianZhiBuMen',
|
|
|
+ 'bianZhiShiJian',
|
|
|
+ 'kuaiZhao'
|
|
|
+]
|
|
|
+
|
|
|
+const draftJbqkFields = [
|
|
|
+ 'jianDangRiQi',
|
|
|
+ 'nianLing',
|
|
|
+ 'chuShengRiQi',
|
|
|
+ 'zuiGaoXueLiX',
|
|
|
+ 'yuanBiYeYuanXi',
|
|
|
+ 'xianCongShiZhua',
|
|
|
+ 'canJiaGongZuo',
|
|
|
+ 'ruZhiShiJian',
|
|
|
+ 'renZhiShiJian',
|
|
|
+ 'xingZhengZhiWu',
|
|
|
+ 'zhiChengDengJi',
|
|
|
+ 'zhiCheng',
|
|
|
+ 'shenFenZhengHao',
|
|
|
+ 'renYuanLeiXing',
|
|
|
+ 'baoMiXieYi',
|
|
|
+ 'qianZiTuWen',
|
|
|
+ 'chengNuoHan',
|
|
|
+ 'sheBao',
|
|
|
+ 'fuJian'
|
|
|
+]
|
|
|
+
|
|
|
+const draftJyjlFields = [
|
|
|
+ 'kaiShiShiJian',
|
|
|
+ 'jieShuShiJian',
|
|
|
+ 'xueXiao',
|
|
|
+ 'zhuanYe',
|
|
|
+ 'xueLiXueWei',
|
|
|
+ 'fuJian'
|
|
|
+]
|
|
|
+
|
|
|
+const draftGzjlFields = [
|
|
|
+ 'ruZhiShiJian',
|
|
|
+ 'liZhiShiJian',
|
|
|
+ 'danWeiMingCheng',
|
|
|
+ 'zhiWei',
|
|
|
+ 'buMen',
|
|
|
+ 'gongZuoNeiRong'
|
|
|
+]
|
|
|
+
|
|
|
+const draftZsbFields = [
|
|
|
+ 'zhengShuMingC',
|
|
|
+ 'zhengJianHao',
|
|
|
+ 'faZhengDanWei',
|
|
|
+ 'faZhengShiJian',
|
|
|
+ 'dangAnBaoCun',
|
|
|
+ 'huoJiangZhengS'
|
|
|
+]
|
|
|
+
|
|
|
+function pickFields(source = {}, fields = []) {
|
|
|
+ const result = {}
|
|
|
+ fields.forEach((key) => {
|
|
|
+ result[key] = getDraftFieldValue(source, key)
|
|
|
+ })
|
|
|
+ return result
|
|
|
+}
|
|
|
+
|
|
|
+function toPlainObject(value) {
|
|
|
+ if (value === undefined || value === null) {
|
|
|
+ return value
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ return JSON.parse(JSON.stringify(value))
|
|
|
+ } catch (error) {
|
|
|
+ return { ...value }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function toDraftVoString(val) {
|
|
|
+ if (val === undefined || val === null) {
|
|
|
+ return ''
|
|
|
+ }
|
|
|
+ return String(val)
|
|
|
+}
|
|
|
+
|
|
|
+function flattenFirstRowFields(rows = [], fields = []) {
|
|
|
+ const result = {}
|
|
|
+ fields.forEach((key) => {
|
|
|
+ result[key] = rows.length ? toDraftVoString(rows[0][key]) : ''
|
|
|
+ })
|
|
|
+ return result
|
|
|
+}
|
|
|
+
|
|
|
+function buildDraftChildVoRow(
|
|
|
+ item = {},
|
|
|
+ parentId,
|
|
|
+ mainMeta,
|
|
|
+ businessFields,
|
|
|
+ index,
|
|
|
+ isNewDraft = false
|
|
|
+) {
|
|
|
+ const source = toPlainObject(item)
|
|
|
+ const normalized = normalizeDraftQueryRow(source)
|
|
|
+ const row = {}
|
|
|
+ draftCommonChildFields.forEach((key) => {
|
|
|
+ if (key === 'parentId') {
|
|
|
+ row.parentId = toDraftVoString(
|
|
|
+ parentId ||
|
|
|
+ (isNewDraft ? '' : getDraftFieldValue(normalized, 'parentId')) ||
|
|
|
+ ''
|
|
|
+ )
|
|
|
+ return
|
|
|
+ }
|
|
|
+ if (key === 'id') {
|
|
|
+ row.id = toDraftVoString(
|
|
|
+ isNewDraft ? '' : getDraftFieldValue(normalized, 'id')
|
|
|
+ )
|
|
|
+ return
|
|
|
+ }
|
|
|
+ const selfVal = getDraftFieldValue(normalized, key)
|
|
|
+ row[key] = toDraftVoString(
|
|
|
+ selfVal !== '' ? selfVal : getDraftFieldValue(mainMeta, key) || ''
|
|
|
+ )
|
|
|
+ })
|
|
|
+ businessFields.forEach((key) => {
|
|
|
+ row[key] = toDraftVoString(getDraftFieldValue(normalized, key))
|
|
|
+ })
|
|
|
+ row.$index = index
|
|
|
+ return row
|
|
|
+}
|
|
|
+
|
|
|
+function mapDraftChildRow(
|
|
|
+ item = {},
|
|
|
+ parentId,
|
|
|
+ mainMeta,
|
|
|
+ fields,
|
|
|
+ index = 0,
|
|
|
+ isNewDraft = false
|
|
|
+) {
|
|
|
+ return buildDraftChildVoRow(
|
|
|
+ item,
|
|
|
+ parentId,
|
|
|
+ mainMeta,
|
|
|
+ fields,
|
|
|
+ index,
|
|
|
+ isNewDraft
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
+function normalizeJbqkRow(row = {}) {
|
|
|
+ const normalized = { ...row }
|
|
|
+ if (normalized.fuJian !== undefined && normalized.fuJian !== '') {
|
|
|
+ normalized.fujIan = normalized.fuJian
|
|
|
+ } else if (normalized.fujIan !== undefined && normalized.fujIan !== '') {
|
|
|
+ normalized.fuJian = normalized.fujIan
|
|
|
+ }
|
|
|
+ return normalized
|
|
|
+}
|
|
|
+
|
|
|
+export { normalizeJbqkRow }
|
|
|
+
|
|
|
+function hasDraftFieldValues(row = {}, fields = []) {
|
|
|
+ return fields.some(
|
|
|
+ (key) => row[key] !== undefined && row[key] !== null && row[key] !== ''
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 将 VO / 暂存表查询结果转为页面 personInfoData 子表结构
|
|
|
+ */
|
|
|
+export function parseDraftVoToPageData(voData = {}) {
|
|
|
+ const normalizedVo = normalizeDraftQueryRow(voData)
|
|
|
+ let jbqkList = (voData.jbqkxxzc || []).map((row) =>
|
|
|
+ normalizeJbqkRow(normalizeDraftQueryRow(row))
|
|
|
+ )
|
|
|
+ let jyjlList = (voData.jyjlzc || []).map((row) => normalizeDraftQueryRow(row))
|
|
|
+ let gzjlList = (voData.gzjlzc || []).map((row) =>
|
|
|
+ normalizeGzjlRowForPage(normalizeDraftQueryRow(row))
|
|
|
+ )
|
|
|
+ let zsbList = (voData.zsbzc || []).map((row) => normalizeDraftQueryRow(row))
|
|
|
+
|
|
|
+ if (!jbqkList.length || !hasDraftFieldValues(jbqkList[0], draftJbqkFields)) {
|
|
|
+ const fromRoot = normalizeJbqkRow({
|
|
|
+ ...(jbqkList[0] || {}),
|
|
|
+ ...pickFields(normalizedVo, draftJbqkFields),
|
|
|
+ parentId:
|
|
|
+ jbqkList[0]?.parentId || normalizedVo.id || normalizedVo.id_ || ''
|
|
|
+ })
|
|
|
+ if (hasDraftFieldValues(fromRoot, draftJbqkFields)) {
|
|
|
+ jbqkList = [fromRoot]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!jyjlList.length || !hasDraftFieldValues(jyjlList[0], draftJyjlFields)) {
|
|
|
+ const fromRoot = {
|
|
|
+ ...(jyjlList[0] || {}),
|
|
|
+ ...pickFields(normalizedVo, draftJyjlFields),
|
|
|
+ parentId:
|
|
|
+ jyjlList[0]?.parentId || normalizedVo.id || normalizedVo.id_ || ''
|
|
|
+ }
|
|
|
+ if (hasDraftFieldValues(fromRoot, draftJyjlFields)) {
|
|
|
+ jyjlList = [fromRoot]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!gzjlList.length || !hasDraftFieldValues(gzjlList[0], draftGzjlFields)) {
|
|
|
+ const fromRoot = normalizeGzjlRowForPage({
|
|
|
+ ...(gzjlList[0] || {}),
|
|
|
+ ...pickFields(normalizedVo, draftGzjlFields),
|
|
|
+ parentId:
|
|
|
+ gzjlList[0]?.parentId || normalizedVo.id || normalizedVo.id_ || ''
|
|
|
+ })
|
|
|
+ if (hasDraftFieldValues(fromRoot, draftGzjlFields)) {
|
|
|
+ gzjlList = [fromRoot]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!zsbList.length || !hasDraftFieldValues(zsbList[0], draftZsbFields)) {
|
|
|
+ const fromRoot = {
|
|
|
+ ...(zsbList[0] || {}),
|
|
|
+ ...pickFields(normalizedVo, draftZsbFields),
|
|
|
+ parentId:
|
|
|
+ zsbList[0]?.parentId || normalizedVo.id || normalizedVo.id_ || ''
|
|
|
+ }
|
|
|
+ if (hasDraftFieldValues(fromRoot, draftZsbFields)) {
|
|
|
+ zsbList = [fromRoot]
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return {
|
|
|
+ ryjbqkInfoPoList: jbqkList,
|
|
|
+ educationInfoPoList: jyjlList,
|
|
|
+ workInfoPoList: gzjlList,
|
|
|
+ certificateInfoPoList: zsbList
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * VO 字段 → 页面别名字段(同名优先,此处为次级对应关系)
|
|
|
+ */
|
|
|
+export const draftFieldAliasMap = {
|
|
|
+ fuJian: ['fujIan'],
|
|
|
+ danWeiMingCheng: ['danWeiMingChen']
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 页面 personInfoData 子表 → VO 子表字段名
|
|
|
+ */
|
|
|
+export const pageToDraftChildMap = {
|
|
|
+ ryjbqkInfoPoList: 'jbqkxxzc',
|
|
|
+ educationInfoPoList: 'jyjlzc',
|
|
|
+ workInfoPoList: 'gzjlzc',
|
|
|
+ certificateInfoPoList: 'zsbzc'
|
|
|
+}
|
|
|
+
|
|
|
+const draftPersonHeaderFields = [
|
|
|
+ 'name',
|
|
|
+ 'jianDingZiGeZ',
|
|
|
+ 'gender',
|
|
|
+ 'mobile',
|
|
|
+ 'email',
|
|
|
+ 'photo',
|
|
|
+ 'status'
|
|
|
+]
|
|
|
+
|
|
|
+function buildPersonHeaderSnapshot(data = {}) {
|
|
|
+ const snapshot = {}
|
|
|
+ draftPersonHeaderFields.forEach((key) => {
|
|
|
+ const val = data[key]
|
|
|
+ if (val !== undefined && val !== null && val !== '') {
|
|
|
+ snapshot[key] = val
|
|
|
+ }
|
|
|
+ })
|
|
|
+ if (!Object.keys(snapshot).length) {
|
|
|
+ return data.kuaiZhao || ''
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ return JSON.stringify(snapshot)
|
|
|
+ } catch (error) {
|
|
|
+ return data.kuaiZhao || ''
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+export function parsePersonHeaderSnapshot(kuaiZhao = '') {
|
|
|
+ if (!kuaiZhao || typeof kuaiZhao !== 'string') {
|
|
|
+ return {}
|
|
|
+ }
|
|
|
+ const trimmed = kuaiZhao.trim()
|
|
|
+ if (!trimmed.startsWith('{')) {
|
|
|
+ return {}
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ const parsed = JSON.parse(trimmed)
|
|
|
+ return parsed && typeof parsed === 'object' ? parsed : {}
|
|
|
+ } catch (error) {
|
|
|
+ return {}
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 将页面 personInfoData 转为 saveFormData/vo 所需 data 结构
|
|
|
+ */
|
|
|
+export function buildDraftVoData(data = {}, options = {}) {
|
|
|
+ return buildDraftFormData({
|
|
|
+ ...options,
|
|
|
+ personInfoData: data
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 组装 saveFormData/vo 的 data 字段
|
|
|
+ * 结构:
|
|
|
+ * {
|
|
|
+ * id, shiFouGuoShen, diDian, bianZhiRen, bianZhiBuMen, bianZhiShiJian, kuaiZhao, zhuangTai, renYuan,
|
|
|
+ * jbqkxxzc: [...], jyjlzc: [...], gzjlzc: [...], zsbzc: [...],
|
|
|
+ * ...jbqk/jyjl/gzjl/zsb 首行字段平铺
|
|
|
+ * }
|
|
|
+ */
|
|
|
+export function buildDraftFormData({
|
|
|
+ draftMainId = '',
|
|
|
+ renYuan = '',
|
|
|
+ personInfoData = {},
|
|
|
+ userId = '',
|
|
|
+ zhuangTai = '已暂存'
|
|
|
+}) {
|
|
|
+ const safePersonInfoData =
|
|
|
+ personInfoData && typeof personInfoData === 'object' ? personInfoData : {}
|
|
|
+ const jbqkSrc = safePersonInfoData.ryjbqkInfoPoList?.[0] || {}
|
|
|
+ const jyjlSrc = safePersonInfoData.educationInfoPoList || []
|
|
|
+ const gzjlSrc = safePersonInfoData.workInfoPoList || []
|
|
|
+ const zsbSrc = safePersonInfoData.certificateInfoPoList || []
|
|
|
+ const parentId = draftMainId || ''
|
|
|
+ const isNewDraft = !parentId
|
|
|
+
|
|
|
+ const mainMeta = {
|
|
|
+ shiFouGuoShen: getDraftFieldValueFromSources(
|
|
|
+ [jbqkSrc, safePersonInfoData],
|
|
|
+ 'shiFouGuoShen'
|
|
|
+ ),
|
|
|
+ diDian: getDraftFieldValueFromSources(
|
|
|
+ [safePersonInfoData, jbqkSrc],
|
|
|
+ 'diDian'
|
|
|
+ ),
|
|
|
+ bianZhiRen:
|
|
|
+ getDraftFieldValueFromSources(
|
|
|
+ [safePersonInfoData, jbqkSrc],
|
|
|
+ 'bianZhiRen'
|
|
|
+ ) ||
|
|
|
+ userId ||
|
|
|
+ '',
|
|
|
+ bianZhiBuMen: getDraftFieldValueFromSources(
|
|
|
+ [safePersonInfoData, jbqkSrc],
|
|
|
+ 'bianZhiBuMen'
|
|
|
+ ),
|
|
|
+ bianZhiShiJian: getDraftFieldValueFromSources(
|
|
|
+ [safePersonInfoData, jbqkSrc],
|
|
|
+ 'bianZhiShiJian'
|
|
|
+ ),
|
|
|
+ kuaiZhao: getDraftFieldValueFromSources(
|
|
|
+ [safePersonInfoData, jbqkSrc],
|
|
|
+ 'kuaiZhao'
|
|
|
+ )
|
|
|
+ }
|
|
|
+
|
|
|
+ const jbqkxxzc = safePersonInfoData.ryjbqkInfoPoList?.length
|
|
|
+ ? [
|
|
|
+ buildDraftChildVoRow(
|
|
|
+ jbqkSrc,
|
|
|
+ parentId,
|
|
|
+ mainMeta,
|
|
|
+ draftJbqkFields,
|
|
|
+ 0,
|
|
|
+ isNewDraft
|
|
|
+ )
|
|
|
+ ]
|
|
|
+ : []
|
|
|
+ const jyjlzc = jyjlSrc.map((item, index) =>
|
|
|
+ buildDraftChildVoRow(
|
|
|
+ item,
|
|
|
+ parentId,
|
|
|
+ mainMeta,
|
|
|
+ draftJyjlFields,
|
|
|
+ index,
|
|
|
+ isNewDraft
|
|
|
+ )
|
|
|
+ )
|
|
|
+ const gzjlzc = gzjlSrc.map((item, index) =>
|
|
|
+ buildDraftChildVoRow(
|
|
|
+ item,
|
|
|
+ parentId,
|
|
|
+ mainMeta,
|
|
|
+ draftGzjlFields,
|
|
|
+ index,
|
|
|
+ isNewDraft
|
|
|
+ )
|
|
|
+ )
|
|
|
+ const zsbzc = zsbSrc.map((item, index) =>
|
|
|
+ buildDraftChildVoRow(
|
|
|
+ item,
|
|
|
+ parentId,
|
|
|
+ mainMeta,
|
|
|
+ draftZsbFields,
|
|
|
+ index,
|
|
|
+ isNewDraft
|
|
|
+ )
|
|
|
+ )
|
|
|
+
|
|
|
+ return {
|
|
|
+ id: toDraftVoString(parentId),
|
|
|
+ shiFouGuoShen: toDraftVoString(mainMeta.shiFouGuoShen),
|
|
|
+ diDian: toDraftVoString(mainMeta.diDian),
|
|
|
+ bianZhiRen: toDraftVoString(mainMeta.bianZhiRen),
|
|
|
+ bianZhiBuMen: toDraftVoString(mainMeta.bianZhiBuMen),
|
|
|
+ bianZhiShiJian: toDraftVoString(mainMeta.bianZhiShiJian),
|
|
|
+ kuaiZhao: toDraftVoString(mainMeta.kuaiZhao),
|
|
|
+ zhuangTai: toDraftVoString(zhuangTai),
|
|
|
+ renYuan: toDraftVoString(renYuan),
|
|
|
+ jbqkxxzc,
|
|
|
+ jyjlzc,
|
|
|
+ gzjlzc,
|
|
|
+ zsbzc,
|
|
|
+ ...flattenFirstRowFields(jbqkxxzc, draftJbqkFields),
|
|
|
+ ...flattenFirstRowFields(jyjlzc, draftJyjlFields),
|
|
|
+ ...flattenFirstRowFields(gzjlzc, draftGzjlFields),
|
|
|
+ ...flattenFirstRowFields(zsbzc, draftZsbFields)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+/** 暂存相关表名 */
|
|
|
+export const draftTableNames = {
|
|
|
+ main: 't_rydazcxxb',
|
|
|
+ jbqk: 't_jbqkxxzc',
|
|
|
+ jyjl: 't_jyjlzc',
|
|
|
+ gzjl: 't_gzjlzc',
|
|
|
+ zsb: 't_zsbzc'
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 构建提交后更新暂存主表状态的 update 参数
|
|
|
+ */
|
|
|
+export function buildDraftSubmittedUpdateParams(
|
|
|
+ parentId = '',
|
|
|
+ zhuangTai = '已提交'
|
|
|
+) {
|
|
|
+ if (!parentId) {
|
|
|
+ return []
|
|
|
+ }
|
|
|
+ return [
|
|
|
+ {
|
|
|
+ tableName: draftTableNames.main,
|
|
|
+ updList: [
|
|
|
+ {
|
|
|
+ where: { id_: parentId },
|
|
|
+ param: { zhuang_tai_: zhuangTai }
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+
|
|
|
+export default {
|
|
|
+ draftQueryKeys,
|
|
|
+ draftQuerySql,
|
|
|
+ draftChildQueryKeys,
|
|
|
+ draftTableNames,
|
|
|
+ draftFormKey,
|
|
|
+ draftBoCode,
|
|
|
+ pageToDraftChildMap,
|
|
|
+ draftFieldAliasMap,
|
|
|
+ buildDraftVoData,
|
|
|
+ buildDraftFormData,
|
|
|
+ buildDraftSubmittedUpdateParams,
|
|
|
+ parseDraftVoToPageData,
|
|
|
+ parsePersonHeaderSnapshot,
|
|
|
+ normalizeJbqkRow,
|
|
|
+ draftSnakeToCamelMap,
|
|
|
+ normalizeDraftQueryRow,
|
|
|
+ normalizeDraftQueryRows
|
|
|
+}
|