Browse Source

成本

master
wang 2 months ago
parent
commit
979f301d24
  1. BIN
      dist.zip
  2. BIN
      src/assets/images/1024lab/erweima2.png
  3. 13
      src/components/system/service-count/excel-statistics-detail.vue
  4. 11
      src/components/system/service-count/firm-statistics-detail.vue
  5. 17
      src/views/business/erp/cost/firm-reports-form.vue
  6. 26
      src/views/business/erp/cost/firm-reports-list.vue
  7. 2
      src/views/business/erp/letter/letter-list.vue
  8. 2
      src/views/business/erp/penalty-apply/penalty-apply-list.vue
  9. 4
      src/views/system/employee/components/employee-form-modal/index.vue
  10. 8
      src/views/system/home/components/official-account-card.vue
  11. 12
      vite.config.js

BIN
dist.zip

Binary file not shown.

BIN
src/assets/images/1024lab/erweima2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

13
src/components/system/service-count/excel-statistics-detail.vue

@ -152,6 +152,7 @@ const tableData = ref(props.tableData || []);
//
const summaryData = computed(() => {
if (!tableData.value || tableData.value.length === 0) {
return null;
}
@ -163,11 +164,12 @@ const summaryData = computed(() => {
totalAnnualCost: 0
};
tableData.value.forEach(item => {
summary.totalQuarterlyDuration += Number(item.quarterlyServiceDuration) || 0;
summary.totalQuarterlyCost += Number(item.quarterlyServiceCost) || 0;
summary.totalAnnualDuration += Number(item.annualServiceDuration) || 0;
summary.totalAnnualCost += Number(item.annualServiceCost) || 0;
tableData.value.forEach((item, index) => {
summary.totalQuarterlyDuration += quarterlyDuration;
summary.totalQuarterlyCost += quarterlyCost;
summary.totalAnnualDuration += annualDuration;
summary.totalAnnualCost += annualCost;
});
return summary;
@ -191,7 +193,6 @@ function formatCurrency(value) {
async function handleQuery() {
queryLoading.value = true;
try {
console.log('开始查询律师统计数据...');
const params = {
...localQueryForm,
pageNum: 1,

11
src/components/system/service-count/firm-statistics-detail.vue

@ -88,11 +88,9 @@
<div class="report-cell">-</div>
<div class="report-cell">-</div>
<div class="report-cell">{{ formatNumber(summaryData.totalQuarterlyDuration) }}</div>
<!--<div class="report-cell">{{ formatCurrency(summaryData.totalQuarterlyCost) }}</div>-->
<div class="report-cell">0</div>
<div class="report-cell">{{ formatCurrency(summaryData.totalQuarterlyCost) }}</div>
<div class="report-cell">{{ formatNumber(summaryData.totalAnnualDuration) }}</div>
<div class="report-cell">0</div>
<!--<div class="report-cell">{{ formatCurrency(summaryData.totalAnnualCost) }}</div>-->
<div class="report-cell">{{ formatCurrency(summaryData.totalAnnualCost) }}</div>
</div>
</div>
</div>
@ -176,7 +174,7 @@ function formatNumber(value) {
function formatCurrency(value) {
if (value === null || value === undefined) return '-';
const num = Number(value);
return isNaN(num) ? '-' : `¥${num.toFixed(2)}`;
return isNaN(num) ? '-' : `¥${num.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',')}`;
}
//
@ -205,9 +203,6 @@ async function fetchStatisticsData() {
console.log('API返回的数据:', tableData.value);
//
tableData.value.forEach((item, index) => {
console.log(`${index}行数据:`, item);
console.log(`lawyerServiceVOList:`, item.lawyerServiceVOList);
console.log(`hasLawyerData:`, hasLawyerData(item));
});
} catch (error) {
message.error('获取统计数据失败');

17
src/views/business/erp/cost/firm-reports-form.vue

@ -102,8 +102,7 @@
<template #footer>
<a-space>
<a-button @click="onClose">取消</a-button>
<a-button @click="saveAsDraft" type="default" v-if="!form.id">保存草稿</a-button>
<a-button type="primary" @click="submitForReview">提交</a-button>
<a-button @click="saveAsDraft" type="default" v-if="!form.id || form.approvalStatus === 0">保存草稿</a-button>
</a-space>
</template>
</a-modal>
@ -198,6 +197,18 @@
if (rowData && typeof rowData === 'object' && rowData.id) {
console.log('编辑模式,使用现有数据');
Object.assign(form, rowData);
// declareQuarter
if (form.declareQuarter && typeof form.declareQuarter === 'number') {
//
form.declareQuarter = 'Q' + form.declareQuarter;
} else if (form.declareQuarter && form.declareQuarter.includes('(')) {
// " (Q1)"
const match = form.declareQuarter.match(/\(([^)]+)\)/);
if (match && match[1]) {
form.declareQuarter = match[1]; // Q1
}
}
} else {
console.log('新建模式,等待用户选择季度后获取公益成本');
//
@ -227,7 +238,7 @@
declareYear: new Date().getFullYear(), //
declareQuarter: undefined, // ID (1,2,3,4)
revenue: undefined, //
totalCost: 0, //
//totalCost: 0, //
publicWelfareCost: undefined, //
costIncomeRatio: '0.00', // %
};

26
src/views/business/erp/cost/firm-reports-list.vue

@ -80,7 +80,7 @@
<template #bodyCell="{ text, record, column }">
<template v-if="column.dataIndex === 'action'">
<div class="smart-table-operate">
<!--<a-button v-if="record.approvalStatus === 0 || record.approvalStatus === 4" @click="showForm(record)" type="link">编辑</a-button>-->
<a-button v-if="record.approvalStatus === 0 || record.approvalStatus === 4" @click="showForm(record)" type="link">编辑</a-button>
<a-button v-if="isCto && record.approvalStatus === 0 && (record.userId == currentUserId || !record.userId)" @click="onSubmit(record)" type="link">提交</a-button>
<a-button v-if="record.approvalStatus === 1 || record.approvalStatus === 2" @click="showAuditModal(record)" type="link">审核</a-button>
<a-button v-if="isCto && record.approvalStatus === 0 && (record.userId == currentUserId || !record.userId)" @click="onDelete(record)" danger type="link">删除</a-button>
@ -167,19 +167,31 @@
ellipsis: true,
},
{
title: '营业收入(单位:万元)',
title: '营业收入(万元)',
dataIndex: 'revenue',
ellipsis: true,
customRender: ({ text }) => {
if (text === null || text === undefined || text === '') return '';
const num = parseFloat(text);
if (isNaN(num)) return text;
return num.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
},
},
{
title: '总成本支出(单位:万元)',
dataIndex: 'totalCost',
ellipsis: true,
},
//{
// title: '',
// dataIndex: 'totalCost',
// ellipsis: true,
//},
{
title: '公益成本支出(单位:万元)',
dataIndex: 'publicWelfareCost',
ellipsis: true,
customRender: ({ text }) => {
if (text === null || text === undefined || text === '') return '';
const num = parseFloat(text);
if (isNaN(num)) return text;
return num.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
},
},
{
title: '成本收入比',

2
src/views/business/erp/letter/letter-list.vue

@ -53,7 +53,7 @@
<!---------- 承诺书列表显示区域 begin ----------->
<a-card v-if="!isCeo" size="small" :bordered="false" :hoverable="true" style="margin-bottom: 16px;">
<template #title>
<span>承诺书列表</span>
<span>承诺书模版</span>
</template>
<div style="display: flex; flex-wrap: wrap; gap: 16px;">
<div

2
src/views/business/erp/penalty-apply/penalty-apply-list.vue

@ -45,7 +45,7 @@
<!---------- 表格操作行 begin ----------->
<a-row class="smart-table-btn-block">
<div class="smart-table-operate-block">
<a-button @click="showForm" type="primary">
<a-button @click="showForm" type="primary" v-if="!isCeo">
<template #icon>
<PlusOutlined />
</template>

4
src/views/system/employee/components/employee-form-modal/index.vue

@ -56,6 +56,9 @@
<a-form-item label="成本查看权限" name="costVisibleFlag">
<a-switch v-model:checked="form.costVisibleFlag" checked-children="" un-checked-children="" />
</a-form-item>
<a-form-item label="无处罚证明查看权限" name="penaltyFlag">
<a-switch v-model:checked="form.penaltyFlag" checked-children="" un-checked-children="" />
</a-form-item>
</a-form>
<div class="footer">
<a-button style="margin-right: 8px" @click="onClose">取消</a-button>
@ -129,6 +132,7 @@
positionId: undefined,
email: undefined,
costVisibleFlag: false, //
penaltyFlag: false, //
};
let form = reactive(_.cloneDeep(formDefault));

8
src/views/system/home/components/official-account-card.vue

@ -13,7 +13,11 @@
<div class="app-qr-box">
<div class="app-qr">
<img :src="zhuoda" />
<span class="qr-desc strong">合肥市律师公益法律服务技术保障群</span>
<span class="qr-desc strong">合肥市律师公益法律服务技术保障一群</span>
</div>
<div class="app-qr">
<img :src="xiaozhen" />
<span class="qr-desc strong">合肥市律师公益法律服务技术保障二群</span>
</div>
</div>
</default-home-card>
@ -21,7 +25,7 @@
<script setup>
import DefaultHomeCard from '/@/views/system/home/components/default-home-card.vue';
import zhuoda from '/@/assets/images/1024lab/erweima.png';
import xiaozhen from '/@/assets/images/1024lab/gzh.jpg';
import xiaozhen from '/@/assets/images/1024lab/erweima2.png';
</script>
<style lang="less" scoped>
.app-qr-box {

12
vite.config.js

@ -35,20 +35,20 @@ export default {
proxy: {
// 代理API路径
'/api': {
target: 'http://8.148.67.92:8080/', // 目标服务器地址
//target: 'http://127.0.0.1:8080/',
//target: 'http://8.148.67.92:8080/', // 目标服务器地址
target: 'http://127.0.0.1:8080/',
changeOrigin: true, // 是否修改请求头中的 Origin 字段
rewrite: (path) => path.replace(/^\/api/, ''), // 重写路径
},
'/login': {
target: 'http://8.148.67.92:8080/', // 目标服务器地址
//target: 'http://127.0.0.1:8080/',
//target: 'http://8.148.67.92:8080/', // 目标服务器地址
target: 'http://127.0.0.1:8080/',
changeOrigin: true, // 是否修改请求头中的 Origin 字段
rewrite: (path) => path.replace(/^\/api/, ''), // 重写路径
},
'/mobile/login': {
target: 'http://8.148.67.92:8080/', // 目标服务器地址
//target: 'http://127.0.0.1:8080/',
//target: 'http://8.148.67.92:8080/', // 目标服务器地址
target: 'http://127.0.0.1:8080/',
changeOrigin: true, // 是否修改请求头中的 Origin 字段
rewrite: (path) => path.replace(/^\/api/, ''), // 重写路径
},

Loading…
Cancel
Save