diff --git a/public/catalog.xlsx b/public/catalog.xlsx new file mode 100644 index 0000000..1cca466 Binary files /dev/null and b/public/catalog.xlsx differ diff --git a/public/enterRoad.xlsx b/public/enterRoad.xlsx new file mode 100644 index 0000000..b7f00ac Binary files /dev/null and b/public/enterRoad.xlsx differ diff --git a/public/landBlock.xlsx b/public/landBlock.xlsx new file mode 100644 index 0000000..25d39e0 Binary files /dev/null and b/public/landBlock.xlsx differ diff --git a/src/api/contract/index.ts b/src/api/contract/index.ts index a5124c1..84e4e07 100644 --- a/src/api/contract/index.ts +++ b/src/api/contract/index.ts @@ -91,3 +91,11 @@ export const getDetailsList = (query: any): AxiosPromise => { params: query }); }; + +//获取版本详情 +export const getVersionDetails = (id: any): AxiosPromise => { + return request({ + url: '/tender/tenderPlanLimitList/getVersionDetail/' + id, + method: 'get' + }); +}; diff --git a/src/api/formalities/formalitiesAreConsolidated/index.ts b/src/api/formalities/formalitiesAreConsolidated/index.ts index 218187c..f6db0c1 100644 --- a/src/api/formalities/formalitiesAreConsolidated/index.ts +++ b/src/api/formalities/formalitiesAreConsolidated/index.ts @@ -5,6 +5,7 @@ import { FormalitiesAreConsolidatedForm, FormalitiesAreConsolidatedQuery } from '@/api/formalities/formalitiesAreConsolidated/types'; +import { ListOfFormalitiesQuery, ListOfFormalitiesVO } from '../listOfFormalities/types'; /** * 查询合规性手续合账列表 @@ -101,3 +102,17 @@ export const delFormalitiesAnnex = (id: string | number | Array method: 'delete' }); }; + +/** + * 查询手续办理清单模板属性列表 + * @param query + * @returns {*} + */ + +export const getTemplateTreeList = (query?: any): AxiosPromise => { + return request({ + url: '/formalities/formalitiesAreConsolidated/getTree', + method: 'get', + params: query + }); +}; diff --git a/src/api/largeScreen/index.ts b/src/api/largeScreen/index.ts index 1a0da4c..87acda0 100644 --- a/src/api/largeScreen/index.ts +++ b/src/api/largeScreen/index.ts @@ -15,7 +15,7 @@ export const totalAmount = () => { /** * 查询项目位置列表 * - */ export const projectGis = (clientid) => { + */ export const projectGis = (clientid?: any) => { return request({ url: '/money/big/screen/project/gis', method: 'get', @@ -57,7 +57,8 @@ export const totalAmount = () => { /** * 支出合同分析 * - */ export const expensesAnalyze = (clientid) => { + */ +export const expensesAnalyze = (clientid) => { return request({ url: '/money/big/screen/expenses/analyze', method: 'get', @@ -79,14 +80,14 @@ export const totalAmount = () => { export const monthMoney = () => { return request({ url: '/money/big/screen/monthMoney', - method: 'get', + method: 'get' }); }; // 现金流 export const monthCash = () => { return request({ url: '/money/big/screen/monthCash', - method: 'get', + method: 'get' }); }; // 现金流总和 @@ -94,6 +95,6 @@ export const monthCash = () => { export const cashTotal = () => { return request({ url: '/money/big/screen/cashTotal', - method: 'get', + method: 'get' }); }; diff --git a/src/api/materials/materialReceive/index.ts b/src/api/materials/materialReceive/index.ts index 0e9f582..376e804 100644 --- a/src/api/materials/materialReceive/index.ts +++ b/src/api/materials/materialReceive/index.ts @@ -61,3 +61,16 @@ export const delMaterialReceive = (id: string | number | Array) method: 'delete' }); }; +/** + * 获取合同列表数据 + * @param id + */ +export const getContractNameList = (id: string | number | Array) => { + return request({ + url: '/materials/materialReceive/ctrList', + params: { + projectId: id + }, + method: 'get' + }); +}; diff --git a/src/api/message/notice/index.ts b/src/api/message/notice/index.ts new file mode 100644 index 0000000..224934c --- /dev/null +++ b/src/api/message/notice/index.ts @@ -0,0 +1,63 @@ +import request from '@/utils/request'; +import { AxiosPromise } from 'axios'; +import { NoticeVO, NoticeForm, NoticeQuery } from '@/api/message/notice/types'; + +/** + * 查询消息列表 + * @param query + * @returns {*} + */ + +export const listNotice = (query?: NoticeQuery): AxiosPromise => { + return request({ + url: '/message/notice/list', + method: 'get', + params: query + }); +}; + +/** + * 查询消息详细 + * @param id + */ +export const getNotice = (id: string | number): AxiosPromise => { + return request({ + url: '/message/notice/' + id, + method: 'get' + }); +}; + +/** + * 新增消息 + * @param data + */ +export const addNotice = (data: NoticeForm) => { + return request({ + url: '/message/notice', + method: 'post', + data: data + }); +}; + +/** + * 修改消息 + * @param data + */ +export const updateNotice = (data: NoticeForm) => { + return request({ + url: '/message/notice', + method: 'put', + data: data + }); +}; + +/** + * 删除消息 + * @param id + */ +export const delNotice = (id: string | number | Array) => { + return request({ + url: '/message/notice/' + id, + method: 'delete' + }); +}; diff --git a/src/api/message/notice/types.ts b/src/api/message/notice/types.ts new file mode 100644 index 0000000..c38fdad --- /dev/null +++ b/src/api/message/notice/types.ts @@ -0,0 +1,156 @@ +export interface NoticeVO { + /** + * 主键ID + */ + id: string | number; + + /** + * 项目ID + */ + projectId: string | number; + + /** + * 接收通知的用户ID + */ + recipientId: string | number; + + /** + * 发送通知的用户ID(系统通知 0) + */ + senderId: string | number; + + /** + * 配置id + */ + configId: string | number; + + /** + * 详情id + */ + detailId: string | number; + + /** + * 通知内容 + */ + content: string; + + /** + * 查看状态(0未读 1已读) + */ + viewStatus: string; + + /** + * 查看时间 + */ + viewTime: string; + + /** + * 备注 + */ + remark: string; + +} + +export interface NoticeForm extends BaseEntity { + /** + * 主键ID + */ + id?: string | number; + + /** + * 项目ID + */ + projectId?: string | number; + + /** + * 接收通知的用户ID + */ + recipientId?: string | number; + + /** + * 发送通知的用户ID(系统通知 0) + */ + senderId?: string | number; + + /** + * 配置id + */ + configId?: string | number; + + /** + * 详情id + */ + detailId?: string | number; + + /** + * 通知内容 + */ + content?: string; + + /** + * 查看状态(0未读 1已读) + */ + viewStatus?: string; + + /** + * 查看时间 + */ + viewTime?: string; + + /** + * 备注 + */ + remark?: string; + +} + +export interface NoticeQuery extends PageQuery { + + /** + * 项目ID + */ + projectId?: string | number; + + /** + * 接收通知的用户ID + */ + recipientId?: string | number; + + /** + * 发送通知的用户ID(系统通知 0) + */ + senderId?: string | number; + + /** + * 配置id + */ + configId?: string | number; + + /** + * 详情id + */ + detailId?: string | number; + + /** + * 通知内容 + */ + content?: string; + + /** + * 查看状态(0未读 1已读) + */ + viewStatus?: string; + + /** + * 查看时间 + */ + viewTime?: string; + + /** + * 日期范围参数 + */ + params?: any; +} + + + diff --git a/src/api/progress/progressCategory/index.ts b/src/api/progress/progressCategory/index.ts index ed4bb07..1f593bb 100644 --- a/src/api/progress/progressCategory/index.ts +++ b/src/api/progress/progressCategory/index.ts @@ -8,11 +8,10 @@ import { ProgressCategoryVO, ProgressCategoryForm, ProgressCategoryQuery } from * @returns {*} */ -export const listProgressCategory = (query?: ProgressCategoryQuery): AxiosPromise => { +export const listProgressCategory = (id?: string | number): AxiosPromise => { return request({ - url: '/progress/progressCategory/list', - method: 'get', - params: query + url: '/progress/progressCategory/listByParent/' + id, + method: 'get' }); }; @@ -70,3 +69,30 @@ export const downloadProgressCategory = (data) => { data }); }; + +/** + * 查询分项工程单价下拉树结构 + * @param query + * @returns {*} + */ +export const getCategoryTabList = (id?: string | number): AxiosPromise => { + return request({ + url: '/progress/progressCategory/listTopBySubProjectId/' + id, + method: 'get' + }); +}; + +/** + * 查询分项工程单价外层结构 + * @param query + * @returns {*} + */ +export const getCategoryList = (id?: string | number): AxiosPromise => { + return request({ + url: '/progress/progressCategory/list', + method: 'get', + params: { + parentId: id + } + }); +}; diff --git a/src/api/progress/progressCategory/types.ts b/src/api/progress/progressCategory/types.ts index c24a173..07aaa4f 100644 --- a/src/api/progress/progressCategory/types.ts +++ b/src/api/progress/progressCategory/types.ts @@ -97,6 +97,8 @@ export interface ProgressCategoryForm extends BaseEntity { id?: string | number; constructionPrice?: string | number; ownerPrice?: string | number; + relevancyStructure?: string; + /** * 父类别id */ diff --git a/src/api/progress/progressCategoryTemplate/index.ts b/src/api/progress/progressCategoryTemplate/index.ts index 3e80694..86e86e1 100644 --- a/src/api/progress/progressCategoryTemplate/index.ts +++ b/src/api/progress/progressCategoryTemplate/index.ts @@ -1,6 +1,10 @@ import request from '@/utils/request'; import { AxiosPromise } from 'axios'; -import { ProgressCategoryTemplateVO, ProgressCategoryTemplateForm, ProgressCategoryTemplateQuery } from '@/api/progress/progressCategoryTemplate/types'; +import { + ProgressCategoryTemplateVO, + ProgressCategoryTemplateForm, + ProgressCategoryTemplateQuery +} from '@/api/progress/progressCategoryTemplate/types'; /** * 查询进度类别模版列表 @@ -61,3 +65,22 @@ export const delProgressCategoryTemplate = (id: string | number | Array { + return request({ + url: '/progress/progressCategoryTemplate/listSystemTop/' + id, + method: 'get' + }); +}; + +/** + * 筛选查询进度类别模版列表 + * @param parentId + * @returns {*} + */ +export const listProgressCategoryTemplateByParent = (parentId: string | number): AxiosPromise => { + return request({ + url: '/progress/progressCategoryTemplate/listByParent/' + parentId, + method: 'get' + }); +}; diff --git a/src/api/progress/progressCategoryTemplate/types.ts b/src/api/progress/progressCategoryTemplate/types.ts index 66ee461..1d6a507 100644 --- a/src/api/progress/progressCategoryTemplate/types.ts +++ b/src/api/progress/progressCategoryTemplate/types.ts @@ -12,7 +12,7 @@ export interface ProgressCategoryTemplateVO { * 计量方式(0无 1数量 2百分比) */ unitType: string; - + parentId?: string | number; /** * 工作类型 */ @@ -39,7 +39,9 @@ export interface ProgressCategoryTemplateForm extends BaseEntity { * 主键id */ id?: string | number; - + parentId?: string | number; + constructionType?: string; + relevancyStructure?: string; /** * 父类别id */ @@ -76,7 +78,8 @@ export interface ProgressCategoryTemplateQuery { * 父类别id */ pid?: string | number; - + parentId?: string | number; + constructionType?: string; /** * 类别名称 */ diff --git a/src/api/system/landTransfer/enterRoad/index.ts b/src/api/system/landTransfer/enterRoad/index.ts index c3e093c..a575127 100644 --- a/src/api/system/landTransfer/enterRoad/index.ts +++ b/src/api/system/landTransfer/enterRoad/index.ts @@ -61,3 +61,12 @@ export const delEnterRoad = (id: string | number | Array) => { method: 'delete' }); }; + +// 道路信息导入 +export const importEnterRoad = (projectId: any, data: any) => { + return request({ + url: '/land/enterRoad/upload/' + projectId, + method: 'post', + data: data + }); +}; \ No newline at end of file diff --git a/src/api/system/landTransfer/landBlock/index.ts b/src/api/system/landTransfer/landBlock/index.ts index d543334..06e3aad 100644 --- a/src/api/system/landTransfer/landBlock/index.ts +++ b/src/api/system/landTransfer/landBlock/index.ts @@ -76,3 +76,12 @@ export const delLandBlock = (id: string | number | Array) => { method: 'delete' }); }; + +// 地块信息导入 +export const importLandBlock = (projectId:any,data: any) => { + return request({ + url: '/land/landBlock/upload/'+projectId, + method: 'post', + data: data + }); +}; diff --git a/src/api/system/landTransfer/landTransferLedger/index.ts b/src/api/system/landTransfer/landTransferLedger/index.ts index 2fdefb9..fbd949e 100644 --- a/src/api/system/landTransfer/landTransferLedger/index.ts +++ b/src/api/system/landTransfer/landTransferLedger/index.ts @@ -69,3 +69,13 @@ export const delLandTransferLedger = (id: string | number | Array) => { + return request({ + url: '/land/landTransferLedger/count/' + id, + method: 'get' + }); +}; diff --git a/src/api/tender/index.ts b/src/api/tender/index.ts index 10a75dd..5b45d9a 100644 --- a/src/api/tender/index.ts +++ b/src/api/tender/index.ts @@ -122,11 +122,10 @@ export const editStatus = (query: any): AxiosPromise => { data: query }); }; -//获取审核状态 -export const getApproval = (id) => { +//获取版本详情 +export const getVersionDetail = (id: any) => { return request({ - url: '/tender/tenderPlanLimitList/getVersionDetail', - method: 'get', - params: { versions: id } + url: '/tender/tenderPlanLimitList/getVersionDetail/' + id, + method: 'get' }); }; diff --git a/src/components/FileUpload/index.vue b/src/components/FileUpload/index.vue index 5011b9d..265c016 100644 --- a/src/components/FileUpload/index.vue +++ b/src/components/FileUpload/index.vue @@ -11,6 +11,7 @@ :on-exceed="handleExceed" :on-success="handleUploadSuccess" :show-file-list="showFileList" + :on-preview="handlePreview" :headers="headers" class="upload-file-uploader" :list-type="isConstruction ? 'picture-card' : 'text'" @@ -48,7 +49,13 @@ tag="ul" @click.stop > -
  • +
  • {{ getFileName(file.name) }} @@ -213,31 +220,27 @@ watch( ); // 上传前校检格式和大小 const handleBeforeUpload = (file: any) => { - // 校检文件类型 - if (props.fileType.length) { - const fileName = file.name.split('.'); - const fileExt = fileName[fileName.length - 1]; - const isTypeOk = props.fileType.indexOf(fileExt) >= 0; - if (!isTypeOk) { - proxy?.$modal.msgError(`文件格式不正确, 请上传${props.fileType.join('/')}格式文件!`); - return false; - } + if (!validateFile(file)) return false; + proxy?.$modal.loading('正在上传文件,请稍候...'); + number.value++; + return true; +}; + +//校检格式和大小 +const validateFile = (file: File) => { + const ext = file.name.split('.').pop()?.toLowerCase(); + if (props.fileType.length && !props.fileType.includes(ext!)) { + proxy?.$modal.msgError(`文件格式不正确,请上传 ${props.fileType.join('/')} 格式文件!`); + return false; } - // 校检文件名是否包含特殊字符 if (file.name.includes(',')) { proxy?.$modal.msgError('文件名不正确,不能包含英文逗号!'); return false; } - // 校检文件大小 - if (props.fileSize) { - const isLt = file.size / 1024 / 1024 < props.fileSize; - if (!isLt) { - proxy?.$modal.msgError(`上传文件大小不能超过 ${props.fileSize} MB!`); - return false; - } + if (props.fileSize && file.size / 1024 / 1024 > props.fileSize) { + proxy?.$modal.msgError(`上传文件大小不能超过 ${props.fileSize} MB!`); + return false; } - proxy?.$modal.loading('正在上传文件,请稍候...'); - number.value++; return true; }; @@ -278,13 +281,25 @@ const handleUploadSuccess = (res: any, file: UploadFileWithOssId) => { uploadedSuccessfully(res); }; -const handleChange = (file: any, fileList: any) => { +const handleChange = (file: any, filelist: any) => { + if (!props.autoUpload) { + // 手动上传模式:在选中文件时拦截非法文件 + const isValid = validateFile(file.raw || file); + if (!isValid) { + fileUploadRef.value?.handleRemove(file); // 直接移除非法文件 + console.log(file, filelist, fileList.value); + fileList.value = [...fileList.value]; // 触发列表更新 + return; + } + } // 记录 status = 'ready' 的文件 if (file.status === 'ready') { pendingFiles.value.push(file); + fileList.value = pendingFiles.value; } + console.log(fileList.value); - emit('handleChange', file, fileList); + emit('handleChange', file, filelist); }; // 删除文件 @@ -294,6 +309,12 @@ const handleRemove = (file: any, fileList: any) => { emit('handleRemove', file, fileList); }; +const handlePreview = (file: any) => { + if (file.url) { + window.open(file.url); + } +}; + // 删除文件 const handleDelete = async (index: string | number, type?: string) => { await proxy?.$modal.confirm('是否确认删除此文件?').finally(); @@ -332,11 +353,6 @@ const uploadedSuccessfully = (res: any) => { emit('update:modelValue', listToString(fileList.value)); proxy?.$modal.closeLoading(); } - // if (props.autoUpload && props.limit === fileList.value.length) { - // fileUploadRef.value?.clearFiles(); - // fileList.value = []; - // emit('update:modelValue', ''); // 同步到外部 v-model - // } props.onUploadSuccess?.(fileList.value, res); }; @@ -400,6 +416,11 @@ const submitUpload = async () => { if (!pendingFiles.value.length) { return 'noFile'; } + const validFiles = pendingFiles.value.filter((f: any) => validateFile(f.raw || f)); + if (!validFiles.length) { + proxy?.$modal.msgError('没有符合条件的文件可上传'); + return; + } try { proxy?.$modal.loading('正在上传文件,请稍候...'); const formData = new FormData(); diff --git a/src/layout/components/notice/index.vue b/src/layout/components/notice/index.vue index 78ca0c8..3d6afc9 100644 --- a/src/layout/components/notice/index.vue +++ b/src/layout/components/notice/index.vue @@ -51,11 +51,12 @@ const getTableData = async () => { //点击消息,写入已读 const onNewsClick = (item: any) => { newsList.value[item].read = true; + console.log('🚀 ~ onNewsClick ~ newsList.value[item]:', newsList.value[item]); //并且写入pinia noticeStore.state.value.notices = newsList.value; //如果有formPath,就前往 if (newsList.value[item].route) { - proxy?.$tab.openPage('/' + newsList.value[item].route, '', { id: newsList.value[item].detailId, type: 'view' }); + proxy?.$tab.openPage(newsList.value[item].route, '', { id: newsList.value[item].detailId, type: 'view' }); } }; diff --git a/src/utils/sse.ts b/src/utils/sse.ts index 464727c..04103f7 100644 --- a/src/utils/sse.ts +++ b/src/utils/sse.ts @@ -25,15 +25,16 @@ export const initSSE = (url: any) => { }); watch(data, () => { + console.log('🚀 ~ initSSE ~ data:', JSON.parse(data.value)); let label = ''; let route1 = ''; let detailId = ''; try { if (JSON.parse(data.value)) { const obj = JSON.parse(data.value); - route1 = obj.route; - label = obj.message; - detailId = obj.detailId; + route1 = obj.type; + label = obj.content; + // detailId = obj.detailId; data.value = null; } } catch (error) { diff --git a/src/views/biddingManagemen/appointment/index.vue b/src/views/biddingManagemen/appointment/index.vue index ce519ad..c71349c 100644 --- a/src/views/biddingManagemen/appointment/index.vue +++ b/src/views/biddingManagemen/appointment/index.vue @@ -10,12 +10,11 @@ @click="isDisabled = false" class="px-8 py-2.5 transition-all duration-300 font-medium" v-if="isDisabled" - v-hasPermi="['cailiaoshebei:purchaseUser:addOrUpdate']" + v-hasPermi="['bidding:biddingUser:add']" > 点击编辑 - @@ -30,7 +29,6 @@ -
    确认提交 @@ -53,22 +51,14 @@ diff --git a/src/views/biddingManagemen/listOfWinningBids/index.vue b/src/views/biddingManagemen/listOfWinningBids/index.vue index 02a45c0..47210c6 100644 --- a/src/views/biddingManagemen/listOfWinningBids/index.vue +++ b/src/views/biddingManagemen/listOfWinningBids/index.vue @@ -1,8 +1,7 @@ - + diff --git a/src/views/materials/usageMaterials/purchase/index.vue b/src/views/materials/usageMaterials/purchase/index.vue index 84d24cb..e2778d1 100644 --- a/src/views/materials/usageMaterials/purchase/index.vue +++ b/src/views/materials/usageMaterials/purchase/index.vue @@ -1,22 +1,36 @@ - + - +
    - + @@ -105,8 +145,12 @@ - + @@ -119,8 +163,7 @@ - + diff --git a/src/views/message/notice/index.vue b/src/views/message/notice/index.vue new file mode 100644 index 0000000..6763a33 --- /dev/null +++ b/src/views/message/notice/index.vue @@ -0,0 +1,256 @@ + + + diff --git a/src/views/out/constructionValue/index.vue b/src/views/out/constructionValue/index.vue index 82af6af..0887fb5 100644 --- a/src/views/out/constructionValue/index.vue +++ b/src/views/out/constructionValue/index.vue @@ -1,120 +1,124 @@ - diff --git a/src/views/out/purchase/index.vue b/src/views/out/purchase/index.vue index eba6578..d2daee5 100644 --- a/src/views/out/purchase/index.vue +++ b/src/views/out/purchase/index.vue @@ -23,7 +23,6 @@ const handleClick = (val) => { purchPageRef1.value.getList(val.props.name); //子组件方法 } else { purchPageRef2.value.getList(val.props.name); //子组件方法 - } }; onMounted(() => { diff --git a/src/views/out/settlementValueOwner/index.vue b/src/views/out/settlementValueOwner/index.vue index 33afbfb..abcb961 100644 --- a/src/views/out/settlementValueOwner/index.vue +++ b/src/views/out/settlementValueOwner/index.vue @@ -27,17 +27,12 @@ 新增 - - 删除 - - + @@ -58,18 +53,12 @@ diff --git a/src/views/out/settlementValueSubcontract/index.vue b/src/views/out/settlementValueSubcontract/index.vue index d25c1fd..99480d8 100644 --- a/src/views/out/settlementValueSubcontract/index.vue +++ b/src/views/out/settlementValueSubcontract/index.vue @@ -28,23 +28,12 @@ 新增 - - 删除 - - + @@ -65,24 +54,12 @@ diff --git a/src/views/patch/index.vue b/src/views/patch/index.vue index 1aaa708..a4b9ad7 100644 --- a/src/views/patch/index.vue +++ b/src/views/patch/index.vue @@ -1,8 +1,7 @@