Procházet zdrojové kódy

update: H5页面功能优化

- 更新 .gitignore
- 更新组件库 mp-ss-components.js
- 优化导航工具 navigation.js
- 更新多个页面:mp_addChk, mp_ccChk, mp_chgChgchk, mp_chgChkTab, mp_chgchk, mp_kqjl_baseInfo, mp_kqjl_inp
apple před 1 týdnem
rodič
revize
fc95e7d17a

+ 2 - 0
.gitignore

@@ -1,2 +1,4 @@
 # 本地 H5 转换说明文档目录不参与提交 by xu 2026-03-08
 docs/
+
+.DS_Store

+ 10 - 1
js/mp_ss_components/mp-ss-components.js

@@ -1075,16 +1075,25 @@
 
         remoteLoading.value = true;
         try {
+          const filterObj = parseFilterObj();
           const objpParam = {
             input: String(canInput.value),
             codebook: String(props.cb || ""),
-            ...parseFilterObj(),
+            ...filterObj,
           };
           const postData = {
             objectpickerparam: JSON.stringify(objpParam),
             objectpickertype: 1,
             objectpickersearchAll: 1,
           };
+
+          // 功能说明:xyByBj 人员码本按班级级联时,补充固定 cascadingLevel 和上级班级值 by xu 2026-03-18
+          if (String(props.cb || "") === "xyByBj" && filterObj.bjid) {
+            objpParam.cascadingLevel = "bjid,ryid";
+            postData.objectpickerparam = JSON.stringify(objpParam);
+            postData.upperValue = filterObj.bjid;
+          }
+
           const resp = await window.request.post(
             props.url || "/service?ssServ=loadObjpOpt&objectpickerdropdown1=1",
             postData,

+ 1 - 1
js/mp_utils/navigation.js

@@ -64,7 +64,7 @@ const NavigationManager = {
       if (target.startsWith('mp_')) return target;
       return `mp_${target}`;
     })();
-
+    console.log("goToFromButton:",destPage)
     if (!destPage) {
       console.warn('按钮没有配置跳转页面:', button);
       return false;

+ 1 - 0
page/mp_addChk.html

@@ -103,6 +103,7 @@
         font-size: 12px;
         line-height: 1;
         padding: 8px 10px;
+        display: none;
         box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
       }
 

+ 1 - 0
page/mp_ccChk.html

@@ -185,6 +185,7 @@
         line-height: 1;
         padding: 8px 10px;
         box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
+        display: none;
       }
 
       .url-log-panel {

+ 1 - 0
page/mp_chgChgchk.html

@@ -108,6 +108,7 @@
         line-height: 1;
         padding: 8px 10px;
         box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
+         display: none;
       }
 
       .url-log-panel {

+ 1 - 0
page/mp_chgChkTab.html

@@ -109,6 +109,7 @@
         font-weight: 600;
         line-height: 32px;
         padding: 0 12px;
+         display: none;
         box-shadow: 0 4px 12px rgba(255, 122, 0, 0.35);
       }
 

+ 1 - 0
page/mp_chgchk.html

@@ -116,6 +116,7 @@
         line-height: 1;
         padding: 8px 10px;
         box-shadow: 0 2px 8px rgba(0, 0, 0, 0.18);
+         display: none;
       }
 
       .url-log-panel {

+ 143 - 43
page/mp_kqjl_baseInfo.html

@@ -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) {

+ 234 - 209
page/mp_kqjl_inp.html

@@ -1,235 +1,260 @@
 <!DOCTYPE html>
 <html lang="zh-CN">
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
+  <head>
+    <meta charset="UTF-8" />
+    <meta
+      name="viewport"
+      content="width=device-width, initial-scale=1.0, user-scalable=no"
+    />
     <title>新增考勤记录</title>
     <script src="/js/mp_base/base.js"></script>
 
     <style>
-        [v-cloak] {
-            display: none !important;
-        }
+      [v-cloak] {
+        display: none !important;
+      }
 
-        #app {
-            background: #f5f5f5;
-            min-height: 100vh;
-            box-sizing: border-box;
-        }
+      #app {
+        background: #f5f5f5;
+        min-height: 100vh;
+        box-sizing: border-box;
+      }
 
-        .table th {
-            width: 140px;
-            max-width: 170px;
-        }
+      .table th {
+        width: 140px;
+        max-width: 170px;
+      }
 
-        .table td {
-            position: relative;
-        }
+      .table td {
+        position: relative;
+      }
 
-        .reason-input {
-            width: 100%;
-        }
+      .reason-input {
+        width: 100%;
+      }
     </style>
-</head>
-<body>
-<div id="app" v-cloak>
-    <!-- 新增考勤记录发起页面 by xu 2026-03-06 -->
-    <div class="form-wrap">
+  </head>
+  <body>
+    <div id="app" v-cloak>
+      <!-- 新增考勤记录发起页面 by xu 2026-03-06 -->
+      <div class="form-wrap">
         <table class="table">
-            <tr>
-                <th>名称</th>
-                <td>
-                    <ss-input
-                        v-model="formData.mc"
-                        name="mc"
-                        class="reason-input"
-                        placeholder="请录入"
-                    />
-                </td>
-            </tr>
-            <tr>
-                <th>人员</th>
-                <td>
-                    <ss-select
-                        v-model="formData.ryid"
-                        cb="ry"
-                        :auto-select-first="true"
-                        placeholder="请选择"
-                    >
-                    </ss-select>
-                </td>
-            </tr>
-            <tr>
-                <th>开始时间</th>
-                <td>
-                    <ss-datetime-picker
-                        v-model="formData.kssj"
-                        mode="datetime"
-                        placeholder="YYYY-MM-DD HH:mm"
-                        @change="onStartTimeChange"
-                    >
-                    </ss-datetime-picker>
-                </td>
-            </tr>
-            <tr>
-                <th>结束时间</th>
-                <td>
-                    <ss-datetime-picker
-                        v-model="formData.jssj"
-                        mode="datetime"
-                        :min-date="endMinDate"
-                        placeholder="YYYY-MM-DD HH:mm"
-                    >
-                    </ss-datetime-picker>
-                </td>
-            </tr>
-            <tr>
-                <th>考勤类别</th>
-                <td>
-                    <ss-select
-                        v-model="formData.kqlbm"
-                        cb="kqlb"
-                        :auto-select-first="true"
-                        placeholder="请选择"
-                    >
-                    </ss-select>
-                </td>
-            </tr>
-            <tr>
-                <th>班级</th>
-                <td>
-                    <ss-select
-                        v-model="formData.bjid"
-                        cb="bj"
-                        :auto-select-first="true"
-                        placeholder="请选择"
-                    >
-                    </ss-select>
-                </td>
-            </tr>
-            <tr>
-                <th>描述</th>
-                <td>
-                    <ss-input
-                        v-model="formData.ms"
-                        name="ms"
-                        class="reason-input"
-                        placeholder="请录入"
-                    />
-                </td>
-            </tr>
+          <tr>
+            <th>名称</th>
+            <td>
+              <ss-input
+                v-model="formData.mc"
+                name="mc"
+                class="reason-input"
+                placeholder="请录入"
+              />
+            </td>
+          </tr>
+          <!-- 功能说明:班级改为管辖班级,人员改为按班级级联学员 by xu 2026-03-17 -->
+          <tr>
+            <th>班级</th>
+            <td>
+              <ss-select
+                v-model="formData.bjid"
+                cb="adminBj"
+                :auto-select-first="true"
+                placeholder="请选择"
+                @change="onBjChange"
+              >
+              </ss-select>
+            </td>
+          </tr>
+          <tr>
+            <th>人员</th>
+            <td>
+              <ss-select
+                v-model="formData.ryid"
+                :cb="formData.bjid ? 'xyByBj' : ''"
+                :filter="personFilter"
+                :auto-select-first="true"
+                :disabled="!formData.bjid"
+                :placeholder="formData.bjid ? '请选择' : '请先选择班级'"
+              >
+              </ss-select>
+            </td>
+          </tr>
+          <tr>
+            <th>开始时间</th>
+            <td>
+              <ss-datetime-picker
+                v-model="formData.kssj"
+                mode="datetime"
+                placeholder="YYYY-MM-DD HH:mm"
+                @change="onStartTimeChange"
+              >
+              </ss-datetime-picker>
+            </td>
+          </tr>
+          <tr>
+            <th>结束时间</th>
+            <td>
+              <ss-datetime-picker
+                v-model="formData.jssj"
+                mode="datetime"
+                :min-date="endMinDate"
+                placeholder="YYYY-MM-DD HH:mm"
+              >
+              </ss-datetime-picker>
+            </td>
+          </tr>
+          <tr>
+            <th>考勤类别</th>
+            <td>
+              <ss-select
+                v-model="formData.kqlbm"
+                cb="kqlb"
+                :auto-select-first="true"
+                placeholder="请选择"
+              >
+              </ss-select>
+            </td>
+          </tr>
+          <tr>
+            <th>描述</th>
+            <td>
+              <ss-input
+                v-model="formData.ms"
+                name="ms"
+                class="reason-input"
+                placeholder="请录入"
+              />
+            </td>
+          </tr>
         </table>
+      </div>
     </div>
 
-</div>
-
-<script>
-    window.SS.ready(function () {
+    <script>
+      window.SS.ready(function () {
         window.SS.dom.initializeFormApp({
-            el: '#app',
-            data() {
-                return {
-                    // 初始化考勤记录发起数据 by xu 2026-03-06
-                    pageParams: {},
-                    formData: {
-                        mc: '考勤记录',
-                        ryid: '',
-                        bjid: '',
-                        kqlbm: '',
-                        kssj: '',
-                        jssj: '',
-                        ms: ''
-                    },
-                    endMinDate: '',
-                }
-            },
-            async mounted() {
-                this.pageParams = this.getUrlParams()
-                this.initDefaultTimeRange()
+          el: "#app",
+          data() {
+            return {
+              // 初始化考勤记录发起数据 by xu 2026-03-06
+              pageParams: {},
+              formData: {
+                mc: "考勤记录",
+                ryid: "",
+                bjid: "",
+                kqlbm: "",
+                kssj: "",
+                jssj: "",
+                ms: "",
+              },
+              endMinDate: "",
+              personFilter: null,
+            };
+          },
+          async mounted() {
+            this.pageParams = this.getUrlParams();
+            this.initDefaultTimeRange();
+            // 功能说明:初始化人员级联过滤条件,确保班级变化后按班级加载学员 by xu 2026-03-17
+            this.personFilter = this.formData.bjid
+              ? { bjid: this.formData.bjid }
+              : null;
 
-                // 功能说明:向 mp_objInp 暴露统一取值方法,尽量减少表单页改动 by xu 2026-03-06
-                window.__mpObjInpGetFormData = async () => {
-                    const message = this.validateForm()
-                    return {
-                        valid: !message,
-                        message: message || '',
-                        data: {
-                            mc: this.formData.mc,
-                            ryid: this.formData.ryid,
-                            bjid: this.formData.bjid,
-                            kqlbm: this.formData.kqlbm,
-                            kssj: this.formData.kssj,
-                            jssj: this.formData.jssj,
-                            ms: (this.formData.ms || '').trim(),
-                            mswj: (this.formData.ms || '').trim()
-                        }
-                    }
-                }
-            },
+            // 功能说明:向 mp_objInp 暴露统一取值方法,尽量减少表单页改动 by xu 2026-03-06
+            window.__mpObjInpGetFormData = async () => {
+              const message = this.validateForm();
+              return {
+                valid: !message,
+                message: message || "",
+                data: {
+                  mc: this.formData.mc,
+                  ryid: this.formData.ryid,
+                  bjid: this.formData.bjid,
+                  kqlbm: this.formData.kqlbm,
+                  kssj: this.formData.kssj,
+                  jssj: this.formData.jssj,
+                  ms: (this.formData.ms || "").trim(),
+                  mswj: (this.formData.ms || "").trim(),
+                },
+              };
+            };
+          },
 
-            beforeUnmount() {
-                // 功能说明:页面卸载时清理桥接方法,避免污染其他表单页 by xu 2026-03-06
-                try {
-                    if (window.__mpObjInpGetFormData) {
-                        delete window.__mpObjInpGetFormData
-                    }
-                } catch (_) {}
+          beforeUnmount() {
+            // 功能说明:页面卸载时清理桥接方法,避免污染其他表单页 by xu 2026-03-06
+            try {
+              if (window.__mpObjInpGetFormData) {
+                delete window.__mpObjInpGetFormData;
+              }
+            } catch (_) {}
+          },
+          methods: {
+            getUrlParams() {
+              const params = {};
+              const urlSearchParams = new URLSearchParams(
+                window.location.search
+              );
+              for (const [key, value] of urlSearchParams) {
+                params[key] = decodeURIComponent(value);
+              }
+              return params;
             },
-            methods: {
-                getUrlParams() {
-                    const params = {}
-                    const urlSearchParams = new URLSearchParams(window.location.search)
-                    for (const [key, value] of urlSearchParams) {
-                        params[key] = decodeURIComponent(value)
-                    }
-                    return params
-                },
 
-                initDefaultTimeRange() {
-                    // 设置默认开始/结束时间 by xu 2026-03-06
-                    const now = new Date()
-                    const start = new Date(now.getTime() + 30 * 60 * 1000)
-                    const end = new Date(start.getTime() + 2 * 60 * 60 * 1000)
+            initDefaultTimeRange() {
+              // 设置默认开始/结束时间 by xu 2026-03-06
+              const now = new Date();
+              const start = new Date(now.getTime() + 30 * 60 * 1000);
+              const end = new Date(start.getTime() + 2 * 60 * 60 * 1000);
 
-                    this.formData.kssj = this.formatToDateTime(start)
-                    this.formData.jssj = this.formatToDateTime(end)
-                    this.endMinDate = this.formData.kssj
-                },
+              this.formData.kssj = this.formatToDateTime(start);
+              this.formData.jssj = this.formatToDateTime(end);
+              this.endMinDate = this.formData.kssj;
+            },
 
-                formatToDateTime(date) {
-                    const year = date.getFullYear()
-                    const month = String(date.getMonth() + 1).padStart(2, '0')
-                    const day = String(date.getDate()).padStart(2, '0')
-                    const hour = String(date.getHours()).padStart(2, '0')
-                    const minute = String(date.getMinutes()).padStart(2, '0')
-                    return `${year}-${month}-${day} ${hour}:${minute}`
-                },
+            formatToDateTime(date) {
+              const year = date.getFullYear();
+              const month = String(date.getMonth() + 1).padStart(2, "0");
+              const day = String(date.getDate()).padStart(2, "0");
+              const hour = String(date.getHours()).padStart(2, "0");
+              const minute = String(date.getMinutes()).padStart(2, "0");
+              return `${year}-${month}-${day} ${hour}:${minute}`;
+            },
 
-                onStartTimeChange(val) {
-                    this.endMinDate = val || ''
-                    if (this.formData.jssj && val && new Date(this.formData.jssj).getTime() < new Date(val).getTime()) {
-                        this.formData.jssj = val
-                    }
-                },
+            onBjChange(val) {
+              // 功能说明:班级切换后重置人员,并更新按班级筛选人员的过滤条件 by xu 2026-03-17
+              const bjid = val || "";
+              this.formData.bjid = bjid;
+              this.formData.ryid = "";
+              this.personFilter = bjid ? { bjid } : null;
+            },
 
-                validateForm() {
-                    if (!this.formData.mc) return '请录入名称'
-                    if (!this.formData.ryid) return '请选择人员'
-                    if (!this.formData.kssj) return '请选择开始时间'
-                    if (!this.formData.jssj) return '请选择结束时间'
-                    if (!this.formData.kqlbm) return '请选择考勤类别'
-                    if (!this.formData.bjid) return '请选择班级'
+            onStartTimeChange(val) {
+              this.endMinDate = val || "";
+              if (
+                this.formData.jssj &&
+                val &&
+                new Date(this.formData.jssj).getTime() < new Date(val).getTime()
+              ) {
+                this.formData.jssj = val;
+              }
+            },
+
+            validateForm() {
+              if (!this.formData.mc) return "请录入名称";
+              if (!this.formData.bjid) return "请选择班级";
+              if (!this.formData.ryid) return "请选择人员";
+              if (!this.formData.kssj) return "请选择开始时间";
+              if (!this.formData.jssj) return "请选择结束时间";
+              if (!this.formData.kqlbm) return "请选择考勤类别";
 
-                    const start = new Date(this.formData.kssj).getTime()
-                    const end = new Date(this.formData.jssj).getTime()
-                    if (!Number.isNaN(start) && !Number.isNaN(end) && end < start) {
-                        return '结束时间不能早于开始时间'
-                    }
-                    return ''
-                }
-            }
-        })
-    })
-</script>
-</body>
+              const start = new Date(this.formData.kssj).getTime();
+              const end = new Date(this.formData.jssj).getTime();
+              if (!Number.isNaN(start) && !Number.isNaN(end) && end < start) {
+                return "结束时间不能早于开始时间";
+              }
+              return "";
+            },
+          },
+        });
+      });
+    </script>
+  </body>
 </html>