zhangwencui
3 天以前 232fc35f716f880912ee069f582786ef63fa7723
fix(app): 商机整单折扣算法修正、薪资发放生成台账权限码修正

- 折扣率语义统一为填98按98%计价,空或0视为不打折,修复折后金额被二次扣减
- 生成台账按钮权限码改为 hrm:salary:generate,与后端/菜单一致
已修改2个文件
17 ■■■■■ 文件已修改
src/pages/crm/business/form.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/hrm/salary-payment/index.vue 4 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/crm/business/form.vue
@@ -58,12 +58,13 @@
  const materialOptions = computed(() => materials.value.map(item => materialOptionText(item)));
  function recalculate() {
    form.totalProductPrice = productTotal.value;
    form.totalPrice = Number(
      (
        (productTotal.value * (100 - Number(form.discountPercent ?? 0))) /
        100
      ).toFixed(2)
    );
    // 折扣率语义:填 98 表示按 98% 计价(即 98 折);为空或 0 时视为不打折
    const discountPercent = Number(form.discountPercent ?? 0);
    const total =
      !discountPercent
        ? productTotal.value
        : (productTotal.value * discountPercent) / 100;
    form.totalPrice = Number(total.toFixed(2));
  }
  function changeDiscount(value: string) {
    form.discountPercent = Number(value || 0);
src/pages/hrm/salary-payment/index.vue
@@ -8,6 +8,8 @@
const rows = ref<SalaryPayment[]>([]), period = ref(new Date().toISOString().slice(0, 7)), loading = ref(false), pageNo = ref(1), total = ref(0);
const pageSize = 15;
const canQuery = computed(() => hasPermission("hrm:salary-payment:query"));
// 与后端 /generate 接口及菜单权限项一致,注意不是 hrm:salary-payment:generate
const canGenerate = computed(() => hasPermission("hrm:salary:generate"));
const hasMore = computed(() => rows.value.length < total.value);
async function load(reset = true) {
  if (!state.accessToken || !canQuery.value || loading.value) return;
@@ -35,5 +37,5 @@
onPullDownRefresh(() => load(true));
onReachBottom(() => { if (hasMore.value) load(false); });
</script>
<template><view class="page"><template v-if="canQuery"><view class="search"><input v-model="period" placeholder="发放周期 YYYY-MM" @confirm="load" /><text @click="load">查询</text></view><view v-if="hasPermission('hrm:salary-payment:generate')" class="top-actions"><button @click="generate">生成发放台账</button></view><view v-for="row in rows" :key="row.id" class="card" @click="uni.navigateTo({ url: `/pages/hrm/salary-payment/detail?id=${row.id}` })"><view class="head"><view class="head-main"><text class="name">{{ row.no || "暂无单号" }}</text><text class="sub">{{ row.period || "--" }}</text></view><text :class="['tag', row.status === 1 ? 'tag-green' : 'tag-orange']">{{ row.status === 1 ? "已发放" : "待发放" }}</text></view><view class="grid"><text>总人数:{{ row.totalCount ?? 0 }}</text><text>总金额:{{ money(row.totalAmount) }}</text><text>发放时间:{{ dateTime(row.paymentTime) }}</text><text>备注:{{ row.remark || "--" }}</text></view><view class="actions" @click.stop><button @click="uni.navigateTo({ url: `/pages/hrm/salary-payment/detail?id=${row.id}` })">查看明细</button><button v-if="row.status === 0 && hasPermission('hrm:salary-payment:pay')" @click="pay(row)">发放</button></view></view><view v-if="!rows.length" class="state">{{ loading ? "加载中..." : "暂无发放台账" }}</view><view v-else class="state more">{{loading ? "加载中..." : hasMore ? "上拉加载更多" : "没有更多了"}}</view></template><view v-else class="state">暂无薪资发放查看权限</view></view></template>
<template><view class="page"><template v-if="canQuery"><view class="search"><input v-model="period" placeholder="发放周期 YYYY-MM" @confirm="load" /><text @click="load">查询</text></view><view v-if="canGenerate" class="top-actions"><button @click="generate">生成发放台账</button></view><view v-for="row in rows" :key="row.id" class="card" @click="uni.navigateTo({ url: `/pages/hrm/salary-payment/detail?id=${row.id}` })"><view class="head"><view class="head-main"><text class="name">{{ row.no || "暂无单号" }}</text><text class="sub">{{ row.period || "--" }}</text></view><text :class="['tag', row.status === 1 ? 'tag-green' : 'tag-orange']">{{ row.status === 1 ? "已发放" : "待发放" }}</text></view><view class="grid"><text>总人数:{{ row.totalCount ?? 0 }}</text><text>总金额:{{ money(row.totalAmount) }}</text><text>发放时间:{{ dateTime(row.paymentTime) }}</text><text>备注:{{ row.remark || "--" }}</text></view><view class="actions" @click.stop><button @click="uni.navigateTo({ url: `/pages/hrm/salary-payment/detail?id=${row.id}` })">查看明细</button><button v-if="row.status === 0 && hasPermission('hrm:salary-payment:pay')" @click="pay(row)">发放</button></view></view><view v-if="!rows.length" class="state">{{ loading ? "加载中..." : "暂无发放台账" }}</view><view v-else class="state more">{{loading ? "加载中..." : hasMore ? "上拉加载更多" : "没有更多了"}}</view></template><view v-else class="state">暂无薪资发放查看权限</view></view></template>
<style scoped lang="scss">@import "../list.scss";.top-actions{display:flex;justify-content:flex-end;margin-bottom:18rpx}.top-actions button{margin:0;color:var(--color-primary, #1769d8);font-size:24rpx;background:#fff}</style>