diff --git a/.env.development b/.env.development index b59befd..500d6b0 100644 --- a/.env.development +++ b/.env.development @@ -5,7 +5,16 @@ VITE_APP_TITLE = 煤科建管平台 VITE_APP_ENV = 'development' # 开发环境 -VITE_APP_BASE_API = 'http://192.168.110.180:8899' +# 李陈杰 209 +VITE_APP_BASE_API = 'http://192.168.110.209:8899' +# 曾涛 +# VITE_APP_BASE_API = 'http://192.168.110.180:8899' +# 罗成 +# VITE_APP_BASE_API = 'http://192.168.110.213:8899' +# 朱银 +# VITE_APP_BASE_API = 'http://192.168.110.149:8899' +#曾涛 +# VITE_APP_BASE_API = 'http://192.168.110.171:8899' # 无人机接口地址 diff --git a/src/api/ctr/incomeContract/index.ts b/src/api/ctr/incomeContract/index.ts index eda6901..5cf0c75 100644 --- a/src/api/ctr/incomeContract/index.ts +++ b/src/api/ctr/incomeContract/index.ts @@ -71,4 +71,16 @@ export const getFileList = (data) => { method: 'get', params: data }) +} + +/** + * 查看收入合同附件列表 + * @param id + */ +export const getInfoByProjectId = (data) => { + return request({ + url: '/bidding/listOfWinningBids/getInfoByProjectId', + method: 'get', + params: data + }) } \ No newline at end of file diff --git a/src/api/largeScreen/index.ts b/src/api/largeScreen/index.ts new file mode 100644 index 0000000..1a0da4c --- /dev/null +++ b/src/api/largeScreen/index.ts @@ -0,0 +1,99 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { MasterVO, MasterForm, MasterQuery } from '@/api/patch/types'; +/** + * 合同金额 + * + */ +export const totalAmount = () => { + return request({ + url: '/money/big/screen/totalAmount', + method: 'get' + }); +}; + +/** + * 查询项目位置列表 + * + */ export const projectGis = (clientid) => { + return request({ + url: '/money/big/screen/project/gis', + method: 'get', + params: clientid + }); +}; + +/** + * 应收实收 + * + */ export const incomePay = (clientid) => { + return request({ + url: '/money/big/screen/income/pay', + method: 'get', + params: clientid + }); +}; + +/** + * 收入合同分析 + * + */ export const incomeAnalyze = (clientid) => { + return request({ + url: '/money/big/screen/income/analyze', + method: 'get', + params: clientid + }); +}; +/** + * 应付实付 + * + */ export const expensesPay = (clientid) => { + return request({ + url: '/money/big/screen/expenses/pay', + method: 'get', + params: clientid + }); +}; +/** + * 支出合同分析 + * + */ export const expensesAnalyze = (clientid) => { + return request({ + url: '/money/big/screen/expenses/analyze', + method: 'get', + params: clientid + }); +}; +/** + * 成本 + * + */ export const cost = (clientid) => { + return request({ + url: '/money/big/screen/cost', + method: 'get', + params: clientid + }); +}; + +// 资金KPI +export const monthMoney = () => { + return request({ + url: '/money/big/screen/monthMoney', + method: 'get', + }); +}; +// 现金流 +export const monthCash = () => { + return request({ + url: '/money/big/screen/monthCash', + method: 'get', + }); +}; +// 现金流总和 + +export const cashTotal = () => { + return request({ + url: '/money/big/screen/cashTotal', + method: 'get', + }); +}; diff --git a/src/api/materials/batchPlan/index.ts b/src/api/materials/batchPlan/index.ts index 8633eee..c9231af 100644 --- a/src/api/materials/batchPlan/index.ts +++ b/src/api/materials/batchPlan/index.ts @@ -143,3 +143,20 @@ export const getDictList = (query: any): AxiosPromise => { params: query }); }; +export const coryEngineeringList = (query: any): AxiosPromise => { + return request({ + url: '/cailiaoshebei/mrpBase/coryEngineeringList', + method: 'get', + params: query + }); +}; +/** + * 获取到物资状态为已完成的版本 + */ +export const obtainTheVersion = (query: any) => { + return request({ + url: '/cailiaoshebei/mrpBase/obtainTheVersion', + method: 'get', + params: query + }); +}; diff --git a/src/api/materials/materialIssue/index.ts b/src/api/materials/materialIssue/index.ts index 31e8076..a366fa6 100644 --- a/src/api/materials/materialIssue/index.ts +++ b/src/api/materials/materialIssue/index.ts @@ -61,3 +61,10 @@ export const delMaterialIssue = (id: string | number | Array) = method: 'delete' }); }; +//获取一起名称 +export const getMaterialName = (id: any) => { + return request({ + url: '/materials/materials/inventoryNumber/' + id, + method: 'get' + }); +}; diff --git a/src/api/materials/materialsUseRecord/index.ts b/src/api/materials/materialsUseRecord/index.ts new file mode 100644 index 0000000..177b5b2 --- /dev/null +++ b/src/api/materials/materialsUseRecord/index.ts @@ -0,0 +1,70 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { MaterialsUseRecordVO, MaterialsUseRecordForm, MaterialsUseRecordQuery } from '@/api/materials/materialsUseRecord/types'; + +/** + * 查询材料使用登记列表 + * @param query + * @returns {*} + */ + +export const listMaterialsUseInventory = (query?: MaterialsUseRecordQuery): AxiosPromise => { + return request({ + url: '/materials/materialsInventory/list', + method: 'get', + params: query + }); +}; +export const listMaterialsUseRecord = (query?: MaterialsUseRecordQuery): AxiosPromise => { + return request({ + url: '/materials/materialsUseRecord/list', + method: 'get', + params: query + }); +}; + +/** + * 查询材料使用登记详细 + * @param id + */ +export const getMaterialsUseRecord = (id: string | number): AxiosPromise => { + return request({ + url: '/materials/materialsUseRecord/' + id, + method: 'get' + }); +}; + +/** + * 新增材料使用登记 + * @param data + */ +export const addMaterialsUseRecord = (data: MaterialsUseRecordForm) => { + return request({ + url: '/materials/materialsUseRecord', + method: 'post', + data: data + }); +}; + +/** + * 修改材料使用登记 + * @param data + */ +export const updateMaterialsUseRecord = (data: MaterialsUseRecordForm) => { + return request({ + url: '/materials/materialsUseRecord', + method: 'put', + data: data + }); +}; + +/** + * 删除材料使用登记 + * @param id + */ +export const delMaterialsUseRecord = (id: string | number | Array) => { + return request({ + url: '/materials/materialsUseRecord/' + id, + method: 'delete' + }); +}; diff --git a/src/api/materials/materialsUseRecord/types.ts b/src/api/materials/materialsUseRecord/types.ts new file mode 100644 index 0000000..697f347 --- /dev/null +++ b/src/api/materials/materialsUseRecord/types.ts @@ -0,0 +1,111 @@ +export interface MaterialsUseRecordVO { + /** + * 主键ID + */ + id: string | number; + + /** + * 项目ID + */ + projectId: string | number; + + /** + * 库存ID + */ + inventoryId: string | number; + + /** + * 使用部位 + */ + usePart: string; + + /** + * 使用数量 + */ + useNumber: number; + + /** + * 剩余量 + */ + residueNumber: string | number; + + /** + * 备注 + */ + remark: string; + +} + +export interface MaterialsUseRecordForm extends BaseEntity { + /** + * 主键ID + */ + id?: string | number; + + /** + * 项目ID + */ + projectId?: string | number; + + /** + * 库存ID + */ + inventoryId?: string | number; + + /** + * 使用部位 + */ + usePart?: string; + + /** + * 使用数量 + */ + useNumber?: number; + + /** + * 剩余量 + */ + residueNumber?: string | number; + + /** + * 备注 + */ + remark?: string; + +} + +export interface MaterialsUseRecordQuery extends PageQuery { + + /** + * 项目ID + */ + projectId?: string | number; + + /** + * 库存ID + */ + inventoryId?: string | number; + + /** + * 使用部位 + */ + usePart?: string; + + /** + * 使用数量 + */ + useNumber?: number; + + /** + * 剩余量 + */ + residueNumber?: string | number; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/api/out/monthPlan/index.ts b/src/api/out/monthPlan/index.ts index b902124..48f376f 100644 --- a/src/api/out/monthPlan/index.ts +++ b/src/api/out/monthPlan/index.ts @@ -98,3 +98,26 @@ export const getMonthInfo = (query): AxiosPromise => { params: query }); }; +/** + * 修改采购完工产值对甲 + + * @param id + */ +export const purchaseValueAup = (query) => { + return request({ + url: '/out/monthPlan/purchaseValueAup', + method: 'get', + params: query + }); +}; +/** + * 采购完工产值对甲 + * @param id + */ +export const purchaseValueA = (query) => { + return request({ + url: '/out/monthPlan/purchaseValueA', + method: 'get', + params: query + }); +}; \ No newline at end of file diff --git a/src/api/out/outDesignTableVS/index.ts b/src/api/out/outDesignTableVS/index.ts index 788d797..9385a1d 100644 --- a/src/api/out/outDesignTableVS/index.ts +++ b/src/api/out/outDesignTableVS/index.ts @@ -7,3 +7,19 @@ export function listOutTable(query: any) { params: query }); } +// 对甲产值和对乙产值 +export function comparisonOfOutputValue(query: any) { + return request({ + url: '/out/table/outCompare', + method: 'get', + params: query + }); +} +// 对甲结算和对乙结算 +export function comparisonOfSettlementValue(query: any) { + return request({ + url: '/out/table/comparisonOfOwnerAndSub', + method: 'get', + params: query + }); +} diff --git a/src/api/out/purchase/index.ts b/src/api/out/purchase/index.ts new file mode 100644 index 0000000..410a1cd --- /dev/null +++ b/src/api/out/purchase/index.ts @@ -0,0 +1,24 @@ +import request from '@/utils/request'; +/** + * 修改采购完工产值对甲 + + * @param id + */ +export const purchaseValueAup = (query) => { + return request({ + url: '/out/monthPlan/purchaseValueAup', + method: 'get', + params: query + }); +}; +/** + * 采购完工产值对甲 + * @param id + */ +export const purchaseValueA = (query) => { + return request({ + url: '/out/monthPlan/purchaseValueA', + method: 'get', + params: query + }); +}; \ No newline at end of file diff --git a/src/api/progress/constructionSchedulePlan/index.ts b/src/api/progress/constructionSchedulePlan/index.ts index 3a7352d..fec34f8 100644 --- a/src/api/progress/constructionSchedulePlan/index.ts +++ b/src/api/progress/constructionSchedulePlan/index.ts @@ -61,3 +61,13 @@ export const delConstructionSchedulePlan = (id: string | number | Array) => { + return request({ + url: '/project/project/projectStructure/' + id, + method: 'get' + }); +}; diff --git a/src/api/progress/progressCategory/index.ts b/src/api/progress/progressCategory/index.ts index d525264..ed4bb07 100644 --- a/src/api/progress/progressCategory/index.ts +++ b/src/api/progress/progressCategory/index.ts @@ -61,3 +61,12 @@ export const delProgressCategory = (id: string | number | Array method: 'delete' }); }; + +//下载 +export const downloadProgressCategory = (data) => { + return request({ + url: '/progress/progressCategory/export', + method: 'post', + data + }); +}; diff --git a/src/api/progress/progressCategory/types.ts b/src/api/progress/progressCategory/types.ts index 6e05749..c24a173 100644 --- a/src/api/progress/progressCategory/types.ts +++ b/src/api/progress/progressCategory/types.ts @@ -84,10 +84,10 @@ export interface ProgressCategoryVO { */ remark: string; - /** - * 子对象 - */ - children: ProgressCategoryVO[]; + /** + * 子对象 + */ + children: ProgressCategoryVO[]; } export interface ProgressCategoryForm extends BaseEntity { @@ -95,7 +95,8 @@ export interface ProgressCategoryForm extends BaseEntity { * 主键id */ id?: string | number; - + constructionPrice?: string | number; + ownerPrice?: string | number; /** * 父类别id */ @@ -175,11 +176,9 @@ export interface ProgressCategoryForm extends BaseEntity { * 备注 */ remark?: string; - } export interface ProgressCategoryQuery { - /** * 父类别id */ @@ -255,11 +254,8 @@ export interface ProgressCategoryQuery { */ status?: string; - /** - * 日期范围参数 - */ - params?: any; + /** + * 日期范围参数 + */ + params?: any; } - - - diff --git a/src/api/tender/index.ts b/src/api/tender/index.ts index 2f79a49..10a75dd 100644 --- a/src/api/tender/index.ts +++ b/src/api/tender/index.ts @@ -106,3 +106,27 @@ export const delBiddView = (query: any): AxiosPromise => { method: 'delete' }); }; +//获取招标单位 +export const getUnitList = (query: any): AxiosPromise => { + return request({ + url: '/supplierInput/supplierInput/getList', + method: 'get', + params: query + }); +}; +//修改状态 +export const editStatus = (query: any): AxiosPromise => { + return request({ + url: '/tender/biddingPlan/editStatus', + method: 'put', + data: query + }); +}; +//获取审核状态 +export const getApproval = (id) => { + return request({ + url: '/tender/tenderPlanLimitList/getVersionDetail', + method: 'get', + params: { versions: id } + }); +}; diff --git a/src/assets/styles/ruoyi.scss b/src/assets/styles/ruoyi.scss index d2ecb24..d9409ed 100644 --- a/src/assets/styles/ruoyi.scss +++ b/src/assets/styles/ruoyi.scss @@ -288,3 +288,14 @@ h6 { .top-right-btn { margin-left: auto; } + +.text-two-lines { + display: -webkit-box; /* 触发弹性盒模型 */ + -webkit-box-orient: vertical; /* 垂直排列文本行 */ + -webkit-line-clamp: 2; /* 限制显示2行 */ + /* 3. 超出部分处理 */ + overflow: hidden; /* 隐藏超出容器的内容 */ + text-overflow: ellipsis; /* 超出部分显示省略号 */ + /* 可选:优化文本间距 */ + line-height: 1.5; /* 行高,控制两行的垂直间距 */ +} diff --git a/src/components/Editor/index.vue b/src/components/Editor/index.vue index ba70fbb..2b569d0 100644 --- a/src/components/Editor/index.vue +++ b/src/components/Editor/index.vue @@ -1,28 +1,14 @@ @@ -47,7 +33,9 @@ const props = defineProps({ /* 上传文件大小限制(MB) */ fileSize: propTypes.number.def(5), /* 类型(base64格式、url格式) */ - type: propTypes.string.def('url') + type: propTypes.string.def('url'), + /* 占位符 */ + placeholder: propTypes.string.def('请输入内容'), }); const { proxy } = getCurrentInstance() as ComponentInternalInstance; @@ -90,7 +78,7 @@ const options = ref({ } } }, - placeholder: '请输入内容', + placeholder: props.placeholder, readOnly: props.readOnly }); @@ -166,77 +154,96 @@ const handleUploadError = (err: any) => { .editor-img-uploader { display: none; } + .editor, .ql-toolbar { white-space: pre-wrap !important; line-height: normal !important; } + .quill-img { display: none; } + .ql-snow .ql-tooltip[data-mode='link']::before { content: '请输入链接地址:'; } + .ql-snow .ql-tooltip.ql-editing a.ql-action::after { border-right: 0; content: '保存'; padding-right: 0; } + .ql-snow .ql-tooltip[data-mode='video']::before { content: '请输入视频地址:'; } + .ql-snow .ql-picker.ql-size .ql-picker-label::before, .ql-snow .ql-picker.ql-size .ql-picker-item::before { content: '14px'; } + .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='small']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before { content: '10px'; } + .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='large']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before { content: '18px'; } + .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='huge']::before, .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before { content: '32px'; } + .ql-snow .ql-picker.ql-header .ql-picker-label::before, .ql-snow .ql-picker.ql-header .ql-picker-item::before { content: '文本'; } + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='1']::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before { content: '标题1'; } + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='2']::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before { content: '标题2'; } + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='3']::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before { content: '标题3'; } + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='4']::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before { content: '标题4'; } + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='5']::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before { content: '标题5'; } + .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='6']::before, .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before { content: '标题6'; } + .ql-snow .ql-picker.ql-font .ql-picker-label::before, .ql-snow .ql-picker.ql-font .ql-picker-item::before { content: '标准字体'; } + .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='serif']::before, .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='serif']::before { content: '衬线字体'; } + .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='monospace']::before, .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='monospace']::before { content: '等宽字体'; diff --git a/src/components/FileUpload/index.vue b/src/components/FileUpload/index.vue index 8bfd847..5011b9d 100644 --- a/src/components/FileUpload/index.vue +++ b/src/components/FileUpload/index.vue @@ -1,11 +1,28 @@ - + diff --git a/src/views/biddingManagemen/biddingLimit/indexEdit.vue b/src/views/biddingManagemen/biddingLimit/indexEdit.vue index 450d058..fee3dd1 100644 --- a/src/views/biddingManagemen/biddingLimit/indexEdit.vue +++ b/src/views/biddingManagemen/biddingLimit/indexEdit.vue @@ -70,7 +70,7 @@ import ApprovalButton from '@/components/Process/approvalButton.vue'; import { StartProcessBo } from '@/api/workflow/workflowCommon/types'; const { proxy } = getCurrentInstance() as ComponentInternalInstance; import { useUserStoreHook } from '@/store/modules/user'; -import { getVersionDetail } from '@/api/bidding/biddingLimit'; +import { getVersionDetail, sheetList } from '@/api/bidding/biddingLimit'; // 获取用户 store const userStore = useUserStoreHook(); @@ -82,8 +82,8 @@ const loading = ref(true); const routeParams = ref>({}); const flowCodeOptions = [ { - value: currentProject.value?.id + '_costAccounting', - label: '成本核算清单审批' + value: currentProject.value?.id + '_biddingLimitList', + label: '投标一览审核' } ]; @@ -151,11 +151,25 @@ const getInfo = () => { nextTick(async () => { const res = await getVersionDetail(routeParams.value.id); Object.assign(form.value, res.data); + getSheetName(res.data.versions); loading.value = false; buttonLoading.value = false; }); }; - +//获取表名 +const getSheetName = async (versions) => { + const params = { + projectId: currentProject.value?.id, + versions + }; + const res = await sheetList(params); + if (res.code == 200) { + sheets.value = res.data; + if (res.data.length > 0) { + sheets.value = res.data; + } + } +}; /** 提交按钮 */ const submitForm = (status1: string) => { status.value = status1; @@ -171,7 +185,7 @@ const submitFlow = async () => { const handleStartWorkFlow = async (data: LeaveForm) => { try { submitFormData.value.flowCode = flowCode.value; - submitFormData.value.businessId = data.id; + submitFormData.value.businessId = data.versions + '_abc'; //流程变量 taskVariables.value = { // leave4/5 使用的流程变量 @@ -189,7 +203,7 @@ const handleStartWorkFlow = async (data: LeaveForm) => { }; //审批记录 const handleApprovalRecord = () => { - approvalRecordRef.value.init(form.value.id); + approvalRecordRef.value.init(form.value.versions + '_abc'); }; //提交回调 const submitCallback = async () => { @@ -227,13 +241,10 @@ onMounted(() => { nextTick(async () => { reset(); routeParams.value = proxy.$route.query; - sheets.value = routeParams.value.sheets; - versions.value = routeParams.value.versions; - Object.assign(form.value, versions.value); loading.value = false; - if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') { - getInfo(); - } + // if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') { + getInfo(); + // } }); }); diff --git a/src/views/biddingManagemen/listOfWinningBids/index copy 2.vue b/src/views/biddingManagemen/listOfWinningBids/index copy 2.vue new file mode 100644 index 0000000..1e7356c --- /dev/null +++ b/src/views/biddingManagemen/listOfWinningBids/index copy 2.vue @@ -0,0 +1,524 @@ + + + + + diff --git a/src/views/biddingManagemen/listOfWinningBids/index copy.vue b/src/views/biddingManagemen/listOfWinningBids/index copy.vue deleted file mode 100644 index cd2f39a..0000000 --- a/src/views/biddingManagemen/listOfWinningBids/index copy.vue +++ /dev/null @@ -1,344 +0,0 @@ - - - diff --git a/src/views/biddingManagemen/listOfWinningBids/index.vue b/src/views/biddingManagemen/listOfWinningBids/index.vue index f2c7700..02a45c0 100644 --- a/src/views/biddingManagemen/listOfWinningBids/index.vue +++ b/src/views/biddingManagemen/listOfWinningBids/index.vue @@ -1,345 +1,547 @@ diff --git a/src/views/contract/bidCost/index.vue b/src/views/contract/bidCost/index.vue new file mode 100644 index 0000000..8a6297b --- /dev/null +++ b/src/views/contract/bidCost/index.vue @@ -0,0 +1,301 @@ + + + + + diff --git a/src/views/contract/bidCost/indexEdit.vue b/src/views/contract/bidCost/indexEdit.vue new file mode 100644 index 0000000..f97c080 --- /dev/null +++ b/src/views/contract/bidCost/indexEdit.vue @@ -0,0 +1,343 @@ + + + + diff --git a/src/views/contract/division/index.vue b/src/views/contract/division/index.vue index fe7153c..f78dd09 100644 --- a/src/views/contract/division/index.vue +++ b/src/views/contract/division/index.vue @@ -25,6 +25,7 @@ + + + + + @@ -151,6 +176,8 @@ const userStore = useUserStore(); const queryFormRef = ref(); const expensesContractFormRef = ref(); const currentProject = computed(() => userStore.selectedProject); +const detailContent = ref(''); +const detailVisible = ref(false); // 控制承包内容详情对话框的显示 const dialog = reactive({ visible: false, @@ -294,7 +321,10 @@ const handleShowFileList = async (row: ExpensesContractVO) => { }); } - +const handleShowDetail = (data) => { + detailContent.value = data.contractedContent + detailVisible.value = true; +} onMounted(() => { getList(); }); diff --git a/src/views/ctr/incomeContract/index.vue b/src/views/ctr/incomeContract/index.vue index c9a4ad9..0eb9431 100644 --- a/src/views/ctr/incomeContract/index.vue +++ b/src/views/ctr/incomeContract/index.vue @@ -15,9 +15,9 @@ - + 搜索 重置 @@ -61,11 +61,21 @@ + + + - + + + + + - + @@ -115,17 +136,31 @@ + + + + + + diff --git a/src/views/design/designChange/index.vue b/src/views/design/designChange/index.vue index 1aa02bc..cbf9764 100644 --- a/src/views/design/designChange/index.vue +++ b/src/views/design/designChange/index.vue @@ -74,14 +74,14 @@ link icon="Upload" @click="handleAddChange(scope.row)" - v-if="scope.row.status == 'draft' || scope.row.status == 'back'" + v-if="(scope.row.status == 'finish' || scope.row.costEstimation == '0') && scope.row.auditStatus == 'draft'" >上传 查看 { path: `/approval/drawing/indexEdit`, query: { id: row.id, + costEstimation: row.costEstimation, type: 'view' } }); diff --git a/src/views/design/designChange/indexEdit.vue b/src/views/design/designChange/indexEdit.vue index f48e6f7..a834692 100644 --- a/src/views/design/designChange/indexEdit.vue +++ b/src/views/design/designChange/indexEdit.vue @@ -1,25 +1,21 @@ diff --git a/src/views/design/drawing/indexEdit.vue b/src/views/design/drawing/indexEdit.vue index 76c3b5b..0f5489d 100644 --- a/src/views/design/drawing/indexEdit.vue +++ b/src/views/design/drawing/indexEdit.vue @@ -88,12 +88,16 @@ const buttonLoading = ref(false); const loading = ref(true); //路由参数 const routeParams = ref>({}); -const flowCodeOptions = [ +const flowCodeOptions = ref([ { value: currentProject.value?.id + '_designchanged', label: '变更图纸审批' + }, + { + value: currentProject.value?.id + '_moneydesignchanged', + label: '资金设计变更审批' } -]; +]); const flowCode = ref(''); const status = ref(''); @@ -129,6 +133,7 @@ const initFormData = { fileUrl: undefined, fileType: undefined, fileSuffix: undefined, + costEstimation: undefined, originalName: undefined, remark: undefined, fileId: undefined @@ -144,6 +149,7 @@ const data = reactive({ fileSuffix: undefined, fileStatus: undefined, originalName: undefined, + costEstimation: undefined, newest: undefined, params: {} }, @@ -182,8 +188,13 @@ const getInfo = () => { loading.value = true; buttonLoading.value = false; nextTick(async () => { - const res = await getDesignChange(routeParams.value.id); + var id = routeParams.value.id; + if (routeParams.value.type === 'approval') { + id = routeParams.value.id.split('_')[0]; + } + const res = await getDesignChange(id); Object.assign(form.value, res.data); + if (res.data.costEstimation) form.value.status = res.data.auditStatus; loading.value = false; buttonLoading.value = false; }); @@ -248,6 +259,8 @@ const approvalVerifyOpen = async () => { // 图纸上传成功之后 开始提交 const submit = async (status, data) => { form.value = data; + form.value.id = routeParams.value.type == 'add' ? form.value.id + '_' : form.value.id.split('_')[0]; + form.value.status = data.auditStatus ? data.auditStatus : data.status; if (status === 'draft') { buttonLoading.value = false; proxy?.$modal.msgSuccess('暂存成功'); @@ -255,7 +268,13 @@ const submit = async (status, data) => { proxy.$router.go(-1); } else { if ((form.value.status === 'draft' && (flowCode.value === '' || flowCode.value === null)) || routeParams.value.type === 'add') { - flowCode.value = flowCodeOptions[0].value; + if (form.value.costEstimation == '0') { + flowCodeOptions.value = [flowCodeOptions.value[0]]; + } else { + console.log('🚀 ~ submit ~ flowCodeOptions.value:', flowCodeOptions.value[1]); + flowCodeOptions.value = [flowCodeOptions.value[1]]; + } + flowCode.value = flowCodeOptions.value[0].value; dialogVisible.visible = true; return; } @@ -275,6 +294,8 @@ onMounted(() => { loading.value = false; if (routeParams.value.type === 'update' || routeParams.value.type === 'view' || routeParams.value.type === 'approval') { getInfo(); + } else { + form.value.costEstimation = routeParams.value.costEstimation; } }); }); diff --git a/src/views/design/drawingreview/detailForm.vue b/src/views/design/drawingreview/detailForm.vue index 2862788..b836c41 100644 --- a/src/views/design/drawingreview/detailForm.vue +++ b/src/views/design/drawingreview/detailForm.vue @@ -81,13 +81,8 @@ --> - + @@ -102,7 +97,8 @@ --> - + @@ -117,7 +113,8 @@ --> - + @@ -275,13 +272,25 @@ const submit = async (businessId, cb) => { // 先验证表单 await formRef.value?.validate(); cb(); + // 加载中 + ElLoading.service({ + lock: true, + text: '提交中...', + background: 'rgba(0, 0, 0, 0.7)' + }); + formData.subprojectName = subProjectMap.get(formData.subprojectId); - formData.drawingreviewId = businessId; + // formData.drawingreviewId = businessId; + console.log(businessId); + // businessId 设置 如果有下滑线去掉后面及下划线 + formData.drawingreviewId = businessId.replace(/_/g, ''); const res = await drawingreviewReceipts(formData); if (res.code === 200) { - // // 提交成功处理逻辑 - // console.log('提交成功'); + // 提交成功处理逻辑 + console.log('提交成功'); } + // 关闭 + ElLoading.service().close(); }; onMounted(() => { getSubProject(); diff --git a/src/views/design/received/index.vue b/src/views/design/received/index.vue index 304c2e1..9d21ddd 100644 --- a/src/views/design/received/index.vue +++ b/src/views/design/received/index.vue @@ -1,6 +1,7 @@ @@ -78,6 +61,10 @@ const props = defineProps({ customStyles: { type: Object, default: () => ({}) + }, + showIcon: { + type: Boolean, + default: false } }); @@ -103,22 +90,24 @@ const trendText = computed(() => { display: flex; flex-direction: column; justify-content: space-between; - padding: 20px; + padding: 35px 10px; box-sizing: border-box; border: 1px solid rgba(29, 214, 255, 0.1); border-radius: 4px; // 增加轻微圆角,提升视觉效果 - + &__title { font-size: 14px; - color: #8FABBF; + color: #8fabbf; line-height: 20px; } - + &__value-container { - display: flex; + // display: flex; align-items: baseline; + // align-items: center; + // flex-direction: column; } - + &__value { font-size: 24px; color: #fff; @@ -126,34 +115,34 @@ const trendText = computed(() => { margin-right: 5px; font-weight: bold; } - + &__unit { - color: #8FABBF; + color: #8fabbf; font-size: 14px; } - + &__footer { display: flex; justify-content: space-between; align-items: center; } - + &__trend { display: flex; align-items: center; } - + &__trend-icon { width: 12px; height: 12px; margin-right: 4px; } - + &__trend-text { font-size: 14px; - color: #8FABBF; + color: #8fabbf; } - + &__badge { width: 40px; height: 40px; diff --git a/src/views/largeScreen/components/bottomboxconpoent.vue b/src/views/largeScreen/components/bottomboxconpoent.vue index 6735331..f904057 100644 --- a/src/views/largeScreen/components/bottomboxconpoent.vue +++ b/src/views/largeScreen/components/bottomboxconpoent.vue @@ -1,45 +1,162 @@ \ No newline at end of file +.bottom_box_text { + color: rgba(143, 171, 191, 1); + font-size: 14px; + line-height: 20px; + margin-bottom: 5px; +} + +.bottom_box_bottom { + width: 100%; + height: 8px; + margin: 5px 0; +} + +.cost-item { + color: #fff; + font-size: 14px; + line-height: 26px; + display: flex; + justify-content: space-between; +} + +.cost-label { + color: rgba(143, 171, 191, 1); +} + +.cost-value { + font-weight: 500; + color: #fff; +} + diff --git a/src/views/largeScreen/components/centerPage.vue b/src/views/largeScreen/components/centerPage.vue index aee49f0..952a419 100644 --- a/src/views/largeScreen/components/centerPage.vue +++ b/src/views/largeScreen/components/centerPage.vue @@ -1,146 +1,160 @@ + \ No newline at end of file diff --git a/src/views/largeScreen/components/leftPage.vue b/src/views/largeScreen/components/leftPage.vue index 683c9a3..52e271f 100644 --- a/src/views/largeScreen/components/leftPage.vue +++ b/src/views/largeScreen/components/leftPage.vue @@ -1,56 +1,301 @@ @@ -58,13 +303,23 @@ onMounted(() => { .leftPage { width: 100%; height: 100%; - .kpi_box{ + + .kpi_box { margin-bottom: 10px; } - .contract_box{ - height: 35vh; + + .contract_box { + height: 33vh; + display: flex; + flex-direction: column; // 按钮区和图表区垂直排列 } - .kpi_box,.contract_box { + + .chart-container { + height: 28vh; + } + + .kpi_box, + .contract_box { padding: 10px; box-sizing: border-box; border: 1px solid rgba(29, 214, 255, 0.3); diff --git a/src/views/largeScreen/components/optionList.ts b/src/views/largeScreen/components/optionList.ts index 822fd94..0daec3b 100644 --- a/src/views/largeScreen/components/optionList.ts +++ b/src/views/largeScreen/components/optionList.ts @@ -255,6 +255,7 @@ export const getLineOption = (lineData: any) => { const maxData = Math.max(...lineData.line1.flat()); const option = { + backgroundColor: '', tooltip: { trigger: 'axis', @@ -312,7 +313,7 @@ export const getLineOption = (lineData: any) => { axisLabel: { textStyle: { color: '#fff' - } + }, } }, yAxis: { @@ -698,17 +699,31 @@ export const getBarOptions = (data: any) => { backgroundColor: '', grid: { left: '8%', - top: '4%', + top: '10%', // 顶部留一点空间给 legend bottom: '8%', right: '2%' }, + legend: { + data: ['现金流入', '现金流出'], // 与 series.name 对应 + top: '0%', + textStyle: { color: '#fff', fontSize: 12 } + }, tooltip: { show: true, backgroundColor: '', trigger: 'axis', - formatter: '{b0}:{c0}万元', + // formatter: '{b0}:{c0}万元', + formatter: (params: any) => { + // params 是数组,对应每条柱子 + return params + .map((p: any) => `${p.seriesName}:${p.value} 万元`) + .join('
'); + }, textStyle: { color: '#fff' + }, + axisPointer: { + type: 'shadow' // 默认为直线,可选为:'line' | 'shadow', } // borderColor: 'rgba(252, 217, 18, 1)' }, @@ -779,6 +794,7 @@ export const getBarOptions = (data: any) => { // ], series: [ { + name: '现金流入', type: 'bar', data: data.value[0], // stack: '合并', @@ -817,6 +833,7 @@ export const getBarOptions = (data: any) => { } }, { + name: '现金流出', type: 'bar', data: data.value[1], // stack: '合并', @@ -846,12 +863,12 @@ export const getBarOptions = (data: any) => { ) }, label: { - show: false, + show: true, formatter: '{c}', position: 'top', color: '#fff', - fontSize: 10 - // padding: 5 + fontSize: 10, + padding: 5 } } ] @@ -862,7 +879,7 @@ export const getBarOptions = (data: any) => { // 收支合同分析 export const getBarOptions2 = (data: any) => { const option = { - color:['#FF932A', '#678FE6', '#1DD6FF', '#00E396'], + color: ['#FF932A', '#678FE6', '#1DD6FF', '#00E396'], title: { text: '数量(个)', subtext: '16', @@ -872,14 +889,16 @@ export const getBarOptions2 = (data: any) => { color: '#9DADB7', fontSize: 16 }, - subtextStyle:{ + subtextStyle: { color: '#707070', fontSize: 32, fontWeight: 'bold' } }, tooltip: { - trigger: 'item' + trigger: 'item', + show: true + }, legend: { top: '5%', @@ -907,7 +926,7 @@ export const getBarOptions2 = (data: any) => { show: false }, data: [ - { value: 3, name: '100万一下' }, + { value: 3, name: '100万以下' }, { value: 4, name: '100-500万' }, { value: 5, name: '500-1000万' }, { value: 4, name: '1000万以上' }, diff --git a/src/views/largeScreen/components/rightPage.vue b/src/views/largeScreen/components/rightPage.vue index bcde746..f9e9bfd 100644 --- a/src/views/largeScreen/components/rightPage.vue +++ b/src/views/largeScreen/components/rightPage.vue @@ -11,17 +11,17 @@
现金流入
-
1000000
+
{{ bigDataObj.incomeCash }}
万元
现金流出
-
1000000
+
{{ bigDataObj.expensesCash }}
万元
净现金流
-
1000000
+
{{ bigDataObj.profitCash }}
万元
@@ -33,7 +33,7 @@
项目进度
100%
--> - @@ -45,45 +45,63 @@ import TitleComponent from './TitleComponent.vue'; import EchartBox from '@/components/EchartBox/index.vue'; import { getLineOption, getBarOptions } from './optionList'; import ProgressComponent from './ProgressComponent.vue'; +import { monthMoney, monthCash, cashTotal } from '@/api/largeScreen/index'; const lineOption = ref(); const barOption = ref(); +const bigDataObj = ref({}); + +const getCapitalData = async () => { + const { data } = await monthMoney() + const month = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']; + const income = data.map((item: any) => item.incomeAmount); + const expenses = data.map((item: any) => item.expensesAmount); + const profit = data.map((item: any) => item.profitAmount); -const getCapitalData = (data?: any) => { - // const xData = data.map((item) => item.time); - // const yData = data.map((item) => item.content); const lineData = { - xLabel: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + xLabel: month, line1: [ - [100, 200, 150, 300, 250, 350, 400, 350, 450, 500, 400, 550], - [220, 250, 230, 280, 270, 300, 350, 320, 380, 400, 450, 500], - [300, 350, 320, 380, 400, 450, 500, 480, 520, 550, 600, 650] + income, + expenses, + profit ] // line2: ['20', '50', '12', '65', '30', '60'] }; lineOption.value = getLineOption(lineData); }; -const getTurnoverList = (data?: any) => { +const getTurnoverList = async () => { // const xData = data.map((item) => item.time); // const yData = data.map((item) => { // // 先将content转换为数字,再调用toFixed // const num = Number(item.content); // return isNaN(num) ? 0 : Number(num.toFixed(2)); // }); + const { data } = await monthCash() + // const month = data.map((item: any) => item.month); + const month = ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月']; + const income = data.map((item: any) => item.incomeAmount); + const expenses = data.map((item: any) => item.expensesAmount); const barData = { - name: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + name: month, value: [ - [2, 5, 15, 30, 25, 35, 40, 35, 45, 50, 40, 55], - [4, 3, 6, 11, 15, 22, 30, 14, 48, 22, 25, 60] + income, + expenses ] }; + console.log(barData); + barOption.value = getBarOptions(barData); }; +const getTotalAmonunt = async () => { + const { data } = await cashTotal() + bigDataObj.value = data +}; onMounted(() => { getCapitalData(); getTurnoverList(); + getTotalAmonunt(); }); //资金KPI diff --git a/src/views/largeScreen/index.vue b/src/views/largeScreen/index.vue index 8ce47fd..43428c8 100644 --- a/src/views/largeScreen/index.vue +++ b/src/views/largeScreen/index.vue @@ -1,4 +1,4 @@ -