|
|
@@ -2,7 +2,10 @@
|
|
|
<html lang="zh-CN">
|
|
|
<head>
|
|
|
<meta charset="UTF-8" />
|
|
|
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
|
|
|
+ <meta
|
|
|
+ name="viewport"
|
|
|
+ content="width=device-width, initial-scale=1.0, user-scalable=no"
|
|
|
+ />
|
|
|
<title>基本信息</title>
|
|
|
<script src="/js/mp_base/base.js"></script>
|
|
|
|
|
|
@@ -37,8 +40,12 @@
|
|
|
}
|
|
|
|
|
|
@keyframes page-spin {
|
|
|
- from { transform: rotate(0deg); }
|
|
|
- to { transform: rotate(360deg); }
|
|
|
+ from {
|
|
|
+ transform: rotate(0deg);
|
|
|
+ }
|
|
|
+ to {
|
|
|
+ transform: rotate(360deg);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
.error {
|
|
|
@@ -107,7 +114,9 @@
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<th>描述</th>
|
|
|
- <td class="desc-text">{{ displayData.ms || formData.ms || formData.mswj || '-' }}</td>
|
|
|
+ <td class="desc-text">
|
|
|
+ {{ displayData.ms || formData.ms || formData.mswj || '-' }}
|
|
|
+ </td>
|
|
|
</tr>
|
|
|
</table>
|
|
|
</div>
|
|
|
@@ -142,7 +151,9 @@
|
|
|
methods: {
|
|
|
getUrlParams() {
|
|
|
const params = {};
|
|
|
- const urlSearchParams = new URLSearchParams(window.location.search);
|
|
|
+ const urlSearchParams = new URLSearchParams(
|
|
|
+ window.location.search
|
|
|
+ );
|
|
|
for (const [key, value] of urlSearchParams) {
|
|
|
try {
|
|
|
params[key] = decodeURIComponent(value);
|
|
|
@@ -155,7 +166,7 @@
|
|
|
|
|
|
parseParamObject(paramStr) {
|
|
|
if (!paramStr) return {};
|
|
|
- if (typeof paramStr === 'object') return paramStr;
|
|
|
+ if (typeof paramStr === "object") return paramStr;
|
|
|
try {
|
|
|
return JSON.parse(paramStr);
|
|
|
} catch (_) {
|
|
|
@@ -165,7 +176,7 @@
|
|
|
.replace(/'/g, '"');
|
|
|
return JSON.parse(fixed);
|
|
|
} catch (error) {
|
|
|
- console.error('解析param失败:', error);
|
|
|
+ console.error("解析param失败:", error);
|
|
|
return {};
|
|
|
}
|
|
|
}
|
|
|
@@ -173,14 +184,16 @@
|
|
|
|
|
|
async loadData() {
|
|
|
// 加载考勤记录详情数据并回显 by xu 2026-03-06
|
|
|
- const service = String(this.pageParams.service || this.pageParams.ssServ || '').trim();
|
|
|
+ const service = String(
|
|
|
+ this.pageParams.service || this.pageParams.ssServ || ""
|
|
|
+ ).trim();
|
|
|
if (!service) {
|
|
|
- this.error = '缺少service参数';
|
|
|
+ this.error = "缺少service参数";
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
this.loading = true;
|
|
|
- this.error = '';
|
|
|
+ this.error = "";
|
|
|
|
|
|
try {
|
|
|
const requestData = {
|
|
|
@@ -190,28 +203,28 @@
|
|
|
if (
|
|
|
requestData[targetKey] !== undefined &&
|
|
|
requestData[targetKey] !== null &&
|
|
|
- requestData[targetKey] !== ''
|
|
|
+ requestData[targetKey] !== ""
|
|
|
) {
|
|
|
return;
|
|
|
}
|
|
|
for (let i = 0; i < sourceKeys.length; i += 1) {
|
|
|
const value = this.pageParams[sourceKeys[i]];
|
|
|
- if (value !== undefined && value !== null && value !== '') {
|
|
|
+ if (value !== undefined && value !== null && value !== "") {
|
|
|
requestData[targetKey] = value;
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- appendIfMissing('sqid', ['sqid']);
|
|
|
- appendIfMissing('shid', ['shid']);
|
|
|
- appendIfMissing('ssObjName', ['ssObjName', 'ssobjname']);
|
|
|
- appendIfMissing('ssObjId', ['ssObjId', 'ssobjid']);
|
|
|
- appendIfMissing('bdlbm', ['bdlbm']);
|
|
|
- appendIfMissing('dataType', ['dataType', 'datatype']);
|
|
|
- appendIfMissing('encode_shid', ['encode_shid']);
|
|
|
- appendIfMissing('jdmc', ['jdmc']);
|
|
|
- appendIfMissing('ssToken', ['ssToken']);
|
|
|
+ appendIfMissing("sqid", ["sqid"]);
|
|
|
+ appendIfMissing("shid", ["shid"]);
|
|
|
+ appendIfMissing("ssObjName", ["ssObjName", "ssobjname"]);
|
|
|
+ appendIfMissing("ssObjId", ["ssObjId", "ssobjid"]);
|
|
|
+ appendIfMissing("bdlbm", ["bdlbm"]);
|
|
|
+ appendIfMissing("dataType", ["dataType", "datatype"]);
|
|
|
+ appendIfMissing("encode_shid", ["encode_shid"]);
|
|
|
+ appendIfMissing("jdmc", ["jdmc"]);
|
|
|
+ appendIfMissing("ssToken", ["ssToken"]);
|
|
|
|
|
|
const response = await request.post(
|
|
|
`/service?ssServ=${service}&ssDest=data`,
|
|
|
@@ -219,17 +232,20 @@
|
|
|
{ loading: false, formData: true }
|
|
|
);
|
|
|
|
|
|
- const raw = this.pickKqjlData(response && response.data ? response.data : response);
|
|
|
+ const raw = this.pickKqjlData(
|
|
|
+ response && response.data ? response.data : response
|
|
|
+ );
|
|
|
if (!raw) {
|
|
|
- this.error = '未获取到考勤记录数据';
|
|
|
+ this.error = "未获取到考勤记录数据";
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
this.formData = raw;
|
|
|
await this.buildDisplayData(raw);
|
|
|
} catch (error) {
|
|
|
- console.error('加载考勤记录基本信息失败:', error);
|
|
|
- this.error = '加载失败:' + ((error && error.message) || '未知错误');
|
|
|
+ console.error("加载考勤记录基本信息失败:", error);
|
|
|
+ this.error =
|
|
|
+ "加载失败:" + ((error && error.message) || "未知错误");
|
|
|
} finally {
|
|
|
this.loading = false;
|
|
|
}
|
|
|
@@ -239,52 +255,136 @@
|
|
|
if (!data) return null;
|
|
|
if (data.kqjl) return data.kqjl;
|
|
|
if (data.bjdmKqjl) return data.bjdmKqjl;
|
|
|
- if (Array.isArray(data.objectList) && data.objectList.length > 0) {
|
|
|
- return data.objectList[0].kqjl || data.objectList[0].bjdmKqjl || data.objectList[0];
|
|
|
+ if (
|
|
|
+ Array.isArray(data.objectList) &&
|
|
|
+ data.objectList.length > 0
|
|
|
+ ) {
|
|
|
+ return (
|
|
|
+ data.objectList[0].kqjl ||
|
|
|
+ data.objectList[0].bjdmKqjl ||
|
|
|
+ data.objectList[0]
|
|
|
+ );
|
|
|
}
|
|
|
if (Array.isArray(data.data) && data.data.length > 0) {
|
|
|
- return data.data[0].kqjl || data.data[0].bjdmKqjl || data.data[0];
|
|
|
+ return (
|
|
|
+ data.data[0].kqjl || data.data[0].bjdmKqjl || data.data[0]
|
|
|
+ );
|
|
|
}
|
|
|
- if (typeof data === 'object') return data;
|
|
|
+ if (typeof data === "object") return data;
|
|
|
return null;
|
|
|
},
|
|
|
|
|
|
async buildDisplayData(raw) {
|
|
|
// 格式化考勤记录显示字段 by xu 2026-03-06
|
|
|
this.displayData = {
|
|
|
- mc: raw.mc || '',
|
|
|
- rymc: await this.translateDict('ry', raw.ryid, raw.rymc || raw.xm),
|
|
|
+ mc: raw.mc || "",
|
|
|
+ rymc: await this.translateStudentByBj(raw),
|
|
|
kssj: this.formatDate(raw.kssj),
|
|
|
jssj: this.formatDate(raw.jssj),
|
|
|
- kqlb: await this.translateDict('kqlb', raw.kqlbm, raw.kqlb),
|
|
|
- bjmc: await this.translateDict('bj', raw.bjid, raw.bjmc || raw.bjname),
|
|
|
- ms: this.normalizeDesc(raw.ms || raw.mswj || ''),
|
|
|
+ kqlb: await this.translateDict("kqlb", raw.kqlbm, raw.kqlb),
|
|
|
+ bjmc: await this.translateClassName(raw),
|
|
|
+ ms: this.normalizeDesc(raw.ms || raw.mswj || ""),
|
|
|
};
|
|
|
},
|
|
|
|
|
|
formatDate(value) {
|
|
|
- if (!value) return '';
|
|
|
- if (window.H5FieldFormatter && typeof window.H5FieldFormatter.formatDate === 'function') {
|
|
|
- return window.H5FieldFormatter.formatDate(value, 'YYYY-MM-DD HH:mm:ss');
|
|
|
+ if (!value) return "";
|
|
|
+ if (
|
|
|
+ window.H5FieldFormatter &&
|
|
|
+ typeof window.H5FieldFormatter.formatDate === "function"
|
|
|
+ ) {
|
|
|
+ return window.H5FieldFormatter.formatDate(
|
|
|
+ value,
|
|
|
+ "YYYY-MM-DD HH:mm:ss"
|
|
|
+ );
|
|
|
}
|
|
|
return value;
|
|
|
},
|
|
|
|
|
|
normalizeDesc(value) {
|
|
|
- if (!value) return '';
|
|
|
+ if (!value) return "";
|
|
|
return String(value)
|
|
|
- .replace(/<br\s*\/?\>/gi, '\n')
|
|
|
- .replace(/<[^>]+>/g, '')
|
|
|
+ .replace(/<br\s*\/?\>/gi, "\n")
|
|
|
+ .replace(/<[^>]+>/g, "")
|
|
|
.trim();
|
|
|
},
|
|
|
|
|
|
+ async translateStudentByBj(raw) {
|
|
|
+ const fallbackName = raw.rymc || raw.xm || "";
|
|
|
+ if (fallbackName) return fallbackName;
|
|
|
+ if (
|
|
|
+ !raw ||
|
|
|
+ raw.ryid === undefined ||
|
|
|
+ raw.ryid === null ||
|
|
|
+ raw.ryid === ""
|
|
|
+ )
|
|
|
+ return "";
|
|
|
+ if (!raw.bjid) {
|
|
|
+ return this.translateDict("ry", raw.ryid, fallbackName);
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ // 功能说明:考勤记录基本信息页按班级翻译人员名称,避免同人码本无法按班级定位 by xu 2026-03-18
|
|
|
+ const response = await request.post(
|
|
|
+ "/service?ssServ=loadObjpOpt&objectpickerdropdown1=1",
|
|
|
+ {
|
|
|
+ objectpickerparam: JSON.stringify({
|
|
|
+ input: "false",
|
|
|
+ codebook: "xyByBj",
|
|
|
+ bjid: raw.bjid,
|
|
|
+ cascadingLevel: "bjid,ryid",
|
|
|
+ }),
|
|
|
+ objectpickertype: 2,
|
|
|
+ objectpickervalue: raw.ryid,
|
|
|
+ upperValue: raw.bjid,
|
|
|
+ },
|
|
|
+ { loading: false, formData: true }
|
|
|
+ );
|
|
|
+ if (response && response.data && response.data.result) {
|
|
|
+ const translated =
|
|
|
+ response.data.result[String(raw.ryid)] ||
|
|
|
+ response.data.result[raw.ryid];
|
|
|
+ if (translated) return translated;
|
|
|
+ }
|
|
|
+ } catch (error) {
|
|
|
+ console.error("xyByBj 人员翻译失败:", error);
|
|
|
+ }
|
|
|
+
|
|
|
+ return String(raw.ryid);
|
|
|
+ },
|
|
|
+
|
|
|
+ async translateClassName(raw) {
|
|
|
+ const fallbackName = raw.bjmc || raw.bjname || "";
|
|
|
+ if (fallbackName) return fallbackName;
|
|
|
+ if (
|
|
|
+ !raw ||
|
|
|
+ raw.bjid === undefined ||
|
|
|
+ raw.bjid === null ||
|
|
|
+ raw.bjid === ""
|
|
|
+ ) {
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+ const translated = await this.translateDict(
|
|
|
+ "adminBj",
|
|
|
+ raw.bjid,
|
|
|
+ ""
|
|
|
+ );
|
|
|
+ if (translated && String(translated) !== String(raw.bjid)) {
|
|
|
+ return translated;
|
|
|
+ }
|
|
|
+ return this.translateDict("bj", raw.bjid, fallbackName);
|
|
|
+ },
|
|
|
+
|
|
|
async translateDict(dictName, value, fallbackName) {
|
|
|
if (fallbackName) return fallbackName;
|
|
|
- if (value === undefined || value === null || value === '') return '';
|
|
|
+ if (value === undefined || value === null || value === "")
|
|
|
+ return "";
|
|
|
try {
|
|
|
- if (typeof window.getDictOptions === 'function') {
|
|
|
+ if (typeof window.getDictOptions === "function") {
|
|
|
const options = await window.getDictOptions(dictName);
|
|
|
- const target = (options || []).find((item) => String(item.v) === String(value));
|
|
|
+ const target = (options || []).find(
|
|
|
+ (item) => String(item.v) === String(value)
|
|
|
+ );
|
|
|
if (target && target.n) return target.n;
|
|
|
}
|
|
|
} catch (error) {
|