From c694cffc8541d921e5256d33e14e3237454de950 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: Fri, 26 Jan 2024 09:43:31 +0800
Subject: [PATCH] 新提交
---
src/views/dataUpload/educateTrain/educateResource/index.vue | 217 +
src/views/dataUpload/saftyBaseInfo/equipInfo/components/addReport.vue | 305 ++
src/views/dataUpload/educateTrain/trainInfo/components/addReport.vue | 196 +
src/utils/toolsValidate.ts | 2
src/views/dataUpload/saftyBaseInfo/certInfo/component/certificateMember.vue | 214 +
src/api/dataUpload/contractorManage/index.ts | 69
src/assets/excelFiles/missionUpload.xlsx | 0
src/views/dataUpload/saftyBaseInfo/parkingInfo/index.vue | 223 +
src/views/intellectInspect/inspectBasic/discriminate/index.vue | 17
src/views/dataUpload/contractorManage/contractorUser/index.vue | 230 +
src/api/dataUpload/educateTrain/index.ts | 48
src/views/loginPage/loginPage.vue | 2
src/api/dataUpload/saftyBaseInfo/judgeReport.ts | 153 +
src/views/dataUpload/educateTrain/educateResource/components/addReport.vue | 123
src/views/riskWarningSys/warningBigScreen/index.vue | 6
src/views/dataUpload/contractorManage/contractorInfo/components/addReport.vue | 185 +
src/layout/navBars/breadcrumb/user.vue | 94
src/utils/request.ts | 2
src/views/dataUpload/saftyBaseInfo/productionInfo/components/addReport.vue | 286 ++
src/views/intellectInspect/inspectTaskManage/inspectTask/components/inspectTaskDialog.vue | 20
src/views/dataUpload/contractorManage/contractorUser/components/addReport.vue | 223 +
src/assets/newMenu/card-14.png | 0
src/views/dataUpload/saftyBaseInfo/certInfo/index.vue | 201 +
src/views/dataUpload/saftyBaseInfo/certInfo/component/messages.vue | 148 +
src/views/dataUpload/peopleLocate/index.vue | 251 +
src/assets/excelFiles/pointUpload.xlsx | 0
public/excelFiles/pointUpload.xlsx | 0
src/api/systemManage/user/index.ts | 14
src/views/dataUpload/contractorManage/contractorEnter/components/addReport.vue | 175 +
src/views/dataUpload/peopleLocate/components/addReport.vue | 291 ++
src/assets/excelFiles/RFIDUpload.xlsx | 0
src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue | 199 +
src/views/system/personShiftManage/scheduleManage/schedule/index.vue | 1
src/views/intellectInspect/intelligentLine/index.vue | 7
src/views/dataUpload/contractorManage/contractorEnter/index.vue | 219 +
src/views/dataUpload/saftyBaseInfo/cardInfo/components/addReport.vue | 172 +
src/views/dataUpload/saftyBaseInfo/equipInfo/index.vue | 258 ++
src/views/newHome/index.vue | 31
src/views/newSpecialWorkSystem/workTicket/wdsp/index.vue | 16
src/views/intellectInspect/inspectBasic/facility/components/facilityAreaDialog.vue | 2
src/views/dataUpload/peopleLocate/components/mapLocation.vue | 138 +
src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue | 12
src/assets/excelFiles/regionUpload.xlsx | 0
src/views/dataUpload/educateTrain/trainInfo/index.vue | 223 +
src/views/dataUpload/saftyBaseInfo/cardInfo/index.vue | 219 +
src/views/specialWorkSystem/specialIndex/index.vue | 119
src/views/system/menu/index.vue | 1
src/views/system/role/component/roleDialog.vue | 16
public/excelFiles/missionUpload.xlsx | 0
src/views/loginPage/component/accountLogin.vue | 1
src/views/dataUpload/saftyBaseInfo/crowInfo/components/addReport.vue | 205 +
src/views/dataUpload/saftyBaseInfo/certInfo/component/certificateDialog.vue | 138 +
src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue | 19
src/views/intellectInspect/inspectBasic/inspectPoint/index.vue | 16
src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue | 17
src/views/dataUpload/contractorManage/contractorInfo/index.vue | 226 +
src/views/intellectInspect/inspectTaskManage/inspectTask/components/upload.vue | 204 +
src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue | 60
src/assets/newMenu/icon14.png | 0
src/views/dataUpload/saftyBaseInfo/productionInfo/index.vue | 270 ++
src/views/system/user/component/userDialog.vue | 14
src/views/dataUpload/saftyBaseInfo/crowInfo/index.vue | 223 +
public/excelFiles/RFIDUpload.xlsx | 0
/dev/null | 193 -
src/views/system/user/index.vue | 119
src/views/intellectInspect/inspectBasic/facility/index.vue | 16
package.json | 4
src/api/intelligentLine/index.ts | 46
src/views/dataUpload/saftyBaseInfo/parkingInfo/components/addReport.vue | 202 +
src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue | 251 +
public/excelFiles/regionUpload.xlsx | 0
71 files changed, 7,202 insertions(+), 350 deletions(-)
diff --git a/package.json b/package.json
index c9b6baa..2b4e09b 100644
--- a/package.json
+++ b/package.json
@@ -34,10 +34,12 @@
"sortablejs": "^1.15.0",
"splitpanes": "^3.1.1",
"vue": "^3.2.36",
+ "vue-baidu-map-3x": "^1.0.35",
"vue-clipboard3": "^2.0.0",
"vue-grid-layout": "^3.0.0-beta1",
"vue-i18n": "^9.1.10",
"vue-router": "^4.0.15",
+ "vuedraggable": "^4.1.0",
"wangeditor": "^4.7.15",
"xlsx": "^0.18.5"
},
@@ -48,7 +50,7 @@
"@types/sortablejs": "^1.13.0",
"@typescript-eslint/eslint-plugin": "^5.27.0",
"@typescript-eslint/parser": "^5.27.0",
- "@vitejs/plugin-vue": "^2.3.3",
+ "@vitejs/plugin-vue": "^2.3.4",
"@vue/compiler-sfc": "^3.2.36",
"dotenv": "^16.0.1",
"eslint": "^8.17.0",
diff --git a/public/excelFiles/RFIDUpload.xlsx b/public/excelFiles/RFIDUpload.xlsx
new file mode 100644
index 0000000..ac7d026
--- /dev/null
+++ b/public/excelFiles/RFIDUpload.xlsx
Binary files differ
diff --git a/public/excelFiles/missionUpload.xlsx b/public/excelFiles/missionUpload.xlsx
new file mode 100644
index 0000000..f1298af
--- /dev/null
+++ b/public/excelFiles/missionUpload.xlsx
Binary files differ
diff --git a/public/excelFiles/pointUpload.xlsx b/public/excelFiles/pointUpload.xlsx
new file mode 100644
index 0000000..2d26ce7
--- /dev/null
+++ b/public/excelFiles/pointUpload.xlsx
Binary files differ
diff --git a/public/excelFiles/regionUpload.xlsx b/public/excelFiles/regionUpload.xlsx
new file mode 100644
index 0000000..e1f0397
--- /dev/null
+++ b/public/excelFiles/regionUpload.xlsx
Binary files differ
diff --git a/src/api/dataUpload/contractorManage/index.ts b/src/api/dataUpload/contractorManage/index.ts
new file mode 100644
index 0000000..62ce95e
--- /dev/null
+++ b/src/api/dataUpload/contractorManage/index.ts
@@ -0,0 +1,69 @@
+import request from '/@/utils/request';
+
+export function contractorApi() {
+ return {
+ getContractorList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addContractor: (data: Array<any>) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/contractor`,
+ method: 'post',
+ data: data
+ });
+ },
+ delContractor: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/del`,
+ method: 'post',
+ data: data
+ });
+ },
+ getContractorUserList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/user/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addContractorUser: (data: Array<any>) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/user`,
+ method: 'post',
+ data: data
+ });
+ },
+ delContractorUser: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/user/del`,
+ method: 'post',
+ data: data
+ });
+ },
+ getContractorEnterList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/user/enter/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addContractorEnter: (data: Array<any>) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/user/enter`,
+ method: 'post',
+ data: data
+ });
+ },
+ delContractorEnter: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/contractor/user/enter/del`,
+ method: 'post',
+ data: data
+ });
+ }
+ };
+}
diff --git a/src/api/dataUpload/educateTrain/index.ts b/src/api/dataUpload/educateTrain/index.ts
new file mode 100644
index 0000000..02cae8c
--- /dev/null
+++ b/src/api/dataUpload/educateTrain/index.ts
@@ -0,0 +1,48 @@
+import request from '/@/utils/request';
+
+export function educateTrainApi() {
+ return {
+ getEducateList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/train/resource/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addEducate: (data: Array<any>) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/train/resource`,
+ method: 'post',
+ data: data
+ });
+ },
+ delEducate: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/train/resource/del`,
+ method: 'post',
+ data: data
+ });
+ },
+ getTrainList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/train/info/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addTrain: (data: Array<any>) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/train/info`,
+ method: 'post',
+ data: data
+ });
+ },
+ delTrain: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/train/info/del`,
+ method: 'post',
+ data: data
+ });
+ }
+ };
+}
diff --git a/src/api/dataUpload/saftyBaseInfo/judgeReport.ts b/src/api/dataUpload/saftyBaseInfo/judgeReport.ts
new file mode 100644
index 0000000..adfbc48
--- /dev/null
+++ b/src/api/dataUpload/saftyBaseInfo/judgeReport.ts
@@ -0,0 +1,153 @@
+import request from '/@/utils/request';
+
+export function judgeReportApi() {
+ return {
+ getCardList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/certificate/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addCard: (data: Array<any>) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/certificate`,
+ method: 'post',
+ data: data
+ });
+ },
+ delCard: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/certificate/del`,
+ method: 'post',
+ data: data
+ });
+ },
+ getJudgeList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/assessment/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addJudge: (data: Array<any>) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/assessment`,
+ method: 'post',
+ data: data
+ });
+ },
+ delJudge: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/assessment/del`,
+ method: 'post',
+ data: data
+ });
+ },
+ getProductList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/craft/manage/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addProduct: (data: Array<any>) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/craft/manage`,
+ method: 'post',
+ data: data
+ });
+ },
+ delProduct: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/craft/manage/del`,
+ method: 'post',
+ data: data
+ });
+ },
+ getParkingList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/start/stop/manage/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addParking: (data: Array<any>) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/start/stop/manage`,
+ method: 'post',
+ data: data
+ });
+ },
+ delParking: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/start/stop/manage/del`,
+ method: 'post',
+ data: data
+ });
+ },
+ getCrowList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/person/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addCrow: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/person`,
+ method: 'post',
+ data: data
+ });
+ },
+ delCrow: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/person/del`,
+ method: 'post',
+ data: data
+ });
+ },
+ getEquipList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/device/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addEquip: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/device`,
+ method: 'post',
+ data: data
+ });
+ },
+ delEquip: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/device/del`,
+ method: 'post',
+ data: data
+ });
+ },
+ getPositionList: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/person/position/list`,
+ method: 'post',
+ data: data
+ });
+ },
+ addPosition: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/person/position`,
+ method: 'post',
+ data: data
+ });
+ },
+ delPosition: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/report/assemble/person/position/del`,
+ method: 'post',
+ data: data
+ });
+ }
+ };
+}
diff --git a/src/api/intelligentLine/index.ts b/src/api/intelligentLine/index.ts
index d79e528..d88aeb2 100644
--- a/src/api/intelligentLine/index.ts
+++ b/src/api/intelligentLine/index.ts
@@ -17,6 +17,50 @@
url: import.meta.env.VITE_API_URL_SOCKET + `/ws/namesrv/get/one?srv=safeplatform-websocket`,
method: 'get'
});
- }
+ },
+
+ uploadMission: (data: object) => {
+ return request({
+ headers: {
+ "Content-Type": "multipart/form-data",
+ },
+ url: import.meta.env.VITE_API_URL + `/SafeCheckTaskUnit/import`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ uploadRfid: (data: object) => {
+ return request({
+ headers: {
+ "Content-Type": "multipart/form-data",
+ },
+ url: import.meta.env.VITE_API_URL + `/SafeCheckRfid/import`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ uploadRegion: (data: object) => {
+ return request({
+ headers: {
+ "Content-Type": "multipart/form-data",
+ },
+ url: import.meta.env.VITE_API_URL + `/safeCheckRegion/import`,
+ method: 'post',
+ data: data
+ });
+ },
+
+ uploadPoint: (data: object) => {
+ return request({
+ headers: {
+ "Content-Type": "multipart/form-data",
+ },
+ url: import.meta.env.VITE_API_URL + `/safeCheckPoint/import`,
+ method: 'post',
+ data: data
+ });
+ },
};
}
diff --git a/src/api/systemManage/user/index.ts b/src/api/systemManage/user/index.ts
index bc6d4fe..ff9950d 100644
--- a/src/api/systemManage/user/index.ts
+++ b/src/api/systemManage/user/index.ts
@@ -91,5 +91,19 @@
data: data
});
},
+ pwdMod: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/auth/pwd-change`,
+ method: 'post',
+ data: data
+ });
+ },
+ pwdModSelf: (data: object) => {
+ return request({
+ url: import.meta.env.VITE_API_URL + `/auth/pwd-change/self`,
+ method: 'post',
+ data: data
+ });
+ },
};
}
diff --git a/src/assets/excelFiles/RFIDUpload.xlsx b/src/assets/excelFiles/RFIDUpload.xlsx
new file mode 100644
index 0000000..ac7d026
--- /dev/null
+++ b/src/assets/excelFiles/RFIDUpload.xlsx
Binary files differ
diff --git a/src/assets/excelFiles/missionUpload.xlsx b/src/assets/excelFiles/missionUpload.xlsx
new file mode 100644
index 0000000..f1298af
--- /dev/null
+++ b/src/assets/excelFiles/missionUpload.xlsx
Binary files differ
diff --git a/src/assets/excelFiles/pointUpload.xlsx b/src/assets/excelFiles/pointUpload.xlsx
new file mode 100644
index 0000000..2d26ce7
--- /dev/null
+++ b/src/assets/excelFiles/pointUpload.xlsx
Binary files differ
diff --git a/src/assets/excelFiles/regionUpload.xlsx b/src/assets/excelFiles/regionUpload.xlsx
new file mode 100644
index 0000000..e1f0397
--- /dev/null
+++ b/src/assets/excelFiles/regionUpload.xlsx
Binary files differ
diff --git a/src/assets/newMenu/card-14.png b/src/assets/newMenu/card-14.png
new file mode 100644
index 0000000..efd7b7a
--- /dev/null
+++ b/src/assets/newMenu/card-14.png
Binary files differ
diff --git a/src/assets/newMenu/icon14.png b/src/assets/newMenu/icon14.png
new file mode 100644
index 0000000..2b1a9b5
--- /dev/null
+++ b/src/assets/newMenu/icon14.png
Binary files differ
diff --git a/src/layout/navBars/breadcrumb/user.vue b/src/layout/navBars/breadcrumb/user.vue
index 6d8e1e8..70ef2c0 100644
--- a/src/layout/navBars/breadcrumb/user.vue
+++ b/src/layout/navBars/breadcrumb/user.vue
@@ -66,6 +66,7 @@
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item command="/newMenu">{{ $t('message.user.dropdown1') }}</el-dropdown-item>
+ <el-dropdown-item @click="showPwdDialog = true">修改密码</el-dropdown-item>
<!-- <el-dropdown-item command="wareHouse">{{ $t('message.user.dropdown6') }}</el-dropdown-item>-->
<!-- <el-dropdown-item command="/personal">{{ $t('message.user.dropdown2') }}</el-dropdown-item>-->
<!-- <el-dropdown-item command="/404">{{ $t('message.user.dropdown3') }}</el-dropdown-item>-->
@@ -74,6 +75,26 @@
</el-dropdown-menu>
</template>
</el-dropdown>
+ <el-dialog title="修改密码" v-model="showPwdDialog" width="500px">
+ <el-form :model="pwdForm" size="default" ref="pwdRef" :rules="pwdFormRules" label-width="110px">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="新密码" prop="newPassword">
+ <el-input v-model.trim="pwdForm.newPassword" placeholder="请输入" type="password" show-password>
+ </el-input>
+ </el-form-item>
+ <el-form-item label="确认新密码" prop="rePassword">
+ <el-input v-model.trim="pwdForm.rePassword" placeholder="请输入" type="password" show-password>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="showPwdDialog = !showPwdDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onPwdSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
<Search ref="searchRef" />
</div>
</div>
@@ -102,6 +123,8 @@
import { dynamicRoutes } from '/@/router/route';
import Cookies from 'js-cookie';
import {useRoutesList} from "/@/stores/routesList";
+import {verifyPwd} from "/@/utils/toolsValidate";
+import {userApi} from "/@/api/systemManage/user";
export default defineComponent({
name: 'layoutBreadcrumbUser',
@@ -116,11 +139,42 @@
const { userInfos } = storeToRefs(stores);
const { themeConfig } = storeToRefs(storesThemeConfig);
const searchRef = ref();
+ const pwdRef = ref();
+ const validatePwd = (rule: any, value: any, callback: any)=>{
+ if(value === ''){
+ callback(new Error('请输入密码'))
+ }else{
+ if(!verifyPwd(value)){
+ callback(new Error('密码须包含字母、数字、特殊字符,长度在6-16之间'))
+ }else{
+ callback()
+ }
+ }
+ }
+ const equalToPassword = (rule: any, value: any, callback: any) => {
+ if(value == ''){
+ callback(new Error("请再次确认密码"))
+ }else if (state.pwdForm.newPassword !== value) {
+ callback(new Error("两次输入的密码不一致"))
+ } else {
+ callback();
+ }
+ };
const state = reactive({
isScreenfull: false,
disabledI18n: 'zh-cn',
disabledSize: 'large',
- systemName: ''
+ systemName: '',
+ showPwdDialog: false,
+ pwdForm: {
+ uid: Cookies.get('uid'),
+ newPassword: '',
+ rePassword: ''
+ },
+ pwdFormRules: {
+ newPassword: [{ required: true, validator: validatePwd, trigger: 'blur' }],
+ rePassword: [{ required: true, validator: equalToPassword, trigger: "blur" }]
+ }
});
// 设置分割样式
const layoutUserFlexNum = computed(() => {
@@ -131,6 +185,42 @@
else num = '';
return num;
});
+
+ const onPwdSubmit = async () => {
+ pwdRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ const {rePassword,...data} = state.pwdForm
+ let res = await userApi().pwdModSelf(data);
+ if (res.data.code === '200') {
+ state.showPwdDialog = false
+ ElMessage({
+ type: 'success',
+ message: '密码修改成功,请重新登录',
+ duration: 2000
+ })
+ setTimeout(()=>{
+ useLoginApi()
+ .signOut()
+ .then(() => {
+ Session.clear()
+ window.location.href = '/'
+ })
+ },2000)
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善信息'
+ })
+ }
+ })
+ }
+
// 全屏点击时
const onScreenfullClick = () => {
if (!screenfull.isEnabled) {
@@ -281,6 +371,8 @@
});
return {
userInfos,
+ pwdRef,
+ onPwdSubmit,
backToMenu,
onLayoutSetingClick,
onHandleCommandClick,
diff --git a/src/utils/request.ts b/src/utils/request.ts
index 5fd3013..9647e83 100644
--- a/src/utils/request.ts
+++ b/src/utils/request.ts
@@ -9,7 +9,7 @@
// 配置新建一个 axios 实例
const service = axios.create({
// baseURL: import.meta.env.VITE_API_URL as any,
- timeout: 50000,
+ timeout: 500000,
headers: { 'Content-Type': 'application/json' }
});
diff --git a/src/utils/toolsValidate.ts b/src/utils/toolsValidate.ts
index 485fd04..8bc79fd 100644
--- a/src/utils/toolsValidate.ts
+++ b/src/utils/toolsValidate.ts
@@ -210,7 +210,7 @@
*/
export function verifyPhone(val: string) {
// false: 手机号码不正确
- if (!/^((12[0-9])|(13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0|1,5-9]))\d{8}$/.test(val)) return false;
+ if (!/^\d{11}$/.test(val)) return false;
// true: 手机号码正确
else return true;
}
diff --git a/src/views/dataUpload/contractorManage/contractorEnter/components/addReport.vue b/src/views/dataUpload/contractorManage/contractorEnter/components/addReport.vue
new file mode 100644
index 0000000..3836d4f
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/contractorEnter/components/addReport.vue
@@ -0,0 +1,175 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="人员" prop="userId">
+ <el-select v-model="form.userId" filterable placeholder="请选择人员" clearable>
+ <el-option v-for="(item,index) in userList" :key="index" :label="item.userName" :value="item.uuid"/>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true">
+ <el-form-item label="删除状态" prop="deleted">
+ <el-radio-group v-model="form.deleted">
+ <el-radio label="0">未删除</el-radio>
+ <el-radio label="1">已删除</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string
+ isShowDialog: boolean
+ form: {
+ uuid: string
+ companyCode: string
+ userId: string
+ userName: string
+ contractorId: string
+ contractorName: string
+ deleted: string
+ }
+ rules:{}
+ contractorList: []
+ userList: []
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ setup(props, context) {
+ const formRef = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ uuid: '',
+ companyCode: '652310082',
+ contractorId: '',
+ contractorName: '',
+ userId: '',
+ userName: '',
+ deleted: '0'
+ },
+ rules:{
+ userId: [{ required: true, message: '请选择人员', trigger: 'blur' }]
+ },
+ contractorList: [],
+ userList: []
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object) => {
+ state.isShowDialog = true
+ getDataList()
+ getUserList()
+ if (type === 'add') {
+ state.title = '新增上报';
+ state.form = {
+ uuid: '',
+ companyCode: '652310082',
+ contractorId: '',
+ contractorName: '',
+ userId: '',
+ userName: '',
+ deleted: '0'
+ }
+ }else{
+ state.title = '重新上报';
+ state.form = {
+ uuid: data.uuid,
+ companyCode: '652310082',
+ contractorId: '',
+ contractorName: '',
+ userId: '',
+ userName: '',
+ deleted: '0'
+ }
+ }
+ };
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ state.form.contractorId = state.userList.find(i=>i.uuid == state.form.userId)?.contractorId
+ state.form.contractorName = state.contractorList.find(i=>i.uuid == state.form.contractorId)?.contractorName
+ const res = await contractorApi().addContractorEnter([state.form])
+ if(res.data.code == 200){
+ ElMessage({
+ type:'success',
+ message:'数据上报成功'
+ })
+ state.isShowDialog = false
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ context.emit('refresh');
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善基本信息'
+ })
+ }
+ })
+ }
+
+ const getDataList = async ()=>{
+ const res = await contractorApi().getContractorList({searchParams: {}, pageIndex: 1, pageSize: 999})
+ if(res.data.code == 200){
+ state.contractorList = res.data.data
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+ const getUserList = async ()=>{
+ const res = await contractorApi().getContractorUserList({searchParams: {}, pageIndex: 1, pageSize: 999})
+ if(res.data.code == 200){
+ state.userList = res.data.data
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ return {
+ formRef,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/contractorManage/contractorEnter/index.vue b/src/views/dataUpload/contractorManage/contractorEnter/index.vue
new file mode 100644
index 0000000..da0eaf2
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/contractorEnter/index.vue
@@ -0,0 +1,219 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createDate" label="上报时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="companyCode" label="企业编码" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="contractorId" label="承包商Id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createBy" label="创建人" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createDate" label="创建时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="updateBy" label="最新修改人" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="updateDate" label="修改时间" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+ <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+interface TableDataState {
+ reportData: [],
+ listQuery: {
+ searchParams: {}
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+}
+
+export default defineComponent({
+ name: 'contractorEnter',
+ components: {addReport },
+ setup() {
+ const reportRef= ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ listQuery: {
+ searchParams: {},
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null
+ });
+
+ // 页面加载时
+ onMounted(() => {
+ getData()
+ });
+
+ const getData = async ()=>{
+ const res = await contractorApi().getContractorEnterList(state.listQuery)
+ if(res.data.code == 200){
+ state.reportData = res.data.data
+ state.total = res.data.total
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog=(type:string,data:object)=>{
+ reportRef.value.open(type,data)
+ }
+
+ // 删除用户
+ const onRowDel = (row: Object) => {
+ ElMessageBox.confirm(`此操作将永久删除该条数据,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await contractorApi().delContractorEnter({ids: [row.id]})
+ if(res.data.code == 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {});
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ return {
+ reportRef,
+ openDialog,
+ getData,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ .el-card {
+ border: 0;
+ }
+}
+</style>
diff --git a/src/views/dataUpload/contractorManage/contractorInfo/components/addReport.vue b/src/views/dataUpload/contractorManage/contractorInfo/components/addReport.vue
new file mode 100644
index 0000000..96ebef1
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/contractorInfo/components/addReport.vue
@@ -0,0 +1,185 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="承包商名称" prop="contractorName">
+ <el-input v-model.trim="form.contractorName" placeholder="承包商名称" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="承包商统一信用码" prop="contractorNumber">
+ <el-input v-model.trim="form.contractorNumber" placeholder="承包商统一信用码" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="承包商法人" prop="contractorPerson">
+ <el-input v-model.trim="form.contractorPerson" placeholder="承包商法人" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="合作状态" prop="contractorState">
+ <el-select v-model="form.contractorState" placeholder="请选择合作状态">
+ <el-option :key="1" label="合作中" :value="1"/>
+ <el-option :key="2" label="曾合作" :value="2"/>
+ <el-option :key="3" label="不合作" :value="3"/>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="承包商类型" prop="contractorType">
+ <el-input v-model.trim="form.contractorType" placeholder="承包商类型" clearable></el-input>
+ </el-form-item>
+ </el-col>
+<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">-->
+<!-- <el-form-item label="创建人姓名" prop="createBy">-->
+<!-- <el-input v-model.trim="form.createBy" placeholder="创建人姓名" clearable></el-input>-->
+<!-- </el-form-item>-->
+<!-- </el-col>-->
+<!-- <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">-->
+<!-- <el-form-item label="修改人姓名" prop="updateBy">-->
+<!-- <el-input v-model.trim="form.updateBy" placeholder="修改人姓名" clearable></el-input>-->
+<!-- </el-form-item>-->
+<!-- </el-col>-->
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true">
+ <el-form-item label="删除状态" prop="deleted">
+ <el-radio-group v-model="form.deleted">
+ <el-radio label="0">未删除</el-radio>
+ <el-radio label="1">已删除</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string
+ isShowDialog: boolean
+ form: {
+ uuid: string
+ companyCode: string
+ contractorName: string
+ contractorNumber: string
+ contractorPerson: string
+ contractorState: null | number
+ contractorType: string
+ deleted: string
+ // createBy: string
+ // updateBy: string
+ }
+ rules:{}
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ setup(props, context) {
+ const formRef = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ uuid: '',
+ companyCode: '652310082',
+ contractorName: '',
+ contractorNumber: '',
+ contractorPerson: '',
+ contractorState: null,
+ contractorType: '',
+ deleted: '0'
+ },
+ rules:{
+ contractorName: [{ required: true, message: '请填写承包商名称', trigger: 'blur' }],
+ contractorNumber: [{ required: true, message: '请填写承包商统一信用码', trigger: 'blur' }],
+ contractorPerson: [{ required: true, message: '请填写承包商法人', trigger: 'blur' }],
+ contractorState: [{ required: true, message: '请选择合作状态', trigger: 'blur' }],
+ contractorType: [{ required: true, message: '请填写承包商类型', trigger: 'blur' }]
+ }
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object) => {
+ state.isShowDialog = true;
+ if (type === 'add') {
+ state.title = '新增上报';
+ state.form = {
+ uuid: '',
+ companyCode: '652310082',
+ contractorName: '',
+ contractorNumber: '',
+ contractorPerson: '',
+ contractorState: null,
+ contractorType: '',
+ deleted: '0'
+ }
+ }else{
+ state.title = '重新上报';
+ state.form = {
+ uuid: data.uuid,
+ companyCode: '652310082',
+ contractorName: '',
+ contractorNumber: '',
+ contractorPerson: '',
+ contractorState: null,
+ contractorType: '',
+ deleted: '0'
+ }
+ }
+ };
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ const res = await contractorApi().addContractor([state.form])
+ if(res.data.code == 200){
+ ElMessage({
+ type:'success',
+ message:'数据上报成功'
+ })
+ state.isShowDialog = false
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ context.emit('refresh');
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善基本信息'
+ })
+ }
+ })
+ }
+
+ return {
+ formRef,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/contractorManage/contractorInfo/index.vue b/src/views/dataUpload/contractorManage/contractorInfo/index.vue
new file mode 100644
index 0000000..383b64f
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/contractorInfo/index.vue
@@ -0,0 +1,226 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+<!-- <el-table-column prop="createDate" label="上报时间" show-overflow-tooltip></el-table-column>-->
+ <el-table-column prop="contractorName" label="承包商名称" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="contractorNumber" label="承包商统一信用码" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="contractorPerson" label="承包商法人" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="contractorState" label="合作状态" show-overflow-tooltip>
+ <template #default="scope">
+ {{scope.row.contractorState == 1?'合作中':scope.row.contractorState == 2?'曾合作':'不合作'}}
+ </template>
+ </el-table-column>
+ <el-table-column prop="contractorType" label="承包商类型" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createBy" label="创建人姓名" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createTime" label="创建时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="updateBy" label="最新修改人" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="updateTime" label="修改时间" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+ <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+interface TableDataState {
+ reportData: [],
+ listQuery: {
+ searchParams: {}
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+}
+
+export default defineComponent({
+ name: 'contractorInfo',
+ components: {addReport },
+ setup() {
+ const reportRef= ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ listQuery: {
+ searchParams: {},
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null
+ });
+
+ // 页面加载时
+ onMounted(() => {
+ getData()
+ });
+
+ const getData = async ()=>{
+ const res = await contractorApi().getContractorList(state.listQuery)
+ if(res.data.code == 200){
+ state.reportData = res.data.data
+ state.total = res.data.total
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog=(type:string,data:object)=>{
+ reportRef.value.open(type,data)
+ }
+
+ // 删除用户
+ const onRowDel = (row: Object) => {
+ ElMessageBox.confirm(`此操作将永久删除:“${row.contractorName}”,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await contractorApi().delContractor({ids: [row.id]})
+ if(res.data.code == 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {});
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ return {
+ reportRef,
+ openDialog,
+ getData,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ .el-card {
+ border: 0;
+ }
+}
+</style>
diff --git a/src/views/dataUpload/contractorManage/contractorUser/components/addReport.vue b/src/views/dataUpload/contractorManage/contractorUser/components/addReport.vue
new file mode 100644
index 0000000..c1b5173
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/contractorUser/components/addReport.vue
@@ -0,0 +1,223 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="身份证号" prop="cardNumber">
+ <el-input v-model.trim="form.cardNumber" placeholder="身份证号" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="承包商" prop="contractorId">
+ <el-select v-model="form.contractorId" filterable placeholder="请选择承包商" clearable>
+ <el-option v-for="(item,index) in contractorList" :key="index" :label="item.contractorName" :value="item.uuid"/>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="电话" prop="phone">
+ <el-input v-model.trim="form.phone" placeholder="电话" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="岗位" prop="post">
+ <el-input v-model.trim="form.post" placeholder="岗位" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="项目名" prop="projectName">
+ <el-input v-model.trim="form.projectName" placeholder="项目名" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="性别" prop="sex">
+ <el-radio-group v-model="form.sex">
+ <el-radio label="男">男</el-radio>
+ <el-radio label="女">女</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="用户姓名" prop="userName">
+ <el-input v-model.trim="form.userName" placeholder="用户姓名" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="用户状态" prop="userState">
+ <el-radio-group v-model="form.userState">
+ <el-radio :label="1">正常</el-radio>
+ <el-radio :label="0">不合格</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="title == '新增上报'? false : true">
+ <el-form-item label="删除状态" prop="deleted">
+ <el-radio-group v-model="form.deleted">
+ <el-radio label="0">未删除</el-radio>
+ <el-radio label="1">已删除</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string
+ isShowDialog: boolean
+ form: {
+ uuid: string
+ cardNumber: string
+ companyCode: string
+ contractorId: string
+ phone: string
+ post: string
+ projectName: string
+ sex: string
+ userName: string
+ userState: null | number
+ deleted: string
+ }
+ rules:{},
+ contractorList: []
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ setup(props, context) {
+ const formRef = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ uuid: '',
+ cardNumber: '',
+ companyCode: '652310082',
+ contractorId: '',
+ phone: '',
+ post: '',
+ projectName: '',
+ sex: '',
+ userName: '',
+ userState: null,
+ deleted: '0'
+ },
+ rules:{
+ cardNumber: [{ required: true, message: '请填写身份证号', trigger: 'blur' }],
+ contractorId: [{ required: true, message: '请选择承包商', trigger: 'blur' }],
+ phone: [{ required: true, message: '请填写电话', trigger: 'blur' }],
+ post: [{ required: true, message: '请填写岗位', trigger: 'blur' }],
+ projectName: [{ required: true, message: '请填写项目名', trigger: 'blur' }],
+ sex: [{ required: true, message: '请选择性别', trigger: 'blur' }],
+ userName: [{ required: true, message: '请填写用户姓名', trigger: 'blur' }],
+ userState: [{ required: true, message: '请选择用户状态', trigger: 'blur' }]
+ },
+ contractorList: []
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object) => {
+ state.isShowDialog = true
+ getDataList()
+ if (type === 'add') {
+ state.title = '新增上报';
+ state.form = {
+ uuid: '',
+ cardNumber: '',
+ companyCode: '652310082',
+ contractorId: '',
+ phone: '',
+ post: '',
+ projectName: '',
+ sex: '',
+ userName: '',
+ userState: null,
+ deleted: '0'
+ }
+ }else{
+ state.title = '重新上报';
+ state.form = {
+ uuid: data.uuid,
+ cardNumber: '',
+ companyCode: '652310082',
+ contractorId: '',
+ phone: '',
+ post: '',
+ projectName: '',
+ sex: '',
+ userName: '',
+ userState: null,
+ deleted: '0'
+ }
+ }
+ };
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ const res = await contractorApi().addContractorUser([state.form])
+ if(res.data.code == 200){
+ ElMessage({
+ type:'success',
+ message:'数据上报成功'
+ })
+ state.isShowDialog = false
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ context.emit('refresh')
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善基本信息'
+ })
+ }
+ })
+ }
+
+ const getDataList = async ()=>{
+ const res = await contractorApi().getContractorList({searchParams: {}, pageIndex: 1, pageSize: 999})
+ if(res.data.code == 200){
+ state.contractorList = res.data.data
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ return {
+ formRef,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/contractorManage/contractorUser/index.vue b/src/views/dataUpload/contractorManage/contractorUser/index.vue
new file mode 100644
index 0000000..c9ea573
--- /dev/null
+++ b/src/views/dataUpload/contractorManage/contractorUser/index.vue
@@ -0,0 +1,230 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createDate" label="上报时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="cardNumber" label="身份证号" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="companyCode" label="企业编码" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="contractorId" label="承包商Id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createBy" label="创建人" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createDate" label="创建时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="phone" label="电话" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="post" label="岗位" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="projectName" label="项目名" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="sex" label="性别" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="userName" label="用户姓名" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="userState" label="用户状态" show-overflow-tooltip>
+ <template #default="scope">
+ {{scope.row.userState == 1? '正常': scope.row.userState == 0? '不合格': ''}}
+ </template>
+ </el-table-column>
+ <el-table-column prop="updateBy" label="最新修改人" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="updateDate" label="修改时间" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+ <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {contractorApi} from "/@/api/dataUpload/contractorManage";
+interface TableDataState {
+ reportData: [],
+ listQuery: {
+ searchParams: {}
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+}
+
+export default defineComponent({
+ name: 'contractorUser',
+ components: {addReport },
+ setup() {
+ const reportRef= ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ listQuery: {
+ searchParams: {},
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null
+ });
+
+ // 页面加载时
+ onMounted(() => {
+ getData()
+ });
+
+ const getData = async ()=>{
+ const res = await contractorApi().getContractorUserList(state.listQuery)
+ if(res.data.code == 200){
+ state.reportData = res.data.data
+ state.total = res.data.total
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog=(type:string,data:object)=>{
+ reportRef.value.open(type,data)
+ }
+
+ // 删除用户
+ const onRowDel = (row: Object) => {
+ ElMessageBox.confirm(`此操作将永久删除该条数据,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await contractorApi().delContractorUser({ids: [row.id]})
+ if(res.data.code == 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {});
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ return {
+ reportRef,
+ openDialog,
+ getData,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ .el-card {
+ border: 0;
+ }
+}
+</style>
diff --git a/src/views/dataUpload/educateTrain/educateResource/components/addReport.vue b/src/views/dataUpload/educateTrain/educateResource/components/addReport.vue
new file mode 100644
index 0000000..1c28d83
--- /dev/null
+++ b/src/views/dataUpload/educateTrain/educateResource/components/addReport.vue
@@ -0,0 +1,123 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="课程数量" prop="courseNum">
+ <el-input v-model.trim.number="form.courseNum" placeholder="课程数量" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="课件数量" prop="coursewareNum">
+ <el-input v-model.trim.number="form.coursewareNum" placeholder="课件数量" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="试题数量" prop="questionsNum">
+ <el-input v-model.trim.number="form.questionsNum" placeholder="试题数量" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {educateTrainApi} from "/@/api/dataUpload/educateTrain";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string
+ isShowDialog: boolean
+ form: {
+ courseNum: number | null
+ coursewareNum: number | null
+ questionsNum: number | null
+ }
+ rules:{}
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ setup(props, context) {
+ const formRef = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ courseNum: null,
+ coursewareNum: null,
+ questionsNum: null
+ },
+ rules:{
+ courseNum: [{ required: true, message: '请填写课程数量', trigger: 'blur' }],
+ coursewareNum: [{ required: true, message: '请填写课件数量', trigger: 'blur' }],
+ questionsNum: [{ required: true, message: '请填写试题数量', trigger: 'blur' }]
+ }
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object) => {
+ state.isShowDialog = true;
+ if (type === 'add') {
+ state.title = '新增上报';
+ state.form = {
+ courseNum: null,
+ coursewareNum: null,
+ questionsNum: null
+ }
+ }
+ };
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ const res = await educateTrainApi().addEducate([state.form])
+ if(res.data.code == 200){
+ ElMessage({
+ type:'success',
+ message:'数据上报成功'
+ })
+ state.isShowDialog = false
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ context.emit('refresh');
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善基本信息'
+ })
+ }
+ })
+ }
+
+ return {
+ formRef,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/educateTrain/educateResource/index.vue b/src/views/dataUpload/educateTrain/educateResource/index.vue
new file mode 100644
index 0000000..1726c8d
--- /dev/null
+++ b/src/views/dataUpload/educateTrain/educateResource/index.vue
@@ -0,0 +1,217 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createDate" label="创建时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="courseNum" label="课程数量" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="coursewareNum" label="课件数量" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="questionsNum" label="试题数量" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="updateDate" label="修改时间" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+<!-- <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>-->
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {educateTrainApi} from "/@/api/dataUpload/educateTrain";
+interface TableDataState {
+ reportData: [],
+ listQuery: {
+ searchParams: {}
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+}
+
+export default defineComponent({
+ name: 'educateResource',
+ components: {addReport },
+ setup() {
+ const reportRef= ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ listQuery: {
+ searchParams: {},
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null
+ });
+
+ // 页面加载时
+ onMounted(() => {
+ getData()
+ });
+
+ const getData = async ()=>{
+ const res = await educateTrainApi().getEducateList(state.listQuery)
+ if(res.data.code == 200){
+ state.reportData = res.data.data
+ state.total = res.data.total
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog=(type:string,data:object)=>{
+ reportRef.value.open(type,data)
+ }
+
+ // 删除用户
+ const onRowDel = (row: Object) => {
+ ElMessageBox.confirm(`此操作将永久删除该记录,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await educateTrainApi().delEducate({ids: [row.id]})
+ if(res.data.code == 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {});
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ return {
+ reportRef,
+ openDialog,
+ getData,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ .el-card {
+ border: 0;
+ }
+}
+</style>
diff --git a/src/views/dataUpload/educateTrain/trainInfo/components/addReport.vue b/src/views/dataUpload/educateTrain/trainInfo/components/addReport.vue
new file mode 100644
index 0000000..a4b9934
--- /dev/null
+++ b/src/views/dataUpload/educateTrain/trainInfo/components/addReport.vue
@@ -0,0 +1,196 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="考试参与率" prop="examJoinRate">
+ <el-input v-model.trim="form.examJoinRate" placeholder="考试参与率" type="number" clearable>
+ <template #append>%</template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="考试合格率" prop="examPassRate">
+ <el-input v-model.trim="form.examPassRate" placeholder="考试合格率" type="number" clearable>
+ <template #append>%</template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="缺考总数" prop="missExam">
+ <el-input v-model.trim="form.missExam" placeholder="缺考总数" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="待补课总数" prop="repairNum">
+ <el-input v-model.trim="form.repairNum" placeholder="待补课总数" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="人均学时" prop="studyAverage">
+ <el-input v-model.trim="form.studyAverage" placeholder="人均学时" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="学时达标率" prop="studyQualifyRate">
+ <el-input v-model.trim="form.studyQualifyRate" placeholder="学时达标率" type="number" clearable>
+ <template #append>%</template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="培训人数" prop="trainPerson">
+ <el-input v-model.trim.number="form.trainPerson" placeholder="培训人数" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="培训参与率" prop="trainJoinRate">
+ <el-input v-model.trim="form.trainJoinRate" placeholder="培训参与率" type="number" clearable>
+ <template #append>%</template>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {educateTrainApi} from "/@/api/dataUpload/educateTrain";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string
+ isShowDialog: boolean
+ form: {
+ examJoinRate: string
+ examPassRate: string
+ missExam: string
+ rankWeek: string
+ repairNum: string
+ studyAverage: string
+ studyQualifyRate: string
+ trainPerson: null | number
+ trainJoinRate: string
+ }
+ rules:{}
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ setup(props, context) {
+ const formRef = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ examJoinRate: '',
+ examPassRate: '',
+ missExam: '',
+ rankWeek: '',
+ repairNum: '',
+ studyAverage: '',
+ studyQualifyRate: '',
+ trainPerson: null,
+ trainJoinRate: ''
+ },
+ rules:{
+ examJoinRate: [{ required: true, message: '请填写考试参与率', trigger: 'blur' }],
+ examPassRate: [{ required: true, message: '请填写考试合格率', trigger: 'blur' }],
+ missExam: [{ required: true, message: '请填写缺考总数', trigger: 'blur' }],
+ repairNum: [{ required: true, message: '请填写待补课总数', trigger: 'blur' }],
+ studyAverage: [{ required: true, message: '请填写人均学时', trigger: 'blur' }],
+ studyQualifyRate: [{ required: true, message: '请填写学时达标率', trigger: 'blur' }],
+ trainPerson: [{ required: true, message: '请填写培训人数', trigger: 'blur' }],
+ trainJoinRate: [{ required: true, message: '请填写培训参与率', trigger: 'blur' }]
+ }
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object) => {
+ state.isShowDialog = true;
+ if (type === 'add') {
+ state.title = '新增上报';
+ state.form = {
+ examJoinRate: '',
+ examPassRate: '',
+ missExam: '',
+ rankWeek: getWeekNumber(),
+ repairNum: '',
+ studyAverage: '',
+ studyQualifyRate: '',
+ trainPerson: null,
+ trainJoinRate: ''
+ };
+ }
+ };
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ const res = await educateTrainApi().addTrain([state.form])
+ if(res.data.code == 200){
+ ElMessage({
+ type:'success',
+ message:'数据上报成功'
+ })
+ state.isShowDialog = false
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ context.emit('refresh');
+
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善基本信息'
+ })
+ }
+ })
+ }
+
+ function getWeekNumber() {
+ // 获取当前日期
+ const today = new Date();
+
+ // 获取当前年的第一天
+ const firstDayOfYear = new Date(today.getFullYear(), 0, 1);
+
+ // 计算当前日期与第一天之间的时间差(毫秒)
+ const timeDiff = today - firstDayOfYear;
+
+ // 计算经过的天数,并将其转换为周数
+ const weekNumber = Math.ceil((timeDiff / (24 * 60 * 60 * 1000) + 1) / 7);
+
+ return weekNumber.toString()
+ }
+
+ return {
+ formRef,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/educateTrain/trainInfo/index.vue b/src/views/dataUpload/educateTrain/trainInfo/index.vue
new file mode 100644
index 0000000..df68588
--- /dev/null
+++ b/src/views/dataUpload/educateTrain/trainInfo/index.vue
@@ -0,0 +1,223 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createDate" label="上报时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="examJoinRate" label="考试参与率" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="examPassRate" label="考试合格率" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="missExam" label="缺考总数" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="rankWeek" label="第几周" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="repairNum" label="待补课总数" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="studyAverage" label="人均学时" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="studyQualifyRate" label="学时达标率" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="trainPerson" label="培训人数" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="trainJoinRate" label="培训参与率" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="updateDate" label="修改时间" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+<!-- <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>-->
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {educateTrainApi} from "/@/api/dataUpload/educateTrain";
+interface TableDataState {
+ reportData: [],
+ listQuery: {
+ searchParams: {}
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+}
+
+export default defineComponent({
+ name: 'trainInfo',
+ components: {addReport },
+ setup() {
+ const reportRef= ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ listQuery: {
+ searchParams: {},
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null
+ });
+
+ // 页面加载时
+ onMounted(() => {
+ getData()
+ });
+
+ const getData = async ()=>{
+ const res = await educateTrainApi().getTrainList(state.listQuery)
+ if(res.data.code == 200){
+ state.reportData = res.data.data
+ state.total = res.data.total
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog=(type:string,data:object)=>{
+ reportRef.value.open(type,data)
+ }
+
+ // 删除用户
+ const onRowDel = (row: Object) => {
+ ElMessageBox.confirm(`此操作将永久删除该记录,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await educateTrainApi().delTrain({ids: [row.id]})
+ if(res.data.code == 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {});
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ return {
+ reportRef,
+ openDialog,
+ getData,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ .el-card {
+ border: 0;
+ }
+}
+</style>
diff --git a/src/views/dataUpload/peopleLocate/components/addReport.vue b/src/views/dataUpload/peopleLocate/components/addReport.vue
new file mode 100644
index 0000000..4eb5c4c
--- /dev/null
+++ b/src/views/dataUpload/peopleLocate/components/addReport.vue
@@ -0,0 +1,291 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="序号" prop="serialNumber">
+ <el-input v-model.trim="form.serialNumber" placeholder="序号" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="卡号" prop="cardNo">
+ <el-input v-model.trim="form.cardNo" placeholder="卡号" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="报警人员名称" prop="realName">
+ <el-input v-model.trim="form.realName" placeholder="报警人员名称" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="报警状态" prop="alarmStatus">
+ <el-radio-group v-model="form.alarmStatus">
+ <el-radio label="1">报警</el-radio>
+ <el-radio label="2">已处理</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="报警时间" prop="alarmTime">
+ <el-date-picker v-model="form.alarmTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择报警时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="报警信息" prop="alarmInfo">
+ <el-input v-model.trim="form.alarmInfo" :autosize="{ minRows: 1 }" type="textarea" placeholder="报警信息" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="报警类型" prop="alarmType">
+ <el-select v-model="form.alarmType" placeholder="请选择报警类型">
+ <el-option v-for="(item,index) in alarmTypeList" :key="index" :label="item.name" :value="item.value"/>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="报警位置" prop="alarmLocation">
+ <el-input v-model.trim="form.alarmLocation" :autosize="{ minRows: 1 }" type="textarea" placeholder="报警地点所在区域" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="">
+ <el-button type="primary" v-throttle @click="showMapLocation" size="default">获取经纬度</el-button>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="经度">
+ <el-input v-model.trim="form.longitude" placeholder="经度(支持手动输入)" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="纬度">
+ <el-input v-model.trim="form.latitude" placeholder="纬度(支持手动输入)" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="楼层号" prop="floorNo">
+ <el-input v-model.trim="form.floorNo" placeholder="楼层号" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="form.alarmStatus == '2'">
+ <el-form-item label="销警时间" prop="handleTime">
+ <el-date-picker v-model="form.handleTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择销警时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="form.alarmStatus == '1'">
+ <el-form-item label="销警时间">
+ <el-date-picker v-model="form.handleTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择销警时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="form.alarmStatus == '2'">
+ <el-form-item label="处理信息" prop="handleInfo">
+ <el-input v-model.trim="form.handleInfo" :autosize="{ minRows: 1 }" type="textarea" placeholder="处理信息" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20" v-if="form.alarmStatus == '1'">
+ <el-form-item label="处理信息">
+ <el-input v-model.trim="form.handleInfo" :autosize="{ minRows: 1 }" type="textarea" placeholder="处理信息" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="跳转地址">
+ <el-input v-model.trim="form.thirdAddress" :autosize="{ minRows: 1 }" type="textarea" placeholder="跳转地址" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ <mapLocation ref="mapLocation" @giveLatLng="achieveLatLng"></mapLocation>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import mapLocation from "./mapLocation.vue"
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string
+ isShowDialog: boolean
+ form: {
+ uuid: string
+ serialNumber: string
+ cardNo: string
+ realName: string
+ alarmStatus: string
+ alarmTime: string
+ alarmInfo: string
+ alarmType: string
+ alarmLocation: string
+ longitude: string
+ latitude: string
+ floorNo: string
+ handleTime: string
+ handleInfo: string
+ thirdAddress: string
+ }
+ rules:{}
+ alarmTypeList: Array<alarmType>
+}
+
+interface alarmType {
+ value: string
+ name: string
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ components: {mapLocation },
+ setup(props, context) {
+ const formRef = ref()
+ const mapLocation = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ uuid: '',
+ serialNumber: '',
+ cardNo: '',
+ realName: '',
+ alarmStatus: '',
+ alarmTime: '',
+ alarmInfo: '',
+ alarmType: '',
+ alarmLocation: '',
+ longitude: '',
+ latitude: '',
+ floorNo: '',
+ handleTime: '',
+ handleInfo: '',
+ thirdAddress: 'http://124.88.37.66:8081/location_system_5.4.9/map3d/index.html'
+ },
+ rules:{
+ serialNumber: [{ required: true, message: '请填写序号', trigger: 'blur' }],
+ cardNo: [{ required: true, message: '请填写卡号', trigger: 'blur' }],
+ realName: [{ required: true, message: '请填写报警人员名称', trigger: 'blur' }],
+ alarmStatus: [{ required: true, message: '请选择报警状态', trigger: 'blur' }],
+ alarmTime: [{ required: true, message: '请选择报警时间', trigger: 'blur' }],
+ alarmInfo: [{ required: true, message: '请填写报警信息', trigger: 'blur' }],
+ alarmType: [{ required: true, message: '请选择报警类型', trigger: 'blur' }],
+ alarmLocation: [{ required: true, message: '请填写报警位置', trigger: 'blur' }],
+ floorNo: [{ required: true, message: '请填写楼层号', trigger: 'blur' }],
+ handleTime: [{ required: true, message: '请选择销警时间', trigger: 'blur' }],
+ handleInfo: [{ required: true, message: '请填写处理信息', trigger: 'blur' }]
+ },
+ alarmTypeList: [
+ {value: '01', name: '一键求救报警'},
+ {value: '02', name: '滞留预警'},
+ {value: '03', name: '越界报警'},
+ {value: '04', name: '超员预警'},
+ {value: '05', name: '缺员预警'},
+ {value: '06', name: '静止预警'},
+ {value: '07', name: '作业人员离开报警'},
+ {value: '08', name: '非作业人员闯入报警'}
+ ]
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object) => {
+ state.isShowDialog = true;
+ if (type === 'add') {
+ state.title = '新增上报';
+ state.form = {
+ uuid: '',
+ serialNumber: '',
+ cardNo: '',
+ realName: '',
+ alarmStatus: '',
+ alarmTime: '',
+ alarmInfo: '',
+ alarmType: '',
+ alarmLocation: '',
+ longitude: '',
+ latitude: '',
+ floorNo: '',
+ handleTime: '',
+ handleInfo: '',
+ thirdAddress: 'http://124.88.37.66:8081/location_system_5.4.9/map3d/index.html'
+ }
+ }else{
+ state.title = '重新上报';
+ state.form = {
+ uuid: data.uuid,
+ serialNumber: '',
+ cardNo: '',
+ realName: '',
+ alarmStatus: '',
+ alarmTime: '',
+ alarmInfo: '',
+ alarmType: '',
+ alarmLocation: '',
+ longitude: '',
+ latitude: '',
+ floorNo: '',
+ handleTime: '',
+ handleInfo: '',
+ thirdAddress: 'http://124.88.37.66:8081/location_system_5.4.9/map3d/index.html'
+ }
+ }
+ };
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ const res = await judgeReportApi().addPosition([state.form])
+ if(res.data.code == '200'){
+ ElMessage({
+ type:'success',
+ message:'数据上报成功'
+ })
+ state.isShowDialog = false
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ context.emit('refresh');
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善基本信息'
+ })
+ }
+ })
+ }
+ const showMapLocation=()=>{
+ mapLocation.value.openMapLocation(state.form.longitude,state.form.latitude)
+ }
+
+ const achieveLatLng=(lng: string,lat: string)=>{
+ state.form.longitude = lng
+ state.form.latitude = lat
+ }
+
+ return {
+ formRef,
+ mapLocation,
+ open,
+ onSubmit,
+ showMapLocation,
+ achieveLatLng,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/peopleLocate/components/mapLocation.vue b/src/views/dataUpload/peopleLocate/components/mapLocation.vue
new file mode 100644
index 0000000..e1e24fc
--- /dev/null
+++ b/src/views/dataUpload/peopleLocate/components/mapLocation.vue
@@ -0,0 +1,138 @@
+<template>
+ <el-dialog
+ v-model="mapLocationVisible"
+ append-to-body
+ :close-on-click-modal="false"
+ width="75%"
+ :title="title"
+ >
+ <div class="mapLocation_head">
+ <div>
+ <el-alert
+ title="点击地点获取经纬度信息"
+ type="info"
+ :closable="false"
+ >
+ </el-alert>
+ </div>
+ <div class="mapLocation_latlng">
+ <span>经度:</span>
+ <el-input class="mapLocation_latlng_input" id="lng" v-model="longitude"></el-input>
+ </div>
+ <div class="mapLocation_latlng">
+ <span>纬度:</span>
+ <el-input class="mapLocation_latlng_input" id="lat" v-model="latitude"></el-input>
+ </div>
+ </div>
+ <div class="mapLocation_body">
+ <baidu-map class="map" ak="BkZdiHBj9aGrMdVFM48r2njNiMzsekga" v="3.0" type="API" :center="center" :zoom="15" scroll-wheel-zoom @ready="initMap" @click="getPosition">
+ <bm-marker :position="{lng: longitude, lat: latitude}" :dragging="true" animation="BMAP_ANIMATION_BOUNCE">
+ <bm-label content="选择地点" :labelStyle="{color: 'red', fontSize : '24px'}" :offset="{width: -35, height: 30}"/>
+ </bm-marker>
+ </baidu-map>
+ </div>
+ <div align="right" style="margin-top: 10px">
+ <el-button @click="mapLocationVisible = false">取消</el-button>
+ <el-button type="primary" @click="submitLatLng()">确认</el-button>
+ </div>
+ </el-dialog>
+</template>
+
+<script lang="ts">
+import {ref, onMounted, reactive, toRefs, defineComponent} from 'vue';
+import { BaiduMap,BmMarker } from 'vue-baidu-map-3x'
+interface DataState{
+ title: string
+ longitude: string
+ latitude: string
+ mapLocationVisible: boolean
+ center: {
+
+ }
+}
+export default defineComponent({
+ name: "mapLocation",
+ components: {BaiduMap,BmMarker},
+ setup(props,context) {
+ const state = reactive<DataState>({
+ title: '',
+ longitude: '',
+ latitude: '',
+ mapLocationVisible: false,
+ center: {
+ lng: '116.404',
+ lat: '39.915'
+ }
+ })
+
+
+
+ onMounted(() => {
+ // ...(mounted钩子中的代码不变)
+ });
+ const map = reactive({})
+
+ const getPosition = ({type, target, point, pixel, overlay})=>{
+ state.longitude = point.lng
+ state.latitude = point.lat
+ }
+
+ const openMapLocation=(longitude:string,latitude:string)=>{
+ state.longitude = longitude
+ state.latitude = latitude
+ state.mapLocationVisible = true
+ }
+
+ const submitLatLng=()=>{
+ state.mapLocationVisible = false
+ context.emit('giveLatLng',state.longitude,state.latitude);
+ }
+
+ const initMap=()=>{
+
+ }
+
+ return {
+ map,
+ getPosition,
+ submitLatLng,
+ initMap,
+ openMapLocation,
+ ...toRefs(state)
+ };
+ }
+})
+</script>
+
+<style lang="scss" scoped>
+.map {
+ width: 100%;
+ height: 500px;
+
+ :deep(.BMap_cpyCtrl){
+ display: none!important;
+ visibility: hidden!important;
+ }
+
+ :deep(.anchorBL) {
+ display: none!important;
+ visibility: hidden!important;
+ }
+}
+.mapLocation_head{
+ width:100%;
+ height:100px;
+}
+.mapLocation_body{
+ width:100%;
+ height:500px
+}
+.mapLocation_latlng{
+ padding-top:10px;
+ display:inline-block;
+ margin-right: 20px;
+}
+.mapLocation_latlng_input{
+ width:250px;
+}
+</style>
diff --git a/src/views/dataUpload/peopleLocate/index.vue b/src/views/dataUpload/peopleLocate/index.vue
new file mode 100644
index 0000000..661b838
--- /dev/null
+++ b/src/views/dataUpload/peopleLocate/index.vue
@@ -0,0 +1,251 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createTime" label="上报时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="cardNo" label="卡号" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="realName" label="报警人员名称" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="alarmStatus" label="报警状态" show-overflow-tooltip>
+ <template #default="scope">
+ {{scope.row.alarmStatus == '1'?'报警':scope.row.alarmStatus == '2'?'报警已处理':'--'}}
+ </template>
+ </el-table-column>
+ <el-table-column prop="alarmTime" label="报警时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="alarmInfo" label="报警信息" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="alarmType" label="报警类型" show-overflow-tooltip>
+ <template #default="scope">
+ {{getAlarmType(scope.row.alarmType)}}
+ </template>
+ </el-table-column>
+ <el-table-column prop="alarmLocation" label="报警位置" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="longitude" label="经度" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="latitude" label="纬度" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="floorNo" label="楼层号" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="handleTime" label="销警时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="handleInfo" label="处理信息" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+ <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+interface TableDataState {
+ reportData: [],
+ listQuery: {
+ searchParams: {}
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+ alarmTypeList: Array<alarmType>
+}
+interface alarmType {
+ value: string
+ name: string
+}
+export default defineComponent({
+ name: 'contractorInfo',
+ components: {addReport },
+ setup() {
+ const reportRef= ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ listQuery: {
+ searchParams: {},
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null,
+ alarmTypeList: [
+ {value: '01', name: '一键求救报警'},
+ {value: '02', name: '滞留预警'},
+ {value: '03', name: '越界报警'},
+ {value: '04', name: '超员预警'},
+ {value: '05', name: '缺员预警'},
+ {value: '06', name: '静止预警'},
+ {value: '07', name: '作业人员离开报警'},
+ {value: '08', name: '非作业人员闯入报警'}
+ ]
+ });
+
+ // 页面加载时
+ onMounted(() => {
+ getData()
+ });
+
+ const getData = async ()=>{
+ const res = await judgeReportApi().getPositionList(state.listQuery)
+ if(res.data.code == 200){
+ state.reportData = res.data.data
+ state.total = res.data.total
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog=(type:string,data:object)=>{
+ reportRef.value.open(type,data)
+ }
+
+ // 删除用户
+ const onRowDel = (row: Object) => {
+ ElMessageBox.confirm(`此操作将永久删除该条数据,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await judgeReportApi().delPosition({ids: [row.id]})
+ if(res.data.code == 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {});
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ const getAlarmType = (type: string)=>{
+ return state.alarmTypeList.find(i=>i.value == type)?.name
+ }
+ return {
+ reportRef,
+ getAlarmType,
+ openDialog,
+ getData,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ .el-card {
+ border: 0;
+ }
+}
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/cardInfo/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/cardInfo/components/addReport.vue
new file mode 100644
index 0000000..900f4e9
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/cardInfo/components/addReport.vue
@@ -0,0 +1,172 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="证书名称" prop="name">
+ <el-input v-model.trim="form.name" placeholder="证书名称" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="分类名称" prop="cateName">
+ <el-input v-model.trim="form.cateName" placeholder="分类名称" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="发证机构" prop="orgName">
+ <el-input v-model.trim="form.orgName" placeholder="发证机构" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="发证日期">
+ <el-date-picker v-model="form.pusTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择发证日期" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="有效期至">
+ <el-date-picker v-model="form.effectiveTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择有效期至" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="到期提醒时间">
+ <el-date-picker v-model="form.dueTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择到期提醒时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="提醒人" prop="notifyUser">
+ <el-input v-model.trim="form.notifyUser" placeholder="提醒人" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string
+ isShowDialog: boolean
+ form: {
+ uuid: string
+ name: string
+ cateName: string
+ orgName: string
+ pusTime: string
+ effectiveTime: string
+ dueTime: string
+ notifyUser: string
+ }
+ rules:{}
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ setup(props, context) {
+ const formRef = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ uuid:'',
+ name: '',
+ cateName: '',
+ orgName: '',
+ pusTime: '',
+ effectiveTime: '',
+ dueTime: '',
+ notifyUser: ''
+ },
+ rules:{
+ name: [{ required: true, message: '请填写证书名称', trigger: 'blur' }],
+ cateName: [{ required: true, message: '请填写分类名称', trigger: 'blur' }],
+ orgName: [{ required: true, message: '请填写发证机构', trigger: 'blur' }],
+ notifyUser: [{ required: true, message: '请填写提醒人', trigger: 'blur' }]
+ }
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object) => {
+ state.isShowDialog = true;
+ if (type === 'add') {
+ state.title = '新增上报';
+ state.form = {
+ uuid:'',
+ name: '',
+ cateName: '',
+ orgName: '',
+ pusTime: '',
+ effectiveTime: '',
+ dueTime: '',
+ notifyUser: ''
+ }
+ }else{
+ state.title = '重新上报';
+ state.form = {
+ uuid: data.uuid,
+ name: '',
+ cateName: '',
+ orgName: '',
+ pusTime: '',
+ effectiveTime: '',
+ dueTime: '',
+ notifyUser: ''
+ }
+ }
+ };
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ const res = await judgeReportApi().addCard([state.form])
+ if(res.data.code == 200){
+ ElMessage({
+ type:'success',
+ message:'数据上报成功'
+ })
+ state.isShowDialog = false
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ context.emit('refresh')
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善基本信息'
+ })
+ }
+ })
+ }
+
+
+ return {
+ formRef,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/cardInfo/index.vue b/src/views/dataUpload/saftyBaseInfo/cardInfo/index.vue
new file mode 100644
index 0000000..be7b1e6
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/cardInfo/index.vue
@@ -0,0 +1,219 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="name" label="证书名称" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="cateName" label="分类名称" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="orgName" label="发证机构" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="pusTime" label="发证日期" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="effectiveTime" label="有效期至" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="dueTime" label="到期提醒时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="notifyUser" label="提醒人" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+ <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+interface TableDataState {
+ reportData: [],
+ listQuery: {
+ searchParams: {}
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+}
+
+export default defineComponent({
+ name: 'cardInfo',
+ components: {addReport },
+ setup() {
+ const reportRef= ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ listQuery: {
+ searchParams: {},
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null
+ });
+
+ // 页面加载时
+ onMounted(() => {
+ getData()
+ });
+
+ const getData = async ()=>{
+ const res = await judgeReportApi().getCardList(state.listQuery)
+ if(res.data.code == 200){
+ state.reportData = res.data.data
+ state.total = res.data.total
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog=(type:string,data:object)=>{
+ reportRef.value.open(type,data)
+ }
+
+ // 删除用户
+ const onRowDel = (row: Object) => {
+ ElMessageBox.confirm(`此操作将永久删除:“${row.name}”,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await judgeReportApi().delCard({ids: [row.id]})
+ if(res.data.code == 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {});
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ return {
+ reportRef,
+ openDialog,
+ getData,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ .el-card {
+ border: 0;
+ }
+}
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/certInfo/component/certificateDialog.vue b/src/views/dataUpload/saftyBaseInfo/certInfo/component/certificateDialog.vue
new file mode 100644
index 0000000..8a7cfcd
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/certInfo/component/certificateDialog.vue
@@ -0,0 +1,138 @@
+<template>
+ <div class="system-add-role-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="769px">
+ <el-form :model="roleForm" size="default" label-width="90px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="证书名称">
+ <el-input v-model="roleForm.name" placeholder="请输入证书名称" clearable style="width: 100%"></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" @click="onSubmit" v-throttle size="default">{{ buttonName }}</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { ElMessage } from 'element-plus';
+import { reactive, toRefs, defineComponent } from 'vue';
+import {certApi} from "/@/api/systemManage/certificate";
+
+// 定义接口来定义对象的类型
+interface MenuDataTree {
+ id: number;
+ label: string;
+ children?: MenuDataTree[];
+}
+interface RoleState {
+ title: string;
+ buttonName: string;
+ isShowDialog: boolean;
+ roleForm: {
+ id: null | number
+ name: string;
+ };
+ menuData: Array<MenuDataTree>;
+ menuProps: {
+ children: string;
+ label: string;
+ };
+}
+
+export default defineComponent({
+ name: 'certificateDialog',
+ setup(prop, context) {
+ const state = reactive<RoleState>({
+ isShowDialog: false,
+ title: '',
+ buttonName: '',
+ roleForm: {
+ id: null,
+ name: '', // 证书名称
+ },
+ menuData: [],
+ menuProps: {
+ children: 'children',
+ label: 'label'
+ }
+ });
+ // 打开弹窗
+ const openDialog = (type: string, value: any) => {
+ state.isShowDialog = true;
+ if (type === '新增') {
+ state.title = '新增证书';
+ state.buttonName = '新增';
+ state.roleForm = {
+ id: null,
+ name: ''
+ };
+ } else {
+ state.title = '修改证书';
+ state.buttonName = '修改';
+ state.roleForm.id = JSON.parse(JSON.stringify(value)).id
+ state.roleForm.name = JSON.parse(JSON.stringify(value)).name
+ }
+ };
+ // 新增
+ const onSubmit = async () => {
+ if (state.title === '新增证书') {
+ let res = await certApi().addCerttype({name: state.roleForm.name});
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: '证书新增成功',
+ duration: 2000
+ });
+ state.isShowDialog = false;
+ context.emit('refreshCertList');
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ } else {
+ let res = await certApi().modCerttype(state.roleForm);
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ message: '证书修改成功',
+ duration: 2000
+ });
+ state.isShowDialog = false;
+ context.emit('refreshCertList');
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
+ };
+ // 获取菜单结构数据
+ return {
+ onSubmit,
+ openDialog,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+
+<style scoped lang="scss">
+.system-add-role-container {
+ .menu-data-tree {
+ width: 100%;
+ border: 1px solid var(--el-border-color);
+ border-radius: var(--el-input-border-radius, var(--el-border-radius-base));
+ padding: 5px;
+ }
+}
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/certInfo/component/certificateMember.vue b/src/views/dataUpload/saftyBaseInfo/certInfo/component/certificateMember.vue
new file mode 100644
index 0000000..33e53c4
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/certInfo/component/certificateMember.vue
@@ -0,0 +1,214 @@
+<template>
+ <el-dialog v-model="dialogCertificate" :title="title">
+ <div class="system-user-search mb15">
+ <el-input size="default" v-model.trim="listQuery.searchParams.userName" placeholder="请输入用户名" style="max-width: 180px"> </el-input>
+ <el-button size="default" type="primary" class="ml10" @click="handleSearch">
+ <el-icon>
+ <ele-Search />
+ </el-icon>
+ 查询
+ </el-button>
+ </div>
+ <el-table
+ :data="tableData"
+ highlight-current-row
+ style="width: 100%;margin-top: 20px"
+ border
+ :header-cell-style="{background: '#fafafa'}"
+ >
+ <el-table-column property="userName" label="姓名"/>
+ <el-table-column property="depName" label="所属部门"/>
+ <el-table-column property="certTypeName" label="证书类型"/>
+ <el-table-column property="certExpiredAt" label="到期时间"/>
+ </el-table>
+ <br />
+ <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ <br />
+ <br />
+ </el-dialog>
+</template>
+
+<script lang="ts">
+ import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted} from 'vue';
+ import { storeToRefs } from 'pinia';
+ import { initBackEndControlRoutes } from '/@/router/backEnd';
+ import {useUserInfo} from "/@/stores/userInfo";
+ import { Session } from '/@/utils/storage';
+ import { Search, Delete, Edit, View, Plus } from '@element-plus/icons-vue'
+ import {ElMessage, ElMessageBox, ElTable} from 'element-plus'
+ import {certApi} from "/@/api/systemManage/certificate";
+
+
+ interface stateType {
+ title: string
+ dialogCertificate: boolean
+ tableData: Array<any>
+ listQuery: {
+ pageIndex: number
+ pageSize: number
+ searchParams: {
+ userName: string
+ certTypeId: number | null
+ }
+ }
+ total: number | null
+ }
+ export default defineComponent({
+ name: 'certificateMember',
+ components: {},
+ props:[],
+ setup() {
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo);
+ const state = reactive<stateType>({
+ title: '',
+ dialogCertificate: false,
+ tableData: [],
+ total: null,
+ listQuery: {
+ pageIndex: 1,
+ pageSize: 10,
+ searchParams: {
+ userName:'',
+ certTypeId: null
+ }
+ }
+ });
+ // 页面载入时执行方法
+ onMounted(() => {
+
+ });
+ const ctfRef = ref()
+ const openDialog = (type:string,value: any) => {
+ state.tableData = []
+ state.total = null
+ state.listQuery.searchParams.certTypeId = value.id
+ state.dialogCertificate = true
+ if(type == '人员'){
+ state.title = '证书人员'
+ getUserData()
+ }else{
+ state.title = '证书即将到期'
+ getUnvalidData()
+ }
+ }
+
+ const getUserData = async () => {
+ let res = await certApi().getCertUsers(state.listQuery);
+ if (res.data.code === '200') {
+ state.tableData = res.data.data
+ state.total = res.data.total
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
+
+ const getUnvalidData = async () => {
+ let res = await certApi().getCertUnvalid(state.listQuery);
+ if (res.data.code === '200') {
+ state.tableData = res.data.data
+ state.total = res.data.total
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }
+
+
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ if(state.title == '证书人员'){
+ getUserData();
+ }else{
+ getUnvalidData()
+ }
+ }
+
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ if(state.title == '证书人员'){
+ getUserData();
+ }else{
+ getUnvalidData()
+ }
+ }
+
+ const handleSearch = () => {
+ state.listQuery.pageIndex = 1
+ if(state.title == '证书人员'){
+ getUserData();
+ }else{
+ getUnvalidData()
+ }
+ }
+
+ const renderMenu = async (value: string) => {
+ Session.set('projectId',value)
+ userInfos.value.projectId = value
+ await initBackEndControlRoutes();
+ };
+ return {
+ renderMenu,
+ openDialog,
+ ctfRef,
+ Search,
+ Delete,
+ Edit,
+ View,
+ Plus,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ handleSearch,
+ ...toRefs(state),
+ };
+ },
+ });
+</script>
+
+<style scoped lang="scss">
+ .home-container {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ .homeCard{
+ width: 100%;
+ padding: 0 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+ }
+ .applyBtn{
+ width: 100%;
+ background: #fff;
+ padding-top: 15px;
+ z-index: 5;
+ box-shadow: 0 -3px 8px rgba(150,150,150,.1);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ .el-row{
+ margin-bottom: 20px;
+ }
+ .el-row:last-child {
+ margin-bottom: 0;
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+ .el-cascader{
+ width: 100% !important;
+ }
+ }
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/certInfo/component/messages.vue b/src/views/dataUpload/saftyBaseInfo/certInfo/component/messages.vue
new file mode 100644
index 0000000..3db6d1a
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/certInfo/component/messages.vue
@@ -0,0 +1,148 @@
+<template>
+ <el-dialog v-model="dialogMes" :title="title">
+ <el-table
+ :data="tableData"
+ highlight-current-row
+ style="width: 100%;margin-top: 20px"
+ border
+ :header-cell-style="{background: '#fafafa'}"
+ >
+ <el-table-column property="id" label="发送时间"/>
+ <el-table-column property="roleId" label="预警信息内容"/>
+ <el-table-column property="workTypeDesc" label="预警级别"/>
+ <el-table-column property="roleId" label="接收人">
+ <template #default="scope">
+ {{ roleList.find(i=>i.roleId == scope.row.roleId)?.roleName }}
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-dialog>
+</template>
+
+<script lang="ts">
+ import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted} from 'vue';
+ import { storeToRefs } from 'pinia';
+ import { initBackEndControlRoutes } from '/@/router/backEnd';
+ import {useUserInfo} from "/@/stores/userInfo";
+ import { Session } from '/@/utils/storage';
+ import { Search, Delete, Edit, View, Plus } from '@element-plus/icons-vue'
+ import {ElMessage, ElMessageBox, ElTable} from 'element-plus'
+ import {userApi} from "/@/api/systemManage/user";
+
+
+ interface stateType {
+ title: string
+ dialogMes: boolean
+ tableData: Array<any>
+ roleList: Array<any>
+ uid: number | null
+ }
+ export default defineComponent({
+ name: 'historyMessages',
+ components: {},
+ props:[],
+ setup() {
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo);
+ const state = reactive<stateType>({
+ title: '',
+ dialogMes: false,
+ tableData: [],
+ roleList: [],
+ uid: null
+ });
+ // 页面载入时执行方法
+ onMounted(() => {
+
+ });
+ const ctfRef = ref()
+ const openDialog = (value: any) => {
+ state.dialogMes = true
+ }
+
+ // const getRoleData = async () => {
+ // let res = await useRoleApi().getRoleList();
+ // if (res.data.code === '200') {
+ // state.roleList = res.data.data;
+ // } else {
+ // ElMessage({
+ // type: 'warning',
+ // message: res.data.msg
+ // });
+ // }
+ // };
+ //
+ // const getCtf = async()=>{
+ // let res = await userApi().getCtf({uid: state.uid})
+ // if(res.data.code == 200){
+ // state.tableData = res.data.data
+ // }else{
+ // ElMessage({
+ // type: 'warning',
+ // message: res.data.msg
+ // })
+ // }
+ // }
+
+ const renderMenu = async (value: string) => {
+ Session.set('projectId',value)
+ userInfos.value.projectId = value
+ await initBackEndControlRoutes();
+ };
+ return {
+ renderMenu,
+ openDialog,
+ ctfRef,
+ Search,
+ Delete,
+ Edit,
+ View,
+ Plus,
+ ...toRefs(state),
+ };
+ },
+ });
+</script>
+
+<style scoped lang="scss">
+ .home-container {
+ height: 100%;
+ overflow: hidden;
+ position: relative;
+ .homeCard{
+ width: 100%;
+ padding: 0 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+ }
+ .applyBtn{
+ width: 100%;
+ background: #fff;
+ padding-top: 15px;
+ z-index: 5;
+ box-shadow: 0 -3px 8px rgba(150,150,150,.1);
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+ .el-row{
+ margin-bottom: 20px;
+ }
+ .el-row:last-child {
+ margin-bottom: 0;
+ }
+ .el-input{
+ width: 100% !important;
+ }
+ .el-date-editor::v-deep{
+ width: 100%;
+ }
+ .el-select{
+ width: 100%;
+ }
+ .el-cascader{
+ width: 100% !important;
+ }
+ }
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/certInfo/index.vue b/src/views/dataUpload/saftyBaseInfo/certInfo/index.vue
new file mode 100644
index 0000000..1c22508
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/certInfo/index.vue
@@ -0,0 +1,201 @@
+<template>
+ <div class="system-role-container">
+ <el-card shadow="hover">
+ <div class="system-user-search mb15">
+ <el-input size="default" v-model.trim="listQuery.searchParams.name" placeholder="请输入证书类型" style="max-width: 180px"> </el-input>
+ <el-button size="default" type="primary" class="ml10" @click="handleSearch">
+ <el-icon>
+ <ele-Search />
+ </el-icon>
+ 查询
+ </el-button>
+ <el-button size="default" type="success" class="ml10" @click="onOpenDialogRef('新增', '')">
+ <el-icon>
+ <ele-FolderAdd />
+ </el-icon>
+ 新增
+ </el-button>
+ </div>
+ <el-table :data="tableData.data" style="width: 100%">
+ <el-table-column prop="name" label="证书类型" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="personCount" label="关联证书人员" show-overflow-tooltip>
+ <template #default="scope">
+ <el-button v-if="scope.row.personCount && scope.row.personCount>0" link type="primary" @click="openMembers('人员',scope.row)">{{scope.row.personCount}}</el-button>
+ <span v-else>0</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="unValidCount" label="三个月证书到期" show-overflow-tooltip>
+ <template #default="scope">
+ <el-button v-if="scope.row.unValidCount && scope.row.unValidCount>0" link type="danger" @click="openMembers('到期',scope.row)">{{scope.row.unValidCount}}</el-button>
+ <span v-else>0</span>
+ </template>
+ </el-table-column>
+<!-- <el-table-column prop="warnCount" label="历史预警信息" show-overflow-tooltip>-->
+<!-- <template #default="scope">-->
+<!-- <el-button v-if="scope.row.warnCount && scope.row.warnCount>0" link type="danger" @click="openMes(scope.row)">{{scope.row.warnCount}}</el-button>-->
+<!-- <span v-else>0</span>-->
+<!-- </template>-->
+<!-- </el-table-column>-->
+ <el-table-column label="操作" width="150">
+ <template #default="scope">
+ <el-button size="small" text type="primary" @click="onOpenDialogRef('修改', scope.row)">修改</el-button>
+ <el-button size="small" style="color: red" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <br />
+ <el-pagination @size-change="onHandleSizeChange" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="tableData.total"> </el-pagination>
+ <br />
+ <br />
+ </el-card>
+ <certificateDialog ref="certificateRef" @refreshCertList="initRoleTableData" />
+ <certificate-member ref="certificateMemRef"></certificate-member>
+ <messages ref="mesRef"></messages>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import certificateDialog from '/@/views/system/certificate/component/certificateDialog.vue'
+import certificateMember from '/@/views/system/certificate/component/certificateMember.vue'
+import messages from '/@/views/system/certificate/component/messages.vue'
+import { certApi } from '/@/api/systemManage/certificate';
+import { useMenuApi } from '/@/api/systemManage/menu';
+import { Session } from '/@/utils/storage';
+import { initBackEndControlRoutes } from '/@/router/backEnd';
+import {useUserInfo} from "/@/stores/userInfo";
+import {storeToRefs} from "pinia";
+
+// 定义接口来定义对象的类型
+interface TableData {
+ roleName: string;
+ roleSign: string;
+ describe: string;
+ sort: number;
+ status: boolean;
+ createTime: string;
+}
+interface TableDataState {
+ tableData: {
+ data: Array<TableData>;
+ total: number;
+ loading: boolean;
+ };
+ listQuery: {
+ pageIndex: number
+ pageSize: number
+ searchParams: {
+ name: string
+ }
+ };
+}
+
+export default defineComponent({
+ name: 'certificate',
+ components: {messages, certificateMember, certificateDialog },
+ setup() {
+ const userInfo = useUserInfo();
+ const { userInfos } = storeToRefs(userInfo);
+ const certificateRef = ref();
+ const certificateMemRef = ref();
+ const mesRef = ref();
+ const state = reactive<TableDataState>({
+ tableData: {
+ data: [],
+ total: 0,
+ loading: false,
+ },
+ listQuery: {
+ pageIndex: 1,
+ pageSize: 10,
+ searchParams: {
+ name:''
+ }
+ }
+ });
+ // 初始化表格数据
+ const initRoleTableData = async () => {
+ let res = await certApi().getCerttypeList(state.listQuery);
+ if (res.data.code === '200') {
+ state.tableData.data = res.data.data;
+ state.tableData.total = res.data.total
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ };
+
+ const onOpenDialogRef = (type: string, value: any) => {
+ certificateRef.value.openDialog(type, value);
+ };
+
+ const openMembers = (type: string, value: any) => {
+ certificateMemRef.value.openDialog(type,value)
+ }
+
+ const openMes = (value: any) => {
+ mesRef.value.openDialog(value)
+ }
+ const onRowDel = (row: any) => {
+ ElMessageBox.confirm(`此操作将永久删除角色名称:“${row.name}”,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ let res = await certApi().deleteCerttype(row.id);
+ if (res.data.code === '200') {
+ ElMessage({
+ type: 'success',
+ duration: 2000,
+ message: '删除成功'
+ });
+ await initRoleTableData();
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ })
+ .catch(() => {});
+ };
+ const handleSearch = () => {
+ state.listQuery.pageIndex = 1
+ initRoleTableData();
+ };
+
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ initRoleTableData();
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ initRoleTableData();
+ };
+ // 页面加载时
+ onMounted(() => {
+ initRoleTableData();
+ });
+ return {
+ onRowDel,
+ handleSearch,
+ certificateRef,
+ certificateMemRef,
+ mesRef,
+ onOpenDialogRef,
+ openMembers,
+ openMes,
+ initRoleTableData,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/crowInfo/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/crowInfo/components/addReport.vue
new file mode 100644
index 0000000..b556190
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/crowInfo/components/addReport.vue
@@ -0,0 +1,205 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="200px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="从业人数" prop="cyrs">
+ <el-input v-model.trim.number="form.cyrs" placeholder="从业人数" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="主要负责人" prop="zyfzr">
+ <el-input v-model.trim="form.zyfzr" placeholder="主要负责人" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="安全负责人" prop="aqfzr">
+ <el-input v-model.trim="form.aqfzr" placeholder="安全负责人" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="生产/经营地址" prop="scjydz">
+ <el-input v-model.trim="form.scjydz" :autosize="{ minRows: 1 }" type="textarea" placeholder="生产/经营地址" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="特殊作业人数" prop="specialNum">
+ <el-input v-model.trim.number="form.specialNum" placeholder="特殊作业人数" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="特殊作业证书到期人数" prop="specialCertExpireNum">
+ <el-input v-model.trim.number="form.specialCertExpireNum" placeholder="特殊作业证书到期人数" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="专职安全人员人数" prop="proSafeNum">
+ <el-input v-model.trim.number="form.proSafeNum" placeholder="专职安全人员人数" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="专职安全人员证书到期人数" prop="proSafeCertExpireNum">
+ <el-input v-model.trim.number="form.proSafeCertExpireNum" placeholder="专职安全人员证书到期人数" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="专职安全人员复审培训到期人数" prop="proSafeCheckTrainExpireNum">
+ <el-input v-model.trim.number="form.proSafeCheckTrainExpireNum" placeholder="专职安全人员复审培训到期人数" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="注册安全工程师人数" prop="registSafeNum">
+ <el-input v-model.trim.number="form.registSafeNum" placeholder="注册安全工程师人数" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="注册安全工程师证书到期人数" prop="registSafeCertExpireNum">
+ <el-input v-model.trim.number="form.registSafeCertExpireNum" placeholder="注册安全工程师证书到期人数" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="注册安全工程师复审培训到期人数" prop="registSafeCheckTrainExpireNum">
+ <el-input v-model.trim.number="form.registSafeCheckTrainExpireNum" placeholder="注册安全工程师复审培训到期人数" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string
+ isShowDialog: boolean
+ form: {
+ cyrs: number | null
+ zyfzr: string
+ aqfzr: string
+ scjydz: string
+ specialNum: number | null
+ specialCertExpireNum: number | null
+ proSafeNum: number | null
+ proSafeCertExpireNum: number | null
+ proSafeCheckTrainExpireNum: number | null
+ registSafeNum: number | null
+ registSafeCertExpireNum: number | null
+ registSafeCheckTrainExpireNum: number | null
+ }
+ rules:{}
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ setup(props, context) {
+ const formRef = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ cyrs: null,
+ zyfzr: '',
+ aqfzr: '',
+ scjydz: '',
+ specialNum: null,
+ specialCertExpireNum: null,
+ proSafeNum: null,
+ proSafeCertExpireNum: null,
+ proSafeCheckTrainExpireNum: null,
+ registSafeNum: null,
+ registSafeCertExpireNum: null,
+ registSafeCheckTrainExpireNum: null
+ },
+ rules:{
+ cyrs: [{ required: true, message: '请填写从业人数', trigger: 'blur' }],
+ zyfzr: [{ required: true, message: '请填写主要负责人', trigger: 'blur' }],
+ aqfzr: [{ required: true, message: '请填写安全负责人', trigger: 'blur' }],
+ scjydz: [{ required: true, message: '请填写生产/经营地址', trigger: 'blur' }],
+ specialNum: [{ required: true, message: '请填写特殊作业人数', trigger: 'blur' }],
+ specialCertExpireNum: [{ required: true, message: '请填写特殊作业证书到期人数', trigger: 'blur' }],
+ proSafeNum: [{ required: true, message: '请填写专职安全人员人数', trigger: 'blur' }],
+ proSafeCertExpireNum: [{ required: true, message: '请填写专职安全人员证书到期人数', trigger: 'blur' }],
+ proSafeCheckTrainExpireNum: [{ required: true, message: '请填写专职安全人员复审培训到期人数', trigger: 'blur' }],
+ registSafeNum: [{ required: true, message: '请填写注册安全工程师人数', trigger: 'blur' }],
+ registSafeCertExpireNum: [{ required: true, message: '请填写注册安全工程师证书到期人数', trigger: 'blur' }],
+ registSafeCheckTrainExpireNum: [{ required: true, message: '请填写注册安全工程师复审培训到期人数', trigger: 'blur' }]
+ }
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object) => {
+ state.isShowDialog = true;
+ if (type === 'add') {
+ state.title = '新增上报';
+ state.form = {
+ cyrs: null,
+ zyfzr: '',
+ aqfzr: '',
+ scjydz: '',
+ specialNum: null,
+ specialCertExpireNum: null,
+ proSafeNum: null,
+ proSafeCertExpireNum: null,
+ proSafeCheckTrainExpireNum: null,
+ registSafeNum: null,
+ registSafeCertExpireNum: null,
+ registSafeCheckTrainExpireNum: null
+ };
+ }
+ };
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ const res = await judgeReportApi().addCrow(state.form)
+ if(res.data.code == 200){
+ ElMessage({
+ type:'success',
+ message:'数据上报成功'
+ })
+ state.isShowDialog = false
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ context.emit('refresh')
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善基本信息'
+ })
+ }
+ })
+ }
+
+
+ return {
+ formRef,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/crowInfo/index.vue b/src/views/dataUpload/saftyBaseInfo/crowInfo/index.vue
new file mode 100644
index 0000000..7531e0e
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/crowInfo/index.vue
@@ -0,0 +1,223 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="cyrs" label="从业人数" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="zyfzr" label="主要负责人" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="aqfzr" label="安全负责人" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="scjydz" label="生产/经营地址" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="specialNum" label="特种作业人数" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="specialCertExpireNum" label="特种作业证书到期人数" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="proSafeNum" label="专职安全人员人数" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="proSafeCertExpireNum" label="专职安全人员证书到期人数" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="proSafeCheckTrainExpireNum" label="专职安全人员复审培训到期人数" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="registSafeNum" label="注册安全工程师人数" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="registSafeCertExpireNum" label="注册安全工程师证书到期人数" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="registSafeCheckTrainExpireNum" label="注册安全工程师复审培训到期人数" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+interface TableDataState {
+ reportData: [],
+ listQuery: {
+ searchParams: {}
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+}
+
+export default defineComponent({
+ name: 'crowInfo',
+ components: {addReport },
+ setup() {
+ const reportRef= ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ listQuery: {
+ searchParams: {},
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null
+ });
+
+ // 页面加载时
+ onMounted(() => {
+ getData()
+ });
+
+ const getData = async ()=>{
+ const res = await judgeReportApi().getCrowList(state.listQuery)
+ if(res.data.code == 200){
+ state.reportData = res.data.data
+ state.total = res.data.total
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog=(type:string,data:object)=>{
+ reportRef.value.open(type,data)
+ }
+
+ // 删除用户
+ const onRowDel = (row: Object) => {
+ ElMessageBox.confirm(`此操作将永久删除该条数据,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await judgeReportApi().delCrow({ids: [row.id]})
+ if(res.data.code == 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {});
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ return {
+ reportRef,
+ openDialog,
+ getData,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ .el-card {
+ border: 0;
+ }
+}
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/equipInfo/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/equipInfo/components/addReport.vue
new file mode 100644
index 0000000..da55976
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/equipInfo/components/addReport.vue
@@ -0,0 +1,305 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="编号" prop="no">
+ <el-input v-model.trim="form.no" placeholder="编号" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="设备名称" prop="name">
+ <el-input v-model.trim="form.name" placeholder="设备名称" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="分类" prop="cateName">
+ <el-input v-model.trim="form.cateName" placeholder="分类名称" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="型号" prop="model">
+ <el-input v-model.trim="form.model" placeholder="型号" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="出厂时间">
+ <el-date-picker v-model="form.productionTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择出厂时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="是否特种设备">
+ <el-radio-group v-model="form.isSpecial">
+ <el-radio :label="0">是</el-radio>
+ <el-radio :label="1">否</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="是否注册登记">
+ <el-radio-group v-model="form.isRegister">
+ <el-radio :label="0">是</el-radio>
+ <el-radio :label="1">否</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="注册登记编号" prop="registerNo">
+ <el-input v-model.trim="form.registerNo" placeholder="注册登记编号" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="设备状况">
+ <el-select v-model="form.status" placeholder="请选择设备状况">
+ <el-option :key="1" label="1" :value="1"/>
+ <el-option :key="2" label="2" :value="2"/>
+ <el-option :key="3" label="3" :value="3"/>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="注册登记表">
+ <el-input v-model.trim="form.registerTable" placeholder="注册登记表" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="检验状态">
+ <el-select v-model="form.checkStatus" placeholder="请选择检验状态">
+ <el-option :key="1" label="1" :value="1"/>
+ <el-option :key="2" label="2" :value="2"/>
+ <el-option :key="3" label="3" :value="3"/>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="下次检验时间">
+ <el-date-picker v-model="form.nextCheckTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择下次检验时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="上次校验时间">
+ <el-date-picker v-model="form.lastCheckTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择上次校验时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="附件">
+ <el-upload accept=".pdf" :action="uploadUrl" :headers="header" method="post" :on-exceed="showTip" :on-success="handleAvatarSuccess" :limit='1' v-model:file-list="fileList" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove">
+ <el-button type="primary">点击上传</el-button>
+ <template #tip>
+ <div class="el-upload__tip">仅支持上传pdf文件,尺寸小于2M,最多可上传1张</div>
+ </template>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import Cookies from "js-cookie";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string
+ isShowDialog: boolean
+ form: {
+ uuid: string
+ no: string
+ name: string
+ cateName: string
+ model: string
+ productionTime: string
+ isSpecial: number | null
+ isRegister: number | null
+ registerNo: string
+ status: number | null
+ registerTable: string
+ checkStatus: number | null
+ nextCheckTime: string
+ lastCheckTime: string
+ files: string
+ }
+ rules:{}
+ fileList: [],
+ uploadUrl: string,
+ header: {}
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ setup(props, context) {
+ const formRef = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ uuid: '',
+ no: '',
+ name: '',
+ cateName: '',
+ model: '',
+ productionTime: '',
+ isSpecial: null,
+ isRegister: null,
+ registerNo: '',
+ status: null,
+ registerTable: '',
+ checkStatus: null,
+ nextCheckTime: '',
+ lastCheckTime: '',
+ files: ''
+ },
+ rules:{
+ no: [{ required: true, message: '请填写编号', trigger: 'blur' }],
+ name: [{ required: true, message: '请填写设备名称', trigger: 'blur' }],
+ cateName: [{ required: true, message: '请填写分类名称', trigger: 'blur' }],
+ model: [{ required: true, message: '请填写型号', trigger: 'blur' }],
+ registerNo: [{ required: true, message: '请填写注册登记编号', trigger: 'blur' }]
+ },
+ fileList: [],
+ uploadUrl: import.meta.env.VITE_API_URL + '/account/file/upload',
+ header: {
+ uid: Cookies.get('uid'),
+ Authorization: Cookies.get('token')
+ }
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object) => {
+ state.isShowDialog = true;
+ if (type === 'add') {
+ state.title = '新增上报';
+ state.form = {
+ uuid:'',
+ no: '',
+ name: '',
+ cateName: '',
+ model: '',
+ productionTime: '',
+ isSpecial: null,
+ isRegister: null,
+ registerNo: '',
+ status: null,
+ registerTable: '',
+ checkStatus: null,
+ nextCheckTime: '',
+ lastCheckTime: '',
+ files: ''
+ }
+ }else{
+ state.title = '重新上报';
+ state.form = {
+ uuid: data.uuid,
+ no: '',
+ name: '',
+ cateName: '',
+ model: '',
+ productionTime: '',
+ isSpecial: null,
+ isRegister: null,
+ registerNo: '',
+ status: null,
+ registerTable: '',
+ checkStatus: null,
+ nextCheckTime: '',
+ lastCheckTime: '',
+ files: ''
+ }
+ }
+ state.fileList = []
+ };
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ const res = await judgeReportApi().addEquip([state.form])
+ if(res.data.code == 200){
+ ElMessage({
+ type:'success',
+ message:'数据上报成功'
+ })
+ state.isShowDialog = false
+ state.fileList = []
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ context.emit('refresh')
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善基本信息'
+ })
+ }
+ })
+ }
+
+ // 图片上传
+ const showTip =()=>{
+ ElMessage({
+ type: 'warning',
+ message: '超出文件上传数量'
+ });
+ }
+
+ const picSize = async(rawFile: any) => {
+ if(rawFile.size / 1024 / 1024 > 2){
+ ElMessage({
+ type: 'warning',
+ message: '文件大小不能超过2M'
+ });
+ return false
+ }
+ }
+
+ const handleAvatarSuccess = (res:any, uploadFile: any) => {
+ if(res){
+ uploadFile.name = res
+ state.form.files = res
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: '文件上传失败'
+ })
+ }
+ }
+
+ const handleRemove = (file, uploadFiles,type) => {
+ state.form.files = ''
+ }
+
+
+ return {
+ formRef,
+ showTip,
+ picSize,
+ handleAvatarSuccess,
+ handleRemove,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/equipInfo/index.vue b/src/views/dataUpload/saftyBaseInfo/equipInfo/index.vue
new file mode 100644
index 0000000..36f709b
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/equipInfo/index.vue
@@ -0,0 +1,258 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="no" label="编号" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="name" label="设备名称" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="cateName" label="分类" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="model" label="型号" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="productionTime" label="出厂时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="isSpecial" label="是否特种设备" show-overflow-tooltip>
+ <template #default="scope">
+ {{scope.row.isSpecial == 0?'是':scope.row.isSpecial == 1?'否':''}}
+ </template>
+ </el-table-column>
+ <el-table-column prop="isRegister" label="是否注册登记" show-overflow-tooltip>
+ <template #default="scope">
+ {{scope.row.isSpecial == 0?'是':scope.row.isSpecial == 1?'否':''}}
+ </template>
+ </el-table-column>
+ <el-table-column prop="registerNo" label="注册登记编号" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="status" label="设备状况" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="files" label="附件" show-overflow-tooltip>
+ <template #default="scope">
+ <el-button v-if="scope.row.files !== ''" size="small" text type="primary" @click="openFile(scope.row.files)">查看</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column prop="registerTable" label="注册等级表" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="checkStatus" label="检验状态" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="nextCheckTime" label="下次检验时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="lastCheckTime" label="上次校验时间" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+ <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import axios from "axios";
+import Cookies from "js-cookie";
+interface TableDataState {
+ reportData: [],
+ listQuery: {
+ searchParams: {}
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+}
+
+export default defineComponent({
+ name: 'equipInfo',
+ components: {addReport },
+ setup() {
+ const reportRef= ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ listQuery: {
+ searchParams: {},
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null
+ });
+
+ // 页面加载时
+ onMounted(() => {
+ getData()
+ });
+
+ const getData = async ()=>{
+ const res = await judgeReportApi().getEquipList(state.listQuery)
+ if(res.data.code == 200){
+ state.reportData = res.data.data
+ state.total = res.data.total
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog=(type:string,data:object)=>{
+ reportRef.value.open(type,data)
+ }
+
+ // 删除用户
+ const onRowDel = (row: Object) => {
+ ElMessageBox.confirm(`此操作将永久删除:“${row.name}”,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await judgeReportApi().delEquip({ids: [row.id]})
+ if(res.data.code == 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {});
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ const openFile=(file: string)=>{
+ axios.get(import.meta.env.VITE_API_URL + file,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
+ if (res) {
+ const link = document.createElement('a')
+ let blob = new Blob([res.data],{type: 'application/pdf'})
+ link.style.display = "none";
+ link.href = URL.createObjectURL(blob); // 创建URL
+ window.open(link.href)
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: '文件读取失败'
+ });
+ }
+ })
+ }
+
+ return {
+ reportRef,
+ openDialog,
+ getData,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ openFile,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ .el-card {
+ border: 0;
+ }
+}
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue
new file mode 100644
index 0000000..29526a9
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/judgeReport/components/addReport.vue
@@ -0,0 +1,199 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="报告名称" prop="name">
+ <el-input v-model.trim="form.name" placeholder="报告名称" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="备注" prop="remarks">
+ <el-input v-model.trim="form.remarks" :autosize="{ minRows: 1 }" type="textarea" placeholder="备注" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="评价时间" prop="evaluateTime">
+ <el-date-picker v-model="form.evaluateTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择评价时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="附件">
+ <el-upload accept=".pdf" :action="uploadUrl" :headers="header" method="post" :on-exceed="showTip" :on-success="handleAvatarSuccess" :limit='1' v-model:file-list="fileList" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove">
+ <el-button type="primary">点击上传</el-button>
+ <template #tip>
+ <div class="el-upload__tip">仅支持上传pdf文件,尺寸小于2M,最多可上传1张</div>
+ </template>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {userApi} from '/@/api/systemManage/user'
+import Cookies from "js-cookie";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string;
+ isShowDialog: boolean;
+ form: {
+ uuid: string
+ name: string
+ remarks: string
+ evaluateTime: string
+ files: string
+ }
+ rules:{},
+ fileList: [],
+ uploadUrl: string,
+ header: {}
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ setup(props, context) {
+ const formRef = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ uuid: '',
+ name: '',
+ remarks: '',
+ evaluateTime: '',
+ files: ''
+ },
+ rules:{
+ name: [{ required: true, message: '请填写报告名称', trigger: 'blur'}],
+ remarks: [{ required: true, message: '请填写备注', trigger: 'blur'}],
+ evaluateTime: [{ required: true, message: '请选择评价时间', trigger: 'blur'}]
+ },
+ fileList: [],
+ uploadUrl: import.meta.env.VITE_API_URL + '/account/file/upload',
+ header: {
+ uid: Cookies.get('uid'),
+ Authorization: Cookies.get('token')
+ }
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object) => {
+ state.isShowDialog = true;
+ if (type === 'add') {
+ state.title = '新增上报';
+ state.form = {
+ uuid: '',
+ name: '',
+ remarks: '',
+ evaluateTime: '',
+ files: ''
+ }
+ }else{
+ state.title = '重新上报';
+ state.form = {
+ uuid: data.uuid,
+ name: '',
+ remarks: '',
+ evaluateTime: '',
+ files: ''
+ }
+ }
+ state.fileList = []
+ };
+
+ // 图片上传
+ const showTip =()=>{
+ ElMessage({
+ type: 'warning',
+ message: '超出文件上传数量'
+ });
+ }
+
+ const picSize = async(rawFile: any) => {
+ if(rawFile.size / 1024 / 1024 > 2){
+ ElMessage({
+ type: 'warning',
+ message: '文件大小不能超过2M'
+ });
+ return false
+ }
+ }
+
+ const handleAvatarSuccess = (res:any, uploadFile: any) => {
+ if(res){
+ uploadFile.name = res
+ state.form.files = res
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: '文件上传失败'
+ })
+ }
+ }
+
+ const handleRemove = (file, uploadFiles,type) => {
+ state.form.files = ''
+ }
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ const res = await judgeReportApi().addJudge([state.form])
+ if(res.data.code == '200'){
+ ElMessage({
+ type:'success',
+ message:'数据上报成功'
+ })
+ state.isShowDialog = false
+ state.fileList = []
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ context.emit('refresh');
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善基本信息'
+ })
+ }
+ })
+ }
+
+ return {
+ formRef,
+ showTip,
+ picSize,
+ handleAvatarSuccess,
+ handleRemove,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue b/src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue
new file mode 100644
index 0000000..bf72612
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/judgeReport/index.vue
@@ -0,0 +1,251 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createTime" label="上报时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="name" label="报告名称" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="remarks" label="备注" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="evaluateTime" label="评价时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="files" label="附件" show-overflow-tooltip>
+ <template #default="scope">
+ <el-button v-if="scope.row.files !== ''" size="small" text type="primary" @click="openFile(scope.row.files)">查看</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+ <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import axios from "axios";
+import Cookies from "js-cookie";
+
+// 定义接口来定义对象的类型
+interface TableDataRow {
+ id: number|null
+ reportTime: string
+ name: string
+ remarks: string
+ evaluateTime: string
+ files: string
+}
+interface TableDataState {
+ reportData: [],
+ listQuery: {
+ searchParams: {}
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+}
+
+export default defineComponent({
+ name: 'judgeReport',
+ components: {addReport },
+ setup() {
+ const reportRef= ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ listQuery: {
+ searchParams: {},
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null
+ });
+
+ // 页面加载时
+ onMounted(() => {
+ getData()
+ });
+
+ const getData = async ()=>{
+ const res = await judgeReportApi().getJudgeList(state.listQuery)
+ if(res.data.code == 200){
+ state.reportData = res.data.data
+ state.total = res.data.total
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog=(type:string,data:object)=>{
+ reportRef.value.open(type,data)
+ }
+
+ const openFile=(file: string)=>{
+ axios.get(import.meta.env.VITE_API_URL + file,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
+ if (res) {
+ const link = document.createElement('a')
+ let blob = new Blob([res.data],{type: 'application/pdf'})
+ link.style.display = "none";
+ link.href = URL.createObjectURL(blob); // 创建URL
+ window.open(link.href)
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: '文件读取失败'
+ });
+ }
+ })
+ }
+
+ // 删除用户
+ const onRowDel = (row: TableDataRow) => {
+ ElMessageBox.confirm(`此操作将永久删除报告名称:“${row.name}”,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await judgeReportApi().delJudge({ids: [row.id]})
+ if(res.data.code == '200'){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {});
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ return {
+ reportRef,
+ openFile,
+ openDialog,
+ getData,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ .el-card {
+ border: 0;
+ }
+}
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/parkingInfo/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/parkingInfo/components/addReport.vue
new file mode 100644
index 0000000..d8354cb
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/parkingInfo/components/addReport.vue
@@ -0,0 +1,202 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="方案名称" prop="programmeName">
+ <el-input v-model.trim="form.programmeName" placeholder="方案名称" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="开始时间" prop="startTime">
+ <el-date-picker v-model="form.startTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择开始时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="结束时间" prop="endTime">
+ <el-date-picker v-model="form.endTime" value-format="YYYY-MM-DD HH:mm:ss" type="datetime" placeholder="选择开始时间" style="width: 100%" />
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="开停车类型" prop="programmeType">
+ <el-radio-group v-model="form.programmeType">
+ <el-radio :label="1">开车</el-radio>
+ <el-radio :label="2">停车</el-radio>
+ </el-radio-group>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="负责部门">
+ <el-input v-model.trim="form.responsibleDept" placeholder="负责部门" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="负责人">
+ <el-input v-model.trim="form.responsiblePerson" placeholder="负责人" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="危险工艺">
+ <el-input v-model.trim="form.craftName" :autosize="{ minRows: 1 }" type="textarea" placeholder="危险工艺" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="顺序">
+ <el-input v-model.trim="form.seq" placeholder="顺序" type="number" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="准备">
+ <el-input v-model.trim="form.preparation" placeholder="准备" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="方案">
+ <el-input v-model.trim="form.programme" placeholder="方案" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string
+ isShowDialog: boolean
+ form: {
+ uuid: string
+ programmeName: string
+ startTime: string
+ endTime: string
+ programmeType: number | null
+ responsibleDept: string
+ responsiblePerson: string
+ craftName: string
+ seq: string
+ preparation: string
+ programme: string
+ }
+ rules:{}
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ setup(props, context) {
+ const formRef = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ uuid:'',
+ programmeName: '',
+ startTime: '',
+ endTime: '',
+ programmeType: null,
+ responsibleDept: '',
+ responsiblePerson: '',
+ craftName: '',
+ seq: '',
+ preparation: '',
+ programme: ''
+ },
+ rules:{
+ programmeName: [{ required: true, message: '请填写方案名称', trigger: 'blur' }],
+ startTime: [{ required: true, message: '请选择开始时间', trigger: 'blur' }],
+ endTime: [{ required: true, message: '请选择结束时间', trigger: 'blur' }],
+ programmeType: [{ required: true, message: '请选择开停车类型', trigger: 'blur' }]
+ }
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object) => {
+ state.isShowDialog = true;
+ if (type === 'add') {
+ state.title = '新增上报';
+ state.form = {
+ uuid:'',
+ programmeName: '',
+ startTime: '',
+ endTime: '',
+ programmeType: null,
+ responsibleDept: '',
+ responsiblePerson: '',
+ craftName: '',
+ seq: '',
+ preparation: '',
+ programme: ''
+ }
+ }else{
+ state.title = '重新上报';
+ state.form = {
+ uuid: data.uuid,
+ programmeName: '',
+ startTime: '',
+ endTime: '',
+ programmeType: null,
+ responsibleDept: '',
+ responsiblePerson: '',
+ craftName: '',
+ seq: '',
+ preparation: '',
+ programme: ''
+ }
+ }
+ };
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ const res = await judgeReportApi().addParking([state.form])
+ if(res.data.code == 200){
+ ElMessage({
+ type:'success',
+ message:'数据上报成功'
+ })
+ state.isShowDialog = false
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ context.emit('refresh')
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善基本信息'
+ })
+ }
+ })
+ }
+
+
+ return {
+ formRef,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/parkingInfo/index.vue b/src/views/dataUpload/saftyBaseInfo/parkingInfo/index.vue
new file mode 100644
index 0000000..055fa85
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/parkingInfo/index.vue
@@ -0,0 +1,223 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="reportTime" label="上报时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="programmeName" label="方案名称" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="startTime" label="开始时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="endTime" label="结束时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="programmeType" label="开停车类型" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="responsibleDept" label="负责部门" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="responsiblePerson" label="负责人" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="craftName" label="危险工艺" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="seq" label="顺序" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="preparation" label="准备" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="programme" label="方案" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+ <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+interface TableDataState {
+ reportData: [],
+ listQuery: {
+ searchParams: {}
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+}
+
+export default defineComponent({
+ name: 'parkingInfo',
+ components: {addReport },
+ setup() {
+ const reportRef= ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ listQuery: {
+ searchParams: {},
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null
+ });
+
+ // 页面加载时
+ onMounted(() => {
+ getData()
+ });
+
+ const getData = async ()=>{
+ const res = await judgeReportApi().getParkingList(state.listQuery)
+ if(res.data.code == 200){
+ state.reportData = res.data.data
+ state.total = res.data.total
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog=(type:string,data:object)=>{
+ reportRef.value.open(type,data)
+ }
+
+ // 删除用户
+ const onRowDel = (row: Object) => {
+ ElMessageBox.confirm(`此操作将永久删除:“${row.programmeName}”,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await judgeReportApi().delParking({ids: [row.id]})
+ if(res.data.code == 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {});
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ return {
+ reportRef,
+ openDialog,
+ getData,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ .el-card {
+ border: 0;
+ }
+}
+</style>
diff --git a/src/views/dataUpload/saftyBaseInfo/productionInfo/components/addReport.vue b/src/views/dataUpload/saftyBaseInfo/productionInfo/components/addReport.vue
new file mode 100644
index 0000000..6f72495
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/productionInfo/components/addReport.vue
@@ -0,0 +1,286 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="160px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="工艺名称" prop="craftName">
+ <el-input v-model.trim="form.craftName" placeholder="工艺名称" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="工艺简介" prop="craftContent">
+ <el-input v-model.trim="form.craftContent" :autosize="{ minRows: 1 }" type="textarea" placeholder="工艺简介" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="主要生产设备" prop="mainProdEquip">
+ <el-input v-model.trim="form.mainProdEquip" :autosize="{ minRows: 1 }" type="textarea" placeholder="主要生产设备" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="重点部位" prop="keyParts">
+ <el-input v-model.trim="form.keyParts" placeholder="重点部位" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="重大危险源" prop="hazardCode">
+ <el-input v-model.trim="form.hazardCode" :autosize="{ minRows: 1 }" type="textarea" placeholder="重大危险源" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="涉及的危险化学品">
+ <el-input v-model.trim="form.msds" :autosize="{ minRows: 1 }" type="textarea" placeholder="涉及的危险化学品" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="工艺危险特点">
+ <el-input v-model.trim="form.hazardCharacter" placeholder="工艺危险特点" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="重点监控工艺参数指标">
+ <el-input v-model.trim="form.parameterIndex" placeholder="重点监控工艺参数指标" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="现有安全控制手段">
+ <el-input v-model.trim="form.controlMean" placeholder="现有安全控制手段" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="反应类型">
+ <el-input v-model.trim="form.reactionType" placeholder="反应类型" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="重点监控单元">
+ <el-input v-model.trim="form.keyMonitorUnit" placeholder="重点监控单元" clearable></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="工艺图纸">
+ <el-upload accept="image/*" multiple list-type="picture-card" :action="uploadUrl" :headers="header" method="post" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :on-success="handleAvatarSuccess" :limit='2' v-model:file-list="fileList" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove">
+ <el-icon><Plus /></el-icon>
+ <template #tip>
+ <div class="el-upload__tip">上传图片尺寸小于2M,最多可上传2张</div>
+ </template>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <el-dialog v-model="imgDialog">
+ <img width="100%" :src="imageUrl" alt="Preview Image" />
+ </el-dialog>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
+import Cookies from "js-cookie";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string
+ isShowDialog: boolean
+ form: {
+ uuid: string
+ craftName: string
+ craftContent: string
+ mainProdEquip: string
+ keyParts: string
+ hazardCode: string
+ msds: string
+ hazardCharacter: string
+ parameterIndex: string
+ controlMean: string
+ craftDraw: string
+ reactionType: string
+ keyMonitorUnit: string
+ }
+ rules:{},
+ fileList: [],
+ uploadUrl: string,
+ header: {},
+ imgDialog: boolean,
+ imageUrl: string
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ setup(props, context) {
+ const formRef = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ uuid: '',
+ craftName: '',
+ craftContent: '',
+ mainProdEquip: '',
+ keyParts: '',
+ hazardCode: '',
+ msds: '',
+ hazardCharacter: '',
+ parameterIndex: '',
+ controlMean: '',
+ craftDraw: '',
+ reactionType: '',
+ keyMonitorUnit: ''
+ },
+ rules:{
+ craftName: [{ required: true, message: '请填写工艺名称', trigger: 'blur' }],
+ craftContent: [{ required: true, message: '请填写工艺简介', trigger: 'blur' }],
+ mainProdEquip: [{ required: true, message: '请填写主要生产设备', trigger: 'blur' }],
+ keyParts: [{ required: true, message: '请填写重点部位', trigger: 'blur' }],
+ hazardCode: [{ required: true, message: '请填写重大危险源', trigger: 'blur' }]
+ },
+ fileList: [],
+ uploadUrl: import.meta.env.VITE_API_URL + '/account/file/upload',
+ header: {
+ uid: Cookies.get('uid'),
+ Authorization: Cookies.get('token')
+ },
+ imgDialog: false,
+ imageUrl: ''
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string, data: object) => {
+ state.isShowDialog = true;
+ if (type === 'add') {
+ state.title = '新增上报'
+ state.form = {
+ uuid: '',
+ craftName: '',
+ craftContent: '',
+ mainProdEquip: '',
+ keyParts: '',
+ hazardCode: '',
+ msds: '',
+ hazardCharacter: '',
+ parameterIndex: '',
+ controlMean: '',
+ craftDraw: '',
+ reactionType: '',
+ keyMonitorUnit: ''
+ }
+ }else{
+ state.title = '重新上报'
+ state.form = {
+ uuid: data.uuid,
+ craftName: '',
+ craftContent: '',
+ mainProdEquip: '',
+ keyParts: '',
+ hazardCode: '',
+ msds: '',
+ hazardCharacter: '',
+ parameterIndex: '',
+ controlMean: '',
+ craftDraw: '',
+ reactionType: '',
+ keyMonitorUnit: ''
+ }
+ }
+ state.fileList=[]
+ };
+
+ // 新增修改
+ const onSubmit = async () => {
+ formRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ state.form.craftDraw = state.fileList.map(i=>i.name).join(',')
+ const res = await judgeReportApi().addProduct([state.form])
+ if(res.data.code == '200'){
+ ElMessage({
+ type:'success',
+ message:'数据上报成功'
+ })
+ state.isShowDialog = false
+ state.fileList = []
+ }else{
+ ElMessage({
+ type:'warning',
+ message:res.data.msg
+ })
+ }
+ context.emit('refresh')
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善基本信息'
+ })
+ }
+ })
+ }
+
+ // 图片上传
+ const showTip =()=>{
+ ElMessage({
+ type: 'warning',
+ message: '超出文件上传数量'
+ });
+ }
+
+ const picSize = async(rawFile: any) => {
+ if(rawFile.size / 1024 / 1024 > 2){
+ ElMessage({
+ type: 'warning',
+ message: '文件大小不能超过2M'
+ });
+ return false
+ }
+ }
+
+ const handleAvatarSuccess = (res:any, uploadFile: any) => {
+ if(res){
+ uploadFile.name = res
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: '文件上传失败'
+ })
+ }
+ }
+
+ const handlePictureCardPreview = (uploadFile) => {
+ state.imageUrl = uploadFile.url
+ state.imgDialog = true;
+ }
+
+ const handleRemove = (file, uploadFiles,type) => {
+ state.fileList = uploadFiles
+ }
+
+
+ return {
+ formRef,
+ showTip,
+ picSize,
+ handleAvatarSuccess,
+ handlePictureCardPreview,
+ handleRemove,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/dataUpload/saftyBaseInfo/productionInfo/index.vue b/src/views/dataUpload/saftyBaseInfo/productionInfo/index.vue
new file mode 100644
index 0000000..7325ab5
--- /dev/null
+++ b/src/views/dataUpload/saftyBaseInfo/productionInfo/index.vue
@@ -0,0 +1,270 @@
+<template>
+ <div class="home-container">
+ <div style="height: 100%">
+ <div class="homeCard">
+ <div class="main-card">
+ <el-row class="cardTop">
+ <el-col :span="12" class="mainCardBtn">
+ <el-button type="primary" icon="Plus" size="default" @click="openDialog('add',{})">新增</el-button>
+ </el-col>
+ </el-row>
+ <el-table :data="reportData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column prop="id" label="id" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="createTime" label="上报时间" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="craftName" label="工艺名称" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="craftContent" label="工艺简介" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="mainProdEquip" label="主要生产设备" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="keyParts" label="重点部位" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="hazardCode" label="重大危险源" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="msds" label="涉及的危险化学品" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="hazardCharacteristic" label="工艺危险特点" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="parameterIndex" label="重点监控工艺参数指标" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="controlMean" label="现有安全控制手段" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="craftDraw" label="工艺图纸" show-overflow-tooltip>
+ <template #default="scope">
+ <el-button v-if="scope.row.craftDraw !== ''" v-for="item in scope.row.craftDraw.split(',')" size="small" text type="primary" @click="openFile(item)">查看</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column prop="reactionType" label="反应类型" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="keyMonitorUnit" label="重点监控单元" show-overflow-tooltip></el-table-column>
+ <el-table-column label="操作" width="140">
+ <template #default="scope">
+ <el-button size="small" text type="primary" @click="openDialog('update',scope.row)">重新上报</el-button>
+ <el-button style="color: red" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <div class="pageBtn">
+ <el-pagination @size-change="onHandleSizeChange" small="false" @current-change="onHandleCurrentChange" class="page-position" :pager-count="5" :page-sizes="[10, 20, 30]" v-model:current-page="listQuery.pageIndex" background v-model:page-size="listQuery.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total"> </el-pagination>
+ </div>
+ </div>
+ </div>
+ </div>
+ <add-report ref="reportRef" @refresh="getData"></add-report>
+ </div>
+</template>
+
+<script lang="ts">
+import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue'
+import { ElMessageBox, ElMessage } from 'element-plus'
+import { Plus } from '@element-plus/icons-vue'
+import addReport from "./components/addReport.vue"
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import axios from "axios";
+import Cookies from "js-cookie";
+
+// 定义接口来定义对象的类型
+interface TableDataRow {
+ id: number|null
+ reportTime: string
+ craftName: string
+ craftContent: string
+ mainProdEquip: string
+ keyParts: string
+ hazardCode: string
+ msds: string
+ hazardCharacter: string
+ parameterIndex: string
+ controlMean: string
+ craftDraw: string
+ reactionType: string
+ keyMonitorUnit: string
+}
+interface TableDataState {
+ reportData: [],
+ listQuery: {
+ searchParams: {}
+ pageIndex: number
+ pageSize: number
+ }
+ total: null | number
+ baseUrl: string
+}
+
+export default defineComponent({
+ name: 'productionInfo',
+ components: {addReport },
+ setup() {
+ const reportRef= ref();
+ const state = reactive<TableDataState>({
+ reportData: [],
+ listQuery: {
+ searchParams: {},
+ pageIndex: 1,
+ pageSize: 10
+ },
+ total: null,
+ baseUrl: import.meta.env.VITE_API_URL
+ });
+
+ // 页面加载时
+ onMounted(() => {
+ getData()
+ console.log(state.baseUrl)
+ });
+
+ const getData = async ()=>{
+ const res = await judgeReportApi().getProductList(state.listQuery)
+ if(res.data.code == 200){
+ state.reportData = res.data.data
+ state.total = res.data.total
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ }
+
+ const openDialog=(type:string,data:object)=>{
+ reportRef.value.open(type,data)
+ }
+
+ // 删除用户
+ const onRowDel = (row: TableDataRow) => {
+ ElMessageBox.confirm(`此操作将永久删除账户名称:“${row.craftName}”,是否继续?`, '提示', {
+ confirmButtonText: '确认',
+ cancelButtonText: '取消',
+ type: 'warning'
+ })
+ .then(async () => {
+ const res = await judgeReportApi().delProduct({ids: [row.id]})
+ if(res.data.code == 200){
+ ElMessage({
+ type: 'success',
+ message: '删除成功'
+ })
+ await getData()
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ })
+ }
+ })
+ .catch(() => {});
+ };
+ // 分页改变
+ const onHandleSizeChange = (val: number) => {
+ state.listQuery.pageSize = val;
+ getData()
+ };
+ // 分页改变
+ const onHandleCurrentChange = (val: number) => {
+ state.listQuery.pageIndex = val;
+ getData()
+ };
+
+ const openFile=(file: string)=>{
+ axios.get(import.meta.env.VITE_API_URL + file,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
+ if (res) {
+ const link = document.createElement('a')
+ let blob = new Blob([res.data],{type: res.data.type})
+ link.style.display = "none";
+ link.href = URL.createObjectURL(blob); // 创建URL
+ window.open(link.href)
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: '文件读取失败'
+ });
+ }
+ })
+ }
+
+ return {
+ reportRef,
+ openDialog,
+ openFile,
+ getData,
+ onRowDel,
+ onHandleSizeChange,
+ onHandleCurrentChange,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
+<style lang="scss" scoped>
+.home-container {
+ height: calc(100vh - 144px);
+ box-sizing: border-box;
+ overflow: hidden;
+ .demo-tabs {
+ width: 100%;
+ height: 100%;
+
+ &::v-deep(.el-tabs__content) {
+ height: calc(100% - 60px);
+ }
+
+ .el-tab-pane {
+ height: 100%;
+ }
+ }
+ .homeCard {
+ width: 100%;
+ padding: 20px;
+ box-sizing: border-box;
+ background: #fff;
+ border-radius: 4px;
+
+ .main-card {
+ width: 100%;
+ height: 100%;
+ .cardTop {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ margin-bottom: 20px;
+ .mainCardBtn {
+ margin: 0;
+ }
+ }
+ .pageBtn {
+ height: 60px;
+ display: flex;
+ align-items: center;
+ justify-content: right;
+
+ .demo-pagination-block + .demo-pagination-block {
+ margin-top: 10px;
+ }
+ .demo-pagination-block .demonstration {
+ margin-bottom: 16px;
+ }
+ }
+ }
+ &:last-of-type {
+ height: calc(100% - 100px);
+ }
+ }
+ .el-row {
+ display: flex;
+ align-items: center;
+ margin-bottom: 20px;
+ &:last-child {
+ margin-bottom: 0;
+ }
+ .grid-content {
+ align-items: center;
+ min-height: 36px;
+ }
+
+ .topInfo {
+ display: flex;
+ align-items: center;
+ font-size: 16px;
+ font-weight: bold;
+
+ & > div {
+ white-space: nowrap;
+ margin-right: 20px;
+ }
+ }
+ }
+ .el-card {
+ border: 0;
+ }
+}
+</style>
diff --git a/src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue b/src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue
index e9b55fb..c39453d 100644
--- a/src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue
+++ b/src/views/intellectInspect/inspectBasic/discriminate/components/RFIDDialog.vue
@@ -14,12 +14,12 @@
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="处理人所属车间" prop="exceptionHandlerDepId">
- <el-cascader @change="getUser" :options="departmentData" :props="{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName' }" placeholder="请输入RFID所属车间" clearable class="input-add" v-model="RFIDForm.exceptionHandlerDepId"> </el-cascader>
+ <el-form-item label="处理人所属车间">
+ <el-cascader @change="getUser" :options="departmentData" filterable :props="{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName'}" placeholder="请输入RFID所属车间" clearable class="input-add" v-model="RFIDForm.exceptionHandlerDepId"> </el-cascader>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
- <el-form-item label="异常处理人" prop="exceptionHandlerId">
+ <el-form-item label="异常处理人">
<el-select v-model="RFIDForm.exceptionHandlerId" filterable class="input-add" placeholder="请输入异常处理人">
<el-option v-for="item in userList" :key="item.uid" :label="item.realName" :value="item.uid"></el-option>
</el-select>
@@ -27,7 +27,7 @@
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="RFID所属车间" prop="rfidDepartmentId">
- <el-cascader :options="departmentData" :props="{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName' }" placeholder="请输入RFID所属车间" clearable class="input-add" v-model="RFIDForm. rfidDepartmentId"> </el-cascader>
+ <el-cascader :options="departmentData" filterable :props="{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName' }" placeholder="请输入RFID所属车间" clearable class="input-add" v-model="RFIDForm. rfidDepartmentId"> </el-cascader>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
@@ -108,8 +108,8 @@
rfid: [{ required: true, message: '请填写RFID编码', trigger: 'blur' }],
rfidName: [{ required: true, message: '请填写RFID名称', trigger: 'change' }],
rfidDepartmentId: [{ required: true, message: '请选择', trigger: 'change' }],
- exceptionHandlerDepId: [{ required: true, message: '请选择', trigger: 'change' }],
- exceptionHandlerId: [{ required: true, message: '请选择', trigger: 'change' }]
+ // exceptionHandlerDepId: [{ required: true, message: '请选择', trigger: 'change' }],
+ // exceptionHandlerId: [{ required: true, message: '请选择', trigger: 'change' }]
},
fileList: [],
diff --git a/src/views/intellectInspect/inspectBasic/discriminate/index.vue b/src/views/intellectInspect/inspectBasic/discriminate/index.vue
index 8c99fb4..d8e4506 100644
--- a/src/views/intellectInspect/inspectBasic/discriminate/index.vue
+++ b/src/views/intellectInspect/inspectBasic/discriminate/index.vue
@@ -22,6 +22,7 @@
</el-icon>
新增RFID
</el-button>
+ <el-button type="primary" :icon="Upload" size="default" @click="openUploadDialog('id')">导入</el-button>
</div>
<el-table :data="RFIDData.data" style="width: 100%">
<el-table-column type="index" label="序号" width="60" />
@@ -47,6 +48,7 @@
<br />
</el-card>
<RFIDDialog ref="RFIDDialogRef" @refreshRFID="initRFIDTableData" />
+ <upload-dialog ref="uploadRef" @refresh="initRFIDTableData"></upload-dialog>
</div>
</template>
@@ -54,8 +56,9 @@
import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
import RFIDDialog from './components/RFIDDialog.vue';
+import uploadDialog from '/@/views/intellectInspect/inspectTaskManage/inspectTask/components/upload.vue'
import { RFIDApi } from '/@/api/intellectInspectSystem/RFID';
-import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
+import { Edit, View, Plus, Delete, Refresh, Search, Download, Upload } from '@element-plus/icons-vue';
import type { UploadProps, UploadUserFile } from 'element-plus'
import {departmentApi} from "/@/api/systemManage/department";
// 定义接口来定义对象的类型
@@ -85,9 +88,10 @@
export default defineComponent({
name: 'RFID',
- components: { RFIDDialog, Edit, Delete },
+ components: { RFIDDialog, uploadDialog },
setup() {
const RFIDDialogRef = ref();
+ const uploadRef = ref()
const state = reactive<TableDataState>({
RFIDData: {
data: [],
@@ -159,6 +163,10 @@
}
};
+ const openUploadDialog = (type: string)=>{
+ uploadRef.value.open(type)
+ }
+
const handleSearch = () => {
initRFIDTableData();
};
@@ -181,13 +189,16 @@
return {
Edit,
Delete,
+ Upload,
+ uploadRef,
+ openUploadDialog,
handleSearch,
onOpenDialogRef,
onHandleSizeChange,
onDelProductionDevice,
onHandleCurrentChange,
- RFIDDialog,
RFIDDialogRef,
+
initRFIDTableData,
...toRefs(state)
};
diff --git a/src/views/intellectInspect/inspectBasic/facility/components/facilityAreaDialog.vue b/src/views/intellectInspect/inspectBasic/facility/components/facilityAreaDialog.vue
index 544a43a..de6a87e 100644
--- a/src/views/intellectInspect/inspectBasic/facility/components/facilityAreaDialog.vue
+++ b/src/views/intellectInspect/inspectBasic/facility/components/facilityAreaDialog.vue
@@ -17,7 +17,7 @@
</el-col>
<el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
<el-form-item label="所属部门" prop="regionDepartmentId">
- <el-cascader :options="departmentData" :props="{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName' }" placeholder="请输入RFID所属车间" clearable class="input-add" v-model="facilityAreaForm.regionDepartmentId"> </el-cascader>
+ <el-cascader :options="departmentData" filterable :props="{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName' }" placeholder="请选择所属部门" clearable class="input-add" v-model="facilityAreaForm.regionDepartmentId"> </el-cascader>
</el-form-item>
</el-col>
</el-row>
diff --git a/src/views/intellectInspect/inspectBasic/facility/index.vue b/src/views/intellectInspect/inspectBasic/facility/index.vue
index 347224b..785ba6a 100644
--- a/src/views/intellectInspect/inspectBasic/facility/index.vue
+++ b/src/views/intellectInspect/inspectBasic/facility/index.vue
@@ -24,6 +24,7 @@
</el-icon>
新增设备区域
</el-button>
+ <el-button type="primary" :icon="Upload" size="default" @click="openUploadDialog('区域')">导入</el-button>
</div>
<el-table :data="facilityAreaData.data" style="width: 100%">
<el-table-column type="index" label="序号" width="60" />
@@ -47,6 +48,7 @@
<br />
</el-card>
<facilityAreaDialog ref="facilityAreaDialogRef" @refreshFacilityArea="initFacilityAreaTableData" />
+ <upload-dialog ref="uploadRef" @refresh="initFacilityAreaTableData"></upload-dialog>
</div>
</template>
@@ -54,8 +56,9 @@
import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
import facilityAreaDialog from './components/facilityAreaDialog.vue';
+import uploadDialog from '/@/views/intellectInspect/inspectTaskManage/inspectTask/components/upload.vue'
import { facilityAreaApi } from '/@/api/intellectInspectSystem/facilityAreaManage';
-import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
+import { Edit, View, Plus, Delete, Refresh, Search, Download, Upload } from '@element-plus/icons-vue';
// 定义接口来定义对象的类型
interface TableData {
@@ -89,9 +92,10 @@
export default defineComponent({
name: 'facilityArea',
- components: { facilityAreaDialog, Edit, Delete },
+ components: { facilityAreaDialog, Edit, Delete, uploadDialog },
setup() {
const facilityAreaDialogRef = ref();
+ const uploadRef = ref()
const state = reactive<TableDataState>({
facilityAreaData: {
data: [],
@@ -137,6 +141,11 @@
const onOpenDialogRef = (type: string, value: any) => {
facilityAreaDialogRef.value.openFacilityAreaDialog(type, value, state.facilityAreaTypeList);
};
+
+ const openUploadDialog = (type: string)=>{
+ uploadRef.value.open(type)
+ }
+
// 删除
const onDelProductionDevice = (row: any) => {
ElMessageBox.confirm(`此操作将永久删除该条设备区域:“${row.region}”,是否继续?`, '提示', {
@@ -185,6 +194,9 @@
return {
Edit,
Delete,
+ Upload,
+ uploadRef,
+ openUploadDialog,
handleSearch,
onOpenDialogRef,
onHandleSizeChange,
diff --git a/src/views/intellectInspect/inspectBasic/inspectPoint/index.vue b/src/views/intellectInspect/inspectBasic/inspectPoint/index.vue
index 62064e6..7a4211e 100644
--- a/src/views/intellectInspect/inspectBasic/inspectPoint/index.vue
+++ b/src/views/intellectInspect/inspectBasic/inspectPoint/index.vue
@@ -24,6 +24,7 @@
</el-icon>
新增巡检点
</el-button>
+ <el-button type="primary" :icon="Upload" size="default" @click="openUploadDialog('点')">导入</el-button>
</div>
<el-table :data="inspectPointData.data" style="width: 100%">
<el-table-column type="index" label="序号" width="60" />
@@ -47,6 +48,7 @@
<br />
</el-card>
<inspectPointDialog ref="inspectPointDialogRef" @refreshInspectPoint="initInspectPointTableData" />
+ <upload-dialog ref="uploadRef" @refresh="initInspectPointTableData"></upload-dialog>
</div>
</template>
@@ -54,9 +56,10 @@
import { toRefs, reactive, onMounted, ref, defineComponent } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
import inspectPointDialog from './components/inspectPointDialog.vue';
+import uploadDialog from '/@/views/intellectInspect/inspectTaskManage/inspectTask/components/upload.vue'
import { inspectPointApi } from '/@/api/intellectInspectSystem/inspectPointManage';
import { facilityAreaApi } from '/@/api/intellectInspectSystem/facilityAreaManage';
-import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
+import { Edit, View, Plus, Delete, Refresh, Search, Download, Upload } from '@element-plus/icons-vue';
import { RFIDApi } from '/@/api/intellectInspectSystem/RFID';
// 定义接口来定义对象的类型
@@ -89,9 +92,10 @@
export default defineComponent({
name: 'productionDevice',
- components: { inspectPointDialog, Edit, Delete },
+ components: { inspectPointDialog, Edit, Delete, uploadDialog },
setup() {
const inspectPointDialogRef = ref();
+ const uploadRef = ref()
const state = reactive<TableDataState>({
inspectPointData: {
data: [],
@@ -151,6 +155,11 @@
const onOpenDialogRef = (type: string, value: any) => {
inspectPointDialogRef.value.openInspectPointDialog(type, value, state.regionNameList, state.RFIDList);
};
+
+ const openUploadDialog = (type: string)=>{
+ uploadRef.value.open(type)
+ }
+
// 删除
const onDelProductionDevice = (row: any) => {
ElMessageBox.confirm(`此操作将永久删除该巡检点:“${row.code}”,是否继续?`, '提示', {
@@ -200,6 +209,9 @@
return {
Edit,
Delete,
+ Upload,
+ uploadRef,
+ openUploadDialog,
handleSearch,
onOpenDialogRef,
onHandleSizeChange,
diff --git a/src/views/intellectInspect/inspectTaskManage/inspectTask/components/inspectTaskDialog.vue b/src/views/intellectInspect/inspectTaskManage/inspectTask/components/inspectTaskDialog.vue
index 610775a..237c0db 100644
--- a/src/views/intellectInspect/inspectTaskManage/inspectTask/components/inspectTaskDialog.vue
+++ b/src/views/intellectInspect/inspectTaskManage/inspectTask/components/inspectTaskDialog.vue
@@ -99,7 +99,7 @@
<!-- </div>-->
<div class="text item" v-for="i in RFIDList">
<div v-if="i.id == item.rfidId">
- 关联RFID:<span>{{ i.rfidName }}</span>
+ 关联RFID:<span>{{ i.rfid }}</span>
</div>
</div>
<!-- <div class="text item">-->
@@ -151,11 +151,11 @@
<el-option v-for="item in inspectPointAllList" :key="item.id" :value="item.id" :label="item.code"></el-option>
</el-select>
</el-form-item>
- <el-form-item label="所属设备区域" prop="regionId">
- <el-input v-model="inspectPointForm.regionId" class="input-add" readonly />
+ <el-form-item label="所属设备区域" prop="region">
+ <el-input v-model="inspectPointForm.region" class="input-add" readonly />
</el-form-item>
- <el-form-item label="关联RFID" prop="rfidId">
- <el-input v-model="inspectPointForm.rfidId" class="input-add" readonly />
+ <el-form-item label="关联RFID" prop="rfid">
+ <el-input v-model="inspectPointForm.rfid" class="input-add" readonly />
</el-form-item>
<el-form-item label="选择巡检指标" prop="quotaId">
<el-select v-model="inspectPointForm.quotaId" @change="giveQuotaUnit" placeholder="请选择巡检指标" class="input-add">
@@ -253,7 +253,7 @@
code: string;
regionId: number;
rfidId: number;
- rfidName: string;
+ rfid: string;
region: string;
}
interface classGroup {
@@ -275,8 +275,10 @@
pointId: number | null;
pointUuid: string | null;
regionId: number | null;
+ region: string
regionUuid: string | null;
rfidId: number | null;
+ rfid: string
quotaId: number | null;
quotaUnit: string | null;
execSequence: number | null;
@@ -305,8 +307,10 @@
pointId: null,
pointUuid: null,
regionId: null,
+ region: '',
regionUuid: null,
rfidId: null,
+ rfid: '',
quotaId: null,
quotaUnit: null,
execSequence: null,
@@ -395,8 +399,10 @@
pointId: null,
pointUuid: null,
regionId: null,
+ region: '',
regionUuid: null,
rfidId: null,
+ rfid: '',
quotaId: null,
quotaUnit: null,
execSequence: null,
@@ -566,7 +572,9 @@
const giveRegionAndRFID = () => {
data.inspectPointForm.regionId = data.inspectPointAllList.find((item) => item.id === data.inspectPointForm.pointId)?.regionId as number;
+ data.inspectPointForm.region = data.inspectPointAllList.find((item) => item.id === data.inspectPointForm.pointId)?.region as string;
data.inspectPointForm.rfidId = data.inspectPointAllList.find((item) => item.id === data.inspectPointForm.pointId)?.rfidId as number;
+ data.inspectPointForm.rfid = data.inspectPointAllList.find((item) => item.id === data.inspectPointForm.pointId)?.rfid as string;
};
const giveClassGroup = () => {
diff --git a/src/views/intellectInspect/inspectTaskManage/inspectTask/components/upload.vue b/src/views/intellectInspect/inspectTaskManage/inspectTask/components/upload.vue
new file mode 100644
index 0000000..8aec706
--- /dev/null
+++ b/src/views/intellectInspect/inspectTaskManage/inspectTask/components/upload.vue
@@ -0,0 +1,204 @@
+<template>
+ <div class="system-add-user-container">
+ <el-dialog :title="title" v-model="isShowDialog" width="50%">
+ <el-form :model="form" size="default" ref="formRef" :rules="rules" label-width="120px">
+ <el-row :gutter="35">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="模板">
+ <el-button type="primary" @click="downloadFile">点击下载模板</el-button>
+ </el-form-item>
+ </el-col>
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="文件上传">
+ <el-upload accept=".xlsx,.xls" :auto-upload="false" method="post" :on-exceed="showTip" :limit='1' v-model:file-list="fileList" :before-upload="picSize" :on-remove="handleRemove" :before-remove="beforeRemove">
+ <el-button type="primary">点击上传</el-button>
+ <template #tip>
+ <div class="el-upload__tip">尺寸小于2M,最多可上传1份</div>
+ </template>
+ </el-upload>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="isShowDialog = !isShowDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onSubmit" size="default">确认导入</el-button>
+ </span>
+ </template>
+ </el-dialog>
+ </div>
+</template>
+
+<script lang="ts">
+import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
+import { ElMessageBox, ElMessage } from 'element-plus';
+import axios from "axios";
+import Cookies from "js-cookie";
+import * as XLSX from "xlsx";
+import {judgeReportApi} from "/@/api/dataUpload/saftyBaseInfo/judgeReport";
+import { lineApi } from "/@/api/intelligentLine/index";
+
+// 定义接口来定义对象的类型
+interface DataState {
+ title: string;
+ isShowDialog: boolean;
+ form: {
+ files: any
+ }
+ rules:{},
+ fileList: [],
+ uploadUrl: string,
+ header: {}
+}
+
+export default defineComponent({
+ name: 'reportDialog',
+ setup(props, context) {
+ const formRef = ref()
+ const state = reactive<DataState>({
+ title: '',
+ isShowDialog: false,
+ form: {
+ files: ''
+ },
+ rules:{
+ },
+ fileList: [],
+ uploadUrl: '',
+ header: {
+ uid: Cookies.get('uid'),
+ Authorization: Cookies.get('token')
+ }
+ })
+
+ // 页面加载时
+ onMounted(() => {
+
+ })
+ // 打开弹窗
+ const open = (type: string) => {
+ state.isShowDialog = true;
+ if (type === '任务') {
+ state.title = '巡检单元导入';
+ }
+ if(type == 'id'){
+ state.title = '巡检RFID导入';
+ }
+ if(type == '区域'){
+ state.title = '巡检区域导入';
+ }
+ if(type == '点'){
+ state.title = '巡检点导入';
+ }
+ state.form = {
+ files: ''
+ }
+ state.fileList = []
+ };
+
+
+
+ // 图片上传
+ const showTip =()=>{
+ ElMessage({
+ type: 'warning',
+ message: '超出文件上传数量'
+ });
+ }
+
+ const picSize = async(rawFile: any) => {
+ if(rawFile.size / 1024 / 1024 > 2){
+ ElMessage({
+ type: 'warning',
+ message: '文件大小不能超过2M'
+ });
+ return false
+ }
+ }
+
+
+ const handleRemove = (file, uploadFiles,type) => {
+ state.fileList = []
+ }
+
+ const downloadFile=()=>{
+ let filePath = ''
+ let name = ''
+ if(state.title == '巡检单元导入'){
+ filePath = 'excelFiles/missionUpload.xlsx'
+ name = '巡检单元导入模板.xlsx'
+ }
+ if(state.title == '巡检RFID导入'){
+ filePath = 'excelFiles/RFIDUpload.xlsx'
+ name = '巡检RFID导入模板.xlsx'
+ }
+ if(state.title == '巡检区域导入'){
+ filePath = 'excelFiles/regionUpload.xlsx'
+ name = '巡检区域导入模板.xlsx'
+ }
+ if(state.title == '巡检点导入'){
+ filePath = 'excelFiles/pointUpload.xlsx'
+ name = '巡检点导入模板.xlsx'
+ }
+ const link = document.createElement('a')
+ link.href = filePath
+ link.target = '_blank'
+ link.download = name
+ link.click()
+ }
+
+ // 新增修改
+ const onSubmit = async () => {
+ if(state.fileList.length == 0){
+ ElMessage({
+ type: 'warning',
+ message: '请先选择导入文件'
+ })
+ return
+ }else{
+ let res = {}
+ if(state.title == '巡检单元导入'){
+ res = await lineApi().uploadMission({file: state.fileList[0].raw})
+ }
+ if(state.title == '巡检RFID导入'){
+ res = await lineApi().uploadRfid({file: state.fileList[0].raw})
+ }
+ if(state.title == '巡检区域导入'){
+ res = await lineApi().uploadRegion({file: state.fileList[0].raw})
+ }
+ if(state.title == '巡检点导入'){
+ res = await lineApi().uploadPoint({file: state.fileList[0].raw})
+ }
+ if(res.data.code == 200){
+ ElMessage({
+ type: 'success',
+ message: res.data.msg,
+ duration: 4000
+ })
+ state.fileList = []
+ state.isShowDialog = false
+ context.emit('refresh')
+ }else{
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg,
+ duration: 4000
+ })
+ }
+ }
+ }
+
+ return {
+ formRef,
+ downloadFile,
+ showTip,
+ picSize,
+ handleRemove,
+ open,
+ onSubmit,
+ ...toRefs(state)
+ };
+ }
+});
+</script>
diff --git a/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue b/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue
index 5feb9f9..bb6a6fd 100644
--- a/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue
+++ b/src/views/intellectInspect/inspectTaskManage/inspectTask/index.vue
@@ -31,12 +31,13 @@
<el-row class="cardTop">
<el-col :span="12" class="mainCardBtn">
<el-button type="primary" :icon="Plus" size="default" @click="openInspectTaskDialog('新增', {})">新增</el-button>
+ <el-button type="primary" :icon="Upload" size="default" @click="openUploadDialog('任务')">导入</el-button>
<!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>-->
</el-col>
<el-button type="primary" :icon="Refresh" size="default" />
</el-row>
<el-table ref="multipleTableRef" :data="tableData.inspectTaskData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">
- <el-table-column type="selection" width="55" />
+<!-- <el-table-column type="selection" width="55" />-->
<el-table-column property="unitName" label="任务名称" />
<el-table-column property="workType" label="任务类型">
<template #default="scope">
@@ -121,15 +122,17 @@
</div>
</div>
<inspect-task-dialog ref="inspectTaskDialogRef" @refreshInspectTask="getInspectionTask"></inspect-task-dialog>
+ <upload-dialog ref="uploadRef" @refresh="getInspectionTask"></upload-dialog>
</div>
</template>
<script lang="ts">
import { toRefs, reactive, ref, onMounted } from 'vue';
-import { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';
+import { Edit, View, Plus, Delete, Refresh, Search, Download, Upload } from '@element-plus/icons-vue';
import { ElTable, ElMessage, ElMessageBox } from 'element-plus';
import { inspectTaskApi } from '/@/api/intellectInspectSystem/inspectTask';
-import inspectTaskDialog from './components/inspectTaskDialog.vue';
+import inspectTaskDialog from './components/inspectTaskDialog.vue'
+import uploadDialog from './components/upload.vue'
import { departmentApi } from '/@/api/systemManage/department';
import { teamManageApi } from '/@/api/systemManage/personShiftManage/teamManage';
import { inspectPointApi } from '/@/api/intellectInspectSystem/inspectPointManage';
@@ -178,9 +181,10 @@
}
export default {
name: 'index',
- components: { inspectTaskDialog },
+ components: { inspectTaskDialog, uploadDialog },
setup() {
const inspectTaskDialogRef = ref();
+ const uploadRef = ref()
const state = reactive<stateType>({
tableData: {
inspectTaskData: [],
@@ -425,6 +429,10 @@
}
};
+ const openUploadDialog = (type: string)=>{
+ uploadRef.value.open(type)
+ }
+
// 分页改变
const onHandleSizeChange = (val: number) => {
state.tableData.params.pageSize = val;
@@ -467,7 +475,9 @@
Delete,
Refresh,
Plus,
+ Upload,
reset,
+ openUploadDialog,
changeStatus,
changeGroup,
parseNumber,
@@ -476,6 +486,7 @@
onHandleSizeChange,
onHandleCurrentChange,
inspectTaskDialogRef,
+ uploadRef,
openInspectTaskDialog,
...toRefs(state)
};
diff --git a/src/views/intellectInspect/intelligentLine/index.vue b/src/views/intellectInspect/intelligentLine/index.vue
index bacc19e..b447b2c 100644
--- a/src/views/intellectInspect/intelligentLine/index.vue
+++ b/src/views/intellectInspect/intelligentLine/index.vue
@@ -147,6 +147,7 @@
initialY:number|null
xOffset:number|null
yOffset:number|null
+ timer: null | any
}
export default {
name: 'intelligentLine',
@@ -168,11 +169,12 @@
initialX: 0,
initialY: 0,
xOffset: 0,
- yOffset: 0
+ yOffset: 0,
+ timer: null
});
onMounted(() => {
- setInterval(() => {
+ state.timer = setInterval(() => {
state.present = new Date().toLocaleString();
}, 1000);
let curId = route.query.id
@@ -294,6 +296,7 @@
console.log('socket已经关闭');
};
})
+ clearInterval(state.timer)
draggableElement.value.removeEventListener('mousedown', handleMouseDown);
draggableElement.value.removeEventListener('mousemove', handleMouseMove);
draggableElement.value.removeEventListener('mouseup', handleMouseUp);
diff --git a/src/views/loginPage/component/accountLogin.vue b/src/views/loginPage/component/accountLogin.vue
index cbe9579..d67fed6 100644
--- a/src/views/loginPage/component/accountLogin.vue
+++ b/src/views/loginPage/component/accountLogin.vue
@@ -311,7 +311,6 @@
onSignIn,
identify,
confirmIdentity,
- validatePass,
validatePass2,
...toRefs(state)
};
diff --git a/src/views/loginPage/loginPage.vue b/src/views/loginPage/loginPage.vue
index ee6db15..5316985 100644
--- a/src/views/loginPage/loginPage.vue
+++ b/src/views/loginPage/loginPage.vue
@@ -7,7 +7,7 @@
<el-col :md="12">
<div class="loginContL">
<div class="apTitleT">新疆国泰新华</div>
- <div class="apTitleB">安全风险预警监测系统(试运行)</div>
+ <div class="apTitleB">安全风险预警监测系统</div>
<span></span>
</div>
</el-col>
diff --git a/src/views/newHome/index.vue b/src/views/newHome/index.vue
index e04132f..5e11dcb 100644
--- a/src/views/newHome/index.vue
+++ b/src/views/newHome/index.vue
@@ -21,7 +21,7 @@
<div class="leftCont"></div>
<div class="topCont">
<div class="topInfo">
- <div class="topTit">新疆国泰新华<br />安全风险预警监测系统(试运行)</div>
+ <div class="topTit">新疆国泰新华<br />安全风险预警监测系统</div>
<div class="topTime">
<div class="time">
{{ time }}
@@ -91,6 +91,16 @@
</div>
</div>
<img class="bgImg" src="../../assets/newMenu/card-12.png" />
+ </div>
+ <div class="grid-content cont-bg-2" v-throttle @click="render('12')">
+ <div class="toplayer">
+ <img class="iconImg" src="../../assets/newMenu/icon14.png" />
+ <div>
+ <div class="itemTit">监管数据融合互通系统</div>
+ <div class="enTit">Regulatory Data Integration and Interoperability System</div>
+ </div>
+ </div>
+ <img class="bgImg" src="../../assets/newMenu/card-14.png" />
</div>
<div class="grid-content cont-bg-2" v-throttle @click="render('7')">
<div class="toplayer">
@@ -183,7 +193,7 @@
</template>
<script lang="ts">
-import { toRefs, reactive, computed, defineComponent, onMounted } from 'vue';
+import {toRefs, reactive, computed, defineComponent, onMounted, onUnmounted} from 'vue';
import { storeToRefs } from 'pinia';
import { useThemeConfig } from '/@/stores/themeConfig';
import logoMini from '/@/assets/logo-mini.svg';
@@ -216,6 +226,7 @@
date: string;
weekDay: string;
dayTime: string;
+ timer: null | any
}
export default defineComponent({
@@ -250,7 +261,8 @@
date: '',
weekDay: '',
dayTime: '',
- isScreenfull: false
+ isScreenfull: false,
+ timer: null
});
const userName = computed(() =>{
@@ -360,7 +372,7 @@
window.open('http://10.211.134.139:5522/#/login');
}
const toManLocation = () =>{
- window.open('http://10.211.134.138:8081/GUOTAI');
+ window.open('http://124.88.37.66:8081/location_system_5.4.9/login/login.html?company=GUOTAI&version=5.4.9');
}
const throttle = (renderMenu: any, delay: number) => {
let flag = true;
@@ -422,12 +434,17 @@
state.once += 1;
NextLoading.done();
getDateTime();
- setInterval(() => {
+ state.timer = setInterval(() => {
getDateTime();
- }, 1000);
+ }, 30000);
// loginBg();
// loginApp()
- });
+ })
+
+ onUnmounted(() => {
+ clearInterval(state.timer)
+ });
+
return {
render,
userName,
diff --git a/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue b/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue
index 6882547..11544dc 100644
--- a/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/sqjl/index.vue
@@ -50,6 +50,11 @@
<el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />
</el-row>
<el-table ref="multipleTableRef" :data="applyData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
+ <el-table-column property="workPermitNo" label="作业编号" align="center">
+ <template #default="scope">
+ {{scope.row.workPermitNo?scope.row.workPermitNo:'—'}}
+ </template>
+ </el-table-column>
<el-table-column property="seDepName" label="事业部" align="center"/>
<el-table-column property="applyDepName" label="作业所在车间" align="center"/>
<el-table-column property="workContent" label="作业内容" align="center"/>
@@ -87,7 +92,7 @@
{{scope.row.guardianList.length}}
</template>
</el-table-column>
- <el-table-column label="风险研判" align="center">
+ <el-table-column label="作业状态" align="center">
<template #default="scope">
<el-tag>{{ statusList.find(i=>i.value === scope.row.status)?.label }}</el-tag>
</template>
@@ -98,7 +103,7 @@
<el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>
<!-- <el-button link type="success" size="small" :icon="Finished">修改</el-button>-->
<!-- <el-button link type="success" size="small" :icon="Download">正式办票</el-button>-->
-<!-- <el-button :disabled="scope.row.status == 7 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button>-->
+ <el-button link type="primary" size="small" :icon="Download" @click="downLoadRecord(scope.row)">作业票预览</el-button>
</template>
</el-table-column>
</el-table>
@@ -203,15 +208,15 @@
</span>
</template>
</el-dialog>
- <el-dialog v-model="downLoadDialog" title="提示" width="30%" center>
- <span>您确定要导出该条记录吗?</span>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="downLoadDialog = false" size="default">取消</el-button>
- <el-button type="primary" @click="conFirmDownLoad" size="default">确认</el-button>
- </span>
- </template>
- </el-dialog>
+<!-- <el-dialog v-model="downLoadDialog" title="提示" width="30%" center>-->
+<!-- <span>您确定要导出该条记录吗?</span>-->
+<!-- <template #footer>-->
+<!-- <span class="dialog-footer">-->
+<!-- <el-button @click="downLoadDialog = false" size="default">取消</el-button>-->
+<!-- <el-button type="primary" @click="conFirmDownLoad" size="default">确认</el-button>-->
+<!-- </span>-->
+<!-- </template>-->
+<!-- </el-dialog>-->
<!-- </el-tab-pane>-->
<!-- <el-tab-pane label="已通过" name="2">-->
<!-- <div style="height: 100%">-->
@@ -276,13 +281,10 @@
dialogDetails: boolean;
dialogStatus: boolean;
deleteDialog: boolean;
- downLoadDialog: boolean;
pageIndex1: number;
pageSize1: number;
chosenIndex: null | number;
deleteId: null | number;
- downLoadId: null | number;
- downLoadName: string;
totalSize1: number;
activeName: string;
addRecord: {};
@@ -340,13 +342,10 @@
dialogDetails: false,
dialogStatus: false,
deleteDialog: false,
- downLoadDialog: false,
addRecord: {},
details: {},
statusInfo: {},
deleteId: null,
- downLoadId: null,
- downLoadName: '',
deleteArr: [],
dep4List: [
{id:49,name:'电石事业部'},
@@ -567,26 +566,21 @@
state.deleteDialog = false;
};
- // 导出图表
- const downLoadBtn = (row:any) =>{
- state.downLoadId = row.workApplyId;
- state.downLoadName = row.workTypeDesc + row.workPermitNo
- state.downLoadDialog = true;
- }
// 导出方法
- const downLoadRecord = async (data: any) => {
+ const downLoadRecord = (row: any) => {
// let res = await workApplyApi().postPrinting(data);
- axios.post(import.meta.env.VITE_API_URL + `/work/apply/printingPdf`,data,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
+ console.log(row,555)
+ axios.post(import.meta.env.VITE_API_URL + `/specialwork9step/work/down/load/pdf`,{ id: row.id},{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
if (res) {
const link = document.createElement('a')
let blob = new Blob([res.data],{type: 'application/pdf'})
link.style.display = "none";
link.href = URL.createObjectURL(blob); // 创建URL
- link.setAttribute("download", state.downLoadName + "作业证.pdf");
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
+ link.setAttribute("download", row.workTypeDesc + row.workPermitNo + "作业证.pdf");
+ document.body.appendChild(link)
+ window.open(link.href)
+ document.body.removeChild(link)
} else {
ElMessage({
type: 'warning',
@@ -595,11 +589,6 @@
}
})
- };
-
- const conFirmDownLoad = () => {
- downLoadRecord({ applyWorkId: state.downLoadId });
- state.downLoadDialog = false;
};
const handleSizeChange1 = (val: number) => {
@@ -649,9 +638,8 @@
viewRecord,
viewStatus,
deleteRecordBtn,
- downLoadBtn,
+ downLoadRecord,
conFirmDelete,
- conFirmDownLoad,
getListByPage,
handleSizeChange1,
handleCurrentChange1,
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsp/index.vue b/src/views/newSpecialWorkSystem/workTicket/wdsp/index.vue
index 84dfa62..51866d3 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsp/index.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsp/index.vue
@@ -238,14 +238,14 @@
export default defineComponent({
name: 'myApproval',
components: {
- fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/fireLog.vue')),
- space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/spaceLog.vue')),
- hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/hoistLog.vue')),
- ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/groundLog.vue')),
- broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/brokenLog.vue')),
- height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/heightLog.vue')),
- power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/powerLog.vue')),
- plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/plateLog.vue'))
+ fire: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/fireLog.vue')),
+ space: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/spaceLog.vue')),
+ hoist: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/hoistLog.vue')),
+ ground: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/groundLog.vue')),
+ broken: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/brokenLog.vue')),
+ height: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/heightLog.vue')),
+ power: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/powerLog.vue')),
+ plate: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsp/components/plateLog.vue'))
},
setup() {
const userInfo = useUserInfo();
diff --git a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue
index 5eee2f8..8502469 100644
--- a/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue
+++ b/src/views/newSpecialWorkSystem/workTicket/wdsq/index.vue
@@ -6,7 +6,7 @@
<el-row class="homeCard">
<div class="basic-line" style="display:flex;white-space:nowrap;line-height: 40px">
<span>时间筛选:</span>
- <el-date-picker v-model="timeRange" value-format="YYYY-MM-DD HH:mm:ss" type="datetimerange" @change="giveTime()" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
+ <el-date-picker v-model="timeRange" value-format="YYYY-MM-DD" type="daterange" @change="giveTime" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间" />
</div>
<div class="basic-line" style="display:flex;white-space:nowrap;line-height: 40px">
<span>负责人:</span>
@@ -44,7 +44,7 @@
<el-row class="cardTop">
<el-col :span="12" class="mainCardBtn">
<el-button type="primary" :icon="Plus" size="default" @click="toApply()">申请</el-button>
- <el-button type="primary" :icon="Download" size="default" @click="exportSheet()">导出当日记录</el-button>
+ <el-button type="primary" :icon="Download" size="default" @click="exportSheet()">导出记录</el-button>
</el-col>
<el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />
</el-row>
@@ -93,7 +93,7 @@
<el-button v-else link type="primary" size="small" @click="openReport('查看', scope.row)">查看研判报告</el-button>
</template>
</el-table-column>
- <el-table-column fixed="right" label="操作" align="center" width="300">
+ <el-table-column fixed="right" label="操作" align="center" width="150">
<template #default="scope">
<span v-if="scope.row.status == -1">已废止</span>
<el-button v-if="scope.row.status == 0 || scope.row.status == 1" link type="danger" size="small" :icon="Delete" @click="abortRecordBtn(scope.row)">作废</el-button>
@@ -293,7 +293,7 @@
const giveTime = () => {
if (state.timeRange && state.timeRange !== null) {
state.searPara.startTime = state.timeRange[0];
- state.searPara.endTime = state.timeRange[1];
+ state.searPara.endTime = state.timeRange[1]
} else {
state.searPara.startTime = '';
state.searPara.endTime = '';
@@ -382,6 +382,7 @@
// 关键词查询记录
const searchRecord = async () => {
+ state.pageIndex1 = 1
getListByPage();
};
// 重置搜索
@@ -485,13 +486,17 @@
// 导出方法
const exportSheet = async () => {
// let res = await workApplyApi().postPrinting(data);
- axios.post(import.meta.env.VITE_API_URL + `/specialwork9step/work/export/excel`,{},{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
+ axios.post(import.meta.env.VITE_API_URL + `/specialwork9step/work/export/excel`,{startTime: state.searPara.startTime,endTime: state.searPara.endTime,secondDepId: state.searPara.secondDepId},{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
if (res) {
const link = document.createElement('a')
let blob = new Blob([res.data],{type: 'application/excel'})
link.style.display = "none";
link.href = URL.createObjectURL(blob); // 创建URL
- link.setAttribute("download", "作业申报记录.xlsx");
+ if(state.searPara.startTime !== '' && state.searPara.endTime !==''){
+ link.setAttribute("download", state.searPara.startTime + '—' + state.searPara.endTime +"作业申报记录.xlsx")
+ }else{
+ link.setAttribute("download", "作业申报记录.xlsx")
+ }
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
diff --git a/src/views/riskWarningSys/warningBigScreen/index.vue b/src/views/riskWarningSys/warningBigScreen/index.vue
index 53f4a47..15c75bc 100644
--- a/src/views/riskWarningSys/warningBigScreen/index.vue
+++ b/src/views/riskWarningSys/warningBigScreen/index.vue
@@ -215,6 +215,7 @@
depProps: object;
departList: Array<any>;
lastTrain: number | null;
+ timer: any|null
}
export default defineComponent({
name: 'warningScreen',
@@ -256,13 +257,14 @@
emitPath: false
},
departList: [],
+ timer: null
});
// 页面载入时执行方法
onMounted(() => {
state.depValue = screenTheme.value.depId
getTime();
getAllDepartment();
- setInterval(()=>{
+ state.timer = setInterval(()=>{
getTime()
},1000)
getTheme()
@@ -363,7 +365,7 @@
};
onBeforeUnmount(() =>{
- clearInterval()
+ clearInterval(state.timer)
})
// 隐患状态列表
// const getDeviceRecord = async () => {
diff --git a/src/views/specialWorkSystem/specialIndex/index.vue b/src/views/specialWorkSystem/specialIndex/index.vue
index ce6908a..9e3b2f9 100644
--- a/src/views/specialWorkSystem/specialIndex/index.vue
+++ b/src/views/specialWorkSystem/specialIndex/index.vue
@@ -252,14 +252,15 @@
</div>
</div>
<el-dialog v-model="dialogDetails" title="作业申请详情" center>
- <fire v-if="dialogType == 1" :details = details></fire>
- <space v-else-if="dialogType == 2" :details = details></space>
- <hoist v-else-if="dialogType == 3" :details = details></hoist>
- <ground v-else-if="dialogType == 4" :details = details></ground>
- <broken v-else-if="dialogType == 5" :details = details></broken>
- <height v-else-if="dialogType == 6" :details = details></height>
- <power v-else-if="dialogType == 7" :details = details></power>
- <plate v-else :details = details></plate>
+<!-- <fire v-if="dialogType == 1" :details = details></fire>-->
+<!-- <space v-else-if="dialogType == 2" :details = details></space>-->
+<!-- <hoist v-else-if="dialogType == 3" :details = details></hoist>-->
+<!-- <ground v-else-if="dialogType == 4" :details = details></ground>-->
+<!-- <broken v-else-if="dialogType == 5" :details = details></broken>-->
+<!-- <height v-else-if="dialogType == 6" :details = details></height>-->
+<!-- <power v-else-if="dialogType == 7" :details = details></power>-->
+<!-- <plate v-else :details = details></plate>-->
+<!-- <detail-log :type=dialogType :statusList=statusList :details = details></detail-log>-->
<template #footer>
<span class="dialog-footer">
<el-button type="primary" @click="dialogDetails = false"
@@ -371,24 +372,24 @@
components: {
VideoDetail,
WorkRecord,
- fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue')),
- space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue')),
- hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue')),
- ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue')),
- broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue')),
- height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue')),
- power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue')),
- plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue'))
+ // fire: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/fireLog.vue')),
+ // space: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/spaceLog.vue')),
+ // hoist: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/hoistLog.vue')),
+ // ground: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/groundLog.vue')),
+ // broken: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/brokenLog.vue')),
+ // height: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/heightLog.vue')),
+ // power: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/powerLog.vue')),
+ // plate: defineAsyncComponent(() => import('/@/views/newSpecialWorkSystem/workTicket/wdsq/components/plateLog.vue'))
},
setup() {
- const userInfo = useUserInfo();
- const { userInfos } = storeToRefs(userInfo);
- const router = useRouter();
+ const userInfo = useUserInfo()
+ const { userInfos } = storeToRefs(userInfo)
+ const router = useRouter()
const reviewFormRef = ref<FormInstance>()
const zyfb = ref("eChartZyfb" + Date.now() + Math.random())
const slfx = ref("eChartSlfx" + Date.now() + Math.random())
const zyqs = ref("eChartZyqs" + Date.now() + Math.random())
- const videoRef = ref();
+ const videoRef = ref()
const recordRef = ref()
const state = reactive<stateType>({
pageIndex: 1,
@@ -897,44 +898,44 @@
};
// 查看记录
- const viewDetail = (row: any) => {
- state.dialogType = row.workType
- state.details = JSON.parse(JSON.stringify(row));
- if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){
- state.details.workDetail.otherSpecialWork=[]
- }
- else {
- const a = state.details.workDetail.otherSpecialWork
- state.details.workDetail.otherSpecialWork = a.split(',').map((item) => {
- return state.workTypeList.find((i: { id: number }) => i.id === Number(item))?.name;
- });
- }
- if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){
- state.details.workDetail.involvedDepIds=[]
- }
- else {
- const a = state.details.workDetail.involvedDepIds
- state.details.workDetail.involvedDepIds = a.split(',').map((item) => {
- return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName;
- });
- }
- if(state.details.workDetail.csDepId){
- state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName;
- }
- if(state.details.workDetail.operationDepId){
- state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
- }
- if(state.details.workDetail.gbPath){
- state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',')
- }
- if(state.details.workDetail.bcPath){
- state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',')
- }
- if(state.details.workDetail.bpLocationMapPath){
- state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',')
- }
- state.dialogDetails = true;
- };
+ // const viewDetail = (row: any) => {
+ // state.dialogType = row.workType
+ // state.details = JSON.parse(JSON.stringify(row));
+ // if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){
+ // state.details.workDetail.otherSpecialWork=[]
+ // }
+ // else {
+ // const a = state.details.workDetail.otherSpecialWork
+ // state.details.workDetail.otherSpecialWork = a.split(',').map((item) => {
+ // return state.workTypeList.find((i: { id: number }) => i.id === Number(item))?.name;
+ // });
+ // }
+ // if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){
+ // state.details.workDetail.involvedDepIds=[]
+ // }
+ // else {
+ // const a = state.details.workDetail.involvedDepIds
+ // state.details.workDetail.involvedDepIds = a.split(',').map((item) => {
+ // return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName;
+ // });
+ // }
+ // if(state.details.workDetail.csDepId){
+ // state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName;
+ // }
+ // if(state.details.workDetail.operationDepId){
+ // state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
+ // }
+ // if(state.details.workDetail.gbPath){
+ // state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',')
+ // }
+ // if(state.details.workDetail.bcPath){
+ // state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',')
+ // }
+ // if(state.details.workDetail.bpLocationMapPath){
+ // state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',')
+ // }
+ // state.dialogDetails = true;
+ // };
// const handleReview = (row: object)=>{
// state.dialogReview = true
@@ -1052,7 +1053,7 @@
toApply,
searchRecord,
clearSearch,
- viewDetail,
+ // viewDetail,
viewRecord,
viewTicket,
downLoadTicket,
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/brokenLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/brokenLog.vue
deleted file mode 100644
index dcb6adc..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/brokenLog.vue
+++ /dev/null
@@ -1,152 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业单位ID">
- <el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="断路原因">
- <el-input v-model="details.workDetail.bcReason" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="断路地段说明">
- <el-input v-model="details.workDetail.bcExplain" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="涉及相关部门">
- <el-input v-model="details.workDetail.involvedDepIds" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="图片">
- <el-image v-for="item in details.workDetail.bcPath" :preview-src-list="details.workDetail.bcPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
-<!-- <el-form-item label="当前层级">-->
-<!-- <el-input v-model="details.stepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="上一层级">-->
-<!-- <el-input v-model="details.preStepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="下一层级">-->
-<!-- <el-input v-model="details.nextStepId" readonly />-->
-<!-- </el-form-item>-->
- <el-form-item label="层级审批类型">
- <el-input v-model="details.stepTypeDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
- <el-input v-model="details.stepSerial" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
- <el-input v-model="details.stepStartApprovalTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
- <el-input v-model="details.stepFinishApprovalTime" readonly />
- </el-form-item>
- <el-form-item label="审批人姓名">
- <el-input v-model="details.unitApprovalUname" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间">
- <el-input v-model="details.unitApprovalStartTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
- <el-input v-model="details.unitApprovalEndTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
- <el-input v-model="details.unitResultDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
- <el-input v-model="details.stepApprovalResultDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'space',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/fireLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/fireLog.vue
deleted file mode 100644
index ed30241..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/fireLog.vue
+++ /dev/null
@@ -1,137 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业方式">
- <el-input v-model="details.workDetail.hotMethod" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="关联其他作业">
- <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
-<!-- <el-form-item label="当前层级">-->
-<!-- <el-input v-model="details.stepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="上一层级">-->
-<!-- <el-input v-model="details.preStepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="下一层级">-->
-<!-- <el-input v-model="details.nextStepId" readonly />-->
-<!-- </el-form-item>-->
- <el-form-item label="层级审批类型">
- <el-input v-model="details.stepTypeDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
- <el-input v-model="details.stepSerial" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
- <el-input v-model="details.stepStartApprovalTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
- <el-input v-model="details.stepFinishApprovalTime" readonly />
- </el-form-item>
- <el-form-item label="审批人姓名">
- <el-input v-model="details.unitApprovalUname" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间">
- <el-input v-model="details.unitApprovalStartTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
- <el-input v-model="details.unitApprovalEndTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
- <el-input v-model="details.unitResultDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
- <el-input v-model="details.stepApprovalResultDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'fire',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/groundLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/groundLog.vue
deleted file mode 100644
index 244330e..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/groundLog.vue
+++ /dev/null
@@ -1,152 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业单位">
- <el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="范围">
- <el-input v-model="details.workDetail.gbScope" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="动土方式">
- <el-input v-model="details.workDetail.gbMethod" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="关联其他作业">
- <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="图片">
- <el-image v-for="item in details.workDetail.gbPath" :preview-src-list="details.workDetail.gbPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
-<!-- <el-form-item label="当前层级">-->
-<!-- <el-input v-model="details.stepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="上一层级">-->
-<!-- <el-input v-model="details.preStepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="下一层级">-->
-<!-- <el-input v-model="details.nextStepId" readonly />-->
-<!-- </el-form-item>-->
- <el-form-item label="层级审批类型">
- <el-input v-model="details.stepTypeDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
- <el-input v-model="details.stepSerial" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
- <el-input v-model="details.stepStartApprovalTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
- <el-input v-model="details.stepFinishApprovalTime" readonly />
- </el-form-item>
- <el-form-item label="审批人姓名">
- <el-input v-model="details.unitApprovalUname" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间">
- <el-input v-model="details.unitApprovalStartTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
- <el-input v-model="details.unitApprovalEndTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
- <el-input v-model="details.unitResultDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
- <el-input v-model="details.stepApprovalResultDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'space',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/heightLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/heightLog.vue
deleted file mode 100644
index 0fb8a7a..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/heightLog.vue
+++ /dev/null
@@ -1,146 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业单位ID">
- <el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业高度">
- <el-input v-model="details.workDetail.operationHeight" readonly type="textarea"><template #append>米(m)</template></el-input>
- </el-form-item>
- <el-form-item label="关联其他作业">
- <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
-<!-- <el-form-item label="当前层级">-->
-<!-- <el-input v-model="details.stepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="上一层级">-->
-<!-- <el-input v-model="details.preStepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="下一层级">-->
-<!-- <el-input v-model="details.nextStepId" readonly />-->
-<!-- </el-form-item>-->
- <el-form-item label="层级审批类型">
- <el-input v-model="details.stepTypeDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
- <el-input v-model="details.stepSerial" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
- <el-input v-model="details.stepStartApprovalTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
- <el-input v-model="details.stepFinishApprovalTime" readonly />
- </el-form-item>
- <el-form-item label="审批人姓名">
- <el-input v-model="details.unitApprovalUname" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间">
- <el-input v-model="details.unitApprovalStartTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
- <el-input v-model="details.unitApprovalEndTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
- <el-input v-model="details.unitResultDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
- <el-input v-model="details.stepApprovalResultDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'space',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/hoistLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/hoistLog.vue
deleted file mode 100644
index 3b4dc2a..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/hoistLog.vue
+++ /dev/null
@@ -1,146 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="吊装工具名称">
- <el-input v-model="details.workDetail.hoistingToolName" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="起吊物体重量">
- <el-input v-model="details.workDetail.weightMass" readonly type="textarea"><template #append>吨(t)</template></el-input>
- </el-form-item>
- <el-form-item label="关联其他作业">
- <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
-<!-- <el-form-item label="当前层级">-->
-<!-- <el-input v-model="details.stepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="上一层级">-->
-<!-- <el-input v-model="details.preStepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="下一层级">-->
-<!-- <el-input v-model="details.nextStepId" readonly />-->
-<!-- </el-form-item>-->
- <el-form-item label="层级审批类型">
- <el-input v-model="details.stepTypeDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
- <el-input v-model="details.stepSerial" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
- <el-input v-model="details.stepStartApprovalTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
- <el-input v-model="details.stepFinishApprovalTime" readonly />
- </el-form-item>
- <el-form-item label="审批人姓名">
- <el-input v-model="details.unitApprovalUname" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间">
- <el-input v-model="details.unitApprovalStartTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
- <el-input v-model="details.unitApprovalEndTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
- <el-input v-model="details.unitResultDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
- <el-input v-model="details.stepApprovalResultDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'space',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/plateLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/plateLog.vue
deleted file mode 100644
index f307fc0..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/plateLog.vue
+++ /dev/null
@@ -1,170 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="盲板编号">
- <el-input v-model="details.workDetail.bpCode" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="主要介质">
- <el-input v-model="details.workDetail.mainMedia" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="温度">
- <el-input v-model="details.workDetail.temperature" readonly type="textarea"><template #append>摄氏度(℃)</template></el-input>
- </el-form-item>
- <el-form-item label="压力">
- <el-input v-model="details.workDetail.pressure" readonly type="textarea"><template #append>千帕(kPa)</template></el-input>
- </el-form-item>
- <el-form-item label="盲板材质">
- <el-input v-model="details.workDetail.bpMaterialQuality" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="盲板规格">
- <el-input v-model="details.workDetail.bpSpecification" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="盲板位置">
- <el-input v-model="details.workDetail.bpLocation" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="装盲板时间">
- <el-input v-model="details.workDetail.installBpTime" readonly/>
- </el-form-item>
- <el-form-item label="拆盲板时间">
- <el-input v-model="details.workDetail.uninstallBpTime" readonly/>
- </el-form-item>
- <el-form-item label="关联其他作业">
- <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="盲板位置图">
- <el-image v-for="item in details.workDetail.bpLocationMapPath" :preview-src-list="details.workDetail.bpLocationMapPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
-<!-- <el-form-item label="当前层级">-->
-<!-- <el-input v-model="details.stepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="上一层级">-->
-<!-- <el-input v-model="details.preStepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="下一层级">-->
-<!-- <el-input v-model="details.nextStepId" readonly />-->
-<!-- </el-form-item>-->
- <el-form-item label="层级审批类型">
- <el-input v-model="details.stepTypeDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
- <el-input v-model="details.stepSerial" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
- <el-input v-model="details.stepStartApprovalTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
- <el-input v-model="details.stepFinishApprovalTime" readonly />
- </el-form-item>
- <el-form-item label="审批人姓名">
- <el-input v-model="details.unitApprovalUname" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间">
- <el-input v-model="details.unitApprovalStartTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
- <el-input v-model="details.unitApprovalEndTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
- <el-input v-model="details.unitResultDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
- <el-input v-model="details.stepApprovalResultDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'space',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/powerLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/powerLog.vue
deleted file mode 100644
index f3c893c..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/powerLog.vue
+++ /dev/null
@@ -1,149 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="电源接入点">
- <el-input v-model="details.workDetail.powerAccessPoint" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="工作电压">
- <el-input v-model="details.workDetail.workingVoltage" readonly type="textarea"><template #append>伏特(v)</template></el-input>
- </el-form-item>
- <el-form-item label="用电设备及功率">
- <el-input v-model="details.workDetail.equipmentAndPower" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="关联其他作业">
- <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
-<!-- <el-form-item label="当前层级">-->
-<!-- <el-input v-model="details.stepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="上一层级">-->
-<!-- <el-input v-model="details.preStepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="下一层级">-->
-<!-- <el-input v-model="details.nextStepId" readonly />-->
-<!-- </el-form-item>-->
- <el-form-item label="层级审批类型">
- <el-input v-model="details.stepTypeDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
- <el-input v-model="details.stepSerial" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
- <el-input v-model="details.stepStartApprovalTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
- <el-input v-model="details.stepFinishApprovalTime" readonly />
- </el-form-item>
- <el-form-item label="审批人姓名">
- <el-input v-model="details.unitApprovalUname" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间">
- <el-input v-model="details.unitApprovalStartTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
- <el-input v-model="details.unitApprovalEndTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
- <el-input v-model="details.unitResultDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
- <el-input v-model="details.stepApprovalResultDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'space',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/components/spaceLog.vue b/src/views/specialWorkSystem/workTicket/wdsp/components/spaceLog.vue
deleted file mode 100644
index d9feabc..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/components/spaceLog.vue
+++ /dev/null
@@ -1,149 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="受限空间所属单位">
- <el-input v-model="details.workDetail.csDepId" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="受限空间名称">
- <el-input v-model="details.workDetail.csName" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="空间原有介质名称">
- <el-input v-model="details.workDetail.csOriginalName" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="关联其他作业">
- <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
-<!-- <el-form-item label="当前层级">-->
-<!-- <el-input v-model="details.stepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="上一层级">-->
-<!-- <el-input v-model="details.preStepId" readonly />-->
-<!-- </el-form-item>-->
-<!-- <el-form-item label="下一层级">-->
-<!-- <el-input v-model="details.nextStepId" readonly />-->
-<!-- </el-form-item>-->
- <el-form-item label="层级审批类型">
- <el-input v-model="details.stepTypeDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepSerial && details.stepSerial!=null" label="层级排序号">
- <el-input v-model="details.stepSerial" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepStartApprovalTime && details.stepStartApprovalTime!=null" label="层级预期开始审批时间">
- <el-input v-model="details.stepStartApprovalTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepFinishApprovalTime && details.stepFinishApprovalTime!=null" label="层级预期结束审批时间">
- <el-input v-model="details.stepFinishApprovalTime" readonly />
- </el-form-item>
- <el-form-item label="审批人姓名">
- <el-input v-model="details.unitApprovalUname" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalStartTime && details.unitApprovalStartTime!=null" label="单元审批开始时间">
- <el-input v-model="details.unitApprovalStartTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitApprovalEndTime && details.unitApprovalEndTime!=null" label="单元审批结束时间">
- <el-input v-model="details.unitApprovalEndTime" readonly />
- </el-form-item>
- <el-form-item v-if="details.unitResultDesc && details.unitResultDesc!=null" label="单元审批结果">
- <el-input v-model="details.unitResultDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.statusDesc && details.statusDesc!=null" label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- <el-form-item v-if="details.stepApprovalResultDesc && details.stepApprovalResultDesc!=null" label="审批结果">
- <el-input v-model="details.stepApprovalResultDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'space',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsp/index.vue b/src/views/specialWorkSystem/workTicket/wdsp/index.vue
deleted file mode 100644
index 84dfa62..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsp/index.vue
+++ /dev/null
@@ -1,815 +0,0 @@
-<template>
- <div class="home-container">
-<!-- <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">-->
-<!-- <el-tab-pane label="申请中" name="1">-->
- <div style="height: 100%">
- <el-row class="homeCard">
- <span>作业类型:</span>
- <el-col :span="10">
- <div class="grid-content topInfo">
- <el-select v-model="searchWord">
- <el-option
- v-for="item in workType"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- <el-button type="primary" @click="searchRecord">查询</el-button>
- <el-button plain @click="clearSearch">重置</el-button>
- </div>
- </el-col>
- </el-row>
- <div class="homeCard">
- <div class="main-card">
- <el-row class="cardTop">
- <el-col :span="12" class="mainCardBtn">
- <el-button type="primary" :icon="Plus" size="default" @click="toApply()">申请</el-button>
- <!-- <el-button type="danger" :icon="Delete" size="default">删除</el-button>-->
- <!-- <el-button type="success" size="default">设置分类</el-button>-->
- </el-col>
- <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />
- </el-row>
- <el-table ref="multipleTableRef" :data="applyData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
- <el-table-column property="applyUname" label="申请人" />
- <el-table-column property="depName" label="部门名称" />
- <el-table-column property="operators" label="作业人" />
- <el-table-column property="workTypeDesc" label="作业类型" />
- <el-table-column property="workLevelDesc" label="作业等级" />
- <el-table-column property="applyTime" label="申请时间" width="180" />
- <el-table-column label="审批状态" align="center" width="180">
- <template #default="scope">
- <el-tag :type="scope.row.status==2?'success':(scope.row.status==8||scope.row.status==9)?'warning':'danger'">{{ scope.row.statusDesc }}</el-tag>
- </template>
- </el-table-column>
- <el-table-column fixed="right" label="操作" align="center" width="250">
- <template #default="scope">
- <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>
- <el-button link type="success" size="small" :icon="Finished" @click="viewStatus(scope.row)">进度</el-button>
-<!-- <el-button link type="warning" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">终止</el-button>-->
- </template>
- </el-table-column>
- </el-table>
- <div class="pageBtn">
- <el-pagination v-model:currentPage="pageIndex1" v-model:page-size="pageSize1" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize1" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
- </div>
- </div>
- </div>
- </div>
- <el-dialog v-model="dialogDetails" title="作业审批详情" center>
- <fire v-if="dialogType == 1" :details = details></fire>
- <space v-else-if="dialogType == 2" :details = details></space>
- <hoist v-else-if="dialogType == 3" :details = details></hoist>
- <ground v-else-if="dialogType == 4" :details = details></ground>
- <broken v-else-if="dialogType == 5" :details = details></broken>
- <height v-else-if="dialogType == 6" :details = details></height>
- <power v-else-if="dialogType == 7" :details = details></power>
- <plate v-else :details = details></plate>
- <template #footer>
- <span class="dialog-footer">
- <el-button type="primary" @click="dialogDetails = false"
- >确认</el-button
- >
- </span>
- </template>
- </el-dialog>
- <el-dialog v-model="dialogStatus" title="作业审批进度" center width="60%">
- <el-form v-if="approveInfo.operators.length > 0" style="margin-bottom: 40px">
- <el-form-item label="申请作业人">
- <el-input v-model="approveInfo.operators" readonly type="textarea" />
- </el-form-item>
- </el-form>
- <div style="display: flex; flex-direction: column-reverse">
- <div v-for="(item, index) in approveInfo.approvalSteps" class="stepItem">
- <div class="stepNum">{{ item.stepSerial }}</div>
- <div class="stepCard">
- <el-card class="box-card" shadow="always">
- <div class="text">
- 审批结果:<span class="bold-text">{{ item.approvalResultDesc }}</span>
- </div>
- <div class="text">
- 审批层级:<span class="bold-text">{{ item.typeDesc }}</span>
- </div>
- <div class="text" v-if="item.auditTypeDesc">
- 审批类型:<span class="bold-text">{{ item.auditTypeDesc }}</span>
- </div>
- <div class="text" v-show="item.startApprovalTime != null">
- 开始时间:<span>{{ item.startApprovalTime }}</span>
- </div>
- <div class="approveUnit">
- <div class="item-tit"><span>审批人</span><span>审批状态</span></div>
- <div class="item-cont" v-for="i in item.stepUnits">
- <span>{{ i.approvalUname }}</span
- ><span>{{ i.resultDesc }}</span>
- </div>
- </div>
- <div class="approveItem">
- <div class="item-tit">
- <span>审批项目</span>
-<!-- <span>类型</span>-->
- <div>措施标准</div>
- </div>
- <div class="item-cont" v-for="i in item.stepItems">
- <span>{{ i.itemName }}</span>
-<!-- <span>{{ i.typeDesc }}</span>-->
- <div v-if="i.measure !== null">
- <div>
- <span>作业类型:</span><span>{{ i.measure.workTypeDesc }}</span>
- </div>
- <div>
- <span>措施内容:</span><span>{{ i.measure.context }}</span>
- </div>
- </div>
- <div v-if="i.stand !== null">
- <div>
- <span>标题名称:</span><span>{{ i.stand.title }}</span>
- </div>
- <div>
- <span>标准内容:</span><span>{{ i.stand.typeDesc }}</span>
- </div>
- </div>
- </div>
- </div>
- <div class="text" v-show="item.expFinishApprovalTime != null">
- 期望结束时间:<span>{{ item.expFinishApprovalTime }}</span>
- </div>
- <div class="text" v-show="item.finishApprovalTime != null">
- 结束时间:<span>{{ item.finishApprovalTime }}</span>
- </div>
- </el-card>
- </div>
- </div>
- </div>
- </el-dialog>
- <el-dialog v-model="deleteDialog" title="提示" width="30%" center @close="indexClear">
- <span>您确定要终止该条审批吗?</span>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="deleteDialog = false" size="default">取消</el-button>
- <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button>
- </span>
- </template>
- </el-dialog>
-<!-- </el-tab-pane>-->
-<!-- <el-tab-pane label="已通过" name="2">-->
-<!-- <div style="height: 100%">-->
-<!-- <el-row class="homeCard">-->
-<!-- <el-col :span="8">-->
-<!-- <div class="grid-content topInfo">-->
-<!-- <el-input v-model="searchWord" placeholder="作业证名称"></el-input>-->
-<!-- <el-button type="primary">查询</el-button>-->
-<!-- <el-button plain>重置</el-button>-->
-<!-- </div>-->
-<!-- </el-col>-->
-<!-- </el-row>-->
-<!-- <div class="homeCard">-->
-<!-- <div class="main-card">-->
-<!-- <el-table ref="multipleTableRef" :data="passedData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">-->
-<!-- <el-table-column type="selection" width="55" />-->
-<!-- <el-table-column type="index" label="编号" width="200" />-->
-<!-- <el-table-column property="level" label="作业证等级" width="180" sortable />-->
-<!-- <el-table-column property="applyDate" label="申请日期" sortable />-->
-<!-- <el-table-column property="name" label="申请人" width="180" />-->
-<!-- <el-table-column property="department" label="申请部门" width="180" />-->
-<!-- <el-table-column label="申请状态" width="180">-->
-<!-- <template #default="scope">-->
-<!-- <el-tag type="success">{{ scope.row.status }}</el-tag>-->
-<!-- </template>-->
-<!-- </el-table-column>-->
-<!-- </el-table>-->
-<!-- <div class="pageBtn">-->
-<!-- <el-pagination v-model:currentPage="pageIndex2" v-model:page-size="pageSize2" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize2" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </el-tab-pane>-->
-<!-- </el-tabs>-->
- </div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent} from 'vue';
-import { storeToRefs } from 'pinia';
-import { initBackEndControlRoutes } from '/@/router/backEnd';
-import { useUserInfo } from '/@/stores/userInfo';
-import { Session } from '/@/utils/storage';
-import { useRouter } from 'vue-router';
-import { Edit, View, Plus, Delete, Refresh, Search, Finished } from '@element-plus/icons-vue';
-import { ElTable } from 'element-plus';
-import { FormInstance, FormRules, ElMessage } from 'element-plus';
-import { workApprovalApi } from '/@/api/specialWorkSystem/workApproval';
-import type { TabsPaneContext } from 'element-plus';
-import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage";
-
-// 定义接口来定义对象的类型
-interface stateType {
- applyData: Array<string>;
- workTimeList: Array<string>;
- multipleSelection: Array<any>;
- deleteArr: Array<any>;
- approveInfo: Object;
- dialogDetails: boolean;
- dialogStatus: boolean;
- deleteDialog: boolean;
- pageIndex1: number;
- pageSize1: number;
- chosenIndex: null | number;
- deleteId: null | number;
- searchWord: string;
- totalSize1: number;
- activeName: string;
- addRecord: {};
- details: {};
- statusInfo: {};
- workType: Array<type>;
- dialogType: number | null;
- departmentList: Array<any>;
- departmentRecursionList: Array<DepartmentState>;
-}
-interface type {
- id: number;
- name: string;
-}
-interface DepartmentState {
- depId: number;
- depName: string;
-}
-export default defineComponent({
- name: 'myApproval',
- components: {
- fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/fireLog.vue')),
- space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/spaceLog.vue')),
- hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/hoistLog.vue')),
- ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/groundLog.vue')),
- broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/brokenLog.vue')),
- height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/heightLog.vue')),
- power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/powerLog.vue')),
- plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsp/components/plateLog.vue'))
- },
- setup() {
- const userInfo = useUserInfo();
- const { userInfos } = storeToRefs(userInfo);
- const router = useRouter();
- const state = reactive<stateType>({
- pageIndex1: 1,
- pageSize1: 10,
- totalSize1: 0,
- dialogType: null,
- activeName: '1',
- departmentList: [],
- departmentRecursionList: [],
- chosenIndex: null,
- searchWord: '',
- applyData: [],
- workTimeList: [],
- multipleSelection: [],
- approveInfo: {
- approvalSteps: [],
- operators: []
- },
- dialogDetails: false,
- dialogStatus: false,
- deleteDialog: false,
- addRecord: {},
- details: {},
- statusInfo: {},
- deleteId: null,
- deleteArr: [],
- workType: [
- { id: 1, name: '动火作业' },
- { id: 2, name: '受限空间作业' },
- { id: 3, name: '吊装作业' },
- { id: 4, name: '动土作业' },
- { id: 5, name: '断路作业' },
- { id: 6, name: '高处作业' },
- { id: 7, name: '临时用电作业' },
- { id: 8, name: '盲板抽堵作业' }
- ]
- });
- interface User {
- name: string;
- list: [];
- info: string;
- }
-
- // 刷新
- const reLoadData = async () => {
- getListByPage();
- };
-
- // 填写表单
- const toApply = () => {
- router.push({
- path: 'zysq'
- });
- };
-
- const handleClick = (tab: TabsPaneContext, event: Event) => {
- console.log(tab, event);
- };
-
- // 获取部门列表
- const getAllDepartment = async () => {
- let res = await teamManageApi().getAllDepartment();
- if (res.data.code === '200') {
- state.departmentList = JSON.parse(JSON.stringify(res.data.data))
- recursion(state.departmentList);
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
-
- // 获取层级审批数据
- // const getApprovalData = async (id) => {
- // let res = await workApprovalApi().getApprovalData({workApplyId: id});
- // if (res.data.code === '200') {
- // console.log(res.data.data,'层级数据')
- // // state.departmentList = JSON.parse(JSON.stringify(res.data.data))
- // // recursion(state.departmentList);
- // } else {
- // ElMessage({
- // type: 'warning',
- // message: res.data.msg
- // });
- // }
- // };
-
- const recursion = (value: any) => {
- for (let i of value) {
- if (i.children.length !== 0) {
- state.departmentRecursionList.push(i);
- recursion(i.children);
- } else {
- state.departmentRecursionList.push(i);
- }
- }
- };
-
- // 分页获取工作时间组列表
- const getListByPage = async () => {
- const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord } };
- let res = await workApprovalApi().getApprovalListPage(data);
- if (res.data.code === '200') {
- state.applyData = JSON.parse(JSON.stringify(res.data.data));
- state.applyData = state.applyData.map((item) => {
- if (item.operators == null || item.operators == []) {
- item.operators = [];
- } else {
- item.operators = Array.from(item.operators, ({ operatorUname }) => operatorUname);
- }
- return item;
- });
- state.totalSize1 = res.data.total;
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
-
- // 关键词查询记录
- const searchRecord = async () => {
- if (state.searchWord == '') {
- ElMessage({
- type: 'warning',
- message: '请输入查询关键词'
- });
- } else {
- getListByPage();
- }
- };
- // 重置搜索
- const clearSearch = async () => {
- state.searchWord = '';
- getListByPage();
- };
-
- // 查看进度
- const viewStatus = (row) => {
- getStatus({ workApplyId: row.workApplyId });
- state.dialogStatus = true;
- };
-
- // 查询进度方法
- const getStatus = async (data: any) => {
- let res = await workApprovalApi().getApprovalStatus(data);
- if (res.data.code === '200') {
- state.approveInfo = JSON.parse(JSON.stringify(res.data.data));
- state.approveInfo.operators = Array.from(state.approveInfo.operators, ({ operatorUname }) => operatorUname);
- console.log(state.approveInfo, '我的审批');
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
-
- const deleteRecordBtn = (row) => {
- state.deleteId = row.workApplyId;
- state.deleteDialog = true;
- };
-
- // 取消申请方法
- const deleteRecord = async (data: any) => {
- let res = await workApprovalApi().postAbord(data);
- if (res.data.code === '200') {
- ElMessage({
- type: 'success',
- message: '取消成功!'
- });
- getListByPage();
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
-
- const conFirmDelete = () => {
- deleteRecord({ workApplyId: state.deleteId });
- state.deleteDialog = false;
- };
-
- const handleSizeChange1 = (val: number) => {
- state.pageSize1 = val;
- getListByPage();
- };
- const handleCurrentChange1 = (val: number) => {
- state.pageIndex1 = val;
- getListByPage();
- };
-
- // 查看记录
- const viewRecord = (row: any) => {
- state.dialogType = row.workType
- state.details = JSON.parse(JSON.stringify(row));
- console.log(state.details,'details')
- // getApprovalData(state.details.workApplyId)
- if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){
- state.details.workDetail.otherSpecialWork=[]
- }
- else {
- console.log(state.details.workDetail.otherSpecialWork,'split')
- const a = state.details.workDetail.otherSpecialWork
- state.details.workDetail.otherSpecialWork = a.split(',').map((item) => {
- return state.workType.find((i: { id: number }) => i.id === Number(item))?.name;
- });
- }
- if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){
- state.details.workDetail.involvedDepIds=[]
- }
- else {
- const a = state.details.workDetail.involvedDepIds
- state.details.workDetail.involvedDepIds = a.split(',').map((item) => {
- return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName;
- });
- }
- if(state.details.workDetail.csDepId){
- state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName;
- }
- if(state.details.workDetail.operationDepId){
- state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
- }
- if(state.details.workDetail.gbPath){
- state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',')
- }
- if(state.details.workDetail.bcPath){
- state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',')
- }
- if(state.details.workDetail.bpLocationMapPath){
- state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',')
- }
- state.dialogDetails = true;
- };
-
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId', value);
- userInfos.value.projectId = value;
- await initBackEndControlRoutes();
- };
-
- // 页面载入时执行方法
- onMounted(() => {
- getListByPage();
- getAllDepartment()
- });
-
- return {
- View,
- Edit,
- Delete,
- Refresh,
- Plus,
- Finished,
- reLoadData,
- toApply,
- handleClick,
- searchRecord,
- clearSearch,
- viewRecord,
- viewStatus,
- deleteRecordBtn,
- conFirmDelete,
- getListByPage,
- handleSizeChange1,
- handleCurrentChange1,
- ...toRefs(state)
- };
- }
-});
-</script>
-
-<style scoped lang="scss">
-$homeNavLengh: 8;
-.home-container {
- height: calc(100vh - 144px);
- box-sizing: border-box;
- overflow: hidden;
- .demo-tabs {
- width: 100%;
- height: 100%;
-
- &::v-deep(.el-tabs__content) {
- height: calc(100% - 60px);
- }
-
- .el-tab-pane {
- height: 100%;
- }
- }
- .homeCard {
- width: 100%;
- padding: 20px;
- box-sizing: border-box;
- background: #fff;
- border-radius: 4px;
-
- .main-card {
- width: 100%;
- height: 100%;
- .cardTop {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 20px;
- .mainCardBtn {
- margin: 0;
- }
- }
- .pageBtn {
- height: 60px;
- display: flex;
- align-items: center;
- justify-content: right;
-
- .demo-pagination-block + .demo-pagination-block {
- margin-top: 10px;
- }
- .demo-pagination-block .demonstration {
- margin-bottom: 16px;
- }
- }
- }
- &:last-of-type {
- height: calc(100% - 100px);
- }
- }
- .stepItem {
- display: flex;
- align-items: flex-start;
- margin-top: 30px;
- margin-left: 30px;
- padding-bottom: 30px;
- padding-left: 40px;
- border-left: 1px solid #a0cfff;
- position: relative;
- &:first-of-type {
- margin-top: 30px;
- }
- &:first-of-type {
- margin-bottom: 0;
- border-left: none;
- }
- .stepNum {
- position: absolute;
- width: 40px;
- height: 40px;
- border-radius: 20px;
- box-sizing: border-box;
- font-size: 18px;
- color: #333;
- border: 1px solid #a0cfff;
- line-height: 38px;
- text-align: center;
- left: -20px;
- top: -30px;
- background: #d9ecff;
- }
- .stepCard {
- width: 100%;
- margin-top: -30px;
-
- .box-card {
- width: 100%;
-
- .card-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
-
- span {
- font-weight: bold;
- margin-left: 10px;
- }
- }
-
- .text {
- width: 100%;
- font-size: 14px;
- margin-bottom: 10px;
- padding-left: 10px;
-
- span {
- color: #409eff;
- }
-
- .bold-text{
- font-weight: bolder;
- }
-
- &:last-of-type {
- margin-bottom: 0;
- }
- }
- .approveUnit {
- width: 100%;
- font-size: 14px;
- margin-bottom: 20px;
- padding: 10px 15px;
- border: 1px solid #fff;
- background: #ecf8ff;
- border-radius: 6px;
- .item-tit {
- width: 100%;
- display: flex;
- color: #409eff;
- align-items: flex-start;
- justify-content: space-between;
- padding-bottom: 10px;
- border-bottom: 1px solid #a0cfff;
-
- & > span {
- flex: 1;
- &:last-of-type{
- text-align: center;
- }
- }
- & > div {
- flex: 1;
- text-align: center;
- }
- }
- .item-cont {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 10px 0;
- border-bottom: 1px solid #c6e2ff;
-
- & > span {
- flex: 1;
- &:last-of-type{
- text-align: center;
- }
- }
- & > div {
- flex: 1;
- text-align: center;
-
- & > div {
- text-align: left;
- width: 100%;
- display: flex;
- justify-content: center;
- align-items: center;
- span {
- width: 45%;
- &:first-of-type {
- width: 30%;
- }
- }
- }
- }
- &:last-of-type {
- border-bottom: 0;
- }
- }
- }
- .approveItem {
- width: 100%;
- font-size: 14px;
- margin-bottom: 20px;
- padding: 10px 15px;
- background: #ecf8ff;
- border: 1px solid #fff;
- border-radius: 6px;
- .item-tit {
- width: 100%;
- display: flex;
- color: #409eff;
- align-items: flex-start;
- justify-content: space-between;
- padding-bottom: 10px;
- border-bottom: 1px solid #a0cfff;
-
- & > span {
- flex: 1;
- }
- & > div {
- flex: 2;
- text-align: center;
- }
- }
- .item-cont {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 10px 0;
- border-bottom: 1px solid #c6e2ff;
-
- & > span {
- flex: 1;
- }
- & > div {
- flex: 2;
- text-align: center;
-
- & > div {
- text-align: left;
- width: 100%;
- display: flex;
- justify-content: center;
- align-items: flex-start;
- margin-bottom: 10px;
- span {
- width: 50%;
- &:first-of-type {
- width: 25%;
- }
- }
- }
- }
- &:last-of-type {
- border-bottom: 0;
- }
- }
- }
- }
- }
- &:hover .card-header {
- color: #0098f5;
- }
- &:hover .stepNum {
- border: 2px solid #0098f5;
- color: #0098f5;
- }
- }
- .el-row {
- display: flex;
- align-items: center;
- margin-bottom: 20px;
- &:last-child {
- margin-bottom: 0;
- }
- .grid-content {
- align-items: center;
- min-height: 36px;
- }
-
- .topInfo {
- display: flex;
- align-items: center;
- font-size: 16px;
- font-weight: bold;
-
- & > div {
- white-space: nowrap;
- margin-right: 20px;
- }
- }
- }
- .el-card {
- border: 0;
- }
-}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue
deleted file mode 100644
index b32213d..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue
+++ /dev/null
@@ -1,131 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业单位">
- <el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="断路原因">
- <el-input v-model="details.workDetail.bcReason" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="断路地段说明">
- <el-input v-model="details.workDetail.bcExplain" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="涉及相关部门">
- <el-input v-model="details.workDetail.involvedDepIds" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="图片">
- <el-image v-for="item in details.workDetail.bcPath" :preview-src-list="details.workDetail.bcPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
- </el-form-item>
- <el-form-item label="物资状态">
- <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
- </el-form-item>
- <el-form-item label="关联物资" v-if="details.workMaterial.length>0">
- <el-table :data="details.workMaterial" style="width: 100%" border>
- <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
- <el-table-column prop="materialName" label="物资名称" align="center"/>
- <el-table-column prop="configurationLevel" label="配置级别" align="center">
- <template #default="scope">
- {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
- </template>
- </el-table-column>
- <el-table-column prop="useCount" label="配置数量" align="center"/>
- </el-table>
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
- <el-form-item label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'space',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue
deleted file mode 100644
index 6386a7e..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue
+++ /dev/null
@@ -1,122 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业方式">
- <el-input v-model="details.workDetail.hotMethod" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="物资状态">
- <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
- </el-form-item>
- <el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0">
- <el-table :data="details.workMaterial" style="width: 100%" border>
- <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
- <el-table-column prop="materialName" label="物资名称" align="center"/>
- <el-table-column prop="configurationLevel" label="配置级别" align="center">
- <template #default="scope">
- {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
- </template>
- </el-table-column>
- <el-table-column prop="useCount" label="配置数量" align="center"/>
- </el-table>
- </el-form-item>
- <el-form-item label="关联其他作业">
- <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
- <el-form-item label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'fire',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue
deleted file mode 100644
index ed728d7..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue
+++ /dev/null
@@ -1,131 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业单位">
- <el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="范围">
- <el-input v-model="details.workDetail.gbScope" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="动土方式">
- <el-input v-model="details.workDetail.gbMethod" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="物资状态">
- <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
- </el-form-item>
- <el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0">
- <el-table :data="details.workMaterial" style="width: 100%" border>
- <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
- <el-table-column prop="materialName" label="物资名称" align="center"/>
- <el-table-column prop="configurationLevel" label="配置级别" align="center">
- <template #default="scope">
- {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
- </template>
- </el-table-column>
- <el-table-column prop="useCount" label="配置数量" align="center"/>
- </el-table>
- </el-form-item>
- <el-form-item label="关联其他作业">
- <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="图片">
- <el-image v-for="item in details.workDetail.gbPath" :preview-src-list="details.workDetail.gbPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
- <el-form-item label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'space',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue
deleted file mode 100644
index f95c6e9..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业单位">
- <el-input v-model="details.workDetail.operationDepId" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业高度">
- <el-input v-model="details.workDetail.operationHeight" readonly type="textarea"><template #append>米(m)</template></el-input>
- </el-form-item>
- <el-form-item label="物资状态">
- <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
- </el-form-item>
- <el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0">
- <el-table :data="details.workMaterial" style="width: 100%" border>
- <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
- <el-table-column prop="materialName" label="物资名称" align="center"/>
- <el-table-column prop="configurationLevel" label="配置级别" align="center">
- <template #default="scope">
- {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
- </template>
- </el-table-column>
- <el-table-column prop="useCount" label="配置数量" align="center"/>
- </el-table>
- </el-form-item>
- <el-form-item label="关联其他作业">
- <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
- <el-form-item label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'space',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue
deleted file mode 100644
index 1086537..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue
+++ /dev/null
@@ -1,125 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="吊装工具名称">
- <el-input v-model="details.workDetail.hoistingToolName" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="起吊物体重量">
- <el-input v-model="details.workDetail.weightMass" readonly type="textarea"><template #append>吨(t)</template></el-input>
- </el-form-item>
- <el-form-item label="物资状态">
- <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
- </el-form-item>
- <el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0">
- <el-table :data="details.workMaterial" style="width: 100%" border>
- <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
- <el-table-column prop="materialName" label="物资名称" align="center"/>
- <el-table-column prop="configurationLevel" label="配置级别" align="center">
- <template #default="scope">
- {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
- </template>
- </el-table-column>
- <el-table-column prop="useCount" label="配置数量" align="center"/>
- </el-table>
- </el-form-item>
- <el-form-item label="关联其他作业">
- <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
- <el-form-item label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'space',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue
deleted file mode 100644
index 69620a3..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue
+++ /dev/null
@@ -1,149 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="盲板编号">
- <el-input v-model="details.workDetail.bpCode" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="主要介质">
- <el-input v-model="details.workDetail.mainMedia" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="温度">
- <el-input v-model="details.workDetail.temperature" readonly type="textarea"><template #append>摄氏度(℃)</template></el-input>
- </el-form-item>
- <el-form-item label="压力">
- <el-input v-model="details.workDetail.pressure" readonly type="textarea"><template #append>千帕(kPa)</template></el-input>
- </el-form-item>
- <el-form-item label="盲板材质">
- <el-input v-model="details.workDetail.bpMaterialQuality" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="盲板规格">
- <el-input v-model="details.workDetail.bpSpecification" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="盲板位置">
- <el-input v-model="details.workDetail.bpLocation" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="装盲板时间">
- <el-input v-model="details.workDetail.installBpTime" readonly/>
- </el-form-item>
- <el-form-item label="拆盲板时间">
- <el-input v-model="details.workDetail.uninstallBpTime" readonly/>
- </el-form-item>
- <el-form-item label="物资状态">
- <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
- </el-form-item>
- <el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0">
- <el-table :data="details.workMaterial" style="width: 100%" border>
- <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
- <el-table-column prop="materialName" label="物资名称" align="center"/>
- <el-table-column prop="configurationLevel" label="配置级别" align="center">
- <template #default="scope">
- {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
- </template>
- </el-table-column>
- <el-table-column prop="useCount" label="配置数量" align="center"/>
- </el-table>
- </el-form-item>
- <el-form-item label="关联其他作业">
- <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="盲板位置图">
- <el-image v-for="item in details.workDetail.bpLocationMapPath" :preview-src-list="details.workDetail.bpLocationMapPath" style="width: 150px; height: 150px;margin-right: 50px;margin-bottom: 20px" :src="item" fit="cover" />
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
- <el-form-item label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'space',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue
deleted file mode 100644
index cf81c13..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue
+++ /dev/null
@@ -1,128 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="电源接入点">
- <el-input v-model="details.workDetail.powerAccessPoint" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="工作电压">
- <el-input v-model="details.workDetail.workingVoltage" readonly type="textarea"><template #append>伏特(v)</template></el-input>
- </el-form-item>
- <el-form-item label="用电设备及功率">
- <el-input v-model="details.workDetail.equipmentAndPower" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="物资状态">
- <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
- </el-form-item>
- <el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0">
- <el-table :data="details.workMaterial" style="width: 100%" border>
- <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
- <el-table-column prop="materialName" label="物资名称" align="center"/>
- <el-table-column prop="configurationLevel" label="配置级别" align="center">
- <template #default="scope">
- {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
- </template>
- </el-table-column>
- <el-table-column prop="useCount" label="配置数量" align="center"/>
- </el-table>
- </el-form-item>
- <el-form-item label="关联其他作业">
- <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
- <el-form-item label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'space',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue b/src/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue
deleted file mode 100644
index d6b4606..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue
+++ /dev/null
@@ -1,128 +0,0 @@
-<template>
- <div style="height: 100%">
- <el-form :model="details" label-width="150px">
- <el-form-item label="作业申请单号">
- <el-input v-model="details.workPermitNo" readonly />
- </el-form-item>
- <el-form-item label="申请人">
- <el-input v-model="details.applyUname" readonly />
- </el-form-item>
- <el-form-item label="部门名称">
- <el-input v-model="details.depName" readonly />
- </el-form-item>
- <el-form-item label="作业人">
- <el-input v-model="details.operators" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业类型">
- <el-input v-model="details.workTypeDesc" readonly />
- </el-form-item>
- <el-form-item label="作业等级">
- <el-input v-model="details.workLevelDesc" readonly />
- </el-form-item>
- <el-form-item label="作业内容">
- <el-input v-model="details.workContent" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="作业地址">
- <el-input v-model="details.workLocation" readonly type="textarea"/>
- </el-form-item>
- <el-form-item label="受限空间所属单位">
- <el-input v-model="details.workDetail.csDepId" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="受限空间名称">
- <el-input v-model="details.workDetail.csName" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="空间原有介质名称">
- <el-input v-model="details.workDetail.csOriginalName" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="物资状态">
- <span>{{ details.materialStatus==0?'未关联物资':(details.materialStatus==1?'必选物资配备不足':(details.materialStatus==2?'必选物资配备齐全':(details.materialStatus==3?'物资配置专业':(details.materialStatus==4?'物资配置高端':'-')))) }}</span>
- </el-form-item>
- <el-form-item label="关联物资" v-if="details.workMaterial&&details.workMaterial.length>0">
- <el-table :data="details.workMaterial" style="width: 100%" border>
- <el-table-column prop="bigClassifyName" label="物资类型" align="center"/>
- <el-table-column prop="materialName" label="物资名称" align="center"/>
- <el-table-column prop="configurationLevel" label="配置级别" align="center">
- <template #default="scope">
- {{scope.row.configurationLevel == 0?'必选':(scope.row.configurationLevel == 1? '可选':'高配')}}
- </template>
- </el-table-column>
- <el-table-column prop="useCount" label="配置数量" align="center"/>
- </el-table>
- </el-form-item>
- <el-form-item label="关联其他作业">
- <el-input v-model="details.workDetail.otherSpecialWork" readonly type="textarea" />
- </el-form-item>
- <el-form-item label="期望开始时间">
- <el-input v-model="details.expStartTime" readonly />
- </el-form-item>
- <el-form-item label="期望结束时间">
- <el-input v-model="details.expEndTime" readonly />
- </el-form-item>
- <el-form-item label="申请时间">
- <el-input v-model="details.applyTime" readonly />
- </el-form-item>
- <el-form-item label="当前状态">
- <el-input v-model="details.statusDesc" readonly />
- </el-form-item>
- </el-form>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- form: Object,
- workerList: Array<any>,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- otherWorkList: Array<any>
- }
- export default defineComponent({
- name: 'space',
- components: {},
- props:['details'],
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- return {
- Search
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsq/index.vue b/src/views/specialWorkSystem/workTicket/wdsq/index.vue
deleted file mode 100644
index 340b902..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsq/index.vue
+++ /dev/null
@@ -1,877 +0,0 @@
-<template>
- <div class="home-container">
-<!-- <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">-->
-<!-- <el-tab-pane label="申请中" name="1">-->
- <div style="height: 100%">
- <el-row class="homeCard">
- <span>作业类型:</span>
- <el-col :span="10">
- <div class="grid-content topInfo">
- <el-select v-model="searchWord">
- <el-option
- v-for="item in workType"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
-
- <el-button type="primary" @click="searchRecord">查询</el-button>
- <el-button plain @click="clearSearch">重置</el-button>
- </div>
- </el-col>
- </el-row>
- <div class="homeCard">
- <div class="main-card">
- <el-row class="cardTop">
- <el-col :span="12" class="mainCardBtn">
- <el-button type="primary" :icon="Plus" size="default" @click="toApply()">申请</el-button>
- <!-- <el-button type="danger" :icon="Delete" size="default">删除</el-button>-->
- <!-- <el-button type="success" size="default">设置分类</el-button>-->
- </el-col>
- <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />
- </el-row>
- <el-table ref="multipleTableRef" :data="applyData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
- <el-table-column property="workPermitNo" label="作业申请单号" width="180" />
- <el-table-column property="applyUname" label="申请人" />
- <el-table-column property="depName" label="部门名称" />
- <el-table-column property="operators" label="作业人" />
- <el-table-column property="workTypeDesc" label="作业类型" />
- <el-table-column property="workLevelDesc" label="作业等级" />
- <el-table-column property="materialStatus" label="物资状态" align="center" width="180">
- <template #default="scope">
- <span>{{ scope.row.materialStatus==0?'未关联物资':(scope.row.materialStatus==1?'必选物资配备不足':(scope.row.materialStatus==2?'必选物资配备齐全':(scope.row.materialStatus==3?'物资配置专业':(scope.row.materialStatus==4?'物资配置高端':'-')))) }}</span>
- </template>
- </el-table-column>
- <el-table-column property="applyTime" label="申请时间" width="180" />
- <el-table-column label="申请状态" align="center" width="180">
- <template #default="scope">
- <el-tag :type="scope.row.status==2?'success':(scope.row.status==8||scope.row.status==9)?'warning':'danger'">{{ scope.row.statusDesc }}</el-tag>
- </template>
- </el-table-column>
- <el-table-column fixed="right" label="操作" align="center" width="300">
- <template #default="scope">
- <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>
- <el-button link type="success" size="small" :icon="Finished" @click="viewStatus(scope.row)">进度</el-button>
- <el-button link type="warning" size="small" :icon="Delete" @click="deleteRecordBtn(scope.row)">取消</el-button>
- <el-button :disabled="scope.row.status == 7 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button>
- </template>
- </el-table-column>
- </el-table>
- <div class="pageBtn">
- <el-pagination v-model:currentPage="pageIndex1" v-model:page-size="pageSize1" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize1" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
- </div>
- </div>
- </div>
- </div>
- <el-dialog v-model="dialogDetails" title="作业申请详情" center>
- <fire v-if="dialogType == 1" :details = details></fire>
- <space v-else-if="dialogType == 2" :details = details></space>
- <hoist v-else-if="dialogType == 3" :details = details></hoist>
- <ground v-else-if="dialogType == 4" :details = details></ground>
- <broken v-else-if="dialogType == 5" :details = details></broken>
- <height v-else-if="dialogType == 6" :details = details></height>
- <power v-else-if="dialogType == 7" :details = details></power>
- <plate v-else :details = details></plate>
- <template #footer>
- <span class="dialog-footer">
- <el-button type="primary" @click="dialogDetails = false"
- >确认</el-button
- >
- </span>
- </template>
- </el-dialog>
- <el-dialog v-model="dialogStatus" title="作业申请进度" width="60%">
- <el-form v-if="approveInfo.operators.length > 0" style="margin-bottom: 40px">
- <el-form-item label="申请作业人">
- <el-input v-model="approveInfo.operators" readonly type="textarea" />
- </el-form-item>
- </el-form>
- <div style="display: flex; flex-direction: column-reverse">
- <div v-for="(item, index) in approveInfo.approvalSteps" class="stepItem">
- <div class="stepNum">{{ item.stepSerial }}</div>
- <div class="stepCard">
- <el-card class="box-card" shadow="always">
- <div class="text">
- 审批结果:<span class="bold-text">{{ item.approvalResultDesc }}</span>
- </div>
- <div class="text">
- 审批类型:<span class="bold-text">{{ item.typeDesc }}</span>
- </div>
- <div class="text" v-if="item.auditTypeDesc">
- 审批类型:<span class="bold-text">{{ item.auditTypeDesc }}</span>
- </div>
- <div class="text" v-show="item.startApprovalTime != null">
- 开始时间:<span>{{ item.startApprovalTime }}</span>
- </div>
- <div class="approveUnit">
- <div class="item-tit"><span>审批人</span><span>审批状态</span></div>
- <div class="item-cont" v-for="i in item.stepUnits">
- <span>{{ i.approvalUname }}</span
- ><span>{{ i.resultDesc }}</span>
- </div>
- </div>
- <div class="approveItem">
- <div class="item-tit">
- <span>审批项目</span>
-<!-- <span>类型</span>-->
- <div>措施标准</div>
- </div>
- <div class="item-cont" v-for="i in item.stepItems">
- <span>{{ i.itemName }}</span>
-<!-- <span>{{ i.typeDesc }}</span>-->
- <div v-if="i.measure !== null">
- <div>
- <span>作业类型:</span><span>{{ i.measure.workTypeDesc }}</span>
- </div>
- <div>
- <span>措施内容:</span><span>{{ i.measure.context }}</span>
- </div>
- </div>
- <div v-if="i.stand !== null">
- <div>
- <span>标题名称:</span><span>{{ i.stand.title }}</span>
- </div>
- <div>
- <span>标准内容:</span><span>{{ i.stand.typeDesc }}</span>
- </div>
- </div>
- </div>
- </div>
- <div class="text" v-show="item.expFinishApprovalTime && item.expFinishApprovalTime != null">
- 期望结束时间:<span>{{ item.expFinishApprovalTime }}</span>
- </div>
- <div class="text" v-show="item.finishApprovalTime != null">
- 结束时间:<span>{{ item.finishApprovalTime }}</span>
- </div>
- </el-card>
- </div>
- </div>
- </div>
- </el-dialog>
- <el-dialog v-model="deleteDialog" title="提示" width="30%" center>
- <span>您确定要取消该条申请吗?</span>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="deleteDialog = false" size="default">取消</el-button>
- <el-button type="primary" @click="conFirmDelete" size="default">确认</el-button>
- </span>
- </template>
- </el-dialog>
- <el-dialog v-model="downLoadDialog" title="提示" width="30%" center>
- <span>您确定要导出该条记录吗?</span>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="downLoadDialog = false" size="default">取消</el-button>
- <el-button type="primary" @click="conFirmDownLoad" size="default">确认</el-button>
- </span>
- </template>
- </el-dialog>
-<!-- </el-tab-pane>-->
-<!-- <el-tab-pane label="已通过" name="2">-->
-<!-- <div style="height: 100%">-->
-<!-- <el-row class="homeCard">-->
-<!-- <el-col :span="8">-->
-<!-- <div class="grid-content topInfo">-->
-<!-- <el-input v-model="searchWord" placeholder="作业证名称"></el-input>-->
-<!-- <el-button type="primary">查询</el-button>-->
-<!-- <el-button plain>重置</el-button>-->
-<!-- </div>-->
-<!-- </el-col>-->
-<!-- </el-row>-->
-<!-- <div class="homeCard">-->
-<!-- <div class="main-card">-->
-<!-- <el-table ref="multipleTableRef" :data="passedData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">-->
-<!-- <el-table-column type="selection" width="55" />-->
-<!-- <el-table-column type="index" label="编号" width="200" />-->
-<!-- <el-table-column property="level" label="作业证等级" width="180" sortable />-->
-<!-- <el-table-column property="applyDate" label="申请日期" sortable />-->
-<!-- <el-table-column property="name" label="申请人" width="180" />-->
-<!-- <el-table-column property="department" label="申请部门" width="180" />-->
-<!-- <el-table-column label="申请状态" width="180">-->
-<!-- <template #default="scope">-->
-<!-- <el-tag type="success">{{ scope.row.status }}</el-tag>-->
-<!-- </template>-->
-<!-- </el-table-column>-->
-<!-- </el-table>-->
-<!-- <div class="pageBtn">-->
-<!-- <el-pagination v-model:currentPage="pageIndex2" v-model:page-size="pageSize2" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize2" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </el-tab-pane>-->
-<!-- </el-tabs>-->
- </div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent} from 'vue';
-import { storeToRefs } from 'pinia';
-import { initBackEndControlRoutes } from '/@/router/backEnd';
-import { useUserInfo } from '/@/stores/userInfo';
-import { Session } from '/@/utils/storage';
-import { useRouter } from 'vue-router';
-import { Edit, View, Plus, Delete, Refresh, Search, Finished, Download } from '@element-plus/icons-vue';
-import { ElTable } from 'element-plus';
-import { FormInstance, FormRules, ElMessage } from 'element-plus';
-import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-import type { TabsPaneContext } from 'element-plus';
-import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage";
-import Cookies from 'js-cookie';
-import axios from 'axios';
-
-// 定义接口来定义对象的类型
-interface stateType {
- applyData: Array<string>;
- workTimeList: Array<string>;
- multipleSelection: Array<any>;
- deleteArr: Array<any>;
- approveInfo: Object;
- dialogDetails: boolean;
- dialogStatus: boolean;
- deleteDialog: boolean;
- downLoadDialog: boolean;
- pageIndex1: number;
- pageSize1: number;
- chosenIndex: null | number;
- deleteId: null | number;
- downLoadId: null | number;
- downLoadName: string;
- searchWord: string;
- totalSize1: number;
- activeName: string;
- addRecord: {};
- details: {};
- statusInfo: {};
- workType: Array<type>;
- dialogType: number | null;
- departmentList: Array<any>;
- departmentRecursionList: Array<DepartmentState>;
-}
-interface type {
- id: number;
- name: string;
-}
-interface DepartmentState {
- depId: number;
- depName: string;
-}
-export default defineComponent({
- name: 'myApply',
- components: {
- fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue')),
- space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue')),
- hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue')),
- ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue')),
- broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue')),
- height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue')),
- power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue')),
- plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue'))
- },
- setup() {
- const userInfo = useUserInfo();
- const { userInfos } = storeToRefs(userInfo);
- const router = useRouter();
- const state = reactive<stateType>({
- pageIndex1: 1,
- pageSize1: 10,
- totalSize1: 0,
- dialogType: null,
- activeName: '1',
- departmentList: [],
- departmentRecursionList: [],
- chosenIndex: null,
- searchWord: '',
- applyData: [],
- workTimeList: [],
- multipleSelection: [],
- approveInfo: {
- approvalSteps: [],
- operators: []
- },
- dialogDetails: false,
- dialogStatus: false,
- deleteDialog: false,
- downLoadDialog: false,
- addRecord: {},
- details: {},
- statusInfo: {},
- deleteId: null,
- downLoadId: null,
- downLoadName: '',
- deleteArr: [],
- workType: [
- { id: 1, name: '动火作业' },
- { id: 2, name: '受限空间作业' },
- { id: 3, name: '吊装作业' },
- { id: 4, name: '动土作业' },
- { id: 5, name: '断路作业' },
- { id: 6, name: '高处作业' },
- { id: 7, name: '临时用电作业' },
- { id: 8, name: '盲板抽堵作业' }
- ]
- });
- interface User {
- name: string;
- list: [];
- info: string;
- }
-
- // 刷新
- const reLoadData = async () => {
- getListByPage();
- };
-
- // 填写表单
- const toApply = () => {
- router.push({
- path: 'zysq'
- });
- };
-
- const handleClick = (tab: TabsPaneContext, event: Event) => {
- };
-
- // 获取部门列表
- const getAllDepartment = async () => {
- let res = await teamManageApi().getAllDepartment();
- if (res.data.code === '200') {
- state.departmentList = JSON.parse(JSON.stringify(res.data.data))
- recursion(state.departmentList);
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
-
- const recursion = (value: any) => {
- for (let i of value) {
- if (i.children.length !== 0) {
- state.departmentRecursionList.push(i);
- recursion(i.children);
- } else {
- state.departmentRecursionList.push(i);
- }
- }
- };
-
- // 分页获取
- const getListByPage = async () => {
- const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord } };
- let res = await workApplyApi().getApplyListPage(data);
- if (res.data.code === '200') {
- state.applyData = JSON.parse(JSON.stringify(res.data.data));
- console.log(state.applyData,'applyData')
- state.applyData = state.applyData.map((item) => {
- if (item.operators == null || item.operators == []) {
- item.operators = [];
- } else {
- item.operators = Array.from(item.operators, ({ operatorUname }) => operatorUname);
- }
- return item;
- });
- state.totalSize1 = res.data.total;
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
-
- // 表格数据格式化
- const toNames = (row, column, cellValue, index) => {
- if (row.list == []) {
- return [];
- } else {
- const nameList = [];
- for (let i = 0; i < row.list.length; i++) {
- for (let t = 0; t < state.workTimeList.length; t++) {
- if (row.list[i] == state.workTimeList[t].id) {
- nameList.push(state.workTimeList[t].name);
- }
- }
- }
- return nameList.join();
- }
- };
-
- // 关键词查询记录
- const searchRecord = async () => {
- if (state.searchWord == '') {
- ElMessage({
- type: 'warning',
- message: '请输入查询关键词'
- });
- } else {
- getListByPage();
- }
- };
- // 重置搜索
- const clearSearch = async () => {
- state.searchWord = '';
- getListByPage();
- };
-
- // 查看进度
- const viewStatus = (row) => {
- getStatus({ workApplyId: row.workApplyId });
- state.dialogStatus = true;
- };
-
- // 查询进度方法
- const getStatus = async (data: any) => {
- let res = await workApplyApi().getStatus(data);
- if (res.data.code === '200') {
- state.approveInfo = JSON.parse(JSON.stringify(res.data.data));
- state.approveInfo.operators = Array.from(state.approveInfo.operators, ({ operatorUname }) => operatorUname);
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
-
- const deleteRecordBtn = (row) => {
- state.deleteId = row.workApplyId;
- state.deleteDialog = true;
- };
-
- // 取消申请方法
- const deleteRecord = async (data: any) => {
- let res = await workApplyApi().cancelApply(data);
- if (res.data.code === '200') {
- ElMessage({
- type: 'success',
- message: '删除成功!'
- });
- getListByPage();
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
-
- const conFirmDelete = () => {
- deleteRecord({ workApplyId: state.deleteId });
- state.deleteDialog = false;
- };
-
- // 导出图表
- const downLoadBtn = (row:any) =>{
- state.downLoadId = row.workApplyId;
- state.downLoadName = row.workTypeDesc + row.workPermitNo
- state.downLoadDialog = true;
- }
-
- // 导出方法
- const downLoadRecord = async (data: any) => {
- // let res = await workApplyApi().postPrinting(data);
- axios.post(import.meta.env.VITE_API_URL + `/work/apply/printingPdf`,data,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
- if (res) {
- const link = document.createElement('a')
- let blob = new Blob([res.data],{type: 'application/pdf'})
- link.style.display = "none";
- link.href = URL.createObjectURL(blob); // 创建URL
- link.setAttribute("download", state.downLoadName + "作业证.pdf");
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- })
-
- };
-
- const conFirmDownLoad = () => {
- downLoadRecord({ applyWorkId: state.downLoadId });
- state.downLoadDialog = false;
- };
-
- const handleSizeChange1 = (val: number) => {
- state.pageSize1 = val;
- getListByPage();
- };
- const handleCurrentChange1 = (val: number) => {
- state.pageIndex1 = val;
- getListByPage();
- };
-
- // 查看记录
- const viewRecord = (row: any) => {
- state.dialogType = row.workType
- state.details = JSON.parse(JSON.stringify(row));
- if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){
- state.details.workDetail.otherSpecialWork=[]
- }
- else {
- const a = state.details.workDetail.otherSpecialWork
- state.details.workDetail.otherSpecialWork = a.split(',').map((item) => {
- return state.workType.find((i: { id: number }) => i.id === Number(item))?.name;
- });
- }
- if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){
- state.details.workDetail.involvedDepIds=[]
- }
- else {
- const a = state.details.workDetail.involvedDepIds
- state.details.workDetail.involvedDepIds = a.split(',').map((item) => {
- return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName;
- });
- }
- if(state.details.workDetail.csDepId){
- state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName;
- }
- if(state.details.workDetail.operationDepId){
- state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
- }
- if(state.details.workDetail.gbPath){
- state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',')
- }
- if(state.details.workDetail.bcPath){
- state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',')
- }
- if(state.details.workDetail.bpLocationMapPath){
- state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',')
- }
- state.dialogDetails = true;
- };
-
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId', value);
- userInfos.value.projectId = value;
- await initBackEndControlRoutes();
- };
-
- // 页面载入时执行方法
- onMounted(() => {
- getListByPage();
- getAllDepartment()
- });
-
- return {
- View,
- Edit,
- Delete,
- Refresh,
- Plus,
- Finished,
- Download,
- reLoadData,
- toApply,
- handleClick,
- toNames,
- searchRecord,
- clearSearch,
- viewRecord,
- viewStatus,
- deleteRecordBtn,
- downLoadBtn,
- conFirmDelete,
- conFirmDownLoad,
- getListByPage,
- handleSizeChange1,
- handleCurrentChange1,
- ...toRefs(state)
- };
- }
-});
-</script>
-
-<style scoped lang="scss">
-$homeNavLengh: 8;
-.home-container {
- height: calc(100vh - 144px);
- box-sizing: border-box;
- overflow: hidden;
- .demo-tabs {
- width: 100%;
- height: 100%;
-
- &::v-deep(.el-tabs__content) {
- height: calc(100% - 60px);
- }
-
- .el-tab-pane {
- height: 100%;
- }
- }
- .homeCard {
- width: 100%;
- padding: 20px;
- box-sizing: border-box;
- background: #fff;
- border-radius: 4px;
-
- .main-card {
- width: 100%;
- height: 100%;
- .cardTop {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 20px;
- .mainCardBtn {
- margin: 0;
- }
- }
- .pageBtn {
- height: 60px;
- display: flex;
- align-items: center;
- justify-content: right;
-
- .demo-pagination-block + .demo-pagination-block {
- margin-top: 10px;
- }
- .demo-pagination-block .demonstration {
- margin-bottom: 16px;
- }
- }
- }
- &:last-of-type {
- height: calc(100% - 100px);
- }
- }
- .stepItem {
- display: flex;
- align-items: flex-start;
- margin-top: 30px;
- margin-left: 30px;
- padding-bottom: 30px;
- padding-left: 40px;
- border-left: 1px solid #a0cfff;
- position: relative;
- &:first-of-type {
- margin-top: 30px;
- }
- &:first-of-type {
- margin-bottom: 0;
- border-left: none;
- }
- .stepNum {
- position: absolute;
- width: 40px;
- height: 40px;
- border-radius: 20px;
- box-sizing: border-box;
- font-size: 18px;
- color: #333;
- border: 1px solid #a0cfff;
- line-height: 38px;
- text-align: center;
- left: -20px;
- top: -30px;
- background: #d9ecff;
- }
- .stepCard {
- width: 100%;
- margin-top: -30px;
-
- .box-card {
- width: 100%;
-
- .card-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
-
- span {
- font-weight: bold;
- margin-left: 10px;
- }
- }
-
- .text {
- width: 100%;
- font-size: 14px;
- margin-bottom: 10px;
- padding-left: 10px;
-
- span {
- color: #409eff;
- }
-
- .bold-text{
- font-weight: bolder;
- }
-
- &:last-of-type {
- margin-bottom: 0;
- }
- }
- .approveUnit {
- width: 100%;
- font-size: 14px;
- margin-bottom: 20px;
- padding: 10px 15px;
- border: 1px solid #fff;
- background: #ecf8ff;
- border-radius: 6px;
- .item-tit {
- width: 100%;
- display: flex;
- color: #409eff;
- align-items: flex-start;
- justify-content: space-between;
- padding-bottom: 10px;
- border-bottom: 1px solid #a0cfff;
-
- & > span {
- flex: 1;
- &:last-of-type{
- text-align: center;
- }
- }
- & > div {
- flex: 1;
- text-align: center;
- }
- }
- .item-cont {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 10px 0;
- border-bottom: 1px solid #c6e2ff;
-
- & > span {
- flex: 1;
- &:last-of-type{
- text-align: center;
- }
- }
- & > div {
- flex: 1;
- text-align: center;
-
- & > div {
- text-align: left;
- width: 100%;
- display: flex;
- justify-content: center;
- align-items: center;
- span {
- width: 45%;
- &:first-of-type {
- width: 30%;
- }
- }
- }
- }
- &:last-of-type {
- border-bottom: 0;
- }
- }
- }
- .approveItem {
- width: 100%;
- font-size: 14px;
- margin-bottom: 20px;
- padding: 10px 15px;
- background: #ecf8ff;
- border: 1px solid #fff;
- border-radius: 6px;
- .item-tit {
- width: 100%;
- display: flex;
- color: #409eff;
- align-items: flex-start;
- justify-content: space-between;
- padding-bottom: 10px;
- border-bottom: 1px solid #a0cfff;
-
- & > span {
- flex: 1;
- }
- & > div {
- flex: 2;
- text-align: center;
- }
- }
- .item-cont {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 10px 0;
- border-bottom: 1px solid #c6e2ff;
-
- & > span {
- flex: 1;
- }
- & > div {
- flex: 2;
- text-align: center;
-
- & > div {
- text-align: left;
- width: 100%;
- display: flex;
- justify-content: center;
- align-items: flex-start;
- margin-bottom: 10px;
- span {
- width: 50%;
- &:first-of-type {
- width: 25%;
- }
- }
- }
- }
- &:last-of-type {
- border-bottom: 0;
- }
- }
- }
- }
- }
- &:hover .card-header {
- color: #0098f5;
- }
- &:hover .stepNum {
- border: 2px solid #0098f5;
- color: #0098f5;
- }
- }
- .el-row {
- display: flex;
- align-items: center;
- margin-bottom: 20px;
- &:last-child {
- margin-bottom: 0;
- }
- .grid-content {
- align-items: center;
- min-height: 36px;
- }
-
- .topInfo {
- display: flex;
- align-items: center;
- font-size: 16px;
- font-weight: bold;
-
- & > div {
- white-space: nowrap;
- margin-right: 20px;
- }
- }
- }
- .el-card {
- border: 0;
- }
-}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/wdsqjl/index.vue b/src/views/specialWorkSystem/workTicket/wdsqjl/index.vue
deleted file mode 100644
index e38b1c2..0000000
--- a/src/views/specialWorkSystem/workTicket/wdsqjl/index.vue
+++ /dev/null
@@ -1,904 +0,0 @@
-<template>
- <div class="home-container">
-<!-- <el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">-->
-<!-- <el-tab-pane label="申请中" name="1">-->
- <div style="height: 100%">
- <el-row class="homeCard">
- <el-col :span="5" style="display:flex;align-items: center">
- <span style="white-space: nowrap">作业类型:</span>
- <div class="grid-content topInfo">
- <el-select v-model="searchWord">
- <el-option
- v-for="item in workType"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </div>
- </el-col>
- <el-col :span="5" style="display:flex;align-items: center">
- <span style="white-space: nowrap">申请部门:</span>
- <div class="grid-content topInfo">
- <el-cascader v-model="searchDep" :options="departmentList" :props="casProps" :show-all-levels="false"/>
- </div>
- </el-col>
- <el-col :span="8" style="display:flex;align-items: center;">
- <span style="white-space: nowrap;margin-left: 20px">申请时间:</span>
- <div class="grid-content topInfo">
- <el-date-picker
- v-model="searchDate"
- type="daterange"
- unlink-panels
- range-separator="至"
- start-placeholder="开始日期"
- end-placeholder="结束日期"
- format="YYYY-MM-DD" value-format="YYYY-MM-DD HH:mm:ss"
- />
- </div>
- </el-col>
- <el-button type="primary" style="margin-left: 20px" @click="searchRecord">查询</el-button>
- <el-button plain @click="clearSearch">重置</el-button>
- </el-row>
- <div class="homeCard">
- <div class="main-card">
- <el-row class="cardTop">
- <el-col :span="12" class="mainCardBtn">
- <el-button type="primary" :icon="Plus" size="default" @click="toApply()">申请</el-button>
- <!-- <el-button type="danger" :icon="Delete" size="default">删除</el-button>-->
- <!-- <el-button type="success" size="default">设置分类</el-button>-->
- </el-col>
- <el-button type="primary" :icon="Refresh" size="default" @click="reLoadData()" />
- </el-row>
- <el-table ref="multipleTableRef" :data="applyData" style="width: 100%" height="calc(100% - 100px)" :header-cell-style="{ background: '#fafafa' }">
- <el-table-column property="workPermitNo" label="作业申请单号" width="180" align="center"/>
- <el-table-column property="applyUname" label="申请人" align="center"/>
- <el-table-column property="depName" label="部门名称" align="center"/>
- <el-table-column property="operators" label="作业人" align="center"/>
- <el-table-column property="workTypeDesc" label="作业类型" align="center"/>
- <el-table-column property="workLevelDesc" label="作业等级" align="center"/>
- <el-table-column property="materialStatus" label="物资状态" align="center" width="180">
- <template #default="scope">
- <span>{{ scope.row.materialStatus==0?'未关联物资':(scope.row.materialStatus==1?'必选物资配备不足':(scope.row.materialStatus==2?'必选物资配备齐全':(scope.row.materialStatus==3?'物资配置专业':(scope.row.materialStatus==4?'物资配置高端':'-')))) }}</span>
- </template>
- </el-table-column>
- <el-table-column property="applyTime" label="申请时间" width="180" align="center"/>
- <el-table-column label="申请状态" align="center" width="140">
- <template #default="scope">
- <el-tag :type="scope.row.status==2?'success':(scope.row.status==8||scope.row.status==9)?'warning':'danger'">{{ scope.row.statusDesc }}</el-tag>
- </template>
- </el-table-column>
- <el-table-column label="作业状态" align="center">
- <template #default="scope">
- <el-tag :type="scope.row.working == null? 'danger':scope.row.working.workStatus==2?'success':scope.row.working.workStatus==1?'warning':'danger'">{{ scope.row.working==null?'未开始':scope.row.working.workStatus == 1?'开始': scope.row.working.workStatus == 2?'结束':'未开始'}}</el-tag>
- </template>
- </el-table-column>
- <el-table-column label="验收状态" align="center">
- <template #default="scope">
- <el-tag :type="scope.row.working == null? 'danger':scope.row.working.workAcceptStatus==2?'success':scope.row.working.workAcceptStatus== 1?'warning':'danger'">{{ scope.row.working==null?'未开始':scope.row.working.workAcceptStatus == 1?'等待验收': scope.row.working.workAcceptStatus == 2? '已验收':'未开始'}}</el-tag>
- </template>
- </el-table-column>
- <el-table-column fixed="right" label="操作" align="center" width="250">
- <template #default="scope">
- <el-button link type="primary" size="small" :icon="View" @click="viewRecord(scope.row)">查看</el-button>
- <el-button link type="success" size="small" :icon="Finished" @click="viewStatus(scope.row)">进度</el-button>
- <el-button :disabled="scope.row.working && scope.row.working.workAcceptStatus == 2 ? false : true" link type="primary" size="small" :icon="Download" @click="downLoadBtn(scope.row)">导出作业票</el-button>
- </template>
- </el-table-column>
- </el-table>
- <div class="pageBtn">
- <el-pagination v-model:currentPage="pageIndex1" v-model:page-size="pageSize1" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize1" @size-change="handleSizeChange1" @current-change="handleCurrentChange1" />
- </div>
- </div>
- </div>
- </div>
- <el-dialog v-model="dialogDetails" title="作业申请详情" center>
- <fire v-if="dialogType == 1" :details = details></fire>
- <space v-else-if="dialogType == 2" :details = details></space>
- <hoist v-else-if="dialogType == 3" :details = details></hoist>
- <ground v-else-if="dialogType == 4" :details = details></ground>
- <broken v-else-if="dialogType == 5" :details = details></broken>
- <height v-else-if="dialogType == 6" :details = details></height>
- <power v-else-if="dialogType == 7" :details = details></power>
- <plate v-else :details = details></plate>
- <template #footer>
- <span class="dialog-footer">
- <el-button type="primary" @click="dialogDetails = false"
- >确认</el-button
- >
- </span>
- </template>
- </el-dialog>
- <el-dialog v-model="dialogStatus" title="作业申请进度" width="60%">
- <el-form v-if="approveInfo.operators.length > 0" style="margin-bottom: 40px">
- <el-form-item label="申请作业人">
- <el-input v-model="approveInfo.operators" readonly type="textarea" />
- </el-form-item>
- </el-form>
- <div style="display: flex; flex-direction: column-reverse">
- <div v-for="(item, index) in approveInfo.approvalSteps" class="stepItem">
- <div class="stepNum">{{ item.stepSerial }}</div>
- <div class="stepCard">
- <el-card class="box-card" shadow="always">
- <div class="text">
- 审批结果:<span>{{ item.approvalResultDesc }}</span>
- </div>
- <div class="text" v-if="item.approvalTypeDesc">
- 层级类型:<span>{{ item.approvalTypeDesc }}</span>
- </div>
- <div class="text" v-if="item.auditTypeDesc">
- 审批类型:<span>{{ item.auditTypeDesc }}</span>
- </div>
- <div class="text" v-if="item.personTypeDesc">
- 人员类型:<span>{{ item.personTypeDesc }}</span>
- </div>
- <div class="text" v-if="item.contentTypeDesc">
- 内容类型:<span>{{ item.contentTypeDesc }}</span>
- </div>
- <div class="text" v-show="item.startApprovalTime != null">
- 开始时间:<span>{{ item.startApprovalTime }}</span>
- </div>
- <div class="approveUnit">
- <div class="item-tit"><span>审批人</span><span>审批状态</span></div>
- <div class="item-cont" v-for="i in item.stepUnits">
- <span>{{ i.approvalUname }}</span
- ><span>{{ i.resultDesc }}</span>
- </div>
- </div>
- <div class="approveItem" v-if="item.contentType==1">
- <div class="item-tit">
- <span>审批项目</span>
-<!-- <span>类型</span>-->
- <div>措施标准</div>
- </div>
- <div class="item-cont" v-for="i in item.stepItems">
- <span>{{ i.itemName }}</span>
-<!-- <span>{{ i.typeDesc }}</span>-->
- <div v-if="i.measure !== null">
- <div>
- <span>作业类型:</span><span>{{ i.measure.workTypeDesc }}</span>
- </div>
- <div>
- <span>措施内容:</span><span>{{ i.measure.context }}</span>
- </div>
- </div>
- <div v-if="i.stand !== null">
- <div>
- <span>标题名称:</span><span>{{ i.stand.title }}</span>
- </div>
- <div>
- <span>标准内容:</span><span>{{ i.stand.typeDesc }}</span>
- </div>
- </div>
- </div>
- </div>
- <div class="text" v-show="item.expFinishApprovalTime != null">
- 期望结束时间:<span>{{ item.expFinishApprovalTime }}</span>
- </div>
- <div class="text" v-show="item.finishApprovalTime != null">
- 结束时间:<span>{{ item.finishApprovalTime }}</span>
- </div>
- </el-card>
- </div>
- </div>
- </div>
- </el-dialog>
- <el-dialog v-model="downLoadDialog" title="提示" width="30%" center>
- <span>您确定要导出该条记录吗?</span>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="downLoadDialog = false" size="default">取消</el-button>
- <el-button type="primary" @click="conFirmDownLoad" size="default">确认</el-button>
- </span>
- </template>
- </el-dialog>
-<!-- </el-tab-pane>-->
-<!-- <el-tab-pane label="已通过" name="2">-->
-<!-- <div style="height: 100%">-->
-<!-- <el-row class="homeCard">-->
-<!-- <el-col :span="8">-->
-<!-- <div class="grid-content topInfo">-->
-<!-- <el-input v-model="searchWord" placeholder="作业证名称"></el-input>-->
-<!-- <el-button type="primary">查询</el-button>-->
-<!-- <el-button plain>重置</el-button>-->
-<!-- </div>-->
-<!-- </el-col>-->
-<!-- </el-row>-->
-<!-- <div class="homeCard">-->
-<!-- <div class="main-card">-->
-<!-- <el-table ref="multipleTableRef" :data="passedData" style="width: 100%" height="calc(100% - 48px)" :header-cell-style="{ background: '#fafafa' }" @selection-change="handleSelectionChange">-->
-<!-- <el-table-column type="selection" width="55" />-->
-<!-- <el-table-column type="index" label="编号" width="200" />-->
-<!-- <el-table-column property="level" label="作业证等级" width="180" sortable />-->
-<!-- <el-table-column property="applyDate" label="申请日期" sortable />-->
-<!-- <el-table-column property="name" label="申请人" width="180" />-->
-<!-- <el-table-column property="department" label="申请部门" width="180" />-->
-<!-- <el-table-column label="申请状态" width="180">-->
-<!-- <template #default="scope">-->
-<!-- <el-tag type="success">{{ scope.row.status }}</el-tag>-->
-<!-- </template>-->
-<!-- </el-table-column>-->
-<!-- </el-table>-->
-<!-- <div class="pageBtn">-->
-<!-- <el-pagination v-model:currentPage="pageIndex2" v-model:page-size="pageSize2" :page-sizes="[10, 15]" small="false" background layout="total, sizes, prev, pager, next, jumper" :total="totalSize2" @size-change="handleSizeChange2" @current-change="handleCurrentChange2" />-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </div>-->
-<!-- </el-tab-pane>-->
-<!-- </el-tabs>-->
- </div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, onMounted, defineAsyncComponent} from 'vue';
-import { storeToRefs } from 'pinia';
-import { initBackEndControlRoutes } from '/@/router/backEnd';
-import { useUserInfo } from '/@/stores/userInfo';
-import { Session } from '/@/utils/storage';
-import { useRouter } from 'vue-router';
-import { Edit, View, Plus, Delete, Refresh, Search, Finished, Download } from '@element-plus/icons-vue';
-import { ElTable } from 'element-plus';
-import { FormInstance, FormRules, ElMessage } from 'element-plus';
-import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-import type { TabsPaneContext } from 'element-plus';
-import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage";
-import Cookies from 'js-cookie';
-import axios from 'axios';
-
-// 定义接口来定义对象的类型
-interface stateType {
- applyData: Array<string>;
- workTimeList: Array<string>;
- multipleSelection: Array<any>;
- deleteArr: Array<any>;
- casProps: {};
- approveInfo: Object;
- dialogDetails: boolean;
- dialogStatus: boolean;
- deleteDialog: boolean;
- downLoadDialog: boolean;
- pageIndex1: number;
- pageSize1: number;
- chosenIndex: null | number;
- deleteId: null | number;
- downLoadId: null | number;
- downLoadName: string;
- searchWord: number | null;
- searchDep: number | null;
- searchDate: Array<any>,
- totalSize1: number;
- activeName: string;
- addRecord: {};
- details: {};
- statusInfo: {};
- workType: Array<type>;
- dialogType: number | null;
- departmentList: Array<any>;
- departmentRecursionList: Array<DepartmentState>;
-}
-interface type {
- id: number;
- name: string;
-}
-interface DepartmentState {
- depId: number;
- depName: string;
-}
-export default defineComponent({
- name: 'myApply',
- components: {
- fire: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/fireLog.vue')),
- space: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/spaceLog.vue')),
- hoist: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/hoistLog.vue')),
- ground: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/groundLog.vue')),
- broken: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/brokenLog.vue')),
- height: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/heightLog.vue')),
- power: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/powerLog.vue')),
- plate: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/wdsq/components/plateLog.vue'))
- },
- setup() {
- const userInfo = useUserInfo();
- const { userInfos } = storeToRefs(userInfo);
- const router = useRouter();
- const state = reactive<stateType>({
- pageIndex1: 1,
- pageSize1: 10,
- totalSize1: 0,
- dialogType: null,
- activeName: '1',
- departmentList: [],
- departmentRecursionList: [],
- chosenIndex: null,
- searchWord: null,
- searchDep: null,
- searchDate: [],
- applyData: [],
- workTimeList: [],
- multipleSelection: [],
- approveInfo: {
- approvalSteps: [],
- operators: []
- },
- casProps: {
- expandTrigger: 'hover',
- emitPath: false,
- value: 'depId',
- label: 'depName',
- checkStrictly: true
- },
- dialogDetails: false,
- dialogStatus: false,
- deleteDialog: false,
- downLoadDialog: false,
- addRecord: {},
- details: {},
- statusInfo: {},
- deleteId: null,
- downLoadId: null,
- downLoadName: '',
- deleteArr: [],
- workType: [
- { id: 1, name: '动火作业' },
- { id: 2, name: '受限空间作业' },
- { id: 3, name: '吊装作业' },
- { id: 4, name: '动土作业' },
- { id: 5, name: '断路作业' },
- { id: 6, name: '高处作业' },
- { id: 7, name: '临时用电作业' },
- { id: 8, name: '盲板抽堵作业' }
- ]
- });
- interface User {
- name: string;
- list: [];
- info: string;
- }
-
- // 刷新
- const reLoadData = async () => {
- getListByPage();
- };
-
- // 填写表单
- const toApply = () => {
- router.push({
- path: 'zysq'
- });
- };
-
- const handleClick = (tab: TabsPaneContext, event: Event) => {
- };
-
- // 获取部门列表
- const getAllDepartment = async () => {
- let res = await teamManageApi().getAllDepartment();
- if (res.data.code === '200') {
- state.departmentList = JSON.parse(JSON.stringify(res.data.data))
- // recursion(state.departmentList);
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
-
- // const recursion = (value: any) => {
- // for (let i of value) {
- // if (i.children.length !== 0) {
- // state.departmentRecursionList.push(i);
- // recursion(i.children);
- // } else {
- // state.departmentRecursionList.push(i);
- // }
- // }
- // };
-
- // 分页获取列表
- const getListByPage = async () => {
- const dateRange = JSON.parse(JSON.stringify(state.searchDate))
- if(dateRange[1]){dateRange[1] = dateRange[1].replace('00:00:00','23:59:59')}
- const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { workType: state.searchWord, applyDepId: state.searchDep,applyStartTime: dateRange[0],applyEndTime: dateRange[1]} };
- let res = await workApplyApi().getApplyList(data);
- if (res.data.code === '200') {
- state.applyData = JSON.parse(JSON.stringify(res.data.data));
- state.applyData = state.applyData.map((item) => {
- if (item.operators == null || item.operators == []) {
- item.operators = [];
- } else {
- item.operators = Array.from(item.operators, ({ operatorUname }) => operatorUname);
- }
- return item;
- });
- state.totalSize1 = res.data.total;
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
-
- // 表格数据格式化
- const toNames = (row, column, cellValue, index) => {
- if (row.list == []) {
- return [];
- } else {
- const nameList = [];
- for (let i = 0; i < row.list.length; i++) {
- for (let t = 0; t < state.workTimeList.length; t++) {
- if (row.list[i] == state.workTimeList[t].id) {
- nameList.push(state.workTimeList[t].name);
- }
- }
- }
- return nameList.join();
- }
- };
-
- // 关键词查询记录
- const searchRecord = async () => {
- if (state.searchWord == null && state.searchDep == null && state.searchDate == []) {
- ElMessage({
- type: 'warning',
- message: '请输入查询关键词'
- });
- } else {
- getListByPage();
- }
- };
- // 重置搜索
- const clearSearch = async () => {
- state.searchWord = null;
- state.searchDep = null;
- state.searchDate = []
- getListByPage();
- };
-
- // 查看进度
- const viewStatus = (row) => {
- getStatus({ workApplyId: row.workApplyId });
- };
-
- // 查询进度方法
- const getStatus = async (data: any) => {
- let res = await workApplyApi().getAllStatus(data);
- if (res.data.code === '200') {
- state.approveInfo = JSON.parse(JSON.stringify(res.data.data));
- state.approveInfo.operators = Array.from(state.approveInfo.operators, ({ operatorUname }) => operatorUname);
- state.dialogStatus = true;
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
-
- const deleteRecordBtn = (row) => {
- state.deleteId = row.workApplyId;
- state.deleteDialog = true;
- };
-
- // 导出图表
- const downLoadBtn = (row:any) =>{
- state.downLoadId = row.workApplyId;
- state.downLoadName = row.workTypeDesc + row.workPermitNo
- state.downLoadDialog = true;
- }
-
- // 导出方法
- const downLoadRecord = async (data: any) => {
- // let res = await workApplyApi().postPrinting(data);
- axios.post(import.meta.env.VITE_API_URL + `/work/apply/printingPdf`,data,{headers:{'Content-Type': 'application/json','Authorization': `${Cookies.get('token')}`,'uid':`${Cookies.get('uid')}`},responseType: 'blob'}).then(res=>{
- if (res) {
- const link = document.createElement('a')
- let blob = new Blob([res.data],{type: 'application/pdf'})
- link.style.display = "none";
- link.href = URL.createObjectURL(blob); // 创建URL
- link.setAttribute("download", state.downLoadName + "作业证.pdf");
- document.body.appendChild(link);
- link.click();
- document.body.removeChild(link);
- } else {
- ElMessage({
- type: 'warning',
- message: '导出失败'
- });
- }
- })
-
- };
-
- const conFirmDownLoad = () => {
- downLoadRecord({ applyWorkId: state.downLoadId });
- state.downLoadDialog = false;
- };
-
- const handleSizeChange1 = (val: number) => {
- state.pageSize1 = val;
- getListByPage();
- };
- const handleCurrentChange1 = (val: number) => {
- state.pageIndex1 = val;
- getListByPage();
- };
-
- // 查看记录
- const viewRecord = (row: any) => {
- state.dialogType = row.workType
- state.details = JSON.parse(JSON.stringify(row));
- if(state.details.workDetail.otherSpecialWork == '' || !state.details.workDetail.otherSpecialWork){
- state.details.workDetail.otherSpecialWork=[]
- }
- else {
- const a = state.details.workDetail.otherSpecialWork
- state.details.workDetail.otherSpecialWork = a.split(',').map((item) => {
- return state.workType.find((i: { id: number }) => i.id === Number(item))?.name;
- });
- }
- if(state.details.workDetail.involvedDepIds == '' || !state.details.workDetail.involvedDepIds){
- state.details.workDetail.involvedDepIds=[]
- }
- else {
- const a = state.details.workDetail.involvedDepIds
- state.details.workDetail.involvedDepIds = a.split(',').map((item) => {
- return state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(item))?.depName;
- });
- }
- if(state.details.workDetail.csDepId){
- state.details.workDetail.csDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.csDepId))?.depName;
- }
- if(state.details.workDetail.operationDepId){
- state.details.workDetail.operationDepId = state.departmentRecursionList.find((i: { depId: number }) => i.depId === Number(state.details.workDetail.operationDepId))?.depName;
- }
- if(state.details.workDetail.gbPath){
- state.details.workDetail.gbPath = state.details.workDetail.gbPath.split(',')
- }
- if(state.details.workDetail.bcPath){
- state.details.workDetail.bcPath = state.details.workDetail.bcPath.split(',')
- }
- if(state.details.workDetail.bpLocationMapPath){
- state.details.workDetail.bpLocationMapPath = state.details.workDetail.bpLocationMapPath.split(',')
- }
- state.dialogDetails = true;
- };
-
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId', value);
- userInfos.value.projectId = value;
- await initBackEndControlRoutes();
- };
-
- // 页面载入时执行方法
- onMounted(() => {
- getListByPage();
- getAllDepartment()
- });
-
- return {
- View,
- Edit,
- Delete,
- Refresh,
- Plus,
- Finished,
- Download,
- reLoadData,
- toApply,
- handleClick,
- toNames,
- searchRecord,
- clearSearch,
- viewRecord,
- viewStatus,
- deleteRecordBtn,
- downLoadBtn,
- conFirmDownLoad,
- getListByPage,
- handleSizeChange1,
- handleCurrentChange1,
- ...toRefs(state)
- };
- }
-});
-</script>
-
-<style scoped lang="scss">
-$homeNavLengh: 8;
-.home-container {
- height: calc(100vh - 144px);
- box-sizing: border-box;
- overflow: hidden;
- .demo-tabs {
- width: 100%;
- height: 100%;
-
- &::v-deep(.el-tabs__content) {
- height: calc(100% - 60px);
- }
-
- .el-tab-pane {
- height: 100%;
- }
- }
- .homeCard {
- width: 100%;
- padding: 20px;
- box-sizing: border-box;
- background: #fff;
- border-radius: 4px;
-
- .main-card {
- width: 100%;
- height: 100%;
- .cardTop {
- display: flex;
- align-items: center;
- justify-content: space-between;
- margin-bottom: 20px;
- .mainCardBtn {
- margin: 0;
- }
- }
- .pageBtn {
- height: 60px;
- display: flex;
- align-items: center;
- justify-content: right;
-
- .demo-pagination-block + .demo-pagination-block {
- margin-top: 10px;
- }
- .demo-pagination-block .demonstration {
- margin-bottom: 16px;
- }
- }
- }
- &:last-of-type {
- height: calc(100% - 100px);
- }
- }
- .stepItem {
- display: flex;
- align-items: flex-start;
- margin-top: 30px;
- margin-left: 30px;
- padding-bottom: 30px;
- padding-left: 40px;
- border-left: 1px solid #a0cfff;
- position: relative;
- &:first-of-type {
- margin-top: 30px;
- }
- &:first-of-type {
- margin-bottom: 0;
- border-left: none;
- }
- .stepNum {
- position: absolute;
- width: 40px;
- height: 40px;
- border-radius: 20px;
- box-sizing: border-box;
- font-size: 18px;
- color: #333;
- border: 1px solid #a0cfff;
- line-height: 38px;
- text-align: center;
- left: -20px;
- top: -30px;
- background: #d9ecff;
- }
- .stepCard {
- width: 100%;
- margin-top: -30px;
-
- .box-card {
- width: 100%;
-
- .card-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
-
- span {
- font-weight: bold;
- margin-left: 10px;
- }
- }
-
- .text {
- width: 100%;
- font-size: 14px;
- margin-bottom: 10px;
- padding-left: 10px;
-
- span {
- font-weight: bolder;
- color: #409eff;
- }
-
- &:last-of-type {
- margin-bottom: 0;
- }
- }
- .approveUnit {
- width: 100%;
- font-size: 14px;
- margin-bottom: 20px;
- padding: 10px 15px;
- border: 1px solid #fff;
- background: #ecf8ff;
- border-radius: 6px;
- .item-tit {
- width: 100%;
- display: flex;
- color: #409eff;
- align-items: flex-start;
- justify-content: space-between;
- padding-bottom: 10px;
- border-bottom: 1px solid #a0cfff;
-
- & > span {
- flex: 1;
- &:last-of-type{
- text-align: center;
- }
- }
- & > div {
- flex: 1;
- text-align: center;
- }
- }
- .item-cont {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 10px 0;
- border-bottom: 1px solid #c6e2ff;
-
- & > span {
- flex: 1;
- &:last-of-type{
- text-align: center;
- }
- }
- & > div {
- flex: 1;
- text-align: center;
-
- & > div {
- text-align: left;
- width: 100%;
- display: flex;
- justify-content: center;
- align-items: center;
- span {
- width: 45%;
- &:first-of-type {
- width: 30%;
- }
- }
- }
- }
- &:last-of-type {
- border-bottom: 0;
- }
- }
- }
- .approveItem {
- width: 100%;
- font-size: 14px;
- margin-bottom: 20px;
- padding: 10px 15px;
- background: #ecf8ff;
- border: 1px solid #fff;
- border-radius: 6px;
- .item-tit {
- width: 100%;
- display: flex;
- color: #409eff;
- align-items: flex-start;
- justify-content: space-between;
- padding-bottom: 10px;
- border-bottom: 1px solid #a0cfff;
-
- & > span {
- flex: 1;
- }
- & > div {
- flex: 2;
- text-align: center;
- }
- }
- .item-cont {
- width: 100%;
- display: flex;
- align-items: center;
- justify-content: space-between;
- padding: 10px 0;
- border-bottom: 1px solid #c6e2ff;
-
- & > span {
- flex: 1;
- }
- & > div {
- flex: 2;
- text-align: center;
-
- & > div {
- text-align: left;
- width: 100%;
- display: flex;
- justify-content: center;
- align-items: flex-start;
- margin-bottom: 10px;
- span {
- width: 50%;
- &:first-of-type {
- width: 25%;
- }
- }
- }
- }
- &:last-of-type {
- border-bottom: 0;
- }
- }
- }
- }
- }
- &:hover .card-header {
- color: #0098f5;
- }
- &:hover .stepNum {
- border: 2px solid #0098f5;
- color: #0098f5;
- }
- }
- .el-row {
- display: flex;
- align-items: center;
- margin-bottom: 20px;
- &:last-child {
- margin-bottom: 0;
- }
- .grid-content {
- align-items: center;
- min-height: 36px;
- }
-
- .topInfo {
- width: 100%;
- display: flex;
- align-items: center;
- font-size: 16px;
- font-weight: bold;
-
- & > div {
- white-space: nowrap;
- margin-right: 20px;
- }
- }
- }
-}
-.el-card {
- border: 0;
-}
-.el-input{
- width: 100% !important;
-}
-::v-deep(.el-date-editor){
- width: 100%;
-}
-.el-select{
- width: 100%;
-}
-:deep(.el-cascader){
- width: 100% !important;
-}
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/broken.vue b/src/views/specialWorkSystem/workTicket/zysq/components/broken.vue
deleted file mode 100644
index 65df3eb..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/broken.vue
+++ /dev/null
@@ -1,518 +0,0 @@
-<template>
- <div class="home-container">
- <div style="height: 100%">
- <el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
- <div class="homeCard">
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业人" prop="operatorUids">
- <el-select v-model="form.operatorUids" multiple>
- <el-option
- v-for="item in workerList"
- :key="item.uid"
- :label="item.username"
- :value="item.uid"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业时间" prop="workTimeLine">
- <el-date-picker
- v-model="form.workTimeLine"
- format="YYYY-MM-DD HH:mm"
- value-format="YYYY-MM-DD HH:mm:00"
- type="datetimerange"
- range-separator="至"
- start-placeholder="开始时间"
- end-placeholder="结束时间"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业内容" prop="workContent">
- <el-input
- v-model="form.workContent"
- autosize
- type="textarea"
- placeholder="请输入作业内容"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业地址" prop="workLocation">
- <el-input
- v-model="form.workLocation"
- autosize
- type="textarea"
- placeholder="请输入作业地址"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="危害辨识" prop="hazardIdentification">
- <el-input
- v-model="form.hazardIdentification"
- placeholder="请输入危害辨识"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="关联视频设备" prop="cameraIds">
- <el-select v-model="form.cameraIds" multiple>
- <el-option
- v-for="item in deviceList"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-divider border-style="dashed"/>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业单位" prop="workDetail.operationDepId">
-<!-- <el-select v-model="form.workDetail.operationDepId">-->
-<!-- <el-option-->
-<!-- v-for="item in csDepList"-->
-<!-- :key="item.value"-->
-<!-- :label="item.label"-->
-<!-- :value="item.value"-->
-<!-- />-->
-<!-- </el-select>-->
- <el-cascader v-model="form.workDetail.operationDepId" :options="departList" :props="casProps2" :show-all-levels="false" @change="handleChange2" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="断路原因" prop="workDetail.bcReason">
- <el-input
- v-model="form.workDetail.bcReason"
- autosize
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="断路地段说明" prop="workDetail.bcExplain">
- <el-input
- v-model="form.workDetail.bcExplain"
- autosize
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="涉及相关部门" prop="workDetail.involvedDepIds">
- <el-cascader v-model="form.workDetail.involvedDepIds" :options="departList" :props="casProps" :show-all-levels="false" @change="handleChange" />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="24">
- <el-form-item label="图片上传" prop="workDetail.bcPath">
- <el-upload accept="image/*" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :before-remove="beforeRemove" :before-upload="getUploadUrl">
- <el-icon><Plus /></el-icon>
- <template #tip>
- <div class="el-upload__tip">上传jpg/png图片尺寸小于500KB,最多可上传3张</div>
- </template>
- </el-upload>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="选择关联物资">
- <el-button type="primary" @click="openMaList">选择物资标准</el-button>
- </el-form-item>
- </el-col>
- </el-row>
- </div>
- </el-form>
- <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
- <div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
- </div>
- </div>
- <el-dialog v-model="dialogVisible">
- <img w-full :src="dialogImageUrl" alt="Preview Image" />
- </el-dialog>
- </div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, defineAsyncComponent} from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage, ElMessageBox } from 'element-plus'
- import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
- import axios from 'axios';
-
- interface stateType {
- form: Object,
- csDepList: Array<any>,
- fileList: Array<file>,
- uploadUrl: string,
- dialogVisible: Boolean,
- dialogImageUrl: string | null,
- imgLimit: number,
- casProps: {},
- casProps2: {},
- isOverSize: boolean,
- }
- interface file {
- url: string;
- }
- export default defineComponent({
- name: 'brokenForm',
- components: {
- materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
- },
- props:['workerList','departList','deviceList'],
- setup(props: any, context: any) {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- const state = reactive<stateType>({
- form: {
- operatorUids: [],
- workType: 5,
- workLevel: 0,
- workContent: '',
- workLocation: '',
- hazardIdentification: '',
- cameraIds: [],
- maBaseId: null,
- workDetail:{
- operationDepId: null,
- bcReason: '',
- bcExplain: '',
- bcPath: [],
- involvedDepIds: []
- },
- receiveUids: [],
- workTimeLine: [],
- expStartTime: '',
- expEndTime: ''
- },
- isOverSize: false,
- fileList: [],
- imgLimit: 3,
- uploadUrl: '',
- dialogVisible: false,
- dialogImageUrl: null,
- csDepList: [
- {
- label: "单位一",
- value: 1
- },
- {
- label: "单位二",
- value: 2
- },
- {
- label: "单位三",
- value: 3
- },
- {
- label: "单位四",
- value: 4
- },
- {
- label: "单位五",
- value: 5
- },
- {
- label: "单位六",
- value: 6
- }
- ],
- casProps: {
- emitPath: false,
- value: 'depId',
- label: 'depName',
- multiple: true,
- expandTrigger: 'hover'
- },
- casProps2: {
- emitPath: false,
- value: 'depId',
- label: 'depName',
- multiple: false,
- expandTrigger: 'hover',
- checkStrictly: true
- }
- });
- const material = ref()
- const ruleFormRef = ref<FormInstance>()
- const applyRules = reactive<FormRules>({
- operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.operationDepId": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.bcReason": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.bcExplain": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.bcPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.involvedDepIds": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
- });
-
- // const toZero = (value: string | number,index: number,name: string,x:number) =>{
- // if(!value){
- // state.materialList[index][name][x].value = 0
- // }
- // }
-
- const openMaList = ()=>{
- if(state.form.operatorUids == []){
- ElMessage({
- type: 'warning',
- message: '请先选择作业人再获取相应物资配置'
- });
- }else{
- if(material.value.receiveUids.length==0){
- material.value.receiveUids = state.form.operatorUids
- }
- material.value.getMaList(state.form.workType,state.form.workLevel)
- material.value.workerList = props.workerList
- }
- }
- const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
- state.form.maBaseId = null
- state.form.receiveUids = []
- state.form.receiveUids = receiveUids
- state.form.maBaseId = chosenId
- }
-
- const submitForm = async (formEl: FormInstance | undefined) => {
- if (!formEl) return
- await formEl.validate(async (valid, fields) => {
- if (valid) {
- // if (state.form.wmAddReqDTOList == null || state.form.wmAddReqDTOList.length == 0){
- // ElMessage({
- // type: 'warning',
- // message: '请确认关联物资的配置'
- // });
- // return
- // }
- state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
- state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
- let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
- data.workDetail.involvedDepIds = data.workDetail.involvedDepIds.join(',')
- data.workDetail.bcPath = data.workDetail.bcPath.join(',')
- const res = await workApplyApi().postBrokenApply(data)
- if (res.data.code === '200') {
- ElMessage({
- type: 'success',
- message: '提交成功!'
- });
- formEl.resetFields()
- state.form.workDetail.bcPath = []
- state.fileList = []
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- material.value.maBaseId = null
- material.value.receiveUids = []
- } else {
- console.log('error submit!', fields)
- }
- })
- }
-
- const handlePreview: UploadProps['onPreview'] = (uploadFile) => {
- console.log(uploadFile);
- };
-
- const handlePictureCardPreview = (uploadFile: { url: string }) => {
- state.dialogImageUrl = uploadFile.url!;
- state.dialogVisible = true;
- };
-
- const getUploadUrl = async (rawFile: any) => {
- const fileSize = rawFile.size / 1024 < 500 ? '1' : '0'
- if(fileSize === '0'){
- ElMessage({
- type: 'warning',
- message: '文件大小不能超过500k。'
- });
- state.isOverSize = true
- return false
- }else{
- const res = await workApplyApi().getUploadUrl(rawFile.name);
- state.form.workDetail.bcPath.push(res.data.data.fileName)
- state.uploadUrl = res.data.data.uploadUrl;
- console.log(res.data.data.fileName,'name')
- }
- };
-
- const upload = async (params: any) => {
- // const formData = new FormData();
- // formData.append('file', state.fileList[0].raw);
- let reader = new FileReader();
- reader.readAsArrayBuffer(params.file);
- reader.onload = async () => {
- axios
- .put(state.uploadUrl, reader.result, {
- header: { 'Content-Type': 'multipart/form-data' }
- })
- .then(() => {
- // if (state.fileList.length === 2) {
- // state.fileList.splice(0, 1);
- // }
- // console.log(state.form.workDetail.bcPath,'bcPath')
- });
- };
- };
-
- const beforeRemove = (file: {}, fileList: []) => {
- const result = new Promise((resolve, reject) => {
- if(!state.isOverSize){
- ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- })
- .then(() => {
- // console.log(state.workDetail.bcPath,'path')
- const list = JSON.parse(JSON.stringify(state.form.workDetail.bcPath))
- fileList.map((item,index)=>{
- if(item.uid === file.uid){
- fileList.splice(index,1)
- state.form.workDetail.bcPath.splice(index,1)
- deletePic(false,list[index])
- }
- })
- // 请求删除接口
- })
- .catch(() => {
- reject(false);
- });
- }else{
- const list = JSON.parse(JSON.stringify(state.form.workDetail.bcPath))
- fileList.map((item,index)=>{
- if(item.uid === file.uid){
- fileList.splice(index,1)
- state.form.workDetail.bcPath.splice(index,1)
- deletePic(true,list[index])
- }
- })
- state.isOverSize = false
- }
- });
- return result;
- };
-
-
- // 删除图片接口
- const deletePic = async(isOverSize:boolean,fileName:string)=>{
- console.log(fileName,'fileName')
- const res = await workApplyApi().deleteFile({fileName: fileName})
- if (res.data.code === '200') {
- ElMessage({
- type: isOverSize ? 'error' : 'success',
- message: isOverSize ? '上传失败':'删除成功!'
- });
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- }
-
- const showTip =()=>{
- ElMessage({
- type: 'warning',
- message: '超出文件上传数量'
- });
- }
-
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId',value)
- userInfos.value.projectId = value
- await initBackEndControlRoutes();
- };
- return {
- renderMenu,
- Search,
- ruleFormRef,
- applyRules,
- material,
- conFirmMaterials,
- openMaList,
- handlePreview,
- getUploadUrl,
- beforeRemove,
- upload,
- showTip,
- submitForm,
- handlePictureCardPreview,
- ...toRefs(state),
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .homeCard{
- width: 100%;
- padding: 20px;
- box-sizing: border-box;
- background: #fff;
- border-radius: 4px;
- margin-bottom: 20px;
- }
- .applyBtn{
- width: 100%;
- background: #fff;
- padding-top: 15px;
- z-index: 5;
- box-shadow: 0 -3px 8px rgba(150,150,150,.1);
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- :deep(.el-cascader){
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/fire.vue b/src/views/specialWorkSystem/workTicket/zysq/components/fire.vue
deleted file mode 100644
index bc19fc9..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/fire.vue
+++ /dev/null
@@ -1,382 +0,0 @@
-<template>
- <div class="home-container">
- <div style="height: 100%">
- <el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
- <div class="homeCard">
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业人" prop="operatorUids">
- <el-select v-model="form.operatorUids" multiple>
- <el-option
- v-for="item in workerList"
- :key="item.uid"
- :label="item.username"
- :value="item.uid"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业时间" prop="workTimeLine">
- <el-date-picker
- v-model="form.workTimeLine"
- format="YYYY-MM-DD HH:mm"
- value-format="YYYY-MM-DD HH:mm:00"
- type="datetimerange"
- range-separator="至"
- start-placeholder="开始时间"
- end-placeholder="结束时间"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业等级" prop="workLevel">
- <el-select v-model="form.workLevel">
- <el-option
- v-for="item in workLevelList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业内容" prop="workContent">
- <el-input
- v-model="form.workContent"
- autosize
- type="textarea"
- placeholder="请输入作业内容"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业地址" prop="workLocation">
- <el-input
- v-model="form.workLocation"
- autosize
- type="textarea"
- placeholder="请输入作业地址"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="危害辨识" prop="hazardIdentification">
- <el-input
- v-model="form.hazardIdentification"
- placeholder="请输入危害辨识"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="关联视频设备" prop="cameraIds">
- <el-select v-model="form.cameraIds" multiple>
- <el-option
- v-for="item in deviceList"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-divider border-style="dashed"/>
- <el-row>
- <el-col :span="12">
- <el-form-item label="动火方式" prop="workDetail.hotMethod">
- <el-input
- v-model="form.workDetail.hotMethod"
- autosize
- type="textarea"
- placeholder="请输入动火方式"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="关联作业" prop="workDetail.otherSpecialWork">
- <el-select v-model="form.workDetail.otherSpecialWork" multiple>
- <el-option
- v-for="item in otherWorkList"
- :key="item.value"
- :label="item.label"
- :value="item.label"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="选择关联物资">
- <el-button type="primary" @click="openMaList">选择物资标准</el-button>
- </el-form-item>
- </el-col>
- </el-row>
- </div>
- </el-form>
- <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
- <div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
- </div>
- </div>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage, ElMessageBox } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
- interface stateType {
- form: Object,
- workLevelList: Array<any>,
- otherWorkList: Array<any>,
- equipmentDialog: boolean
- }
- export default defineComponent({
- name: 'fireForm',
- components: {
- materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
- },
- props:['workerList','deviceList'],
- setup(props: any, context: any) {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- const state = reactive<stateType>({
- equipmentDialog: false,
- form: {
- operatorUids: [],
- workType: 1,
- workLevel: null,
- workContent: '',
- workLocation: '',
- maBaseId: null,
- hazardIdentification: '',
- cameraIds: [],
- workDetail:{
- hotMethod: '',
- otherSpecialWork: []
- },
- receiveUids: [],
- workTimeLine: [],
- expStartTime: '',
- expEndTime: ''
- },
- workLevelList: [
- {
- label: "一级动火作业",
- value: 1
- },
- {
- label: "二级动火作业",
- value: 2
- },
- {
- label: "特级动火作业",
- value: 3
- }
- ],
- otherWorkList: [
- {
- label: "动火作业",
- value: 1
- },
- {
- label: "受限空间作业",
- value: 2
- },
- {
- label: "吊装作业",
- value: 3
- },
- {
- label: "动土作业",
- value: 4
- },
- {
- label: "断路作业",
- value: 5
- },
- {
- label: "高处作业",
- value: 6
- },
- {
- label: "临时用电作业",
- value: 7
- },
- {
- label: "盲板抽堵作业",
- value: 8
- }
- ]
- });
- const material = ref()
- const ruleFormRef = ref<FormInstance>()
- const applyRules = reactive<FormRules>({
- operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.hotMethod": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
- });
-
- // 页面载入时执行方法
- onMounted(() => {
-
- });
- // const toZero = (value: string | number,index: number,name: string,x:number) =>{
- // if(!value){
- // state.materialList[index][name][x].value = 0
- // }
- // }
- const openMaList = ()=>{
- if(state.form.workLevel == null || state.form.operatorUids == []){
- ElMessage({
- type: 'warning',
- message: '请先选择作业人和作业等级再获取相应物资配置'
- });
- }else{
- if(material.value.receiveUids.length==0){
- material.value.receiveUids = state.form.operatorUids
- }
- material.value.getMaList(state.form.workType,state.form.workLevel)
- material.value.workerList = props.workerList
- }
- }
- const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
- state.form.maBaseId = null
- state.form.receiveUids = []
- state.form.receiveUids = receiveUids
- state.form.maBaseId = chosenId
- }
- const submitForm = async (formEl: FormInstance | undefined) => {
- if (!formEl) return
- await formEl.validate(async (valid, fields) => {
- if (valid) {
- // if (state.form.wmAddReqDTOList == null || state.form.wmAddReqDTOList.length == 0){
- // ElMessage({
- // type: 'warning',
- // message: '请确认关联物资的配置'
- // });
- // return
- // }
- state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
- state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
- let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
- data.workDetail.otherSpecialWork = data.workDetail.otherSpecialWork.join(',')
- const res = await workApplyApi().postFireApply(data)
- if (res.data.code === '200') {
- ElMessage({
- type: 'success',
- message: '提交成功!'
- });
- formEl.resetFields()
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- material.value.maBaseId = null
- material.value.receiveUids = []
- } else {
- console.log('error submit!', fields)
- }
- })
- }
-
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId',value)
- userInfos.value.projectId = value
- await initBackEndControlRoutes();
- };
- return {
- renderMenu,
- Search,
- material,
- ruleFormRef,
- applyRules,
- openMaList,
- conFirmMaterials,
- submitForm,
- ...toRefs(state),
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .homeCard{
- width: 100%;
- padding: 20px;
- box-sizing: border-box;
- background: #fff;
- border-radius: 4px;
- margin-bottom: 20px;
- }
- .applyBtn{
- width: 100%;
- background: #fff;
- padding-top: 15px;
- z-index: 5;
- box-shadow: 0 -3px 8px rgba(150,150,150,.1);
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-
- .tab-i{
- margin-bottom: 15px;
-
- &:last-of-type{
- margin-bottom: 0;
- }
- ::v-deep(.el-form-item){
- .el-form-item__label{
- margin-bottom: 4px;
- }
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/ground.vue b/src/views/specialWorkSystem/workTicket/zysq/components/ground.vue
deleted file mode 100644
index 6838d8e..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/ground.vue
+++ /dev/null
@@ -1,577 +0,0 @@
- <template>
- <div class="home-container">
- <div style="height: 100%">
- <el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
- <div class="homeCard">
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业人" prop="operatorUids">
- <el-select v-model="form.operatorUids" multiple>
- <el-option
- v-for="item in workerList"
- :key="item.uid"
- :label="item.username"
- :value="item.uid"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业时间" prop="workTimeLine">
- <el-date-picker
- v-model="form.workTimeLine"
- format="YYYY-MM-DD HH:mm"
- value-format="YYYY-MM-DD HH:mm:00"
- type="datetimerange"
- range-separator="至"
- start-placeholder="开始时间"
- end-placeholder="结束时间"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业内容" prop="workContent">
- <el-input
- v-model="form.workContent"
- autosize
- type="textarea"
- placeholder="请输入作业内容"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业地址" prop="workLocation">
- <el-input
- v-model="form.workLocation"
- autosize
- type="textarea"
- placeholder="请输入作业地址"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="危害辨识" prop="hazardIdentification">
- <el-input
- v-model="form.hazardIdentification"
- placeholder="请输入危害辨识"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="关联视频设备" prop="cameraIds">
- <el-select v-model="form.cameraIds" multiple>
- <el-option
- v-for="item in deviceList"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-divider border-style="dashed"/>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业单位" prop="workDetail.operationDepId">
-<!-- <el-select v-model="form.workDetail.operationDepId">-->
-<!-- <el-option-->
-<!-- v-for="item in csDepList"-->
-<!-- :key="item.value"-->
-<!-- :label="item.label"-->
-<!-- :value="item.value"-->
-<!-- />-->
-<!-- </el-select>-->
- <el-cascader v-model="form.workDetail.operationDepId" :options="departList" :props="casProps" :show-all-levels="false" @change="handleChange" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="范围" prop="workDetail.gbScope">
- <el-input
- v-model="form.workDetail.gbScope"
- autosize
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="动土方式" prop="workDetail.gbMethod">
- <el-input
- v-model="form.workDetail.gbMethod"
- autosize
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="关联作业" prop="workDetail.otherSpecialWork">
- <el-select v-model="form.workDetail.otherSpecialWork" multiple>
- <el-option v-for="item in otherWorkList" :key="item.value" :label="item.label" :value="item.label" />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="24">
- <el-form-item label="图片上传" prop="workDetail.gbPath">
- <el-upload accept="image/*" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :before-remove="beforeRemove" :before-upload="getUploadUrl">
- <el-icon><Plus /></el-icon>
- <template #tip>
- <div class="el-upload__tip">上传jpg/png图片尺寸小于500KB,最多可上传3张</div>
- </template>
- </el-upload>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="选择关联物资">
- <el-button type="primary" @click="openMaList">选择物资标准</el-button>
- </el-form-item>
- </el-col>
- </el-row>
- </div>
- </el-form>
- <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
- <div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
- </div>
- </div>
- <el-dialog v-model="dialogVisible">
- <img w-full :src="dialogImageUrl" alt="Preview Image" />
- </el-dialog>
- </div>
-</template>
-
-<script lang="ts">
- import { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search,Plus } from '@element-plus/icons-vue'
- import { ElMessage, ElMessageBox } from 'element-plus'
- import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
- import axios from 'axios';
-
- interface stateType {
- equipmentDialog: boolean,
- form: Object,
- csDepList: Array<any>,
- otherWorkList: Array<any>,
- fileList: Array<file>,
- uploadUrl: string,
- dialogVisible: Boolean,
- dialogImageUrl: string | null,
- imgLimit: number,
- casProps: {},
- isOverSize: Boolean
- }
- interface file {
- url: string;
- }
- export default {
- name: 'groundForm',
- components: {
- materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
- },
- props:['workerList','departList', 'deviceList'],
- setup(props: any, context: any) {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- const state = reactive<stateType>({
- equipmentDialog: false,
- form: {
- operatorUids: [],
- workType: 4,
- workLevel: 0,
- workContent: '',
- workLocation: '',
- hazardIdentification: '',
- cameraIds: [],
- maBaseId: null,
- workDetail:{
- operationDepId: null,
- gbScope: '',
- gbMethod: '',
- gbPath: [],
- otherSpecialWork: []
- },
- receiveUids: [],
- workTimeLine: [],
- expStartTime: '',
- expEndTime: ''
- },
- isOverSize: false,
- fileList: [],
- imgLimit: 3,
- uploadUrl: '',
- dialogVisible: false,
- dialogImageUrl: null,
- csDepList: [
- {
- label: "单位一",
- value: 1
- },
- {
- label: "单位二",
- value: 2
- },
- {
- label: "单位三",
- value: 3
- },
- {
- label: "单位四",
- value: 4
- },
- {
- label: "单位五",
- value: 5
- },
- {
- label: "单位六",
- value: 6
- }
- ],
- otherWorkList: [
- {
- label: '动火作业',
- value: 1
- },
- {
- label: '受限空间作业',
- value: 2
- },
- {
- label: '吊装作业',
- value: 3
- },
- {
- label: '动土作业',
- value: 4
- },
- {
- label: '断路作业',
- value: 5
- },
- {
- label: '高处作业',
- value: 6
- },
- {
- label: '临时用电作业',
- value: 7
- },
- {
- label: '盲板抽堵作业',
- value: 8
- }
- ],
- casProps: {
- emitPath: false,
- value: 'depId',
- label: 'depName',
- multiple: false,
- expandTrigger: 'hover',
- checkStrictly: true
- }
- });
- const material = ref()
- const ruleFormRef = ref<FormInstance>()
- const applyRules = reactive<FormRules>({
- operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.operationDepId": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.gbScope": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.gbMethod": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.gbPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
- });
- // const toZero = (value: string | number,index: number,name: string,x:number) =>{
- // if(!value){
- // state.materialList[index][name][x].value = 0
- // }
- // }
-
- const openMaList = ()=>{
- if(state.form.operatorUids == []){
- ElMessage({
- type: 'warning',
- message: '请先选择作业人再获取相应物资配置'
- });
- }else{
- if(material.value.receiveUids.length==0){
- material.value.receiveUids = state.form.operatorUids
- }
- material.value.getMaList(state.form.workType,state.form.workLevel)
- material.value.workerList = props.workerList
- }
- }
- const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
- state.form.maBaseId = null
- state.form.receiveUids = []
- state.form.receiveUids = receiveUids
- state.form.maBaseId = chosenId
- }
-
- const submitForm = async (formEl: FormInstance | undefined) => {
- if (!formEl) return
- await formEl.validate(async (valid, fields) => {
- if (valid) {
- // if (state.form.wmAddReqDTOList == null || state.form.wmAddReqDTOList.length == 0){
- // ElMessage({
- // type: 'warning',
- // message: '请确认关联物资的配置'
- // });
- // return
- // }
- state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
- state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
- let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
- data.workDetail.otherSpecialWork = data.workDetail.otherSpecialWork.join(',')
- data.workDetail.gbPath = data.workDetail.gbPath.join(',')
- const res = await workApplyApi().postGroundApply(data)
- if (res.data.code === '200') {
- ElMessage({
- type: 'success',
- message: '提交成功!'
- });
- formEl.resetFields()
- state.form.workDetail.gbPath = []
- state.fileList = []
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- material.value.maBaseId = null
- material.value.receiveUids = []
- } else {
- console.log('error submit!', fields)
- }
- })
- }
-
- const handlePreview: UploadProps['onPreview'] = (uploadFile) => {
- console.log(uploadFile);
- };
-
- const handlePictureCardPreview = (uploadFile: { url: string }) => {
- state.dialogImageUrl = uploadFile.url!;
- state.dialogVisible = true;
- };
-
- const getUploadUrl = async (rawFile: any) => {
- const fileSize = rawFile.size / 1024 < 500 ? '1' : '0'
- if(fileSize === '0'){
- ElMessage({
- type: 'warning',
- message: '文件大小不能超过500k。'
- });
- state.isOverSize = true
- return false
- }else{
- const res = await workApplyApi().getUploadUrl(rawFile.name);
- state.form.workDetail.gbPath.push(res.data.data.fileName)
- state.uploadUrl = res.data.data.uploadUrl;
- }
- };
-
- const upload = async (params: any) => {
- // const formData = new FormData();
- // formData.append('file', state.fileList[0].raw);
- let reader = new FileReader();
- reader.readAsArrayBuffer(params.file);
- reader.onload = async () => {
- axios
- .put(state.uploadUrl, reader.result, {
- header: { 'Content-Type': 'multipart/form-data' }
- })
- .then(() => {
- // if (state.fileList.length === 2) {
- // state.fileList.splice(0, 1);
- // }
- // console.log(state.form.workDetail.gbPath,'gbpath')
- });
- };
- };
-
- const beforeRemove = (file: {}, fileList: []) => {
- const result = new Promise((resolve, reject) => {
- if(!state.isOverSize){
- ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- })
- .then(() => {
- // console.log(state.workDetail.gbPath,'path')
- const list = JSON.parse(JSON.stringify(state.form.workDetail.gbPath))
- fileList.map((item,index)=>{
- if(item.uid === file.uid){
- fileList.splice(index,1)
- state.form.workDetail.gbPath.splice(index,1)
- // 请求删除接口
- deletePic(false,list[index])
- }
- })
- })
- .catch(() => {
- reject(false);
- });
- }else{
- const list = JSON.parse(JSON.stringify(state.form.workDetail.gbPath))
- fileList.map((item,index)=>{
- if(item.uid === file.uid){
- fileList.splice(index,1)
- state.form.workDetail.gbPath.splice(index,1)
- deletePic(true,list[index])
- }
- })
- state.isOverSize = false
- }
- });
- return result;
- };
-
-
- // 删除图片接口
- const deletePic = async(isOverSize:boolean,fileName:string)=>{
- const res = await workApplyApi().deleteFile({fileName: fileName})
- if (res.data.code === '200') {
- ElMessage({
- type: isOverSize ? 'error' : 'success',
- message: isOverSize ? '上传失败':'删除成功!'
- });
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- }
-
- const showTip =()=>{
- ElMessage({
- type: 'warning',
- message: '超出文件上传数量'
- });
- }
-
- // const handleRemove: UploadProps['onRemove'] = (uploadFile, uploadFiles) => {
- // console.log('2111111111111')
- // };
-
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId',value)
- userInfos.value.projectId = value
- await initBackEndControlRoutes();
- };
- return {
- renderMenu,
- Search,
- Plus,
- ruleFormRef,
- applyRules,
- material,
- openMaList,
- conFirmMaterials,
- handlePreview,
- getUploadUrl,
- beforeRemove,
- upload,
- showTip,
- submitForm,
- handlePictureCardPreview,
- ...toRefs(state),
- };
- },
- };
-</script>
-
-<style scoped lang="scss">
- .avatar-uploader .avatar {
- width: 178px;
- height: 178px;
- display: block;
- }
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .homeCard{
- width: 100%;
- padding: 20px;
- box-sizing: border-box;
- background: #fff;
- border-radius: 4px;
- margin-bottom: 20px;
- }
- .applyBtn{
- width: 100%;
- background: #fff;
- padding-top: 15px;
- z-index: 5;
- box-shadow: 0 -3px 8px rgba(150,150,150,.1);
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- :deep(.el-cascader){
- width: 100% !important;
- }
- }
-</style>
-<style>
- .avatar-uploader .el-upload {
- border: 1px dashed var(--el-border-color);
- border-radius: 6px;
- cursor: pointer;
- position: relative;
- overflow: hidden;
- transition: var(--el-transition-duration-fast);
- }
-
- .avatar-uploader .el-upload:hover {
- border-color: var(--el-color-primary);
- }
-
- .el-icon.avatar-uploader-icon {
- font-size: 28px;
- color: #8c939d;
- width: 178px;
- height: 178px;
- text-align: center;
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/height.vue b/src/views/specialWorkSystem/workTicket/zysq/components/height.vue
deleted file mode 100644
index af25685..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/height.vue
+++ /dev/null
@@ -1,443 +0,0 @@
-<template>
- <div class="home-container">
- <div style="height: 100%">
- <el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
- <div class="homeCard">
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业人" prop="operatorUids">
- <el-select v-model="form.operatorUids" multiple>
- <el-option
- v-for="item in workerList"
- :key="item.uid"
- :label="item.username"
- :value="item.uid"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业时间" prop="workTimeLine">
- <el-date-picker
- v-model="form.workTimeLine"
- format="YYYY-MM-DD HH:mm"
- value-format="YYYY-MM-DD HH:mm:00"
- type="datetimerange"
- range-separator="至"
- start-placeholder="开始时间"
- end-placeholder="结束时间"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业等级" prop="workLevel">
- <el-select v-model="form.workLevel">
- <el-option
- v-for="item in workLevelList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业内容" prop="workContent">
- <el-input
- v-model="form.workContent"
- autosize
- type="textarea"
- placeholder="请输入作业内容"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业地址" prop="workLocation">
- <el-input
- v-model="form.workLocation"
- autosize
- type="textarea"
- placeholder="请输入作业地址"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="危害辨识" prop="hazardIdentification">
- <el-input
- v-model="form.hazardIdentification"
- placeholder="请输入危害辨识"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="关联视频设备" prop="cameraIds">
- <el-select v-model="form.cameraIds" multiple>
- <el-option
- v-for="item in deviceList"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="关联设备" prop="cameraIds">
- <el-select v-model="form.cameraIds" multiple>
- <el-option
- v-for="item in deviceList"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-divider border-style="dashed"/>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业单位" prop="workDetail.operationDepId">
- <!-- <el-select v-model="form.workDetail.operationDepId">-->
- <!-- <el-option-->
- <!-- v-for="item in heDepList"-->
- <!-- :key="item.value"-->
- <!-- :label="item.label"-->
- <!-- :value="item.value"-->
- <!-- />-->
- <!-- </el-select>-->
- <el-cascader v-model="form.workDetail.operationDepId" :options="departList" :props="casProps" :show-all-levels="false" @change="handleChange" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业高度" prop="workDetail.operationHeight">
- <el-input
- v-model="form.workDetail.operationHeight"
- type="number"
- placeholder="请输入作业高度(大于等于0)"
- >
- <template #append>米(m)</template>
- </el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="关联作业" prop="workDetail.otherSpecialWork">
- <el-select v-model="form.workDetail.otherSpecialWork" multiple>
- <el-option
- v-for="item in otherWorkList"
- :key="item.value"
- :label="item.label"
- :value="item.label"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="选择关联物资">
- <el-button type="primary" @click="openMaList">选择物资标准</el-button>
- </el-form-item>
- </el-col>
- </el-row>
- </div>
- </el-form>
- <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
- <div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
- </div>
- </div>
- </div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, defineAsyncComponent} from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage, ElMessageBox } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
-
- interface stateType {
- equipmentDialog: boolean,
- form: Object,
- workTypeList: Array<any>,
- workLevelList: Array<any>,
- heDepList: Array<any>,
- otherWorkList: Array<any>,
- casProps:{}
- }
- export default defineComponent({
- name: 'heightForm',
- components: {
- materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
- },
- props:['workerList','departList','deviceList'],
- setup(props: any, context: any) {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- const state = reactive<stateType>({
- equipmentDialog: false,
- form: {
- operatorUids: [],
- workType: 6,
- workLevel: null,
- workContent: '',
- workLocation: '',
- hazardIdentification: '',
- cameraIds: [],
- maBaseId: null,
- workDetail:{
- operationDepId: '',
- operationHeight: null,
- otherSpecialWork: []
- },
- receiveUids: [],
- workTimeLine: [],
- expStartTime: '',
- expEndTime: ''
- },
- heDepList: [
- {
- label: "单位一",
- value: 1
- },
- {
- label: "单位二",
- value: 2
- },
- {
- label: "单位三",
- value: 3
- },
- {
- label: "单位四",
- value: 4
- },
- {
- label: "单位五",
- value: 5
- },
- {
- label: "单位六",
- value: 6
- }
- ],
- casProps: {
- emitPath: false,
- value: 'depId',
- label: 'depName',
- multiple: false,
- expandTrigger: 'hover',
- checkStrictly: true
- },
- workTypeList: [
- {
- label: "类型一",
- value: 1
- },
- {
- label: "类型二",
- value: 2
- }
- ],
- workLevelList: [
- {
- label: "一级高处作业",
- value: 4
- },
- {
- label: "二级高处作业",
- value: 5
- },
- {
- label: "三级高处作业",
- value: 6
- },
- {
- label: "特级高处作业",
- value: 7
- }
- ],
- otherWorkList: [
- {
- label: "动火作业",
- value: 1
- },
- {
- label: "受限空间作业",
- value: 2
- },
- {
- label: "吊装作业",
- value: 3
- },
- {
- label: "动土作业",
- value: 4
- },
- {
- label: "断路作业",
- value: 5
- },
- {
- label: "高处作业",
- value: 6
- },
- {
- label: "临时用电作业",
- value: 7
- },
- {
- label: "盲板抽堵作业",
- value: 8
- }
- ]
- });
- const material = ref()
- const ruleFormRef = ref<FormInstance>()
- const applyRules = reactive<FormRules>({
- operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.operationDepId": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.operationHeight": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
- });
-
- // const toZero = (value: string | number,index: number,name: string,x:number) =>{
- // if(!value){
- // state.materialList[index][name][x].value = 0
- // }
- // }
- const openMaList = ()=>{
- if(state.form.workLevel == null || state.form.operatorUids == []){
- ElMessage({
- type: 'warning',
- message: '请先选择作业人和作业等级再获取相应物资配置'
- });
- }else{
- if(material.value.receiveUids.length==0){
- material.value.receiveUids = state.form.operatorUids
- }
- material.value.getMaList(state.form.workType,state.form.workLevel)
- material.value.workerList = props.workerList
- }
- }
- const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
- state.form.maBaseId = null
- state.form.receiveUids = []
- state.form.receiveUids = receiveUids
- state.form.maBaseId = chosenId
- }
-
- const submitForm = async (formEl: FormInstance | undefined) => {
- if (!formEl) return
- await formEl.validate(async (valid, fields) => {
- if (valid) {
- state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
- state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
- let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
- data.workDetail.otherSpecialWork = data.workDetail.otherSpecialWork.join(',')
- const res = await workApplyApi().postHeightApply(data)
- if (res.data.code === '200') {
- ElMessage({
- type: 'success',
- message: '提交成功!'
- });
- formEl.resetFields()
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- material.value.maBaseId = null
- material.value.receiveUids = []
- } else {
- console.log('error submit!', fields)
- }
- })
- }
-
-
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId',value)
- userInfos.value.projectId = value
- await initBackEndControlRoutes();
- };
- return {
- renderMenu,
- Search,
- ruleFormRef,
- applyRules,
- material,
- openMaList,
- conFirmMaterials,
- submitForm,
- ...toRefs(state),
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .homeCard{
- width: 100%;
- padding: 20px;
- box-sizing: border-box;
- background: #fff;
- border-radius: 4px;
- margin-bottom: 20px;
- }
- .applyBtn{
- width: 100%;
- background: #fff;
- padding-top: 15px;
- z-index: 5;
- box-shadow: 0 -3px 8px rgba(150,150,150,.1);
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- :deep(.el-cascader){
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/hoist.vue b/src/views/specialWorkSystem/workTicket/zysq/components/hoist.vue
deleted file mode 100644
index e1ee0c5..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/hoist.vue
+++ /dev/null
@@ -1,324 +0,0 @@
-<template>
- <div class="home-container">
- <div style="height: 100%">
- <el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
- <div class="homeCard">
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业人" prop="operatorUids">
- <el-select v-model="form.operatorUids" multiple>
- <el-option
- v-for="item in workerList"
- :key="item.uid"
- :label="item.username"
- :value="item.uid"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业时间" prop="workTimeLine">
- <el-date-picker
- v-model="form.workTimeLine"
- format="YYYY-MM-DD HH:mm"
- value-format="YYYY-MM-DD HH:mm:00"
- type="datetimerange"
- range-separator="至"
- start-placeholder="开始时间"
- end-placeholder="结束时间"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业等级" prop="workLevel">
- <el-select v-model="form.workLevel">
- <el-option
- v-for="item in workLevelList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业内容" prop="workContent">
- <el-input
- v-model="form.workContent"
- autosize
- type="textarea"
- placeholder="请输入作业内容"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业地址" prop="workLocation">
- <el-input
- v-model="form.workLocation"
- autosize
- type="textarea"
- placeholder="请输入作业地址"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="危害辨识" prop="hazardIdentification">
- <el-input
- v-model="form.hazardIdentification"
- placeholder="请输入危害辨识"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="关联视频设备" prop="cameraIds">
- <el-select v-model="form.cameraIds" multiple>
- <el-option
- v-for="item in deviceList"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-divider border-style="dashed"/>
- <el-row>
- <el-col :span="12">
- <el-form-item label="吊装工具名称" prop="workDetail.hoistingToolName">
- <el-input
- v-model="form.workDetail.hoistingToolName"
- autosize
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="起吊物体质量" prop="workDetail.weightMass">
- <el-input
- v-model="form.workDetail.weightMass"
- type="number"
- placeholder="请输入起吊物体质量(大于等于0)"
- >
- <template #append>吨(t)</template>
- </el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="选择关联物资">
- <el-button type="primary" @click="openMaList">选择物资标准</el-button>
- </el-form-item>
- </el-col>
- </el-row>
- </div>
- </el-form>
- <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
- <div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
- </div>
- </div>
- </div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, defineAsyncComponent} from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage, ElMessageBox } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
- interface stateType {
- equipmentDialog: boolean,
- form: Object,
- workLevelList: Array<any>
- }
- export default defineComponent({
- name: 'hoistForm',
- components: {
- materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
- },
- props:['workerList','deviceList'],
- setup(props: any, context: any) {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- const state = reactive<stateType>({
- equipmentDialog: false,
- form: {
- operatorUids: [],
- workType: 3,
- workLevel: null,
- workContent: '',
- workLocation: '',
- maBaseId: null,
- hazardIdentification: '',
- cameraIds: [],
- workDetail:{
- hoistingToolName: '',
- weightMass: null
- },
- receiveUids: [],
- workTimeLine: [],
- expStartTime: '',
- expEndTime: ''
- },
- workLevelList: [
- {
- label: "一级吊装作业",
- value: 8
- },
- {
- label: "二级吊装作业",
- value: 9
- },
- {
- label: "三级吊装作业",
- value: 10
- }
- ]
- });
- const material = ref()
- const ruleFormRef = ref<FormInstance>()
- const applyRules = reactive<FormRules>({
- operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.hoistingToolName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.weightMass": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
- });
-
- // const toZero = (value: string | number,index: number,name: string,x:number) =>{
- // if(!value){
- // state.materialList[index][name][x].value = 0
- // }
- // }
- const openMaList = ()=>{
- if(state.form.workLevel == null || state.form.operatorUids == []){
- ElMessage({
- type: 'warning',
- message: '请先选择作业人和作业等级再获取相应物资配置'
- });
- }else{
- if(material.value.receiveUids.length==0){
- material.value.receiveUids = state.form.operatorUids
- }
- material.value.getMaList(state.form.workType,state.form.workLevel)
- material.value.workerList = props.workerList
- }
- }
- const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
- state.form.maBaseId = null
- state.form.receiveUids = []
- state.form.receiveUids = receiveUids
- state.form.maBaseId = chosenId
- }
- const submitForm = async (formEl: FormInstance | undefined) => {
- if (!formEl) return
- await formEl.validate(async (valid, fields) => {
- if (valid) {
- state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
- state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
- let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
- data.workDetail.weightMass = Number(data.workDetail.weightMass)
- const res = await workApplyApi().postHoistApply(data)
- if (res.data.code === '200') {
- ElMessage({
- type: 'success',
- message: '提交成功!'
- });
- formEl.resetFields()
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- material.value.maBaseId = null
- material.value.receiveUids = []
- } else {
- console.log('error submit!', fields)
- }
- })
- }
-
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId',value)
- userInfos.value.projectId = value
- await initBackEndControlRoutes();
- };
- return {
- renderMenu,
- Search,
- ruleFormRef,
- applyRules,
- material,
- openMaList,
- conFirmMaterials,
- submitForm,
- ...toRefs(state),
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .homeCard{
- width: 100%;
- padding: 20px;
- box-sizing: border-box;
- background: #fff;
- border-radius: 4px;
- margin-bottom: 20px;
- }
- .applyBtn{
- width: 100%;
- background: #fff;
- padding-top: 15px;
- z-index: 5;
- box-shadow: 0 -3px 8px rgba(150,150,150,.1);
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue b/src/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue
deleted file mode 100644
index 384515a..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue
+++ /dev/null
@@ -1,293 +0,0 @@
-<template>
- <el-dialog v-model="equipmentDialog" title="关联物资标准" width="40%" center @close="closeMaterial">
- <div class="standard" v-for="item in materialList">
- <div>{{ item.name }}</div>
- <el-button @click="openList(item)" type="success">选用</el-button>
- </div>
-
- <el-dialog v-model="equipDetailDialog" title="物资标准详情" width="75%" center @open="openDetail">
- <div class="choose-receiver">
- <span>选择其他作业关联人员</span>
- <el-select v-model="receiveUids" multiple @change="changeReceiver">
- <el-option
- v-for="item in workerList"
- :key="item.uid"
- :label="item.username"
- :value="item.uid"
- />
- </el-select>
- </div>
- <table class="table">
- <tr>
- <th class="w-25">物资名称</th>
- <th class="w-15">标准值</th>
- <th class="w-15">级别</th>
- <th class="w-30">关联人员与个数</th>
- <th class="w-15">实际使用</th>
- </tr>
- <tr v-for="(item,index) in materialDetail">
- <td class="w-25">{{item.materialName}}</td>
-<!-- <td class="w-1">-->
-<!-- <el-select v-model="addList[index].depId" @change="changeDep($event,index)">-->
-<!-- <el-option-->
-<!-- v-for="i in item.msList"-->
-<!-- :key="i.depId"-->
-<!-- :label="i.depName"-->
-<!-- :value="i.depId"-->
-<!-- />-->
-<!-- </el-select>-->
-<!-- </td>-->
-<!-- <td class="w-15">-->
-<!-- {{stockCount[index]}}-->
-<!-- </td>-->
- <td class="w-15">{{item.standVal}}</td>
- <td class="w-15">{{item.configurationLevelName}}</td>
- <td class="w-30">
- {{item.receiveUnames}}
- </td>
-<!-- <td class="w-15">-->
-<!-- <el-input type="number" v-model.number="addList[index].useCount"/>-->
-<!-- </td>-->
- <td class="w-15">
- {{item.receiveCount}}
- </td>
- </tr>
- </table>
- <template #footer>
- <span class="dialog-footer">
- <el-button @click="closeChoose()" size="default">取消</el-button>
- <el-button type="primary" @click="submitMaterials" size="default">确认</el-button>
- </span>
- </template>
- </el-dialog>
- </el-dialog>
-</template>
-
-<script lang="ts">
-import {workApplyApi} from "/@/api/specialWorkSystem/workApply";
-
-interface stateType {
- equipmentDialog:boolean
- materialList: Array<any>
- equipDetailDialog: boolean
- materialDetail: Array<any>
- stockCount: Array<number>
- chosenId: number | null,
- receiveUids: Array<number>
-}
-
-
-import { reactive, toRefs, ref } from 'vue';
-import { approveBasicApi } from '/@/api/specialWorkSystem/approveBasic';
-import {ElMessage, ElMessageBox} from 'element-plus';
-import {useUserInfo} from "/@/stores/userInfo";
-import {storeToRefs} from "pinia";
-
-export default {
- name: 'materialDialog',
- setup(props: any, context: any) {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- const approveBasicFormRef = ref();
- const state = reactive<stateType>({
- chosenId: null,
- equipmentDialog: false,
- materialList: [],
- equipDetailDialog: false,
- materialDetail: [],
- stockCount: [],
- receiveUids: []
- });
-
- // 确认物资标准
- const getMaList = async(type:number,level:number) =>{
- const data = {workType: type,workLevel: level}
- const res = await workApplyApi().getMaterial(data)
- if (res.data.code === '200') {
- if(res.data.data && res.data.data.length>0){
- state.materialList = JSON.parse(JSON.stringify(res.data.data))
- state.equipmentDialog = true
- }else{
- ElMessage({
- type: 'warning',
- message: '暂时查询不到物资标准信息'
- });
- }
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- }
- const openList = async(item:object)=>{
- state.chosenId = item.id
- const data = {maBaseId: state.chosenId,receiveUids:state.receiveUids}
- const res = await workApplyApi().getMaterialDetail(data)
- if (res.data.code === '200') {
- if(res.data.data && res.data.data.length>0){
- state.materialDetail = res.data.data
- state.equipDetailDialog = true
- }else{
- ElMessage({
- type: 'warning',
- message: '暂时查询不到物资标准信息'
- });
- }
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- // state.stockCount = []
- // if(item.mcList && item.mcList.length>0){
- // for(let j in item.mcList){
- // if(item.mcList[j].msList == null || item.mcList[j].msList.length==0){
- // item.mcList.splice(j,1)
- // }
- // }
- // state.materialDetail = item.mcList
- // for(let i in state.materialDetail){
- // state.addList.push(
- // {
- // materialId: state.materialDetail[i].materialId,
- // depId: null,
- // depName: '',
- // useCount: null
- // }
- // )
- // for(let x in state.materialDetail[i].msList){
- // if(state.materialDetail[i].msList[x].depId == userInfos.value.depId){
- // state.addList[i].depId = userInfos.value.depId
- // state.addList[i].depName = state.materialDetail[i].msList[x].depName
- // state.stockCount[i] = state.materialDetail[i].msList.find((e) => e.depId == state.addList[i].depId).stockCount
- // }
- // }
- // }
- // }
- }
- const changeReceiver = async ()=>{
- const data = {maBaseId: state.chosenId,receiveUids:state.receiveUids}
- const res = await workApplyApi().getMaterialDetail(data)
- if (res.data.code === '200') {
- if(res.data.data && res.data.data.length>0){
- state.materialDetail = res.data.data
- }else{
- ElMessage({
- type: 'warning',
- message: '暂时查询不到物资标准信息'
- });
- }
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- }
- const openDetail = ()=>{
- }
- const submitMaterials = ()=>{
- // if(state.addList.length > 0 && (state.addList.some((e) => e.depId == null && e.useCount != null ) || state.addList.some((e) => e.useCount == null && e.depId != null))){
- // ElMessage({
- // type: 'warning',
- // message: '出库部门或实际使用值不可为空'
- // });
- // return
- // }
- // for(let i in state.materialDetail){
- // if(state.materialDetail[i].configurationLevelName == '必选' && state.addList[i].depId != null && state.addList[i].useCount <= 0){
- // ElMessage({
- // type: 'warning',
- // message: '必选物资数量不能小于等于0'
- // });
- // return
- // }
- // if((state.stockCount[i] !=null && state.addList[i].useCount !=null) && (state.stockCount[i] < state.addList[i].useCount)){
- // ElMessage({
- // type: 'warning',
- // message: '物资配置数量超出库存量,请重新配置'
- // });
- // return
- // }
- // }
- // if(state.addList.length > 0){
- // for(let n in state.addList){
- // if(state.addList[n].depId == null && state.addList[n].useCount == null){
- // state.addList.splice(n,1)
- // }
- // }
- // }
- console.log(state.receiveUids,state.chosenId,'666666666')
- context.emit('conFirmMaterials',state.receiveUids,state.chosenId)
- state.equipDetailDialog = false
- state.equipmentDialog = false
- }
-
- const closeMaterial = ()=>{
-
- }
- const closeChoose = () =>{
- state.equipDetailDialog = false
- }
- return {
- ...toRefs(state),
- getMaList,
- openList,
- changeReceiver,
- openDetail,
- closeChoose,
- closeMaterial,
- submitMaterials
- };
- }
-};
-</script>
-
-<style lang="scss" scoped>
- .standard{
- width: 100%;
- display: flex;
- margin-bottom: 20px;
- align-items: center;
- justify-content: space-between;
- }
-
- .table{
- width: 100%;
- border-collapse: collapse;
- margin-top: 20px;
- tr{
- width: 100%;
- border: 1px solid #ccc;
- th,td{
- padding: 6px 0;
- border-left: 1px solid #ccc;
- &:first-of-type{
- border-left: none;
- }
- }
- td{
- font-weight: bolder;
- }
-
- .w-15{
- width: 15%;
- text-align: center;
- }
- .w-20{
- width: 20%;
- text-align: center;
- }
- .w-25{
- width: 25%;
- text-align: center;
- }
- .w-30{
- width: 30%;
- text-align: center;
- }
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/plate.vue b/src/views/specialWorkSystem/workTicket/zysq/components/plate.vue
deleted file mode 100644
index 5b57061..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/plate.vue
+++ /dev/null
@@ -1,635 +0,0 @@
-<template>
- <div class="home-container">
- <div style="height: 100%">
- <el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
- <div class="homeCard">
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业人" prop="operatorUids">
- <el-select v-model="form.operatorUids" multiple>
- <el-option
- v-for="item in workerList"
- :key="item.uid"
- :label="item.username"
- :value="item.uid"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业时间" prop="workTimeLine">
- <el-date-picker
- v-model="form.workTimeLine"
- format="YYYY-MM-DD HH:mm"
- value-format="YYYY-MM-DD HH:mm:00"
- type="datetimerange"
- range-separator="至"
- start-placeholder="开始时间"
- end-placeholder="结束时间"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业等级" prop="workLevel">
- <el-select v-model="form.workLevel">
- <el-option
- v-for="item in workLevelList"
- :key="item.value"
- :label="item.label"
- :value="item.value"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业内容" prop="workContent">
- <el-input
- v-model="form.workContent"
- autosize
- type="textarea"
- placeholder="请输入作业内容"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业地址" prop="workLocation">
- <el-input
- v-model="form.workLocation"
- autosize
- type="textarea"
- placeholder="请输入作业地址"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="危害辨识" prop="hazardIdentification">
- <el-input
- v-model="form.hazardIdentification"
- placeholder="请输入危害辨识"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="关联视频设备" prop="cameraIds">
- <el-select v-model="form.cameraIds" multiple>
- <el-option
- v-for="item in deviceList"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-divider border-style="dashed"/>
- <el-row>
- <el-col :span="12">
- <el-form-item label="盲板编号" prop="workDetail.bpCode">
- <el-input
- v-model="form.workDetail.bpCode"
- autosize
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="主要介质" prop="workDetail.mainMedia">
- <el-input
- v-model="form.workDetail.mainMedia"
- autosize
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="温度" prop="workDetail.temperature">
- <el-input
- v-model="form.workDetail.temperature"
- type="number"
- placeholder="请输入温度(大于等于0)"
- >
- <template #append>摄氏度(℃)</template>
- </el-input>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="压力" prop="workDetail.pressure">
- <el-input
- v-model="form.workDetail.pressure"
- type="number"
- placeholder="请输入压力(大于等于0)"
- >
- <template #append>千帕(kPa)</template>
- </el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="盲板材质" prop="workDetail.bpMaterialQuality">
- <el-input
- v-model="form.workDetail.bpMaterialQuality"
- autosize
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="盲板规格" prop="workDetail.bpSpecification">
- <el-input
- v-model="form.workDetail.bpSpecification"
- autosize
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="盲板时间" prop="workDetail.installLine">
- <el-date-picker
- v-model="form.workDetail.installLine"
- format="YYYY-MM-DD HH:mm"
- value-format="YYYY-MM-DD HH:mm:00"
- type="datetimerange"
- range-separator="--"
- start-placeholder="装盲板时间"
- end-placeholder="拆盲板时间"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="盲板位置" prop="workDetail.bpLocation">
- <el-input
- v-model="form.workDetail.bpLocation"
- autosize
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="关联作业" prop="workDetail.otherSpecialWork">
- <el-select v-model="form.workDetail.otherSpecialWork" multiple>
- <el-option
- v-for="item in otherWorkList"
- :key="item.value"
- :label="item.label"
- :value="item.label"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="24">
- <el-form-item label="盲板位置图" prop="workDetail.bpLocationMapPath">
- <el-upload accept="image/*" :on-exceed="showTip" :on-preview="handlePictureCardPreview" :limit='imgLimit' v-model:file-list="fileList" :http-request="upload" :action="uploadUrl" list-type="picture-card" :before-remove="beforeRemove" :before-upload="getUploadUrl">
- <el-icon><Plus /></el-icon>
- <template #tip>
- <div class="el-upload__tip">上传jpg/png图片尺寸小于500KB,最多可上传3张</div>
- </template>
- </el-upload>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="选择关联物资">
- <el-button type="primary" @click="openMaList">选择物资标准</el-button>
- </el-form-item>
- </el-col>
- </el-row>
- </div>
- </el-form>
- <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
- <div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
- </div>
- </div>
- <el-dialog v-model="dialogVisible">
- <img w-full :src="dialogImageUrl" alt="Preview Image" />
- </el-dialog>
- </div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, defineAsyncComponent} from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage, ElMessageBox } from 'element-plus'
- import type { FormInstance, FormRules, UploadProps, UploadUserFile } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
- import axios from 'axios';
-
- interface stateType {
- form: Object,
- csDepList: Array<any>,
- otherWorkList: Array<any>,
- workLevelList: Array<any>,
- fileList: Array<file>,
- uploadUrl: string,
- dialogVisible: Boolean,
- dialogImageUrl: string | null,
- imgLimit: number,
- isOverSize: boolean,
- equipmentDialog: boolean
- }
- interface file {
- url: string;
- }
- export default defineComponent({
- name: 'plateForm',
- components: {
- materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
- },
- props:['workerList','deviceList'],
- setup(props: any, context: any) {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- const state = reactive<stateType>({
- equipmentDialog: false,
- form: {
- operatorUids: [],
- workType: 8,
- workLevel: null,
- workContent: '',
- workLocation: '',
- maBaseId: null,
- hazardIdentification: '',
- cameraIds: [],
- workDetail:{
- bpCode: '',
- mainMedia: '',
- temperature: null,
- pressure: null,
- bpMaterialQuality: '',
- bpSpecification: '',
- bpLocation: '',
- bpLocationMapPath: [],
- installLine: [],
- installBpTime: '',
- uninstallBpTime: '',
- otherSpecialWork: []
- },
- receiveUids: [],
- workTimeLine: [],
- expStartTime: '',
- expEndTime: ''
- },
- isOverSize: false,
- fileList: [],
- imgLimit: 3,
- uploadUrl: '',
- dialogVisible: false,
- dialogImageUrl: null,
- workLevelList: [
- {
- label: "抽盲板作业",
- value: 11
- },
- {
- label: "堵盲板作业",
- value: 12
- }
- ],
- csDepList: [
- {
- label: "单位一",
- value: 1
- },
- {
- label: "单位二",
- value: 2
- },
- {
- label: "单位三",
- value: 3
- },
- {
- label: "单位四",
- value: 4
- },
- {
- label: "单位五",
- value: 5
- },
- {
- label: "单位六",
- value: 6
- }
- ],
- otherWorkList: [
- {
- label: "动火作业",
- value: 1
- },
- {
- label: "受限空间作业",
- value: 2
- },
- {
- label: "吊装作业",
- value: 3
- },
- {
- label: "动土作业",
- value: 4
- },
- {
- label: "断路作业",
- value: 5
- },
- {
- label: "高处作业",
- value: 6
- },
- {
- label: "临时用电作业",
- value: 7
- },
- {
- label: "盲板抽堵作业",
- value: 8
- }
- ]
- });
- const material = ref()
- const ruleFormRef = ref<FormInstance>()
- const applyRules = reactive<FormRules>({
- operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.bpCode": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.mainMedia": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.temperature": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.pressure": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.bpMaterialQuality": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.bpSpecification": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.installLine": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.bpLocation": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.bpLocationMapPath": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
- });
-
- // const toZero = (value: string | number,index: number,name: string,x:number) =>{
- // if(!value){
- // state.materialList[index][name][x].value = 0
- // }
- // }
- const openMaList = ()=>{
- if(state.form.workLevel == null || state.form.operatorUids == []){
- ElMessage({
- type: 'warning',
- message: '请先选择作业人和作业等级再获取相应物资配置'
- });
- }else{
- if(material.value.receiveUids.length==0){
- material.value.receiveUids = state.form.operatorUids
- }
- material.value.getMaList(state.form.workType,state.form.workLevel)
- material.value.workerList = props.workerList
- }
- }
- const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
- state.form.maBaseId = null
- state.form.receiveUids = []
- state.form.receiveUids = receiveUids
- state.form.maBaseId = chosenId
- }
- const submitForm = async (formEl: FormInstance | undefined) => {
- if (!formEl) return
- await formEl.validate(async (valid, fields) => {
- if (valid) {
- state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
- state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
- state.form.workDetail.installBpTime = JSON.parse(JSON.stringify(state.form.workDetail.installLine))[0]
- state.form.workDetail.uninstallBpTime = JSON.parse(JSON.stringify(state.form.workDetail.installLine))[1]
- let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
- let { installLine, ...data2 } = JSON.parse(JSON.stringify(state.form.workDetail))
- data.workDetail = data2
- data.workDetail.otherSpecialWork = data.workDetail.otherSpecialWork.join(',')
- data.workDetail.bpLocationMapPath = data.workDetail.bpLocationMapPath.join(',')
- data.workDetail.temperature = Number(data.workDetail.temperature)
- data.workDetail.pressure = Number(data.workDetail.pressure)
- const res = await workApplyApi().postPlateApply(data)
- if (res.data.code === '200') {
- ElMessage({
- type: 'success',
- message: '提交成功!'
- });
- formEl.resetFields()
- state.form.workDetail.bpLocationMapPath = []
- state.fileList = []
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- material.value.maBaseId = null
- material.value.receiveUids = []
- } else {
- console.log('error submit!', fields)
- }
- })
- }
- const handlePreview: UploadProps['onPreview'] = (uploadFile) => {
- console.log(uploadFile);
- };
-
- const handlePictureCardPreview = (uploadFile: { url: string }) => {
- state.dialogImageUrl = uploadFile.url!;
- state.dialogVisible = true;
- };
-
- const getUploadUrl = async (rawFile: any) => {
- const fileSize = rawFile.size / 1024 < 500 ? '1' : '0'
- if(fileSize === '0'){
- ElMessage({
- type: 'warning',
- message: '文件大小不能超过500k。'
- });
- state.isOverSize = true
- return false
- }else{
- const res = await workApplyApi().getUploadUrl(rawFile.name);
- state.form.workDetail.bpLocationMapPath.push(res.data.data.fileName)
- state.uploadUrl = res.data.data.uploadUrl;
- console.log(res.data.data.fileName,'name')
- }
- };
-
- const upload = async (params: any) => {
- // const formData = new FormData();
- // formData.append('file', state.fileList[0].raw);
- let reader = new FileReader();
- reader.readAsArrayBuffer(params.file);
- reader.onload = async () => {
- axios
- .put(state.uploadUrl, reader.result, {
- header: { 'Content-Type': 'multipart/form-data' }
- })
- .then(() => {
- // if (state.fileList.length === 2) {
- // state.fileList.splice(0, 1);
- // }
- // console.log(state.form.workDetail.bpLocationMapPath,'bpLocationMapPath')
- });
- };
- };
-
- const beforeRemove = (file: {}, fileList: []) => {
- const result = new Promise((resolve, reject) => {
- if(!state.isOverSize){
- ElMessageBox.confirm('此操作将删除该图片, 是否继续?', '提示', {
- confirmButtonText: '确定',
- cancelButtonText: '取消',
- type: 'warning'
- })
- .then(() => {
- // console.log(state.workDetail.bpLocationMapPath,'path')
- const list = JSON.parse(JSON.stringify(state.form.workDetail.bpLocationMapPath))
- fileList.map((item,index)=>{
- if(item.uid === file.uid){
- fileList.splice(index,1)
- state.form.workDetail.bpLocationMapPath.splice(index,1)
- deletePic(false,list[index])
- }
- })
- // 请求删除接口
- })
- .catch(() => {
- reject(false);
- });
- }else{
- const list = JSON.parse(JSON.stringify(state.form.workDetail.bpLocationMapPath))
- fileList.map((item,index)=>{
- if(item.uid === file.uid){
- fileList.splice(index,1)
- state.form.workDetail.bpLocationMapPath.splice(index,1)
- deletePic(true,list[index])
- }
- })
- state.isOverSize = false
- }
- });
- return result;
- };
-
-
- // 删除图片接口
- const deletePic = async(isOverSize:boolean,fileName:string)=>{
- console.log(fileName,'fileName')
- const res = await workApplyApi().deleteFile({fileName: fileName})
- if (res.data.code === '200') {
- ElMessage({
- type: isOverSize ? 'error' : 'success',
- message: isOverSize ? '上传失败':'删除成功!'
- });
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- }
- const showTip =()=>{
- ElMessage({
- type: 'warning',
- message: '超出文件上传数量'
- });
- }
-
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId',value)
- userInfos.value.projectId = value
- await initBackEndControlRoutes();
- };
- return {
- renderMenu,
- Search,
- ruleFormRef,
- applyRules,
- material,
- openMaList,
- conFirmMaterials,
- handlePreview,
- getUploadUrl,
- beforeRemove,
- upload,
- showTip,
- submitForm,
- handlePictureCardPreview,
- ...toRefs(state),
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .homeCard{
- width: 100%;
- padding: 20px;
- box-sizing: border-box;
- background: #fff;
- border-radius: 4px;
- margin-bottom: 20px;
- }
- .applyBtn{
- width: 100%;
- background: #fff;
- padding-top: 15px;
- z-index: 5;
- box-shadow: 0 -3px 8px rgba(150,150,150,.1);
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/power.vue b/src/views/specialWorkSystem/workTicket/zysq/components/power.vue
deleted file mode 100644
index 5c2c575..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/power.vue
+++ /dev/null
@@ -1,308 +0,0 @@
-<template>
- <div class="home-container">
- <div style="height: 100%">
- <el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
- <div class="homeCard">
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业人" prop="operatorUids">
- <el-select v-model="form.operatorUids" multiple>
- <el-option
- v-for="item in workerList"
- :key="item.uid"
- :label="item.username"
- :value="item.uid"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业时间" prop="workTimeLine">
- <el-date-picker
- v-model="form.workTimeLine"
- format="YYYY-MM-DD HH:mm"
- value-format="YYYY-MM-DD HH:mm:00"
- type="datetimerange"
- range-separator="至"
- start-placeholder="开始时间"
- end-placeholder="结束时间"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业内容" prop="workContent">
- <el-input
- v-model="form.workContent"
- autosize
- type="textarea"
- placeholder="请输入作业内容"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业地址" prop="workLocation">
- <el-input
- v-model="form.workLocation"
- autosize
- type="textarea"
- placeholder="请输入作业地址"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="危害辨识" prop="hazardIdentification">
- <el-input
- v-model="form.hazardIdentification"
- placeholder="请输入危害辨识"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="关联视频设备" prop="cameraIds">
- <el-select v-model="form.cameraIds" multiple>
- <el-option
- v-for="item in deviceList"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-divider border-style="dashed"/>
- <el-row>
- <el-col :span="12">
- <el-form-item label="电源接入点" prop="workDetail.powerAccessPoint">
- <el-input
- v-model="form.workDetail.powerAccessPoint"
- autosize
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="工作电压" prop="workDetail.workingVoltage">
- <el-input
- v-model="form.workDetail.workingVoltage"
- type="number"
- placeholder="请输入工作电压(大于等于0)"
- >
- <template #append>伏特(v)</template>
- </el-input>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="用电设备及功率" prop="workDetail.equipmentAndPower">
- <el-input
- v-model="form.workDetail.equipmentAndPower"
- autosize
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="选择关联物资">
- <el-button type="primary" @click="openMaList">选择物资标准</el-button>
- </el-form-item>
- </el-col>
- </el-row>
- </div>
- </el-form>
- <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
- <div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
- </div>
- </div>
- </div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, defineAsyncComponent} from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage, ElMessageBox } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
- interface stateType {
- form: Object,
- equipmentDialog: boolean
- }
- export default defineComponent({
- name: 'powerForm',
- components: {
- materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
- },
- props:['workerList','deviceList'],
- setup(props: any, context: any) {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- const state = reactive<stateType>({
- equipmentDialog: false,
- form: {
- operatorUids: [],
- workType: 7,
- workLevel: 0,
- workContent: '',
- workLocation: '',
- maBaseId: null,
- hazardIdentification: '',
- cameraIds: [],
- workDetail:{
- powerAccessPoint: '',
- workingVoltage: null,
- equipmentAndPower: ''
- },
- receiveUids: [],
- workTimeLine: [],
- expStartTime: '',
- expEndTime: ''
- }
- });
- const material = ref()
- const ruleFormRef = ref<FormInstance>()
- const applyRules = reactive<FormRules>({
- operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.powerAccessPoint": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.workingVoltage": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.equipmentAndPower": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
- });
-
- // const toZero = (value: string | number,index: number,name: string,x:number) =>{
- // if(!value){
- // state.materialList[index][name][x].value = 0
- // }
- // }
-
- const openMaList = ()=>{
- if(state.form.operatorUids == []){
- ElMessage({
- type: 'warning',
- message: '请先选择作业人再获取相应物资配置'
- });
- }else{
- if(material.value.receiveUids.length==0){
- material.value.receiveUids = state.form.operatorUids
- }
- material.value.getMaList(state.form.workType,state.form.workLevel)
- material.value.workerList = props.workerList
- }
- }
- const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
- state.form.maBaseId = null
- state.form.receiveUids = []
- state.form.receiveUids = receiveUids
- state.form.maBaseId = chosenId
- }
-
- const submitForm = async (formEl: FormInstance | undefined) => {
- if (!formEl) return
- await formEl.validate(async (valid, fields) => {
- if (valid) {
- state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
- state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
- let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
- // data.workDetail.weightMass = Number(data.workDetail.weightMass)
- const res = await workApplyApi().postPowerApply(data)
- if (res.data.code === '200') {
- ElMessage({
- type: 'success',
- message: '提交成功!'
- });
- formEl.resetFields()
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- material.value.maBaseId = null
- material.value.receiveUids = []
- } else {
- console.log('error submit!', fields)
- }
- })
- }
-
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId',value)
- userInfos.value.projectId = value
- await initBackEndControlRoutes();
- };
- return {
- renderMenu,
- Search,
- ruleFormRef,
- applyRules,
- material,
- openMaList,
- conFirmMaterials,
- submitForm,
- ...toRefs(state),
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .homeCard{
- width: 100%;
- padding: 20px;
- box-sizing: border-box;
- background: #fff;
- border-radius: 4px;
- margin-bottom: 20px;
- }
- .applyBtn{
- width: 100%;
- background: #fff;
- padding-top: 15px;
- z-index: 5;
- box-shadow: 0 -3px 8px rgba(150,150,150,.1);
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/components/space.vue b/src/views/specialWorkSystem/workTicket/zysq/components/space.vue
deleted file mode 100644
index ed158e2..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/components/space.vue
+++ /dev/null
@@ -1,393 +0,0 @@
-<template>
- <div class="home-container">
- <div style="height: 100%">
- <el-form :model="form" label-width="150px" :rules="applyRules" ref="ruleFormRef">
- <div class="homeCard">
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业人" prop="operatorUids">
- <el-select v-model="form.operatorUids" multiple>
- <el-option
- v-for="item in workerList"
- :key="item.uid"
- :label="item.username"
- :value="item.uid"
- />
- </el-select>
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业时间" prop="workTimeLine">
- <el-date-picker
- v-model="form.workTimeLine"
- format="YYYY-MM-DD HH:mm"
- value-format="YYYY-MM-DD HH:mm:00"
- type="datetimerange"
- range-separator="至"
- start-placeholder="开始时间"
- end-placeholder="结束时间"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="作业内容" prop="workContent">
- <el-input
- v-model="form.workContent"
- autosize
- type="textarea"
- placeholder="请输入作业内容"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="作业地址" prop="workLocation">
- <el-input
- v-model="form.workLocation"
- autosize
- type="textarea"
- placeholder="请输入作业地址"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="危害辨识" prop="hazardIdentification">
- <el-input
- v-model="form.hazardIdentification"
- placeholder="请输入危害辨识"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="关联视频设备" prop="cameraIds">
- <el-select v-model="form.cameraIds" multiple>
- <el-option
- v-for="item in deviceList"
- :key="item.id"
- :label="item.name"
- :value="item.id"
- />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-divider border-style="dashed" />
- <el-row>
- <el-col :span="12">
- <el-form-item label="受限空间所属单位" prop="workDetail.csDepId">
-<!-- <el-select v-model="form.workDetail.csDepId">-->
-<!-- <el-option-->
-<!-- v-for="item in csDepList"-->
-<!-- :key="item.value"-->
-<!-- :label="item.label"-->
-<!-- :value="item.value"-->
-<!-- />-->
-<!-- </el-select>-->
- <el-cascader v-model="form.workDetail.csDepId" :options="departList" :props="casProps" :show-all-levels="false" @change="handleChange" />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="受限空间名称" prop="workDetail.csName">
- <el-input
- v-model="form.workDetail.csName"
- autosize
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="空间内原有介质" prop="workDetail.csOriginalName">
- <el-input
- v-model="form.workDetail.csOriginalName"
- autosize
- type="textarea"
- placeholder="请输入"
- />
- </el-form-item>
- </el-col>
- <el-col :span="12">
- <el-form-item label="关联作业" prop="workDetail.otherSpecialWork">
- <el-select v-model="form.workDetail.otherSpecialWork" multiple>
- <el-option v-for="item in otherWorkList" :key="item.value" :label="item.label" :value="item.label" />
- </el-select>
- </el-form-item>
- </el-col>
- </el-row>
- <el-row>
- <el-col :span="12">
- <el-form-item label="选择关联物资">
- <el-button type="primary" @click="openMaList">选择物资标准</el-button>
- </el-form-item>
- </el-col>
- </el-row>
- </div>
- </el-form>
- <material-dialog ref="material" @conFirmMaterials="conFirmMaterials"></material-dialog>
- <div class="applyBtn">
- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button>
- </div>
- </div>
- </div>
-</template>
-
-<script lang="ts">
-import {toRefs, reactive, defineComponent, ref, defineAsyncComponent} from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage, ElMessageBox } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
-
- interface stateType {
- form: Object,
- csDepList: Array<any>,
- otherWorkList: Array<any>,
- casProps: {},
- equipmentDialog: boolean
- }
- export default defineComponent({
- name: 'spaceForm',
- components: {
- materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue')),
- },
- props:['workerList','departList','deviceList'],
- setup(props: any, context: any) {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- const state = reactive<stateType>({
- equipmentDialog: false,
- form: {
- operatorUids: [],
- workType: 2,
- workLevel: 0,
- workContent: '',
- workLocation: '',
- maBaseId: null,
- hazardIdentification: '',
- cameraIds: [],
- workDetail:{
- csDepId: null,
- csName: '',
- csOriginalName: '',
- otherSpecialWork: []
- },
- receiveUids: [],
- workTimeLine: [],
- expStartTime: '',
- expEndTime: ''
- },
- csDepList: [
- {
- label: "单位一",
- value: 1
- },
- {
- label: "单位二",
- value: 2
- },
- {
- label: "单位三",
- value: 3
- },
- {
- label: "单位四",
- value: 4
- },
- {
- label: "单位五",
- value: 5
- },
- {
- label: "单位六",
- value: 6
- }
- ],
- casProps: {
- emitPath: false,
- value: 'depId',
- label: 'depName',
- multiple: false,
- expandTrigger: 'hover',
- checkStrictly: true
- },
- otherWorkList: [
- {
- label: '动火作业',
- value: 1
- },
- {
- label: '受限空间作业',
- value: 2
- },
- {
- label: '吊装作业',
- value: 3
- },
- {
- label: '动土作业',
- value: 4
- },
- {
- label: '断路作业',
- value: 5
- },
- {
- label: '高处作业',
- value: 6
- },
- {
- label: '临时用电作业',
- value: 7
- },
- {
- label: '盲板抽堵作业',
- value: 8
- }
- ]
- });
- const material = ref()
- const ruleFormRef = ref<FormInstance>()
- const applyRules = reactive<FormRules>({
- operatorUids: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- hazardIdentification: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- cameraIds: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.csDepId": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.csName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],
- "workDetail.csOriginalName": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]
- });
-
- // const toZero = (value: string | number,index: number,name: string,x:number) =>{
- // if(!value){
- // state.materialList[index][name][x].value = 0
- // }
- // }
-
- const openMaList = ()=>{
- if(state.form.operatorUids == []){
- ElMessage({
- type: 'warning',
- message: '请先选择作业人再获取相应物资配置'
- });
- }else{
- if(material.value.receiveUids.length==0){
- material.value.receiveUids = state.form.operatorUids
- }
- material.value.getMaList(state.form.workType,state.form.workLevel)
- material.value.workerList = props.workerList
- }
- }
- const conFirmMaterials = (receiveUids: Array<number>,chosenId: number) =>{
- state.form.maBaseId = null
- state.form.receiveUids = []
- state.form.receiveUids = receiveUids
- state.form.maBaseId = chosenId
- }
-
- const submitForm = async (formEl: FormInstance | undefined) => {
- if (!formEl) return
- await formEl.validate(async (valid, fields) => {
- if (valid) {
- state.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]
- state.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]
- let { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))
- data.workDetail.otherSpecialWork = data.workDetail.otherSpecialWork.join(',')
- console.log(data,'data')
- const res = await workApplyApi().postSpaceApply(data)
- if (res.data.code === '200') {
- ElMessage({
- type: 'success',
- message: '提交成功!'
- });
- formEl.resetFields()
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- material.value.maBaseId = null
- material.value.receiveUids = []
- } else {
- console.log('error submit!', fields)
- }
- })
- }
-
-
- // 折线图
- const renderMenu = async (value: string) => {
- Session.set('projectId',value)
- userInfos.value.projectId = value
- await initBackEndControlRoutes();
- };
- return {
- renderMenu,
- Search,
- ruleFormRef,
- applyRules,
- material,
- openMaList,
- conFirmMaterials,
- submitForm,
- ...toRefs(state),
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .homeCard{
- width: 100%;
- padding: 20px;
- box-sizing: border-box;
- background: #fff;
- border-radius: 4px;
- margin-bottom: 20px;
- }
- .applyBtn{
- width: 100%;
- background: #fff;
- padding-top: 15px;
- z-index: 5;
- box-shadow: 0 -3px 8px rgba(150,150,150,.1);
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- :deep(.el-cascader){
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/specialWorkSystem/workTicket/zysq/index.vue b/src/views/specialWorkSystem/workTicket/zysq/index.vue
deleted file mode 100644
index 3584dfc..0000000
--- a/src/views/specialWorkSystem/workTicket/zysq/index.vue
+++ /dev/null
@@ -1,193 +0,0 @@
-<template>
- <div class="home-container">
- <el-tabs type="border-card" @tab-change="switchTab">
- <el-tab-pane label="动火作业">
- <fire-form ref="fire" :workerList = allWorkers :deviceList = allDevices></fire-form>
- </el-tab-pane>
- <el-tab-pane label="受限空间作业">
- <space-form ref="space" :workerList = allWorkers :departList = departmentList :deviceList = allDevices></space-form>
- </el-tab-pane>
- <el-tab-pane label="吊装作业">
- <hoist-form ref="hoist" :workerList = allWorkers :deviceList = allDevices></hoist-form>
- </el-tab-pane>
- <el-tab-pane label="动土作业">
- <ground-form ref="ground" :workerList = allWorkers :departList = departmentList :deviceList = allDevices></ground-form>
- </el-tab-pane>
- <el-tab-pane label="断路作业">
- <broken-form ref="broken" :workerList = allWorkers :departList = departmentList :deviceList = allDevices></broken-form>
- </el-tab-pane>
- <el-tab-pane label="高处作业">
- <height-form ref="height" :workerList = allWorkers :departList = departmentList :deviceList = allDevices></height-form>
- </el-tab-pane>
- <el-tab-pane label="临时用电作业">
- <power-form ref="power" :workerList = allWorkers :deviceList = allDevices></power-form>
- </el-tab-pane>
- <el-tab-pane label="盲板抽堵作业">
- <plate-form ref="plate" :workerList = allWorkers :deviceList = allDevices></plate-form>
- </el-tab-pane>
- </el-tabs>
- <material-dialog ref="material"></material-dialog>
- </div>
-</template>
-
-<script lang="ts">
- import {toRefs, reactive, defineComponent, ref, defineAsyncComponent, onMounted} from 'vue';
- import { storeToRefs } from 'pinia';
- import { initBackEndControlRoutes } from '/@/router/backEnd';
- import {useUserInfo} from "/@/stores/userInfo";
- import { Session } from '/@/utils/storage';
- import { Search } from '@element-plus/icons-vue'
- import { ElMessage } from 'element-plus'
- import type { FormInstance, FormRules } from 'element-plus'
- import { workApplyApi } from '/@/api/specialWorkSystem/workApply';
- import {teamManageApi} from "/@/api/systemManage/basicDateManage/personShiftManage/teamManage";
-
- interface stateType {
- allWorkers: Array<any>
- departmentList: Array<any>
- allDevices: Array<any>
- }
- export default defineComponent({
- name: 'apply',
- components: {
- fireForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/fire.vue')),
- spaceForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/space.vue')),
- hoistForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/hoist.vue')),
- groundForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/ground.vue')),
- brokenForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/broken.vue')),
- heightForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/height.vue')),
- powerForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/power.vue')),
- plateForm: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/plate.vue')),
- materialDialog: defineAsyncComponent(() => import('/@/views/specialWorkSystem/workTicket/zysq/components/materialDialog.vue'))
- },
- setup() {
- const userInfo = useUserInfo()
- const { userInfos } = storeToRefs(userInfo);
- const state = reactive<stateType>({
- allWorkers: [],
- departmentList: [],
- allDevices: []
- });
- const fire = ref()
- const space = ref()
- const hoist = ref()
- const ground = ref()
- const broken = ref()
- const height = ref()
- const power = ref()
- const plate = ref()
- const material = ref()
- // 获取用户列表
- const getAll = async ()=>{
- const res = await workApplyApi().getAllUsers()
- if (res.data.code === '200') {
- state.allWorkers = JSON.parse(JSON.stringify(res.data.data))
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
-
- // 获取部门列表
- const getAllDepartment = async () => {
- let res = await teamManageApi().getAllDepartment();
- if (res.data.code === '200') {
- state.departmentList = JSON.parse(JSON.stringify(res.data.data))
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
-
- // 获取设备列表
- const getAllDevice = async ()=>{
- const res = await workApplyApi().getAllDevices()
- if (res.data.code === '200') {
- state.allDevices = JSON.parse(JSON.stringify(res.data.data))
- } else {
- ElMessage({
- type: 'warning',
- message: res.data.msg
- });
- }
- };
-
- const switchTab = (name)=>{
- console.log(name,'name')
- fire.value.form.resetFields()
- material.value.maBaseId = null
- material.value.receiveUids = []
- }
-
-
- // 页面载入时执行方法
- onMounted(() => {
- getAll();
- getAllDepartment();
- getAllDevice()
- });
-
- return {
- ...toRefs(state),
- fire,
- space,
- broken,
- ground,
- height,
- hoist,
- plate,
- power,
- material,
- switchTab
- };
- },
- });
-</script>
-
-<style scoped lang="scss">
- .home-container {
- height: 100%;
- overflow: hidden;
- position: relative;
- .homeCard{
- width: 100%;
- padding: 20px;
- box-sizing: border-box;
- background: #fff;
- border-radius: 4px;
- margin-bottom: 20px;
- }
- .applyBtn{
- width: 100%;
- background: #fff;
- height: 80px;
- z-index: 5;
- box-shadow: 0 -3px 8px rgba(150,150,150,.1);
- display: flex;
- align-items: center;
- justify-content: center;
- }
- .el-row{
- margin-bottom: 20px;
- }
- .el-row:last-child {
- margin-bottom: 0;
- }
- .el-input{
- width: 100% !important;
- }
- .el-date-editor::v-deep{
- width: 100%;
- }
- .el-select{
- width: 100%;
- }
- .el-cascader{
- width: 100% !important;
- }
- }
-</style>
diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue
index c4a0e9b..1beb8fb 100644
--- a/src/views/system/menu/index.vue
+++ b/src/views/system/menu/index.vue
@@ -97,6 +97,7 @@
{ id: '4', name: '智能安全巡检系统', key: 3 },
{ id: '5', name: '智能安全风险综合预警预报平台', key: 4 },
{ id: '6', name: '应急管理系统', key: 5 },
+ { id: '12', name: '监管数据融合互通系统', key: 11 },
{ id: '7', name: '安全目标责任管理系统', key: 6 },
{ id: '8', name: '安全事故管理系统', key: 7 },
{ id: '9', name: '设备综合管控系统', key: 8 },
diff --git a/src/views/system/personShiftManage/scheduleManage/schedule/index.vue b/src/views/system/personShiftManage/scheduleManage/schedule/index.vue
index 1c49a53..5a1dec0 100644
--- a/src/views/system/personShiftManage/scheduleManage/schedule/index.vue
+++ b/src/views/system/personShiftManage/scheduleManage/schedule/index.vue
@@ -160,7 +160,6 @@
departmentList: [],
workerList: [],
casProps: {
- expandTrigger: 'hover',
emitPath: false,
value: 'depId',
label: 'depName'
diff --git a/src/views/system/role/component/roleDialog.vue b/src/views/system/role/component/roleDialog.vue
index 9bdaac2..253814a 100644
--- a/src/views/system/role/component/roleDialog.vue
+++ b/src/views/system/role/component/roleDialog.vue
@@ -46,9 +46,11 @@
buttonName: string;
isShowRoleDialog: boolean;
roleForm: {
+ defaultFlag: number | null
roleName: string;
roleCode: string;
roleInfo: string;
+ specialWorkFlag: number | null
};
menuData: Array<MenuDataTree>;
menuProps: {
@@ -65,9 +67,11 @@
title: '',
buttonName: '',
roleForm: {
+ defaultFlag: 0,
roleName: '', // 角色名称
roleCode: '', // 角色标识
- roleInfo: '' // 排序
+ roleInfo: '', // 排序
+ specialWorkFlag: 0
},
menuData: [],
menuProps: {
@@ -82,14 +86,22 @@
state.title = '新增角色';
state.buttonName = '新增';
state.roleForm = {
+ defaultFlag: 0,
roleName: '',
roleCode: '',
- roleInfo: ''
+ roleInfo: '',
+ specialWorkFlag: 0
};
} else {
state.title = '修改角色';
state.buttonName = '修改';
state.roleForm = JSON.parse(JSON.stringify(value));
+ if(!state.roleForm.defaultFlag){
+ state.roleForm.defaultFlag = 0
+ }
+ if(!state.roleForm.specialWorkFlag){
+ state.roleForm.specialWorkFlag = 0
+ }
}
};
// 新增
diff --git a/src/views/system/user/component/userDialog.vue b/src/views/system/user/component/userDialog.vue
index 3808e30..1570fce 100644
--- a/src/views/system/user/component/userDialog.vue
+++ b/src/views/system/user/component/userDialog.vue
@@ -93,7 +93,7 @@
import { reactive, toRefs, onMounted, defineComponent, ref } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
import { userApi } from '/@/api/systemManage/user';
-import {verifyPwd} from "/@/utils/toolsValidate";
+import {verifyPhone, verifyPwd} from "/@/utils/toolsValidate";
// 定义接口来定义对象的类型
interface DeptData {}
@@ -134,6 +134,16 @@
name: 'user',
setup(props, context) {
const userRef = ref()
+ const checkPhone = (rule: any, value: any, callback: any) => {
+ if (value == '') {
+ return callback(new Error('该内容不能为空'))
+ }
+ setTimeout(() => {
+ if (!verifyPhone(value)) {
+ callback(new Error('手机号格式不正确'))
+ }else callback();
+ }, 400)
+ }
let validatePwd = (rule: any, value: any, callback: any)=>{
if(value === ''){
callback(new Error('请输入密码'))
@@ -170,7 +180,7 @@
roleIds: [{ required: true, message: '请选择用户角色', trigger: 'change' }],
depId: [{ required: true, message: '请选择部门', trigger: 'change' }],
positionIds: [{ required: true, message: '请选择职务', trigger: 'change' }],
- phone: [{ required: true, message: '请填写手机号', trigger: 'blur' }],
+ phone: [{ required: true, validator: checkPhone, trigger: 'blur' }],
type: [{ required: true, message: '请填写用户类型', trigger: 'blur' }],
gender: [{ required: true, message: '请选择性别', trigger: 'change' }],
password: [{ required: true, validator: validatePwd, trigger: 'blur' }],
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index 9f0672f..5aca7e7 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -60,6 +60,7 @@
<template #default="scope">
<el-button :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onOpenUserDialog('查看', scope.row)">查看</el-button>
<el-button :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onOpenUserDialog('修改', scope.row)">修改</el-button>
+ <el-button size="small" text type="primary" @click="onPwdDialog(scope.row.uid)">修改密码</el-button>
<el-button size="small" text type="primary" @click="onCertificate(scope.row)">证书管理</el-button>
<el-button style="color: red" :disabled="scope.row.userName === 'admin'" size="small" text type="primary" @click="onRowDel(scope.row)">删除</el-button>
</template>
@@ -72,6 +73,26 @@
</el-card>
<userDialog ref="userRef" @getUserList="initUserTableData" />
<dialog-certificate ref="ctfRef" @getUserList="initUserTableData"></dialog-certificate>
+ <el-dialog title="修改密码" v-model="showPwdDialog" width="500px">
+ <el-form :model="pwdForm" size="default" ref="pwdRef" :rules="pwdFormRules" label-width="110px">
+ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20">
+ <el-form-item label="新密码" prop="newPassword">
+ <el-input v-model.trim="pwdForm.newPassword" placeholder="请输入" type="password" show-password>
+ </el-input>
+ </el-form-item>
+ <el-form-item label="确认新密码" prop="rePassword">
+ <el-input v-model.trim="pwdForm.rePassword" placeholder="请输入" type="password" show-password>
+ </el-input>
+ </el-form-item>
+ </el-col>
+ </el-form>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="showPwdDialog = !showPwdDialog" size="default">取 消</el-button>
+ <el-button type="primary" v-throttle @click="onPwdSubmit" size="default">确 定</el-button>
+ </span>
+ </template>
+ </el-dialog>
</div>
</template>
@@ -84,6 +105,10 @@
import { dutyApi } from '/@/api/systemManage/duty';
import { departmentApi } from '/@/api/systemManage/department';
import { useRoleApi } from '/@/api/systemManage/role';
+import {verifyPwd} from "/@/utils/toolsValidate";
+import {useLoginApi} from "/@/api/login";
+import {Session} from "/@/utils/storage";
+import Cookies from "js-cookie";
// 定义接口来定义对象的类型
interface TableDataRow {
@@ -121,6 +146,13 @@
dutyList: [];
userTypeList: Array<{id:number,name:string}>;
props:{}
+ showPwdDialog: boolean
+ pwdForm: {
+ uid: number|string| null
+ newPassword: string
+ rePassword: string
+ }
+ pwdFormRules: {}
}
export default defineComponent({
@@ -128,7 +160,28 @@
components: { userDialog,dialogCertificate },
setup() {
const userRef = ref();
+ const pwdRef = ref();
const ctfRef = ref()
+ let validatePwd = (rule: any, value: any, callback: any)=>{
+ if(value === ''){
+ callback(new Error('请输入密码'))
+ }else{
+ if(!verifyPwd(value)){
+ callback(new Error('密码须包含字母、数字、特殊字符,长度在6-16之间'))
+ }else{
+ callback()
+ }
+ }
+ }
+ const equalToPassword = (rule: any, value: any, callback: any) => {
+ if(value == ''){
+ callback(new Error("请再次确认密码"))
+ }else if (state.pwdForm.newPassword !== value) {
+ callback(new Error("两次输入的密码不一致"))
+ } else {
+ callback();
+ }
+ };
const state = reactive<TableDataState>({
userTableData: {
data: [],
@@ -157,7 +210,17 @@
{ id: 1, name: '超级管理员' },
{ id: 2, name: '管理员' },
{ id: 3, name: '普通员工' }
- ]
+ ],
+ showPwdDialog: false,
+ pwdForm: {
+ uid: null,
+ newPassword: '',
+ rePassword: ''
+ },
+ pwdFormRules: {
+ newPassword: [{ required: true, validator: validatePwd, trigger: 'blur' }],
+ rePassword: [{ required: true, validator: equalToPassword, trigger: "blur" }]
+ }
});
// 初始化表格数据
const initUserTableData = async () => {
@@ -218,6 +281,57 @@
userRef.value.openDialog(type, value, state.departmentList, state.roleList, state.dutyList);
};
+ const onPwdDialog = (uid: string)=>{
+ state.pwdForm = {
+ uid: uid,
+ newPassword: '',
+ rePassword: ''
+ }
+ state.showPwdDialog = true
+ }
+
+ const onPwdSubmit = async () => {
+ pwdRef.value.validate(async (valid:Boolean) => {
+ if(valid){
+ const {rePassword,...data} = state.pwdForm
+ let res = await userApi().pwdMod(data);
+ if (res.data.code === '200') {
+ state.showPwdDialog = false;
+ if(state.pwdForm.uid == Cookies.get('uid')){
+ ElMessage({
+ type: 'success',
+ message: '密码修改成功,请重新登录',
+ duration: 2000
+ })
+ setTimeout(()=>{
+ useLoginApi()
+ .signOut()
+ .then(() => {
+ Session.clear()
+ window.location.href = '/'
+ })
+ },2000)
+ }else{
+ ElMessage({
+ type: 'success',
+ message: '修改密码成功',
+ duration: 2000
+ })
+ }
+ } else {
+ ElMessage({
+ type: 'warning',
+ message: res.data.msg
+ });
+ }
+ }else{
+ ElMessage({
+ type:'warning',
+ message:'请完善信息'
+ })
+ }
+ })
+ }
const onCertificate = (value: any)=>{
ctfRef.value.openDialog(value);
}
@@ -267,6 +381,9 @@
return {
userRef,
ctfRef,
+ pwdRef,
+ onPwdDialog,
+ onPwdSubmit,
onOpenUserDialog,
onCertificate,
onRowDel,
--
Gitblit v1.9.2