From 9289a4fbacafcc7a80385fc3a3167f383d5cf991 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 15 一月 2026 18:00:51 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New' into dev_New
---
src/views/financialManagement/accounting/index.vue | 2
src/views/personnelManagement/onboarding/components/formDia.vue | 35 ++
src/views/equipmentManagement/measurementEquipment/components/rowClickData.vue | 128 +++++++++
src/views/equipmentManagement/measurementEquipment/components/formDia.vue | 96 +++++--
src/views/reportAnalysis/dataDashboard/index.vue | 281 +++++++++++++--------
src/api/equipmentManagement/measurementEquipment.js | 20 +
src/views/personnelManagement/dimission/components/formDia.vue | 17
src/views/equipmentManagement/measurementEquipment/index.vue | 142 ++++++----
src/api/system/post.js | 9
src/api/viewIndex.js | 18 +
src/views/equipmentManagement/measurementEquipment/components/dialogForm.vue | 7
src/views/personnelManagement/dimission/index.vue | 2
src/views/personnelManagement/onboarding/index.vue | 2
13 files changed, 549 insertions(+), 210 deletions(-)
diff --git a/src/api/equipmentManagement/measurementEquipment.js b/src/api/equipmentManagement/measurementEquipment.js
index a22c034..8bb8a7f 100644
--- a/src/api/equipmentManagement/measurementEquipment.js
+++ b/src/api/equipmentManagement/measurementEquipment.js
@@ -32,4 +32,24 @@
method: "post",
data: query,
});
+}
+
+// 璁¢噺鍣ㄥ叿鍙拌处-鏂板
+// /measuringInstrumentLedger/add
+export function addMeasuringInstrumentLedger(data){
+ return request({
+ url:"/measuringInstrumentLedger/add",
+ method:"post",
+ data
+ })
+}
+
+// 璁¢噺鍣ㄥ叿鍙拌处-缂栬緫
+// /measuringInstrumentLedger/update
+export function updateMeasuringInstrumentLedger(data){
+ return request({
+ url:"/measuringInstrumentLedger/update",
+ method:"post",
+ data
+ })
}
\ No newline at end of file
diff --git a/src/api/system/post.js b/src/api/system/post.js
index 8faa266..fcb5bba 100644
--- a/src/api/system/post.js
+++ b/src/api/system/post.js
@@ -9,6 +9,15 @@
})
}
+export function findPostOptions(query) {
+ return request({
+ url: '/system/post/optionselect',
+ method: 'get',
+ params: query
+ })
+}
+
+
// 鏌ヨ宀椾綅璇︾粏
export function getPost(postId) {
return request({
diff --git a/src/api/viewIndex.js b/src/api/viewIndex.js
index 2d85171..9abd3cc 100644
--- a/src/api/viewIndex.js
+++ b/src/api/viewIndex.js
@@ -44,4 +44,22 @@
url: '/sales/ledger/getAmountHalfYear',
method: 'get'
})
+}
+
+// 鍚勭敓浜ц鍗曠殑瀹屾垚杩涘害缁熻
+// /home/progressStatistics
+export const getProgressStatistics = ()=>{
+ return request({
+ url: '/home/progressStatistics',
+ method: 'get'
+ })
+}
+
+//鍦ㄥ埗鍝佸懆杞儏鍐�
+//home/workInProcessTurnover
+export const getWorkInProcessTurnover= ()=>{
+ return request({
+ url: '/home/workInProcessTurnover',
+ method: 'get'
+ })
}
\ No newline at end of file
diff --git a/src/views/equipmentManagement/measurementEquipment/components/dialogForm.vue b/src/views/equipmentManagement/measurementEquipment/components/dialogForm.vue
new file mode 100644
index 0000000..c6aa70e
--- /dev/null
+++ b/src/views/equipmentManagement/measurementEquipment/components/dialogForm.vue
@@ -0,0 +1,7 @@
+<template>
+
+</template>
+
+<script setup>
+
+</script>
\ No newline at end of file
diff --git a/src/views/equipmentManagement/measurementEquipment/components/formDia.vue b/src/views/equipmentManagement/measurementEquipment/components/formDia.vue
index 7b6097b..b215df1 100644
--- a/src/views/equipmentManagement/measurementEquipment/components/formDia.vue
+++ b/src/views/equipmentManagement/measurementEquipment/components/formDia.vue
@@ -15,19 +15,10 @@
ref="formRef"
>
<el-row :gutter="30">
- <el-col :span="12">
- <el-form-item label="璁¢噺鍣ㄥ叿缂栧彿锛�" prop="code">
+ <el-col :span="24">
+ <el-form-item label="鍑哄巶缂栧彿锛�" prop="code">
<el-input
v-model="form.code"
- placeholder="璇疯緭鍏�"
- clearable
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="璁¢噺鍣ㄥ叿鍚嶇О锛�" prop="name">
- <el-input
- v-model="form.name"
placeholder="璇疯緭鍏�"
clearable
/>
@@ -36,28 +27,70 @@
</el-row>
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="瑙勬牸鍨嬪彿锛�" prop="model">
+ <el-form-item label="瀹夎浣嶇疆锛�" prop="installationLocation">
<el-input
- v-model="form.model"
+ v-model="form.installationLocation"
placeholder="璇疯緭鍏�"
clearable
/>
</el-form-item>
</el-col>
<el-col :span="12">
- <el-form-item label="棰勮涓嬫妫�瀹氭棩鏈燂細" prop="nextDate">
- <el-date-picker
- style="width: 100%"
- v-model="form.nextDate"
- value-format="YYYY-MM-DD"
- format="YYYY-MM-DD"
- type="date"
- placeholder="璇烽�夋嫨"
- clearable
- />
+ <el-form-item label="妫�瀹氬崟浣嶏細" prop="unit">
+ <el-input
+ v-model="form.unit"
+ placeholder="璇疯緭鍏ユ瀹氬崟浣�"
+ clearable
+ />
</el-form-item>
</el-col>
</el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="璇佷功缂栧彿锛�" prop="model">
+ <el-input
+ v-model="form.model"
+ placeholder="璇疯緭鍏�"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="鏈�鏂伴壌瀹氭棩鏈燂細" prop="mostDate">
+ <el-date-picker
+ style="width: 100%"
+ v-model="form.mostDate"
+ value-format="YYYY-MM-DD"
+ format="YYYY-MM-DD"
+ type="date"
+ placeholder="璇烽�夋嫨"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="30">
+ <el-col :span="12">
+ <el-form-item label="鏈夋晥鏃ユ湡(澶�)锛�" prop="valid">
+ <el-input
+ v-model="form.valid"
+ placeholder="璇疯緭鍏ユ湁鏁堟湡澶╂暟"
+ clearable
+ >
+ <template #append>鏃�</template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="妫�瀹氬懆鏈燂細" prop="cycle">
+ <el-input
+ v-model="form.cycle"
+ placeholder="璇疯緭鍏ユ瀹氬懆鏈�"
+ clearable
+ />
+ </el-form-item>
+ </el-col>
+ </el-row>
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="褰曞叆浜猴細" prop="userId">
@@ -84,6 +117,7 @@
style="width: 100%"
v-model="form.recordDate"
value-format="YYYY-MM-DD"
+ disabled
format="YYYY-MM-DD"
type="date"
placeholder="璇烽�夋嫨"
@@ -126,7 +160,7 @@
import {userListNoPageByTenantId} from "@/api/system/user.js";
import {afterSalesServiceAdd, afterSalesServiceUpdate} from "@/api/customerService/index.js";
import {getToken} from "@/utils/auth.js";
-import {measuringInstrumentAdd, measuringInstrumentUpdate} from "@/api/equipmentManagement/measurementEquipment.js";
+import {addMeasuringInstrumentLedger, updateMeasuringInstrumentLedger} from "@/api/equipmentManagement/measurementEquipment.js";
import { getCurrentDate } from "@/utils/index.js";
const { proxy } = getCurrentInstance()
const emit = defineEmits(['close'])
@@ -137,8 +171,10 @@
const data = reactive({
form: {
code: "",
- name: "",
+ installationLocation: "",
+ mostDate:"",
model: "",
+ cycle:"",
validDate: "",
nextDate: "",
userId: "",
@@ -147,12 +183,16 @@
},
rules: {
code: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
- name: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
model: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
validDate: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
nextDate: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
userId: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
recordDate: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
+ installationLocation: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+ mostDate: [{required: true, message: "璇烽�夋嫨", trigger: "change"}],
+ cycle: [{required: true, message: "璇烽�夋嫨", trigger: "blur"}],
+ valid: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
+ unit: [{required: true, message: "璇疯緭鍏�", trigger: "blur"}],
}
})
const { form, rules } = toRefs(data);
@@ -217,13 +257,13 @@
proxy.$refs["formRef"].validate(valid => {
if (valid) {
if (operationType.value === "add") {
- measuringInstrumentAdd(form.value).then(response => {
+ addMeasuringInstrumentLedger(form.value).then(response => {
proxy.$modal.msgSuccess("鏂板鎴愬姛")
form.value.tempFileIds = []
closeDia()
})
} else {
- measuringInstrumentUpdate(form.value).then(response => {
+ updateMeasuringInstrumentLedger(form.value).then(response => {
proxy.$modal.msgSuccess("淇敼鎴愬姛")
form.value.tempFileIds = []
closeDia()
diff --git a/src/views/equipmentManagement/measurementEquipment/components/rowClickData.vue b/src/views/equipmentManagement/measurementEquipment/components/rowClickData.vue
new file mode 100644
index 0000000..6604587
--- /dev/null
+++ b/src/views/equipmentManagement/measurementEquipment/components/rowClickData.vue
@@ -0,0 +1,128 @@
+<template>
+ <div>
+ <el-dialog
+ v-model="dialogFormVisible"
+ title="妫�瀹氭牎鍑嗚褰�"
+ width="50%"
+ @close="closeDia"
+ >
+ <PIMTable
+ rowKey="id"
+ :column="tableColumn"
+ :tableData="tableData"
+ :tableLoading="tableLoading"
+ @selection-change="handleSelectionChange"
+ height="500"
+ :isPagination="false"
+ >
+ </PIMTable>
+ <pagination
+ style="margin: 10px 0"
+ v-show="total > 0"
+ @pagination="paginationSearch"
+ :total="total"
+ :page="page.current"
+ :limit="page.size"
+ />
+ <template #footer>
+ <div class="dialog-footer">
+ <el-button @click="closeDia">鍙栨秷</el-button>
+ </div>
+ </template>
+ </el-dialog>
+ <filePreview ref="filePreviewRef" />
+ </div>
+</template>
+
+<script setup>
+import {ref} from "vue";
+import filePreview from '@/components/filePreview/index.vue'
+import {ledgerRecordListPage} from "@/api/equipmentManagement/calibration.js";
+import Pagination from "@/components/PIMTable/Pagination.vue";
+const emit = defineEmits(['close'])
+
+const dialogFormVisible = ref(false);
+const currentId = ref('')
+const selectedRows = ref([]);
+const filePreviewRef = ref()
+const tableColumn = ref([
+ {
+ label: "妫�瀹氭棩鏈�",
+ prop: "recordDate",
+ width: 130,
+ },
+ {
+ label: "璁¢噺鍣ㄥ叿缂栧彿",
+ prop: "code",
+ width: 150,
+ },
+ {
+ label: "璁¢噺鍣ㄥ叿鍚嶇О",
+ prop: "name",
+ width: 200,
+ },
+ {
+ label: "瑙勬牸鍨嬪彿",
+ prop: "model",
+ width:200
+ },
+ {
+ label: "鏈夋晥鏈�",
+ prop: "valid",
+ width: 100,
+ },
+ {
+ label: "褰曞叆浜�",
+ prop: "userName",
+ },
+ {
+ label: "褰曞叆鏃ユ湡",
+ prop: "entryDate",
+ width: 130,
+ },
+]);
+const page = reactive({
+ current: 1,
+ size: 100,
+});
+const total = ref(0);
+const tableData = ref([]);
+const tableLoading = ref(false);
+
+// 鎵撳紑寮规
+const openDialog = (row,type) => {
+ dialogFormVisible.value = true;
+ currentId.value = row.id;
+ getList()
+}
+const paginationSearch = (obj) => {
+ page.current = obj.page;
+ page.size = obj.limit;
+ getList();
+};
+const getList = () => {
+ let query = {
+ measuringInstrumentLedgerId:currentId.value,
+ current : page.current,
+ size : page.size
+ }
+ ledgerRecordListPage(query).then(res => {
+ tableData.value = res?.data?.records || [];
+ total.value = res?.data?.total;
+ })
+}
+// 琛ㄦ牸閫夋嫨鏁版嵁
+const handleSelectionChange = (selection) => {
+ selectedRows.value = selection;
+};
+
+// 鍏抽棴寮规
+const closeDia = () => {
+ dialogFormVisible.value = false;
+ emit('close')
+};
+
+defineExpose({
+ openDialog,
+});
+</script>
diff --git a/src/views/equipmentManagement/measurementEquipment/index.vue b/src/views/equipmentManagement/measurementEquipment/index.vue
index 363a85a..129f23b 100644
--- a/src/views/equipmentManagement/measurementEquipment/index.vue
+++ b/src/views/equipmentManagement/measurementEquipment/index.vue
@@ -40,11 +40,13 @@
@selection-change="handleSelectionChange"
:tableLoading="tableLoading"
@pagination="pagination"
+ :dbRowClick="dbRowClick"
></PIMTable>
</div>
<form-dia ref="formDia" @close="handleQuery"></form-dia>
<calibration-dia ref="calibrationDia" @close="handleQuery"></calibration-dia>
<files-dia ref="filesDia"></files-dia>
+ <rowClickDataForm ref="rowClickData"></rowClickDataForm>
</div>
</template>
@@ -55,10 +57,11 @@
import useUserStore from "@/store/modules/user.js";
import CalibrationDia from "@/views/equipmentManagement/measurementEquipment/components/calibrationDia.vue";
import {
- measuringInstrumentDelete,
- measuringInstrumentListPage
+ measuringInstrumentDelete,
+ measuringInstrumentListPage,
} from "@/api/equipmentManagement/measurementEquipment.js";
import FilesDia from "./filesDia.vue";
+import rowClickDataForm from "./components/rowClickData.vue"
const { proxy } = getCurrentInstance();
const userStore = useUserStore()
@@ -73,67 +76,80 @@
const tableColumn = ref([
{
- label: "鐘舵��",
- prop: "status",
- dataType: "tag",
- formatData: (params) => {
- if (params == 1) {
- return "鏈夋晥";
- } else if (params == 2) {
- return "閫炬湡";
- } else {
- return null;
- }
- },
- formatType: (params) => {
- if (params == 1) {
- return "success";
- } else if (params == 2) {
- return "danger";
- } else {
- return null;
- }
- },
+ label: "鍑哄巶缂栧彿",
+ prop: "code",
+ minWidth:150,
+ align:"center"
},
{
- label: "鏈�杩戜竴娆℃瀹氭棩鏈�",
+ label: "閮ㄩ棬",
+ prop: "deptName",
+ width: 130,
+ align:"center"
+ },
+ {
+ label: "瀹夎浣嶇疆",
+ prop: "installationLocation",
+ width: 150,
+ align:"center"
+ },
+ {
+ label: "妫�瀹氬崟浣�",
+ prop: "unit",
+ width: 200,
+ align:"center"
+ },
+ {
+ label: "璇佷功缂栧彿",
+ prop: "model",
+ width:200,
+ align:"center"
+ },
+ {
+ label: "鏈�鏂伴壌瀹氭棩鏈�",
prop: "mostDate",
width: 130,
- },
- {
- label: "璁¢噺鍣ㄥ叿缂栧彿",
- prop: "code",
- width: 150,
- },
- {
- label: "璁¢噺鍣ㄥ叿鍚嶇О",
- prop: "name",
- width: 200,
- },
- {
- label: "瑙勬牸鍨嬪彿",
- prop: "model",
- width:200
- },
- {
- label: "鏈夋晥鏈�",
- prop: "valid",
- width: 130,
- },
- {
- label: "棰勮涓嬫妫�瀹氭棩鏈�",
- prop: "nextDate",
- width: 130,
+ align:"center"
},
{
label: "褰曞叆浜�",
prop: "userName",
+ width: 130,
+ align:"center"
},
{
label: "褰曞叆鏃ユ湡",
prop: "recordDate",
- width: 130,
+ align:"center",
+ minWidth: 130
},
+ {
+ label: "鏈夋晥鏃ユ湡",
+ prop: "valid",
+ width: 130,
+ align:"center"
+ },
+ {
+ label: "妫�瀹氬懆鏈�(澶�)",
+ prop: "cycle",
+ width: 130,
+ align:"center"
+ },
+ {
+ label: "鐘舵��",
+ prop: "status",
+ width: 130,
+ align: "center",
+ formatData: (params) => {
+ if (params === 1) {
+ return "鏈夋晥";
+ } else if (params === 2) {
+ return "閫炬湡";
+ } else {
+ return null;
+ }
+ }
+ },
{
dataType: "action",
label: "鎿嶄綔",
@@ -141,25 +157,26 @@
width: '130',
fixed: 'right',
operation: [
+ {
+ name: "闄勪欢",
+ type: "text",
+ clickFun: (row) => {
+ openFilesFormDia(row);
+ },
+ },
{
- name: "妫�瀹氭牎鍑�",
+ name: "鏌ョ湅",
type: "text",
clickFun: (row) => {
openCalibrationDia("verifying", row);
},
},
- // {
- // name: "闄勪欢",
- // type: "text",
- // clickFun: (row) => {
- // openFilesFormDia(row);
- // },
- // },
],
},
]);
const tableData = ref([]);
const tableLoading = ref(false);
+const rowClickData = ref([])
const filesDia = ref()
const page = reactive({
current: 1,
@@ -170,12 +187,13 @@
// 鎵撳紑闄勪欢寮规
const openFilesFormDia = (row) => {
- console.log(row)
- nextTick(() => {
- filesDia.value?.openDialog( row,'璁¢噺鍣ㄥ叿鍙拌处')
- })
+ filesDia.value?.openDialog(row,'璁¢噺鍣ㄥ叿鍙拌处')
};
+const dbRowClick = (row)=>{
+ rowClickData.value?.openDialog(row)
+}
+
// 琛ㄦ牸閫夋嫨鏁版嵁
const handleSelectionChange = (selection) => {
selectedRows.value = selection;
diff --git a/src/views/financialManagement/accounting/index.vue b/src/views/financialManagement/accounting/index.vue
index f8e4a9f..91588fd 100644
--- a/src/views/financialManagement/accounting/index.vue
+++ b/src/views/financialManagement/accounting/index.vue
@@ -141,7 +141,7 @@
import { ref, computed, onMounted, reactive } from 'vue';
import 'element-plus/dist/index.css';
import Echarts from "@/components/Echarts/echarts.vue";
-import { getLedgerPage, getAssetInfo } from "@/api/equipmentManagement/ledger";
+import { getLedgerPage } from "@/api/equipmentManagement/ledger";
import dayjs from "dayjs";
// 绛涢�夋潯浠�
diff --git a/src/views/personnelManagement/dimission/components/formDia.vue b/src/views/personnelManagement/dimission/components/formDia.vue
index f75c22d..9880a67 100644
--- a/src/views/personnelManagement/dimission/components/formDia.vue
+++ b/src/views/personnelManagement/dimission/components/formDia.vue
@@ -44,7 +44,7 @@
<el-row :gutter="30">
<el-col :span="12">
<el-form-item label="宀椾綅锛�">
- {{ form.postJob || '-' }}
+ {{ form.postName || '-' }}
</el-form-item>
</el-col>
<el-col :span="12">
@@ -180,7 +180,8 @@
staffName: "",
sex: "",
nativePlace: "",
- postJob: "",
+ postName: "",
+ sysPostId: 0,
adress: "",
firstStudy: "",
profession: "",
@@ -233,6 +234,9 @@
if (form.value.dimissionReason !== 'other') {
form.value.dimissionRemark = ''
}
+ if (!form.value.sysPostId) {
+ form.value.sysPostId = 0;
+ }
proxy.$refs["formRef"].validate(valid => {
if (valid) {
if (operationType.value === "add") {
@@ -258,7 +262,8 @@
staffName: "",
sex: "",
nativePlace: "",
- postJob: "",
+ postName: "",
+ sysPostId: 0,
adress: "",
firstStudy: "",
profession: "",
@@ -300,7 +305,8 @@
phone,
staffNo,
nativePlace,
- postJob,
+ postName,
+ sysPostId,
adress,
firstStudy,
profession,
@@ -319,7 +325,8 @@
phone,
staffNo,
nativePlace,
- postJob,
+ postName,
+ sysPostId,
adress,
firstStudy,
profession,
diff --git a/src/views/personnelManagement/dimission/index.vue b/src/views/personnelManagement/dimission/index.vue
index ae90d99..27e6766 100644
--- a/src/views/personnelManagement/dimission/index.vue
+++ b/src/views/personnelManagement/dimission/index.vue
@@ -110,7 +110,7 @@
},
{
label: "宀椾綅",
- prop: "postJob",
+ prop: "postName",
},
{
label: "鐜颁綇鍧�",
diff --git a/src/views/personnelManagement/onboarding/components/formDia.vue b/src/views/personnelManagement/onboarding/components/formDia.vue
index a13d6ba..7cd6ab6 100644
--- a/src/views/personnelManagement/onboarding/components/formDia.vue
+++ b/src/views/personnelManagement/onboarding/components/formDia.vue
@@ -36,8 +36,16 @@
</el-row>
<el-row :gutter="30">
<el-col :span="12">
- <el-form-item label="宀椾綅锛�" prop="postJob">
- <el-input v-model="form.postJob" placeholder="璇疯緭鍏�" clearable/>
+ <el-form-item label="宀椾綅锛�" prop="sysPostId">
+ <el-select v-model="form.sysPostId" placeholder="璇烽�夋嫨宀椾綅" clearable>
+ <el-option
+ v-for="item in postOptions"
+ :key="item.postId"
+ :label="item.postName"
+ :value="item.postId"
+ :disabled="item.status === '1'"
+ />
+ </el-select>
</el-form-item>
</el-col>
<el-col :span="12">
@@ -131,8 +139,9 @@
</template>
<script setup>
-import {ref} from "vue";
+import {ref, onMounted} from "vue";
import {getStaffJoinInfo, staffJoinAdd, staffJoinUpdate} from "@/api/personnelManagement/onboarding.js";
+import {findPostOptions} from "@/api/system/post.js";
const { proxy } = getCurrentInstance()
const emit = defineEmits(['close'])
@@ -156,6 +165,7 @@
contractStartTime: "",
contractEndTime: "",
staffState: "",
+ sysPostId: undefined,
},
rules: {
staffNo: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" },],
@@ -174,8 +184,9 @@
contractStartTime: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
contractEndTime: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
},
+ postOptions: [], // 宀椾綅閫夐」
});
-const { form, rules } = toRefs(data);
+const { form, rules, postOptions } = toRefs(data);
// 鎵撳紑寮规
const openDialog = (type, row) => {
@@ -184,15 +195,31 @@
if (operationType.value === 'edit') {
getStaffJoinInfo(row.id).then(res => {
form.value = {...res.data}
+ if (form.value.sysPostId === 0) {
+ form.value.sysPostId = undefined
+ }
// 缂栬緫鏃朵篃璁$畻涓�娆″悎鍚屽勾闄�
calculateContractTerm();
})
} else {
form.value.id = ''
}
+
+}
+onMounted(() => {
+ fetchPostOptions()
+})
+
+const fetchPostOptions = () => {
+ findPostOptions().then(res => {
+ postOptions.value = res.data
+ })
}
// 鎻愪氦浜у搧琛ㄥ崟
const submitForm = () => {
+ if (!form.value.sysPostId) {
+ form.value.sysPostId = 0;
+ }
proxy.$refs.formRef.validate(valid => {
if (valid) {
form.value.staffState = 1
diff --git a/src/views/personnelManagement/onboarding/index.vue b/src/views/personnelManagement/onboarding/index.vue
index 9151a6c..edf4fa3 100644
--- a/src/views/personnelManagement/onboarding/index.vue
+++ b/src/views/personnelManagement/onboarding/index.vue
@@ -111,7 +111,7 @@
},
{
label: "宀椾綅",
- prop: "postJob",
+ prop: "postName",
},
{
label: "鐜颁綇鍧�",
diff --git a/src/views/reportAnalysis/dataDashboard/index.vue b/src/views/reportAnalysis/dataDashboard/index.vue
index 9848898..ad01f4b 100644
--- a/src/views/reportAnalysis/dataDashboard/index.vue
+++ b/src/views/reportAnalysis/dataDashboard/index.vue
@@ -1,5 +1,6 @@
<template>
- <div class="data-dashboard">
+ <div class="scale-container">
+ <div class="data-dashboard" :style="{ transform: `scale(${scaleRatio})` }">
<!-- 鍏ㄥ睆鎸夐挳 - 绉诲姩鍒板乏涓婅 -->
<button class="fullscreen-btn" @click="toggleFullscreen" :title="isFullscreen ? '閫�鍑哄叏灞�' : '鍏ㄥ睆鏄剧ず'">
<svg v-if="!isFullscreen" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
@@ -54,7 +55,7 @@
<!-- 璐ㄩ噺缁熻 -->
<div class="panel-header">
- <span class="panel-title">璐ㄩ噺缁熻</span>
+ <span class="panel-title">杩�4鏈堣川閲忕粺璁�</span>
</div>
<div class="main-panel">
<div class="panel-item-customers">
@@ -174,13 +175,13 @@
</div>
<div class="financial-header">
- <span class="financial-title">璐㈠姟鍒嗘瀽</span>
+ <span class="financial-title">鍚勭敓浜ц鍗曠殑瀹屾垚杩涘害缁熻</span>
</div>
<div class="main-panel">
<div class="panel-item-customers">
<div class="event-header">
<img src="@/assets/BI/shijianmingxiicon@2x.png" alt="鍥炬爣" class="event-icon" />
- <span class="event-title">缁忚惀鎴愭灉鍒嗘瀽</span>
+ <span class="event-title">缁忚惀鍒嗘瀽</span>
</div>
<Echarts ref="chart"
:chartStyle="chartStyle"
@@ -191,7 +192,7 @@
:xAxis="xAxis3"
:yAxis="yAxis3"
:options="{backgroundColor: 'transparent', textStyle: {color: '#B8C8E0'}}"
- style="height: 300px"></Echarts>
+ style="height: 170px"></Echarts>
</div>
</div>
</div>
@@ -205,11 +206,11 @@
<div class="panel-item-customers">
<div style="display: flex;justify-content: space-between;margin-bottom: 20px;">
<div class="section-title">搴旀敹搴斾粯缁熻</div>
- <el-radio-group v-model="radio1" size="large" @change="statisticsReceivable" class="custom-radio-group">
- <el-radio-button label="鎸夊懆" :value="1" />
- <el-radio-button label="鎸夋湀" :value="2" />
- <el-radio-button label="鎸夊搴�" :value="3" />
- </el-radio-group>
+<!-- <el-radio-group v-model="radio1" size="large" @change="statisticsReceivable" class="custom-radio-group">-->
+<!-- <el-radio-button label="鎸夊懆" :value="1" />-->
+<!-- <el-radio-button label="鎸夋湀" :value="2" />-->
+<!-- <el-radio-button label="鎸夊搴�" :value="3" />-->
+<!-- </el-radio-group>-->
</div>
<Echarts ref="chart"
:color="barColors2"
@@ -226,7 +227,7 @@
<!-- 鍥炴涓庡紑绁ㄥ垎鏋� -->
<div class="panel-header">
- <span class="panel-title">鍥炴涓庡紑绁ㄥ垎鏋�</span>
+ <span class="panel-title">杩戜竴鏈堝洖娆句笌寮�绁ㄥ垎鏋�</span>
</div>
<div class="panel-item-customers" style="padding-top: 60px;">
<Echarts ref="chart" :chartStyle="chartStyle" :grid="grid" :legend="lineLegend" :series="lineSeries"
@@ -234,12 +235,13 @@
</div>
</div>
</div>
+ </div>
</div>
</template>
<script setup>
import * as echarts from 'echarts'
-import { ref, onMounted, onBeforeUnmount, nextTick } from 'vue'
+import { ref, reactive, onMounted, onBeforeUnmount, nextTick } from 'vue'
import autofit from 'autofit.js'
import Echarts from "@/components/Echarts/echarts.vue";
import useUserStore from '@/store/modules/user'
@@ -247,7 +249,9 @@
analysisCustomerContractAmounts, getAmountHalfYear,
homeTodos,
qualityStatistics,
- statisticsReceivablePayable
+ statisticsReceivablePayable,
+ getProgressStatistics,
+ getWorkInProcessTurnover
} from "@/api/viewIndex.js";
import {staffOnJobListPage} from "@/api/personnelManagement/employeeRecord.js";
import {listCustomer} from "@/api/basicData/customerFile.js";
@@ -260,6 +264,12 @@
// 鍏ㄥ睆鐩稿叧鐘舵��
const isFullscreen = ref(false);
+
+// 缂╂斁姣斾緥
+const scaleRatio = ref(1)
+// 璁捐灏哄锛堝熀鍑嗗昂瀵革級- 鏍规嵁瀹為檯璁捐绋胯皟鏁�
+const designWidth = 1920
+const designHeight = 1080
// 鐢ㄦ埛store
const userStore = useUserStore()
@@ -412,82 +422,59 @@
const barLegend = {
show: true,
textStyle: { color: '#B8C8E0' },
- data: ['鍘熸潗鏂欎笉鍚堟牸鏁�', '杩囩▼涓嶅悎鏍兼暟', '鍑哄巶涓嶅悎鏍兼暟']
+ data: ['鍘熸潗鏂欏悎鏍兼暟', '杩囩▼鍚堟牸鏁�', '鍑轰笉鍚堟牸鏁�']
}
const barLegend1 = {
- show: true,
+ show: false,
textStyle: { color: '#B8C8E0' },
- data: ['鎬绘敹鍏�', '鎬绘敮鍑�', '鍑�鏀跺叆']
+ data: []
}
const barSeries11 = ref([
{
- name: '鎬绘敹鍏�',
+ name: '鐢熶骇璁㈠崟缁熻',
type: 'bar',
barGap: 0,
emphasis: {
focus: 'series'
},
itemStyle: {
- color: {
- type: 'linear',
- x: 0,
- y: 0,
- x2: 0,
- y2: 1,
- colorStops: [
- { offset: 1, color: '#00A4ED' },
- { offset: 0, color: '#4EE4FF' }
+ // 浣跨敤鍑芥暟鏍规嵁鏁版嵁绱㈠紩杩斿洖涓嶅悓棰滆壊
+ color: function(params) {
+ const colorStops = [
+ [
+ { offset: 1, color: '#00A4ED' },
+ { offset: 0, color: '#4EE4FF' }
+ ],
+ [
+ { offset: 1, color: '#3378FF' },
+ { offset: 0, color: '#4E8AFF' }
+ ],
+ [
+ { offset: 1, color: '#FF6B6B' },
+ { offset: 0, color: '#FF8E8E' }
+ ],
+ [
+ { offset: 1, color: '#537EF5' },
+ { offset: 0, color: '#9061F8' }
+ ]
]
+ const stops = colorStops[params.dataIndex] || colorStops[0]
+ return {
+ type: 'linear',
+ x: 0,
+ y: 0,
+ x2: 0,
+ y2: 1,
+ colorStops: stops
+ }
}
},
data: []
- },
- {
- name: '鎬绘敮鍑�',
- type: 'bar',
- emphasis: {
- focus: 'series'
- },
- itemStyle: {
- color: {
- type: 'linear',
- x: 0,
- y: 0,
- x2: 0,
- y2: 1,
- colorStops: [
- { offset: 1, color: '#3378FF' },
- { offset: 0, color: '#4E8AFF' }
- ]
- }
- },
- data: []
- },
- {
- name: '鍑�鏀跺叆',
- type: 'bar',
- emphasis: {
- focus: 'series'
- },
- itemStyle: {
- color: {
- type: 'linear',
- x: 0,
- y: 0,
- x2: 0,
- y2: 1,
- colorStops: [
- { offset: 1, color: '#537EF5' },
- { offset: 0, color: '#9061F8' }
- ]
- }
- },
- data: []
- },
+ }
])
const barSeries1 = ref([
{
- name: '鍘熸潗鏂欎笉鍚堟牸鏁�',
+ name: '鍘熸潗鏂欏悎鏍兼暟',
type: 'bar',
barGap: 0,
emphasis: {
@@ -509,7 +496,7 @@
data: []
},
{
- name: '杩囩▼涓嶅悎鏍兼暟',
+ name: '杩囩▼鍚堟牸鏁�',
type: 'bar',
emphasis: {
focus: 'series'
@@ -530,7 +517,7 @@
data: []
},
{
- name: '鍑哄巶涓嶅悎鏍兼暟',
+ name: '鍑哄巶鍚堟牸鏁�',
type: 'bar',
emphasis: {
focus: 'series'
@@ -595,13 +582,35 @@
// 寰呭姙浜嬮」
const todoList = ref([])
-// 绐楀彛澶у皬鍙樺寲澶勭悊
-const handleResize = () => {
+// 璁$畻缂╂斁姣斾緥
+const calculateScale = () => {
+ const container = document.querySelector('.scale-container')
+ if (!container) return
+
+ // 鑾峰彇瀹瑰櫒鐨勫疄闄呭昂瀵�
+ const rect = container.getBoundingClientRect?.()
+ const containerWidth = container.clientWidth || rect?.width || window.innerWidth
+ const containerHeight = container.clientHeight || rect?.height || window.innerHeight
+
+ // 璁$畻瀹介珮缂╂斁姣斾緥锛屽彇杈冨皬鍊间互淇濊瘉鍐呭瀹屾暣鏄剧ず锛堢瓑姣旂缉鏀撅級
+ const scaleX = containerWidth / designWidth
+ const scaleY = containerHeight / designHeight
+ scaleRatio.value = Math.min(scaleX, scaleY)
+
+ // 瑙﹀彂鍥捐〃resize
charts.value.forEach(chart => {
if (chart && chart.resize) {
chart.resize()
}
})
+}
+
+// 绐楀彛澶у皬鍙樺寲澶勭悊
+const handleResize = () => {
+ // 寤惰繜鎵ц锛岀‘淇滵OM鏇存柊瀹屾垚
+ setTimeout(() => {
+ calculateScale()
+ }, 100)
}
// 閿�姣佸浘琛ㄥ疄渚�
@@ -640,15 +649,45 @@
qualityStatisticsObject.value.factoryNum = res.data.factoryNum
})
}
-// 璐㈠姟缁熻
-const accountStatisticsInfo = () => {
- listPageAnalysis().then((res) => {
- xAxis3.value[0].data = res.data.days
- barSeries11.value[0].data = res.data.totalIncome
- barSeries11.value[1].data = res.data.totalExpense
- barSeries11.value[2].data = res.data.netIncome
+// 鍚勭敓浜ц鍗曠殑瀹屾垚杩涘害缁熻
+const progressStatisticsInfo = () => {
+ getProgressStatistics().then((res) => {
+ console.log("鐢熶骇璁㈠崟瀹屾垚杩涘害缁熻鏁版嵁:", res)
+
+ if (!res || !res.data) {
+ console.warn('鐢熶骇璁㈠崟瀹屾垚杩涘害缁熻鏁版嵁涓虹┖')
+ return
+ }
+
+ // 璁剧疆X杞存暟鎹� - 浣跨敤鍒嗙被鍚嶇О
+ xAxis3.value[0].data = ['宸插畬鎴愯繘搴︽暟', '鎬昏鍗曟暟', '鏈畬鎴愯鍗曟暟', '宸插畬鎴愯鍗曟暟']
+
+ // 璁剧疆鍗曚釜绯诲垪鐨勬暟鎹� - 姣忎釜X杞村垎绫诲搴斾竴涓��
+ if (barSeries11.value && barSeries11.value.length > 0) {
+ barSeries11.value[0].data = [
+ res.data.completedProgressCount || 0,
+ res.data.totalOrderCount || 0,
+ res.data.uncompletedOrderCount || 0,
+ res.data.completedOrderCount || 0
+ ]
+ }
+
+ console.log('鍥捐〃鏁版嵁璁剧疆瀹屾垚:', {
+ xAxis: xAxis3.value[0].data,
+ series: barSeries11.value[0]?.data
+ })
+
+ }).catch((error) => {
+ console.error('鑾峰彇鐢熶骇璁㈠崟瀹屾垚杩涘害缁熻澶辫触:', error)
})
}
+// 璐㈠姟缁熻
+// const accountStatisticsInfo = () => {
+// listPageAnalysis().then((res) => {
+// xAxis3.value[0].data = res.data.days
+// barSeries11.value[0].data = res.data.totalIncome
+// })
+// }
const getNum = () => {
const params = {
pageNum: -1,
@@ -672,10 +711,10 @@
getLedgerPage(params).then((res) => {
equipmentNum.value = res.data.total
});
- getRepairPage(params).then((res) => {
+ getRepairPage({...params, status:0}).then((res) => {
equipmentRepair.value = res.data.total
});
- getUpkeepPage(params).then((res) => {
+ getUpkeepPage({...params, status:0}).then((res) => {
equipmentMaintain.value = res.data.total
});
measuringInstrumentListPage(params).then((res) => {
@@ -881,9 +920,9 @@
updateTime()
timer.value = setInterval(updateTime, 1000)
}
-// 鍏ㄥ睆鍔熻兘瀹炵幇 - 閽堝data-dashboard鍏冪礌
+// 鍏ㄥ睆鍔熻兘瀹炵幇 - 閽堝scale-container鍏冪礌
const toggleFullscreen = () => {
- const element = document.querySelector('.data-dashboard')
+ const element = document.querySelector('.scale-container')
if (!element) return
@@ -911,7 +950,12 @@
const fullscreenElement = document.fullscreenElement ||
document.webkitFullscreenElement ||
document.msFullscreenElement
- isFullscreen.value = fullscreenElement && fullscreenElement.classList.contains('data-dashboard')
+ isFullscreen.value = fullscreenElement && fullscreenElement.classList.contains('scale-container')
+
+ // 鍏ㄥ睆鐘舵�佸彉鍖栨椂锛屽欢杩熼噸鏂拌绠楃缉鏀炬瘮渚嬶紙纭繚DOM鏇存柊瀹屾垚锛�
+ setTimeout(() => {
+ calculateScale()
+ }, 200)
}
// 鐢熷懡鍛ㄦ湡閽╁瓙
@@ -919,8 +963,11 @@
initTime()
// 浣跨敤nextTick纭繚DOM瀹屽叏娓叉煋鍚庡啀鍒濆鍖栧浘琛�
nextTick(() => {
- // 鍒濆鍖朼utofit鑷�傚簲
- autofit.init({ dh: 1080, dw: 1920, el: '.data-dashboard', resize: true }, false)
+ // 璁$畻鍒濆缂╂斁姣斾緥
+ calculateScale()
+
+ // 鍒濆鍖朼utofit鑷�傚簲锛堝鏋滈渶瑕佷繚鐣檃utofit锛屽彲浠ヤ繚鐣欙紝浣嗕富瑕佺缉鏀剧敱scale-container鎺у埗锛�
+ // autofit.init({ dh: 800, dw: 1280, el: '.data-dashboard', resize: true }, false)
// 娣诲姞鑷姩婊氬姩鍔ㄧ敾鏁堟灉 - 瀹㈡埛淇℃伅鍒楄〃
const contractList = refContractList.value
@@ -980,9 +1027,13 @@
})
window.addEventListener('resize', handleResize)
+ window.addEventListener('fullscreenchange', handleFullscreenChange)
+ window.addEventListener('webkitfullscreenchange', handleFullscreenChange)
+ window.addEventListener('MSFullscreenChange', handleFullscreenChange)
analysisCustomer()
qualityStatisticsInfo()
- accountStatisticsInfo()
+ // accountStatisticsInfo()
+ progressStatisticsInfo()
getNum()
getLedgerNum()
todoInfoS()
@@ -1045,43 +1096,58 @@
</script>
<style scoped>
+/* 澶栭儴缂╂斁瀹瑰櫒 - 鍗犳嵁鏁翠釜瑙嗗彛 */
+.scale-container {
+ position: relative;
+ width: 100%;
+ /* 椤甸潰鍦ㄥ父瑙勫竷灞�涓嬶紙鏈夐《鏍忥級榛樿鍑忓幓 84px锛岄伩鍏嶅唴瀹硅瑁佸垏 */
+ height: calc(100vh - 84px);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: #000;
+ overflow: hidden;
+}
+
+/* 鍐呴儴鍐呭鍖哄煙 - 鍥哄畾璁捐灏哄 */
.data-dashboard {
position: relative;
- width: 100%;
- height: 100%;
+ width: 1920px;
+ height: 1080px;
background-image: url("@/assets/BI/backImage@2x.png");
background-size: cover;
background-position: center;
background-repeat: no-repeat;
+ transform-origin: center center;
}
-/* 鍏ㄥ睆鐘舵�佺殑鏍峰紡 */
-.data-dashboard:fullscreen {
- width: 100%;
- height: 100%;
+/* 鍏ㄥ睆鐘舵�佺殑鏍峰紡 - 浣滅敤浜巗cale-container */
+.scale-container:fullscreen {
+ width: 100vw;
+ height: 100vh;
margin: 0;
padding: 0;
- background-color: inherit;
+ background-color: #000;
z-index: 9999;
}
/* Webkit娴忚鍣ㄥ墠缂� */
-.data-dashboard:-webkit-full-screen {
- width: 100%;
- height: 100%;
+.scale-container:-webkit-full-screen {
+ width: 100vw;
+ height: 100vh;
margin: 0;
padding: 0;
- background-color: inherit;
+ background-color: #000;
z-index: 9999;
}
/* MS娴忚鍣ㄥ墠缂� */
-.data-dashboard:-ms-fullscreen {
- width: 100%;
- height: 100%;
+.scale-container:-ms-fullscreen {
+ width: 100vw;
+ height: 100vh;
margin: 0;
padding: 0;
- background-color: inherit;
+ background-color: #000;
z-index: 9999;
}
@@ -1089,10 +1155,9 @@
.dashboard-header {
position: relative;
z-index: 1;
- height: 170px;
+ height: 86px;
background-image: url("@/assets/BI/biaoti.png");
background-size: cover;
- background-position: center;
background-repeat: no-repeat;
display: flex;
align-items: center;
@@ -1103,7 +1168,7 @@
font-weight: 600;
font-size: 52px;
color: #FFFFFF;
-top: 32px;
+top: 16px;
position: absolute;
}
@@ -1136,7 +1201,7 @@
display: flex;
gap: 30px;
padding: 0 30px;
- height: calc(100% - 120px);
+ height: calc(100% - 86px);
overflow: hidden;
}
--
Gitblit v1.9.3