0911
git commit -m 0911
This commit is contained in:
		| @ -8,9 +8,9 @@ VITE_APP_ENV = 'development' | |||||||
|  |  | ||||||
| # VITE_APP_BASE_API = 'http://192.168.110.209:8899' | # VITE_APP_BASE_API = 'http://192.168.110.209:8899' | ||||||
| # 李陈杰 209 | # 李陈杰 209 | ||||||
| # VITE_APP_BASE_API = 'http://192.168.110.209:8899' | VITE_APP_BASE_API = 'http://192.168.110.149:8899' | ||||||
| # 曾涛 | # 曾涛 | ||||||
|   VITE_APP_BASE_API = 'http://192.168.110.210:8899' | # VITE_APP_BASE_API = 'http://192.168.110.149:8899' | ||||||
| # 罗成 | # 罗成 | ||||||
| # VITE_APP_BASE_API = 'http://192.168.110.188:8899' | # VITE_APP_BASE_API = 'http://192.168.110.188:8899' | ||||||
| # 朱银 | # 朱银 | ||||||
| @ -18,8 +18,10 @@ VITE_APP_ENV = 'development' | |||||||
| #曾涛 | #曾涛 | ||||||
| # VITE_APP_BASE_API = 'http://192.168.110.171:8899' | # VITE_APP_BASE_API = 'http://192.168.110.171:8899' | ||||||
|  |  | ||||||
| # 无人机接口地址 | # ws | ||||||
|  | VITE_APP_BASE_WS_API = 'ws://192.168.110.149:8899/resource/websocket' | ||||||
|  |  | ||||||
|  | # 无人机接口地址 | ||||||
| VITE_APP_BASE_DRONE_API = 'http://58.17.134.85:9512' | VITE_APP_BASE_DRONE_API = 'http://58.17.134.85:9512' | ||||||
|  |  | ||||||
| # 应用访问路径 例如使用前缀 /admin/ | # 应用访问路径 例如使用前缀 /admin/ | ||||||
|  | |||||||
| @ -1 +1,2 @@ | |||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -34,7 +34,7 @@ | |||||||
|     "date-fns": "^4.1.0", |     "date-fns": "^4.1.0", | ||||||
|     "diagram-js": "12.3.0", |     "diagram-js": "12.3.0", | ||||||
|     "didi": "9.0.2", |     "didi": "9.0.2", | ||||||
|     "echarts": "5.5.0", |     "echarts": "^5.5.0", | ||||||
|     "echarts-gl": "^2.0.9", |     "echarts-gl": "^2.0.9", | ||||||
|     "element-plus": "2.8.8", |     "element-plus": "2.8.8", | ||||||
|     "esbuild": "^0.25.0", |     "esbuild": "^0.25.0", | ||||||
|  | |||||||
| @ -106,6 +106,6 @@ export const getFootNote = (data) => { | |||||||
|   return request({ |   return request({ | ||||||
|     url: 'gps/equipmentSon/getList', |     url: 'gps/equipmentSon/getList', | ||||||
|     method: 'get', |     method: 'get', | ||||||
|     data: data |     params: data | ||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -122,6 +122,11 @@ export interface EquipmentQuery extends PageQuery { | |||||||
|    */ |    */ | ||||||
|   type?: string | number; |   type?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 展示用户/设备数据:1=用户数据,0=设备数据 | ||||||
|  |    */ | ||||||
|  |   gpsType?: string | number; | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * 用户id |    * 用户id | ||||||
|    */ |    */ | ||||||
|  | |||||||
| @ -53,7 +53,6 @@ export interface MaterialReceiveVO { | |||||||
|    * 备注 |    * 备注 | ||||||
|    */ |    */ | ||||||
|   remark: string; |   remark: string; | ||||||
|  |  | ||||||
| } | } | ||||||
|  |  | ||||||
| export interface MaterialReceiveForm extends BaseEntity { | export interface MaterialReceiveForm extends BaseEntity { | ||||||
| @ -156,11 +155,13 @@ export interface MaterialReceiveForm extends BaseEntity { | |||||||
|    * 备注 |    * 备注 | ||||||
|    */ |    */ | ||||||
|   remark?: string; |   remark?: string; | ||||||
|  |   /** | ||||||
|  |    * 附件 | ||||||
|  |    */ | ||||||
|  |   attachmentId?: string | number; | ||||||
| } | } | ||||||
|  |  | ||||||
| export interface MaterialReceiveQuery extends PageQuery { | export interface MaterialReceiveQuery extends PageQuery { | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * 项目id |    * 项目id | ||||||
|    */ |    */ | ||||||
| @ -206,6 +207,3 @@ export interface MaterialReceiveQuery extends PageQuery { | |||||||
|    */ |    */ | ||||||
|   params?: any; |   params?: any; | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -31,6 +31,7 @@ export interface FlowTaskVO { | |||||||
|   version?: string; |   version?: string; | ||||||
|   applyNode?: boolean; |   applyNode?: boolean; | ||||||
|   buttonList?: buttonList[]; |   buttonList?: buttonList[]; | ||||||
|  |   projectName?: string; | ||||||
| } | } | ||||||
|  |  | ||||||
| export interface buttonList { | export interface buttonList { | ||||||
|  | |||||||
| @ -12,7 +12,8 @@ export default { | |||||||
|         businessId: routerJumpVo.businessId, |         businessId: routerJumpVo.businessId, | ||||||
|         type: routerJumpVo.type, |         type: routerJumpVo.type, | ||||||
|         planMonth: routerJumpVo.planMonth, |         planMonth: routerJumpVo.planMonth, | ||||||
|         taskId: routerJumpVo.taskId |         taskId: routerJumpVo.taskId, | ||||||
|  |         projectName: routerJumpVo.projectName | ||||||
|       } |       } | ||||||
|     }); |     }); | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -4,6 +4,7 @@ export interface RouterJumpVo { | |||||||
|   type: string; |   type: string; | ||||||
|   formCustom: string; |   formCustom: string; | ||||||
|   formPath: string; |   formPath: string; | ||||||
|  |   projectName?: string; | ||||||
| } | } | ||||||
|  |  | ||||||
| export interface StartProcessBo { | export interface StartProcessBo { | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| <template> | <template> | ||||||
|  |   <div> | ||||||
|     <div style="display: flex; justify-content: space-between"> |     <div style="display: flex; justify-content: space-between"> | ||||||
|       <div> |       <div> | ||||||
|         <el-button v-if="submitButtonShow" :loading="props.buttonLoading" type="info" @click="submitForm('draft')">暂存</el-button> |         <el-button v-if="submitButtonShow" :loading="props.buttonLoading" type="info" @click="submitForm('draft')">暂存</el-button> | ||||||
| @ -11,6 +12,8 @@ | |||||||
|         <el-button style="float: right" @click="goBack()">返回</el-button> |         <el-button style="float: right" @click="goBack()">返回</el-button> | ||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|  |     <h3 v-if="props.projectName" class="text-lg font-semibold text-gray-800">项目名称:{{ props.projectName }}</h3> | ||||||
|  |   </div> | ||||||
| </template> | </template> | ||||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||||
| import { propTypes } from '@/utils/propTypes'; | import { propTypes } from '@/utils/propTypes'; | ||||||
| @ -22,7 +25,8 @@ const props = defineProps({ | |||||||
|   status: propTypes.string.def(''), |   status: propTypes.string.def(''), | ||||||
|   pageType: propTypes.string.def(''), |   pageType: propTypes.string.def(''), | ||||||
|   buttonLoading: propTypes.bool.def(false), |   buttonLoading: propTypes.bool.def(false), | ||||||
|   id: propTypes.string.def('') || propTypes.number.def() |   id: propTypes.string.def('') || propTypes.number.def(), | ||||||
|  |   projectName: propTypes.string.def('') | ||||||
| }); | }); | ||||||
| const emits = defineEmits(['submitForm', 'approvalVerifyOpen', 'handleApprovalRecord']); | const emits = defineEmits(['submitForm', 'approvalVerifyOpen', 'handleApprovalRecord']); | ||||||
| //暂存,提交 | //暂存,提交 | ||||||
|  | |||||||
| @ -167,7 +167,7 @@ const reset = () => { | |||||||
|   form.value = { ...initFormData }; |   form.value = { ...initFormData }; | ||||||
|   leaveFormRef.value?.resetFields(); |   leaveFormRef.value?.resetFields(); | ||||||
| }; | }; | ||||||
|  | const projectId = ref(''); | ||||||
| /** 获取详情 */ | /** 获取详情 */ | ||||||
| const getInfo = () => { | const getInfo = () => { | ||||||
|   loading.value = true; |   loading.value = true; | ||||||
| @ -175,6 +175,7 @@ const getInfo = () => { | |||||||
|   nextTick(async () => { |   nextTick(async () => { | ||||||
|     const res = await getVersionDetail(routeParams.value.id); |     const res = await getVersionDetail(routeParams.value.id); | ||||||
|     console.log(res); |     console.log(res); | ||||||
|  |     projectId.value = res.data.projectId; | ||||||
|     Object.assign(form.value, res.data); |     Object.assign(form.value, res.data); | ||||||
|     loading.value = false; |     loading.value = false; | ||||||
|     buttonLoading.value = false; |     buttonLoading.value = false; | ||||||
| @ -186,7 +187,7 @@ const sheets = ref([]); | |||||||
| const getSheetName = async () => { | const getSheetName = async () => { | ||||||
|   try { |   try { | ||||||
|     const params = { |     const params = { | ||||||
|       projectId: currentProject.value?.id, |       projectId: projectId.value, | ||||||
|       versions: form.value.versions |       versions: form.value.versions | ||||||
|     }; |     }; | ||||||
|     const res = await sheetList(params); |     const res = await sheetList(params); | ||||||
| @ -208,7 +209,7 @@ const tableData = ref([]); | |||||||
| //获取列表 | //获取列表 | ||||||
| const getListTable = async () => { | const getListTable = async () => { | ||||||
|   const res = await getTreeLimit({ |   const res = await getTreeLimit({ | ||||||
|     projectId: currentProject.value?.id, |     projectId: projectId.value, | ||||||
|     versions: form.value.versions, |     versions: form.value.versions, | ||||||
|     sheet: form.value.sheet, |     sheet: form.value.sheet, | ||||||
|     type: '0' |     type: '0' | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ | |||||||
|         <el-form :model="queryForm" :inline="true"> |         <el-form :model="queryForm" :inline="true"> | ||||||
|           <el-form-item label="版本号" prop="versions"> |           <el-form-item label="版本号" prop="versions"> | ||||||
|             <el-select v-model="queryForm.versions" placeholder="选择版本号" @change="changeVersions"> |             <el-select v-model="queryForm.versions" placeholder="选择版本号" @change="changeVersions"> | ||||||
|               <el-option v-for="item in options" :key="item.versions" :label="item.versions" :value="item.versions" /> |               <el-option v-for="item in options" :key="item.versions" :label="item.versionsName" :value="item.versions" /> | ||||||
|             </el-select> |             </el-select> | ||||||
|           </el-form-item> |           </el-form-item> | ||||||
|           <el-form-item label="表名" prop="sheet"> |           <el-form-item label="表名" prop="sheet"> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.versions" |           :id="form.versions" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
| @ -162,7 +163,7 @@ const reset = () => { | |||||||
|   form.value = { ...initFormData }; |   form.value = { ...initFormData }; | ||||||
|   leaveFormRef.value?.resetFields(); |   leaveFormRef.value?.resetFields(); | ||||||
| }; | }; | ||||||
|  | const projectId = ref(''); | ||||||
| /** 获取详情 */ | /** 获取详情 */ | ||||||
| const getInfo = () => { | const getInfo = () => { | ||||||
|   loading.value = true; |   loading.value = true; | ||||||
| @ -170,6 +171,7 @@ const getInfo = () => { | |||||||
|   nextTick(async () => { |   nextTick(async () => { | ||||||
|     const res = await getVersionDetails(routeParams.value.id); |     const res = await getVersionDetails(routeParams.value.id); | ||||||
|     console.log(res); |     console.log(res); | ||||||
|  |     projectId.value = res.data.projectId; | ||||||
|     Object.assign(form.value, res.data); |     Object.assign(form.value, res.data); | ||||||
|     loading.value = false; |     loading.value = false; | ||||||
|     buttonLoading.value = false; |     buttonLoading.value = false; | ||||||
| @ -181,7 +183,7 @@ const sheets = ref([]); | |||||||
| const getSheetName = async () => { | const getSheetName = async () => { | ||||||
|   try { |   try { | ||||||
|     const params = { |     const params = { | ||||||
|       projectId: currentProject.value?.id, |       projectId: projectId.value, | ||||||
|       versions: form.value.versions |       versions: form.value.versions | ||||||
|     }; |     }; | ||||||
|     const res = await sheetList(params); |     const res = await sheetList(params); | ||||||
| @ -201,7 +203,7 @@ const changeSheet = () => { | |||||||
| //获取列表 | //获取列表 | ||||||
| const getListTable = async () => { | const getListTable = async () => { | ||||||
|   const res = await listBillofquantitiesLimitList({ |   const res = await listBillofquantitiesLimitList({ | ||||||
|     projectId: currentProject.value?.id, |     projectId: projectId.value, | ||||||
|     versions: form.value.versions, |     versions: form.value.versions, | ||||||
|     sheet: form.value.sheet |     sheet: form.value.sheet | ||||||
|   }); |   }); | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|  |  | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|  |  | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ | |||||||
|           <el-form :model="state.queryForm" :inline="true"> |           <el-form :model="state.queryForm" :inline="true"> | ||||||
|             <el-form-item label="版本号" prop="versions"> |             <el-form-item label="版本号" prop="versions"> | ||||||
|               <el-select v-model="state.queryForm.versions" placeholder="选择版本号" @change="handleChangeVersion"> |               <el-select v-model="state.queryForm.versions" placeholder="选择版本号" @change="handleChangeVersion"> | ||||||
|                 <el-option v-for="item in state.options" :key="item.versions" :label="item.versions" :value="item.versions" /> |                 <el-option v-for="item in state.options" :key="item.versions" :label="item.versionsName" :value="item.versions" /> | ||||||
|               </el-select> |               </el-select> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <el-form-item label="表名" prop="sheet"> |             <el-form-item label="表名" prop="sheet"> | ||||||
| @ -48,7 +48,7 @@ | |||||||
|           <el-form :model="state.queryForm" :inline="true"> |           <el-form :model="state.queryForm" :inline="true"> | ||||||
|             <el-form-item label="版本号" prop="versions"> |             <el-form-item label="版本号" prop="versions"> | ||||||
|               <el-select v-model="state.queryForm.versions" placeholder="选择版本号" @change="handleChangeVersion"> |               <el-select v-model="state.queryForm.versions" placeholder="选择版本号" @change="handleChangeVersion"> | ||||||
|                 <el-option v-for="item in state.options" :key="item.versions" :label="item.versions" :value="item.versions" /> |                 <el-option v-for="item in state.options" :key="item.versions" :label="item.versionsName" :value="item.versions" /> | ||||||
|               </el-select> |               </el-select> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|             <el-form-item> |             <el-form-item> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.versions" |           :id="form.versions" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.versions" |           :id="form.versions" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.versions" |           :id="form.versions" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.versions" |           :id="form.versions" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.design" |           :id="form.design" | ||||||
|           :status="form.auditStatus" |           :status="form.auditStatus" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|  |  | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|  |  | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|  |  | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.auditStatus" |           :status="form.auditStatus" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.auditStatus" |           :status="form.auditStatus" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -4,7 +4,7 @@ | |||||||
|       <div ref="mapRef" class="map-container" style="width: 100%; height: 100%" /> |       <div ref="mapRef" class="map-container" style="width: 100%; height: 100%" /> | ||||||
|     </div> |     </div> | ||||||
|     <div class="centerPage_bottom"> |     <div class="centerPage_bottom"> | ||||||
|       <Title title="风险预警"> |       <Title title="风险预警" style="font-size: 22px"> | ||||||
|         <img src="@/assets/projectLarge/robot.svg" alt="" height="20px" width="20px" /> |         <img src="@/assets/projectLarge/robot.svg" alt="" height="20px" width="20px" /> | ||||||
|       </Title> |       </Title> | ||||||
|       <div class="centerPage_bottom_table"> |       <div class="centerPage_bottom_table"> | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| <template> | <template> | ||||||
|   <div class="leftPage"> |   <div class="leftPage"> | ||||||
|     <div class="topPage"> |     <div class="topPage"> | ||||||
|       <Title title="项目进度分析" /> |       <Title title="项目进度分析" style="font-size: 22px" /> | ||||||
|       <div class="progress"> |       <div class="progress"> | ||||||
|         <div class="progress_item"> |         <div class="progress_item"> | ||||||
|           <div class="progress_imgBox"> |           <div class="progress_imgBox"> | ||||||
| @ -53,7 +53,7 @@ | |||||||
|       </div> |       </div> | ||||||
|     </div> |     </div> | ||||||
|     <div class="output"> |     <div class="output"> | ||||||
|       <Title title="实际产值与预期产值对比" /> |       <Title title="实际产值与预期产值对比" style="font-size: 22px" /> | ||||||
|       <div class="chart_container"> |       <div class="chart_container"> | ||||||
|         <div ref="lineChartRef" class="echart" /> |         <div ref="lineChartRef" class="echart" /> | ||||||
|       </div> |       </div> | ||||||
|  | |||||||
| @ -71,15 +71,17 @@ let data = [ | |||||||
| const getTrajectoryData = async () => { | const getTrajectoryData = async () => { | ||||||
|   try { |   try { | ||||||
|     // 从URL参数中获取clientId、projectId和userId |     // 从URL参数中获取clientId、projectId和userId | ||||||
|     const { clientId, projectId, userId } = route.query; |     const { clientId, projectId, userId, gpsType } = route.query; | ||||||
|  |  | ||||||
|     if (!clientId || !projectId || !userId) { |     if (!projectId || !userId || !gpsType) { | ||||||
|       ElMessage.warning('缺少必要参数,请检查传入的参数'); |       ElMessage.warning('缺少必要参数,请检查传入的参数'); | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     loading.value = true; |     loading.value = true; | ||||||
|     const res = await getFootNote({ clientId, projectId, userId }); |     // 确保gpsType转换为数字类型,以便正确传递给后端 | ||||||
|  |     const gpsTypeNum = parseInt(gpsType, 10); | ||||||
|  |     const res = await getFootNote({ clientId, projectId, userId, gpsType: gpsTypeNum }); | ||||||
|  |  | ||||||
|     if (res && res.code === 200 && res.data && res.data.length > 0) { |     if (res && res.code === 200 && res.data && res.data.length > 0) { | ||||||
|       data = res.data; |       data = res.data; | ||||||
|  | |||||||
| @ -22,7 +22,7 @@ | |||||||
|  |  | ||||||
|     <el-card shadow="never"> |     <el-card shadow="never"> | ||||||
|       <template #header> |       <template #header> | ||||||
|         <el-row :gutter="10" class="mb8"> |         <el-row :gutter="20" class="mb8"> | ||||||
|           <el-col :span="1.5"> |           <el-col :span="1.5"> | ||||||
|             <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['gps:equipment:edit']" |             <el-button type="success" plain icon="Edit" :disabled="single" @click="handleUpdate()" v-hasPermi="['gps:equipment:edit']" | ||||||
|               >修改</el-button |               >修改</el-button | ||||||
| @ -39,7 +39,12 @@ | |||||||
|             > |             > | ||||||
|           </el-col> |           </el-col> | ||||||
|           <el-col :span="2"> |           <el-col :span="2"> | ||||||
|             <el-button type="primary" plain @click="handleViewAll">{{ viewAllButtonText }}</el-button> |             <el-button type="primary" plain @click="toggleGpsType"> | ||||||
|  |               {{ currentGpsType === 0 ? '显示用户数据' : '显示设备数据' }} | ||||||
|  |             </el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <el-col :span="2"> | ||||||
|  |             <el-button type="primary" v-if="queryParams.gpsType !== 1" plain @click="handleViewAll">{{ viewAllButtonText }}</el-button> | ||||||
|           </el-col> |           </el-col> | ||||||
|  |  | ||||||
|           <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> |           <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> | ||||||
| @ -102,7 +107,7 @@ | |||||||
|                 type="primary" |                 type="primary" | ||||||
|                 icon="Location" |                 icon="Location" | ||||||
|                 v-hasPermi="['gps:equipmentSon:getList']" |                 v-hasPermi="['gps:equipmentSon:getList']" | ||||||
|                 @click="handleGoToEmptyPage(scope.row.userId, scope.row.projectId, scope.row.clientId)" |                 @click="handleGoToEmptyPage(scope.row.userId, scope.row.projectId, scope.row.clientId, scope.row.gpsType)" | ||||||
|                 :disabled="!scope.row.userId || !scope.row.projectId" |                 :disabled="!scope.row.userId || !scope.row.projectId" | ||||||
|               ></el-button> |               ></el-button> | ||||||
|             </el-tooltip> |             </el-tooltip> | ||||||
| @ -189,7 +194,7 @@ | |||||||
|                   type="primary" |                   type="primary" | ||||||
|                   icon="Location" |                   icon="Location" | ||||||
|                   v-hasPermi="['gps:equipmentSon:getList']" |                   v-hasPermi="['gps:equipmentSon:getList']" | ||||||
|                   @click="handleGoToEmptyPage(scope.row.userId, scope.row.projectId, currentHistoryClientId)" |                   @click="handleGoToEmptyPage(scope.row.userId, scope.row.projectId, currentHistoryClientId, currentGpsType)" | ||||||
|                 ></el-button> |                 ></el-button> | ||||||
|               </el-tooltip> |               </el-tooltip> | ||||||
|             </template> |             </template> | ||||||
| @ -301,6 +306,9 @@ const initFormData: EquipmentForm = { | |||||||
|   remark: undefined |   remark: undefined | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | // 当前GPS类型 (0:设备数据, 1:用户数据) | ||||||
|  | const currentGpsType = ref(0); | ||||||
|  |  | ||||||
| // 页面数据 | // 页面数据 | ||||||
| const data = reactive<PageData<EquipmentForm, EquipmentQuery>>({ | const data = reactive<PageData<EquipmentForm, EquipmentQuery>>({ | ||||||
|   form: { ...initFormData }, |   form: { ...initFormData }, | ||||||
| @ -317,6 +325,7 @@ const data = reactive<PageData<EquipmentForm, EquipmentQuery>>({ | |||||||
|     creationTime: undefined, |     creationTime: undefined, | ||||||
|     lastAccessedTime: undefined, |     lastAccessedTime: undefined, | ||||||
|     registered: undefined, |     registered: undefined, | ||||||
|  |     gpsType: 0, // 默认显示设备数据 | ||||||
|     params: {} |     params: {} | ||||||
|   }, |   }, | ||||||
|   rules: { |   rules: { | ||||||
| @ -385,6 +394,15 @@ const formatDateTime = (timestamp: any): string => { | |||||||
|   return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; |   return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | /** 切换GPS数据类型 */ | ||||||
|  | const toggleGpsType = () => { | ||||||
|  |   currentGpsType.value = currentGpsType.value === 0 ? 1 : 0; | ||||||
|  |   queryParams.value.gpsType = currentGpsType.value; | ||||||
|  |   queryParams.value.pageNum = 1; | ||||||
|  |   getList(); | ||||||
|  |   proxy?.$modal.msgSuccess(`已切换到${currentGpsType.value === 0 ? '设备数据' : '用户数据'}模式`); | ||||||
|  | }; | ||||||
|  |  | ||||||
| /** 获取设备列表 */ | /** 获取设备列表 */ | ||||||
| const getList = async () => { | const getList = async () => { | ||||||
|   loading.value = true; |   loading.value = true; | ||||||
| @ -397,6 +415,9 @@ const getList = async () => { | |||||||
|       queryParams.value.projectId = undefined; |       queryParams.value.projectId = undefined; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     // 确保gpsType参数正确设置 | ||||||
|  |     queryParams.value.gpsType = currentGpsType.value; | ||||||
|  |  | ||||||
|     const res = await listEquipment(queryParams.value); |     const res = await listEquipment(queryParams.value); | ||||||
|     equipmentList.value = res.rows as ExtendedEquipmentVO[]; |     equipmentList.value = res.rows as ExtendedEquipmentVO[]; | ||||||
|     total.value = res.total; |     total.value = res.total; | ||||||
| @ -490,16 +511,24 @@ const handleViewAll = () => { | |||||||
|   getList(); |   getList(); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| const handleGoToEmptyPage = (userId: any, projectId: any, clientId: any) => { | const handleGoToEmptyPage = (userId: any, projectId: any, clientId: any, gpsType: number) => { | ||||||
|   console.log('userId:', userId, 'projectId:', projectId, 'clientId:', clientId); |   console.log('userId:', userId, 'projectId:', projectId, 'clientId:', clientId, 'gpsType:', gpsType); | ||||||
|  |  | ||||||
|  |   const queryParams: any = { | ||||||
|  |     userId: userId, | ||||||
|  |     projectId: projectId, | ||||||
|  |     gpsType: gpsType, | ||||||
|  |     clientId: clientId | ||||||
|  |   }; | ||||||
|  |  | ||||||
|  |   // 当gpsType为0时传入clientId,为1时不传入 | ||||||
|  |   if (gpsType === 1 && clientId) { | ||||||
|  |     queryParams.clientId = ''; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   router.push({ |   router.push({ | ||||||
|     path: './equipmentGPS', |     path: './equipmentGPS', | ||||||
|     query: { |     query: queryParams | ||||||
|       userId: userId, |  | ||||||
|       projectId: projectId, |  | ||||||
|       clientId: clientId |  | ||||||
|     } |  | ||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| <template> | <template> | ||||||
|   <div class="ol-map" id="olMap"></div> |   <div class="ol-map" id="olMap"></div> | ||||||
|   <div class="left_title_button"> |   <div class="left_title_button"> | ||||||
|     <div class="title">{{ projectName }}</div> |     <div class="title">{{ currentProject.name }}</div> | ||||||
|     <div class="btn" @click="updateZhiJiaZhuanDian('zhuangdian')"> |     <div class="btn" @click="updateZhiJiaZhuanDian('zhuangdian')"> | ||||||
|       <SvgIcon :name="bottomSvg" :isStyle="true" :className="'width:250px;height:50px;'" /> |       <SvgIcon :name="bottomSvg" :isStyle="true" :className="'width:250px;height:50px;'" /> | ||||||
|       <span>桩点-更新高程</span> |       <span>桩点-更新高程</span> | ||||||
| @ -29,6 +29,11 @@ | |||||||
| import { workScheduleDel } from '@/api/progress/plan'; | import { workScheduleDel } from '@/api/progress/plan'; | ||||||
| import { renderFacilitiesToCesium } from '@/views/gisHome/js/renderFacilities'; | import { renderFacilitiesToCesium } from '@/views/gisHome/js/renderFacilities'; | ||||||
| import { CenterHeight } from '@/views/gis2D/js/center'; | import { CenterHeight } from '@/views/gis2D/js/center'; | ||||||
|  | import { useUserStoreHook } from '@/store/modules/user'; | ||||||
|  | const userStore = useUserStoreHook(); | ||||||
|  | const currentProject = computed(() => userStore.selectedProject); | ||||||
|  | console.log('projectName', currentProject); | ||||||
|  |  | ||||||
| import md5 from 'js-md5'; | import md5 from 'js-md5'; | ||||||
| const arr = ref(); | const arr = ref(); | ||||||
| const initFacilities = async () => { | const initFacilities = async () => { | ||||||
| @ -129,8 +134,10 @@ onMounted(async () => { | |||||||
|     username: 'admin', |     username: 'admin', | ||||||
|     password: md5('admin_admin123'), |     password: md5('admin_admin123'), | ||||||
|     host: 'http://192.168.110.2:8895/' |     host: 'http://192.168.110.2:8895/' | ||||||
|   }); |   }).then((res) => { | ||||||
|     createEarth(); |     createEarth(); | ||||||
|  |     console.log(res); | ||||||
|  |   }); | ||||||
|   await handletilList(); |   await handletilList(); | ||||||
|   await initFacilities(); |   await initFacilities(); | ||||||
|   console.log(YJ); |   console.log(YJ); | ||||||
|  | |||||||
							
								
								
									
										628
									
								
								src/views/gis2D/index2.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										628
									
								
								src/views/gis2D/index2.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,628 @@ | |||||||
|  | <template> | ||||||
|  | 	<div class="earth gis2D" id="earth"> | ||||||
|  | 		<header-top :isShowTab="false" :isShowLog="false"></header-top> | ||||||
|  | 		<!-- <el-button class="btn" type="primary" @click="gengxin">更新</el-button> --> | ||||||
|  | 		<div class="left_title_button"> | ||||||
|  | 			<div class="title">{{ projectName }}</div> | ||||||
|  | 			<div class="btn" @click="updateZhiJiaZhuanDian('zhuangdian')"> | ||||||
|  | 				<SvgIcon :name="bottomSvg" :isStyle="true" :className="'width:250px;height:50px;'" /> | ||||||
|  | 				<span>桩点-更新高程</span> | ||||||
|  | 			</div> | ||||||
|  | 			<div class="btn" @click="updateHighLevel('nibianqi')"> | ||||||
|  | 				<SvgIcon :name="bottomSvg" :isStyle="true" :className="'width:250px;height:50px;'" /> | ||||||
|  | 				<span>逆变器-更新高程</span> | ||||||
|  | 			</div> | ||||||
|  | 			<div class="btn" @click="updateHighLevel('xiangbian')"> | ||||||
|  | 				<SvgIcon :name="bottomSvg" :isStyle="true" :className="'width:250px;height:50px;'" /> | ||||||
|  | 				<span>箱变-更新高程</span> | ||||||
|  | 			</div> | ||||||
|  | 			<div class="btn" @click="updateZhiJiaZhuanDian('zhijia')"> | ||||||
|  | 				<SvgIcon :name="bottomSvg" :isStyle="true" :className="'width:250px;height:50px;'" /> | ||||||
|  | 				<span>支架-更新高程</span> | ||||||
|  | 			</div> | ||||||
|  | 			<div class="btn" @click="centerHeight()"> | ||||||
|  | 				<SvgIcon :name="bottomSvg" :isStyle="true" :className="'width:250px;height:50px;'" /> | ||||||
|  | 				<span>光伏板-更新高程</span> | ||||||
|  | 			</div> | ||||||
|  | 		</div> | ||||||
|  | 		<progressLoading :progress="progress" :tips="progressTips"></progressLoading> | ||||||
|  | 	</div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script lang="ts"> | ||||||
|  | // import { toRefs, reactive, defineComponent, onMounted, getCurrentInstance, ref, nextTick } from 'vue'; | ||||||
|  | // import { ElLoading, ElMessage } from 'element-plus'; | ||||||
|  | // import headerTop from '../components/header/index.vue'; | ||||||
|  | // import { NextLoading } from '/@/utils/loading'; | ||||||
|  | // import { updateProjectId } from '/@/utils/tools'; | ||||||
|  | // import { useUserInfo } from '/@/stores/userInfo'; | ||||||
|  | // import progressLoading from '/@/components/progressLoading/index.vue'; | ||||||
|  | // // 资源接口 | ||||||
|  | // import { listQianqiMoxing } from '/@/api/system/qianqiManage/qianqiMoxing'; | ||||||
|  | // import { manageAll, updateAll, gisList, gisListZhijia, ZhuangdianEdit_detail, ZhijiaEdit_detail } from '/@/api/gis2D/all'; | ||||||
|  | // import { getSysProject } from '/@/api/system/sysProject'; | ||||||
|  | // import bottomSvg from '/@/assets/svg/bottom.svg'; | ||||||
|  | // // json字符判断 | ||||||
|  | // import { typeJSON } from '/@/utils/toolsValidate'; | ||||||
|  | // import { renderGuangfubanGlb } from '../utils/treeRender.js'; | ||||||
|  | // import zjImage from '/@/assets/images/tree_icon/zhijia.png'; | ||||||
|  | // import { Session } from '/@/utils/storage'; | ||||||
|  | // import axios from 'axios'; | ||||||
|  | // // import sign from '/@/utils/sign.js'; | ||||||
|  | import zdImage from '/@/assets/images/tree_icon/zhuangdian.png'; | ||||||
|  | let nibianqi = []; | ||||||
|  | let xiangbian = []; | ||||||
|  | let guanfuban = []; | ||||||
|  | let YJ = window.YJ; | ||||||
|  | // eslint-disable-next-line no-undef | ||||||
|  | export default defineComponent({ | ||||||
|  | 	name: 'index', | ||||||
|  | 	components: { | ||||||
|  | 		headerTop, | ||||||
|  | 		progressLoading, | ||||||
|  | 	}, | ||||||
|  | 	setup() { | ||||||
|  | 		const stores = useUserInfo(); | ||||||
|  | 		const state = reactive({ | ||||||
|  | 			projectId: stores.$state.userInfos.uprojectId, | ||||||
|  | 			queryParam: { | ||||||
|  | 				pageNum: 1, | ||||||
|  | 				pageSize: 10000000000, | ||||||
|  | 				projectId: stores.$state.userInfos.uprojectId, | ||||||
|  | 			}, | ||||||
|  | 			projectName: '', | ||||||
|  | 			bottomSvg, | ||||||
|  | 			tools: null, | ||||||
|  | 			zhuangdian: { | ||||||
|  | 				// 桩点更新高层 | ||||||
|  | 				originArr: [] as any[], //源数据数组 | ||||||
|  | 				poiArr: [] as any[], //位置数据数组 | ||||||
|  | 			}, | ||||||
|  | 			zhijia: { | ||||||
|  | 				// 支架更新高层 | ||||||
|  | 				originArr: [] as any[], //源数据数组 | ||||||
|  | 				poiArr: [] as any[], //位置数据数组 | ||||||
|  | 			}, | ||||||
|  | 			gfbArr: [] as any[], | ||||||
|  | 			bbtArr: [] as any[], | ||||||
|  | 			progress: -1, //加载进度 | ||||||
|  | 			progressTips: '数据更新中,请稍后……', | ||||||
|  | 			loading: null, | ||||||
|  | 		}); | ||||||
|  |  | ||||||
|  | 		onMounted(() => { | ||||||
|  | 			// 关闭Loading效果 | ||||||
|  | 			NextLoading.done(); | ||||||
|  | 			createEarth(); | ||||||
|  | 			// 切换项目 项目ID数据同步 | ||||||
|  | 			let channel = new BroadcastChannel('BC-switchProject'); | ||||||
|  | 			channel.addEventListener('message', function (e) { | ||||||
|  | 				if (e.data !== state.projectId) { | ||||||
|  | 					//保存更新项目id | ||||||
|  | 					updateProjectId(e.data); | ||||||
|  | 					location.reload(); //刷新页面 | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}); | ||||||
|  | 		const initData = () => { | ||||||
|  | 			getRresource(); | ||||||
|  | 			// 获取所有数据 | ||||||
|  | 			getSourceAll(); | ||||||
|  | 			// 项目名称 | ||||||
|  | 			getProList(state.projectId); | ||||||
|  | 			// 获取桩点 | ||||||
|  | 			getZhiJiaList(); | ||||||
|  | 			getXZhuangDianList(); | ||||||
|  | 		}; | ||||||
|  | 		const commonJson = (item) => { | ||||||
|  | 			if (!item.detail) { | ||||||
|  | 				//是否存在 | ||||||
|  | 				return false; | ||||||
|  | 			} | ||||||
|  | 			if (!typeJSON(item.detail)) { | ||||||
|  | 				//是否是JSON字符 | ||||||
|  | 				return false; | ||||||
|  | 			} | ||||||
|  | 			return true; | ||||||
|  | 		}; | ||||||
|  | 		// 渲染倾斜模型 | ||||||
|  | 		const renderModel = (item) => { | ||||||
|  | 			let Nposition = { | ||||||
|  | 				lng: 0, | ||||||
|  | 				lat: 0, | ||||||
|  | 				alt: 0, | ||||||
|  | 			}; | ||||||
|  | 			let position = null; | ||||||
|  | 			if (commonJson(item)) { | ||||||
|  | 				position = JSON.parse(item.detail).position || Nposition; | ||||||
|  | 			} else { | ||||||
|  | 				position = Nposition; | ||||||
|  | 			} | ||||||
|  | 			let options = { | ||||||
|  | 				id: item.sourceId, | ||||||
|  | 				host: '', | ||||||
|  | 				position, | ||||||
|  | 				show: true, | ||||||
|  | 			}; | ||||||
|  | 			// eslint-disable-next-line no-undef | ||||||
|  | 			let model = new YJ.Zmkg.Source(options); | ||||||
|  | 			model.on().then((res) => { | ||||||
|  | 				if (model.source.tileset) { | ||||||
|  | 					let bim = model.source.tileset.czmObject; | ||||||
|  | 				} | ||||||
|  | 				setTimeout(() => { | ||||||
|  | 					if (model.id != 'dixing') { | ||||||
|  | 						model.flyTo(); | ||||||
|  | 					} | ||||||
|  | 				}, 1000); | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		const getRresource = () => { | ||||||
|  | 			getQxModelList(); | ||||||
|  | 		}; | ||||||
|  | 		// 渲染光伏板 | ||||||
|  | 		const redenrGfB = () => { | ||||||
|  | 			const loading = ElLoading.service({ | ||||||
|  | 				lock: true, | ||||||
|  | 				text: '加载光伏板中....', | ||||||
|  | 				background: 'rgba(0, 0, 0, 0.7)', | ||||||
|  | 			}); | ||||||
|  | 			let batchSize = 100; | ||||||
|  | 			for (let i = 0; i < guanfuban.length; i += batchSize) { | ||||||
|  | 				const batch = guanfuban.slice(i, i + batchSize); | ||||||
|  | 				renderGuangfubanGlb(batch); | ||||||
|  | 			} | ||||||
|  | 			loading.close(); | ||||||
|  | 		}; | ||||||
|  | 		// 获取所有的数据 | ||||||
|  | 		const getSourceAll = () => { | ||||||
|  | 			const loading = ElLoading.service({ | ||||||
|  | 				lock: true, | ||||||
|  | 				text: '获取数据中...', | ||||||
|  | 				background: 'rgba(0, 0, 0, 0.7)', | ||||||
|  | 			}); | ||||||
|  | 			manageAll({ id: state.projectId }).then((res) => { | ||||||
|  | 				loading.close(); | ||||||
|  | 				const { data } = res; | ||||||
|  | 				let list = data.data; | ||||||
|  | 				console.log('listlistlistlist', list); | ||||||
|  | 				if (list.length > 0) { | ||||||
|  | 					list.forEach((item: any) => { | ||||||
|  | 						if (item.type == 18) { | ||||||
|  | 							nibianqi.push(item); | ||||||
|  | 						} | ||||||
|  | 						if (item.type == 23) { | ||||||
|  | 							xiangbian.push(item); | ||||||
|  | 						} | ||||||
|  | 						if (item.type == 15) { | ||||||
|  | 							guanfuban.push(item); | ||||||
|  | 						} | ||||||
|  | 					}); | ||||||
|  | 					let one = JSON.parse(guanfuban[0].detail); | ||||||
|  | 					if (one.height) { | ||||||
|  | 						redenrGfB(); | ||||||
|  | 					} else { | ||||||
|  | 						ElMessage.warning('请优先更新光伏板'); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 删除光伏板数据 | ||||||
|  | 		const removeSources = () => { | ||||||
|  | 			window['$PROJECT_MAP'].forEach((item) => { | ||||||
|  | 				// 清空地球上的实例 | ||||||
|  | 				try { | ||||||
|  | 					item[0].remove(); | ||||||
|  | 				} catch (error) {} | ||||||
|  | 			}); | ||||||
|  | 			window['$PROJECT_MAP'].clear(); | ||||||
|  | 		}; | ||||||
|  | 		// 数组分组工具方法 | ||||||
|  | 		const groupArr = (array, subGroupLength) => { | ||||||
|  | 			let index = 0; | ||||||
|  | 			let newArray = []; | ||||||
|  | 			while (index < array.length) { | ||||||
|  | 				newArray.push(array.slice(index, (index += subGroupLength))); | ||||||
|  | 			} | ||||||
|  | 			return newArray; | ||||||
|  | 		}; | ||||||
|  | 		// 根据key去重 | ||||||
|  | 		const duplicateRemoveByKey = (arr: any) => { | ||||||
|  | 			//根据key去重 | ||||||
|  | 			let arrMap = new Map(); | ||||||
|  | 			for (let item of arr) { | ||||||
|  | 				if (!arrMap.has(item.id)) { | ||||||
|  | 					arrMap.set(item.id, item); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 			arr = [...arrMap.values()]; //把map中所有的值取出来放进数组 | ||||||
|  | 			return arr; | ||||||
|  | 		}; | ||||||
|  | 		// 采样高层 | ||||||
|  | 		const updateZhiJiaZhuanDian = async (type: any) => { | ||||||
|  | 			console.log(123); | ||||||
|  |  | ||||||
|  | 			let loading = null; | ||||||
|  | 			let load = false; | ||||||
|  | 			if (type == 'zhuangdian' && window.$PROJECT_MAP) { | ||||||
|  | 				removeSources(); | ||||||
|  | 				load = true; | ||||||
|  | 			} else { | ||||||
|  | 				redenrGfB(); | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			if (type != 'zhuangdian' && type != 'zhijia') { | ||||||
|  | 				loading = ElLoading.service({ | ||||||
|  | 					lock: true, | ||||||
|  | 					text: '正在更新中', | ||||||
|  | 					background: 'rgba(0, 0, 0, 0.7)', | ||||||
|  | 				}); | ||||||
|  | 			} else { | ||||||
|  | 				state.progress = 0; | ||||||
|  | 			} | ||||||
|  | 			console.log('statestatestatestatestate', state); | ||||||
|  |  | ||||||
|  | 			if (state[type].poiArr.length && state[type].originArr.length) { | ||||||
|  | 				let poiGroupArr = groupArr(state[type].poiArr, 500); | ||||||
|  | 				let oriGroupArr = groupArr(state[type].originArr, 500); | ||||||
|  | 				if (poiGroupArr.length) { | ||||||
|  | 					for (let i in poiGroupArr) { | ||||||
|  | 						await state.tools!.sampleHeightMostDetailed(poiGroupArr[i]).then((res: any) => { | ||||||
|  | 							if (res.length === oriGroupArr[i].length) { | ||||||
|  | 								// 返填重新赋值 | ||||||
|  | 								oriGroupArr[i] = oriGroupArr[i].map((v: any, i: any) => { | ||||||
|  | 									let position = JSON.parse(v.detail); | ||||||
|  | 									if (type === 'zhijia') { | ||||||
|  | 										position.position.height = res[i].height ? res[i].height : 0; | ||||||
|  | 									} else { | ||||||
|  | 										position.position.alt = res[i].height ? res[i].height : 0; | ||||||
|  | 									} | ||||||
|  | 									v.detail = JSON.stringify(position); | ||||||
|  | 									return v; | ||||||
|  | 								}); | ||||||
|  |  | ||||||
|  | 								state[type].originArr = [...state[type].originArr, ...oriGroupArr[i]]; | ||||||
|  | 								state[type].originArr = duplicateRemoveByKey(state[type].originArr); | ||||||
|  | 								console.log(state[type].originArr); | ||||||
|  | 								state.progressTips = `总计${poiGroupArr.length}组数据,正在进行第${Number(i) + 1}组数据采样`; | ||||||
|  | 								state.progress = Number((((Number(i) + 1) / poiGroupArr.length) * 100).toFixed(2)); | ||||||
|  | 								if (type === 'zhuangdian' || type === 'zhijia') { | ||||||
|  | 									// 全部采样完才请求接口 | ||||||
|  | 									if (Number(i) - 0 == poiGroupArr.length - 1) { | ||||||
|  | 										updateAlt(type, loading); | ||||||
|  | 									} | ||||||
|  | 								} else { | ||||||
|  | 									updateAlt(type, loading); | ||||||
|  | 								} | ||||||
|  | 							} else { | ||||||
|  | 								loading?.close(); | ||||||
|  | 								ElMessage.success('更新失败'); | ||||||
|  | 							} | ||||||
|  | 						}); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		// 更新高层 | ||||||
|  | 		const updateAlt = async (type: any, loading: any = null) => { | ||||||
|  | 			if (type === 'zhuangdian') { | ||||||
|  | 				chunkUpdateAlt(type, '/zm/api/v1/system/qianqiGuangfubanIdsZhuangdian/edit_detail'); | ||||||
|  | 			} | ||||||
|  | 			if (type === 'zhijia') { | ||||||
|  | 				chunkUpdateAlt(type, '/zm/api/v1/system/qianqiGuangfubanIdsZhijia/edit_detail'); | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		// 更新高程 分组请求接口(桩点 支架) | ||||||
|  | 		const chunkUpdateAlt = async (type: any, url: any) => { | ||||||
|  | 			state.progress = 0; | ||||||
|  | 			console.log(state.zhuangdian.originArr); | ||||||
|  | 			let list = state[type].originArr.map((item: any) => { | ||||||
|  | 				return JSON.parse(item.detail); | ||||||
|  | 			}); | ||||||
|  | 			let groupList = groupArr(list, 5000); | ||||||
|  | 			if (groupList.length) { | ||||||
|  | 				for (let i in groupList) { | ||||||
|  | 					state.progressTips = `总计${groupList.length}组数据,正在进行第${Number(i) + 1}组数据更新`; | ||||||
|  | 					state.progress = Number(((Number(i) / groupList.length) * 100).toFixed(2)); | ||||||
|  | 					await axios({ | ||||||
|  | 						url: url, | ||||||
|  | 						method: 'put', | ||||||
|  | 						timeout: 0, | ||||||
|  | 						headers: { | ||||||
|  | 							Authorization: 'Bearer ' + `${Session.get('token')}`, | ||||||
|  | 							'Content-Type': 'application/json', | ||||||
|  | 							...sign({ projectId: state.projectId, list: groupList[i] }), | ||||||
|  | 						}, | ||||||
|  | 						data: { projectId: state.projectId, list: groupList[i] }, | ||||||
|  | 					}) | ||||||
|  | 						.then((res: any) => { | ||||||
|  | 							if (res.data.code === 0) { | ||||||
|  | 								state.progress = 100; | ||||||
|  | 								ElMessage.success(`第${Number(i) + 1}组数据更新成功,剩余${groupList.length - 1 - Number(i)}组数据`); | ||||||
|  | 								if (type === 'zhuangdian') { | ||||||
|  | 									getZhiJiaList(); | ||||||
|  | 								} | ||||||
|  | 							} else { | ||||||
|  | 								ElMessage.error(res.data.message); | ||||||
|  | 							} | ||||||
|  | 						}) | ||||||
|  | 						.catch((err) => { | ||||||
|  | 							ElMessage.error('请求失败'); | ||||||
|  | 						}); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  | 		// 获取支架列表 | ||||||
|  | 		const getZhiJiaList = async () => { | ||||||
|  | 			state.zhijia.originArr = []; | ||||||
|  | 			state.zhijia.poiArr = []; | ||||||
|  | 			await gisListZhijia(state.queryParam).then((res: any) => { | ||||||
|  | 				console.log('list接口', res); | ||||||
|  |  | ||||||
|  | 				if (res.code === 0 && res.data.list) { | ||||||
|  | 					let arr = res.data.list.map((item, index) => { | ||||||
|  | 						item.p_id = '106'; | ||||||
|  | 						item.checked = 1; | ||||||
|  | 						item.is_show = 1; | ||||||
|  | 						item.layer_index = 0; | ||||||
|  | 						item.icon = zjImage; | ||||||
|  | 						item.tree_index = 0; | ||||||
|  | 						let detail = null; | ||||||
|  | 						if (commonJson(item)) { | ||||||
|  | 							detail = JSON.parse(item.detail); | ||||||
|  | 							state.zhijia.originArr.push(item); | ||||||
|  | 							state.zhijia.poiArr.push({ lng: detail.position.lng, lat: detail.position.lat }); | ||||||
|  | 						} | ||||||
|  | 						return item; | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 获取桩点的数据 | ||||||
|  | 		const getXZhuangDianList = async () => { | ||||||
|  | 			await gisList(state.queryParam).then((res: any) => { | ||||||
|  | 				if (res.code === 0 && res.data.list) { | ||||||
|  | 					state.zhuangdian.poiArr = []; | ||||||
|  | 					let arr = res.data.list.map((item: any, index: any) => { | ||||||
|  | 						item.p_id = '102'; | ||||||
|  | 						item.checked = 1; | ||||||
|  | 						item.is_show = 1; | ||||||
|  | 						item.layer_index = 0; | ||||||
|  | 						item.icon = zdImage; | ||||||
|  | 						item.tree_index = 0; | ||||||
|  | 						let detail = null; | ||||||
|  | 						if (commonJson(item)) { | ||||||
|  | 							detail = JSON.parse(item.detail); | ||||||
|  | 							state.zhuangdian.originArr.push(item); | ||||||
|  | 							state.zhuangdian.poiArr.push({ lng: detail.position.lng, lat: detail.position.lat }); | ||||||
|  | 						} | ||||||
|  | 						return item; | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 获取中心点高程(光伏板) | ||||||
|  | 		const centerHeight = () => { | ||||||
|  | 			const loading = ElLoading.service({ | ||||||
|  | 				lock: true, | ||||||
|  | 				text: '更新高程、中心点...', | ||||||
|  | 				background: 'rgba(0, 0, 0, 0.7)', | ||||||
|  | 			}); | ||||||
|  | 			let arr = []; | ||||||
|  | 			guanfuban.forEach((item) => { | ||||||
|  | 				arr.push(JSON.parse(item.detail)); | ||||||
|  | 			}); | ||||||
|  | 			let heightAndCenter = window.YJ.Zmkg.Guangfu.CenterHeight(arr); | ||||||
|  | 			let center = heightAndCenter.center; | ||||||
|  | 			heightAndCenter.Cartographic.then((Cartographic: any) => { | ||||||
|  | 				if (Cartographic.length > 0) { | ||||||
|  | 					loading.close(); | ||||||
|  | 					assemblingPhotovoltaicPanels(center, Cartographic); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 组装高程数据 | ||||||
|  | 		const assemblingPhotovoltaicPanels = async (center: any, height: any) => { | ||||||
|  | 			guanfuban.forEach((item, index) => { | ||||||
|  | 				let i = JSON.parse(item.detail); | ||||||
|  | 				i.height = height[index].height; | ||||||
|  | 				i.center = center[index]; | ||||||
|  | 				item.detail = JSON.stringify(i); | ||||||
|  | 			}); | ||||||
|  | 			let data = [...guanfuban]; | ||||||
|  | 			let batchSize = 100000; | ||||||
|  | 			for (let i = 0; i < data.length; i += batchSize) { | ||||||
|  | 				const batch = data.slice(i, i + batchSize); | ||||||
|  | 				await updateElevation(batch); | ||||||
|  | 			} | ||||||
|  | 			getSourceAll(); | ||||||
|  | 		}; | ||||||
|  | 		// 更新高程(箱变、逆变器) | ||||||
|  | 		const updateHighLevel = (str: string) => { | ||||||
|  | 			let gxArr; | ||||||
|  | 			if (str == 'nibianqi') { | ||||||
|  | 				gxArr = nibianqi; | ||||||
|  | 			} | ||||||
|  | 			if (str == 'xiangbian') { | ||||||
|  | 				gxArr = xiangbian; | ||||||
|  | 			} | ||||||
|  | 			if (gxArr.length == 0) { | ||||||
|  | 				ElMessage({ | ||||||
|  | 					message: '数据为空,请确认数据是否上传', | ||||||
|  | 					type: 'warning', | ||||||
|  | 				}); | ||||||
|  | 				return; | ||||||
|  | 			} | ||||||
|  | 			let arr = []; | ||||||
|  | 			gxArr.forEach((item) => { | ||||||
|  | 				let p = JSON.parse(item.detail).positions[0]; | ||||||
|  | 				arr.push(p); | ||||||
|  | 			}); | ||||||
|  | 			const loading = ElLoading.service({ | ||||||
|  | 				lock: true, | ||||||
|  | 				text: '更新高程中...', | ||||||
|  | 				background: 'rgba(0, 0, 0, 0.7)', | ||||||
|  | 			}); | ||||||
|  | 			state.tools.sampleHeightMostDetailed(arr).then((Cartographic) => { | ||||||
|  | 				if (Cartographic.length > 0) { | ||||||
|  | 					loading.close(); | ||||||
|  | 					assemblyData(gxArr, Cartographic); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 组装数据 | ||||||
|  | 		const assemblyData = (gxArr, arr) => { | ||||||
|  | 			gxArr.forEach((item, index) => { | ||||||
|  | 				let i = JSON.parse(item.detail); | ||||||
|  | 				i.positions[0].alt = arr[index].height; | ||||||
|  | 				item.detail = JSON.stringify(i); | ||||||
|  | 			}); | ||||||
|  | 			updateElevation(gxArr); | ||||||
|  | 		}; | ||||||
|  | 		// 更新高程(更新到后端) | ||||||
|  | 		const updateElevation = (gxArr) => { | ||||||
|  | 			const loading = ElLoading.service({ | ||||||
|  | 				lock: true, | ||||||
|  | 				text: '上传中,请勿关闭页面...', | ||||||
|  | 				background: 'rgba(0, 0, 0, 0.7)', | ||||||
|  | 			}); | ||||||
|  | 			updateAll({ Modules: gxArr }).then((res) => { | ||||||
|  | 				loading.close(); | ||||||
|  | 				if (res.code == 0) { | ||||||
|  | 					ElMessage({ | ||||||
|  | 						message: '上传成功', | ||||||
|  | 						type: 'success', | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 获取地形数据 | ||||||
|  | 		const getQxModelList = () => { | ||||||
|  | 			listQianqiMoxing(state.queryParam).then((res: any) => { | ||||||
|  | 				if (res.code === 0 && res.data.list && res.data.list.length) { | ||||||
|  | 					res.data.list.forEach((item) => { | ||||||
|  | 						renderModel(item); | ||||||
|  | 					}); | ||||||
|  | 				} | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 获取当前项目信息 | ||||||
|  | 		const getProList = (id: any) => { | ||||||
|  | 			getSysProject(id).then((res: any) => { | ||||||
|  | 				const data = res.data; | ||||||
|  | 				state.projectName = data.projectName; | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		const createEarth = () => { | ||||||
|  | 			// eslint-disable-next-line no-undef | ||||||
|  | 			YJ.on().then((res: any) => { | ||||||
|  | 				// eslint-disable-next-line no-undef | ||||||
|  | 				let earth = new YJ.YJEarth('earth'); | ||||||
|  | 				// // this.areaShow = true | ||||||
|  | 				// eslint-disable-next-line no-undef | ||||||
|  | 				new YJ.Layer.ArcgisWXImagery(); | ||||||
|  | 				// // new YJ.Layer.ArcgisGRAYImagery() | ||||||
|  | 				// // new YJ.Layer.ArcgisBLUEImagery() | ||||||
|  | 				// // new YJ.Terrain.Arcgis() | ||||||
|  | 				// eslint-disable-next-line no-undef | ||||||
|  | 				new YJ.Layer.GDLWImagery(); | ||||||
|  | 				// eslint-disable-next-line no-undef | ||||||
|  | 				state.tools = new YJ.Tools(); | ||||||
|  | 				// eslint-disable-next-line no-undef | ||||||
|  | 				YJ.getEarth().propertyStyle = new Cesium.Cesium3DTileStyle({ | ||||||
|  | 					// let stayle = new Cesium.Cesium3DTileStyle({ | ||||||
|  | 					/*color: { | ||||||
|  | 					evaluateColor: (feature, result) => { | ||||||
|  | 					  return bimTree.evaluateColor(feature, result) | ||||||
|  | 					} | ||||||
|  | 				  },*/ | ||||||
|  | 					show: { | ||||||
|  | 						evaluate: (feature) => { | ||||||
|  | 							return evaluateShow(feature); | ||||||
|  | 						}, | ||||||
|  | 					}, | ||||||
|  | 				}); | ||||||
|  | 				initData(); | ||||||
|  | 			}); | ||||||
|  | 		}; | ||||||
|  | 		// 监听模型加载显示隐藏 | ||||||
|  | 		const evaluateShow = (feature: any) => { | ||||||
|  | 			return true; | ||||||
|  | 			if (!feature) return true; | ||||||
|  | 			if (!feature.hasProperty('id')) return true; | ||||||
|  | 			var fid = feature.getProperty('id'); | ||||||
|  | 			// //获取tileset | ||||||
|  | 			var tileset = feature.tileset.xbsjTileset; | ||||||
|  | 			if (!tileset) return true; | ||||||
|  | 			// //寻找这个tileset上绑定的配置 | ||||||
|  | 			var config = window._visibleConfig.find((f) => f.tileset === tileset); | ||||||
|  | 			if (!config) return true; | ||||||
|  | 			//如果配置里包含,那么返回可见性 | ||||||
|  | 			if (config.visibleCach.hasOwnProperty(fid)) { | ||||||
|  | 				return config.visibleCach[fid]; | ||||||
|  | 			} else return false; | ||||||
|  | 			//否则返回可见 | ||||||
|  | 		}; | ||||||
|  |  | ||||||
|  | 		return { | ||||||
|  | 			createEarth, | ||||||
|  | 			evaluateShow, | ||||||
|  | 			getRresource, | ||||||
|  | 			getQxModelList, | ||||||
|  | 			centerHeight, | ||||||
|  | 			commonJson, | ||||||
|  | 			updateHighLevel, | ||||||
|  | 			updateZhiJiaZhuanDian, | ||||||
|  | 			redenrGfB, | ||||||
|  | 			...toRefs(state), | ||||||
|  | 		}; | ||||||
|  | 	}, | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style scoped lang="scss"> | ||||||
|  | .earth { | ||||||
|  | 	width: 100vw; | ||||||
|  | 	height: 100vh; | ||||||
|  | 	overflow: hidden; | ||||||
|  | 	position: relative; | ||||||
|  |  | ||||||
|  | 	.left_title_button { | ||||||
|  | 		position: absolute; | ||||||
|  | 		top: 10%; | ||||||
|  | 		left: 30px; | ||||||
|  | 		width: 250px; | ||||||
|  | 		height: 100px; | ||||||
|  | 		z-index: 1999; | ||||||
|  |  | ||||||
|  | 		.title { | ||||||
|  | 			color: #fff; | ||||||
|  | 			font-weight: bold; | ||||||
|  | 			font-size: 22px; | ||||||
|  | 			margin-bottom: 20px; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		.btn { | ||||||
|  | 			width: 100%; | ||||||
|  | 			height: 50px; | ||||||
|  | 			position: relative; | ||||||
|  | 			margin-bottom: 30px; | ||||||
|  |  | ||||||
|  | 			> span { | ||||||
|  | 				width: 100%; | ||||||
|  | 				font-size: 22px; | ||||||
|  | 				font-weight: bold; | ||||||
|  | 				color: #fff; | ||||||
|  | 				position: absolute; | ||||||
|  | 				top: 50%; | ||||||
|  | 				left: 50%; | ||||||
|  | 				transform: translate(-50%, -50%); | ||||||
|  | 				letter-spacing: 3px; | ||||||
|  | 				text-align: center; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | </style> | ||||||
| @ -3,13 +3,19 @@ | |||||||
|     <div class="max-w-4xl mx-auto"> |     <div class="max-w-4xl mx-auto"> | ||||||
|       <!-- 顶部按钮区域 --> |       <!-- 顶部按钮区域 --> | ||||||
|       <el-card class="mb-4 rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md"> |       <el-card class="mb-4 rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md"> | ||||||
|         <approvalButton @submitForm="submitForm" @approvalVerifyOpen="approvalVerifyOpen" |         <approvalButton | ||||||
|           @handleApprovalRecord="handleApprovalRecord" :buttonLoading="buttonLoading" :id="form.mrpBaseBo.id" |           @submitForm="submitForm" | ||||||
|           :status="form.mrpBaseBo.status" :pageType="routeParams.type" /> |           @approvalVerifyOpen="approvalVerifyOpen" | ||||||
|  |           @handleApprovalRecord="handleApprovalRecord" | ||||||
|  |           :buttonLoading="buttonLoading" | ||||||
|  |           :id="form.mrpBaseBo.id" | ||||||
|  |           :status="form.mrpBaseBo.status" | ||||||
|  |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|  |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|       <el-card |       <el-card class="rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md overflow-hidden"> | ||||||
|         class="rounded-lg shadow-sm bg-white border border-gray-100 transition-all hover:shadow-md overflow-hidden"> |  | ||||||
|         <div class="p-4 bg-gradient-to-r from-blue-50 to-indigo-50 border-b border-gray-100"> |         <div class="p-4 bg-gradient-to-r from-blue-50 to-indigo-50 border-b border-gray-100"> | ||||||
|           <h3 class="text-lg font-semibold text-gray-800">物资设备批次需求计划</h3> |           <h3 class="text-lg font-semibold text-gray-800">物资设备批次需求计划</h3> | ||||||
|           <el-row :gutter="20"> |           <el-row :gutter="20"> | ||||||
| @ -20,8 +26,7 @@ | |||||||
|             </el-col> |             </el-col> | ||||||
|             <el-col :span="8" :offset="0"> |             <el-col :span="8" :offset="0"> | ||||||
|               <el-form-item label="编制日期" prop="mrpBaseBo.preparedDate"> |               <el-form-item label="编制日期" prop="mrpBaseBo.preparedDate"> | ||||||
|                 <el-date-picker v-model="form.mrpBaseBo.preparedDate" type="date" value-format="YYYY-MM-DD" disabled |                 <el-date-picker v-model="form.mrpBaseBo.preparedDate" type="date" value-format="YYYY-MM-DD" disabled placeholder="请选择编制日期" /> | ||||||
|                   placeholder="请选择编制日期" /> |  | ||||||
|               </el-form-item> |               </el-form-item> | ||||||
|             </el-col> |             </el-col> | ||||||
|             <el-col :span="8" :offset="0"> |             <el-col :span="8" :offset="0"> | ||||||
| @ -50,8 +55,14 @@ | |||||||
|       <submitVerify ref="submitVerifyRef" :task-variables="taskVariables" @submit-callback="submitCallback" /> |       <submitVerify ref="submitVerifyRef" :task-variables="taskVariables" @submit-callback="submitCallback" /> | ||||||
|       <approvalRecord ref="approvalRecordRef"></approvalRecord> |       <approvalRecord ref="approvalRecordRef"></approvalRecord> | ||||||
|       <!-- 流程选择对话框 --> |       <!-- 流程选择对话框 --> | ||||||
|       <el-dialog draggable v-model="dialogVisible.visible" :title="dialogVisible.title" :before-close="handleClose" |       <el-dialog | ||||||
|         width="500" class="rounded-lg shadow-lg"> |         draggable | ||||||
|  |         v-model="dialogVisible.visible" | ||||||
|  |         :title="dialogVisible.title" | ||||||
|  |         :before-close="handleClose" | ||||||
|  |         width="500" | ||||||
|  |         class="rounded-lg shadow-lg" | ||||||
|  |       > | ||||||
|         <div class="p-4"> |         <div class="p-4"> | ||||||
|           <p class="text-gray-600 mb-4">请选择要启动的流程:</p> |           <p class="text-gray-600 mb-4">请选择要启动的流程:</p> | ||||||
|           <el-select v-model="flowCode" placeholder="请选择流程" style="width: 100%"> |           <el-select v-model="flowCode" placeholder="请选择流程" style="width: 100%"> | ||||||
| @ -60,10 +71,12 @@ | |||||||
|         </div> |         </div> | ||||||
|         <template #footer> |         <template #footer> | ||||||
|           <div class="dialog-footer p-4 border-t border-gray-100 flex justify-end space-x-3"> |           <div class="dialog-footer p-4 border-t border-gray-100 flex justify-end space-x-3"> | ||||||
|             <el-button @click="handleClose" |             <el-button @click="handleClose" class="px-4 py-2 border border-gray-300 rounded-md text-gray-700 hover:bg-gray-50 transition-colors" | ||||||
|               class="px-4 py-2 border border-gray-300 rounded-md text-gray-700 hover:bg-gray-50 transition-colors">取消</el-button> |               >取消</el-button | ||||||
|             <el-button type="primary" @click="submitFlow()" |             > | ||||||
|               class="px-4 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors">确认</el-button> |             <el-button type="primary" @click="submitFlow()" class="px-4 py-2 bg-primary text-white rounded-md hover:bg-primary/90 transition-colors" | ||||||
|  |               >确认</el-button | ||||||
|  |             > | ||||||
|           </div> |           </div> | ||||||
|         </template> |         </template> | ||||||
|       </el-dialog> |       </el-dialog> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.approvalDesign" |           :status="form.approvalDesign" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -70,6 +70,13 @@ | |||||||
|           </template> |           </template> | ||||||
|         </el-table-column> |         </el-table-column> | ||||||
|         <el-table-column label="备注" align="center" prop="remark" /> |         <el-table-column label="备注" align="center" prop="remark" /> | ||||||
|  |         <el-table-column label="附件" align="center" prop="attachmentName"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <el-button :href="scope.row.attachmentName" link type="primary" @click="downloadAttachment(scope.row)">{{ | ||||||
|  |               scope.row.attachmentName | ||||||
|  |             }}</el-button> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|         <el-table-column label="操作" align="center" min-width="120" fixed="right"> |         <el-table-column label="操作" align="center" min-width="120" fixed="right"> | ||||||
|           <template #default="scope"> |           <template #default="scope"> | ||||||
|             <!-- <el-button link type="primary" icon="edit" @click="handleUpdate(scope.row)" v-hasPermi="['materials:materialReceive:edit']" |             <!-- <el-button link type="primary" icon="edit" @click="handleUpdate(scope.row)" v-hasPermi="['materials:materialReceive:edit']" | ||||||
| @ -254,6 +261,11 @@ | |||||||
|               <file-upload :isShowTip="false" :fileType="['pdf', 'png', 'jpg', 'jpeg']" v-model="form.licenseCountFileId" /> |               <file-upload :isShowTip="false" :fileType="['pdf', 'png', 'jpg', 'jpeg']" v-model="form.licenseCountFileId" /> | ||||||
|             </el-form-item> |             </el-form-item> | ||||||
|           </el-col> |           </el-col> | ||||||
|  |           <el-col :span="12"> | ||||||
|  |             <el-form-item label="附件" prop="attachmentId"> | ||||||
|  |               <file-upload :isShowTip="false" :fileType="['pdf', 'png', 'jpg', 'jpeg', 'zip']" v-model="form.attachmentId" /> | ||||||
|  |             </el-form-item> | ||||||
|  |           </el-col> | ||||||
|           <el-col :span="24"> |           <el-col :span="24"> | ||||||
|             <span style="color: #ff0000ab; margin-bottom: 10px; display: block">注意:pdf/png/jpg/jpeg格式文件</span> |             <span style="color: #ff0000ab; margin-bottom: 10px; display: block">注意:pdf/png/jpg/jpeg格式文件</span> | ||||||
|           </el-col> |           </el-col> | ||||||
| @ -351,6 +363,7 @@ const getInitFormData = (): MaterialReceiveForm => { | |||||||
|     techDocCountFileId: undefined, |     techDocCountFileId: undefined, | ||||||
|     licenseCount: undefined, |     licenseCount: undefined, | ||||||
|     licenseCountFileId: undefined, |     licenseCountFileId: undefined, | ||||||
|  |     attachmentId: undefined, | ||||||
|     storageType: '1', |     storageType: '1', | ||||||
|     remark: undefined, |     remark: undefined, | ||||||
|     docId: undefined, |     docId: undefined, | ||||||
| @ -538,6 +551,17 @@ const handleUpdate = async (row?: MaterialReceiveVO) => { | |||||||
|     proxy?.$modal.msgError('获取详情失败'); |     proxy?.$modal.msgError('获取详情失败'); | ||||||
|   } |   } | ||||||
| }; | }; | ||||||
|  | //下载附件 | ||||||
|  | const downloadAttachment = (row: any) => { | ||||||
|  |   if (row.attachmentUrl) { | ||||||
|  |     const link = document.createElement('a'); | ||||||
|  |     link.href = row.attachmentUrl; | ||||||
|  |     link.download = row.fileName || 'download'; | ||||||
|  |     document.body.appendChild(link); | ||||||
|  |     link.click(); | ||||||
|  |     document.body.removeChild(link); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
| /** 提交按钮 */ | /** 提交按钮 */ | ||||||
| const submitForm = () => { | const submitForm = () => { | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.approvalOrder" |           :status="form.approvalOrder" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
| @ -319,7 +320,9 @@ onMounted(() => { | |||||||
|   .el-input__inner, |   .el-input__inner, | ||||||
|   .el-select .el-input__inner { |   .el-select .el-input__inner { | ||||||
|     border-radius: 4px; |     border-radius: 4px; | ||||||
|     transition: border-color 0.2s, box-shadow 0.2s; |     transition: | ||||||
|  |       border-color 0.2s, | ||||||
|  |       box-shadow 0.2s; | ||||||
|  |  | ||||||
|     &:focus { |     &:focus { | ||||||
|       border-color: var(--primary-light); |       border-color: var(--primary-light); | ||||||
| @ -329,7 +332,9 @@ onMounted(() => { | |||||||
|  |  | ||||||
|   .el-textarea__inner { |   .el-textarea__inner { | ||||||
|     border-radius: 4px; |     border-radius: 4px; | ||||||
|     transition: border-color 0.2s, box-shadow 0.2s; |     transition: | ||||||
|  |       border-color 0.2s, | ||||||
|  |       box-shadow 0.2s; | ||||||
|  |  | ||||||
|     &:focus { |     &:focus { | ||||||
|       border-color: var(--primary-light); |       border-color: var(--primary-light); | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|  |  | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.approvalPlan" |           :status="form.approvalPlan" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.auditStatus" |           :status="form.auditStatus" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.completeAuditStatus" |           :status="form.completeAuditStatus" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form[0]?.id" |           :id="form[0]?.id" | ||||||
|           :status="form[0]?.planAuditStatus" |           :status="form[0]?.planAuditStatus" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -781,6 +781,7 @@ const handleCheckRules = async (row?: ProjectVO) => { | |||||||
|   const _id = row?.id || ids.value[0]; |   const _id = row?.id || ids.value[0]; | ||||||
|   const res = await byProjectIdDetail(_id); |   const res = await byProjectIdDetail(_id); | ||||||
|   if (res.data) { |   if (res.data) { | ||||||
|  |     console.log(res.data); | ||||||
|     res.data.weekday = res.data.weekday.split(','); |     res.data.weekday = res.data.weekday.split(','); | ||||||
|     Object.assign(form.value, res.data); |     Object.assign(form.value, res.data); | ||||||
|   } |   } | ||||||
| @ -794,7 +795,7 @@ const ruleSubmit = async () => { | |||||||
|       let obj = { |       let obj = { | ||||||
|         weekday: form.value.weekday.join(','), |         weekday: form.value.weekday.join(','), | ||||||
|         projectId: projectId.value, |         projectId: projectId.value, | ||||||
|         id: projectId.value, |         id: form.value.id, | ||||||
|         clockInTime: form.value.clockInTime, |         clockInTime: form.value.clockInTime, | ||||||
|         clockOutTime: form.value.clockOutTime, |         clockOutTime: form.value.clockOutTime, | ||||||
|         type: form.value.type |         type: form.value.type | ||||||
|  | |||||||
| @ -2,13 +2,18 @@ | |||||||
|   <div class="leftPage"> |   <div class="leftPage"> | ||||||
|     <div class="topPage"> |     <div class="topPage"> | ||||||
|       <Title title="项目公告" /> |       <Title title="项目公告" /> | ||||||
|       <div class="content"> |       <div | ||||||
|  |         class="content" | ||||||
|  |         ref="contentRef" | ||||||
|  |         id="event_scroll" | ||||||
|  |         @mouseenter.native="autoScrollTable(true, false)" | ||||||
|  |         @mouseleave.native="autoScrollTable(false, true)" | ||||||
|  |       > | ||||||
|         <div class="content_item" v-for="item in news" :key="item.id"> |         <div class="content_item" v-for="item in news" :key="item.id"> | ||||||
|           <img src="@/assets/projectLarge/round.svg" alt=""> |           <img src="@/assets/projectLarge/round.svg" alt="" /> | ||||||
|           <div class="ellipsis"> |           <div class="ellipsis"> | ||||||
|             {{ item.title }} |             {{ item.title }} | ||||||
|             <span @click="showNewsDetail(item)" style="color: rgba(138, 149, 165, 1);">{{ item.id === newId ? '关闭' : |             <span @click="showNewsDetail(item)" style="color: rgba(138, 149, 165, 1)">{{ item.id === newId ? '关闭' : '查看' }}</span> | ||||||
|               '查看' }}</span> |  | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
| @ -22,33 +27,33 @@ | |||||||
|     <div class="endPage"> |     <div class="endPage"> | ||||||
|       <Title title="人员情况" /> |       <Title title="人员情况" /> | ||||||
|       <div class="map"> |       <div class="map"> | ||||||
|         <img src="@/assets/projectLarge/map.svg" alt=""> |         <img src="@/assets/projectLarge/map.svg" alt="" /> | ||||||
|         <!-- <div ref="mapChartRef"></div> --> |         <!-- <div ref="mapChartRef"></div> --> | ||||||
|       </div> |       </div> | ||||||
|  |  | ||||||
|       <div class="attendance_tag"> |       <div class="attendance_tag"> | ||||||
|         <div class="tag_item"> |         <div class="tag_item"> | ||||||
|           <img src="@/assets/projectLarge/people.svg" alt=""> |           <img src="@/assets/projectLarge/people.svg" alt="" /> | ||||||
|           <div class="tag_title">出勤人</div> |           <div class="tag_title">出勤人</div> | ||||||
|           <div class="tag_info"> |           <div class="tag_info"> | ||||||
|             {{ attendanceCount }} |             {{ attendanceCount }} | ||||||
|             <span style="font-size: 14px;">人</span> |             <span style="font-size: 14px">人</span> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="tag_item"> |         <div class="tag_item"> | ||||||
|           <img src="@/assets/projectLarge/people.svg" alt=""> |           <img src="@/assets/projectLarge/people.svg" alt="" /> | ||||||
|           <div class="tag_title">在岗人</div> |           <div class="tag_title">在岗人</div> | ||||||
|           <div class="tag_info"> |           <div class="tag_info"> | ||||||
|             {{ peopleCount }} |             {{ peopleCount }} | ||||||
|             <span style="font-size: 14px;">人</span> |             <span style="font-size: 14px">人</span> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="tag_item"> |         <div class="tag_item"> | ||||||
|           <img src="@/assets/projectLarge/people.svg" alt=""> |           <img src="@/assets/projectLarge/people.svg" alt="" /> | ||||||
|           <div class="tag_title">出勤率</div> |           <div class="tag_title">出勤率</div> | ||||||
|           <div class="tag_info"> |           <div class="tag_info"> | ||||||
|             {{ attendanceRate }} |             {{ attendanceRate }} | ||||||
|             <span style="font-size: 14px;">%</span> |             <span style="font-size: 14px">%</span> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
| @ -62,8 +67,9 @@ | |||||||
|         </div> |         </div> | ||||||
|         <div v-for="item in teamAttendanceList" :key="item.id" class="attendance_item"> |         <div v-for="item in teamAttendanceList" :key="item.id" class="attendance_item"> | ||||||
|           <div class="attendance_item_title">{{ item.teamName }}</div> |           <div class="attendance_item_title">{{ item.teamName }}</div> | ||||||
|           <div class="attendance_item_number">{{ item.attendanceNumber }} <span class="subfont">人/{{ item.allNumber |           <div class="attendance_item_number"> | ||||||
|               }}</span></div> |             {{ item.attendanceNumber }} <span class="subfont">人/{{ item.allNumber }}</span> | ||||||
|  |           </div> | ||||||
|           <div class="attendance_item_rate">{{ item.attendanceRate }} %</div> |           <div class="attendance_item_rate">{{ item.attendanceRate }} %</div> | ||||||
|           <div class="attendance_item_date subfont">{{ item.attendanceTime }}</div> |           <div class="attendance_item_date subfont">{{ item.attendanceTime }}</div> | ||||||
|         </div> |         </div> | ||||||
| @ -73,10 +79,10 @@ | |||||||
| </template> | </template> | ||||||
|  |  | ||||||
| <script setup lang="ts"> | <script setup lang="ts"> | ||||||
| import { ref } from "vue" | import { ref } from 'vue'; | ||||||
| import Title from './title.vue' | import Title from './title.vue'; | ||||||
| import { getScreenNews, getScreenPeople } from '@/api/projectScreen'; | import { getScreenNews, getScreenPeople } from '@/api/projectScreen/index'; | ||||||
| import { mapOption } from './optionList' | import { mapOption } from './optionList'; | ||||||
| import * as echarts from 'echarts'; | import * as echarts from 'echarts'; | ||||||
|  |  | ||||||
| const props = defineProps({ | const props = defineProps({ | ||||||
| @ -84,78 +90,102 @@ const props = defineProps({ | |||||||
|     type: String, |     type: String, | ||||||
|     default: '' |     default: '' | ||||||
|   } |   } | ||||||
| }) | }); | ||||||
|  |  | ||||||
| let mapChart = null | let mapChart = null; | ||||||
| const mapChartRef = ref<HTMLDivElement | null>(null); | const mapChartRef = ref<HTMLDivElement | null>(null); | ||||||
| const news = ref([]) | const contentRef = ref<HTMLDivElement | null>(null); | ||||||
|  | const news = ref([]); | ||||||
| const newDetail = ref({ | const newDetail = ref({ | ||||||
|   title: '', |   title: '', | ||||||
|   content: '' |   content: '' | ||||||
| }) | }); | ||||||
| const newId = ref('') | const newId = ref(''); | ||||||
| const attendanceCount = ref(0) | const attendanceCount = ref(0); | ||||||
| const attendanceRate = ref(0) | const attendanceRate = ref(0); | ||||||
| const peopleCount = ref(0) | const peopleCount = ref(0); | ||||||
| const teamAttendanceList = ref([ | const teamAttendanceList = ref([{ id: '', teamName: '', attendanceNumber: 0, allNumber: 0, attendanceRate: 0, attendanceTime: '' }]); | ||||||
|   { id: "", teamName: "", attendanceNumber: 0, allNumber: 0, attendanceRate: 0, attendanceTime: "" }, |  | ||||||
| ]) |  | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 显示新闻详情 |  * 显示新闻详情 | ||||||
|  */ |  */ | ||||||
| const showNewsDetail = (item: any) => { | const showNewsDetail = (item: any) => { | ||||||
|   if (newId.value === item.id) { |   if (newId.value === item.id) { | ||||||
|     newId.value = '' |     newId.value = ''; | ||||||
|     return |     return; | ||||||
|   } |  | ||||||
|   newDetail.value = item |  | ||||||
|   newId.value = item.id |  | ||||||
|   } |   } | ||||||
|  |   newDetail.value = item; | ||||||
|  |   newId.value = item.id; | ||||||
|  | }; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 获取项目人员出勤数据 |  * 获取项目人员出勤数据 | ||||||
|  */ |  */ | ||||||
| const getPeopleData = async () => { | const getPeopleData = async () => { | ||||||
|   const res = await getScreenPeople(props.projectId); |   const res = await getScreenPeople(props.projectId); | ||||||
|   const { data, code } = res |   const { data, code } = res; | ||||||
|   if (code === 200) { |   if (code === 200) { | ||||||
|     attendanceCount.value = data.attendanceCount |     attendanceCount.value = data.attendanceCount; | ||||||
|     attendanceRate.value = data.attendanceRate |     attendanceRate.value = data.attendanceRate; | ||||||
|     peopleCount.value = data.peopleCount |     peopleCount.value = data.peopleCount; | ||||||
|     teamAttendanceList.value = data.teamAttendanceList |     teamAttendanceList.value = data.teamAttendanceList; | ||||||
|   } |  | ||||||
|   } |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * 获取项目新闻数据 |  * 获取项目新闻数据 | ||||||
|  */ |  */ | ||||||
| const getNewsData = async () => { | const getNewsData = async () => { | ||||||
|   const res = await getScreenNews(props.projectId); |   const res = await getScreenNews(props.projectId); | ||||||
|   const { data, code } = res |   const { data, code } = res; | ||||||
|   if (code === 200) { |   if (code === 200) { | ||||||
|     news.value = data |     news.value = data; | ||||||
|   } |     autoScrollTable(5); | ||||||
|   } |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
| /** | var lastTime = 0; | ||||||
|  * 初始化地图 | const state = reactive({ | ||||||
|  */ |   events: [], | ||||||
| const initMapChart = () => { |   outputList: [], | ||||||
|   if (!mapChartRef.value) { |   detialInfoShow: false, | ||||||
|  |   notShowPro: [{ id: 37 }, { id: 44 }, { id: 48 }], //模块内容区域不展示的项目(中煤科工 广东户用光伏项目 兴隆光伏) | ||||||
|  |   scrolltimerTable: null, | ||||||
|  |   flagPause: true //滚动继续滚动 | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | const autoScrollTable = (time, flag = true) => { | ||||||
|  |   //表格自动滚动 | ||||||
|  |   const divData = document.getElementById('event_scroll'); | ||||||
|  |   if (!flag || !state.flagPause) { | ||||||
|  |     cancelAnimationFrame(state.scrolltimerTable); | ||||||
|     return; |     return; | ||||||
|   } |   } | ||||||
|   mapChart = echarts.init(mapChartRef.value); |   if (time - lastTime < 25) { | ||||||
|   mapChart.setOption(mapOption); |     // 50毫秒更新一次 | ||||||
|  |     state.scrolltimerTable = requestAnimationFrame(autoScrollTable); | ||||||
|  |     return; // 如果时间未到,则返回,不执行动画更新 | ||||||
|   } |   } | ||||||
|  |   lastTime = time; | ||||||
|  |   // 元素自增距离顶部1像素 | ||||||
|  |   divData.scrollTop += 1; | ||||||
|  |   // 判断元素是否滚动到底部(可视高度+距离顶部=整个高度) | ||||||
|  |   if (divData.clientHeight + divData.scrollTop == divData.scrollHeight) { | ||||||
|  |     // 重置table距离顶部距离 | ||||||
|  |     divData.scrollTop = 0; | ||||||
|  |     state.scrolltimerTable = requestAnimationFrame(autoScrollTable); | ||||||
|  |   } else { | ||||||
|  |     state.scrolltimerTable = requestAnimationFrame(autoScrollTable); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
| onMounted(() => { | onMounted(() => { | ||||||
|   // nextTick(() => { |   // nextTick(() => { | ||||||
|   //   initMapChart(); |   //   initMapChart(); | ||||||
|   // }); |   // }); | ||||||
|   getPeopleData() |   getPeopleData(); | ||||||
|   getNewsData() |   getNewsData(); | ||||||
| }) | }); | ||||||
|  |  | ||||||
| onUnmounted(() => { | onUnmounted(() => { | ||||||
|   // if (mapChart) { |   // if (mapChart) { | ||||||
| @ -163,7 +193,6 @@ onUnmounted(() => { | |||||||
|   //   mapChart = null; |   //   mapChart = null; | ||||||
|   // } |   // } | ||||||
| }); | }); | ||||||
|  |  | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <style scoped lang="scss"> | <style scoped lang="scss"> | ||||||
|  | |||||||
| @ -4,11 +4,26 @@ import CesiumImageLabelEntity from '../js/CesiumImageLabelEntity.js'; | |||||||
| import CesiumFlyToRoamingController from '../js/CesiumFlyToRoamingController.js'; | import CesiumFlyToRoamingController from '../js/CesiumFlyToRoamingController.js'; | ||||||
| import { setSelect, getSelectList, getGps } from '@/api/projectScreen/index.ts' | import { setSelect, getSelectList, getGps } from '@/api/projectScreen/index.ts' | ||||||
| import videoDialog from "./video.vue" | import videoDialog from "./video.vue" | ||||||
|  | import { getToken } from '@/utils/auth'; | ||||||
| const defaultExpandedKeys = [1, 2, 3] //默认展开第一级节点 | const defaultExpandedKeys = [1, 2, 3] //默认展开第一级节点 | ||||||
| const defaultCheckedKeys = ref([]) //默认选中节点  | const defaultCheckedKeys = ref([]) //默认选中节点  | ||||||
| const data = ref([]); | const data = ref([]); | ||||||
| const deviceId = ref(''); | const deviceId = ref(''); | ||||||
| const videoDialogRef = ref(null); | const videoDialogRef = ref(null); | ||||||
|  | let token = 'Bearer '+ getToken() | ||||||
|  | let ws = new ReconnectingWebSocket( import.meta.env.VITE_APP_BASE_WS_API + '?Authorization='+token+'&clientid='+import.meta.env.VITE_APP_CLIENT_ID+'&projectId='+'1897160897167638529'); | ||||||
|  | // 连接ws | ||||||
|  | const connectWs = () => { | ||||||
|  |     ws.onopen = (e) => { | ||||||
|  |     //   let message ={ | ||||||
|  |     //     projectId:'1897160897167638529', | ||||||
|  |     //   } | ||||||
|  |     //   ws.send(JSON.stringify(message)); | ||||||
|  |       ws.onmessage = (e) => { | ||||||
|  |        console.log('ws', e); | ||||||
|  |       }; | ||||||
|  |     }; | ||||||
|  | } | ||||||
| const props = defineProps({ | const props = defineProps({ | ||||||
|     isHide:{ |     isHide:{ | ||||||
|         type:Boolean, |         type:Boolean, | ||||||
| @ -214,6 +229,8 @@ function stopRoaming() { | |||||||
|     } |     } | ||||||
| } | } | ||||||
| onMounted(() => { | onMounted(() => { | ||||||
|  |     // 连接ws | ||||||
|  |     connectWs(); | ||||||
|     // 获取选中节点 |     // 获取选中节点 | ||||||
|     getCheckedNode(); |     getCheckedNode(); | ||||||
|     // 获取GPS数据 |     // 获取GPS数据 | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ | |||||||
|             <el-form :model="queryForm" :inline="true"> |             <el-form :model="queryForm" :inline="true"> | ||||||
|               <el-form-item label="版本号" prop="versions"> |               <el-form-item label="版本号" prop="versions"> | ||||||
|                 <el-select v-model="queryForm.versions" placeholder="选择版本号" @change="changeVersions"> |                 <el-select v-model="queryForm.versions" placeholder="选择版本号" @change="changeVersions"> | ||||||
|                   <el-option v-for="item in options" :key="item.versions" :label="item.versions" :value="item.versions" /> |                   <el-option v-for="item in options" :key="item.versions" :label="item.versionsName" :value="item.versions" /> | ||||||
|                 </el-select> |                 </el-select> | ||||||
|               </el-form-item> |               </el-form-item> | ||||||
|               <el-form-item label="表名" prop="sheet" v-if="activeTab != '3'"> |               <el-form-item label="表名" prop="sheet" v-if="activeTab != '3'"> | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.versions" |           :id="form.versions" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
| @ -162,7 +163,7 @@ const { form, rules, tableData } = toRefs(data); | |||||||
| //   form.value = { ...initFormData }; | //   form.value = { ...initFormData }; | ||||||
| //   leaveFormRef.value?.resetFields(); | //   leaveFormRef.value?.resetFields(); | ||||||
| // }; | // }; | ||||||
|  | const projectId = ref(''); | ||||||
| /** 获取详情 */ | /** 获取详情 */ | ||||||
| const getInfo = () => { | const getInfo = () => { | ||||||
|   loading.value = true; |   loading.value = true; | ||||||
| @ -170,6 +171,7 @@ const getInfo = () => { | |||||||
|   nextTick(async () => { |   nextTick(async () => { | ||||||
|     const res = await getVersionDetail(routeParams.value.id); |     const res = await getVersionDetail(routeParams.value.id); | ||||||
|     console.log(res); |     console.log(res); | ||||||
|  |     projectId.value = res.data.projectId; | ||||||
|     Object.assign(form.value, res.data); |     Object.assign(form.value, res.data); | ||||||
|     loading.value = false; |     loading.value = false; | ||||||
|     buttonLoading.value = false; |     buttonLoading.value = false; | ||||||
| @ -181,7 +183,7 @@ const sheets = ref([]); | |||||||
| const getSheetName = async () => { | const getSheetName = async () => { | ||||||
|   try { |   try { | ||||||
|     const params = { |     const params = { | ||||||
|       projectId: currentProject.value?.id, |       projectId: projectId.value, | ||||||
|       versions: form.value.versions |       versions: form.value.versions | ||||||
|     }; |     }; | ||||||
|     const res = await sheetList(params); |     const res = await sheetList(params); | ||||||
| @ -201,7 +203,7 @@ const changeSheet = () => { | |||||||
| //获取列表 | //获取列表 | ||||||
| const getListTable = async () => { | const getListTable = async () => { | ||||||
|   const res = await getTableList({ |   const res = await getTableList({ | ||||||
|     projectId: currentProject.value?.id, |     projectId: projectId.value, | ||||||
|     versions: form.value.versions, |     versions: form.value.versions, | ||||||
|     sheet: form.value.sheet, |     sheet: form.value.sheet, | ||||||
|     type: '2' |     type: '2' | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.versions" |           :id="form.versions" | ||||||
|           :status="form.status" |           :status="form.status" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
| @ -26,11 +27,11 @@ | |||||||
|                   <el-form-item label="版本号" prop="formNo"> |                   <el-form-item label="版本号" prop="formNo"> | ||||||
|                     <el-input :disabled="true" v-model="form.versions" placeholder="请输入文件名称" /> |                     <el-input :disabled="true" v-model="form.versions" placeholder="请输入文件名称" /> | ||||||
|                   </el-form-item> |                   </el-form-item> | ||||||
|                   <el-form-item label="表名" prop="sheet"> |                   <!-- <el-form-item label="表名" prop="sheet"> | ||||||
|                     <el-select v-model="form.sheet" placeholder="选择表名" @change="changeSheet"> |                     <el-select v-model="form.sheet" placeholder="选择表名" @change="changeSheet"> | ||||||
|                       <el-option v-for="item in sheets" :key="item" :label="item" :value="item" /> |                       <el-option v-for="item in sheets" :key="item" :label="item" :value="item" /> | ||||||
|                     </el-select> |                     </el-select> | ||||||
|                   </el-form-item> |                   </el-form-item> --> | ||||||
|                 </el-col> |                 </el-col> | ||||||
|               </el-row> |               </el-row> | ||||||
|             </div> |             </div> | ||||||
| @ -162,7 +163,7 @@ const { form, rules, tableData } = toRefs(data); | |||||||
| //   form.value = { ...initFormData }; | //   form.value = { ...initFormData }; | ||||||
| //   leaveFormRef.value?.resetFields(); | //   leaveFormRef.value?.resetFields(); | ||||||
| // }; | // }; | ||||||
|  | const projectId = ref(''); | ||||||
| /** 获取详情 */ | /** 获取详情 */ | ||||||
| const getInfo = () => { | const getInfo = () => { | ||||||
|   loading.value = true; |   loading.value = true; | ||||||
| @ -170,10 +171,11 @@ const getInfo = () => { | |||||||
|   nextTick(async () => { |   nextTick(async () => { | ||||||
|     const res = await getVersionDetail(routeParams.value.id); |     const res = await getVersionDetail(routeParams.value.id); | ||||||
|     console.log(res); |     console.log(res); | ||||||
|  |     projectId.value = res.data.projectId; | ||||||
|     Object.assign(form.value, res.data); |     Object.assign(form.value, res.data); | ||||||
|     loading.value = false; |     loading.value = false; | ||||||
|     buttonLoading.value = false; |     buttonLoading.value = false; | ||||||
|     getSheetName(); |     getListTable(); | ||||||
|   }); |   }); | ||||||
| }; | }; | ||||||
| const sheets = ref([]); | const sheets = ref([]); | ||||||
| @ -201,9 +203,9 @@ const changeSheet = () => { | |||||||
| //获取列表 | //获取列表 | ||||||
| const getListTable = async () => { | const getListTable = async () => { | ||||||
|   const res = await getTableList({ |   const res = await getTableList({ | ||||||
|     projectId: currentProject.value?.id, |     projectId: projectId.value, | ||||||
|     versions: form.value.versions, |     versions: form.value.versions, | ||||||
|     sheet: form.value.sheet, |     // sheet: form.value.sheet, | ||||||
|     type: '3' |     type: '3' | ||||||
|   }); |   }); | ||||||
|   if (res.code == 200) { |   if (res.code == 200) { | ||||||
|  | |||||||
| @ -11,6 +11,7 @@ | |||||||
|           :id="form.id" |           :id="form.id" | ||||||
|           :status="form.state" |           :status="form.state" | ||||||
|           :pageType="routeParams.type" |           :pageType="routeParams.type" | ||||||
|  |           :projectName="routeParams.projectName" | ||||||
|         /> |         /> | ||||||
|       </el-card> |       </el-card> | ||||||
|       <!-- 表单区域 --> |       <!-- 表单区域 --> | ||||||
|  | |||||||
| @ -9,6 +9,7 @@ | |||||||
|         :id="form.id" |         :id="form.id" | ||||||
|         :status="form.status" |         :status="form.status" | ||||||
|         :pageType="routeParams.type" |         :pageType="routeParams.type" | ||||||
|  |         :projectName="routeParams.projectName" | ||||||
|       /> |       /> | ||||||
|     </el-card> |     </el-card> | ||||||
|     <el-card shadow="never" style="height: 78vh; overflow-y: auto"> |     <el-card shadow="never" style="height: 78vh; overflow-y: auto"> | ||||||
|  | |||||||
| @ -38,6 +38,7 @@ | |||||||
|         <el-table v-loading="loading" border :data="taskList" @selection-change="handleSelectionChange"> |         <el-table v-loading="loading" border :data="taskList" @selection-change="handleSelectionChange"> | ||||||
|           <el-table-column type="selection" width="55" align="center" /> |           <el-table-column type="selection" width="55" align="center" /> | ||||||
|           <el-table-column align="center" type="index" label="序号" width="60"></el-table-column> |           <el-table-column align="center" type="index" label="序号" width="60"></el-table-column> | ||||||
|  |           <el-table-column align="center" prop="projectName" label="项目名称" :show-overflow-tooltip="true"></el-table-column> | ||||||
|           <el-table-column :show-overflow-tooltip="true" prop="flowName" align="center" label="流程名称"></el-table-column> |           <el-table-column :show-overflow-tooltip="true" prop="flowName" align="center" label="流程名称"></el-table-column> | ||||||
|           <el-table-column align="center" prop="categoryName" label="流程分类"></el-table-column> |           <el-table-column align="center" prop="categoryName" label="流程分类"></el-table-column> | ||||||
|           <el-table-column align="center" prop="version" label="版本号" width="90"> |           <el-table-column align="center" prop="version" label="版本号" width="90"> | ||||||
|  | |||||||
| @ -49,6 +49,7 @@ | |||||||
|  |  | ||||||
|           <el-table v-loading="loading" border :data="processInstanceList" @selection-change="handleSelectionChange"> |           <el-table v-loading="loading" border :data="processInstanceList" @selection-change="handleSelectionChange"> | ||||||
|             <el-table-column align="center" type="index" label="序号" width="60"></el-table-column> |             <el-table-column align="center" type="index" label="序号" width="60"></el-table-column> | ||||||
|  |             <el-table-column align="center" prop="projectName" label="项目名称" :show-overflow-tooltip="true"></el-table-column> | ||||||
|             <el-table-column v-if="false" align="center" prop="id" label="id"></el-table-column> |             <el-table-column v-if="false" align="center" prop="id" label="id"></el-table-column> | ||||||
|             <el-table-column :show-overflow-tooltip="true" prop="flowName" align="center" label="流程名称"> </el-table-column> |             <el-table-column :show-overflow-tooltip="true" prop="flowName" align="center" label="流程名称"> </el-table-column> | ||||||
|             <!-- <el-table-column align="center" prop="flowCode" label="流程定义编码"></el-table-column> --> |             <!-- <el-table-column align="center" prop="flowCode" label="流程定义编码"></el-table-column> --> | ||||||
| @ -248,7 +249,8 @@ const handleOpen = async (row, type) => { | |||||||
|     taskId: row.id, |     taskId: row.id, | ||||||
|     type: type, |     type: type, | ||||||
|     formCustom: row.formCustom, |     formCustom: row.formCustom, | ||||||
|     formPath: row.formPath |     formPath: row.formPath, | ||||||
|  |     projectName: row.projectName | ||||||
|   }); |   }); | ||||||
|   workflowCommon.routerJump(routerJumpVo, proxy); |   workflowCommon.routerJump(routerJumpVo, proxy); | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -33,6 +33,7 @@ | |||||||
|       <el-table v-loading="loading" border :data="taskList" @selection-change="handleSelectionChange"> |       <el-table v-loading="loading" border :data="taskList" @selection-change="handleSelectionChange"> | ||||||
|         <el-table-column type="selection" width="55" align="center" /> |         <el-table-column type="selection" width="55" align="center" /> | ||||||
|         <el-table-column align="center" type="index" label="序号" width="60"></el-table-column> |         <el-table-column align="center" type="index" label="序号" width="60"></el-table-column> | ||||||
|  |         <el-table-column align="center" prop="projectName" label="项目名称" :show-overflow-tooltip="true"></el-table-column> | ||||||
|         <el-table-column :show-overflow-tooltip="true" prop="flowName" align="center" label="流程名称"></el-table-column> |         <el-table-column :show-overflow-tooltip="true" prop="flowName" align="center" label="流程名称"></el-table-column> | ||||||
|         <el-table-column align="center" prop="categoryName" label="流程分类"></el-table-column> |         <el-table-column align="center" prop="categoryName" label="流程分类"></el-table-column> | ||||||
|         <el-table-column align="center" prop="nodeName" label="任务名称"></el-table-column> |         <el-table-column align="center" prop="nodeName" label="任务名称"></el-table-column> | ||||||
| @ -131,7 +132,8 @@ const handleView = (row) => { | |||||||
|     taskId: row.id, |     taskId: row.id, | ||||||
|     type: 'view', |     type: 'view', | ||||||
|     formCustom: row.formCustom, |     formCustom: row.formCustom, | ||||||
|     formPath: row.formPath |     formPath: row.formPath, | ||||||
|  |     projectName: row.projectName | ||||||
|   }); |   }); | ||||||
|   workflowCommon.routerJump(routerJumpVo, proxy); |   workflowCommon.routerJump(routerJumpVo, proxy); | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -37,6 +37,7 @@ | |||||||
|  |  | ||||||
|       <el-table v-loading="loading" border :data="taskList" @selection-change="handleSelectionChange"> |       <el-table v-loading="loading" border :data="taskList" @selection-change="handleSelectionChange"> | ||||||
|         <el-table-column align="center" type="index" label="序号" width="60"></el-table-column> |         <el-table-column align="center" type="index" label="序号" width="60"></el-table-column> | ||||||
|  |         <el-table-column align="center" prop="projectName" label="项目名称" :show-overflow-tooltip="true"></el-table-column> | ||||||
|         <el-table-column align="center" prop="flowName" label="流程名称"></el-table-column> |         <el-table-column align="center" prop="flowName" label="流程名称"></el-table-column> | ||||||
|         <el-table-column align="center" prop="categoryName" label="流程分类"></el-table-column> |         <el-table-column align="center" prop="categoryName" label="流程分类"></el-table-column> | ||||||
|         <el-table-column align="center" prop="version" label="版本号" width="90"> |         <el-table-column align="center" prop="version" label="版本号" width="90"> | ||||||
| @ -164,7 +165,8 @@ const handleView = (row: FlowTaskVO) => { | |||||||
|     taskId: row.id, |     taskId: row.id, | ||||||
|     type: 'view', |     type: 'view', | ||||||
|     formCustom: row.formCustom, |     formCustom: row.formCustom, | ||||||
|     formPath: row.formPath |     formPath: row.formPath, | ||||||
|  |     projectName: row.projectName | ||||||
|   }); |   }); | ||||||
|   workflowCommon.routerJump(routerJumpVo, proxy); |   workflowCommon.routerJump(routerJumpVo, proxy); | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -36,6 +36,7 @@ | |||||||
|       </template> |       </template> | ||||||
|       <el-table v-loading="loading" border :data="taskList" @selection-change="handleSelectionChange"> |       <el-table v-loading="loading" border :data="taskList" @selection-change="handleSelectionChange"> | ||||||
|         <el-table-column align="center" type="index" label="序号" width="60"></el-table-column> |         <el-table-column align="center" type="index" label="序号" width="60"></el-table-column> | ||||||
|  |         <el-table-column align="center" prop="projectName" label="项目名称" :show-overflow-tooltip="true"></el-table-column> | ||||||
|         <el-table-column :show-overflow-tooltip="true" prop="flowName" align="center" label="流程名称"></el-table-column> |         <el-table-column :show-overflow-tooltip="true" prop="flowName" align="center" label="流程名称"></el-table-column> | ||||||
|         <el-table-column align="center" prop="categoryName" label="流程分类"></el-table-column> |         <el-table-column align="center" prop="categoryName" label="流程分类"></el-table-column> | ||||||
|         <el-table-column align="center" prop="nodeName" label="任务名称"></el-table-column> |         <el-table-column align="center" prop="nodeName" label="任务名称"></el-table-column> | ||||||
| @ -167,7 +168,8 @@ const handleOpen = async (row: FlowTaskVO) => { | |||||||
|     type: 'approval', |     type: 'approval', | ||||||
|     formCustom: row.formCustom, |     formCustom: row.formCustom, | ||||||
|     planMonth: row.businessId.split('_')[1], |     planMonth: row.businessId.split('_')[1], | ||||||
|     formPath: row.formPath |     formPath: row.formPath, | ||||||
|  |     projectName: row.projectName | ||||||
|   }); |   }); | ||||||
|   workflowCommon.routerJump(routerJumpVo, proxy); |   workflowCommon.routerJump(routerJumpVo, proxy); | ||||||
| }; | }; | ||||||
|  | |||||||
							
								
								
									
										230
									
								
								vite.config.ts.timestamp-1757474994354-725e853699762.mjs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										230
									
								
								vite.config.ts.timestamp-1757474994354-725e853699762.mjs
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
		Reference in New Issue
	
	Block a user