Commit 00776e383d1662208e6a4066362aa7f98650edca

Authored by boyang
1 parent 0e1702ec

修改权限

src/api/project/approve.ts
... ... @@ -30,7 +30,6 @@ export const getWaitListApi = async (params: DemoParams) => {
30 30 res.records = res.records.map((item) => {
31 31 return item;
32 32 });
33   - console.log(res.records, 5656565656);
34 33 return new Promise((resolve) => {
35 34 resolve({ items: res.records, total: res.total });
36 35 });
... ...
src/api/project/order.ts
... ... @@ -195,7 +195,6 @@ export const orderExport = async (data: any = {}) => {
195 195 a.download = `${strArr.join('_')} ${date}.xlsx`; // 你可以为文件命名
196 196 document.body.appendChild(a);
197 197 a.click(); // 模拟点击操作来下载文件
198   - console.log(a, '5656a');
199 198 URL.revokeObjectURL(downloadUrl); // 释放掉 blob 对象所占用的内存
200 199 document.body.removeChild(a);
201 200  
... ...
src/router/routes/modules/project/finance.ts
... ... @@ -13,7 +13,13 @@ const finance: AppRouteModule = {
13 13 orderNo: 3,
14 14 icon: 'ant-design:pay-circle-outlined',
15 15 title: '财务管理',
16   - roles: [RoleEnum.ADMIN, RoleEnum.FINANCE],
  16 + roles: [
  17 + RoleEnum.ADMIN,
  18 + RoleEnum.FINANCE,
  19 + RoleEnum.TRACKER,
  20 + RoleEnum.BUSINESS,
  21 + RoleEnum.PRODUCE,
  22 + ],
17 23 },
18 24 children: [
19 25 {
... ... @@ -21,7 +27,7 @@ const finance: AppRouteModule = {
21 27 name: 'Receive',
22 28 meta: {
23 29 title: '应收款',
24   - // roles: [RoleEnum.ADMIN],
  30 + roles: [RoleEnum.ADMIN, RoleEnum.FINANCE, RoleEnum.TRACKER, RoleEnum.BUSINESS],
25 31 ignoreKeepAlive: false,
26 32 },
27 33 component: () => import('/@/views/project/finance/receive/index.vue'),
... ... @@ -32,6 +38,14 @@ const finance: AppRouteModule = {
32 38 meta: {
33 39 title: '应付款',
34 40 ignoreKeepAlive: true,
  41 + roles: [
  42 + RoleEnum.ADMIN,
  43 + RoleEnum.FINANCE,
  44 + RoleEnum.TRACKER,
  45 + RoleEnum.BUSINESS,
  46 + RoleEnum.PRODUCE,
  47 + RoleEnum.DATA_REPORT_USER,
  48 + ],
35 49 },
36 50 component: () => import('/@/views/project/finance/pay/index.vue'),
37 51 },
... ...
src/views/dashboard/analysis/components/GrowCard.vue
... ... @@ -75,7 +75,6 @@
75 75 );
76 76 const growCardList = computed(() => {
77 77 const data = dataStore.getData;
78   - console.log(data1.value, '5656data1.value');
79 78 return [
80 79 {
81 80 title: '订单完成',
... ... @@ -131,7 +130,6 @@
131 130 dateTime: dateTime.value,
132 131 period: period.value,
133 132 });
134   - console.log(data1.value, '56565656');
135 133 data2.value = await getSalesData({
136 134 businessPersonIn: businessPersonIn.value,
137 135 customerCodeIn: customerCodeIn.value,
... ...
src/views/dashboard/analysis/components/VisitAnalysisBar.vue
... ... @@ -79,7 +79,6 @@
79 79 return user?.roleSmallVO?.code;
80 80 });
81 81 const orderStore = useOrderStoreWithOut();
82   - console.log(orderStore, '5656order');
83 82 onMounted(async () => {
84 83 await orderStore.getDict();
85 84 });
... ... @@ -99,7 +98,7 @@
99 98 businessPersonInChange.length = 0; // 也可以使用 array.splice(0, array.length);
100 99 businessPersonInChange.push(value);
101 100 }
102   - console.log(`5656selected ${businessPersonInChange}`);
  101 + // console.log(`5656selected ${businessPersonInChange}`);
103 102 };
104 103 const handleChangeCustomer = (value: string) => {
105 104 if (customerCodeInChange.length === 0) {
... ... @@ -110,14 +109,10 @@
110 109 customerCodeInChange.length = 0; // 也可以使用 array.splice(0, array.length);
111 110 customerCodeInChange.push(value);
112 111 }
113   - console.log(`5656selected ${customerCodeInChange}`);
114   - };
115   - const handleBlur = () => {
116   - console.log('5656blur');
117   - };
118   - const handleFocus = () => {
119   - console.log('5656focus');
  112 + // console.log(`5656selected ${customerCodeInChange}`);
120 113 };
  114 + const handleBlur = () => {};
  115 + const handleFocus = () => {};
121 116 const filterOption = (input: string, option: any) => {
122 117 return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0;
123 118 };
... ... @@ -151,13 +146,11 @@
151 146  
152 147 watchEffect(async () => {
153 148 // const data1 = dataStore?.getCustomerChartData1 || {};
154   - console.log(periodChange.value, '56565656periodChange');
155 149 const data2 = await getCustomerSalesData({
156 150 businessPersonIn: businessPersonIn.value,
157 151 customerCodeIn: customerCodeIn.value,
158 152 period: periodChange.value,
159 153 });
160   - console.log(data2, '5656data2');
161 154 const x = [],
162 155 y = [],
163 156 z = [];
... ...
src/views/project/approve/PayPanel.vue
... ... @@ -37,7 +37,7 @@
37 37 <!-- :showFooter="!isApproved && role === ROLE.ADMIN" -->
38 38  
39 39 <BasicModal
40   - :formFooter="!isApproved && role === ROLE.ADMIN"
  40 + :formFooter="(!isApproved && role === ROLE.ADMIN) || showInvoice"
41 41 @register="registerModal"
42 42 title="申请信息"
43 43 okText="通过"
... ... @@ -112,8 +112,18 @@
112 112 </template>
113 113 </a-list> -->
114 114 <template #appendFooter>
115   - <a-button v-if="!isApproved && role === ROLE.ADMIN" @click="handleFalse"> 不通过</a-button>
116   - <a-button v-if="isApproved && role === ROLE.ADMIN" @click="handleFalse"> 驳回重填</a-button>
  115 + <a-button
  116 + v-if="(!isApproved && role === ROLE.ADMIN) || (!isApproved && showInvoice)"
  117 + @click="handleFalse"
  118 + >
  119 + 不通过</a-button
  120 + >
  121 + <a-button
  122 + v-if="(isApproved && role === ROLE.ADMIN) || (isApproved && showInvoice)"
  123 + @click="handleFalse"
  124 + >
  125 + 驳回重填</a-button
  126 + >
117 127 <a-button @click="handleExport"> 导出</a-button>
118 128 </template>
119 129 </BasicModal>
... ... @@ -307,7 +317,6 @@
307 317 }
308 318 }
309 319 function handleEdit(record, e) {
310   - // console.log(record, '56565re');
311 320 e?.stopPropagation();
312 321 return false;
313 322 }
... ... @@ -323,7 +332,6 @@
323 332 id.value = data.id;
324 333 itemArray.value = [];
325 334 mockData.value = data.fieldInfos.checkBillOrderDO;
326   - console.log(mockData, '5656mockdata');
327 335 actualPayCalculate.value = mockData.value.actualPayCalculate?.toFixed(2); // 实际付款金额计算
328 336 checkNo.value = mockData.value.checkNo; // 对账单号
329 337 actualPayedAmount.value = mockData.value.actualPayedAmount?.toFixed(2); // 实际应付金额
... ... @@ -396,7 +404,6 @@
396 404 link.download = `付款单${date}.xlsx`; // 你可以为文件命名
397 405 document.body.appendChild(link);
398 406 link.click(); // 自动点击链接,触发下载
399   - console.log(link, 5656);
400 407 document.body.removeChild(link); // 下载完成后移除链接
401 408 })
402 409 .catch((error) => {
... ... @@ -404,20 +411,6 @@
404 411 });
405 412 closeModal();
406 413 }
407   - // async function handleExport() {
408   - // const res = await getExportReceipt({
409   - // checkNo: checkNo.value,
410   - // actualPayedAmount: actualPayedAmount.value,
411   - // deductAmount: deductAmount.value,
412   - // totalActualPayedAmount: totalActualPayedAmount.value,
413   - // unPayedAmount: unPayedAmount.value,
414   - // payedDate: payedDate.value,
415   - // actualPayedDate: actualPayedDate.value,
416   - // });
417   - // console.log(res, '5656res');
418   - // closeModal();
419   - // }
420   -
421 414 const role = computed(() => {
422 415 return userStore.getUserInfo?.roleSmallVO?.code;
423 416 });
... ...
src/views/project/approve/ReceivePanel.vue
... ... @@ -344,7 +344,6 @@
344 344 // 定义处理导出的函数
345 345 const handleExport = async () => {
346 346 try {
347   - console.log(payee.value, '5656payee.value');
348 347 const response = await axios.post(
349 348 '/basic-api/order/erp/invoice_bill/exportReceipt',
350 349 {
... ...
src/views/project/approve/index.vue
1 1 <template>
2 2 <div className="approve-page px-4 bg-white">
3   - <a-tabs default-active-key="1" v-model:activeKey="currentKey">
4   - <a-tab-pane key="1" tab="字段待审核">
  3 + <a-tabs :default-active-key="role === ROLE.FINANCE ? '7' : '1'" v-model:activeKey="currentKey">
  4 + <a-tab-pane key="1" tab="字段待审核" v-if="role !== ROLE.FINANCE">
5 5 <FieldPanel />
6 6 </a-tab-pane>
7   - <a-tab-pane key="3" tab="利润分析待审核">
  7 + <a-tab-pane key="3" tab="利润分析待审核" v-if="role !== ROLE.FINANCE">
8 8 <ProfitPanel />
9 9 </a-tab-pane>
10   - <a-tab-pane key="5" tab="项目报告书待审核">
  10 + <a-tab-pane key="5" tab="项目报告书待审核" v-if="role !== ROLE.FINANCE">
11 11 <ReportPanel />
12 12 </a-tab-pane>
13   - <a-tab-pane key="7" tab="应收款待审核">
  13 + <a-tab-pane key="7" tab="应收款待审核" v-if="role == ROLE.FINANCE || role == ROLE.ADMIN">
14 14 <ReceivePanel />
15 15 </a-tab-pane>
16   - <a-tab-pane key="9" tab="应付款待审核">
  16 + <a-tab-pane key="9" tab="应付款待审核" v-if="role == ROLE.FINANCE || role == ROLE.ADMIN">
17 17 <PayPanel />
18 18 </a-tab-pane>
19   - <a-tab-pane key="2" tab="字段已审核">
  19 + <a-tab-pane key="2" tab="字段已审核" v-if="role !== ROLE.FINANCE">
20 20 <FieldPanel isApproved />
21 21 </a-tab-pane>
22   - <a-tab-pane key="4" tab="利润分析已审核">
  22 + <a-tab-pane key="4" tab="利润分析已审核" v-if="role !== ROLE.FINANCE">
23 23 <ProfitPanel isApproved />
24 24 </a-tab-pane>
25   - <a-tab-pane key="6" tab="项目报告书已审核">
  25 + <a-tab-pane key="6" tab="项目报告书已审核" v-if="role !== ROLE.FINANCE">
26 26 <ReportPanel isApproved />
27 27 </a-tab-pane>
28   - <a-tab-pane key="8" tab="应收款已审核">
  28 + <a-tab-pane key="8" tab="应收款已审核" v-if="role == ROLE.FINANCE || role == ROLE.ADMIN">
29 29 <ReceivePanel isApproved />
30 30 </a-tab-pane>
31   - <a-tab-pane key="10" tab="应付款已审核">
  31 + <a-tab-pane key="10" tab="应付款已审核" v-if="role == ROLE.FINANCE || role == ROLE.ADMIN">
32 32 <PayPanel isApproved />
33 33 </a-tab-pane>
34 34 </a-tabs>
35 35 </div>
36 36 </template>
37 37 <script lang="ts">
38   - import { defineComponent, onMounted, ref } from 'vue';
  38 + import { computed, defineComponent, onMounted, ref, watchEffect } from 'vue';
39 39 import { Tabs } from 'ant-design-vue';
  40 + import { ROLE } from '../order/type.d';
40 41 import ReportPanel from './ReportPanel.vue';
41 42 import ProfitPanel from './ProfitPanel.vue';
42 43 import FieldPanel from './FieldPanel.vue';
43 44 import ReceivePanel from './ReceivePanel.vue';
44 45 import PayPanel from './PayPanel.vue';
45 46 import { useOrderStoreWithOut } from '/@/store/modules/order';
  47 + import { useUserStoreWithOut } from '/@/store/modules/user';
46 48  
47 49 const orderStore = useOrderStoreWithOut();
  50 + const userStore = useUserStoreWithOut();
  51 + const user = userStore.getUserInfo;
  52 + const role = computed(() => {
  53 + return user?.roleSmallVO?.code;
  54 + });
48 55  
49 56 export default defineComponent({
50 57 components: {
... ... @@ -63,10 +70,17 @@
63 70 onMounted(async () => {
64 71 await orderStore.getDict();
65 72 });
  73 + watchEffect(() => {
  74 + if (role.value == ROLE.FINANCE) {
  75 + currentKey.value = '7';
  76 + }
  77 + });
66 78  
67 79 return {
68 80 checkedKeys,
69 81 currentKey,
  82 + role,
  83 + ROLE,
70 84 };
71 85 },
72 86 });
... ...
src/views/project/config/ProduCostCreate.vue
... ... @@ -50,7 +50,6 @@
50 50 const info = ref();
51 51 const [register, { setModalProps, closeModal }] = useModalInner(async (data) => {
52 52 listAll.value = data;
53   - console.log(listAll.value, '5656modaldata.value');
54 53 });
55 54 //获取现有的列表
56 55 const listAll = ref();
... ...
src/views/project/config/ProduCostEdit.vue
... ... @@ -32,7 +32,6 @@
32 32  
33 33 const [register, { closeDrawer }] = useDrawerInner((data) => {
34 34 listAll.value = data.data;
35   - console.log(listAll.value, '5656listAll.value');
36 35 relationValue.value = JSON.parse(listAll.value.relationValue);
37 36 fixCost.value = relationValue.value[0].relationValue;
38 37 ratio.value = relationValue.value[1].relationValue;
... ... @@ -47,7 +46,6 @@
47 46 async function handleSubmit() {
48 47 relationValue.value[0].relationValue = fixCost.value;
49 48 relationValue.value[1].relationValue = ratio.value;
50   - console.log(relationValue.value, '5656relationValue.value');
51 49 await saveConfig({
52 50 id: listAll.value.id,
53 51 settingCode: 'customerCode',
... ...
src/views/project/config/costCreate.vue
... ... @@ -58,7 +58,6 @@
58 58 const info = ref();
59 59 const [register, { setModalProps, closeModal }] = useModalInner(async (data) => {
60 60 listAll.value = data;
61   - console.log(listAll.value, '5656modaldata.value');
62 61 });
63 62 //获取现有的列表
64 63 const listAll = ref();
... ...
src/views/project/config/costEdit.vue
... ... @@ -34,7 +34,6 @@
34 34  
35 35 const [register, { closeDrawer }] = useDrawerInner((data) => {
36 36 listAll.value = data.data;
37   - console.log(listAll.value, '5656listAll.value');
38 37 relationValue.value = JSON.parse(listAll.value.relationValue);
39 38 fixCost.value = relationValue.value[0].relationValue;
40 39 ratio.value = relationValue.value[1].relationValue;
... ... @@ -52,7 +51,6 @@
52 51 relationValue.value[0].relationValue = fixCost.value;
53 52 relationValue.value[1].relationValue = ratio.value;
54 53 relationValue.value[2].relationValue = spainRatio.value;
55   - console.log(relationValue.value, '5656relationValue.value');
56 54 await saveConfig({
57 55 id: listAll.value.id,
58 56 settingCode: 'customerCode',
... ...
src/views/project/finance/pay/CheckSum.vue
... ... @@ -98,7 +98,6 @@
98 98 const res = await checkAnalysis({ ids: ids.value });
99 99 const arrayRes = ref([]);
100 100 arrayRes.value.push(res);
101   - console.log(res, 56561);
102 101 return res;
103 102 },
104 103 columns: columnsAnalysis,
... ... @@ -147,7 +146,6 @@
147 146 link.download = `应付款分析${date}.xlsx`; // 你可以为文件命名
148 147 document.body.appendChild(link);
149 148 link.click(); // 自动点击链接,触发下载
150   - console.log(link, 5656);
151 149 document.body.removeChild(link); // 下载完成后移除链接
152 150 })
153 151 .catch((error) => {
... ...
src/views/project/finance/pay/Commit.vue
... ... @@ -15,11 +15,13 @@
15 15 import { BasicModal, useModalInner } from '@/components/Modal';
16 16 import { ref } from 'vue';
17 17 import { checkCommit } from '@/api/project/invoice';
  18 + import { useMessage } from '/@/hooks/web/useMessage';
18 19  
19 20 const id = ref();
20 21 const date = ref();
21 22 const emit = defineEmits(['success']);
22   -
  23 + const { createMessage } = useMessage();
  24 + const { error } = createMessage;
23 25 const [register, { closeModal }] = useModalInner(async (data) => {
24 26 id.value = data.data.id;
25 27 });
... ... @@ -35,10 +37,17 @@
35 37 // 返回格式化后的日期字符串
36 38 return `${year}-${month}-${day}`;
37 39 }
38   -
  40 + const isDisabled = ref(false);
39 41 async function handleOk() {
  42 + if (isDisabled.value) {
  43 + error('请勿连续点击生成按钮,需要等待三秒再点击生成');
  44 + return;
  45 + }
40 46 const formattedDate = formatDate(date.value);
41   -
  47 + isDisabled.value = true;
  48 + setTimeout(() => {
  49 + isDisabled.value = false;
  50 + }, 3000);
42 51 checkCommit({ id: id.value, actualPayedDate: formattedDate });
43 52 emit('success');
44 53 closeModal();
... ...
src/views/project/finance/pay/FinanceEdit.vue
... ... @@ -15,13 +15,13 @@
15 15 <!-- <div>
16 16 <BasicForm @register="registerForm" />
17 17 </div> -->
18   - <div style="font-size: 15px">实际应金额1$</div>
  18 + <div style="font-size: 15px">实际应金额1$</div>
19 19 <a-input v-model:value="input1" placeholder="请输入" :disabled="status === 10" auto-size />
20 20 <div style="margin: 16px 0"></div>
21   - <div style="font-size: 15px">实际应金额2$</div>
  21 + <div style="font-size: 15px">实际应金额2$</div>
22 22 <a-input v-model:value="input2" placeholder="请输入" :disabled="status === 10" auto-size />
23 23 <div style="margin: 16px 0"></div>
24   - <div style="font-size: 15px">实际应金额3$</div>
  24 + <div style="font-size: 15px">实际应金额3$</div>
25 25 <a-input v-model:value="input3" placeholder="请输入" :disabled="status === 10" auto-size />
26 26 <div style="margin: 16px 0"></div>
27 27  
... ...
src/views/project/finance/pay/TrackEdit.vue
... ... @@ -126,7 +126,6 @@
126 126 }
127 127 //完成编辑
128 128 async function handleSubmit() {
129   - console.log(input1.value, deductUrl.value, deductDept.value, '5656ddd');
130 129 if (!input1.value || !deductDept.value) {
131 130 error('选项不能为空');
132 131 } else {
... ...
src/views/project/finance/pay/index.vue
... ... @@ -20,11 +20,21 @@
20 20 <template #bodyCell="{ column, record }">
21 21 <template v-if="column.key === 'action'">
22 22 <TableAction
  23 + v-if="
  24 + role == ROLE.ADMIN ||
  25 + role == ROLE.FINANCE ||
  26 + role == ROLE.TRACKER ||
  27 + role == ROLE.BUSINESS
  28 + "
23 29 :actions="[
24   - {
25   - label: '财务编辑',
26   - onClick: handleFinanceEdit.bind(null, record),
27   - },
  30 + ...(role == ROLE.ADMIN || role == ROLE.FINANCE
  31 + ? [
  32 + {
  33 + label: '财务编辑',
  34 + onClick: handleFinanceEdit.bind(null, record),
  35 + },
  36 + ]
  37 + : []),
28 38 {
29 39 label: '跟单编辑',
30 40 onClick: handleTrackEdit.bind(null, record),
... ... @@ -35,15 +45,14 @@
35 45 },
36 46 ]"
37 47 :dropDownActions="[
38   - {
39   - label: '提交审核',
40   - // popConfirm: {
41   - // title: '是否确认提交审核',
42   - // placement: 'left',
43   - // confirm: handleCommit.bind(null, record),
44   - // },
45   - onClick: handleCommit.bind(null, record),
46   - },
  48 + ...(role == ROLE.ADMIN || role == ROLE.FINANCE
  49 + ? [
  50 + {
  51 + label: '提交审核',
  52 + onClick: handleCommit.bind(null, record),
  53 + },
  54 + ]
  55 + : []),
47 56 {
48 57 label: '订单信息',
49 58 onClick: handleDetail.bind(null, record),
... ... @@ -67,13 +76,26 @@
67 76 },
68 77 ]"
69 78 />
  79 + <TableAction
  80 + v-if="role == ROLE.PRODUCE"
  81 + :actions="[
  82 + {
  83 + label: '发票上传',
  84 + onClick: handleInvoiceUpload.bind(null, record),
  85 + },
  86 + {
  87 + label: '生产科发票',
  88 + onClick: handleInvoiceShow.bind(null, record),
  89 + },
  90 + ]"
  91 + />
70 92 </template>
71 93 </template>
72 94 </BasicTable>
73 95 </div>
74 96 </template>
75 97 <script lang="ts" setup>
76   - import { defineComponent, ref } from 'vue';
  98 + import { computed, defineComponent, ref } from 'vue';
77 99 import { BasicTable, useTable, BasicColumn, TableAction } from '/@/components/Table';
78 100 import { searchFormSchema, columns } from './pay.data';
79 101 import TrackEdit from './TrackEdit.vue';
... ... @@ -88,7 +110,9 @@
88 110 import { useModal } from '/@/components/Modal';
89 111 import { getCheck, checkDelete, checkCommit, checkDetail } from '@/api/project/invoice';
90 112 import { useMessage } from '/@/hooks/web/useMessage';
  113 + import { ROLE } from './type.d';
91 114 import { getOrderList } from '/@/api/project/order';
  115 + import { useUserStoreWithOut } from '/@/store/modules/user';
92 116  
93 117 const [registerCheckSum, { openModal: openCheckSum }] = useModal();
94 118 const [registerFinanceEdit, { openDrawer: openFinanceEdit }] = useDrawer();
... ... @@ -98,6 +122,11 @@
98 122 const [registerCommit, { openModal: openCommit }] = useModal();
99 123 const [registerInvoiceShow, { openModal: openInvoiceShow }] = useModal();
100 124 const [registerInvoiceDetail, { openDrawer: openCheckDetail }] = useDrawer();
  125 + const userStore = useUserStoreWithOut();
  126 + const user = userStore.getUserInfo;
  127 + const role = computed(() => {
  128 + return user?.roleSmallVO?.code;
  129 + });
101 130 const checkedKeys = ref<Array<string | number>>([]);
102 131 // 添加分页状态
103 132 const pagination = ref({
... ...
src/views/project/finance/pay/type.d.ts 0 → 100644
  1 +export enum ROLE {
  2 + ADMIN = 'admin', // 超管
  3 + CUSTOM_ADMIN = 'custom_admin', // 客户管理员
  4 + DATA_REPORT_USER = 'data_report_user', //数据分析员
  5 + BUSINESS = 'business_user', // 业务员
  6 + TRACKER = 'tracker_user', // 跟单员
  7 + INSPECT = 'inspect_user', // 质检员
  8 + PRODUCE = 'produce_user', //生产科
  9 + FINANCE = 'finance_user', //生产科
  10 +}
... ...
src/views/project/finance/receive/Commit.vue
... ... @@ -21,12 +21,14 @@
21 21 import { BasicModal, useModalInner } from '@/components/Modal';
22 22 import { ref } from 'vue';
23 23 import { commit } from '@/api/project/invoice';
  24 + import { useMessage } from '/@/hooks/web/useMessage';
24 25  
25 26 const id = ref();
26 27 const payee = ref();
27 28 const date = ref();
28 29 const emit = defineEmits(['success']);
29   -
  30 + const { createMessage } = useMessage();
  31 + const { error } = createMessage;
30 32 const [register, { closeModal }] = useModalInner(async (data) => {
31 33 id.value = data.data.id;
32 34 });
... ... @@ -42,9 +44,17 @@
42 44 // 返回格式化后的日期字符串
43 45 return `${year}-${month}-${day}`;
44 46 }
45   -
  47 + const isDisabled = ref(false);
46 48 async function handleOk() {
  49 + if (isDisabled.value) {
  50 + error('请勿连续点击生成按钮,需要等待三秒再点击生成');
  51 + return;
  52 + }
47 53 const formattedDate = formatDate(date.value);
  54 + isDisabled.value = true;
  55 + setTimeout(() => {
  56 + isDisabled.value = false;
  57 + }, 3000);
48 58 commit({ id: id.value, actualRefundDate: formattedDate, payee: payee.value });
49 59 emit('success');
50 60 closeModal();
... ...
src/views/project/finance/receive/DeductShow.vue
... ... @@ -55,7 +55,6 @@
55 55 const [register, { closeModal }] = useModalInner(async (data) => {
56 56 itemArray.value = [];
57 57 const res = await getInvoiceDeductUrlById({ id: data.data.id });
58   - console.log(res, '5656resssdata');
59 58 for (let item in res) {
60 59 const url = res[item];
61 60 const name = item;
... ...
src/views/project/finance/receive/FinanceEdit.vue
... ... @@ -42,8 +42,12 @@
42 42 import { getEmailList } from '/@/api/sys/config';
43 43 import { updateAmount } from '@/api/project/invoice';
44 44 import { useMessage } from '/@/hooks/web/useMessage';
  45 + import { ROLE } from './type.d';
45 46  
46 47 const emit = defineEmits(['success']);
  48 + const role = computed(() => {
  49 + return user?.roleSmallVO?.code;
  50 + });
47 51 const schemas: FormSchema[] = [
48 52 // {
49 53 // field: 'totalPayAmount',
... ... @@ -133,7 +137,6 @@
133 137 input4.value = data.data.otherAmount;
134 138 resetFields();
135 139 setDrawerProps({ confirmLoading: false });
136   - console.log(data, '5656666dd');
137 140 setFieldsValue({
138 141 ...toRaw(data.data),
139 142 });
... ...
src/views/project/finance/receive/index.vue
... ... @@ -6,6 +6,7 @@
6 6 type="primary"
7 7 @click="handleInvoiceAnalysis"
8 8 :style="{ borderRadius: '5px 5px 5px 5px' }"
  9 + v-if="role == ROLE.ADMIN || role == ROLE.FINANCE"
9 10 >收款单分析</a-button
10 11 >
11 12 <FinanceEdit @register="registerFinanceEdit" @success="handleSuccess" />
... ... @@ -20,23 +21,30 @@
20 21 <template v-if="column.key === 'action'">
21 22 <TableAction
22 23 :actions="[
23   - {
24   - label: '财务编辑',
25   - onClick: handleFinanceEdit.bind(null, record),
26   - },
  24 + // {
  25 + // label: '财务编辑',
  26 + // onClick: handleFinanceEdit.bind(null, record),
  27 + // },
  28 + ...(role == ROLE.ADMIN || role == ROLE.FINANCE
  29 + ? [
  30 + {
  31 + label: '财务编辑',
  32 + onClick: handleFinanceEdit.bind(null, record),
  33 + },
  34 + ]
  35 + : []),
27 36 {
28 37 label: '跟单编辑',
29 38 onClick: handleTrackEdit.bind(null, record),
30 39 },
31   - {
32   - label: '提交审核',
33   - // popConfirm: {
34   - // title: '是否确认提交审核',
35   - // placement: 'left',
36   - // confirm: handleCommit.bind(null, record),
37   - // },
38   - onClick: handleCommit.bind(null, record),
39   - },
  40 + ...(role == ROLE.ADMIN || role == ROLE.FINANCE
  41 + ? [
  42 + {
  43 + label: '提交审核',
  44 + onClick: handleCommit.bind(null, record),
  45 + },
  46 + ]
  47 + : []),
40 48 ]"
41 49 :dropDownActions="[
42 50 {
... ... @@ -88,7 +96,6 @@
88 96 import { useMessage } from '/@/hooks/web/useMessage';
89 97  
90 98 const [registerInvoiceAnalysis, { openModal: openInvoiceAnalysis }] = useModal();
91   -
92 99 const [registerFinanceEdit, { openDrawer: openFinanceEdit }] = useDrawer();
93 100 const [registerTrackEdit, { openDrawer: openTrackEdit }] = useDrawer();
94 101 const [registerInvoiceDetail, { openDrawer: openInvoiceDetail }] = useDrawer();
... ... @@ -172,8 +179,6 @@
172 179  
173 180 checkedKeys.value = checkedKeys.value.filter((id) => id !== record.id);
174 181 }
175   - // console.log(selectedCustomCodes.value, 56561);
176   - // console.log(checkedKeys.value, 56562);
177 182 }
178 183  
179 184 async function onSelectAll(selected: boolean, selectedRows: any[], changeRows: any[]) {
... ...
src/views/project/order/FormDetail/ApproveReason.vue
... ... @@ -22,7 +22,6 @@
22 22 const input = ref('');
23 23 const res = ref();
24 24 const [register, { setModalProps, redoModalHeight, closeModal }] = useModalInner(async (data) => {
25   - console.log(data, '5656approvedata');
26 25 res.value = data;
27 26 });
28 27 async function handleOk() {
... ...
src/views/project/order/ProductInvoice.vue
... ... @@ -47,7 +47,6 @@
47 47 const [register, { closeModal }] = useModalInner(async (data) => {
48 48 res.value = data.data;
49 49 Input2.value = await payDate({ orderIds: res.value });
50   - console.log(Input2.value, 565656);
51 50 });
52 51 async function handleOk() {
53 52 await checkCreate({
... ...
src/views/project/order/ProductProfit.vue
... ... @@ -148,7 +148,6 @@
148 148 const ids = ref();
149 149  
150 150 const [register, { closeModal }] = useModalInner(async (data) => {
151   - console.log(data, '5656datapro');
152 151 res.value = data.data;
153 152 filteredItems.value = data.filteredItems;
154 153 filteredItems.value.forEach((item) => {
... ... @@ -164,8 +163,6 @@
164 163 const extractedValues = ref<string[]>(data.projectNo.map((item) => item[0]));
165 164 projectNo.value = extractedValues.value.join(',');
166 165 ids.value = data.data;
167   - console.log(customerCode.value, '5656customerCode.value');
168   - console.log(Input2.value, 565656);
169 166 filteredItems.value = data.filteredItems;
170 167 });
171 168 async function handleOk() {
... ... @@ -208,7 +205,6 @@
208 205 link.download = `内部生产净利润分析${date}.xlsx`; // 你可以为文件命名
209 206 document.body.appendChild(link);
210 207 link.click(); // 自动点击链接,触发下载
211   - console.log(link, 5656);
212 208 document.body.removeChild(link); // 下载完成后移除链接
213 209 })
214 210 .catch((error) => {
... ... @@ -269,7 +265,6 @@
269 265 productionDepartmentPredictPrice: productionDepartmentPredictPrice.value,
270 266 productionActualPrice: productionActualPrice.value,
271 267 });
272   - console.log(res, '5656resproductprofit');
273 268 grossProfit.value = res.grossProfit.toFixed(2);
274 269 innerProduceFixProfit.value = res.innerProduceFixProfit.toFixed(2);
275 270 innerProduceTotalPrice.value = res.innerProduceTotalPrice.toFixed(2);
... ... @@ -282,7 +277,6 @@
282 277 projectDays.value = res.projectDays;
283 278 // predictRatioDeduct.value = res.predictAndActualRatio;
284 279 predictRatioDeduct.value = `${res.predictAndActualRatio}%`;
285   - console.log(filteredItems.value, '5656filteredItems');
286 280 // filteredItems.value.forEach((item) => {
287 281 // sumMoney.value += item.profitAnalysisInfo.productionDepartmentTotalPrice;
288 282 // sumCount.value += item.orderCount;
... ...
src/views/project/order/ProductText.vue
... ... @@ -177,7 +177,6 @@
177 177 }
178 178 //发送按钮
179 179 async function handleExport() {
180   - console.log(resText.value.produceFile, resText.value.productionDepartment, 5656);
181 180 const res = await exportProductText({
182 181 productionUrl: resText.value.productionUrl,
183 182 productionDepartment: resText.value.productionDepartment,
... ...
src/views/project/order/ServiceProfit.vue
... ... @@ -73,22 +73,22 @@
73 73 <tr>
74 74 <td style="border: 1px solid black" colspan="2">客户总金额合计</td>
75 75 <td style="border: 1px solid black">¥{{ customerTotalPrice }}</td>
76   - <td style="border: 1px solid black"></td>
  76 + <td style="border: 1px solid black">${{ customerTotalPriceUsd }}</td>
77 77 </tr>
78 78 <tr>
79 79 <td style="border: 1px solid black" colspan="2">生产科总价合计</td>
80 80 <td style="border: 1px solid black">¥{{ productionDepartmentTotalPrice }}</td>
81   - <td style="border: 1px solid black"></td>
  81 + <td style="border: 1px solid black">${{ productionDepartmentTotalPriceUsd }}</td>
82 82 </tr>
83 83 <tr>
84 84 <td style="border: 1px solid black" colspan="2">包装费用合计</td>
85 85 <td style="border: 1px solid black">¥{{ packetTotalPrice }}</td>
86   - <td style="border: 1px solid black"></td>
  86 + <td style="border: 1px solid black">${{ packetTotalPriceUsd }}</td>
87 87 </tr>
88 88 <tr>
89 89 <td style="border: 1px solid black" colspan="2">研发开发费合计</td>
90 90 <td style="border: 1px solid black"
91   - >¥<a-input v-model:value="developTotalPrice" placeholder="请输入"
  91 + ><a-input v-model:value="developTotalPrice" placeholder="请输入"
92 92 /></td>
93 93 <td style="border: 1px solid black"></td>
94 94 </tr>
... ... @@ -210,19 +210,22 @@
210 210 const orderList = ref();
211 211 const customerCode = ref();
212 212 const projectNo = ref();
213   - const developTotalPrice = ref(0);
214   - const copyTotalPrice = ref(0);
215   - const packetActualTotalPrice = ref(0);
  213 + const developTotalPrice = ref();
  214 + const copyTotalPrice = ref();
  215 + const packetActualTotalPrice = ref();
216 216 const spainRatio = ref(0);
217 217 const chinaRatio = ref(0);
218 218 const actualRmbPrice = ref(0); //实际跟单单价
219 219 const actualPrice = ref(0); //实际跟单单价折算美金
220   - const actualRatio = ref(0); //实际汇率
  220 + const actualRatio = ref(); //实际汇率
221 221 const customerTotalPrice = ref(0); //客户总价合计
222 222 const actualdocumentaryPrice = ref(0); //实际跟单费用
223 223 const actualRatioProfitPrice = ref(0); //汇率收益
224 224 const grossProfit = ref(0); //毛利润合计
  225 + const customerTotalPriceUsd = ref(0); //客户总价$
  226 + const productionDepartmentTotalPriceUsd = ref(0); //生产科总价$
225 227 const actualRatiactualRatioProfitPriceo = ref(0); //汇率收益计算
  228 + const packetTotalPriceUsd = ref(0); //汇率收益计算
226 229 const chinaRatioProfitPrice = ref(0); //中国团队提成比例
227 230 const developProfit = ref(0); //研发贸易利润
228 231 const fixCost = ref(0); // 固定成本
... ... @@ -236,9 +239,7 @@
236 239 const ids = ref();
237 240  
238 241 // const orderRes = await getOrderList({});
239   - // console.log(orderRes, '5656orderRes');
240 242 const [register, { closeModal }] = useModalInner(async (data) => {
241   - console.log(data, '5656yewudata');
242 243 res.value = data.data;
243 244 orderList.value = data.res;
244 245 orderList.value.forEach((item) => {
... ... @@ -248,7 +249,6 @@
248 249 ids.value = data.data;
249 250 const extractedValues = ref<string[]>(data.projectNo.map((item) => item[0]));
250 251 projectNo.value = extractedValues.value.join(',');
251   - console.log(orderList.value, 565656);
252 252 });
253 253 async function handleOk() {
254 254 axios
... ... @@ -299,7 +299,6 @@
299 299 link.download = `业务/研发净利润分析${date}.xlsx`; // 你可以为文件命名
300 300 document.body.appendChild(link);
301 301 link.click(); // 自动点击链接,触发下载
302   - console.log(link, 5656);
303 302 document.body.removeChild(link); // 下载完成后移除链接
304 303 })
305 304 .catch((error) => {
... ... @@ -361,6 +360,9 @@
361 360 productionDepartmentTotalPrice.value = 0; // 生成科总价
362 361 totalProfitPrice.value = 0; // 综合收益计算
363 362 spainRatioProfitPrice.value = 0; // 西班牙提成金额
  363 + customerTotalPriceUsd.value = 0;
  364 + productionDepartmentTotalPriceUsd.value = 0;
  365 + packetTotalPriceUsd.value = 0;
364 366 }
365 367 }
366 368 //提成接口
... ... @@ -386,10 +388,7 @@
386 388 const packetCalculatePrice = ref(0);
387 389 const orderCalculateCount = ref(0);
388 390 const allList = toRaw(orderList.value);
389   - console.log(allList, '5656allList');
390 391 allList.forEach((item) => {
391   - console.log(item, '5656orderList');
392   - console.log(item.profitAnalysisInfo.packetPrice, '5656orderList');
393 392 packetCalculatePrice.value += item?.profitAnalysisInfo?.packetPrice;
394 393 orderCalculateCount.value += item.orderCount;
395 394 actualRmbPrice.value += packetCalculatePrice.value / orderCalculateCount.value;
... ... @@ -397,11 +396,8 @@
397 396 actualPrice.value = actualRmbPrice.value / actualRatio.value;
398 397 // const ratioList = (await getList({ settingType: 3 })) as Array<RatioListItem>;
399 398 const ratioList = (await getList({ settingType: 3 })) as RatioList;
400   - console.log(ratioList, '5656ratioList');
401 399 const ratios = ratioList.items.filter((item) => item.settingValue === customerCode.value);
402   - console.log(ratios, '5656ratios');
403 400 const ratioAll = JSON.parse(ratios[0].relationValue);
404   - console.log(ratioAll, '5656ratios', ratioAll[1].relationValue, ratioAll[2].relationValue);
405 401 chinaRatio.value = ratioAll[1].relationValue;
406 402 spainRatio.value = ratioAll[2].relationValue;
407 403 //提成比例为0,提成设为0
... ... @@ -423,7 +419,6 @@
423 419 actualPrice: actualPrice.value,
424 420 actualRatio: actualRatio.value,
425 421 };
426   - console.log(params, '5656params');
427 422 const res = await calculateBusinessProfit({
428 423 customerCode: customerCode.value,
429 424 projectNo: projectNo.value,
... ... @@ -442,8 +437,6 @@
442 437 actualPrice: actualPrice.value,
443 438 actualRatio: actualRatio.value,
444 439 });
445   - console.log(res, '5656resservice');
446   -
447 440 customerTotalPrice.value = res.customerTotalPrice.toFixed(2);
448 441 grossProfit.value = res.grossProfit.toFixed(2);
449 442 actualRatioProfitPrice.value = res.actualRatioProfitPrice.toFixed(2);
... ... @@ -465,6 +458,9 @@
465 458 productionDepartmentTotalPrice.value = res.productionDepartmentTotalPrice.toFixed(2); //生成科总价
466 459 totalProfitPrice.value = res.totalProfitPrice.toFixed(2); //综合收益计算
467 460 spainRatioProfitPrice.value = res.spainRatioProfitPrice.toFixed(2); //西班牙提成金额
  461 + customerTotalPriceUsd.value = res.customerTotalPriceUsd.toFixed(2);
  462 + productionDepartmentTotalPriceUsd.value = res.productionDepartmentTotalPriceUsd.toFixed(2);
  463 + packetTotalPriceUsd.value = res.packetTotalPriceUsd.toFixed(2);
468 464 }
469 465 </script>
470 466 <style scoped>
... ...
src/views/project/order/index.vue
... ... @@ -121,7 +121,12 @@
121 121 :style="{ borderRadius: '5px 5px 5px 5px' }"
122 122 type="primary"
123 123 @click="handleProductInvoiceModal"
124   - v-if="role === ROLE.ADMIN || role === ROLE.BUSINESS || role === ROLE.TRACKER"
  124 + v-if="
  125 + role === ROLE.ADMIN ||
  126 + role === ROLE.BUSINESS ||
  127 + role === ROLE.TRACKER ||
  128 + role === ROLE.FINANCE
  129 + "
125 130 >生产对账单创建</a-button
126 131 >
127 132 <a-button
... ... @@ -129,7 +134,12 @@
129 134 shape="default"
130 135 type="primary"
131 136 @click="handleInvoiceCreateModal"
132   - v-if="role === ROLE.ADMIN || role === ROLE.BUSINESS || role === ROLE.TRACKER"
  137 + v-if="
  138 + role === ROLE.ADMIN ||
  139 + role === ROLE.BUSINESS ||
  140 + role === ROLE.TRACKER ||
  141 + role === ROLE.FINANCE
  142 + "
133 143 >Invoice创建</a-button
134 144 >
135 145 <a-select
... ... @@ -929,7 +939,6 @@
929 939 function handleProductModal(record) {
930 940 const form = getForm();
931 941 const values = form.getFieldsValue();
932   - console.log(selectedCustomCodes.value, 5656);
933 942 if (checkedKeys.value.length == 0) {
934 943 error('请选择订单');
935 944 return;
... ... @@ -999,11 +1008,9 @@
999 1008 const form = getForm();
1000 1009 const values = form.getFieldsValue();
1001 1010 const resAll = await getOrderList({});
1002   - console.log(resAll, '5656resall');
1003 1011 const filteredItems = resAll.items.filter((item: { id: string }) =>
1004 1012 checkedKeys.value.includes(item.id),
1005 1013 );
1006   - console.log(filteredItems, '5656filteredItems');
1007 1014 openServiceProfitModal(true, {
1008 1015 res: filteredItems,
1009 1016 data: checkedKeys.value,
... ...