fix: 公出时间只显示到分钟、人员薪资新增查看明细、应收对账可选全部客户

- 审批列表/详情:datetimerange 字段统一按分钟展示,不再显示秒
(如 「2026-09-08 08:47 至 2026-09-08 17:23」)
- 人员薪资:操作列新增「查看明细」,弹窗展示该工资表全部人员
的应发/扣款/实发构成及实发合计;发放记录保持不变
- 应收对账:客户下拉不再限定「私海」口径(去掉 type=0),
避免选不到客户导致无法生成对账单

Co-Authored-By: Claude Code <noreply@anthropic.com>
已修改3个文件
101 ■■■■■ 文件已修改
src/views/financialManagement/receivable/reconciliation.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/personnelManagement/monthlyStatistics/index.vue 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/financialManagement/receivable/reconciliation.vue
@@ -297,7 +297,8 @@
};
const getCustomerList = () => {
  listCustomer({ current: -1, size: -1, type: 0 }).then((res) => {
  // 对账单需要覆盖全部客户:不传 type,避免走「私海」(type=0 且限本人领用/共享)口径导致选不到客户
  listCustomer({ current: -1, size: -1 }).then((res) => {
    if (res.code === 200) {
      customerList.value = res.data?.records || [];
    }
src/views/officeProcessAutomation/ApproveManage/approve-list/approveListConstants.js
@@ -248,10 +248,22 @@
    const hit = field.options.find(o => String(o.value) === String(val));
    return hit?.label || String(val);
  }
  if (field?.type === "datetimerange" && Array.isArray(val)) {
    return val.map(formatMinuteTime).join(" 至 ");
  }
  if (Array.isArray(val)) return val.join(" 至 ");
  return String(val);
}
/** 日期时间只展示到分钟(去掉秒),列表/详情用 */
function formatMinuteTime(v) {
  const text = String(v ?? "").trim();
  const m = text.match(/^(\d{4})[-/](\d{1,2})[-/](\d{1,2})[ T](\d{1,2}):(\d{2})(?::\d{2})?/);
  if (!m) return text;
  const pad = (n) => String(n).padStart(2, "0");
  return `${m[1]}-${pad(m[2])}-${pad(m[3])} ${pad(m[4])}:${m[5]}`;
}
/**
 * 从行数据 / formConfig 解析填报字段定义与 formPayload(与新增提交结构一致)
 */
src/views/personnelManagement/monthlyStatistics/index.vue
@@ -125,6 +125,58 @@
        <el-button @click="issueRecordVisible = false">关闭</el-button>
      </template>
    </el-dialog>
    <el-dialog
      v-model="detailDialogVisible"
      :title="`${detailRow.salaryTitle || '工资表'} - 人员明细`"
      width="90%"
      append-to-body
    >
      <el-descriptions :column="4" border size="small">
        <el-descriptions-item label="工资月份">
          {{ detailRow.salaryMonth || "-" }}
        </el-descriptions-item>
        <el-descriptions-item label="状态">
          {{ statusName(detailRow.status) }}
        </el-descriptions-item>
        <el-descriptions-item label="工资总额">
          {{ formatAmount(detailRow.totalSalary) }}
        </el-descriptions-item>
        <el-descriptions-item label="审核人">
          {{ detailRow.auditUserName || "-" }}
        </el-descriptions-item>
      </el-descriptions>
      <el-table
        :data="detailRow.staffSalaryDetailList || []"
        border
        size="small"
        max-height="460"
        style="margin-top: 12px"
      >
        <el-table-column type="index" label="序号" width="60" align="center" />
        <el-table-column prop="staffName" label="姓名" width="100" />
        <el-table-column prop="deptName" label="部门" width="110" />
        <el-table-column prop="postName" label="岗位" width="100" />
        <el-table-column prop="basicSalary" label="基本工资" width="100" align="right" />
        <el-table-column prop="pieceSalary" label="计件工资" width="100" align="right" />
        <el-table-column prop="hourlySalary" label="计时工资" width="100" align="right" />
        <el-table-column prop="otherIncome" label="其他收入" width="100" align="right" />
        <el-table-column prop="socialPersonal" label="社保个人" width="100" align="right" />
        <el-table-column prop="fundPersonal" label="公积金个人" width="120" align="right" />
        <el-table-column prop="otherDeduct" label="其他支出" width="100" align="right" />
        <el-table-column prop="socialSupplementAmount" label="社保补缴" width="100" align="right" />
        <el-table-column prop="salaryTax" label="工资个税" width="100" align="right" />
        <el-table-column prop="grossSalary" label="应发工资" width="100" align="right" />
        <el-table-column prop="deductSalary" label="应扣工资" width="100" align="right" />
        <el-table-column prop="netSalary" label="实发工资" width="100" align="right" />
        <el-table-column prop="remark" label="备注" min-width="160" show-overflow-tooltip />
      </el-table>
      <div class="detail-total">
        实发合计:<span>¥ {{ detailTotal }}</span>
      </div>
      <template #footer>
        <el-button @click="detailDialogVisible = false">关闭</el-button>
      </template>
    </el-dialog>
  </div>
</template>
@@ -189,8 +241,13 @@
    label: "操作",
    align: "center",
    fixed: "right",
    width: 240,
    width: 320,
    operation: [
      {
        name: "查看明细",
        type: "text",
        clickFun: (row) => openDetail(row),
      },
      {
        name: "编辑",
        type: "text",
@@ -256,6 +313,22 @@
    ? issueRecordRow.value.staffSalaryDetailList
    : []
);
const detailDialogVisible = ref(false);
const detailRow = ref({});
const detailTotal = computed(() => {
  const list = Array.isArray(detailRow.value?.staffSalaryDetailList)
    ? detailRow.value.staffSalaryDetailList
    : [];
  const sum = list.reduce((acc, item) => acc + Number(item?.netSalary || 0), 0);
  return sum.toFixed(2);
});
const openDetail = (row) => {
  detailRow.value = row || {};
  detailDialogVisible.value = true;
};
const formatAmount = (v) => (v == null || v === "" ? "-" : Number(v).toFixed(2));
@@ -469,4 +542,15 @@
  font-weight: 600;
  font-size: 14px;
}
.detail-total {
  margin-top: 12px;
  text-align: right;
  font-size: 14px;
  color: #606266;
}
.detail-total span {
  color: #f56c6c;
  font-weight: 700;
  font-size: 16px;
}
</style>