From 78dc79e8222f2f76ca7b9d93866e1dcb64f6dd63 Mon Sep 17 00:00:00 2001
From: chenrui <1187576398@qq.com>
Date: 星期一, 26 五月 2025 16:34:04 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev' into dev
---
src/views/index.vue | 99 ++++++++++++++++++-
src/views/procurementManagement/procurementLedger/index.vue | 7 +
src/views/system/user/index.vue | 20 ++--
src/api/viewIndex.js | 13 ++
src/views/procurementManagement/paymentEntry/index.vue | 2
src/views/salesManagement/salesLedger/index.vue | 106 +++++++++++++++++++--
src/views/procurementManagement/paymentLedger/index.vue | 1
7 files changed, 216 insertions(+), 32 deletions(-)
diff --git a/src/api/viewIndex.js b/src/api/viewIndex.js
index 8ac39e4..23bddd8 100644
--- a/src/api/viewIndex.js
+++ b/src/api/viewIndex.js
@@ -25,21 +25,28 @@
// 瀹㈡埛鍚堝悓閲戦TOP5缁熻
export const getTopFiveList = () => {
return request({
- url: 'sales/ledger/getTopFiveList',
+ url: '/sales/ledger/getTopFiveList',
method: 'get'
})
}
// 鍥炴楗肩姸鍥�
export const getAmountMouth = () => {
return request({
- url: 'receiptPayment/getAmountMouth',
+ url: '/receiptPayment/getAmountMouth',
method: 'get'
})
}
-// 鍥炴楗肩姸鍥�
+// 浠樻楗肩姸鍥�
export const paymentMonthList = () => {
return request({
url: '/purchase/paymentRegistration/paymentMonthList',
method: 'get'
})
+}
+// 绾垮舰鍥�
+export const getAmountHalfYear = () => {
+ return request({
+ url: '/sales/ledger/getAmountHalfYear',
+ method: 'get'
+ })
}
\ No newline at end of file
diff --git a/src/views/index.vue b/src/views/index.vue
index 4f5b35c..1fbed5d 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -112,7 +112,7 @@
:grid="grid"
:legend="barLegend"
:series="lineSeries"
- :tooltip="tooltip"
+ :tooltip="tooltipLine"
:xAxis="xAxis2"
:yAxis="yAxis2"
style="height: 27vh;"></Echarts>
@@ -128,6 +128,7 @@
import * as echarts from 'echarts';
import Echarts from "@/components/Echarts/echarts.vue";
import {
+ getAmountHalfYear,
getAmountMouth,
getContractAmount,
getInvoiceAmount,
@@ -232,6 +233,9 @@
type: 'shadow'
}
}
+const tooltipLine = {
+ trigger: 'axis',
+}
const yAxis1 = ref([
{
type: 'value',
@@ -313,26 +317,22 @@
materialPieSeries1.value[0].data[1].value = payableAmount.value
})
}
-// 瀹㈡埛
+// 瀹㈡埛top5
const getTopFiveListNum = async () => {
const res = await getTopFiveList()
-
const customerName = []
const totalAmount = []
-
res.data.forEach(item => {
customerName.push(item.customerName)
totalAmount.push(item.totalAmount)
})
-
-// 鉁� 姝g‘鍝嶅簲寮忚祴鍊硷細鍒涘缓鏂扮殑 xAxis 鍜� series 瀵硅薄
+// 姝g‘鍝嶅簲寮忚祴鍊硷細鍒涘缓鏂扮殑 xAxis 鍜� series 瀵硅薄
xAxis1.value = [
{
type: 'category',
data: customerName
}
]
-
barSeries.value = [
{
type: 'bar',
@@ -353,12 +353,97 @@
}
]
}
+// 绾垮舰鍥�
+const getAmountHalfYearNum = async () => {
+ const res = await getAmountHalfYear()
+ console.log(res)
+ const monthName = []
+ const receiptAmount = []
+ const invoiceAmount = []
+ res.data.forEach(item => {
+ monthName.push(item.month)
+ receiptAmount.push(item.receiptAmount)
+ invoiceAmount.push(item.invoiceAmount)
+ })
+// 姝g‘鍝嶅簲寮忚祴鍊硷細鍒涘缓鏂扮殑 xAxis 鍜� series 瀵硅薄
+ xAxis2.value = [
+ {
+ type: 'category',
+ data: monthName
+ }
+ ]
+ lineSeries.value = [
+ {
+ name: '寮�绁�',
+ type: 'line',
+ data: receiptAmount,
+ smooth: true,
+ stack: 'Total',
+ areaStyle: {
+ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+ {
+ offset: 0,
+ color: 'rgba(131, 207, 255, 1)'
+ },
+ {
+ offset: 1,
+ color: 'rgba(186, 228, 255, 1)'
+ }
+ ])
+ },
+ // 璁剧疆灏忓渾鐐圭殑棰滆壊
+ itemStyle: {
+ color: '#2D99FF', // 灏忓渾鐐归鑹茶缃负#2D99FF
+ borderColor: '#2D99FF' // 濡傛灉闇�瑕佺殑璇濓紝鍙互璁剧疆杈规棰滆壊
+ },
+ emphasis: {
+ focus: 'series'
+ },
+ lineStyle: {
+ width: 0
+ },
+ showSymbol: false,
+ },
+ {
+ name: '鍥炴',
+ type: 'line',
+ data: invoiceAmount,
+ smooth: true,
+ stack: 'Total',
+ lineStyle: {
+ width: 0
+ },
+ // 璁剧疆灏忓渾鐐圭殑棰滆壊
+ itemStyle: {
+ color: '#83CFFF', // 灏忓渾鐐归鑹茶缃负#83CFFF
+ borderColor: '#83CFFF' // 濡傛灉闇�瑕佺殑璇濓紝鍙互璁剧疆杈规棰滆壊
+ },
+ showSymbol: false,
+ areaStyle: {
+ color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [
+ {
+ offset: 0,
+ color: 'rgba(54, 153, 255, 1)'
+ },
+ {
+ offset: 1,
+ color: 'rgba(89, 169, 254, 1)'
+ }
+ ])
+ },
+ emphasis: {
+ focus: 'series'
+ },
+ }
+ ]
+}
getContractAmountNum()
getInvoiceAmountNum()
getReceiptAmountNum()
getTopFiveListNum()
getAmountMouthNum()
paymentMonthListNum()
+getAmountHalfYearNum()
</script>
<style scoped>
diff --git a/src/views/procurementManagement/paymentEntry/index.vue b/src/views/procurementManagement/paymentEntry/index.vue
index 0c2365d..03a7343 100644
--- a/src/views/procurementManagement/paymentEntry/index.vue
+++ b/src/views/procurementManagement/paymentEntry/index.vue
@@ -22,7 +22,7 @@
<el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="閲囪喘鍚堝悓鍙�11111锛�" prop="purchaseLedgerId">
+ <el-form-item label="閲囪喘鍚堝悓鍙凤細" prop="purchaseLedgerId">
<el-select v-model="form.purchaseLedgerId" placeholder="璇烽�夋嫨" clearable @change="setInfo"
:disabled="operationType === 'edit'">
<el-option v-for="item in purchaseLedgerList" :key="item.id" :label="item.purchaseContractNumber"
diff --git a/src/views/procurementManagement/paymentLedger/index.vue b/src/views/procurementManagement/paymentLedger/index.vue
index 18c0176..f720960 100644
--- a/src/views/procurementManagement/paymentLedger/index.vue
+++ b/src/views/procurementManagement/paymentLedger/index.vue
@@ -65,7 +65,6 @@
<PIMTable
:column="tableColumnSon"
:tableData="tableDataSon"
- :page="pageSon"
:isSelection="false"
:tableLoading="tableLoadingSon"
:isShowSummary="isShowSummarySon"
diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index f04b8f2..b836cde 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -378,6 +378,13 @@
page.current = 1
getList()
}
+// 瀛愯〃鍚堣鏂规硶
+const summarizeChildrenTable = (param) => {
+ return proxy.summarizeTable(param, ['taxInclusiveUnitPrice', 'taxInclusiveTotalPrice', 'taxExclusiveTotalPrice', 'ticketsNum', 'ticketsAmount', 'futureTickets', 'futureTicketsAmount'], {
+ ticketsNum: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
+ futureTickets: { noDecimal: true }, // 涓嶄繚鐣欏皬鏁�
+ });
+};
const paginationChange = ({ current, limit }) => {
page.current = current;
page.size = limit;
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 3a0fa46..7a373f2 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -104,7 +104,7 @@
</el-col>
<el-col :span="12">
<el-form-item label="褰曞叆浜猴細" prop="entryPerson">
- <el-select v-model="form.entryPerson" placeholder="璇烽�夋嫨" clearable>
+ <el-select v-model="form.entryPerson" placeholder="璇烽�夋嫨" clearable @change="changs">
<el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId"/>
</el-select>
</el-form-item>
@@ -121,6 +121,7 @@
type="date"
placeholder="璇烽�夋嫨"
clearable
+ disabled
/>
</el-form-item>
</el-col>
@@ -193,17 +194,27 @@
<el-row :gutter="30">
<el-col :span="24">
<el-form-item label="浜у搧澶х被锛�" prop="productCategory">
- <el-select v-model="productForm.productCategory" placeholder="璇烽�夋嫨" clearable>
+ <!-- <el-select v-model="productForm.productCategory" placeholder="璇烽�夋嫨" clearable>
<el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName"/>
- </el-select>
+ </el-select> -->
+ <el-tree-select
+ v-model="productForm.productCategory"
+ placeholder="璇烽�夋嫨" clearable
+ check-strictly
+ @change="getModels"
+ :data="productOptions"
+ :render-after-expand="false"
+ style="width: 100%"
+ />
+
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="30">
<el-col :span="24">
- <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="specificationModel">
- <el-select v-model="productForm.specificationModel" placeholder="璇烽�夋嫨" clearable>
- <el-option v-for="item in userList" :key="item.nickName" :label="item.nickName" :value="item.nickName"/>
+ <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="productModelId">
+ <el-select v-model="productForm.productModelId" placeholder="璇烽�夋嫨" clearable @change="getProductModel">
+ <el-option v-for="item in modelOptions" :key="item.id" :label="item.model" :value="item.id"/>
</el-select>
</el-form-item>
</el-col>
@@ -275,6 +286,7 @@
import { ref } from 'vue'
import {Search} from "@element-plus/icons-vue";
import {ElMessageBox } from "element-plus";
+import useUserStore from '@/store/modules/user'
import {userListNoPage} from "@/api/system/user.js";
import {
ledgerList,
@@ -283,6 +295,8 @@
addOrUpdateSalesLedger,
getSalesLedgerWithProducts, delLedger, addOrUpdateSalesLedgerProduct, delProduct, delLedgerFile
} from "@/api/salesManagement/salesLedger.js";
+import {modelList, productTreeList} from "@/api/basicData/product.js";
+const userStore = useUserStore()
const { proxy } = getCurrentInstance()
const tableData = ref([])
const productData = ref([])
@@ -290,6 +304,8 @@
const productSelectedRows = ref([])
const userList = ref([])
const customerOption = ref([])
+const productOptions = ref([])
+const modelOptions = ref([])
const tableLoading = ref(false)
const page = reactive({
current: 1,
@@ -386,6 +402,55 @@
tableLoading.value = false
})
}
+// 鑾峰彇浜у搧澶х被tree鏁版嵁
+const getProductOptions = () => {
+ productTreeList().then(res => {
+ productOptions.value = convertIdToValue(res)
+ })
+}
+// 鑾峰彇tree瀛愭暟鎹�
+const getModels =(value) => {
+ productForm.value.productCategory = findNodeById(productOptions.value, value)
+ modelList({id: value}).then(res => {
+ modelOptions.value = res
+ })
+}
+const getProductModel =(value) => {
+ const index = modelOptions.value.findIndex(item => item.id === value);
+ if (index !== -1) {
+ productForm.value.specificationModel = modelOptions.value[index].model;
+ } else {
+ productForm.value.specificationModel = null;
+ }
+}
+const findNodeById = (nodes, productId) => {
+ for (let i = 0; i < nodes.length; i++) {
+ if (nodes[i].value === productId) {
+ return nodes[i].label; // 鎵惧埌鑺傜偣锛岃繑鍥炶鑺傜偣
+ }
+ if (nodes[i].children && nodes[i].children.length > 0) {
+ const foundNode = findNodeById(nodes[i].children, productId);
+ if (foundNode) {
+ return foundNode.label; // 鍦ㄥ瓙鑺傜偣涓壘鍒帮紝杩斿洖璇ヨ妭鐐�
+ }
+ }
+ }
+ return null; // 娌℃湁鎵惧埌鑺傜偣锛岃繑鍥瀗ull
+};
+function convertIdToValue(data) {
+ return data.map(item => {
+ const { id, children, ...rest } = item;
+ const newItem = {
+ ...rest,
+ value: id // 灏� id 鏀逛负 value
+ };
+ if (children && children.length > 0) {
+ newItem.children = convertIdToValue(children);
+ }
+
+ return newItem;
+ });
+}
// 琛ㄦ牸閫夋嫨鏁版嵁
const handleSelectionChange = (selection) => {
selectedRows.value = selection
@@ -460,13 +525,12 @@
return sums;
}
// 鎵撳紑寮规
-const openForm = (type, row) => {
+const openForm = async (type, row) => {
operationType.value = type
form.value = {}
productData.value = []
- userListNoPage().then(res => {
- userList.value = res.data
- })
+ let userLists = await userListNoPage()
+ userList.value = userLists.data
customerList().then(res => {
customerOption.value = res
})
@@ -478,7 +542,17 @@
fileList.value = form.value.salesLedgerFiles
})
}
+ let userAll = await userStore.getInfo()
+ userList.value.forEach(element => {
+ if(userAll.user.nickName === element.nickName && userAll.user.userName === element.userName) {
+ form.value.entryPerson = userAll.user.userId // 璁剧疆榛樿涓氬姟鍛樹负褰撳墠鐢ㄦ埛
+ }
+ });
+ form.value.entryDate = getCurrentDate() // 璁剧疆榛樿褰曞叆鏃ユ湡涓哄綋鍓嶆棩鏈�
dialogFormVisible.value = true
+}
+function changs(val){
+ console.log(val);
}
// 涓婁紶鍓嶆牎妫�
function handleBeforeUpload(file) {
@@ -554,6 +628,7 @@
productForm.value = {...row}
}
productFormVisible.value = true
+ getProductOptions()
}
// 鎻愪氦浜у搧琛ㄥ崟
const submitProduct = () => {
@@ -662,6 +737,17 @@
proxy.$modal.msg("宸插彇娑�")
})
}
+// 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲涓� YYYY-MM-DD
+function getCurrentDate() {
+ const today = new Date();
+ const year = today.getFullYear();
+ const month = String(today.getMonth() + 1).padStart(2, '0'); // 鏈堜唤浠�0寮�濮�
+ const day = String(today.getDate()).padStart(2, '0');
+ return `${year}-${month}-${day}`;
+}
+const mathNum = (val) => {
+ productForm.value.taxExclusiveTotalPrice = proxy.calculateTaxExclusiveTotalPrice(val, productForm.value.taxRate)
+}
getList()
</script>
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index 7a5800a..a43d890 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -17,8 +17,8 @@
<pane size="84">
<el-col style="padding: 10px">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
- <el-form-item label="鐢ㄦ埛鍚嶇О" prop="userName">
- <el-input v-model="queryParams.userName" placeholder="璇疯緭鍏ョ敤鎴峰悕绉�" clearable style="width: 240px" @keyup.enter="handleQuery" />
+ <el-form-item label="鐧诲綍璐﹀彿" prop="userName">
+ <el-input v-model="queryParams.userName" placeholder="璇疯緭鍏ョ櫥褰曡处鍙�" clearable style="width: 240px" @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="鎵嬫満鍙风爜" prop="phonenumber">
<el-input v-model="queryParams.phonenumber" placeholder="璇疯緭鍏ユ墜鏈哄彿鐮�" clearable style="width: 240px" @keyup.enter="handleQuery" />
@@ -59,7 +59,7 @@
<el-table v-loading="loading" :data="userList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="50" align="center" />
<el-table-column label="鐢ㄦ埛缂栧彿" align="center" key="userId" prop="userId" v-if="columns[0].visible" />
- <el-table-column label="鐢ㄦ埛鍚嶇О" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
+ <el-table-column label="鐧诲綍璐﹀彿" align="center" key="userName" prop="userName" v-if="columns[1].visible" :show-overflow-tooltip="true" />
<el-table-column label="鐢ㄦ埛鏄电О" align="center" key="nickName" prop="nickName" v-if="columns[2].visible" :show-overflow-tooltip="true" />
<el-table-column label="閮ㄩ棬" align="center" key="deptName" prop="dept.deptName" v-if="columns[3].visible" :show-overflow-tooltip="true" />
<el-table-column label="鎵嬫満鍙风爜" align="center" key="phonenumber" prop="phonenumber" v-if="columns[4].visible" width="120" />
@@ -111,8 +111,8 @@
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="褰掑睘閮ㄩ棬" prop="deptId">
- <el-tree-select v-model="form.deptId" :data="enabledDeptOptions" :props="{ value: 'id', label: 'label', children: 'children' }" value-key="id" placeholder="璇烽�夋嫨褰掑睘閮ㄩ棬" check-strictly />
+ <el-form-item label="褰掑睘鍏徃" prop="deptId">
+ <el-tree-select v-model="form.deptId" :data="enabledDeptOptions" :props="{ value: 'id', label: 'label', children: 'children' }" value-key="id" placeholder="璇烽�夋嫨褰掑睘鍏徃" check-strictly />
</el-form-item>
</el-col>
</el-row>
@@ -130,8 +130,8 @@
</el-row>
<el-row>
<el-col :span="12">
- <el-form-item v-if="form.userId == undefined" label="鐢ㄦ埛鍚嶇О" prop="userName">
- <el-input v-model="form.userName" placeholder="璇疯緭鍏ョ敤鎴峰悕绉�" maxlength="30" />
+ <el-form-item v-if="form.userId == undefined" label="鐧诲綍璐﹀彿" prop="userName">
+ <el-input v-model="form.userName" placeholder="璇疯緭鍏ョ櫥褰曡处鍙�" maxlength="30" />
</el-form-item>
</el-col>
<el-col :span="12">
@@ -259,7 +259,7 @@
// 鍒楁樉闅愪俊鎭�
const columns = ref([
{ key: 0, label: `鐢ㄦ埛缂栧彿`, visible: true },
- { key: 1, label: `鐢ㄦ埛鍚嶇О`, visible: true },
+ { key: 1, label: `鐧诲綍璐﹀彿`, visible: true },
{ key: 2, label: `鐢ㄦ埛鏄电О`, visible: true },
{ key: 3, label: `閮ㄩ棬`, visible: true },
{ key: 4, label: `鎵嬫満鍙风爜`, visible: true },
@@ -278,9 +278,9 @@
deptId: undefined
},
rules: {
- userName: [{ required: true, message: "鐢ㄦ埛鍚嶇О涓嶈兘涓虹┖", trigger: "blur" }, { min: 2, max: 20, message: "鐢ㄦ埛鍚嶇О闀垮害蹇呴』浠嬩簬 2 鍜� 20 涔嬮棿", trigger: "blur" }],
+ userName: [{ required: true, message: "鐧诲綍璐﹀彿涓嶈兘涓虹┖", trigger: "blur" }, { min: 2, max: 20, message: "鐧诲綍璐﹀彿闀垮害蹇呴』浠嬩簬 2 鍜� 20 涔嬮棿", trigger: "blur" }],
nickName: [{ required: true, message: "鐢ㄦ埛鏄电О涓嶈兘涓虹┖", trigger: "blur" }],
- deptId: [{ required: true, message: "褰掑睘閮ㄩ棬涓嶈兘涓虹┖", trigger: "blur" }],
+ deptId: [{ required: true, message: "鍏徃涓嶈兘涓虹┖", trigger: "change" }],
password: [{ required: true, message: "鐢ㄦ埛瀵嗙爜涓嶈兘涓虹┖", trigger: "blur" }, { min: 5, max: 20, message: "鐢ㄦ埛瀵嗙爜闀垮害蹇呴』浠嬩簬 5 鍜� 20 涔嬮棿", trigger: "blur" }, { pattern: /^[^<>"'|\\]+$/, message: "涓嶈兘鍖呭惈闈炴硶瀛楃锛�< > \" ' \\\ |", trigger: "blur" }],
email: [{ type: "email", message: "璇疯緭鍏ユ纭殑閭鍦板潃", trigger: ["blur", "change"] }],
phonenumber: [{ pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜", trigger: "blur" }]
--
Gitblit v1.9.3