From 61aa46c5c464eb3c2b6674173cd854e1c9afd7ae Mon Sep 17 00:00:00 2001 From: Your Name <123456> Date: 星期五, 19 八月 2022 17:08:15 +0800 Subject: [PATCH] bug --- src/views/specialWorkSystem/workApplyManage/myJobApply/index.vue | 1502 +++++++++--------- src/utils/request.ts | 32 src/views/safeKnowledge/bmgz/index.vue | 43 src/layout/routerView/link.vue | 84 .env.development | 4 /dev/null | 9 src/views/specialWorkSystem/workFlow/approveRule/index.vue | 46 src/views/system/menu/index.vue | 1 src/views/specialWorkSystem/workFlow/approveBasic/index.vue | 30 .idea/shelf/Uncommitted_changes_before_Update_at_2022_8_19_16_50_[Default_Changelist]/shelved.patch | 2459 +++++++++++++++++++++++++++++ .idea/shelf/Uncommitted_changes_before_Update_at_2022_8_19_16_50__Default_Changelist_.xml | 9 src/api/specialWorkSystem/approveRule/index.ts | 2 src/views/specialWorkSystem/workApplyManage/workTicket/index.vue | 576 +++--- src/views/loginPage/component/accountLogin.vue | 19 src/views/outLink/index.vue | 64 src/App.vue | 1 src/views/intellectInspect/inspectIndex/components/inspectRecordDialog.vue | 19 17 files changed, 3,701 insertions(+), 1,199 deletions(-) diff --git a/.env.development b/.env.development index 9bd6078..e88bf91 100644 --- a/.env.development +++ b/.env.development @@ -1,10 +1,10 @@ # 本地环境 ENV = 'development' -#VITE_API_URL = 'http://192.168.0.35:8008' +VITE_API_URL = 'http://192.168.0.35:8008' #李宇飞接口地址 -VITE_API_URL = 'http://192.168.0.50:8008' +#VITE_API_URL = 'http://192.168.0.50:8008' #张凤接口地址 #VITE_API_URL = 'http://192.168.0.29:8008' diff --git "a/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_\133Default_Changelist\135/companyLogo.png" "b/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_\133Default_Changelist\135/companyLogo.png" deleted file mode 100644 index 0f9f2d1..0000000 --- "a/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_\133Default_Changelist\135/companyLogo.png" +++ /dev/null Binary files differ diff --git "a/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_\133Default_Changelist\135/shelved.patch" "b/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_\133Default_Changelist\135/shelved.patch" deleted file mode 100644 index 7be0f81..0000000 --- "a/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_\133Default_Changelist\135/shelved.patch" +++ /dev/null @@ -1,233 +0,0 @@ -Index: src/layout/navBars/breadcrumb/user.vue -IDEA additional info: -Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP -<+><template>\r\n <div class=\"layout-navbars-breadcrumb-user pr15\" :style=\"{ flex: layoutUserFlexNum }\">\r\n <div class=\"logo\">\r\n <img src=\"../../../assets/menu/companyLogo.jpg\" />\r\n <span style=\"font-size: 16px; color: #333; font-weight: bolder\"> | {{ systemName }}</span>\r\n </div>\r\n <div style=\"display: flex;align-items:center;padding-right: 5px\">\r\n <div @click=\"backToMenu()\" class=\"backBtn\">返回首页</div>\r\n <el-dropdown :show-timeout=\"70\" :hide-timeout=\"50\" trigger=\"click\" @command=\"onComponentSizeChange\">\r\n <div class=\"layout-navbars-breadcrumb-user-icon\">\r\n <i class=\"iconfont icon-ziti\" :title=\"$t('message.user.title0')\"></i>\r\n </div>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item command=\"large\" :disabled=\"disabledSize === 'large'\">{{ $t('message.user.dropdownLarge') }}</el-dropdown-item>\r\n <el-dropdown-item command=\"default\" :disabled=\"disabledSize === 'default'\">{{ $t('message.user.dropdownDefault') }}</el-dropdown-item>\r\n <el-dropdown-item command=\"small\" :disabled=\"disabledSize === 'small'\">{{ $t('message.user.dropdownSmall') }}</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n<!-- <el-dropdown :show-timeout=\"70\" :hide-timeout=\"50\" trigger=\"click\" @command=\"onLanguageChange\">-->\r\n<!-- <div class=\"layout-navbars-breadcrumb-user-icon\">-->\r\n<!-- <i class=\"iconfont\" :class=\"disabledI18n === 'en' ? 'icon-fuhao-yingwen' : 'icon-fuhao-zhongwen'\" :title=\"$t('message.user.title1')\"></i>-->\r\n<!-- </div>-->\r\n<!-- <template #dropdown>-->\r\n<!-- <el-dropdown-menu>-->\r\n<!-- <el-dropdown-item command=\"zh-cn\" :disabled=\"disabledI18n === 'zh-cn'\">简体中文</el-dropdown-item>-->\r\n<!-- <el-dropdown-item command=\"en\" :disabled=\"disabledI18n === 'en'\">English</el-dropdown-item>-->\r\n<!-- <el-dropdown-item command=\"zh-tw\" :disabled=\"disabledI18n === 'zh-tw'\">繁體中文</el-dropdown-item>-->\r\n<!-- </el-dropdown-menu>-->\r\n<!-- </template>-->\r\n<!-- </el-dropdown>-->\r\n<!-- <div class=\"layout-navbars-breadcrumb-user-icon\" @click=\"onSearchClick\">-->\r\n<!-- <el-icon :title=\"$t('message.user.title2')\">-->\r\n<!-- <ele-Search />-->\r\n<!-- </el-icon>-->\r\n<!-- </div>-->\r\n <!-- <div class=\"layout-navbars-breadcrumb-user-icon\" @click=\"onLayoutSetingClick\">-->\r\n <!-- <i class=\"icon-skin iconfont\" :title=\"$t('message.user.title3')\"></i>-->\r\n <!-- </div>-->\r\n <!-- <div class=\"layout-navbars-breadcrumb-user-icon\">-->\r\n <!-- <el-popover placement=\"bottom\" trigger=\"click\" transition=\"el-zoom-in-top\" :width=\"300\" :persistent=\"false\">-->\r\n <!-- <template #reference>-->\r\n <!-- <el-badge :is-dot=\"true\">-->\r\n <!-- <el-icon :title=\"$t('message.user.title4')\">-->\r\n <!-- <ele-Bell />-->\r\n <!-- </el-icon>-->\r\n <!-- </el-badge>-->\r\n <!-- </template>-->\r\n <!-- <template #default>-->\r\n <!-- <UserNews />-->\r\n <!-- </template>-->\r\n <!-- </el-popover>-->\r\n <!-- </div>-->\r\n <div class=\"layout-navbars-breadcrumb-user-icon mr10\" @click=\"onScreenfullClick\">\r\n <i class=\"iconfont\" :title=\"isScreenfull ? $t('message.user.title6') : $t('message.user.title5')\" :class=\"!isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'\"></i>\r\n </div>\r\n <el-dropdown :show-timeout=\"70\" :hide-timeout=\"50\" @command=\"onHandleCommandClick\">\r\n <span class=\"layout-navbars-breadcrumb-user-link\">\r\n <img :src=\"userInfos.photo\" class=\"layout-navbars-breadcrumb-user-link-photo mr5\" />\r\n {{ userInfos.userName }}\r\n <el-icon class=\"el-icon--right\">\r\n <ele-ArrowDown />\r\n </el-icon>\r\n </span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item command=\"/homeMenu\">{{ $t('message.user.dropdown1') }}</el-dropdown-item>\r\n <!-- <el-dropdown-item command=\"wareHouse\">{{ $t('message.user.dropdown6') }}</el-dropdown-item>-->\r\n<!-- <el-dropdown-item command=\"/personal\">{{ $t('message.user.dropdown2') }}</el-dropdown-item>-->\r\n <!--\t\t\t\t\t<el-dropdown-item command=\"/404\">{{ $t('message.user.dropdown3') }}</el-dropdown-item>-->\r\n <!--\t\t\t\t\t<el-dropdown-item command=\"/401\">{{ $t('message.user.dropdown4') }}</el-dropdown-item>-->\r\n <el-dropdown-item divided command=\"logOut\">{{ $t('message.user.dropdown5') }}</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <Search ref=\"searchRef\" />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { ref, getCurrentInstance, computed, reactive, toRefs, onMounted, defineComponent } from 'vue';\r\nimport { useRouter } from 'vue-router';\r\nimport { ElMessageBox, ElMessage } from 'element-plus';\r\nimport screenfull from 'screenfull';\r\nimport { useI18n } from 'vue-i18n';\r\nimport { storeToRefs } from 'pinia';\r\nimport { useUserInfo } from '/@/stores/userInfo';\r\nimport { useThemeConfig } from '/@/stores/themeConfig';\r\nimport other from '/@/utils/other';\r\nimport { Session, Local } from '/@/utils/storage';\r\nimport UserNews from '/@/layout/navBars/breadcrumb/userNews.vue';\r\nimport Search from '/@/layout/navBars/breadcrumb/search.vue';\r\nimport { useLoginApi } from '/@/api/login';\r\nimport { useMenuApi } from '/@/api/systemManage/menu/index';\r\n\r\nconst menuApi = useMenuApi();\r\nimport { backEndComponent, getBackEndControlRoutes, initBackEndControlRoutes, setAddRoute, setFilterMenuAndCacheTagsViewRoutes } from '../../../router/backEnd';\r\nimport { NextLoading } from '/@/utils/loading';\r\nimport { useRequestOldRoutes } from '/@/stores/requestOldRoutes';\r\nimport { dynamicRoutes } from '/@/router/route';\r\n\r\nexport default defineComponent({\r\n name: 'layoutBreadcrumbUser',\r\n components: { UserNews, Search },\r\n setup() {\r\n const { t } = useI18n();\r\n const { proxy } = <any>getCurrentInstance();\r\n const router = useRouter();\r\n const stores = useUserInfo();\r\n const storesThemeConfig = useThemeConfig();\r\n const { userInfos } = storeToRefs(stores);\r\n const { themeConfig } = storeToRefs(storesThemeConfig);\r\n const searchRef = ref();\r\n const state = reactive({\r\n isScreenfull: false,\r\n disabledI18n: 'zh-cn',\r\n disabledSize: 'large',\r\n systemName: ''\r\n });\r\n // 设置分割样式\r\n const layoutUserFlexNum = computed(() => {\r\n let num: string | number = '';\r\n const { layout, isClassicSplitMenu } = themeConfig.value;\r\n const layoutArr: string[] = ['defaults', 'columns'];\r\n if (layoutArr.includes(layout) || (layout === 'classic' && !isClassicSplitMenu)) num = '1';\r\n else num = '';\r\n return num;\r\n });\r\n // 全屏点击时\r\n const onScreenfullClick = () => {\r\n if (!screenfull.isEnabled) {\r\n ElMessage.warning('暂不不支持全屏');\r\n return false;\r\n }\r\n screenfull.toggle();\r\n screenfull.on('change', () => {\r\n if (screenfull.isFullscreen) state.isScreenfull = true;\r\n else state.isScreenfull = false;\r\n });\r\n };\r\n // 布局配置 icon 点击时\r\n const onLayoutSetingClick = () => {\r\n proxy.mittBus.emit('openSetingsDrawer');\r\n };\r\n // 下拉菜单点击时\r\n const onHandleCommandClick = (path: string) => {\r\n if (path === 'logOut') {\r\n ElMessageBox({\r\n closeOnClickModal: false,\r\n closeOnPressEscape: false,\r\n title: t('message.user.logOutTitle'),\r\n message: t('message.user.logOutMessage'),\r\n showCancelButton: true,\r\n confirmButtonText: t('message.user.logOutConfirm'),\r\n cancelButtonText: t('message.user.logOutCancel'),\r\n buttonSize: 'default',\r\n beforeClose: (action, instance, done) => {\r\n if (action === 'confirm') {\r\n instance.confirmButtonLoading = true;\r\n instance.confirmButtonText = t('message.user.logOutExit');\r\n setTimeout(() => {\r\n done();\r\n setTimeout(() => {\r\n instance.confirmButtonLoading = false;\r\n }, 300);\r\n }, 700);\r\n } else {\r\n done();\r\n }\r\n }\r\n })\r\n .then(async () => {\r\n let res = await useLoginApi().signOut();\r\n if (res.data.code === '200') {\r\n Session.clear(); // 清除缓存/token等\r\n // 使用 reload 时,不需要调用 resetRoute() 重置路由\r\n window.location.reload();\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n })\r\n .catch(() => {});\r\n } else if (path === 'wareHouse') {\r\n window.open('https://gitee.com/lyt-top/vue-next-admin');\r\n } else {\r\n router.push(path);\r\n }\r\n };\r\n // 菜单搜索点击\r\n const onSearchClick = () => {\r\n searchRef.value.openSearch();\r\n };\r\n // 组件大小改变\r\n const onComponentSizeChange = (size: string) => {\r\n Local.remove('themeConfig');\r\n themeConfig.value.globalComponentSize = size;\r\n Local.set('themeConfig', themeConfig.value);\r\n initComponentSize();\r\n window.location.reload();\r\n };\r\n // 语言切换\r\n const onLanguageChange = (lang: string) => {\r\n Local.remove('themeConfig');\r\n themeConfig.value.globalI18n = lang;\r\n Local.set('themeConfig', themeConfig.value);\r\n proxy.$i18n.locale = lang;\r\n initI18n();\r\n other.useTitle();\r\n };\r\n // 设置 element plus 组件的国际化\r\n const setI18nConfig = (locale: string) => {\r\n proxy.mittBus.emit('getI18nConfig', proxy.$i18n.messages[locale]);\r\n };\r\n // 初始化言语国际化\r\n const initI18n = () => {\r\n switch (Local.get('themeConfig').globalI18n) {\r\n case 'zh-cn':\r\n state.disabledI18n = 'zh-cn';\r\n setI18nConfig('zh-cn');\r\n break;\r\n case 'en':\r\n state.disabledI18n = 'en';\r\n setI18nConfig('en');\r\n break;\r\n case 'zh-tw':\r\n state.disabledI18n = 'zh-tw';\r\n setI18nConfig('zh-tw');\r\n break;\r\n }\r\n };\r\n // 初始化全局组件大小\r\n const initComponentSize = () => {\r\n switch (Local.get('themeConfig').globalComponentSize) {\r\n case 'large':\r\n state.disabledSize = 'large';\r\n break;\r\n case 'default':\r\n state.disabledSize = 'default';\r\n break;\r\n case 'small':\r\n state.disabledSize = 'small';\r\n break;\r\n }\r\n };\r\n\r\n const getSysName = async()=>{\r\n if (window.nextLoading === undefined) NextLoading.start();\r\n if (!Session.get('token')) return false;\r\n const res = await menuApi.getMenuAdmin(Session.get('projectId') === null ? '' : Session.get('projectId'));\r\n if(res.data.code === '200'){\r\n state.systemName = res.data.data[1].project.projectName;\r\n console.log(state.systemName)\r\n }else{\r\n console.log('有问题')\r\n }\r\n }\r\n const backToMenu=()=>{\r\n router.push({ path: 'homeMenu' })\r\n }\r\n // 页面加载时\r\n onMounted(() => {\r\n if (Local.get('themeConfig')) {\r\n initI18n();\r\n initComponentSize();\r\n }\r\n getSysName()\r\n });\r\n return {\r\n userInfos,\r\n backToMenu,\r\n onLayoutSetingClick,\r\n onHandleCommandClick,\r\n onScreenfullClick,\r\n onSearchClick,\r\n onComponentSizeChange,\r\n onLanguageChange,\r\n searchRef,\r\n layoutUserFlexNum,\r\n ...toRefs(state)\r\n };\r\n }\r\n});\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.layout-navbars-breadcrumb-user {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n\r\n .logo{\r\n height: 50px;\r\n padding: 5px 10px;\r\n display: flex;\r\n align-items: center;\r\n overflow: hidden;\r\n box-sizing: border-box;\r\n img{\r\n height: 100%;\r\n }\r\n }\r\n &-link {\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n white-space: nowrap;\r\n &-photo {\r\n width: 25px;\r\n height: 25px;\r\n border-radius: 100%;\r\n }\r\n }\r\n &-icon {\r\n padding: 0 10px;\r\n cursor: pointer;\r\n color: var(--next-bg-topBarColor);\r\n height: 50px;\r\n line-height: 50px;\r\n display: flex;\r\n align-items: center;\r\n &:hover {\r\n background: var(--next-color-user-hover);\r\n i {\r\n display: inline-block;\r\n animation: logoAnimation 0.3s ease-in-out;\r\n }\r\n }\r\n }\r\n ::v-deep(.el-dropdown) {\r\n color: var(--next-bg-topBarColor);\r\n }\r\n ::v-deep(.el-badge) {\r\n height: 40px;\r\n line-height: 40px;\r\n display: flex;\r\n align-items: center;\r\n }\r\n ::v-deep(.el-badge__content.is-fixed) {\r\n top: 12px;\r\n }\r\n .backBtn{\r\n font-size: 16px;\r\n cursor: pointer;\r\n margin-right: 20px;\r\n\r\n &:hover{\r\n color: #409eff;\r\n font-weight: bolder;\r\n }\r\n }\r\n}\r\n</style>\r\n -Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP -<+>UTF-8 -=================================================================== -diff --git a/src/layout/navBars/breadcrumb/user.vue b/src/layout/navBars/breadcrumb/user.vue ---- a/src/layout/navBars/breadcrumb/user.vue (revision b37d9a1f4f39fb04f48a63d11d759c673e5f4d6a) -+++ b/src/layout/navBars/breadcrumb/user.vue (date 1660216734138) -@@ -1,80 +1,80 @@ - <template> - <div class="layout-navbars-breadcrumb-user pr15" :style="{ flex: layoutUserFlexNum }"> - <div class="logo"> -- <img src="../../../assets/menu/companyLogo.jpg" /> -+ <img src="../../../assets/menu/companyLogo.png" /> - <span style="font-size: 16px; color: #333; font-weight: bolder"> | {{ systemName }}</span> - </div> -- <div style="display: flex;align-items:center;padding-right: 5px"> -- <div @click="backToMenu()" class="backBtn">返回首页</div> -- <el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onComponentSizeChange"> -- <div class="layout-navbars-breadcrumb-user-icon"> -- <i class="iconfont icon-ziti" :title="$t('message.user.title0')"></i> -- </div> -- <template #dropdown> -- <el-dropdown-menu> -- <el-dropdown-item command="large" :disabled="disabledSize === 'large'">{{ $t('message.user.dropdownLarge') }}</el-dropdown-item> -- <el-dropdown-item command="default" :disabled="disabledSize === 'default'">{{ $t('message.user.dropdownDefault') }}</el-dropdown-item> -- <el-dropdown-item command="small" :disabled="disabledSize === 'small'">{{ $t('message.user.dropdownSmall') }}</el-dropdown-item> -- </el-dropdown-menu> -- </template> -- </el-dropdown> --<!-- <el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onLanguageChange">--> --<!-- <div class="layout-navbars-breadcrumb-user-icon">--> --<!-- <i class="iconfont" :class="disabledI18n === 'en' ? 'icon-fuhao-yingwen' : 'icon-fuhao-zhongwen'" :title="$t('message.user.title1')"></i>--> --<!-- </div>--> --<!-- <template #dropdown>--> --<!-- <el-dropdown-menu>--> --<!-- <el-dropdown-item command="zh-cn" :disabled="disabledI18n === 'zh-cn'">简体中文</el-dropdown-item>--> --<!-- <el-dropdown-item command="en" :disabled="disabledI18n === 'en'">English</el-dropdown-item>--> --<!-- <el-dropdown-item command="zh-tw" :disabled="disabledI18n === 'zh-tw'">繁體中文</el-dropdown-item>--> --<!-- </el-dropdown-menu>--> --<!-- </template>--> --<!-- </el-dropdown>--> --<!-- <div class="layout-navbars-breadcrumb-user-icon" @click="onSearchClick">--> --<!-- <el-icon :title="$t('message.user.title2')">--> --<!-- <ele-Search />--> --<!-- </el-icon>--> --<!-- </div>--> -- <!-- <div class="layout-navbars-breadcrumb-user-icon" @click="onLayoutSetingClick">--> -- <!-- <i class="icon-skin iconfont" :title="$t('message.user.title3')"></i>--> -- <!-- </div>--> -- <!-- <div class="layout-navbars-breadcrumb-user-icon">--> -- <!-- <el-popover placement="bottom" trigger="click" transition="el-zoom-in-top" :width="300" :persistent="false">--> -- <!-- <template #reference>--> -- <!-- <el-badge :is-dot="true">--> -- <!-- <el-icon :title="$t('message.user.title4')">--> -- <!-- <ele-Bell />--> -- <!-- </el-icon>--> -- <!-- </el-badge>--> -- <!-- </template>--> -- <!-- <template #default>--> -- <!-- <UserNews />--> -- <!-- </template>--> -- <!-- </el-popover>--> -- <!-- </div>--> -- <div class="layout-navbars-breadcrumb-user-icon mr10" @click="onScreenfullClick"> -- <i class="iconfont" :title="isScreenfull ? $t('message.user.title6') : $t('message.user.title5')" :class="!isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'"></i> -- </div> -- <el-dropdown :show-timeout="70" :hide-timeout="50" @command="onHandleCommandClick"> -- <span class="layout-navbars-breadcrumb-user-link"> -- <img :src="userInfos.photo" class="layout-navbars-breadcrumb-user-link-photo mr5" /> -- {{ userInfos.userName }} -- <el-icon class="el-icon--right"> -- <ele-ArrowDown /> -- </el-icon> -- </span> -- <template #dropdown> -- <el-dropdown-menu> -- <el-dropdown-item command="/homeMenu">{{ $t('message.user.dropdown1') }}</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>--> -- <!-- <el-dropdown-item command="/401">{{ $t('message.user.dropdown4') }}</el-dropdown-item>--> -- <el-dropdown-item divided command="logOut">{{ $t('message.user.dropdown5') }}</el-dropdown-item> -- </el-dropdown-menu> -- </template> -- </el-dropdown> -- <Search ref="searchRef" /> -+ <div style="display: flex; align-items: center; padding-right: 5px"> -+ <div @click="backToMenu()" class="backBtn">返回首页</div> -+ <el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onComponentSizeChange"> -+ <div class="layout-navbars-breadcrumb-user-icon"> -+ <i class="iconfont icon-ziti" :title="$t('message.user.title0')"></i> -+ </div> -+ <template #dropdown> -+ <el-dropdown-menu> -+ <el-dropdown-item command="large" :disabled="disabledSize === 'large'">{{ $t('message.user.dropdownLarge') }}</el-dropdown-item> -+ <el-dropdown-item command="default" :disabled="disabledSize === 'default'">{{ $t('message.user.dropdownDefault') }}</el-dropdown-item> -+ <el-dropdown-item command="small" :disabled="disabledSize === 'small'">{{ $t('message.user.dropdownSmall') }}</el-dropdown-item> -+ </el-dropdown-menu> -+ </template> -+ </el-dropdown> -+ <!-- <el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onLanguageChange">--> -+ <!-- <div class="layout-navbars-breadcrumb-user-icon">--> -+ <!-- <i class="iconfont" :class="disabledI18n === 'en' ? 'icon-fuhao-yingwen' : 'icon-fuhao-zhongwen'" :title="$t('message.user.title1')"></i>--> -+ <!-- </div>--> -+ <!-- <template #dropdown>--> -+ <!-- <el-dropdown-menu>--> -+ <!-- <el-dropdown-item command="zh-cn" :disabled="disabledI18n === 'zh-cn'">简体中文</el-dropdown-item>--> -+ <!-- <el-dropdown-item command="en" :disabled="disabledI18n === 'en'">English</el-dropdown-item>--> -+ <!-- <el-dropdown-item command="zh-tw" :disabled="disabledI18n === 'zh-tw'">繁體中文</el-dropdown-item>--> -+ <!-- </el-dropdown-menu>--> -+ <!-- </template>--> -+ <!-- </el-dropdown>--> -+ <!-- <div class="layout-navbars-breadcrumb-user-icon" @click="onSearchClick">--> -+ <!-- <el-icon :title="$t('message.user.title2')">--> -+ <!-- <ele-Search />--> -+ <!-- </el-icon>--> -+ <!-- </div>--> -+ <!-- <div class="layout-navbars-breadcrumb-user-icon" @click="onLayoutSetingClick">--> -+ <!-- <i class="icon-skin iconfont" :title="$t('message.user.title3')"></i>--> -+ <!-- </div>--> -+ <!-- <div class="layout-navbars-breadcrumb-user-icon">--> -+ <!-- <el-popover placement="bottom" trigger="click" transition="el-zoom-in-top" :width="300" :persistent="false">--> -+ <!-- <template #reference>--> -+ <!-- <el-badge :is-dot="true">--> -+ <!-- <el-icon :title="$t('message.user.title4')">--> -+ <!-- <ele-Bell />--> -+ <!-- </el-icon>--> -+ <!-- </el-badge>--> -+ <!-- </template>--> -+ <!-- <template #default>--> -+ <!-- <UserNews />--> -+ <!-- </template>--> -+ <!-- </el-popover>--> -+ <!-- </div>--> -+ <div class="layout-navbars-breadcrumb-user-icon mr10" @click="onScreenfullClick"> -+ <i class="iconfont" :title="isScreenfull ? $t('message.user.title6') : $t('message.user.title5')" :class="!isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'"></i> -+ </div> -+ <el-dropdown :show-timeout="70" :hide-timeout="50" @command="onHandleCommandClick"> -+ <span class="layout-navbars-breadcrumb-user-link"> -+ <img :src="userInfos.photo" class="layout-navbars-breadcrumb-user-link-photo mr5" /> -+ {{ userInfos.userName }} -+ <el-icon class="el-icon--right"> -+ <ele-ArrowDown /> -+ </el-icon> -+ </span> -+ <template #dropdown> -+ <el-dropdown-menu> -+ <el-dropdown-item command="/homeMenu">{{ $t('message.user.dropdown1') }}</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>--> -+ <!-- <el-dropdown-item command="/401">{{ $t('message.user.dropdown4') }}</el-dropdown-item>--> -+ <el-dropdown-item divided command="logOut">{{ $t('message.user.dropdown5') }}</el-dropdown-item> -+ </el-dropdown-menu> -+ </template> -+ </el-dropdown> -+ <Search ref="searchRef" /> - </div> - </div> - </template> -@@ -248,27 +248,27 @@ - } - }; - -- const getSysName = async()=>{ -+ const getSysName = async () => { - if (window.nextLoading === undefined) NextLoading.start(); - if (!Session.get('token')) return false; - const res = await menuApi.getMenuAdmin(Session.get('projectId') === null ? '' : Session.get('projectId')); -- if(res.data.code === '200'){ -+ if (res.data.code === '200') { - state.systemName = res.data.data[1].project.projectName; -- console.log(state.systemName) -- }else{ -- console.log('有问题') -+ console.log(state.systemName); -+ } else { -+ console.log('有问题'); - } -- } -- const backToMenu=()=>{ -- router.push({ path: 'homeMenu' }) -- } -+ }; -+ const backToMenu = () => { -+ router.push({ path: 'homeMenu' }); -+ }; - // 页面加载时 - onMounted(() => { - if (Local.get('themeConfig')) { - initI18n(); - initComponentSize(); - } -- getSysName() -+ getSysName(); - }); - return { - userInfos, -@@ -293,14 +293,14 @@ - align-items: center; - justify-content: space-between; - -- .logo{ -+ .logo { - height: 50px; - padding: 5px 10px; - display: flex; - align-items: center; - overflow: hidden; - box-sizing: border-box; -- img{ -+ img { - height: 100%; - } - } -@@ -343,12 +343,12 @@ - ::v-deep(.el-badge__content.is-fixed) { - top: 12px; - } -- .backBtn{ -+ .backBtn { - font-size: 16px; - cursor: pointer; - margin-right: 20px; - -- &:hover{ -+ &:hover { - color: #409eff; - font-weight: bolder; - } diff --git a/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22__Default_Changelist_.xml b/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22__Default_Changelist_.xml deleted file mode 100644 index 1478e29..0000000 --- a/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22__Default_Changelist_.xml +++ /dev/null @@ -1,9 +0,0 @@ -<changelist name="Uncommitted_changes_before_Update_at_2022_8_11_19_22_[Default_Changelist]" date="1660217002849" recycled="true" deleted="true"> - <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_[Default_Changelist]/shelved.patch" /> - <option name="DESCRIPTION" value="Uncommitted changes before Update at 2022/8/11 19:22 [Default Changelist]" /> - <binary> - <option name="BEFORE_PATH" /> - <option name="AFTER_PATH" value="src/assets/companyLogo.png" /> - <option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_[Default_Changelist]/companyLogo.png" /> - </binary> -</changelist> \ No newline at end of file diff --git "a/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_19_16_50_\133Default_Changelist\135/shelved.patch" "b/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_19_16_50_\133Default_Changelist\135/shelved.patch" new file mode 100644 index 0000000..223c0f0 --- /dev/null +++ "b/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_19_16_50_\133Default_Changelist\135/shelved.patch" @@ -0,0 +1,2459 @@ +Index: src/App.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+><template>\r\n <!-- <transition name=\"fade\" mode=\"out-in\">-->\r\n <!-- <keep-alive :exclude=\"excludeList\">-->\r\n <!-- <router-view v-if=\"!$route.meta.iskeepAlive\" :key=\"$route.id\"></router-view>-->\r\n <!-- </keep-alive>-->\r\n <!-- </transition>-->\r\n <!-- <router-view v-if=\"!$route.meta.iskeepAlive\" v-slot=\"{ Component }\">-->\r\n <!-- <transition name=\"fade\" mode=\"in-out\">-->\r\n <!-- <keep-alive :exclude=\"excludeList\" :include=\"includeList\">-->\r\n <!-- <component :is=\"Component\" :key=\"$route.id\"></component>-->\r\n <!-- </keep-alive>-->\r\n <!-- </transition>-->\r\n <!-- </router-view>-->\r\n <el-config-provider :size=\"getGlobalComponentSize\" :locale=\"i18nLocale\">\r\n <router-view v-show=\"themeConfig.lockScreenTime > 1\" />\r\n <router-view v-show=\"themeConfig.lockScreenTime > 1\" />\r\n <LockScreen v-if=\"themeConfig.isLockScreen\" />\r\n <Setings ref=\"setingsRef\" v-show=\"themeConfig.lockScreenTime > 1\" />\r\n <CloseFull v-if=\"!themeConfig.isLockScreen\" />\r\n </el-config-provider>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { computed, ref, getCurrentInstance, onBeforeMount, onMounted, onUnmounted, nextTick, defineComponent, watch, reactive, toRefs } from 'vue';\r\nimport { useRoute } from 'vue-router';\r\nimport { storeToRefs } from 'pinia';\r\nimport { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';\r\nimport { useThemeConfig } from '/@/stores/themeConfig';\r\nimport other from '/@/utils/other';\r\nimport { Local, Session } from '/@/utils/storage';\r\nimport setIntroduction from '/@/utils/setIconfont';\r\nimport LockScreen from '/@/layout/lockScreen/index.vue';\r\nimport Setings from '/@/layout/navBars/breadcrumb/setings.vue';\r\nimport CloseFull from '/@/layout/navBars/breadcrumb/closeFull.vue';\r\nimport { initBackEndControlRoutes } from './router/backEnd';\r\n\r\nexport default {\r\n name: 'app',\r\n components: { LockScreen, Setings, CloseFull },\r\n setup() {\r\n const { proxy } = <any>getCurrentInstance();\r\n const setingsRef = ref();\r\n const route = useRoute();\r\n const stores = useTagsViewRoutes();\r\n const storesThemeConfig = useThemeConfig();\r\n const { themeConfig } = storeToRefs(storesThemeConfig);\r\n const state = reactive({\r\n i18nLocale: null,\r\n excludeList: ['a-e'],\r\n includeList: []\r\n });\r\n\r\n // 获取全局组件大小\r\n const getGlobalComponentSize = computed(() => {\r\n return other.globalComponentSize();\r\n });\r\n // 布局配置弹窗打开\r\n const openSetingsDrawer = () => {\r\n setingsRef.value.openDrawer();\r\n };\r\n // 设置初始化,防止刷新时恢复默认\r\n onBeforeMount(() => {\r\n // 设置批量第三方 icon 图标\r\n setIntroduction.cssCdn();\r\n // 设置批量第三方 js\r\n setIntroduction.jsCdn();\r\n });\r\n // 页面加载时\r\n onMounted(() => {\r\n nextTick(() => {\r\n // 监听布局配置弹窗点击打开\r\n proxy.mittBus.on('openSetingsDrawer', () => {\r\n openSetingsDrawer();\r\n });\r\n // 设置 i18n,App.vue 中的 el-config-provider\r\n proxy.mittBus.on('getI18nConfig', (locale: string) => {\r\n (state.i18nLocale as string | null) = locale;\r\n });\r\n // 获取缓存中的布局配置;\r\n if (Local.get('themeConfig')) {\r\n storesThemeConfig.setThemeConfig(themeConfig.value);\r\n // storesThemeConfig.setThemeConfig(Local.get('themeConfig'));\r\n document.documentElement.style.cssText = Local.get('themeConfigStyle');\r\n }\r\n // 获取缓存中的全屏配置\r\n if (Session.get('isTagsViewCurrenFull')) {\r\n stores.setCurrenFullscreen(Session.get('isTagsViewCurrenFull'));\r\n }\r\n });\r\n // if(!Session.get('token')) return\r\n // initBackEndControlRoutes()\r\n });\r\n // 页面销毁时,关闭监听布局配置/i18n监听\r\n onUnmounted(() => {\r\n proxy.mittBus.off('openSetingsDrawer', () => {});\r\n proxy.mittBus.off('getI18nConfig', () => {});\r\n });\r\n // 监听路由的变化,设置网站标题\r\n watch(\r\n () => route.path,\r\n () => {\r\n other.useTitle();\r\n },\r\n {\r\n deep: true\r\n }\r\n );\r\n return {\r\n themeConfig,\r\n setingsRef,\r\n getGlobalComponentSize,\r\n ...toRefs(state)\r\n };\r\n }\r\n};\r\n</script>\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/App.vue b/src/App.vue +--- a/src/App.vue (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ b/src/App.vue (date 1660894513676) +@@ -13,7 +13,6 @@ + <!-- </router-view>--> + <el-config-provider :size="getGlobalComponentSize" :locale="i18nLocale"> + <router-view v-show="themeConfig.lockScreenTime > 1" /> +- <router-view v-show="themeConfig.lockScreenTime > 1" /> + <LockScreen v-if="themeConfig.isLockScreen" /> + <Setings ref="setingsRef" v-show="themeConfig.lockScreenTime > 1" /> + <CloseFull v-if="!themeConfig.isLockScreen" /> +Index: .env.development +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+># 本地环境\r\nENV = 'development'\r\n\r\n#VITE_API_URL = 'http://192.168.0.35:8008'\r\n#李宇飞接口地址\r\n\r\nVITE_API_URL = 'http://192.168.0.50:8008'\r\n#张凤接口地址\r\n\r\n#VITE_API_URL = 'http://192.168.0.29:8008'\r\n#黄振接口地址\r\n\r\n#VITE_API_URL = 'http://192.168.0.179:8008'\r\n#施正红接口地址\r\n\r\n#VITE_API_URL = 'http://192.168.0.69:8008'\r\n#戚会山接口地址\r\n\r\n#VITE_API_URL = 'http://121.239.169.27:16006/safeplatform'\r\n#线上正式环境接口地址\r\n\r\n#VITE_API_URL_OUT = 'http://121.239.169.27:16006/safeplatform-out'\r\n#线上正式环境外包接口地址\r\n\r\n#VITE_API_URL = 'http://192.168.0.52:8011/safeplatform'\r\n#本地预发接口地址\r\n\r\n#VITE_API_URL_OUT = 'http://192.168.0.52:8011/safeplatform-out'\r\n#本地外包预发接口地址\r\n\r\n#VITE_API_URL = 'http://192.168.0.52:7021/safeplatform'\r\n#本地测试接口地址\r\n\r\n#VITE_API_URL_SOCKET = 'http://192.168.0.52:7021/safeplatform'\r\n#本地测试websocket接口地址\r\n\r\n#VITE_API_URL = 'http://192.168.0.29:7008'\r\n#黄振接口test地址\r\n\r\n#VITE_API_URL_SOCKET = 'http://192.168.0.29:16107'\r\n#黄振websocket test接口地址\r\n\r\n#VITE_API_URL_SOCKET = 'http://192.168.0.29:8018'\r\n#黄振websocket接口地址\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/.env.development b/.env.development +--- a/.env.development (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ b/.env.development (date 1660876481738) +@@ -1,10 +1,10 @@ + # 本地环境 + ENV = 'development' + +-#VITE_API_URL = 'http://192.168.0.35:8008' ++VITE_API_URL = 'http://192.168.0.35:8008' + #李宇飞接口地址 + +-VITE_API_URL = 'http://192.168.0.50:8008' ++#VITE_API_URL = 'http://192.168.0.50:8008' + #张凤接口地址 + + #VITE_API_URL = 'http://192.168.0.29:8008' +Index: src/views/system/menu/index.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+><template>\r\n <div class=\"system-menu-container\">\r\n <el-card shadow=\"hover\">\r\n <div class=\"system-menu-search mb15\">\r\n <el-select size=\"default\" v-model=\"projectId\" placeholder=\"请选择项目名称\" style=\"max-width: 180px\" @change=\"getMenuList()\">\r\n <el-option v-for=\"item in projectList\" :key=\"item.key\" :value=\"item.id\" :label=\"item.name\"> </el-option>\r\n </el-select>\r\n <el-button size=\"default\" type=\"primary\" class=\"ml10\" @click=\"getMenuList\">\r\n <el-icon>\r\n <ele-Search />\r\n </el-icon>\r\n 查询\r\n </el-button>\r\n <el-button size=\"default\" type=\"success\" class=\"ml10\" @click=\"onOpenMenuDialog('新增')\">\r\n <el-icon>\r\n <ele-FolderAdd />\r\n </el-icon>\r\n 新增菜单\r\n </el-button>\r\n </div>\r\n <el-table :data=\"menuTableData\" style=\"width: 100%\" row-key=\"path\" :tree-props=\"{ children: 'children', hasChildren: 'hasChildren' }\">\r\n <el-table-column label=\"菜单名称\" show-overflow-tooltip>\r\n <template #default=\"scope\">\r\n <SvgIcon :name=\"scope.row.meta.icon\" />\r\n <span class=\"ml10\">{{ scope.row.meta.title }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"path\" label=\"路由路径\" show-overflow-tooltip></el-table-column>\r\n <el-table-column label=\"组件路径\" show-overflow-tooltip>\r\n <template #default=\"scope\">\r\n <span>{{ scope.row.component }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"权限标识\" show-overflow-tooltip>\r\n <template #default=\"scope\">\r\n <span>{{ parseRole(scope.row.meta.roles) }}</span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"排序\" show-overflow-tooltip width=\"80\">\r\n <template #default=\"scope\">\r\n {{ scope.$index }}\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"类型\" show-overflow-tooltip width=\"80\">\r\n <template #default=\"scope\">\r\n <el-tag type=\"success\" size=\"small\">{{ scope.row.xx }}菜单</el-tag>\r\n </template>\r\n </el-table-column>\r\n <el-table-column label=\"操作\" show-overflow-tooltip width=\"140\">\r\n <template #default=\"scope\">\r\n <el-button size=\"small\" text type=\"primary\" @click=\"onOpenMenuDialog('新增')\">新增</el-button>\r\n <el-button size=\"small\" text type=\"primary\" @click=\"onOpenMenuDialog('修改', scope.row)\">修改</el-button>\r\n <el-button size=\"small\" text type=\"primary\" @click=\"deleteMenu(scope.row)\">删除</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n </el-card>\r\n <menuDialog ref=\"menuDialog\" @getMenuList=\"getMenuList\" />\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { ref, toRefs, reactive, computed, onMounted, defineComponent } from 'vue';\r\nimport { RouteRecordRaw } from 'vue-router';\r\nimport { ElMessageBox, ElMessage } from 'element-plus';\r\nimport { storeToRefs } from 'pinia';\r\nimport { useRoutesList } from '/@/stores/routesList';\r\nimport menuDialog from '/@/views/system/menu/component/menuDialog.vue';\r\nimport { useMenuApi } from '/@/api/systemManage/menu';\r\nimport { Session } from '/@/utils/storage';\r\nimport pinia from '/@/stores';\r\nimport { dynamicRoutes } from '/@/router/route';\r\nimport { useUserInfo } from '/@/stores/userInfo';\r\nimport { initBackEndControlRoutes } from '/@/router/backEnd';\r\nimport { useRoleApi } from '/@/api/systemManage/role';\r\n\r\nexport default defineComponent({\r\n name: 'systemMenu',\r\n components: { menuDialog },\r\n filters: {\r\n parseRole: (roles: Array<string>) => {\r\n return ['1', '2'];\r\n }\r\n },\r\n setup() {\r\n const menuDialog = ref();\r\n const storesRoutesList = useRoutesList();\r\n const state = reactive({\r\n projectId: '1',\r\n menuData: [],\r\n roleList: [],\r\n menuTableData: [],\r\n projectList: [\r\n { id: '1', name: '安全基础信息系统', key: 0 },\r\n { id: '2', name: '双重预防系统', key: 1 },\r\n { id: '3', name: '特殊作业系统', key: 2 },\r\n { id: '4', name: '智能巡检系统', key: 3 },\r\n { id: '5', name: '安全风险综合预警预报平台', key: 4 },\r\n { id: '6', name: '应急管理系统', key: 5 },\r\n { id: '7', name: '目标责任管理系统', key: 6 },\r\n { id: '8', name: '事故管理系统', key: 7 },\r\n { id: '9', name: '设备综合管控系统', key: 8 },\r\n { id: '10', name: '安全知识图谱系统', key: 9 },\r\n { id: '11', name: '危险化学品全生命周期安全', key: 10 }\r\n ]\r\n });\r\n // // 获取 vuex 中的路由\r\n // const menuTableData = computed(() => {\r\n // \treturn routesList.value;\r\n // });\r\n // 打开新增菜单弹窗\r\n const onOpenMenuDialog = (type: string, value: any) => {\r\n menuDialog.value.openDialog(type, value, state.projectList, state.projectId, state.roleList);\r\n };\r\n\r\n // 删除当前行\r\n const deleteMenu = (row: any) => {\r\n ElMessageBox.confirm(`此操作将永久删除路由:${row.path}, 是否继续?`, '提示', {\r\n confirmButtonText: '删除',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n })\r\n .then(async () => {\r\n let res = await useMenuApi().deleteMenu({ id: row.id });\r\n if (res.data.code === '200') {\r\n ElMessage({\r\n type: 'success',\r\n duration: 2000,\r\n message: '删除成功'\r\n });\r\n await getMenuList();\r\n if (Session.get('projectId') == state.projectId) await initBackEndControlRoutes();\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n })\r\n .catch(() => {});\r\n };\r\n const getMenuList = async () => {\r\n let res = await useMenuApi().getMenuAdmin(state.projectId);\r\n if (res.data.code === '200') {\r\n state.menuTableData = res.data.data;\r\n if (Session.get('projectId') == state.projectId) await initBackEndControlRoutes();\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n };\r\n\r\n const getRoleList = async () => {\r\n let res = await useRoleApi().getRoleList();\r\n if (res.data.code === '200') {\r\n state.roleList = res.data.data;\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n };\r\n\r\n const getProjectList = async () => {\r\n let res = await useMenuApi().getProjectList();\r\n if (res.data.code === '200') {\r\n state.menuTableData = res.data.data;\r\n if (Session.get('projectId') == state.projectId) await initBackEndControlRoutes();\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n };\r\n\r\n const parseRole = (roles: Array<string>) => {\r\n let role = roles.map((item) => {\r\n for (let i in state.roleList) {\r\n if (state.roleList[i].roleCode === item) {\r\n return state.roleList[i].roleName;\r\n }\r\n }\r\n });\r\n return role;\r\n };\r\n\r\n onMounted(() => {\r\n getMenuList();\r\n getRoleList();\r\n });\r\n return {\r\n parseRole,\r\n getMenuList,\r\n menuDialog,\r\n onOpenMenuDialog,\r\n deleteMenu,\r\n ...toRefs(state)\r\n };\r\n }\r\n});\r\n</script>\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue +--- a/src/views/system/menu/index.vue (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ b/src/views/system/menu/index.vue (date 1660894424358) +@@ -191,6 +191,7 @@ + onMounted(() => { + getMenuList(); + getRoleList(); ++ console.log(1); + }); + return { + parseRole, +Index: src/views/specialWorkSystem/workFlow/approveBasic/index.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+><template>\r\n <div class=\"home-container\">\r\n <div style=\"height: 100%\">\r\n <el-row class=\"homeCard\">\r\n <div class=\"basic-line\">\r\n <span>标准类型:</span>\r\n <el-select v-model=\"tableData.params.searchParams.ruleStandType\" clearable filterable class=\"input-box\" placeholder=\"标准类型\">\r\n <el-option v-for=\"item in ruleStandTypeList\" :key=\"item.id\" :label=\"item.name\" :value=\"item.id\"></el-option>\r\n </el-select>\r\n </div>\r\n <div class=\"basic-line\">\r\n <span>标题:</span>\r\n <el-input v-model.trim=\"tableData.params.searchParams.title\" clearable filterable class=\"input-box\" placeholder=\"标题\"> </el-input>\r\n </div>\r\n <div style=\"padding-bottom: 10px\">\r\n <el-button type=\"primary\" @click=\"getInspectionTask\">查询</el-button>\r\n <el-button plain @click=\"reset\">重置</el-button>\r\n </div>\r\n </el-row>\r\n <div class=\"homeCard\">\r\n <div class=\"main-card\">\r\n <el-row class=\"cardTop\">\r\n <el-col :span=\"12\" class=\"mainCardBtn\">\r\n <el-button type=\"primary\" :icon=\"Plus\" size=\"default\" @click=\"openApproveBasicDialog('新增', {})\">新建</el-button>\r\n <!-- <el-button type=\"danger\" :icon=\"Delete\" size=\"default\" plain>删除</el-button>-->\r\n </el-col>\r\n <el-button type=\"primary\" :icon=\"Refresh\" size=\"default\" />\r\n </el-row>\r\n <el-table ref=\"multipleTableRef\" :data=\"tableData.approveBasicData\" style=\"width: 100%\" height=\"calc(100% - 100px)\" :header-cell-style=\"{ background: '#fafafa' }\" @selection-change=\"handleSelectionChange\">\r\n <el-table-column type=\"selection\" width=\"55\" />\r\n <el-table-column property=\"title\" label=\"标题\" />\r\n <el-table-column property=\"ruleStandType\" label=\"标准类型\">\r\n <template #default=\"scope\">\r\n <span>\r\n {{ parseNumber(scope.row.ruleStandType, '标准类型') }}\r\n </span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column property=\"minVal\" label=\"最低值\">\r\n <template #default=\"scope\">\r\n <span>\r\n {{ parseNumber(scope.row.minValMatchPattern, '最低值') }}\r\n </span>\r\n <span>\r\n {{ scope.row.minVal }}\r\n </span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column property=\"maxVal\" label=\"最高值\">\r\n <template #default=\"scope\">\r\n <span>\r\n {{ parseNumber(scope.row.maxValMatchPattern, '最高值') }}\r\n </span>\r\n <span>\r\n {{ scope.row.maxVal }}\r\n </span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column property=\"info\" label=\"描述\" />\r\n <el-table-column prop=\"createUname\" label=\"创建人\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"gmtCreate\" label=\"创建时间\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"modifiedUname\" label=\"最后修改人\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"gmtModified\" label=\"最后修改时间\" show-overflow-tooltip></el-table-column>\r\n <el-table-column property=\"status\" label=\"状态\" width=\"60\" />\r\n <el-table-column fixed=\"right\" label=\"操作\" align=\"center\" width=\"300\">\r\n <template #default=\"scope\">\r\n <el-button link type=\"primary\" size=\"small\" :icon=\"View\" @click=\"openApproveBasicDialog('查看', scope.row)\">查看</el-button>\r\n <el-button link type=\"primary\" size=\"small\" :icon=\"Edit\" @click=\"openApproveBasicDialog('修改', scope.row)\">修改</el-button>\r\n <el-button link type=\"danger\" size=\"small\" :icon=\"Delete\" @click=\"deleteApproveBasic(scope.row)\">删除</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <br />\r\n <el-pagination @size-change=\"onHandleSizeChange\" @current-change=\"onHandleCurrentChange\" :pager-count=\"5\" :page-sizes=\"[10, 20, 30]\" v-model:current-page=\"tableData.params.pageIndex\" background v-model:page-size=\"tableData.params.pageSize\" layout=\"total, sizes, prev, pager, next, jumper\" :total=\"tableData.total\" class=\"page-position\"> </el-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n <approve-basic-dialog ref=\"approveBasicDialogRef\" @refreshApproveBasic=\"getInspectionTask\"></approve-basic-dialog>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { toRefs, reactive, ref, onMounted } from 'vue';\r\nimport { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';\r\nimport { ElTable, ElMessage, ElMessageBox } from 'element-plus';\r\nimport { approveBasicApi } from '/@/api/specialWorkSystem/approveBasic';\r\nimport { departmentApi } from '/@/api/systemManage/department';\r\nimport approveBasicDialog from '/@/views/specialWorkSystem/workFlow/approveBasic/components/approveBasicDialog.vue';\r\nlet global: any = {\r\n homeChartOne: null,\r\n homeChartTwo: null,\r\n homeCharThree: null,\r\n dispose: [null, '', undefined]\r\n};\r\n\r\ninterface stateType {\r\n tableData: {\r\n approveBasicData: [];\r\n total: number;\r\n loading: boolean;\r\n params: {\r\n pageIndex: number | null;\r\n pageSize: number | null;\r\n searchParams: {\r\n ruleStandType: number | null;\r\n title: string | null;\r\n };\r\n };\r\n };\r\n ruleStandTypeList: Array<type>;\r\n typeList: Array<type>;\r\n typeTwoList: Array<type>;\r\n deleteList: {\r\n ids: Array<number>;\r\n };\r\n}\r\ninterface type {\r\n id: number;\r\n name: string;\r\n}\r\ninterface ruleType {\r\n ruleStandId: number;\r\n}\r\nexport default {\r\n name: 'index',\r\n components: { approveBasicDialog },\r\n setup() {\r\n const approveBasicDialogRef = ref();\r\n const state = reactive<stateType>({\r\n tableData: {\r\n approveBasicData: [],\r\n total: 0,\r\n loading: false,\r\n params: {\r\n pageIndex: 1,\r\n pageSize: 10,\r\n searchParams: {\r\n ruleStandType: null,\r\n title: null\r\n }\r\n }\r\n },\r\n ruleStandTypeList: [\r\n { id: 1, name: '可燃气浓度' },\r\n { id: 2, name: '氧气浓度' },\r\n { id: 3, name: '一氧化碳浓度' },\r\n { id: 4, name: '硫化氢浓度' },\r\n { id: 5, name: '温度' },\r\n { id: 6, name: '压力' },\r\n { id: 7, name: '震动' }\r\n ],\r\n typeList: [\r\n { id: 1, name: '大于' },\r\n { id: 2, name: '等于' },\r\n { id: 4, name: '大于等于' }\r\n ],\r\n typeTwoList: [\r\n { id: 3, name: '小于' },\r\n { id: 2, name: '等于' },\r\n { id: 5, name: '小于等于' }\r\n ],\r\n deleteList: {\r\n ids: []\r\n }\r\n });\r\n\r\n //获取巡检任务数据\r\n const getInspectionTask = async () => {\r\n let res = await approveBasicApi().getApproveBasicList(state.tableData.params);\r\n if (res.data.code === '200') {\r\n state.tableData.approveBasicData = res.data.data;\r\n state.tableData.total = res.data.total;\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n };\r\n\r\n // //获取部门\r\n // const getDepartmentData = async () => {\r\n // let res = await departmentApi().getDepartmentList();\r\n // if (res.data.code === '200') {\r\n // state.departmentList = res.data.data;\r\n // } else {\r\n // ElMessage({\r\n // type: 'warning',\r\n // message: res.data.msg\r\n // });\r\n // }\r\n // };\r\n\r\n // 删除\r\n const deleteApproveBasic = (row: any) => {\r\n ElMessageBox.confirm(`此操作将永久删除该任务:“${row.title}”,是否继续?`, '提示', {\r\n confirmButtonText: '确认',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n })\r\n .then(async () => {\r\n let res = await approveBasicApi().deleteApproveBasic(state.deleteList);\r\n if (res.data.code === '200') {\r\n ElMessage({\r\n type: 'success',\r\n duration: 2000,\r\n message: '删除成功'\r\n });\r\n await getInspectionTask();\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const handleSelectionChange = (val: Array<ruleType>) => {\r\n state.deleteList.ids = val.map((item) => {\r\n return item.ruleStandId;\r\n });\r\n };\r\n\r\n const openApproveBasicDialog = (type: string, value: {}) => {\r\n approveBasicDialogRef.value.showApproveBasicDialog(type, value);\r\n };\r\n\r\n const parseNumber = (value: number, type: string) => {\r\n if (type === '标准类型') {\r\n return state.ruleStandTypeList.find((item) => item.id === value)?.name;\r\n } else if (type === '最高值') {\r\n return state.typeTwoList.find((item) => item.id == value)?.name;\r\n } else {\r\n return state.typeList.find((item) => item.id == value)?.name;\r\n }\r\n };\r\n\r\n // 分页改变\r\n const onHandleSizeChange = (val: number) => {\r\n state.tableData.params.pageSize = val;\r\n getInspectionTask();\r\n };\r\n // 分页改变\r\n const onHandleCurrentChange = (val: number) => {\r\n state.tableData.params.pageIndex = val;\r\n getInspectionTask();\r\n };\r\n\r\n const reset = () => {\r\n state.tableData.params = {\r\n pageIndex: 1,\r\n pageSize: 10,\r\n searchParams: {\r\n ruleStandType: null,\r\n title: null\r\n }\r\n };\r\n };\r\n\r\n // 页面加载时\r\n onMounted(() => {\r\n getInspectionTask();\r\n });\r\n\r\n return {\r\n View,\r\n Edit,\r\n Delete,\r\n Refresh,\r\n Plus,\r\n reset,\r\n parseNumber,\r\n handleSelectionChange,\r\n deleteApproveBasic,\r\n getInspectionTask,\r\n onHandleSizeChange,\r\n onHandleCurrentChange,\r\n approveBasicDialogRef,\r\n openApproveBasicDialog,\r\n ...toRefs(state)\r\n };\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n$homeNavLengh: 8;\r\n.home-container {\r\n height: calc(100vh - 114px);\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n .homeCard {\r\n width: 100%;\r\n padding: 20px;\r\n box-sizing: border-box;\r\n background: #fff;\r\n border-radius: 4px;\r\n\r\n .main-card {\r\n width: 100%;\r\n height: 100%;\r\n .cardTop {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 20px;\r\n .mainCardBtn {\r\n margin: 0;\r\n }\r\n }\r\n .pageBtn {\r\n height: 60px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: right;\r\n\r\n .demo-pagination-block + .demo-pagination-block {\r\n margin-top: 10px;\r\n }\r\n .demo-pagination-block .demonstration {\r\n margin-bottom: 16px;\r\n }\r\n }\r\n }\r\n &:last-of-type {\r\n height: calc(100% - 100px);\r\n }\r\n }\r\n .el-row {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n .grid-content {\r\n align-items: center;\r\n min-height: 36px;\r\n }\r\n\r\n .topInfo {\r\n display: flex;\r\n align-items: center;\r\n font-size: 16px;\r\n font-weight: bold;\r\n\r\n & > div {\r\n white-space: nowrap;\r\n margin-right: 20px;\r\n }\r\n }\r\n }\r\n}\r\n.stepItem {\r\n width: 100%;\r\n display: flex;\r\n align-items: flex-start;\r\n margin-bottom: 30px;\r\n margin-left: 30px;\r\n padding-bottom: 30px;\r\n border-left: 2px solid #ccc;\r\n &:first-of-type {\r\n margin-top: 30px;\r\n }\r\n &:last-of-type {\r\n margin-bottom: 0;\r\n border-left: none;\r\n }\r\n .stepNum {\r\n width: 30px;\r\n height: 30px;\r\n border-radius: 15px;\r\n box-sizing: border-box;\r\n color: #333;\r\n border: 1px solid #999;\r\n line-height: 28px;\r\n text-align: center;\r\n margin-right: 10px;\r\n margin-left: -16px;\r\n margin-top: -30px;\r\n }\r\n .stepCard {\r\n width: 100%;\r\n margin-top: -30px;\r\n\r\n .box-card {\r\n width: 100%;\r\n &:deep(.el-card__header) {\r\n padding: 10px 15px;\r\n }\r\n .card-header {\r\n width: 100%;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n & > div:first-of-type {\r\n margin-right: 80px;\r\n font-size: 18px;\r\n font-weight: bold;\r\n }\r\n }\r\n }\r\n }\r\n &:hover .card-header {\r\n color: #0098f5;\r\n }\r\n &:hover .stepNum {\r\n border: 2px solid #0098f5;\r\n color: #0098f5;\r\n }\r\n}\r\n:deep(.el-date-editor) {\r\n width: 100%;\r\n}\r\n:deep(.el-textarea.is-disabled .el-textarea__inner) {\r\n background-color: var(--el-card-bg-color);\r\n color: var(--el-input-text-color, var(--el-text-color-regular));\r\n}\r\n:deep(.el-input.is-disabled .el-input__inner) {\r\n color: var(--el-input-text-color, var(--el-text-color-regular));\r\n}\r\n:deep(.el-input.is-disabled .el-input__wrapper) {\r\n background-color: var(--el-card-bg-color);\r\n}\r\n</style>\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/specialWorkSystem/workFlow/approveBasic/index.vue b/src/views/specialWorkSystem/workFlow/approveBasic/index.vue +--- a/src/views/specialWorkSystem/workFlow/approveBasic/index.vue (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ b/src/views/specialWorkSystem/workFlow/approveBasic/index.vue (date 1660889793395) +@@ -22,7 +22,7 @@ + <el-row class="cardTop"> + <el-col :span="12" class="mainCardBtn"> + <el-button type="primary" :icon="Plus" size="default" @click="openApproveBasicDialog('新增', {})">新建</el-button> +- <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> ++ <el-button type="danger" :icon="Delete" size="default" @click="deleteMoreApproveBasic" plain>批量删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default" /> + </el-row> +@@ -198,6 +198,33 @@ + cancelButtonText: '取消', + type: 'warning' + }) ++ .then(async () => { ++ let res = await approveBasicApi().deleteApproveBasic({ ids: [row.ruleStandId] }); ++ if (res.data.code === '200') { ++ state.deleteList.ids = []; ++ ElMessage({ ++ type: 'success', ++ duration: 2000, ++ message: '删除成功' ++ }); ++ await getInspectionTask(); ++ } else { ++ ElMessage({ ++ type: 'warning', ++ message: res.data.msg ++ }); ++ } ++ }) ++ .catch(() => {}); ++ }; ++ ++ // 批量删除 ++ const deleteMoreApproveBasic = (row: any) => { ++ ElMessageBox.confirm(`此操作将永久删除这些标准项,是否继续?`, '提示', { ++ confirmButtonText: '确认', ++ cancelButtonText: '取消', ++ type: 'warning' ++ }) + .then(async () => { + let res = await approveBasicApi().deleteApproveBasic(state.deleteList); + if (res.data.code === '200') { +@@ -274,6 +301,7 @@ + parseNumber, + handleSelectionChange, + deleteApproveBasic, ++ deleteMoreApproveBasic, + getInspectionTask, + onHandleSizeChange, + onHandleCurrentChange, +Index: src/views/specialWorkSystem/workFlow/approveRule/index.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+><template>\r\n <div class=\"home-container\">\r\n <div style=\"height: 100%\">\r\n <el-row class=\"homeCard\">\r\n <div class=\"basic-line\">\r\n <span>规则名称:</span>\r\n <el-select v-model=\"tableData.params.searchParams.ruleName\" clearable filterable class=\"input-box\" placeholder=\"任务类型\">\r\n <el-option v-for=\"item in workTypeList\" :key=\"item.id\" :label=\"item.name\" :value=\"item.id\"></el-option>\r\n </el-select>\r\n </div>\r\n <div class=\"basic-line\">\r\n <span>部门:</span>\r\n <el-cascader placeholder=\"部门名称\" :options=\"departmentList\" :props=\"{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName' }\" clearable filterable class=\"input-box\" v-model=\"tableData.params.searchParams.depId\"> </el-cascader>\r\n </div>\r\n <div class=\"basic-line\">\r\n <span>作业类型:</span>\r\n <el-select v-model=\"tableData.params.searchParams.workType\" clearable filterable class=\"input-box\" placeholder=\"作业类型\">\r\n <el-option v-for=\"item in workTypeList\" :key=\"item.id\" :label=\"item.name\" :value=\"item.id\"></el-option>\r\n </el-select>\r\n </div>\r\n <div class=\"basic-line\">\r\n <span>作业等级:</span>\r\n <el-select v-model=\"tableData.params.searchParams.workLevel\" clearable filterable class=\"input-box\" placeholder=\"作业等级\">\r\n <el-option v-for=\"item in workLevelList\" :key=\"item.id\" :label=\"item.name\" :value=\"item.id\"></el-option>\r\n </el-select>\r\n </div>\r\n <div style=\"padding-bottom: 10px\">\r\n <el-button type=\"primary\" @click=\"getApproveRule\">查询</el-button>\r\n <el-button plain @click=\"reset\">重置</el-button>\r\n </div>\r\n </el-row>\r\n <div class=\"homeCard\">\r\n <div class=\"main-card\">\r\n <el-row class=\"cardTop\">\r\n <el-col :span=\"12\" class=\"mainCardBtn\">\r\n <el-button type=\"primary\" :icon=\"Plus\" size=\"default\" @click=\"openApproveRuleDialog('新增', {})\">新建</el-button>\r\n <!-- <el-button type=\"danger\" :icon=\"Delete\" size=\"default\" plain>删除</el-button>-->\r\n </el-col>\r\n <el-button type=\"primary\" :icon=\"Refresh\" size=\"default\" />\r\n </el-row>\r\n <el-table ref=\"multipleTableRef\" :data=\"tableData.approveRuleData\" style=\"width: 100%\" height=\"calc(100% - 100px)\" :header-cell-style=\"{ background: '#fafafa' }\" @selection-change=\"handleSelectionChange\">\r\n <el-table-column type=\"selection\" width=\"55\" />\r\n <el-table-column property=\"ruleName\" label=\"任务名称\" />\r\n <el-table-column property=\"workType\" label=\"作业类型\">\r\n <template #default=\"scope\">\r\n <span>\r\n {{ parseNumber(scope.row.workType, '作业类型') }}\r\n </span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column property=\"workLevel\" label=\"作业等级\">\r\n <template #default=\"scope\">\r\n <span>\r\n {{ parseNumber(scope.row.workLevel, '作业等级') }}\r\n </span>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"createUname\" label=\"创建人\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"gmtCreate\" label=\"创建时间\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"modifiedUname\" label=\"最后修改人\" show-overflow-tooltip></el-table-column>\r\n <el-table-column prop=\"gmtModified\" label=\"最后修改时间\" show-overflow-tooltip></el-table-column>\r\n <el-table-column fixed=\"right\" label=\"操作\" align=\"center\" width=\"300\">\r\n <template #default=\"scope\">\r\n <el-button link type=\"primary\" size=\"small\" :icon=\"View\" @click=\"openApproveRuleDialog('查看', scope.row)\">查看</el-button>\r\n <el-button link type=\"primary\" size=\"small\" :icon=\"Edit\" @click=\"openApproveRuleDialog('修改', scope.row)\">修改</el-button>\r\n <el-button link type=\"danger\" size=\"small\" :icon=\"Delete\" @click=\"deleteApproveRule(scope.row)\">删除</el-button>\r\n </template>\r\n </el-table-column>\r\n </el-table>\r\n <div class=\"pageBtn\">\r\n <el-pagination @size-change=\"onHandleSizeChange\" @current-change=\"onHandleCurrentChange\" :pager-count=\"5\" :page-sizes=\"[10, 20, 30]\" v-model:current-page=\"tableData.params.pageIndex\" background v-model:page-size=\"tableData.params.pageSize\" layout=\"total, sizes, prev, pager, next, jumper\" :total=\"tableData.total\" class=\"page-position\"> </el-pagination>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <approve-rule-dialog ref=\"approveRuleDialogRef\" @refreshApproveRule=\"getApproveRule\"></approve-rule-dialog>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { toRefs, reactive, ref, onMounted } from 'vue';\r\nimport { Edit, View, Plus, Delete, Refresh, Search, Download } from '@element-plus/icons-vue';\r\nimport { ElTable, ElMessage, ElMessageBox } from 'element-plus';\r\nimport approveRuleDialog from '/@/views/specialWorkSystem/workFlow/approveRule/components/approveRuleDialog.vue';\r\nimport { departmentApi } from '/@/api/systemManage/department';\r\nimport { approveRuleApi } from '/@/api/specialWorkSystem/approveRule/index';\r\nimport { userApi } from '/@/api/systemManage/user';\r\n\r\ninterface stateType {\r\n tableData: {\r\n approveRuleData: [];\r\n total: number;\r\n loading: boolean;\r\n params: {\r\n pageIndex: number | null;\r\n pageSize: number | null;\r\n searchParams: {\r\n ruleName: string | null;\r\n depId: number | null;\r\n workType: number | null;\r\n workLevel: number | null;\r\n };\r\n };\r\n };\r\n workTypeList: Array<type>;\r\n departmentList: [];\r\n userList: [];\r\n workLevelList: Array<type>;\r\n deleteList: { ids: Array<deleteType> };\r\n timeType: Array<type>;\r\n}\r\ninterface deleteType {\r\n ruleId: number;\r\n}\r\n\r\ninterface type {\r\n id: number;\r\n name: string;\r\n}\r\n\r\nexport default {\r\n name: 'index',\r\n components: { approveRuleDialog },\r\n setup() {\r\n const approveRuleDialogRef = ref();\r\n const state = reactive<stateType>({\r\n tableData: {\r\n approveRuleData: [],\r\n total: 0,\r\n loading: false,\r\n params: {\r\n pageIndex: 1,\r\n pageSize: 10,\r\n searchParams: {\r\n ruleName: null,\r\n depId: null,\r\n workType: null,\r\n workLevel: null\r\n }\r\n }\r\n },\r\n workTypeList: [\r\n { id: 1, name: '动火作业' },\r\n { id: 2, name: '受限空间作业' },\r\n { id: 3, name: '吊装作业' },\r\n { id: 4, name: '动土作业' },\r\n { id: 5, name: '断路作业' },\r\n { id: 6, name: '高处作业' },\r\n { id: 7, name: '临时用电作业' },\r\n { id: 8, name: '盲板抽堵作业' }\r\n ],\r\n workLevelList: [\r\n { id: 1, name: '一级动火作业' },\r\n { id: 2, name: '二级动火作业' },\r\n { id: 3, name: '三级动火作业' },\r\n { id: 4, name: '一级高处作业' },\r\n { id: 5, name: '二级高处作业' },\r\n { id: 6, name: '三级高处作业' },\r\n { id: 7, name: '四级高处作业' },\r\n { id: 8, name: '一级吊装作业' },\r\n { id: 9, name: '二级吊装作业' },\r\n { id: 10, name: '三级吊装作业' },\r\n { id: 11, name: '抽盲板作业' },\r\n { id: 12, name: '堵盲板作业' }\r\n ],\r\n departmentList: [],\r\n userList: [],\r\n deleteList: { ids: [] },\r\n timeType: [\r\n { id: 1, name: '分' },\r\n { id: 2, name: '小时' },\r\n { id: 3, name: '日' },\r\n { id: 4, name: '月' },\r\n { id: 5, name: '年' }\r\n ]\r\n });\r\n\r\n //获取巡检任务数据\r\n const getApproveRule = async () => {\r\n let res = await approveRuleApi().getApproveRuleList(state.tableData.params);\r\n if (res.data.code === '200') {\r\n state.tableData.approveRuleData = res.data.data;\r\n state.tableData.total = res.data.total;\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n };\r\n\r\n //获取部门\r\n const getDepartmentData = async () => {\r\n let res = await departmentApi().getDepartmentList();\r\n if (res.data.code === '200') {\r\n state.departmentList = res.data.data;\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n };\r\n\r\n //获取用户列表\r\n const getUserData = async () => {\r\n let res = await userApi().getAllUser();\r\n if (res.data.code === '200') {\r\n state.userList = res.data.data;\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n };\r\n\r\n // 删除\r\n const deleteApproveRule = (row: any) => {\r\n ElMessageBox.confirm(`此操作将永久删除该任务:“${row.unitName}”,是否继续?`, '提示', {\r\n confirmButtonText: '确认',\r\n cancelButtonText: '取消',\r\n type: 'warning'\r\n })\r\n .then(async () => {\r\n let res = await approveRuleApi().deleteApproveRule(state.deleteList);\r\n if (res.data.code === '200') {\r\n ElMessage({\r\n type: 'success',\r\n duration: 2000,\r\n message: '删除成功'\r\n });\r\n await getApproveRule();\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n const openApproveRuleDialog = (type: string, value: {}) => {\r\n approveRuleDialogRef.value.showApproveRuleDialog(type, value, state.departmentList, state.userList, state.workTypeList);\r\n };\r\n\r\n const parseNumber = (value: number, type: string) => {\r\n if (type === '作业类型') {\r\n return state.workTypeList.find((item) => item.id === value)?.name;\r\n } else if (type === '作业等级') {\r\n return state.workLevelList.find((item) => item.id == value)?.name;\r\n } else {\r\n }\r\n };\r\n\r\n const handleSelectionChange = (val: Array<deleteType>) => {\r\n state.deleteList.ids = val.map((item) => {\r\n return item.ruleId;\r\n }) as [];\r\n };\r\n\r\n // 分页改变\r\n const onHandleSizeChange = (val: number) => {\r\n state.tableData.params.pageSize = val;\r\n getApproveRule();\r\n };\r\n // 分页改变\r\n const onHandleCurrentChange = (val: number) => {\r\n state.tableData.params.pageIndex = val;\r\n getApproveRule();\r\n };\r\n\r\n const reset = () => {\r\n state.tableData.params = {\r\n pageIndex: 1,\r\n pageSize: 10,\r\n searchParams: {\r\n ruleName: null,\r\n depId: null,\r\n workType: null,\r\n workLevel: null\r\n }\r\n };\r\n };\r\n\r\n // 页面加载时\r\n onMounted(() => {\r\n getApproveRule();\r\n getDepartmentData();\r\n getUserData();\r\n });\r\n\r\n return {\r\n View,\r\n Edit,\r\n Delete,\r\n Refresh,\r\n Plus,\r\n reset,\r\n parseNumber,\r\n deleteApproveRule,\r\n getApproveRule,\r\n handleSelectionChange,\r\n onHandleSizeChange,\r\n onHandleCurrentChange,\r\n approveRuleDialogRef,\r\n openApproveRuleDialog,\r\n ...toRefs(state)\r\n };\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n$homeNavLengh: 8;\r\n.home-container {\r\n height: calc(100vh - 144px);\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n .homeCard {\r\n width: 100%;\r\n padding: 20px;\r\n box-sizing: border-box;\r\n background: #fff;\r\n border-radius: 4px;\r\n\r\n .main-card {\r\n width: 100%;\r\n height: 100%;\r\n .cardTop {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 20px;\r\n .mainCardBtn {\r\n margin: 0;\r\n }\r\n }\r\n .pageBtn {\r\n height: 60px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: right;\r\n\r\n .demo-pagination-block + .demo-pagination-block {\r\n margin-top: 10px;\r\n }\r\n .demo-pagination-block .demonstration {\r\n margin-bottom: 16px;\r\n }\r\n }\r\n }\r\n &:last-of-type {\r\n height: calc(100% - 100px);\r\n }\r\n }\r\n .el-row {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n .grid-content {\r\n align-items: center;\r\n min-height: 36px;\r\n }\r\n\r\n .topInfo {\r\n display: flex;\r\n align-items: center;\r\n font-size: 16px;\r\n font-weight: bold;\r\n\r\n & > div {\r\n white-space: nowrap;\r\n margin-right: 20px;\r\n }\r\n }\r\n }\r\n}\r\n.stepItem {\r\n width: 100%;\r\n display: flex;\r\n align-items: flex-start;\r\n margin-bottom: 30px;\r\n margin-left: 30px;\r\n padding-bottom: 30px;\r\n border-left: 2px solid #ccc;\r\n &:first-of-type {\r\n margin-top: 30px;\r\n }\r\n &:last-of-type {\r\n margin-bottom: 0;\r\n border-left: none;\r\n }\r\n .stepNum {\r\n width: 30px;\r\n height: 30px;\r\n border-radius: 15px;\r\n box-sizing: border-box;\r\n color: #333;\r\n border: 1px solid #999;\r\n line-height: 28px;\r\n text-align: center;\r\n margin-right: 10px;\r\n margin-left: -16px;\r\n margin-top: -30px;\r\n }\r\n .stepCard {\r\n width: 100%;\r\n margin-top: -30px;\r\n\r\n .box-card {\r\n width: 100%;\r\n &:deep(.el-card__header) {\r\n padding: 10px 15px;\r\n }\r\n .card-header {\r\n width: 100%;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n & > div:first-of-type {\r\n margin-right: 80px;\r\n font-size: 18px;\r\n font-weight: bold;\r\n }\r\n }\r\n }\r\n }\r\n &:hover .card-header {\r\n color: #0098f5;\r\n }\r\n &:hover .stepNum {\r\n border: 2px solid #0098f5;\r\n color: #0098f5;\r\n }\r\n}\r\n.el-input {\r\n width: 100% !important;\r\n}\r\n:deep(.el-date-editor) {\r\n width: 100%;\r\n}\r\n.el-select {\r\n width: 100%;\r\n}\r\n:deep(.el-textarea.is-disabled .el-textarea__inner) {\r\n background-color: var(--el-card-bg-color);\r\n color: var(--el-input-text-color, var(--el-text-color-regular));\r\n}\r\n:deep(.el-input.is-disabled .el-input__inner) {\r\n color: var(--el-input-text-color, var(--el-text-color-regular));\r\n}\r\n:deep(.el-input.is-disabled .el-input__wrapper) {\r\n background-color: var(--el-card-bg-color);\r\n}\r\n</style>\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/specialWorkSystem/workFlow/approveRule/index.vue b/src/views/specialWorkSystem/workFlow/approveRule/index.vue +--- a/src/views/specialWorkSystem/workFlow/approveRule/index.vue (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ b/src/views/specialWorkSystem/workFlow/approveRule/index.vue (date 1660891733137) +@@ -4,9 +4,7 @@ + <el-row class="homeCard"> + <div class="basic-line"> + <span>规则名称:</span> +- <el-select v-model="tableData.params.searchParams.ruleName" clearable filterable class="input-box" placeholder="任务类型"> +- <el-option v-for="item in workTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> +- </el-select> ++ <el-input v-model="tableData.params.searchParams.ruleName" class="input-box" placeholder="规则名称"> </el-input> + </div> + <div class="basic-line"> + <span>部门:</span> +@@ -34,7 +32,7 @@ + <el-row class="cardTop"> + <el-col :span="12" class="mainCardBtn"> + <el-button type="primary" :icon="Plus" size="default" @click="openApproveRuleDialog('新增', {})">新建</el-button> +- <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> ++ <el-button type="danger" :icon="Delete" size="default" @click="deleteApproveRule" plain>批量删除</el-button> + </el-col> + <el-button type="primary" :icon="Refresh" size="default" /> + </el-row> +@@ -63,7 +61,6 @@ + <template #default="scope"> + <el-button link type="primary" size="small" :icon="View" @click="openApproveRuleDialog('查看', scope.row)">查看</el-button> + <el-button link type="primary" size="small" :icon="Edit" @click="openApproveRuleDialog('修改', scope.row)">修改</el-button> +- <el-button link type="danger" size="small" :icon="Delete" @click="deleteApproveRule(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> +@@ -217,7 +214,34 @@ + + // 删除 + const deleteApproveRule = (row: any) => { +- ElMessageBox.confirm(`此操作将永久删除该任务:“${row.unitName}”,是否继续?`, '提示', { ++ ElMessageBox.confirm(`此操作将永久删除该审批规则,是否继续?`, '提示', { ++ confirmButtonText: '确认', ++ cancelButtonText: '取消', ++ type: 'warning' ++ }) ++ .then(async () => { ++ let res = await approveRuleApi().deleteApproveRule({ ids: [row.id] }); ++ state.deleteList.ids = []; ++ if (res.data.code === '200') { ++ ElMessage({ ++ type: 'success', ++ duration: 2000, ++ message: '删除成功' ++ }); ++ await getApproveRule(); ++ } else { ++ ElMessage({ ++ type: 'warning', ++ message: res.data.msg ++ }); ++ } ++ }) ++ .catch(() => {}); ++ }; ++ ++ // 批量删除 ++ const deleteMoreApproveRule = (row: any) => { ++ ElMessageBox.confirm(`此操作将永久删除这些审批规则,是否继续?`, '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' +@@ -301,6 +325,7 @@ + parseNumber, + deleteApproveRule, + getApproveRule, ++ deleteMoreApproveRule, + handleSelectionChange, + onHandleSizeChange, + onHandleCurrentChange, +@@ -438,15 +463,6 @@ + color: #0098f5; + } + } +-.el-input { +- width: 100% !important; +-} +-:deep(.el-date-editor) { +- width: 100%; +-} +-.el-select { +- width: 100%; +-} + :deep(.el-textarea.is-disabled .el-textarea__inner) { + background-color: var(--el-card-bg-color); + color: var(--el-input-text-color, var(--el-text-color-regular)); +Index: src/layout/routerView/link.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+><template>\r\n\t<div class=\"layout-view-bg-white flex layout-view-link\" :style=\"{ height: `calc(100vh - ${setLinkHeight}` }\">\r\n\t\t<a :href=\"currentRouteMeta.isLink\" target=\"_blank\" rel=\"opener\" class=\"flex-margin\">\r\n\t\t\t{{ $t(currentRouteMeta.title) }}:{{ currentRouteMeta.isLink }}\r\n\t\t</a>\r\n\t</div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { defineComponent, toRefs, reactive, computed, watch } from 'vue';\r\nimport { useRoute, RouteMeta } from 'vue-router';\r\nimport { storeToRefs } from 'pinia';\r\nimport { useThemeConfig } from '/@/stores/themeConfig';\r\n\r\n// 定义接口来定义对象的类型\r\ninterface LinkViewState {\r\n\tcurrentRouteMeta: {\r\n\t\tisLink: string;\r\n\t\ttitle: string;\r\n\t};\r\n}\r\ninterface LinkViewRouteMeta extends RouteMeta {\r\n\tisLink: string;\r\n\ttitle: string;\r\n}\r\n\r\nexport default defineComponent({\r\n\tname: 'layoutLinkView',\r\n\tsetup() {\r\n\t\tconst storesThemeConfig = useThemeConfig();\r\n\t\tconst { themeConfig } = storeToRefs(storesThemeConfig);\r\n\t\tconst route = useRoute();\r\n\t\tconst state = reactive<LinkViewState>({\r\n\t\t\tcurrentRouteMeta: {\r\n\t\t\t\tisLink: '',\r\n\t\t\t\ttitle: '',\r\n\t\t\t},\r\n\t\t});\r\n\t\t// 设置 link 的高度\r\n\t\tconst setLinkHeight = computed(() => {\r\n\t\t\tlet { isTagsview } = themeConfig.value;\r\n\t\t\tif (isTagsview) return `115px`;\r\n\t\t\telse return `80px`;\r\n\t\t});\r\n\t\t// 监听路由的变化,设置内容\r\n\t\twatch(\r\n\t\t\t() => route.path,\r\n\t\t\t() => {\r\n\t\t\t\tstate.currentRouteMeta = <LinkViewRouteMeta>route.meta;\r\n\t\t\t},\r\n\t\t\t{\r\n\t\t\t\timmediate: true,\r\n\t\t\t}\r\n\t\t);\r\n\t\treturn {\r\n\t\t\tsetLinkHeight,\r\n\t\t\t...toRefs(state),\r\n\t\t};\r\n\t},\r\n});\r\n</script>\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/layout/routerView/link.vue b/src/layout/routerView/link.vue +--- a/src/layout/routerView/link.vue (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ b/src/layout/routerView/link.vue (date 1660894319217) +@@ -1,9 +1,7 @@ + <template> +- <div class="layout-view-bg-white flex layout-view-link" :style="{ height: `calc(100vh - ${setLinkHeight}` }"> +- <a :href="currentRouteMeta.isLink" target="_blank" rel="opener" class="flex-margin"> +- {{ $t(currentRouteMeta.title) }}:{{ currentRouteMeta.isLink }} +- </a> +- </div> ++ <div class="layout-view-bg-white flex layout-view-link" :style="{ height: `calc(100vh - ${setLinkHeight}` }"> ++ <a :href="currentRouteMeta.isLink" target="_blank" rel="opener" class="flex-margin"> {{ $t(currentRouteMeta.title) }}:{{ currentRouteMeta.isLink }} </a> ++ </div> + </template> + + <script lang="ts"> +@@ -14,48 +12,48 @@ + + // 定义接口来定义对象的类型 + interface LinkViewState { +- currentRouteMeta: { +- isLink: string; +- title: string; +- }; ++ currentRouteMeta: { ++ isLink: string; ++ title: string; ++ }; + } + interface LinkViewRouteMeta extends RouteMeta { +- isLink: string; +- title: string; ++ isLink: string; ++ title: string; + } + + export default defineComponent({ +- name: 'layoutLinkView', +- setup() { +- const storesThemeConfig = useThemeConfig(); +- const { themeConfig } = storeToRefs(storesThemeConfig); +- const route = useRoute(); +- const state = reactive<LinkViewState>({ +- currentRouteMeta: { +- isLink: '', +- title: '', +- }, +- }); +- // 设置 link 的高度 +- const setLinkHeight = computed(() => { +- let { isTagsview } = themeConfig.value; +- if (isTagsview) return `115px`; +- else return `80px`; +- }); +- // 监听路由的变化,设置内容 +- watch( +- () => route.path, +- () => { +- state.currentRouteMeta = <LinkViewRouteMeta>route.meta; +- }, +- { +- immediate: true, +- } +- ); +- return { +- setLinkHeight, +- ...toRefs(state), +- }; +- }, ++ name: 'layoutLinkView', ++ setup() { ++ const storesThemeConfig = useThemeConfig(); ++ const { themeConfig } = storeToRefs(storesThemeConfig); ++ const route = useRoute(); ++ const state = reactive<LinkViewState>({ ++ currentRouteMeta: { ++ isLink: '', ++ title: '' ++ } ++ }); ++ // 设置 link 的高度 ++ const setLinkHeight = computed(() => { ++ let { isTagsview } = themeConfig.value; ++ if (isTagsview) return `115px`; ++ else return `80px`; ++ }); ++ // 监听路由的变化,设置内容 ++ watch( ++ () => route.path, ++ () => { ++ state.currentRouteMeta = <LinkViewRouteMeta>route.meta; ++ }, ++ { ++ immediate: true ++ } ++ ); ++ return { ++ setLinkHeight, ++ ...toRefs(state) ++ }; ++ } + }); + </script> +Index: src/views/specialWorkSystem/workApplyManage/workTicket/index.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+><template>\r\n\t<div class=\"home-container\">\r\n\t\t<div style=\"height: 100%\">\r\n\t\t<el-form :model=\"form\" label-width=\"120px\" :rules=\"applyRules\" ref=\"ruleFormRef\">\r\n\t\t\t<div class=\"homeCard\">\r\n\t\t\t<el-row>\r\n\t\t\t\t<el-col :span=\"12\">\r\n\t\t\t\t\t<el-form-item label=\"作业人\" prop=\"operatorUids\">\r\n\t\t\t\t\t\t<el-select v-model=\"form.operatorUids\" multiple>\r\n\t\t\t\t\t\t\t<el-option\r\n\t\t\t\t\t\t\t\t\tv-for=\"item in workerList\"\r\n\t\t\t\t\t\t\t\t\t:key=\"item.value\"\r\n\t\t\t\t\t\t\t\t\t:label=\"item.label\"\r\n\t\t\t\t\t\t\t\t\t:value=\"item.value\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</el-select>\r\n\t\t\t\t\t</el-form-item>\r\n\t\t\t\t</el-col>\r\n\t\t\t</el-row>\r\n\t\t\t<el-row>\r\n\t\t\t\t<el-col :span=\"12\">\r\n\t\t\t\t\t<el-form-item label=\"作业等级\" prop=\"workLevel\">\r\n\t\t\t\t\t\t<el-select v-model=\"form.workLevel\">\r\n\t\t\t\t\t\t\t<el-option\r\n\t\t\t\t\t\t\t\t\tv-for=\"item in workLevelList\"\r\n\t\t\t\t\t\t\t\t\t:key=\"item.value\"\r\n\t\t\t\t\t\t\t\t\t:label=\"item.label\"\r\n\t\t\t\t\t\t\t\t\t:value=\"item.value\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</el-select>\r\n\t\t\t\t\t</el-form-item>\r\n\t\t\t\t</el-col>\r\n\t\t\t\t<el-col :span=\"12\">\r\n\t\t\t\t\t<el-form-item label=\"作业时间\" prop=\"workTimeLine\">\r\n\t\t\t\t\t\t<el-date-picker\r\n\t\t\t\t\t\t\t\tv-model=\"form.workTimeLine\"\r\n\t\t\t\t\t\t\t\tformat=\"YYYY-MM-DD HH:mm\"\r\n\t\t\t\t\t\t\t\tvalue-format=\"YYYY-MM-DD HH:mm:00\"\r\n\t\t\t\t\t\t\t\ttype=\"datetimerange\"\r\n\t\t\t\t\t\t\t\trange-separator=\"至\"\r\n\t\t\t\t\t\t\t\tstart-placeholder=\"开始时间\"\r\n\t\t\t\t\t\t\t\tend-placeholder=\"结束时间\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</el-form-item>\r\n\t\t\t\t</el-col>\r\n\t\t\t</el-row>\r\n\t\t\t<el-row>\r\n\t\t\t\t<el-col :span=\"12\">\r\n\t\t\t\t\t<el-form-item label=\"作业内容\" prop=\"workContent\">\r\n\t\t\t\t\t\t<el-input\r\n\t\t\t\t\t\t\t\tv-model=\"form.workContent\"\r\n\t\t\t\t\t\t\t\tautosize\r\n\t\t\t\t\t\t\t\ttype=\"textarea\"\r\n\t\t\t\t\t\t\t\tplaceholder=\"请输入作业内容\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</el-form-item>\r\n\t\t\t\t</el-col>\r\n\t\t\t\t<el-col :span=\"12\">\r\n\t\t\t\t\t<el-form-item label=\"作业地址\" prop=\"workLocation\">\r\n\t\t\t\t\t\t<el-input\r\n\t\t\t\t\t\t\t\tv-model=\"form.workLocation\"\r\n\t\t\t\t\t\t\t\tautosize\r\n\t\t\t\t\t\t\t\ttype=\"textarea\"\r\n\t\t\t\t\t\t\t\tplaceholder=\"请输入作业地址\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</el-form-item>\r\n\t\t\t\t</el-col>\r\n\t\t\t</el-row>\r\n\t\t\t<el-row>\r\n\t\t\t\t<el-col :span=\"12\">\r\n\t\t\t\t\t<el-form-item label=\"动火方式\" prop=\"workDetail.hotMethod\">\r\n\t\t\t\t\t\t<el-input\r\n\t\t\t\t\t\t\t\tv-model=\"form.workDetail.hotMethod\"\r\n\t\t\t\t\t\t\t\tautosize\r\n\t\t\t\t\t\t\t\ttype=\"textarea\"\r\n\t\t\t\t\t\t\t\tplaceholder=\"请输入动火方式\"\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t</el-form-item>\r\n\t\t\t\t</el-col>\r\n\t\t\t\t<el-col :span=\"12\">\r\n\t\t\t\t\t<el-form-item label=\"关联作业\" prop=\"workDetail.otherSpecialWork\">\r\n\t\t\t\t\t\t<el-select v-model=\"form.workDetail.otherSpecialWork\" multiple>\r\n\t\t\t\t\t\t\t<el-option\r\n\t\t\t\t\t\t\t\t\tv-for=\"item in otherWorkList\"\r\n\t\t\t\t\t\t\t\t\t:key=\"item.value\"\r\n\t\t\t\t\t\t\t\t\t:label=\"item.label\"\r\n\t\t\t\t\t\t\t\t\t:value=\"item.value\"\r\n\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t</el-select>\r\n\t\t\t\t\t</el-form-item>\r\n\t\t\t\t</el-col>\r\n\t\t\t</el-row>\r\n\t\t\t</div>\r\n\t\t</el-form>\r\n\t\t<div class=\"applyBtn\">\r\n\t\t\t<el-button type=\"primary\" size=\"large\" plain @click=\"submitForm(ruleFormRef)\">发起申请</el-button>\r\n\t\t</div>\r\n\t</div>\r\n\t</div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\n\timport { toRefs, reactive, defineComponent, ref, defineAsyncComponent } from 'vue';\r\n\timport { storeToRefs } from 'pinia';\r\n\timport { initBackEndControlRoutes } from '/@/router/backEnd';\r\n\timport {useUserInfo} from \"/@/stores/userInfo\";\r\n\timport { Session } from '/@/utils/storage';\r\n\timport { Search } from '@element-plus/icons-vue'\r\n\timport { ElMessage } from 'element-plus'\r\n\timport type { FormInstance, FormRules } from 'element-plus'\r\n\timport { workApplyApi } from '/@/api/specialWorkSystem/workApply';\r\n\r\n\r\n\tinterface stateType {\r\n\t\tform: Object,\r\n\t\tworkerList: Array<any>,\r\n\t\tworkTypeList: Array<any>,\r\n\t\tworkLevelList: Array<any>,\r\n\t\totherWorkList: Array<any>\r\n\t}\r\n\texport default defineComponent({\r\n\t\tname: 'workTicket',\r\n\t\tcomponents: {},\r\n\t\tsetup() {\r\n\t\t\tconst userInfo = useUserInfo()\r\n\t\t\tconst { userInfos } = storeToRefs(userInfo);\r\n\t\t\tconst state = reactive<stateType>({\r\n\t\t\t\tform: {\r\n\t\t\t\t\toperatorUids: [],\r\n\t\t\t\t\tworkType: 1,\r\n\t\t\t\t\tworkLevel: null,\r\n\t\t\t\t\tworkContent: '',\r\n\t\t\t\t\tworkLocation: '',\r\n\t\t\t\t\tworkDetail:{\r\n\t\t\t\t\t\thotMethod: '',\r\n\t\t\t\t\t\totherSpecialWork: []\r\n\t\t\t\t\t},\r\n\t\t\t\t\tworkTimeLine: [],\r\n\t\t\t\t\texpStartTime: '',\r\n\t\t\t\t\texpEndTime: ''\r\n\t\t\t\t},\r\n\t\t\t\tworkerList:[\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"张三\",\r\n\t\t\t\t\t\tvalue: 53\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"李四\",\r\n\t\t\t\t\t\tvalue: 54\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"测试一\",\r\n\t\t\t\t\t\tvalue: 55\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"测试二\",\r\n\t\t\t\t\t\tvalue: 56\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\tworkTypeList: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"类型一\",\r\n\t\t\t\t\t\tvalue: 1\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"类型二\",\r\n\t\t\t\t\t\tvalue: 2\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\tworkLevelList: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"一级动火作业\",\r\n\t\t\t\t\t\tvalue: 1\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"二级动火作业\",\r\n\t\t\t\t\t\tvalue: 2\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"特级动火作业\",\r\n\t\t\t\t\t\tvalue: 3\r\n\t\t\t\t\t}\r\n\t\t\t\t],\r\n\t\t\t\totherWorkList: [\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"动火作业\",\r\n\t\t\t\t\t\tvalue: 1\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"受限空间作业\",\r\n\t\t\t\t\t\tvalue: 2\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"吊装作业\",\r\n\t\t\t\t\t\tvalue: 3\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"动土作业\",\r\n\t\t\t\t\t\tvalue: 4\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"断路作业\",\r\n\t\t\t\t\t\tvalue: 5\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"高处作业\",\r\n\t\t\t\t\t\tvalue: 6\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"临时用电作业\",\r\n\t\t\t\t\t\tvalue: 7\r\n\t\t\t\t\t},\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tlabel: \"盲板抽堵作业\",\r\n\t\t\t\t\t\tvalue: 8\r\n\t\t\t\t\t}\r\n\t\t\t\t]\r\n\t\t\t});\r\n\t\t\tconst ruleFormRef = ref<FormInstance>()\r\n\t\t\tconst applyRules = reactive<FormRules>({\r\n\t\t\t\toperatorUid: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],\r\n\t\t\t\tworkType: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],\r\n\t\t\t\tworkLevel: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],\r\n\t\t\t\tworkContent: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],\r\n\t\t\t\tworkLocation: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],\r\n\t\t\t\tworkTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }],\r\n\t\t\t\t\"workDetail.hotMethod\": [{ required: true, message: '该内容不能为空', trigger: 'blur' }],\r\n\t\t\t\t\"workDetail.otherSpecialWork\": [{ required: true, message: '该内容不能为空', trigger: 'blur' }]\r\n\t\t\t});\r\n\t\t\tconst submitForm = async (formEl: FormInstance | undefined) => {\r\n\t\t\t\tif (!formEl) return\r\n\t\t\t\tawait formEl.validate(async (valid, fields) => {\r\n\t\t\t\t\tif (valid) {\r\n\t\t\t\t\t\tstate.form.expStartTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[0]\r\n\t\t\t\t\t\tstate.form.expEndTime = JSON.parse(JSON.stringify(state.form.workTimeLine))[1]\r\n\t\t\t\t\t\tlet { workTimeLine, ...data } = JSON.parse(JSON.stringify(state.form))\r\n\t\t\t\t\t\tdata.workDetail.otherSpecialWork = data.workDetail.otherSpecialWork.join(',')\r\n\t\t\t\t\t\tconsole.log(data,'data')\r\n\t\t\t\t\t\tconst res = await workApplyApi().postFireApply(data)\r\n\t\t\t\t\t\tif (res.data.code === '200') {\r\n\t\t\t\t\t\t\t\tElMessage({\r\n\t\t\t\t\t\t\t\t\ttype: 'success',\r\n\t\t\t\t\t\t\t\t\tmessage: '提交成功!'\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\tformEl.resetFields()\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tElMessage({\r\n\t\t\t\t\t\t\t\ttype: 'warning',\r\n\t\t\t\t\t\t\t\tmessage: res.data.msg\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconsole.log('error submit!', fields)\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t\t}\r\n\t\t\t// 折线图\r\n\t\t\tconst renderMenu = async (value: string) => {\r\n\t\t\t\tSession.set('projectId',value)\r\n\t\t\t\tuserInfos.value.projectId = value\r\n\t\t\t\tawait initBackEndControlRoutes();\r\n\t\t\t};\r\n\t\t\treturn {\r\n\t\t\t\trenderMenu,\r\n\t\t\t\tSearch,\r\n\t\t\t\truleFormRef,\r\n\t\t\t\tapplyRules,\r\n\t\t\t\tsubmitForm,\r\n\t\t\t\t...toRefs(state),\r\n\t\t\t};\r\n\t\t},\r\n\t});\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n\t.home-container {\r\n\t\theight: 100%;\r\n\t\toverflow: hidden;\r\n\t\tposition: relative;\r\n\t\t.homeCard{\r\n\t\t\twidth: 100%;\r\n\t\t\tpadding: 20px;\r\n\t\t\tbox-sizing: border-box;\r\n\t\t\tbackground: #fff;\r\n\t\t\tborder-radius: 4px;\r\n\t\t\tmargin-bottom: 20px;\r\n\t\t}\r\n\t\t.applyBtn{\r\n\t\t\twidth: 100%;\r\n\t\t\tbackground: #fff;\r\n\t\t\theight: 80px;\r\n\t\t\tz-index: 5;\r\n\t\t\tbox-shadow: 0 -3px 8px rgba(150,150,150,.1);\r\n\t\t\tdisplay: flex;\r\n\t\t\talign-items: center;\r\n\t\t\tjustify-content: center;\r\n\t\t}\r\n\t\t.el-row{\r\n\t\t\tmargin-bottom: 20px;\r\n\t\t}\r\n\t\t.el-row:last-child {\r\n\t\t\tmargin-bottom: 0;\r\n\t\t}\r\n\t\t.el-input{\r\n\t\t\twidth: 100% !important;\r\n\t\t}\r\n\t\t.el-date-editor::v-deep{\r\n\t\t\twidth: 100%;\r\n\t\t}\r\n\t\t.el-select{\r\n\t\t\twidth: 100%;\r\n\t\t}\r\n\t\t.el-cascader{\r\n\t\t\twidth: 100% !important;\r\n\t\t}\r\n\t}\r\n</style>\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/specialWorkSystem/workApplyManage/workTicket/index.vue b/src/views/specialWorkSystem/workApplyManage/workTicket/index.vue +--- a/src/views/specialWorkSystem/workApplyManage/workTicket/index.vue (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ b/src/views/specialWorkSystem/workApplyManage/workTicket/index.vue (date 1660894149383) +@@ -1,317 +1,279 @@ + <template> +- <div class="home-container"> +- <div style="height: 100%"> +- <el-form :model="form" label-width="120px" :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.value" +- :label="item.label" +- :value="item.value" +- /> +- </el-select> +- </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="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="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.value" +- /> +- </el-select> +- </el-form-item> +- </el-col> +- </el-row> +- </div> +- </el-form> +- <div class="applyBtn"> +- <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button> +- </div> +- </div> +- </div> ++ <div class="home-container"> ++ <div style="height: 100%"> ++ <el-form :model="form" label-width="120px" :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.value" :label="item.label" :value="item.value" /> ++ </el-select> ++ </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="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="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.value" /> ++ </el-select> ++ </el-form-item> ++ </el-col> ++ </el-row> ++ </div> ++ </el-form> ++ <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 } from 'element-plus' +- import type { FormInstance, FormRules } from 'element-plus' +- import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; ++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'; + +- +- interface stateType { +- form: Object, +- workerList: Array<any>, +- workTypeList: Array<any>, +- workLevelList: Array<any>, +- otherWorkList: Array<any> +- } +- export default defineComponent({ +- name: 'workTicket', +- components: {}, +- setup() { +- const userInfo = useUserInfo() +- const { userInfos } = storeToRefs(userInfo); +- const state = reactive<stateType>({ +- form: { +- operatorUids: [], +- workType: 1, +- workLevel: null, +- workContent: '', +- workLocation: '', +- workDetail:{ +- hotMethod: '', +- otherSpecialWork: [] +- }, +- workTimeLine: [], +- expStartTime: '', +- expEndTime: '' +- }, +- workerList:[ +- { +- label: "张三", +- value: 53 +- }, +- { +- label: "李四", +- value: 54 +- }, +- { +- label: "测试一", +- value: 55 +- }, +- { +- label: "测试二", +- value: 56 +- } +- ], +- workTypeList: [ +- { +- label: "类型一", +- value: 1 +- }, +- { +- label: "类型二", +- value: 2 +- } +- ], +- 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 ruleFormRef = ref<FormInstance>() +- const applyRules = reactive<FormRules>({ +- operatorUid: [{ 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' }], +- workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], +- "workDetail.hotMethod": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], +- "workDetail.otherSpecialWork": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] +- }); +- 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().postFireApply(data) +- if (res.data.code === '200') { +- ElMessage({ +- type: 'success', +- message: '提交成功!' +- }); +- formEl.resetFields() +- } else { +- ElMessage({ +- type: 'warning', +- message: res.data.msg +- }); +- } +- } 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, +- submitForm, +- ...toRefs(state), +- }; +- }, +- }); ++interface stateType { ++ form: Object; ++ workerList: Array<any>; ++ workTypeList: Array<any>; ++ workLevelList: Array<any>; ++ otherWorkList: Array<any>; ++} ++export default defineComponent({ ++ name: 'workTicket', ++ components: {}, ++ setup() { ++ const userInfo = useUserInfo(); ++ const { userInfos } = storeToRefs(userInfo); ++ const state = reactive<stateType>({ ++ form: { ++ operatorUids: [], ++ workType: 1, ++ workLevel: null, ++ workContent: '', ++ workLocation: '', ++ workDetail: { ++ hotMethod: '', ++ otherSpecialWork: [] ++ }, ++ workTimeLine: [], ++ expStartTime: '', ++ expEndTime: '' ++ }, ++ workerList: [ ++ { ++ label: '张三', ++ value: 53 ++ }, ++ { ++ label: '李四', ++ value: 54 ++ }, ++ { ++ label: '测试一', ++ value: 55 ++ }, ++ { ++ label: '测试二', ++ value: 56 ++ } ++ ], ++ workTypeList: [ ++ { ++ label: '类型一', ++ value: 1 ++ }, ++ { ++ label: '类型二', ++ value: 2 ++ } ++ ], ++ 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 ruleFormRef = ref<FormInstance>(); ++ const applyRules = reactive<FormRules>({ ++ operatorUid: [{ 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' }], ++ workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], ++ 'workDetail.hotMethod': [{ required: true, message: '该内容不能为空', trigger: 'blur' }], ++ 'workDetail.otherSpecialWork': [{ required: true, message: '该内容不能为空', trigger: 'blur' }] ++ }); ++ 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().postFireApply(data); ++ if (res.data.code === '200') { ++ ElMessage({ ++ type: 'success', ++ message: '提交成功!' ++ }); ++ formEl.resetFields(); ++ } else { ++ ElMessage({ ++ type: 'warning', ++ message: res.data.msg ++ }); ++ } ++ } 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, ++ 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; +- 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; +- } +- } ++.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, 0.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> +Index: .idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22__Default_Changelist_.xml +=================================================================== +diff --git a/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22__Default_Changelist_.xml b/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22__Default_Changelist_.xml +deleted file mode 100644 +--- a/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22__Default_Changelist_.xml (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ /dev/null (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) +@@ -1,9 +0,0 @@ +-<changelist name="Uncommitted_changes_before_Update_at_2022_8_11_19_22_[Default_Changelist]" date="1660217002849" recycled="true" deleted="true"> +- <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_[Default_Changelist]/shelved.patch" /> +- <option name="DESCRIPTION" value="Uncommitted changes before Update at 2022/8/11 19:22 [Default Changelist]" /> +- <binary> +- <option name="BEFORE_PATH" /> +- <option name="AFTER_PATH" value="src/assets/companyLogo.png" /> +- <option name="SHELVED_PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_[Default_Changelist]/companyLogo.png" /> +- </binary> +-</changelist> +\ No newline at end of file +Index: .idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_[Default_Changelist]/shelved.patch +=================================================================== +diff --git a/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_[Default_Changelist]/shelved.patch b/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_[Default_Changelist]/shelved.patch +deleted file mode 100644 +--- a/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_[Default_Changelist]/shelved.patch (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ /dev/null (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) +@@ -1,233 +0,0 @@ +-Index: src/layout/navBars/breadcrumb/user.vue +-IDEA additional info: +-Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +-<+><template>\r\n <div class=\"layout-navbars-breadcrumb-user pr15\" :style=\"{ flex: layoutUserFlexNum }\">\r\n <div class=\"logo\">\r\n <img src=\"../../../assets/menu/companyLogo.jpg\" />\r\n <span style=\"font-size: 16px; color: #333; font-weight: bolder\"> | {{ systemName }}</span>\r\n </div>\r\n <div style=\"display: flex;align-items:center;padding-right: 5px\">\r\n <div @click=\"backToMenu()\" class=\"backBtn\">返回首页</div>\r\n <el-dropdown :show-timeout=\"70\" :hide-timeout=\"50\" trigger=\"click\" @command=\"onComponentSizeChange\">\r\n <div class=\"layout-navbars-breadcrumb-user-icon\">\r\n <i class=\"iconfont icon-ziti\" :title=\"$t('message.user.title0')\"></i>\r\n </div>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item command=\"large\" :disabled=\"disabledSize === 'large'\">{{ $t('message.user.dropdownLarge') }}</el-dropdown-item>\r\n <el-dropdown-item command=\"default\" :disabled=\"disabledSize === 'default'\">{{ $t('message.user.dropdownDefault') }}</el-dropdown-item>\r\n <el-dropdown-item command=\"small\" :disabled=\"disabledSize === 'small'\">{{ $t('message.user.dropdownSmall') }}</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n<!-- <el-dropdown :show-timeout=\"70\" :hide-timeout=\"50\" trigger=\"click\" @command=\"onLanguageChange\">-->\r\n<!-- <div class=\"layout-navbars-breadcrumb-user-icon\">-->\r\n<!-- <i class=\"iconfont\" :class=\"disabledI18n === 'en' ? 'icon-fuhao-yingwen' : 'icon-fuhao-zhongwen'\" :title=\"$t('message.user.title1')\"></i>-->\r\n<!-- </div>-->\r\n<!-- <template #dropdown>-->\r\n<!-- <el-dropdown-menu>-->\r\n<!-- <el-dropdown-item command=\"zh-cn\" :disabled=\"disabledI18n === 'zh-cn'\">简体中文</el-dropdown-item>-->\r\n<!-- <el-dropdown-item command=\"en\" :disabled=\"disabledI18n === 'en'\">English</el-dropdown-item>-->\r\n<!-- <el-dropdown-item command=\"zh-tw\" :disabled=\"disabledI18n === 'zh-tw'\">繁體中文</el-dropdown-item>-->\r\n<!-- </el-dropdown-menu>-->\r\n<!-- </template>-->\r\n<!-- </el-dropdown>-->\r\n<!-- <div class=\"layout-navbars-breadcrumb-user-icon\" @click=\"onSearchClick\">-->\r\n<!-- <el-icon :title=\"$t('message.user.title2')\">-->\r\n<!-- <ele-Search />-->\r\n<!-- </el-icon>-->\r\n<!-- </div>-->\r\n <!-- <div class=\"layout-navbars-breadcrumb-user-icon\" @click=\"onLayoutSetingClick\">-->\r\n <!-- <i class=\"icon-skin iconfont\" :title=\"$t('message.user.title3')\"></i>-->\r\n <!-- </div>-->\r\n <!-- <div class=\"layout-navbars-breadcrumb-user-icon\">-->\r\n <!-- <el-popover placement=\"bottom\" trigger=\"click\" transition=\"el-zoom-in-top\" :width=\"300\" :persistent=\"false\">-->\r\n <!-- <template #reference>-->\r\n <!-- <el-badge :is-dot=\"true\">-->\r\n <!-- <el-icon :title=\"$t('message.user.title4')\">-->\r\n <!-- <ele-Bell />-->\r\n <!-- </el-icon>-->\r\n <!-- </el-badge>-->\r\n <!-- </template>-->\r\n <!-- <template #default>-->\r\n <!-- <UserNews />-->\r\n <!-- </template>-->\r\n <!-- </el-popover>-->\r\n <!-- </div>-->\r\n <div class=\"layout-navbars-breadcrumb-user-icon mr10\" @click=\"onScreenfullClick\">\r\n <i class=\"iconfont\" :title=\"isScreenfull ? $t('message.user.title6') : $t('message.user.title5')\" :class=\"!isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'\"></i>\r\n </div>\r\n <el-dropdown :show-timeout=\"70\" :hide-timeout=\"50\" @command=\"onHandleCommandClick\">\r\n <span class=\"layout-navbars-breadcrumb-user-link\">\r\n <img :src=\"userInfos.photo\" class=\"layout-navbars-breadcrumb-user-link-photo mr5\" />\r\n {{ userInfos.userName }}\r\n <el-icon class=\"el-icon--right\">\r\n <ele-ArrowDown />\r\n </el-icon>\r\n </span>\r\n <template #dropdown>\r\n <el-dropdown-menu>\r\n <el-dropdown-item command=\"/homeMenu\">{{ $t('message.user.dropdown1') }}</el-dropdown-item>\r\n <!-- <el-dropdown-item command=\"wareHouse\">{{ $t('message.user.dropdown6') }}</el-dropdown-item>-->\r\n<!-- <el-dropdown-item command=\"/personal\">{{ $t('message.user.dropdown2') }}</el-dropdown-item>-->\r\n <!--\t\t\t\t\t<el-dropdown-item command=\"/404\">{{ $t('message.user.dropdown3') }}</el-dropdown-item>-->\r\n <!--\t\t\t\t\t<el-dropdown-item command=\"/401\">{{ $t('message.user.dropdown4') }}</el-dropdown-item>-->\r\n <el-dropdown-item divided command=\"logOut\">{{ $t('message.user.dropdown5') }}</el-dropdown-item>\r\n </el-dropdown-menu>\r\n </template>\r\n </el-dropdown>\r\n <Search ref=\"searchRef\" />\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { ref, getCurrentInstance, computed, reactive, toRefs, onMounted, defineComponent } from 'vue';\r\nimport { useRouter } from 'vue-router';\r\nimport { ElMessageBox, ElMessage } from 'element-plus';\r\nimport screenfull from 'screenfull';\r\nimport { useI18n } from 'vue-i18n';\r\nimport { storeToRefs } from 'pinia';\r\nimport { useUserInfo } from '/@/stores/userInfo';\r\nimport { useThemeConfig } from '/@/stores/themeConfig';\r\nimport other from '/@/utils/other';\r\nimport { Session, Local } from '/@/utils/storage';\r\nimport UserNews from '/@/layout/navBars/breadcrumb/userNews.vue';\r\nimport Search from '/@/layout/navBars/breadcrumb/search.vue';\r\nimport { useLoginApi } from '/@/api/login';\r\nimport { useMenuApi } from '/@/api/systemManage/menu/index';\r\n\r\nconst menuApi = useMenuApi();\r\nimport { backEndComponent, getBackEndControlRoutes, initBackEndControlRoutes, setAddRoute, setFilterMenuAndCacheTagsViewRoutes } from '../../../router/backEnd';\r\nimport { NextLoading } from '/@/utils/loading';\r\nimport { useRequestOldRoutes } from '/@/stores/requestOldRoutes';\r\nimport { dynamicRoutes } from '/@/router/route';\r\n\r\nexport default defineComponent({\r\n name: 'layoutBreadcrumbUser',\r\n components: { UserNews, Search },\r\n setup() {\r\n const { t } = useI18n();\r\n const { proxy } = <any>getCurrentInstance();\r\n const router = useRouter();\r\n const stores = useUserInfo();\r\n const storesThemeConfig = useThemeConfig();\r\n const { userInfos } = storeToRefs(stores);\r\n const { themeConfig } = storeToRefs(storesThemeConfig);\r\n const searchRef = ref();\r\n const state = reactive({\r\n isScreenfull: false,\r\n disabledI18n: 'zh-cn',\r\n disabledSize: 'large',\r\n systemName: ''\r\n });\r\n // 设置分割样式\r\n const layoutUserFlexNum = computed(() => {\r\n let num: string | number = '';\r\n const { layout, isClassicSplitMenu } = themeConfig.value;\r\n const layoutArr: string[] = ['defaults', 'columns'];\r\n if (layoutArr.includes(layout) || (layout === 'classic' && !isClassicSplitMenu)) num = '1';\r\n else num = '';\r\n return num;\r\n });\r\n // 全屏点击时\r\n const onScreenfullClick = () => {\r\n if (!screenfull.isEnabled) {\r\n ElMessage.warning('暂不不支持全屏');\r\n return false;\r\n }\r\n screenfull.toggle();\r\n screenfull.on('change', () => {\r\n if (screenfull.isFullscreen) state.isScreenfull = true;\r\n else state.isScreenfull = false;\r\n });\r\n };\r\n // 布局配置 icon 点击时\r\n const onLayoutSetingClick = () => {\r\n proxy.mittBus.emit('openSetingsDrawer');\r\n };\r\n // 下拉菜单点击时\r\n const onHandleCommandClick = (path: string) => {\r\n if (path === 'logOut') {\r\n ElMessageBox({\r\n closeOnClickModal: false,\r\n closeOnPressEscape: false,\r\n title: t('message.user.logOutTitle'),\r\n message: t('message.user.logOutMessage'),\r\n showCancelButton: true,\r\n confirmButtonText: t('message.user.logOutConfirm'),\r\n cancelButtonText: t('message.user.logOutCancel'),\r\n buttonSize: 'default',\r\n beforeClose: (action, instance, done) => {\r\n if (action === 'confirm') {\r\n instance.confirmButtonLoading = true;\r\n instance.confirmButtonText = t('message.user.logOutExit');\r\n setTimeout(() => {\r\n done();\r\n setTimeout(() => {\r\n instance.confirmButtonLoading = false;\r\n }, 300);\r\n }, 700);\r\n } else {\r\n done();\r\n }\r\n }\r\n })\r\n .then(async () => {\r\n let res = await useLoginApi().signOut();\r\n if (res.data.code === '200') {\r\n Session.clear(); // 清除缓存/token等\r\n // 使用 reload 时,不需要调用 resetRoute() 重置路由\r\n window.location.reload();\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n })\r\n .catch(() => {});\r\n } else if (path === 'wareHouse') {\r\n window.open('https://gitee.com/lyt-top/vue-next-admin');\r\n } else {\r\n router.push(path);\r\n }\r\n };\r\n // 菜单搜索点击\r\n const onSearchClick = () => {\r\n searchRef.value.openSearch();\r\n };\r\n // 组件大小改变\r\n const onComponentSizeChange = (size: string) => {\r\n Local.remove('themeConfig');\r\n themeConfig.value.globalComponentSize = size;\r\n Local.set('themeConfig', themeConfig.value);\r\n initComponentSize();\r\n window.location.reload();\r\n };\r\n // 语言切换\r\n const onLanguageChange = (lang: string) => {\r\n Local.remove('themeConfig');\r\n themeConfig.value.globalI18n = lang;\r\n Local.set('themeConfig', themeConfig.value);\r\n proxy.$i18n.locale = lang;\r\n initI18n();\r\n other.useTitle();\r\n };\r\n // 设置 element plus 组件的国际化\r\n const setI18nConfig = (locale: string) => {\r\n proxy.mittBus.emit('getI18nConfig', proxy.$i18n.messages[locale]);\r\n };\r\n // 初始化言语国际化\r\n const initI18n = () => {\r\n switch (Local.get('themeConfig').globalI18n) {\r\n case 'zh-cn':\r\n state.disabledI18n = 'zh-cn';\r\n setI18nConfig('zh-cn');\r\n break;\r\n case 'en':\r\n state.disabledI18n = 'en';\r\n setI18nConfig('en');\r\n break;\r\n case 'zh-tw':\r\n state.disabledI18n = 'zh-tw';\r\n setI18nConfig('zh-tw');\r\n break;\r\n }\r\n };\r\n // 初始化全局组件大小\r\n const initComponentSize = () => {\r\n switch (Local.get('themeConfig').globalComponentSize) {\r\n case 'large':\r\n state.disabledSize = 'large';\r\n break;\r\n case 'default':\r\n state.disabledSize = 'default';\r\n break;\r\n case 'small':\r\n state.disabledSize = 'small';\r\n break;\r\n }\r\n };\r\n\r\n const getSysName = async()=>{\r\n if (window.nextLoading === undefined) NextLoading.start();\r\n if (!Session.get('token')) return false;\r\n const res = await menuApi.getMenuAdmin(Session.get('projectId') === null ? '' : Session.get('projectId'));\r\n if(res.data.code === '200'){\r\n state.systemName = res.data.data[1].project.projectName;\r\n console.log(state.systemName)\r\n }else{\r\n console.log('有问题')\r\n }\r\n }\r\n const backToMenu=()=>{\r\n router.push({ path: 'homeMenu' })\r\n }\r\n // 页面加载时\r\n onMounted(() => {\r\n if (Local.get('themeConfig')) {\r\n initI18n();\r\n initComponentSize();\r\n }\r\n getSysName()\r\n });\r\n return {\r\n userInfos,\r\n backToMenu,\r\n onLayoutSetingClick,\r\n onHandleCommandClick,\r\n onScreenfullClick,\r\n onSearchClick,\r\n onComponentSizeChange,\r\n onLanguageChange,\r\n searchRef,\r\n layoutUserFlexNum,\r\n ...toRefs(state)\r\n };\r\n }\r\n});\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.layout-navbars-breadcrumb-user {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n\r\n .logo{\r\n height: 50px;\r\n padding: 5px 10px;\r\n display: flex;\r\n align-items: center;\r\n overflow: hidden;\r\n box-sizing: border-box;\r\n img{\r\n height: 100%;\r\n }\r\n }\r\n &-link {\r\n height: 100%;\r\n display: flex;\r\n align-items: center;\r\n white-space: nowrap;\r\n &-photo {\r\n width: 25px;\r\n height: 25px;\r\n border-radius: 100%;\r\n }\r\n }\r\n &-icon {\r\n padding: 0 10px;\r\n cursor: pointer;\r\n color: var(--next-bg-topBarColor);\r\n height: 50px;\r\n line-height: 50px;\r\n display: flex;\r\n align-items: center;\r\n &:hover {\r\n background: var(--next-color-user-hover);\r\n i {\r\n display: inline-block;\r\n animation: logoAnimation 0.3s ease-in-out;\r\n }\r\n }\r\n }\r\n ::v-deep(.el-dropdown) {\r\n color: var(--next-bg-topBarColor);\r\n }\r\n ::v-deep(.el-badge) {\r\n height: 40px;\r\n line-height: 40px;\r\n display: flex;\r\n align-items: center;\r\n }\r\n ::v-deep(.el-badge__content.is-fixed) {\r\n top: 12px;\r\n }\r\n .backBtn{\r\n font-size: 16px;\r\n cursor: pointer;\r\n margin-right: 20px;\r\n\r\n &:hover{\r\n color: #409eff;\r\n font-weight: bolder;\r\n }\r\n }\r\n}\r\n</style>\r\n +-Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +-<+>UTF-8 +-=================================================================== +-diff --git a/src/layout/navBars/breadcrumb/user.vue b/src/layout/navBars/breadcrumb/user.vue +---- a/src/layout/navBars/breadcrumb/user.vue (revision b37d9a1f4f39fb04f48a63d11d759c673e5f4d6a) +-+++ b/src/layout/navBars/breadcrumb/user.vue (date 1660216734138) +-@@ -1,80 +1,80 @@ +- <template> +- <div class="layout-navbars-breadcrumb-user pr15" :style="{ flex: layoutUserFlexNum }"> +- <div class="logo"> +-- <img src="../../../assets/menu/companyLogo.jpg" /> +-+ <img src="../../../assets/menu/companyLogo.png" /> +- <span style="font-size: 16px; color: #333; font-weight: bolder"> | {{ systemName }}</span> +- </div> +-- <div style="display: flex;align-items:center;padding-right: 5px"> +-- <div @click="backToMenu()" class="backBtn">返回首页</div> +-- <el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onComponentSizeChange"> +-- <div class="layout-navbars-breadcrumb-user-icon"> +-- <i class="iconfont icon-ziti" :title="$t('message.user.title0')"></i> +-- </div> +-- <template #dropdown> +-- <el-dropdown-menu> +-- <el-dropdown-item command="large" :disabled="disabledSize === 'large'">{{ $t('message.user.dropdownLarge') }}</el-dropdown-item> +-- <el-dropdown-item command="default" :disabled="disabledSize === 'default'">{{ $t('message.user.dropdownDefault') }}</el-dropdown-item> +-- <el-dropdown-item command="small" :disabled="disabledSize === 'small'">{{ $t('message.user.dropdownSmall') }}</el-dropdown-item> +-- </el-dropdown-menu> +-- </template> +-- </el-dropdown> +--<!-- <el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onLanguageChange">--> +--<!-- <div class="layout-navbars-breadcrumb-user-icon">--> +--<!-- <i class="iconfont" :class="disabledI18n === 'en' ? 'icon-fuhao-yingwen' : 'icon-fuhao-zhongwen'" :title="$t('message.user.title1')"></i>--> +--<!-- </div>--> +--<!-- <template #dropdown>--> +--<!-- <el-dropdown-menu>--> +--<!-- <el-dropdown-item command="zh-cn" :disabled="disabledI18n === 'zh-cn'">简体中文</el-dropdown-item>--> +--<!-- <el-dropdown-item command="en" :disabled="disabledI18n === 'en'">English</el-dropdown-item>--> +--<!-- <el-dropdown-item command="zh-tw" :disabled="disabledI18n === 'zh-tw'">繁體中文</el-dropdown-item>--> +--<!-- </el-dropdown-menu>--> +--<!-- </template>--> +--<!-- </el-dropdown>--> +--<!-- <div class="layout-navbars-breadcrumb-user-icon" @click="onSearchClick">--> +--<!-- <el-icon :title="$t('message.user.title2')">--> +--<!-- <ele-Search />--> +--<!-- </el-icon>--> +--<!-- </div>--> +-- <!-- <div class="layout-navbars-breadcrumb-user-icon" @click="onLayoutSetingClick">--> +-- <!-- <i class="icon-skin iconfont" :title="$t('message.user.title3')"></i>--> +-- <!-- </div>--> +-- <!-- <div class="layout-navbars-breadcrumb-user-icon">--> +-- <!-- <el-popover placement="bottom" trigger="click" transition="el-zoom-in-top" :width="300" :persistent="false">--> +-- <!-- <template #reference>--> +-- <!-- <el-badge :is-dot="true">--> +-- <!-- <el-icon :title="$t('message.user.title4')">--> +-- <!-- <ele-Bell />--> +-- <!-- </el-icon>--> +-- <!-- </el-badge>--> +-- <!-- </template>--> +-- <!-- <template #default>--> +-- <!-- <UserNews />--> +-- <!-- </template>--> +-- <!-- </el-popover>--> +-- <!-- </div>--> +-- <div class="layout-navbars-breadcrumb-user-icon mr10" @click="onScreenfullClick"> +-- <i class="iconfont" :title="isScreenfull ? $t('message.user.title6') : $t('message.user.title5')" :class="!isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'"></i> +-- </div> +-- <el-dropdown :show-timeout="70" :hide-timeout="50" @command="onHandleCommandClick"> +-- <span class="layout-navbars-breadcrumb-user-link"> +-- <img :src="userInfos.photo" class="layout-navbars-breadcrumb-user-link-photo mr5" /> +-- {{ userInfos.userName }} +-- <el-icon class="el-icon--right"> +-- <ele-ArrowDown /> +-- </el-icon> +-- </span> +-- <template #dropdown> +-- <el-dropdown-menu> +-- <el-dropdown-item command="/homeMenu">{{ $t('message.user.dropdown1') }}</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>--> +-- <!-- <el-dropdown-item command="/401">{{ $t('message.user.dropdown4') }}</el-dropdown-item>--> +-- <el-dropdown-item divided command="logOut">{{ $t('message.user.dropdown5') }}</el-dropdown-item> +-- </el-dropdown-menu> +-- </template> +-- </el-dropdown> +-- <Search ref="searchRef" /> +-+ <div style="display: flex; align-items: center; padding-right: 5px"> +-+ <div @click="backToMenu()" class="backBtn">返回首页</div> +-+ <el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onComponentSizeChange"> +-+ <div class="layout-navbars-breadcrumb-user-icon"> +-+ <i class="iconfont icon-ziti" :title="$t('message.user.title0')"></i> +-+ </div> +-+ <template #dropdown> +-+ <el-dropdown-menu> +-+ <el-dropdown-item command="large" :disabled="disabledSize === 'large'">{{ $t('message.user.dropdownLarge') }}</el-dropdown-item> +-+ <el-dropdown-item command="default" :disabled="disabledSize === 'default'">{{ $t('message.user.dropdownDefault') }}</el-dropdown-item> +-+ <el-dropdown-item command="small" :disabled="disabledSize === 'small'">{{ $t('message.user.dropdownSmall') }}</el-dropdown-item> +-+ </el-dropdown-menu> +-+ </template> +-+ </el-dropdown> +-+ <!-- <el-dropdown :show-timeout="70" :hide-timeout="50" trigger="click" @command="onLanguageChange">--> +-+ <!-- <div class="layout-navbars-breadcrumb-user-icon">--> +-+ <!-- <i class="iconfont" :class="disabledI18n === 'en' ? 'icon-fuhao-yingwen' : 'icon-fuhao-zhongwen'" :title="$t('message.user.title1')"></i>--> +-+ <!-- </div>--> +-+ <!-- <template #dropdown>--> +-+ <!-- <el-dropdown-menu>--> +-+ <!-- <el-dropdown-item command="zh-cn" :disabled="disabledI18n === 'zh-cn'">简体中文</el-dropdown-item>--> +-+ <!-- <el-dropdown-item command="en" :disabled="disabledI18n === 'en'">English</el-dropdown-item>--> +-+ <!-- <el-dropdown-item command="zh-tw" :disabled="disabledI18n === 'zh-tw'">繁體中文</el-dropdown-item>--> +-+ <!-- </el-dropdown-menu>--> +-+ <!-- </template>--> +-+ <!-- </el-dropdown>--> +-+ <!-- <div class="layout-navbars-breadcrumb-user-icon" @click="onSearchClick">--> +-+ <!-- <el-icon :title="$t('message.user.title2')">--> +-+ <!-- <ele-Search />--> +-+ <!-- </el-icon>--> +-+ <!-- </div>--> +-+ <!-- <div class="layout-navbars-breadcrumb-user-icon" @click="onLayoutSetingClick">--> +-+ <!-- <i class="icon-skin iconfont" :title="$t('message.user.title3')"></i>--> +-+ <!-- </div>--> +-+ <!-- <div class="layout-navbars-breadcrumb-user-icon">--> +-+ <!-- <el-popover placement="bottom" trigger="click" transition="el-zoom-in-top" :width="300" :persistent="false">--> +-+ <!-- <template #reference>--> +-+ <!-- <el-badge :is-dot="true">--> +-+ <!-- <el-icon :title="$t('message.user.title4')">--> +-+ <!-- <ele-Bell />--> +-+ <!-- </el-icon>--> +-+ <!-- </el-badge>--> +-+ <!-- </template>--> +-+ <!-- <template #default>--> +-+ <!-- <UserNews />--> +-+ <!-- </template>--> +-+ <!-- </el-popover>--> +-+ <!-- </div>--> +-+ <div class="layout-navbars-breadcrumb-user-icon mr10" @click="onScreenfullClick"> +-+ <i class="iconfont" :title="isScreenfull ? $t('message.user.title6') : $t('message.user.title5')" :class="!isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'"></i> +-+ </div> +-+ <el-dropdown :show-timeout="70" :hide-timeout="50" @command="onHandleCommandClick"> +-+ <span class="layout-navbars-breadcrumb-user-link"> +-+ <img :src="userInfos.photo" class="layout-navbars-breadcrumb-user-link-photo mr5" /> +-+ {{ userInfos.userName }} +-+ <el-icon class="el-icon--right"> +-+ <ele-ArrowDown /> +-+ </el-icon> +-+ </span> +-+ <template #dropdown> +-+ <el-dropdown-menu> +-+ <el-dropdown-item command="/homeMenu">{{ $t('message.user.dropdown1') }}</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>--> +-+ <!-- <el-dropdown-item command="/401">{{ $t('message.user.dropdown4') }}</el-dropdown-item>--> +-+ <el-dropdown-item divided command="logOut">{{ $t('message.user.dropdown5') }}</el-dropdown-item> +-+ </el-dropdown-menu> +-+ </template> +-+ </el-dropdown> +-+ <Search ref="searchRef" /> +- </div> +- </div> +- </template> +-@@ -248,27 +248,27 @@ +- } +- }; +- +-- const getSysName = async()=>{ +-+ const getSysName = async () => { +- if (window.nextLoading === undefined) NextLoading.start(); +- if (!Session.get('token')) return false; +- const res = await menuApi.getMenuAdmin(Session.get('projectId') === null ? '' : Session.get('projectId')); +-- if(res.data.code === '200'){ +-+ if (res.data.code === '200') { +- state.systemName = res.data.data[1].project.projectName; +-- console.log(state.systemName) +-- }else{ +-- console.log('有问题') +-+ console.log(state.systemName); +-+ } else { +-+ console.log('有问题'); +- } +-- } +-- const backToMenu=()=>{ +-- router.push({ path: 'homeMenu' }) +-- } +-+ }; +-+ const backToMenu = () => { +-+ router.push({ path: 'homeMenu' }); +-+ }; +- // 页面加载时 +- onMounted(() => { +- if (Local.get('themeConfig')) { +- initI18n(); +- initComponentSize(); +- } +-- getSysName() +-+ getSysName(); +- }); +- return { +- userInfos, +-@@ -293,14 +293,14 @@ +- align-items: center; +- justify-content: space-between; +- +-- .logo{ +-+ .logo { +- height: 50px; +- padding: 5px 10px; +- display: flex; +- align-items: center; +- overflow: hidden; +- box-sizing: border-box; +-- img{ +-+ img { +- height: 100%; +- } +- } +-@@ -343,12 +343,12 @@ +- ::v-deep(.el-badge__content.is-fixed) { +- top: 12px; +- } +-- .backBtn{ +-+ .backBtn { +- font-size: 16px; +- cursor: pointer; +- margin-right: 20px; +- +-- &:hover{ +-+ &:hover { +- color: #409eff; +- font-weight: bolder; +- } +Index: src/utils/request.ts +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>import axios from 'axios';\r\nimport { ElMessage, ElMessageBox } from 'element-plus';\r\nimport JSONbig from 'json-bigint';\r\nimport Cookies from 'js-cookie';\r\nimport {useLoginApi} from \"/@/api/login\";\r\nimport { Session, } from '/@/utils/storage';\r\n\r\n// var jsonBig = require('json-bigint')({ \"storeAsString\": true });\r\n// 配置新建一个 axios 实例\r\nconst service = axios.create({\r\n // baseURL: import.meta.env.VITE_API_URL as any,\r\n timeout: 50000,\r\n headers: { 'Content-Type': 'application/json' }\r\n});\r\n\r\nservice.interceptors.request.use(\r\n (config) => {\r\n for (let key in config.data) {\r\n if (config.data[key] == '' && config.data[key] !== 0) {\r\n config.data[key] = null;\r\n }\r\n }\r\n if (Cookies.get('token')) {\r\n (<any>config.headers).common['Authorization'] = `${Cookies.get('token')}`;\r\n (<any>config.headers).common['uid'] = `${Cookies.get('uid')}`;\r\n }\r\n return config;\r\n },\r\n (error) => {\r\n // 对请求错误做些什么\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nservice.defaults.transformResponse = [\r\n function (data) {\r\n try {\r\n // 正常同通过return JSON.parse(data)对数据进行转换\r\n // 但是转化完成的数据可能超出安全数据长度\r\n // 因此我们定制使用第三包来转化\r\n return JSONbig.parse(data);\r\n } catch (err) {\r\n console.log(err);\r\n // 转换失败返回一个空对象\r\n return {};\r\n }\r\n }\r\n];\r\n\r\nservice.interceptors.response.use(\r\n (response) => {\r\n // 对响应数据做点什么\r\n if (response.data.code && response.data.code === 'A0213') {\r\n ElMessage.error('用户uid不存在');\r\n Session.clear();\r\n window.location.href = '/';\r\n } else if (response.data.code && response.data.code === 'A0215') {\r\n ElMessage.error('token失效');\r\n // logOut;\r\n useLoginApi().signOut().then(()=>{\r\n Session.clear();\r\n window.location.href = '/';\r\n })\r\n }\r\n // if(response.data.code && response.data.code !== '200'){\r\n return Promise.resolve(response);\r\n // }\r\n // Session.clear()\r\n // window.location.href = '/'\r\n // return Promise.reject(response)\r\n // const res = response.data;\r\n // debugger\r\n // if (res.code && res.code !== 0) {\r\n // \t// `token` 过期或者账号已在别处登录\r\n // \tif (res.code === 401 || res.code === 4001) {\r\n // \t\tSession.clear(); // 清除浏览器全部临时缓存\r\n // \t\twindow.location.href = '/'; // 去登录页\r\n // \t\tElMessageBox.alert('你已被登出,请重新登录', '提示', {})\r\n // \t\t\t.then(() => {})\r\n // \t\t\t.catch(() => {});\r\n // }\r\n // \treturn Promise.reject(service.interceptors.response);\r\n // } else {\r\n // \treturn response.data;\r\n // }\r\n },\r\n (error) => {\r\n // 对响应错误做点什么\r\n if (error.message.indexOf('timeout') != -1) {\r\n ElMessage.error('网络超时');\r\n setTimeout(() => {\r\n // Session.clear();\r\n window.location.href = '/';\r\n }, 1000);\r\n } else if (error.message == 'Network Error') {\r\n ElMessage.error('网络连接错误');\r\n // setTimeout(() => {\r\n // Session.clear();\r\n // window.location.href = '/';\r\n // }, 1000);\r\n } else {\r\n if (error.response.data) ElMessage.error(error.response.data.error);\r\n else ElMessage.error('接口路径找不到');\r\n }\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nexport default service;\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/utils/request.ts b/src/utils/request.ts +--- a/src/utils/request.ts (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ b/src/utils/request.ts (date 1660891706579) +@@ -2,8 +2,8 @@ + import { ElMessage, ElMessageBox } from 'element-plus'; + import JSONbig from 'json-bigint'; + import Cookies from 'js-cookie'; +-import {useLoginApi} from "/@/api/login"; +-import { Session, } from '/@/utils/storage'; ++import { useLoginApi } from '/@/api/login'; ++import { Session } from '/@/utils/storage'; + + // var jsonBig = require('json-bigint')({ "storeAsString": true }); + // 配置新建一个 axios 实例 +@@ -52,15 +52,21 @@ + // 对响应数据做点什么 + if (response.data.code && response.data.code === 'A0213') { + ElMessage.error('用户uid不存在'); +- Session.clear(); +- window.location.href = '/'; ++ useLoginApi() ++ .signOut() ++ .then(() => { ++ Session.clear(); ++ window.location.href = '/'; ++ }); + } else if (response.data.code && response.data.code === 'A0215') { + ElMessage.error('token失效'); + // logOut; +- useLoginApi().signOut().then(()=>{ +- Session.clear(); +- window.location.href = '/'; +- }) ++ useLoginApi() ++ .signOut() ++ .then(() => { ++ Session.clear(); ++ window.location.href = '/'; ++ }); + } + // if(response.data.code && response.data.code !== '200'){ + return Promise.resolve(response); +@@ -89,15 +95,15 @@ + if (error.message.indexOf('timeout') != -1) { + ElMessage.error('网络超时'); + setTimeout(() => { +- // Session.clear(); ++ Session.clear(); + window.location.href = '/'; + }, 1000); + } else if (error.message == 'Network Error') { + ElMessage.error('网络连接错误'); +- // setTimeout(() => { +- // Session.clear(); +- // window.location.href = '/'; +- // }, 1000); ++ setTimeout(() => { ++ Session.clear(); ++ window.location.href = '/'; ++ }, 1000); + } else { + if (error.response.data) ElMessage.error(error.response.data.error); + else ElMessage.error('接口路径找不到'); +Index: src/views/safeKnowledge/bmgz/index.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+><template>\r\n <div class=\"home-container\">\r\n <iframe src=\"http://39.104.85.193/bmgz\"></iframe>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n name: 'safeKnowledgeSys',\r\n props: {\r\n\r\n },\r\n data(){\r\n return{\r\n\r\n }\r\n },\r\n created() {\r\n\r\n },\r\n methods:{\r\n\r\n }\r\n}\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped lang=\"scss\">\r\n .home-container{\r\n height: calc(100vh - 144px);\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n\r\n iframe{\r\n width: 100%;\r\n height: 100%;\r\n border: none;\r\n }\r\n }\r\n</style>\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/safeKnowledge/bmgz/index.vue b/src/views/safeKnowledge/bmgz/index.vue +--- a/src/views/safeKnowledge/bmgz/index.vue (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ b/src/views/safeKnowledge/bmgz/index.vue (date 1660874968843) +@@ -1,40 +1,31 @@ + <template> +- <div class="home-container"> +- <iframe src="http://39.104.85.193/bmgz"></iframe> +- </div> ++ <div class="home-container"> ++ <iframe src="http://39.104.85.193/bmgz"></iframe> ++ </div> + </template> + + <script> + export default { +- name: 'safeKnowledgeSys', +- props: { +- +- }, +- data(){ +- return{ +- +- } +- }, +- created() { +- +- }, +- methods:{ +- +- } +-} ++ name: 'safeKnowledgeSys', ++ props: {}, ++ data() { ++ return {}; ++ }, ++ created() {}, ++ methods: {} ++}; + </script> + + <!-- Add "scoped" attribute to limit CSS to this component only --> + <style scoped lang="scss"> +- .home-container{ ++.home-container { + height: calc(100vh - 144px); + box-sizing: border-box; + overflow: hidden; +- +- iframe{ +- width: 100%; +- height: 100%; +- border: none; ++ iframe { ++ width: 100%; ++ height: 100%; ++ border: none; + } +- } ++} + </style> +Index: src/views/outLink/index.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/outLink/index.vue b/src/views/outLink/index.vue +new file mode 100644 +--- /dev/null (date 1660899047297) ++++ b/src/views/outLink/index.vue (date 1660899047297) +@@ -0,0 +1,64 @@ ++<template> ++ <div class="layout-view-bg-white flex layout-view-link" :style="{ height: `calc(100vh - ${setLinkHeight}` }"> ++ <a :href="currentRouteMeta.isLink" target="_blank" rel="opener" class="flex-margin"> {{ $t(currentRouteMeta.title) }}:{{ currentRouteMeta.isLink }} </a> ++ </div> ++</template> ++ ++<script lang="ts"> ++import { defineComponent, toRefs, reactive, computed, watch, onMounted } from 'vue'; ++import { useRoute, RouteMeta } from 'vue-router'; ++import { storeToRefs } from 'pinia'; ++import { useThemeConfig } from '/@/stores/themeConfig'; ++ ++// 定义接口来定义对象的类型 ++interface LinkViewState { ++ currentRouteMeta: { ++ isLink: string; ++ title: string; ++ }; ++} ++interface LinkViewRouteMeta extends RouteMeta { ++ isLink: string; ++ title: string; ++} ++ ++export default defineComponent({ ++ name: 'index', ++ setup() { ++ const storesThemeConfig = useThemeConfig(); ++ const { themeConfig } = storeToRefs(storesThemeConfig); ++ const route = useRoute(); ++ const state = reactive<LinkViewState>({ ++ currentRouteMeta: { ++ isLink: '', ++ title: '' ++ } ++ }); ++ // 设置 link 的高度 ++ const setLinkHeight = computed(() => { ++ let { isTagsview } = themeConfig.value; ++ if (isTagsview) return `115px`; ++ else return `80px`; ++ }); ++ // 监听路由的变化,设置内容 ++ watch( ++ () => route.path, ++ () => { ++ state.currentRouteMeta = <LinkViewRouteMeta>route.meta; ++ }, ++ { ++ immediate: true ++ } ++ ); ++ ++ onMounted(() => { ++ window.open(state.currentRouteMeta.isLink as string, '_blank'); ++ }); ++ ++ return { ++ setLinkHeight, ++ ...toRefs(state) ++ }; ++ } ++}); ++</script> +Index: src/views/loginPage/component/accountLogin.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+><template>\r\n <el-form size=\"large\" class=\"login-content-form\">\r\n <el-form-item class=\"login-animation1\">\r\n <el-input type=\"text\" :placeholder=\"$t('message.account.accountPlaceholder1')\" v-model=\"ruleForm.username\" clearable autocomplete=\"off\" size=\"large\">\r\n <template #prefix>\r\n <el-icon class=\"el-input__icon\" style=\"margin-right: 20px\"><img src=\"../../../assets/loginPage/login_icon_user.png\" style=\"width: 24px; height: 24px\" /></el-icon>\r\n </template>\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item class=\"login-animation2\">\r\n <el-input :type=\"isShowPassword ? 'text' : 'password'\" :placeholder=\"$t('message.account.accountPlaceholder2')\" v-model=\"ruleForm.password\" autocomplete=\"off\" size=\"large\" @keyup.enter.native=\"onSignIn\">\r\n <template #prefix>\r\n <el-icon class=\"el-input__icon\" style=\"margin-right: 20px\"><img src=\"../../../assets/loginPage/login_icon_password.png\" style=\"width: 24px; height: 24px\" /></el-icon>\r\n </template>\r\n <template #suffix>\r\n <i class=\"iconfont el-input__icon login-content-password\" :class=\"isShowPassword ? 'icon-yincangmima' : 'icon-xianshimima'\" @click=\"isShowPassword = !isShowPassword\"> </i>\r\n </template>\r\n </el-input>\r\n </el-form-item>\r\n <el-form-item class=\"login-animation4 codeDeal\">\r\n <el-checkbox v-model=\"saveCode\" label=\"记住密码\" size=\"large\" />\r\n <span class=\"forgetCode\">忘记密码?</span>\r\n </el-form-item>\r\n <el-form-item class=\"login-animation4\">\r\n <el-button type=\"primary\" class=\"login-content-submit\" round @click=\"onSignIn\" :loading=\"loading.signIn\">\r\n <span>登录系统</span>\r\n </el-button>\r\n </el-form-item>\r\n </el-form>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { toRefs, reactive, defineComponent, computed } from 'vue';\r\nimport { useRoute, useRouter } from 'vue-router';\r\nimport { ElMessage } from 'element-plus';\r\nimport { useI18n } from 'vue-i18n';\r\nimport Cookies from 'js-cookie';\r\nimport { storeToRefs } from 'pinia';\r\nimport { useThemeConfig } from '/@/stores/themeConfig';\r\nimport { initFrontEndControlRoutes } from '/@/router/frontEnd';\r\nimport { initBackEndControlRoutes } from '/@/router/backEnd';\r\nimport { Session } from '/@/utils/storage';\r\nimport { formatAxis } from '/@/utils/formatTime';\r\nimport { NextLoading } from '/@/utils/loading';\r\nimport { useLoginApi } from '/@/api/login';\r\nimport { useUserInfo } from '/@/stores/userInfo';\r\n\r\nexport default defineComponent({\r\n name: 'accountLogin',\r\n setup() {\r\n const { t } = useI18n();\r\n const userInfo = useUserInfo();\r\n const route = useRoute();\r\n const router = useRouter();\r\n const state = reactive({\r\n isShowPassword: false,\r\n ruleForm: {\r\n username: '',\r\n password: ''\r\n },\r\n loading: {\r\n signIn: false\r\n }\r\n });\r\n // 时间获取\r\n const currentTime = computed(() => {\r\n return formatAxis(new Date());\r\n });\r\n // 登录\r\n const onSignIn = async () => {\r\n state.loading.signIn = true;\r\n // 存储 token 到浏览器缓存\r\n let res = await useLoginApi().signIn(state.ruleForm);\r\n if (res.data.code === '200') {\r\n await userInfo.setUserInfos(res.data.data);\r\n Cookies.set('token', res.data.data.accessToken);\r\n Cookies.set('projectId', '');\r\n Cookies.set('uid', res.data.data.uid);\r\n // Session.set('token', res.data.data.accessToken);\r\n // Session.set('projectId', '');\r\n // Session.set('uid', res.data.data.uid);\r\n await signInSuccess();\r\n } else {\r\n state.loading.signIn = false;\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n state.loading.signIn = false;\r\n // Session.set('token', Math.random().toString(36).substr(0));\r\n // // 模拟数据,对接接口时,记得删除多余代码及对应依赖的引入。用于 `/src/stores/userInfo.ts` 中不同用户登录判断(模拟数据)\r\n // Cookies.set('userName', state.ruleForm.username);\r\n // if (!themeConfig.value.isRequestRoutes) {\r\n // \t// 前端控制路由,2、请注意执行顺序\r\n // \tawait initFrontEndControlRoutes();\r\n // \tsignInSuccess();\r\n // } else {\r\n // \t// 模拟后端控制路由,isRequestRoutes 为 true,则开启后端控制路由\r\n // \t// 添加完动态路由,再进行 router 跳转,否则可能报错 No match found for location with path \"/\"\r\n // \tawait initBackEndControlRoutes();\r\n // \t// 执行完 initBackEndControlRoutes,再执行 signInSuccess\r\n // \tsignInSuccess();\r\n // }\r\n };\r\n // 登录成功后的跳转\r\n const signInSuccess = async () => {\r\n // 初始化登录成功时间问候语\r\n let currentTimeInfo = currentTime.value;\r\n // 登录成功,跳到转首页\r\n // 如果是复制粘贴的路径,非首页/登录页,那么登录成功后重定向到对应的路径中\r\n if (route.query?.redirect) {\r\n router.push('/newMenu');\r\n // router.push({\r\n // \tpath: <string>route.query?.redirect,\r\n // \tquery: Object.keys(<string>route.query?.params).length > 0 ? JSON.parse(<string>route.query?.params) : '',\r\n // });\r\n } else {\r\n router.push('/loginPage');\r\n }\r\n state.loading.signIn = true;\r\n const signInText = t('message.signInText');\r\n ElMessage.success(`${currentTimeInfo},${signInText}`);\r\n // 登录成功提示\r\n // 关闭 loading\r\n // 添加 loading,防止第一次进入界面时出现短暂空白\r\n // NextLoading.start();\r\n };\r\n return {\r\n onSignIn,\r\n ...toRefs(state)\r\n };\r\n }\r\n});\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n.login-content-form {\r\n margin-top: 40px;\r\n width: 100%;\r\n\r\n .el-input::v-deep .el-input__wrapper {\r\n height: 56px;\r\n border-radius: 28px;\r\n padding: 0 30px;\r\n background: #f2f2f2;\r\n &:focus-within {\r\n border: 1px solid #2053d7;\r\n }\r\n }\r\n @for $i from 1 through 4 {\r\n .login-animation#{$i} {\r\n opacity: 0;\r\n animation-name: error-num;\r\n animation-duration: 0.5s;\r\n animation-fill-mode: forwards;\r\n animation-delay: calc($i/10) + s;\r\n }\r\n }\r\n .codeDeal::v-deep .el-form-item__content {\r\n display: flex;\r\n justify-content: space-between;\r\n\r\n .forgetCode {\r\n color: #2053d7;\r\n cursor: pointer;\r\n }\r\n }\r\n .login-content-password {\r\n width: 100%;\r\n display: inline-block;\r\n cursor: pointer;\r\n &:hover {\r\n color: #909399;\r\n }\r\n }\r\n .login-content-code {\r\n width: 100%;\r\n padding: 0;\r\n font-weight: bold;\r\n letter-spacing: 5px;\r\n }\r\n .login-content-submit {\r\n width: 100%;\r\n height: 56px;\r\n font-size: 16px;\r\n border-radius: 28px;\r\n letter-spacing: 4px;\r\n font-weight: 300;\r\n margin-top: 15px;\r\n background: #2053d7;\r\n transition: 0.3s;\r\n &:hover {\r\n letter-spacing: 6px;\r\n background: #4e7aec;\r\n }\r\n }\r\n}\r\n</style>\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/loginPage/component/accountLogin.vue b/src/views/loginPage/component/accountLogin.vue +--- a/src/views/loginPage/component/accountLogin.vue (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ b/src/views/loginPage/component/accountLogin.vue (date 1660870867919) +@@ -109,15 +109,16 @@ + let currentTimeInfo = currentTime.value; + // 登录成功,跳到转首页 + // 如果是复制粘贴的路径,非首页/登录页,那么登录成功后重定向到对应的路径中 +- if (route.query?.redirect) { +- router.push('/newMenu'); +- // router.push({ +- // path: <string>route.query?.redirect, +- // query: Object.keys(<string>route.query?.params).length > 0 ? JSON.parse(<string>route.query?.params) : '', +- // }); +- } else { +- router.push('/loginPage'); +- } ++ // if (route.query?.redirect) { ++ // debugger; ++ router.push('/newMenu'); ++ // router.push({ ++ // path: <string>route.query?.redirect, ++ // query: Object.keys(<string>route.query?.params).length > 0 ? JSON.parse(<string>route.query?.params) : '', ++ // }); ++ // } else { ++ // router.push('/loginPage'); ++ // } + state.loading.signIn = true; + const signInText = t('message.signInText'); + ElMessage.success(`${currentTimeInfo},${signInText}`); +Index: src/views/intellectInspect/inspectIndex/components/inspectRecordDialog.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+><template>\r\n <div class=\"system-add-menu-container\">\r\n <el-dialog v-model=\"ifShowInspectTaskDialog\" :title=\"title\" width=\"60%\">\r\n <el-form :model=\"inspectTaskForm\" label-width=\"120px\" ref=\"inspectTaskFormRef\">\r\n <el-row>\r\n <el-col :span=\"12\" style=\"margin-bottom: 20px\">\r\n <el-form-item label=\"任务名称\" prop=\"unitName\">\r\n <el-input v-model=\"inspectTaskForm.taskName\" :disabled=\"!inspectPointConfirm\" class=\"input-add\" placeholder=\"请填写任务名称\"> </el-input>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\" style=\"margin-bottom: 20px\">\r\n <el-form-item label=\"任务类型\" prop=\"taskType\">\r\n <el-select v-model=\"inspectTaskForm.taskType\" :disabled=\"!inspectPointConfirm\" class=\"input-add\" placeholder=\"请选择任务类型\">\r\n <el-option v-for=\"item in workTypeList\" :key=\"item.id\" :value=\"item.id\" :label=\"item.name\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\" style=\"margin-bottom: 20px\">\r\n <el-form-item label=\"巡检部门\" prop=\"execDepId\">\r\n <el-cascader @change=\"giveClassGroup\" :disabled=\"!inspectPointConfirm\" placeholder=\"请选择巡检部门\" :options=\"departmentList\" :props=\"{ emitPath: false, checkStrictly: true, value: 'depId', label: 'depName' }\" clearable filterable class=\"input-add\" v-model=\"inspectTaskForm.execDepId\"> </el-cascader>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\" style=\"margin-bottom: 20px\">\r\n <el-form-item label=\"巡检班组\" prop=\"execClassgroupId\">\r\n <el-select v-model=\"inspectTaskForm.execClassgroupId\" :disabled=\"!inspectPointConfirm\" placeholder=\"请选择巡检班组\" class=\"input-add\">\r\n <el-option v-for=\"item in classGroup\" :key=\"item.id\" :value=\"item.id\" :label=\"item.groupName\"></el-option>\r\n </el-select>\r\n </el-form-item>\r\n </el-col>\r\n <el-col :span=\"12\" style=\"margin-bottom: 20px\">\r\n <el-form-item label=\"任务开始时间\" prop=\"startTime\">\r\n <el-date-picker v-model=\"inspectTaskForm.startTime\" :disabled=\"!inspectPointConfirm\" placeholder=\"请选择任务开始时间\" type=\"datetime\" format=\"YYYY/MM/DD HH:mm:ss\" value-format=\"YYYY-MM-DD HH:mm:ss\" class=\"input-add\" />\r\n </el-form-item>\r\n </el-col>\r\n </el-row>\r\n\r\n <div class=\"checkUnit-point\">\r\n <el-tabs class=\"active\" v-model=\"activeName\">\r\n <el-tab-pane label=\"巡检链\" name=\"inspectChain\">\r\n <el-table :data=\"inspectTaskForm.points\" fit style=\"width: 100%\">\r\n <el-table-column type=\"index\" label=\"序号\" width=\"60\" />\r\n <el-table-column prop=\"region\" label=\"巡检点\" show-overflow-tooltip align=\"center\"></el-table-column>\r\n <el-table-column prop=\"quotaContent\" label=\"指标作业\" show-overflow-tooltip align=\"center\"></el-table-column>\r\n <el-table-column prop=\"secondReferenceResult\" label=\"参数值\" show-overflow-tooltip align=\"center\">\r\n <template #default=\"scope\">\r\n <div :style=\"{color: scope.row.reportResult==1?'#ff0000':'#409eff'}\">\r\n {{scope.row.dataReportType==1?'无':scope.row.secondReferenceResult}}\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <el-table-column prop=\"quotaUnit\" label=\"指标单位\" show-overflow-tooltip align=\"center\"></el-table-column>\r\n <el-table-column prop=\"reportResult\" label=\"结果\" show-overflow-tooltip align=\"center\">\r\n <template #default=\"scope\">\r\n <div :style=\"{color: scope.row.reportResult==1?'#ff0000':'#409eff'}\">\r\n {{scope.row.reportResult==0?'正常':(scope.row.reportResult==1?'异常':'无')}}\r\n </div>\r\n </template>\r\n </el-table-column>\r\n <!-- <el-table-column label=\"操作\" width=\"150\" align=\"center\">-->\r\n <!-- <template #default=\"scope\">-->\r\n <!-- <el-button size=\"small\" text type=\"danger\" @click=\"onDelCheckUnit(scope.$index, scope.row)\">删除</el-button>-->\r\n <!-- </template>-->\r\n <!-- </el-table-column>-->\r\n </el-table>\r\n </el-tab-pane>\r\n </el-tabs>\r\n </div>\r\n <div align=\"right\" v-show=\"inspectPointConfirm\">\r\n <el-button type=\"warning\" @click=\"inspectPointDialog = false\" size=\"default\" plain>取消</el-button>\r\n <el-button type=\"primary\" @click=\"submitInspectTask()\" size=\"default\">确认</el-button>\r\n </div>\r\n </el-form>\r\n </el-dialog>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { reactive, toRefs, ref } from 'vue';\r\nimport { RFIDApi } from '/@/api/intellectInspectSystem/RFID';\r\nimport { ElMessage } from 'element-plus/es';\r\nimport { inspectTaskApi } from '/@/api/intellectInspectSystem/inspectTask';\r\nimport { facilityAreaApi } from '/@/api/intellectInspectSystem/facilityAreaManage';\r\nimport { inspectRecordApi } from '/@/api/intellectInspectSystem/inspectRecord';\r\ninterface dataState {\r\n title: string;\r\n pointTitle: string;\r\n activeName: string;\r\n inspectPointConfirm: boolean;\r\n inspectPointDialog: boolean;\r\n ifShowInspectTaskDialog: boolean;\r\n inspectPointForm: inspectPointForm;\r\n inspectTaskForm: {\r\n execClassgroupId: number | null;\r\n execDepId: number | null;\r\n id: number | null;\r\n startTime: string | null;\r\n taskName: string | null;\r\n taskType: number | null;\r\n validTime: string | null;\r\n points: Array<inspectPointForm>;\r\n };\r\n workTypeList: [];\r\n departmentList: [];\r\n timeList: [];\r\n dataReportTypeList: Array<dataReport>;\r\n firstReferenceValueList: Array<dataReport>;\r\n secondReferenceSignList: Array<dataReport>;\r\n thirdReferenceSignList: Array<dataReport>;\r\n classGroupList: Array<classGroup>;\r\n classGroup: Array<classGroup>;\r\n quotaList: Array<quota>;\r\n inspectPointAllList: Array<inspectPointAllState>;\r\n}\r\ninterface inspectPointAllState {\r\n id: number;\r\n code: string;\r\n regionId: number;\r\n rfidId: number;\r\n}\r\ninterface classGroup {\r\n depId: number;\r\n}\r\ninterface dataReport {\r\n id: number;\r\n name: string;\r\n}\r\ninterface quota {\r\n id: number;\r\n type: string;\r\n unit: string;\r\n}\r\ninterface inspectPointForm {\r\n id: number | null;\r\n unitId: number | null;\r\n unitUuid: string | null;\r\n pointId: number | null;\r\n pointUuid: string | null;\r\n regionId: number | null;\r\n regionUuid: string | null;\r\n rfidId: number | null;\r\n quotaId: number | null;\r\n quotaUnit: number | null;\r\n reportResult: number | null\r\n secondReferenceResult: number |null;\r\n execSequence: number | null;\r\n dataReportType: number | null;\r\n firstReferenceValue: number | null;\r\n secondReferenceSign: number | null;\r\n secondReferenceValue: number | null;\r\n thirdReferenceSign: number | null;\r\n thirdReferenceValue: number | null;\r\n}\r\nexport default {\r\n name: 'inspectTaskDialog',\r\n setup(props: any, context: any) {\r\n const inspectTaskFormRef = ref();\r\n const data = reactive<dataState>({\r\n title: '',\r\n pointTitle: '',\r\n activeName: 'inspectChain',\r\n inspectPointConfirm: false,\r\n inspectPointDialog: false,\r\n ifShowInspectTaskDialog: false,\r\n inspectPointForm: {\r\n id: null,\r\n unitId: null,\r\n unitUuid: null,\r\n pointId: null,\r\n pointUuid: null,\r\n regionId: null,\r\n regionUuid: null,\r\n rfidId: null,\r\n quotaId: null,\r\n quotaUnit: null,\r\n execSequence: null,\r\n secondReferenceResult:null,\r\n reportResult: null,\r\n dataReportType: null,\r\n firstReferenceValue: null,\r\n secondReferenceSign: null,\r\n secondReferenceValue: null,\r\n thirdReferenceSign: null,\r\n thirdReferenceValue: null\r\n },\r\n inspectTaskForm: {\r\n execClassgroupId: null,\r\n execDepId: null,\r\n id: null,\r\n points: [],\r\n startTime: null,\r\n taskName: null,\r\n taskType: null,\r\n validTime: null\r\n },\r\n workTypeList: [],\r\n departmentList: [],\r\n timeList: [],\r\n classGroupList: [],\r\n classGroup: [],\r\n quotaList: [],\r\n inspectPointAllList: [],\r\n dataReportTypeList: [\r\n { id: 1, name: '选择' },\r\n { id: 2, name: '填空' },\r\n { id: 3, name: '选择并填空' }\r\n ],\r\n firstReferenceValueList: [\r\n { id: 0, name: '正常' },\r\n { id: 1, name: '异常' }\r\n ],\r\n secondReferenceSignList: [\r\n { id: 1, name: '>' },\r\n { id: 2, name: '>=' }\r\n ],\r\n thirdReferenceSignList: [\r\n { id: 3, name: '<' },\r\n { id: 4, name: '<=' }\r\n ]\r\n });\r\n\r\n const openInspectPointDialog = (type: string, item: {}) => {\r\n data.inspectPointDialog = true;\r\n if (type === '新增') {\r\n data.pointTitle = '新增巡检点';\r\n data.inspectPointForm = {\r\n id: null,\r\n unitId: null,\r\n unitUuid: null,\r\n pointId: null,\r\n pointUuid: null,\r\n regionId: null,\r\n regionUuid: null,\r\n rfidId: null,\r\n quotaId: null,\r\n quotaUnit: null,\r\n reportResult: null,\r\n execSequence: null,\r\n secondReferenceResult:null,\r\n dataReportType: null,\r\n firstReferenceValue: null,\r\n secondReferenceSign: null,\r\n secondReferenceValue: null,\r\n thirdReferenceSign: null,\r\n thirdReferenceValue: null\r\n };\r\n } else {\r\n data.pointTitle = '修改巡检点';\r\n data.inspectPointForm = JSON.parse(JSON.stringify(item));\r\n }\r\n };\r\n\r\n const showInspectRecordDialog = (type: string, item: { id: number; uuid: string }, workTypeList: [], department: [], timeType: [], classGroupList: [], quotaList: [], inspectPointAllList: []) => {\r\n data.quotaList = JSON.parse(JSON.stringify(quotaList));\r\n data.timeList = JSON.parse(JSON.stringify(timeType));\r\n data.inspectPointAllList = JSON.parse(JSON.stringify(inspectPointAllList));\r\n data.workTypeList = JSON.parse(JSON.stringify(workTypeList));\r\n data.departmentList = JSON.parse(JSON.stringify(department));\r\n data.classGroupList = JSON.parse(JSON.stringify(classGroupList));\r\n data.ifShowInspectTaskDialog = true;\r\n data.inspectPointConfirm = false;\r\n data.title = '查看巡检任务';\r\n inspectRecordApi()\r\n .getInspectRecordById({ id: item.id, uuid: item.uuid })\r\n .then((res) => {\r\n if (res.data.code === '200') {\r\n data.inspectTaskForm.execDepId = res.data.data.execDepId;\r\n giveClassGroup();\r\n data.inspectTaskForm = JSON.parse(JSON.stringify(res.data.data));\r\n console.log(data.inspectTaskForm,'this data')\r\n } else {\r\n }\r\n })\r\n .catch((error) => {});\r\n };\r\n\r\n // 格式化表格数据\r\n // const toRefer =(row, column, cellValue, index)=>{\r\n // return row.secondReferenceResult==0?'正常':(row.reportResult==1?'异常':'无')\r\n // }\r\n\r\n\r\n const submitInspectPoint = async () => {\r\n if (data.title === '新增巡检任务' && data.pointTitle === '新增巡检点') {\r\n if (data.inspectTaskForm.points.length === 0) {\r\n data.inspectPointForm.execSequence = 1;\r\n } else {\r\n data.inspectPointForm.execSequence = (data.inspectTaskForm.points[data.inspectTaskForm.points.length - 1].execSequence as number) + 1;\r\n }\r\n data.inspectTaskForm.points.push(data.inspectPointForm);\r\n data.inspectPointDialog = false;\r\n } else if (data.title === '新增巡检任务' && data.pointTitle === '修改巡检点') {\r\n let result = data.inspectTaskForm.points.findIndex((item) => item.id === data.inspectPointForm.id);\r\n data.inspectTaskForm.points[result] = data.inspectPointForm;\r\n data.inspectPointDialog = false;\r\n } else if (data.title === '修改巡检任务' && data.pointTitle === '新增巡检点') {\r\n data.inspectPointForm.unitId = data.inspectTaskForm.id;\r\n if (data.inspectTaskForm.points.length === 0) {\r\n data.inspectPointForm.execSequence = 1;\r\n } else {\r\n data.inspectPointForm.execSequence = (data.inspectTaskForm.points[data.inspectTaskForm.points.length - 1].execSequence as number) + 1;\r\n }\r\n let res = await inspectTaskApi().addChainOfInspectTask(data.inspectPointForm);\r\n if (res.data.code === '200') {\r\n ElMessage({\r\n type: 'success',\r\n message: '巡检点新增成功',\r\n duration: 2000\r\n });\r\n data.inspectPointDialog = false;\r\n data.inspectTaskForm.points.push(data.inspectPointForm);\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n } else {\r\n data.inspectPointForm.unitId = data.inspectTaskForm.id;\r\n let res = await inspectTaskApi().modChainOfInspectTask(data.inspectPointForm);\r\n if (res.data.code === '200') {\r\n ElMessage({\r\n type: 'success',\r\n message: '巡检点修改成功',\r\n duration: 2000\r\n });\r\n let result = data.inspectTaskForm.points.findIndex((item) => item.id === data.inspectPointForm.id);\r\n data.inspectTaskForm.points[result] = data.inspectPointForm;\r\n data.inspectPointDialog = false;\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n }\r\n };\r\n const deleteFlow = async (index: number, item: { id: number }) => {\r\n if (data.pointTitle === '新增巡检点') {\r\n data.inspectTaskForm.points.splice(index, 1);\r\n } else {\r\n let res = await inspectTaskApi().deleteChainOfInspectTask({ id: item.id, unitId: data.inspectTaskForm.id });\r\n if (res.data.code === '200') {\r\n data.inspectTaskForm.points.splice(index, 1);\r\n ElMessage({\r\n type: 'success',\r\n message: '巡检点删除成功'\r\n });\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n }\r\n };\r\n\r\n const giveRegionAndRFID = () => {\r\n data.inspectPointForm.regionId = data.inspectPointAllList.find((item) => item.id === data.inspectPointForm.pointId)?.regionId as number;\r\n data.inspectPointForm.rfidId = data.inspectPointAllList.find((item) => item.id === data.inspectPointForm.pointId)?.rfidId as number;\r\n };\r\n\r\n const giveClassGroup = () => {\r\n data.inspectTaskForm.execClassgroupId = null;\r\n data.classGroup = data.classGroupList.filter((item) => item.depId === data.inspectTaskForm.execDepId);\r\n };\r\n\r\n const giveQuotaUnit = () => {\r\n data.inspectPointForm.quotaUnit = data.quotaList.find((item) => item.id === data.inspectPointForm.quotaId)?.unit as string;\r\n };\r\n const submitInspectTask = () => {\r\n inspectTaskFormRef.value.validate(async (valid: Boolean) => {\r\n if (valid) {\r\n if (data.title === '新增巡检任务') {\r\n let res = await inspectTaskApi().addInspectTask(data.inspectTaskForm);\r\n if (res.data.code === '200') {\r\n ElMessage({\r\n type: 'success',\r\n message: '巡检任务新增成功',\r\n duration: 2000\r\n });\r\n data.ifShowInspectTaskDialog = false;\r\n context.emit('refreshInspectTask');\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n } else {\r\n let res = await inspectTaskApi().modInspectTask(data.inspectTaskForm);\r\n if (res.data.code === '200') {\r\n ElMessage({\r\n type: 'success',\r\n message: '巡检指标修改成功',\r\n duration: 2000\r\n });\r\n data.ifShowInspectTaskDialog = false;\r\n context.emit('refreshInspectTask');\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n }\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: '请完善基本信息'\r\n });\r\n }\r\n });\r\n };\r\n\r\n return {\r\n ...toRefs(data),\r\n inspectTaskFormRef,\r\n deleteFlow,\r\n // toRefer,\r\n giveQuotaUnit,\r\n giveClassGroup,\r\n submitInspectTask,\r\n submitInspectPoint,\r\n giveRegionAndRFID,\r\n showInspectRecordDialog,\r\n openInspectPointDialog\r\n };\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n$homeNavLengh: 8;\r\n.home-container {\r\n height: calc(100vh - 144px);\r\n box-sizing: border-box;\r\n overflow: hidden;\r\n .homeCard {\r\n width: 100%;\r\n padding: 20px;\r\n box-sizing: border-box;\r\n background: #fff;\r\n border-radius: 4px;\r\n\r\n .main-card {\r\n width: 100%;\r\n height: 100%;\r\n .cardTop {\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 20px;\r\n .mainCardBtn {\r\n margin: 0;\r\n }\r\n }\r\n .pageBtn {\r\n height: 60px;\r\n display: flex;\r\n align-items: center;\r\n justify-content: right;\r\n\r\n .demo-pagination-block + .demo-pagination-block {\r\n margin-top: 10px;\r\n }\r\n .demo-pagination-block .demonstration {\r\n margin-bottom: 16px;\r\n }\r\n }\r\n }\r\n &:last-of-type {\r\n height: calc(100% - 100px);\r\n }\r\n }\r\n .el-row {\r\n display: flex;\r\n align-items: center;\r\n margin-bottom: 20px;\r\n &:last-child {\r\n margin-bottom: 0;\r\n }\r\n .grid-content {\r\n align-items: center;\r\n min-height: 36px;\r\n }\r\n\r\n .topInfo {\r\n display: flex;\r\n align-items: center;\r\n font-size: 16px;\r\n font-weight: bold;\r\n\r\n & > div {\r\n white-space: nowrap;\r\n margin-right: 20px;\r\n }\r\n }\r\n }\r\n}\r\n.stepItem {\r\n width: 100%;\r\n display: flex;\r\n align-items: flex-start;\r\n margin-bottom: 30px;\r\n margin-left: 30px;\r\n padding-bottom: 30px;\r\n border-left: 2px solid #ccc;\r\n &:first-of-type {\r\n margin-top: 30px;\r\n }\r\n &:last-of-type {\r\n margin-bottom: 0;\r\n border-left: none;\r\n }\r\n .stepNum {\r\n width: 30px;\r\n height: 30px;\r\n border-radius: 15px;\r\n box-sizing: border-box;\r\n color: #333;\r\n border: 1px solid #999;\r\n line-height: 28px;\r\n text-align: center;\r\n margin-right: 10px;\r\n margin-left: -16px;\r\n margin-top: -30px;\r\n }\r\n .stepCard {\r\n width: 100%;\r\n margin-top: -30px;\r\n\r\n .box-card {\r\n width: 100%;\r\n &:deep(.el-card__header) {\r\n padding: 10px 15px;\r\n }\r\n .card-header {\r\n width: 100%;\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n & > div:first-of-type {\r\n margin-right: 80px;\r\n font-size: 18px;\r\n font-weight: bold;\r\n }\r\n }\r\n }\r\n }\r\n &:hover .card-header {\r\n color: #0098f5;\r\n }\r\n &:hover .stepNum {\r\n border: 2px solid #0098f5;\r\n color: #0098f5;\r\n }\r\n}\r\n:deep(.el-date-editor) {\r\n width: 100%;\r\n}\r\n</style>\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/intellectInspect/inspectIndex/components/inspectRecordDialog.vue b/src/views/intellectInspect/inspectIndex/components/inspectRecordDialog.vue +--- a/src/views/intellectInspect/inspectIndex/components/inspectRecordDialog.vue (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ b/src/views/intellectInspect/inspectIndex/components/inspectRecordDialog.vue (date 1660874576126) +@@ -43,16 +43,16 @@ + <el-table-column prop="quotaContent" label="指标作业" show-overflow-tooltip align="center"></el-table-column> + <el-table-column prop="secondReferenceResult" label="参数值" show-overflow-tooltip align="center"> + <template #default="scope"> +- <div :style="{color: scope.row.reportResult==1?'#ff0000':'#409eff'}"> +- {{scope.row.dataReportType==1?'无':scope.row.secondReferenceResult}} ++ <div :style="{ color: scope.row.reportResult == 1 ? '#ff0000' : '#409eff' }"> ++ {{ scope.row.dataReportType == 1 ? '无' : scope.row.secondReferenceResult }} + </div> + </template> + </el-table-column> + <el-table-column prop="quotaUnit" label="指标单位" show-overflow-tooltip align="center"></el-table-column> + <el-table-column prop="reportResult" label="结果" show-overflow-tooltip align="center"> + <template #default="scope"> +- <div :style="{color: scope.row.reportResult==1?'#ff0000':'#409eff'}"> +- {{scope.row.reportResult==0?'正常':(scope.row.reportResult==1?'异常':'无')}} ++ <div :style="{ color: scope.row.reportResult == 1 ? '#ff0000' : '#409eff' }"> ++ {{ scope.row.reportResult == 0 ? '正常' : scope.row.reportResult == 1 ? '异常' : '无' }} + </div> + </template> + </el-table-column> +@@ -140,8 +140,8 @@ + rfidId: number | null; + quotaId: number | null; + quotaUnit: number | null; +- reportResult: number | null +- secondReferenceResult: number |null; ++ reportResult: number | null; ++ secondReferenceResult: number | null; + execSequence: number | null; + dataReportType: number | null; + firstReferenceValue: number | null; +@@ -173,7 +173,7 @@ + quotaId: null, + quotaUnit: null, + execSequence: null, +- secondReferenceResult:null, ++ secondReferenceResult: null, + reportResult: null, + dataReportType: null, + firstReferenceValue: null, +@@ -235,7 +235,7 @@ + quotaUnit: null, + reportResult: null, + execSequence: null, +- secondReferenceResult:null, ++ secondReferenceResult: null, + dataReportType: null, + firstReferenceValue: null, + secondReferenceSign: null, +@@ -266,7 +266,7 @@ + data.inspectTaskForm.execDepId = res.data.data.execDepId; + giveClassGroup(); + data.inspectTaskForm = JSON.parse(JSON.stringify(res.data.data)); +- console.log(data.inspectTaskForm,'this data') ++ console.log(data.inspectTaskForm, 'this data'); + } else { + } + }) +@@ -278,7 +278,6 @@ + // return row.secondReferenceResult==0?'正常':(row.reportResult==1?'异常':'无') + // } + +- + const submitInspectPoint = async () => { + if (data.title === '新增巡检任务' && data.pointTitle === '新增巡检点') { + if (data.inspectTaskForm.points.length === 0) { +Index: src/views/newHome/index.vue +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+><template>\r\n <div class=\"login-container\" :key=\"once\">\r\n <div class=\"topPanel\">\r\n\r\n </div>\r\n <div class=\"topPanelBg\">\r\n\r\n </div>\r\n <div class=\"topPanelCont\">\r\n <div class=\"topLogo\">\r\n <img src=\"../../assets/newMenu/toplogo.png\" />\r\n </div>\r\n <div class=\"userInfo\">\r\n <div @click=\"onScreenfullClick\" style=\"margin-right: 15px;cursor: pointer\">\r\n <i class=\"iconfont\" :title=\"isScreenfull ? $t('message.user.title6') : $t('message.user.title5')\" :class=\"!isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'\"></i>\r\n </div>\r\n <div class=\"loginOut\" @click=\"onLoginOut\">退出登录</div>\r\n <span></span>\r\n <div class=\"avator\">\r\n <img src=\"../../assets/menu/admin.png\" />\r\n <div>admin</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"leftCont\">\r\n\r\n </div>\r\n <div class=\"topCont\">\r\n <div class=\"topInfo\">\r\n <div class=\"topTit\">\r\n 新疆国泰新华<br/>安全风险预警监测系统\r\n </div>\r\n <div class=\"topTime\">\r\n <div class=\"time\">\r\n {{time}}\r\n </div>\r\n <span></span>\r\n <div class=\"today\">\r\n <div>{{date}}</div>\r\n <div><span>{{weekDay}}</span><span>{{dayTime}}</span></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"line\">\r\n\r\n </div>\r\n </div>\r\n <div class=\"menuGrid\">\r\n <div class=\"gridCont\">\r\n <div class=\"grid-content grid-content-1 cont-bg-1\" v-throttle @click=\"toRiskPlatform\">\r\n <div class=\"toplayer\">\r\n <div>\r\n <img class=\"iconImg\" src=\"../../assets/newMenu/icon1.png\"/>\r\n <div>\r\n <div class=\"itemTit1\">安全风险综合预警<br/>预报平台</div>\r\n <div class=\"enTit1\">Security risk comprehensive early warning and forecast platform</div>\r\n </div>\r\n </div>\r\n </div>\r\n <img class=\"bgImg1\" src=\"../../assets/newMenu/card-1.png\" />\r\n </div>\r\n <div class=\"grid-content cont-bg-1\" v-throttle @click=\"render('2')\">\r\n <div class=\"toplayer\">\r\n <img class=\"iconImg\" src=\"../../assets/newMenu/icon2.png\" />\r\n <div>\r\n <div class=\"itemTit\">双重预防系统</div>\r\n <div class=\"enTit\">Double prevention</div>\r\n </div>\r\n </div>\r\n <img class=\"bgImg\" src=\"../../assets/newMenu/card-4.png\" />\r\n </div>\r\n <div class=\"grid-content cont-bg-1\" v-throttle @click=\"render('4')\">\r\n <div class=\"toplayer\">\r\n <img class=\"iconImg\" src=\"../../assets/newMenu/icon3.png\" />\r\n <div>\r\n <div class=\"itemTit\">智能巡检系统</div>\r\n <div class=\"enTit\">Intelligent inspection system</div>\r\n </div>\r\n </div>\r\n <img class=\"bgImg\" src=\"../../assets/newMenu/card-8.png\" />\r\n </div>\r\n <div class=\"grid-content cont-bg-1\" v-throttle @click=\"render('3')\">\r\n <div class=\"toplayer\">\r\n <img class=\"iconImg\" src=\"../../assets/newMenu/icon4.png\" />\r\n <div>\r\n <div class=\"itemTit\">特殊作业系统</div>\r\n <div class=\"enTit\">special work</div>\r\n </div>\r\n </div>\r\n <img class=\"bgImg\" src=\"../../assets/newMenu/card-7.png\" />\r\n </div>\r\n <div class=\"grid-content cont-bg-1\" v-throttle @click=\"render('7')\">\r\n <div class=\"toplayer\">\r\n <img class=\"iconImg\" src=\"../../assets/newMenu/icon5.png\" />\r\n <div>\r\n <div class=\"itemTit\">目标责任管理系统</div>\r\n <div class=\"enTit\">Target Responsibility Management</div>\r\n </div>\r\n </div>\r\n <img class=\"bgImg\" src=\"../../assets/newMenu/card-2.png\" />\r\n </div>\r\n <div class=\"grid-content cont-bg-2\" v-throttle @click=\"render('10')\">\r\n <div class=\"toplayer\">\r\n <img class=\"iconImg\" src=\"../../assets/newMenu/icon6.png\" />\r\n <div>\r\n <div class=\"itemTit\">安全知识图谱系统</div>\r\n <div class=\"enTit\">Security Knowledge Graph</div>\r\n </div>\r\n </div>\r\n <img class=\"bgImg\" src=\"../../assets/newMenu/card-3.png\" />\r\n </div>\r\n <div class=\"grid-content cont-bg-2\" v-throttle @click=\"render('9')\">\r\n <div class=\"toplayer\">\r\n <img class=\"iconImg\" src=\"../../assets/newMenu/icon7.png\" />\r\n <div>\r\n <div class=\"itemTit\">设备综合管控系统</div>\r\n <div class=\"enTit\">Comprehensive equipment control</div>\r\n </div>\r\n </div>\r\n <img class=\"bgImg\" src=\"../../assets/newMenu/card-9.png\" />\r\n </div>\r\n <div class=\"grid-content cont-bg-2\" v-throttle @click=\"render('6')\">\r\n <div class=\"toplayer\">\r\n <img class=\"iconImg\" src=\"../../assets/newMenu/icon8.png\" />\r\n <div>\r\n <div class=\"itemTit\">应急管理系统</div>\r\n <div class=\"enTit\">Emergency management</div>\r\n </div>\r\n </div>\r\n <img class=\"bgImg\" src=\"../../assets/newMenu/card-5.png\" />\r\n </div>\r\n <div class=\"grid-content cont-bg-2\" v-throttle @click=\"render('11')\">\r\n <div class=\"toplayer\">\r\n <img class=\"iconImg\" src=\"../../assets/newMenu/icon9.png\" />\r\n <div>\r\n <div class=\"itemTit\">危险化学品全生命周期安全管理系统</div>\r\n <div class=\"enTit\">Full life cycle of hazardous chemicals</div>\r\n </div>\r\n </div>\r\n <img class=\"bgImg\" src=\"../../assets/newMenu/card-10.png\" />\r\n </div>\r\n <div class=\"grid-content cont-bg-2\" v-throttle @click=\"render('8')\">\r\n <div class=\"toplayer\">\r\n <img class=\"iconImg\" src=\"../../assets/newMenu/icon10.png\" />\r\n <div>\r\n <div class=\"itemTit\">事故管理系统</div>\r\n <div class=\"enTit\">Incident Management</div>\r\n </div>\r\n </div>\r\n <img class=\"bgImg\" src=\"../../assets/newMenu/card-6.png\" />\r\n </div>\r\n <div class=\"grid-content cont-bg-2\" @click=\"render('1')\">\r\n <div class=\"toplayer\">\r\n <img class=\"iconImg\" src=\"../../assets/newMenu/icon11.png\" />\r\n <div>\r\n <div class=\"itemTit\">安全基础信息系统</div>\r\n <div class=\"enTit\">Basic data permissions</div>\r\n </div>\r\n </div>\r\n <img class=\"bgImg\" src=\"../../assets/newMenu/card-11.png\" />\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"bot-rights\">\r\n <img src=\"../../assets/newMenu/pic_line1.png\">\r\n <div>技术支持:苏州国科鸿宇智能科技有限公司</div>\r\n <img src=\"../../assets/newMenu/pic_line2.png\">\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\">\r\nimport { toRefs, reactive, computed, defineComponent, onMounted } from 'vue';\r\nimport { storeToRefs } from 'pinia';\r\nimport { useThemeConfig } from '/@/stores/themeConfig';\r\nimport logoMini from '/@/assets/logo-mini.svg';\r\nimport loginIconTwo from '/@/assets/login-icon-two.svg';\r\nimport { NextLoading } from '/@/utils/loading';\r\nimport { Session } from '/@/utils/storage';\r\nimport { useRoute, useRouter } from 'vue-router';\r\nimport { initBackEndControlRoutes } from '/@/router/backEnd';\r\nimport { useUserInfo } from '/@/stores/userInfo';\r\nimport { useRoutesList } from '/@/stores/routesList';\r\nimport pinia from '/@/stores';\r\nimport { useTagsViewRoutes } from '/@/stores/tagsViewRoutes';\r\nimport { ElMessage } from 'element-plus';\r\nimport { ElMessageBox } from 'element-plus/es';\r\nimport { useLoginApi } from '/@/api/login';\r\nimport { useI18n } from 'vue-i18n';\r\nimport screenfull from 'screenfull';\r\nimport router from '../../router'\r\nimport Cookies from 'js-cookie'\r\n\r\n// 定义接口来定义对象的类型\r\ninterface LoginState {\r\n tabsActiveName: string;\r\n isScan: boolean;\r\n count: number;\r\n projectId: string;\r\n once: number;\r\n isScreenfull: boolean;\r\n time:string;\r\n date:string;\r\n weekDay:string;\r\n dayTime:string\r\n}\r\n\r\nexport default defineComponent({\r\n name: 'loginIndex',\r\n components: {},\r\n setup() {\r\n const { t } = useI18n();\r\n const router = useRouter();\r\n const userInfo = useUserInfo();\r\n const { userInfos } = storeToRefs(userInfo);\r\n const routeToStore = useRoutesList(pinia);\r\n const { routesList } = storeToRefs(routeToStore);\r\n const storesThemeConfig = useThemeConfig();\r\n const { themeConfig } = storeToRefs(storesThemeConfig);\r\n // 时间格式化\r\n const timeForm = {\r\n hour12: false,\r\n year: 'numeric',\r\n month: '2-digit',\r\n day: '2-digit',\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n second: '2-digit'\r\n }\r\n const state = reactive<LoginState>({\r\n tabsActiveName: 'account',\r\n isScan: false,\r\n count: 0,\r\n projectId: '1',\r\n once: 0,\r\n time: '',\r\n date: '',\r\n weekDay: '',\r\n dayTime: '',\r\n isScreenfull: false\r\n });\r\n // 获取布局配置信息\r\n const getThemeConfig = computed(() => {\r\n return themeConfig.value;\r\n });\r\n\r\n // 当前时间\r\n const getDateTime = ()=>{\r\n const curTime = new Date().toLocaleString('zh', timeForm).replace(/\\//g,'-')\r\n state.time = curTime.slice(10,16)\r\n state.date = curTime.slice(0,10)\r\n let week = ['日','一','二','三','四','五','六']\r\n let day = new Date().getDay()\r\n state.weekDay = '星期' + week[day]\r\n let curHour = Number(curTime.slice(10,13))\r\n if(curHour>=5&&curHour<=10){state.dayTime = '上午'}\r\n if(curHour>10&&curHour<=12){state.dayTime = '中午'}\r\n if(curHour>12&&curHour<=18){state.dayTime = '下午'}\r\n if(curHour>18&&curHour<=22){state.dayTime = '晚上'}\r\n if(curHour>22){state.dayTime = '午夜'}\r\n }\r\n // 下拉菜单点击时\r\n const onLoginOut = () => {\r\n ElMessageBox({\r\n closeOnClickModal: false,\r\n closeOnPressEscape: false,\r\n title: t('message.user.logOutTitle'),\r\n message: t('message.user.logOutMessage'),\r\n showCancelButton: true,\r\n confirmButtonText: t('message.user.logOutConfirm'),\r\n cancelButtonText: t('message.user.logOutCancel'),\r\n buttonSize: 'default',\r\n beforeClose: (action, instance, done) => {\r\n if (action === 'confirm') {\r\n instance.confirmButtonLoading = true;\r\n instance.confirmButtonText = t('message.user.logOutExit');\r\n setTimeout(() => {\r\n done();\r\n setTimeout(() => {\r\n instance.confirmButtonLoading = false;\r\n }, 300);\r\n }, 700);\r\n } else {\r\n done();\r\n }\r\n }\r\n })\r\n .then(async () => {\r\n let res = await useLoginApi().signOut();\r\n if (res.data.code === '200') {\r\n Session.clear(); // 清除缓存/token等\r\n // 使用 reload 时,不需要调用 resetRoute() 重置路由\r\n window.location.reload();\r\n } else {\r\n ElMessage({\r\n type: 'warning',\r\n message: res.data.msg\r\n });\r\n }\r\n })\r\n .catch(() => {});\r\n };\r\n //选择菜单\r\n const render = (value: string) => {\r\n state.projectId = value;\r\n renderMenu();\r\n };\r\n\r\n // 全屏点击时\r\n const onScreenfullClick = () => {\r\n if (!screenfull.isEnabled) {\r\n ElMessage.warning('暂不不支持全屏');\r\n return false;\r\n }\r\n screenfull.toggle();\r\n screenfull.on('change', () => {\r\n if (screenfull.isFullscreen) state.isScreenfull = true;\r\n else state.isScreenfull = false;\r\n });\r\n };\r\n // 去风险大屏\r\n const toRiskPlatform = ()=>{\r\n router.push({\r\n name: \"bigDataScreen\"\r\n });\r\n }\r\n const throttle = (renderMenu: any, delay: number) => {\r\n let flag = true;\r\n let count = 0;\r\n return function () {\r\n if (!flag) return;\r\n flag = false;\r\n if (count === 0) {\r\n renderMenu.apply();\r\n count++;\r\n flag = true;\r\n } else {\r\n setTimeout(() => {\r\n renderMenu.apply();\r\n flag = true;\r\n }, delay);\r\n }\r\n };\r\n };\r\n\r\n //调用菜单方法\r\n const renderMenu = throttle(() => {\r\n renderFun();\r\n }, 2000);\r\n\r\n //调后台菜单接口\r\n const renderFun = async () => {\r\n Cookies.set('projectId', state.projectId);\r\n userInfos.value.projectId = state.projectId;\r\n await initBackEndControlRoutes().then(() => {\r\n let linkToMenu = [...routesList.value];\r\n if (linkToMenu && linkToMenu.length > 1) {\r\n router.push(linkToFirstMenu(JSON.parse(JSON.stringify(linkToMenu))[1]));\r\n } else {\r\n ElMessage({ type: 'warning', message: '你没有该子系统的权限' });\r\n }\r\n });\r\n };\r\n\r\n const linkToFirstMenu: any = (value: any) => {\r\n let returnMenu = value;\r\n if (returnMenu.children?.length > 0) {\r\n return linkToFirstMenu(returnMenu.children[0]);\r\n } else {\r\n return returnMenu.path;\r\n }\r\n };\r\n // //点击进入特殊作业\r\n // const toSpecialWorkSys = () => {\r\n // \trouter.push('/layoutPage');\r\n // };\r\n // 页面加载时\r\n onMounted(() => {\r\n state.once += 1;\r\n NextLoading.done()\r\n setInterval(()=>{\r\n getDateTime()\r\n },1000)\r\n // loginBg();\r\n // loginApp()\r\n });\r\n return {\r\n render,\r\n logoMini,\r\n onLoginOut,\r\n getDateTime,\r\n toRiskPlatform,\r\n onScreenfullClick,\r\n loginIconTwo,\r\n getThemeConfig,\r\n ...toRefs(state)\r\n };\r\n }\r\n});\r\n</script>\r\n\r\n<style scoped lang=\"scss\">\r\n @media screen and (min-width: 1400px) {\r\n .gridCont {\r\n width: 100%;\r\n height: 100%;\r\n display: grid;\r\n grid-gap: 20px;\r\n grid-template-columns: repeat(3, 1fr);\r\n grid-auto-flow: row;\r\n justify-content: center;\r\n .toplayer{\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n display: flex;\r\n align-items: center;\r\n padding: 0 20px;\r\n z-index: 99;\r\n\r\n .itemTit {\r\n font-size: 28px;\r\n line-height: 34px;\r\n height: 40%;\r\n color: #072270;\r\n }\r\n .enTit{\r\n font-size: 18px;\r\n line-height: 20px;\r\n color: #072270;\r\n }\r\n\r\n .iconImg {\r\n width: 88px;\r\n height: 88px;\r\n margin-right: 20px;\r\n }\r\n }\r\n .bgImg {\r\n position: absolute;\r\n width: 30%;\r\n height: auto;\r\n right: -10px;\r\n top: 15px;\r\n }\r\n }\r\n\r\n\r\n .grid-content-1{\r\n grid-row-start: 1;\r\n grid-row-end: 3;\r\n\r\n .toplayer{\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n display: flex;\r\n align-items: center;\r\n z-index: 99;\r\n\r\n &>div{\r\n display: flex;\r\n align-items: flex-start;\r\n }\r\n\r\n .itemTit1 {\r\n font-size: 34px;\r\n line-height: 42px;\r\n height: 40%;\r\n letter-spacing: 1px;\r\n color: #072270;\r\n margin-bottom: 12px;\r\n }\r\n .enTit1{\r\n font-size: 22px;\r\n line-height: 24px;\r\n color: #072270;\r\n }\r\n }\r\n .bgImg1 {\r\n position: absolute;\r\n width: 45%;\r\n height: auto;\r\n right: -20px;\r\n top: 30%;\r\n }\r\n }\r\n\r\n .bot-rights{\r\n font-size: 18px;\r\n color: #333;\r\n }\r\n }\r\n\r\n @media screen and (min-width: 1200px) and (max-width: 1400px){\r\n .gridCont {\r\n width: 100%;\r\n height: 100%;\r\n display: grid;\r\n grid-gap: 15px;\r\n grid-template-columns: repeat(3, 1fr);\r\n grid-auto-flow: row;\r\n justify-content: center;\r\n\r\n .toplayer{\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n display: flex;\r\n align-items: center;\r\n padding: 0 20px;\r\n z-index: 99;\r\n\r\n .itemTit {\r\n font-size: 26px;\r\n line-height: 30px;\r\n height: 40%;\r\n color: #072270;\r\n margin-bottom: 2px;\r\n }\r\n .enTit{\r\n font-size: 14px;\r\n color: #072270;\r\n }\r\n\r\n .iconImg {\r\n width: 44px;\r\n height: 44px;\r\n margin-right: 10px;\r\n }\r\n\r\n }\r\n .bgImg {\r\n position: absolute;\r\n width: 30%;\r\n height: auto;\r\n right: -10px;\r\n top: 15px;\r\n }\r\n }\r\n\r\n .grid-content-1{\r\n grid-row-start: 1;\r\n grid-row-end: 3;\r\n\r\n .toplayer{\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n display: flex;\r\n align-items: center;\r\n z-index: 99;\r\n\r\n &>div{\r\n display: flex;\r\n align-items: flex-start;\r\n }\r\n\r\n .itemTit1 {\r\n font-size: 28px;\r\n line-height: 36px;\r\n height: 40%;\r\n letter-spacing: 1px;\r\n color: #072270;\r\n margin-bottom: 12px;\r\n }\r\n .enTit1{\r\n font-size: 16px;\r\n color: #072270;\r\n }\r\n }\r\n .bgImg1 {\r\n position: absolute;\r\n width: 45%;\r\n height: auto;\r\n right: -20px;\r\n top: 30%;\r\n }\r\n }\r\n .bot-rights{\r\n font-size: 15px;\r\n color: #333;\r\n }\r\n }\r\n @media screen and (max-width: 1200px){\r\n .gridCont {\r\n width: 100%;\r\n height: 100%;\r\n display: grid;\r\n grid-gap: 10px;\r\n grid-template-columns: repeat(3, 1fr);\r\n grid-auto-flow: row;\r\n justify-content: center;\r\n\r\n .toplayer{\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n display: flex;\r\n align-items: center;\r\n padding: 0 15px;\r\n z-index: 99;\r\n\r\n .itemTit {\r\n font-size: 18px;\r\n line-height: 22px;\r\n color: #072270;\r\n }\r\n .enTit{\r\n font-size: 12px;\r\n line-height: 14px;\r\n color: #072270;\r\n }\r\n\r\n .iconImg {\r\n width: 32px;\r\n height: 32px;\r\n margin-right: 10px;\r\n }\r\n }\r\n .bgImg {\r\n position: absolute;\r\n width: 45%;\r\n height: auto;\r\n right: -10px;\r\n top: 15px;\r\n }\r\n }\r\n\r\n .grid-content-1{\r\n grid-row-start: 1;\r\n grid-row-end: 3;\r\n\r\n .toplayer{\r\n width: 100%;\r\n height: 100%;\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n display: flex;\r\n align-items: center;\r\n z-index: 99;\r\n\r\n &>div{\r\n display: flex;\r\n align-items: flex-start;\r\n }\r\n\r\n .itemTit1 {\r\n font-size: 24px;\r\n line-height: 36px;\r\n height: 40%;\r\n letter-spacing: 1px;\r\n color: #072270;\r\n margin-bottom: 12px;\r\n }\r\n .enTit1{\r\n font-size: 14px;\r\n color: #072270;\r\n }\r\n }\r\n .bgImg1 {\r\n position: absolute;\r\n width: 45%;\r\n height: auto;\r\n right: -20px;\r\n top: 30%;\r\n }\r\n }\r\n .bot-rights{\r\n font-size: 12px;\r\n color: #333;\r\n }\r\n }\r\n.login-container {\r\n width: 100%;\r\n height: 100%;\r\n position: relative;\r\n background: #fff;\r\n .topPanel {\r\n width: 100%;\r\n height: 260px;\r\n background: url('../../assets/newMenu/topbg.jpg') no-repeat center;\r\n background-size: 100% 100%;\r\n display: flex;\r\n justify-content: center;\r\n box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);\r\n animation: showDown 0.6s 1 ease forwards;\r\n\r\n @keyframes showDown {\r\n 100% {\r\n position: absolute;\r\n top: 0;\r\n }\r\n }\r\n }\r\n .topPanelBg{\r\n position: absolute;\r\n width: 100%;\r\n height: 60px;\r\n top: 0;\r\n left: 0;\r\n background: rgba(255,255,255,.8);\r\n z-index: 9;\r\n }\r\n .topPanelCont {\r\n position: absolute;\r\n width: 100%;\r\n height: 60px;\r\n padding: 0 50px;\r\n top: 0;\r\n left: 0;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n z-index: 999;\r\n\r\n .topLogo {\r\n display: flex;\r\n align-items: center;\r\n\r\n img{\r\n width: 146px;\r\n height: auto;\r\n }\r\n }\r\n\r\n .userInfo {\r\n display: flex;\r\n align-items: center;\r\n\r\n .avator {\r\n display: flex;\r\n justify-content: right;\r\n\r\n img {\r\n width: 20px;\r\n height: 20px;\r\n border-radius: 10px;\r\n }\r\n div {\r\n font-size: 15px;\r\n color: #333333;\r\n line-height: 20px;\r\n margin-left: 6px;\r\n }\r\n }\r\n span {\r\n width: 1px;\r\n height: 20px;\r\n background: #999;\r\n margin: 0 15px;\r\n }\r\n .loginOut {\r\n font-size: 15px;\r\n color: #333;\r\n line-height: 20px;\r\n cursor: pointer;\r\n\r\n &:hover {\r\n color: #006df5;\r\n }\r\n }\r\n }\r\n }\r\n .leftCont{\r\n position: absolute;\r\n left: 0;\r\n top: 0;\r\n width: 240px;\r\n height: 100%;\r\n z-index: 99;\r\n background: url('../../assets/newMenu/leftbg.png') no-repeat center;\r\n background-size: 100% 100%;\r\n }\r\n .topCont{\r\n position: absolute;\r\n width: 100%;\r\n height: 200px;\r\n left: 0;\r\n top: 60px;\r\n padding: 0 40px 0 120px;\r\n z-index: 99999;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: center;\r\n align-items: flex-start;\r\n .topInfo{\r\n width: 100%;\r\n display: flex;\r\n align-items: center;\r\n justify-content: space-between;\r\n margin-bottom: 10px;\r\n\r\n .topTit{\r\n font-size: 44px;\r\n font-family: \"PingFang SC\";\r\n font-weight: bolder;\r\n text-align: left;\r\n color: #fff;\r\n text-shadow: 0 3px 8px rgba(0,0,0,.2);\r\n }\r\n\r\n .topTime{\r\n padding: 15px 10px;\r\n box-sizing: border-box;\r\n background: rgba(6,64,195,.8);\r\n border-radius: 8px;\r\n color: #fff;\r\n font-family: \"PingFang SC\";\r\n font-weight: 600;\r\n font-size: 16px;\r\n display: flex;\r\n align-items: center;\r\n\r\n .time{\r\n font-size: 48px;\r\n }\r\n &>span{\r\n width: 1px;\r\n height: 40px;\r\n margin: 0 15px;\r\n background: #fff;\r\n }\r\n .today{\r\n display: flex;\r\n flex-direction: column;\r\n align-items: flex-start;\r\n\r\n span{\r\n font-size: 14px;\r\n }\r\n\r\n span:first-of-type{\r\n margin-right: 10px;\r\n }\r\n }\r\n }\r\n }\r\n .line{\r\n width: 120px;\r\n height: 6px;\r\n background: #00EEFF;\r\n }\r\n }\r\n .menuGrid {\r\n width: calc(100vw - 240px);\r\n height: calc(100vh - 320px);\r\n padding: 20px 20px 0;\r\n position: absolute;\r\n top: 260px;\r\n left: 240px;\r\n .gridCont {\r\n\r\n .grid-content {\r\n border-radius: 16px;\r\n position: relative;\r\n overflow: hidden;\r\n cursor: pointer;\r\n transition: 0.3s;\r\n border: none;\r\n\r\n &:hover {\r\n background-image: radial-gradient(ellipse farthest-side at 50% 100%,#48A3FF 0%,#fff 120%);\r\n box-shadow: 8px 8px 24px rgba(20,97,234,.2), -8px -8px 24px #fafafa;\r\n }\r\n }\r\n .cont-bg-1{\r\n background: #D9EAFF;\r\n }\r\n .cont-bg-2{\r\n background: #CDD6FF;\r\n }\r\n\r\n\r\n /*.grid-content-2{*/\r\n /*\tbackground-image: linear-gradient(135deg,#0098F5,#1461EA);*/\r\n /*}*/\r\n\r\n /*.grid-content-3{*/\r\n /*\tbackground-image: linear-gradient(135deg,#006DF5,#1450EA);*/\r\n /*}*/\r\n }\r\n }\r\n .bot-rights{\r\n width: calc(100vw - 240px);\r\n height: 60px;\r\n position: absolute;\r\n bottom: 0;\r\n left: 240px;\r\n z-index: 9999;\r\n display: flex;\r\n align-items: center;\r\n justify-content: center;\r\n\r\n img{\r\n width: 248px;\r\n height: 8px;\r\n }\r\n div{\r\n margin: 0 20px;\r\n }\r\n }\r\n}\r\n</style>\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/views/newHome/index.vue b/src/views/newHome/index.vue +--- a/src/views/newHome/index.vue (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ b/src/views/newHome/index.vue (date 1660871441429) +@@ -1,17 +1,13 @@ + <template> + <div class="login-container" :key="once"> +- <div class="topPanel"> +- +- </div> +- <div class="topPanelBg"> +- +- </div> ++ <div class="topPanel"></div> ++ <div class="topPanelBg"></div> + <div class="topPanelCont"> + <div class="topLogo"> + <img src="../../assets/newMenu/toplogo.png" /> + </div> + <div class="userInfo"> +- <div @click="onScreenfullClick" style="margin-right: 15px;cursor: pointer"> ++ <div @click="onScreenfullClick" style="margin-right: 15px; cursor: pointer"> + <i class="iconfont" :title="isScreenfull ? $t('message.user.title6') : $t('message.user.title5')" :class="!isScreenfull ? 'icon-fullscreen' : 'icon-tuichuquanping'"></i> + </div> + <div class="loginOut" @click="onLoginOut">退出登录</div> +@@ -22,39 +18,36 @@ + </div> + </div> + </div> +- <div class="leftCont"> +- +- </div> ++ <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}} ++ {{ time }} + </div> + <span></span> + <div class="today"> +- <div>{{date}}</div> +- <div><span>{{weekDay}}</span><span>{{dayTime}}</span></div> +- </div> +- </div> +- </div> +- <div class="line"> +- ++ <div>{{ date }}</div> ++ <div> ++ <span>{{ weekDay }}</span ++ ><span>{{ dayTime }}</span> ++ </div> ++ </div> ++ </div> + </div> ++ <div class="line"></div> + </div> + <div class="menuGrid"> + <div class="gridCont"> + <div class="grid-content grid-content-1 cont-bg-1" v-throttle @click="toRiskPlatform"> + <div class="toplayer"> + <div> +- <img class="iconImg" src="../../assets/newMenu/icon1.png"/> +- <div> +- <div class="itemTit1">安全风险综合预警<br/>预报平台</div> +- <div class="enTit1">Security risk comprehensive early warning and forecast platform</div> +- </div> ++ <img class="iconImg" src="../../assets/newMenu/icon1.png" /> ++ <div> ++ <div class="itemTit1">安全风险综合预警<br />预报平台</div> ++ <div class="enTit1">Security risk comprehensive early warning and forecast platform</div> ++ </div> + </div> + </div> + <img class="bgImg1" src="../../assets/newMenu/card-1.png" /> +@@ -162,9 +155,9 @@ + </div> + </div> + <div class="bot-rights"> +- <img src="../../assets/newMenu/pic_line1.png"> ++ <img src="../../assets/newMenu/pic_line1.png" /> + <div>技术支持:苏州国科鸿宇智能科技有限公司</div> +- <img src="../../assets/newMenu/pic_line2.png"> ++ <img src="../../assets/newMenu/pic_line2.png" /> + </div> + </div> + </template> +@@ -188,8 +181,8 @@ + import { useLoginApi } from '/@/api/login'; + import { useI18n } from 'vue-i18n'; + import screenfull from 'screenfull'; +-import router from '../../router' +-import Cookies from 'js-cookie' ++import router from '../../router'; ++import Cookies from 'js-cookie'; + + // 定义接口来定义对象的类型 + interface LoginState { +@@ -199,10 +192,10 @@ + projectId: string; + once: number; + isScreenfull: boolean; +- time:string; +- date:string; +- weekDay:string; +- dayTime:string ++ time: string; ++ date: string; ++ weekDay: string; ++ dayTime: string; + } + + export default defineComponent({ +@@ -226,7 +219,7 @@ + hour: '2-digit', + minute: '2-digit', + second: '2-digit' +- } ++ }; + const state = reactive<LoginState>({ + tabsActiveName: 'account', + isScan: false, +@@ -245,20 +238,30 @@ + }); + + // 当前时间 +- const getDateTime = ()=>{ +- const curTime = new Date().toLocaleString('zh', timeForm).replace(/\//g,'-') +- state.time = curTime.slice(10,16) +- state.date = curTime.slice(0,10) +- let week = ['日','一','二','三','四','五','六'] +- let day = new Date().getDay() +- state.weekDay = '星期' + week[day] +- let curHour = Number(curTime.slice(10,13)) +- if(curHour>=5&&curHour<=10){state.dayTime = '上午'} +- if(curHour>10&&curHour<=12){state.dayTime = '中午'} +- if(curHour>12&&curHour<=18){state.dayTime = '下午'} +- if(curHour>18&&curHour<=22){state.dayTime = '晚上'} +- if(curHour>22){state.dayTime = '午夜'} +- } ++ const getDateTime = () => { ++ const curTime = new Date().toLocaleString('zh', timeForm).replace(/\//g, '-'); ++ state.time = curTime.slice(10, 16); ++ state.date = curTime.slice(0, 10); ++ let week = ['日', '一', '二', '三', '四', '五', '六']; ++ let day = new Date().getDay(); ++ state.weekDay = '星期' + week[day]; ++ let curHour = Number(curTime.slice(10, 13)); ++ if (curHour >= 5 && curHour <= 10) { ++ state.dayTime = '上午'; ++ } ++ if (curHour > 10 && curHour <= 12) { ++ state.dayTime = '中午'; ++ } ++ if (curHour > 12 && curHour <= 18) { ++ state.dayTime = '下午'; ++ } ++ if (curHour > 18 && curHour <= 22) { ++ state.dayTime = '晚上'; ++ } ++ if (curHour > 22) { ++ state.dayTime = '午夜'; ++ } ++ }; + // 下拉菜单点击时 + const onLoginOut = () => { + ElMessageBox({ +@@ -319,11 +322,11 @@ + }); + }; + // 去风险大屏 +- const toRiskPlatform = ()=>{ ++ const toRiskPlatform = () => { + router.push({ +- name: "bigDataScreen" ++ name: 'bigDataScreen' + }); +- } ++ }; + const throttle = (renderMenu: any, delay: number) => { + let flag = true; + let count = 0; +@@ -377,10 +380,11 @@ + // 页面加载时 + onMounted(() => { + state.once += 1; +- NextLoading.done() +- setInterval(()=>{ +- getDateTime() +- },1000) ++ NextLoading.done(); ++ getDateTime(); ++ setInterval(() => { ++ getDateTime(); ++ }, 1000); + // loginBg(); + // loginApp() + }); +@@ -400,288 +404,286 @@ + </script> + + <style scoped lang="scss"> +- @media screen and (min-width: 1400px) { +- .gridCont { +- width: 100%; +- height: 100%; +- display: grid; +- grid-gap: 20px; +- grid-template-columns: repeat(3, 1fr); +- grid-auto-flow: row; +- justify-content: center; +- .toplayer{ +- width: 100%; +- height: 100%; +- position: absolute; +- left: 0; +- top: 0; +- display: flex; +- align-items: center; +- padding: 0 20px; +- z-index: 99; ++@media screen and (min-width: 1400px) { ++ .gridCont { ++ width: 100%; ++ height: 100%; ++ display: grid; ++ grid-gap: 20px; ++ grid-template-columns: repeat(3, 1fr); ++ grid-auto-flow: row; ++ justify-content: center; ++ .toplayer { ++ width: 100%; ++ height: 100%; ++ position: absolute; ++ left: 0; ++ top: 0; ++ display: flex; ++ align-items: center; ++ padding: 0 20px; ++ z-index: 99; + +- .itemTit { +- font-size: 28px; +- line-height: 34px; +- height: 40%; +- color: #072270; +- } +- .enTit{ +- font-size: 18px; +- line-height: 20px; +- color: #072270; +- } ++ .itemTit { ++ font-size: 28px; ++ line-height: 34px; ++ height: 40%; ++ color: #072270; ++ } ++ .enTit { ++ font-size: 18px; ++ line-height: 20px; ++ color: #072270; ++ } + +- .iconImg { +- width: 88px; +- height: 88px; +- margin-right: 20px; +- } +- } +- .bgImg { +- position: absolute; +- width: 30%; +- height: auto; +- right: -10px; +- top: 15px; +- } +- } ++ .iconImg { ++ width: 88px; ++ height: 88px; ++ margin-right: 20px; ++ } ++ } ++ .bgImg { ++ position: absolute; ++ width: 30%; ++ height: auto; ++ right: -10px; ++ top: 15px; ++ } ++ } + +- +- .grid-content-1{ +- grid-row-start: 1; +- grid-row-end: 3; ++ .grid-content-1 { ++ grid-row-start: 1; ++ grid-row-end: 3; + +- .toplayer{ +- width: 100%; +- height: 100%; +- position: absolute; +- left: 0; +- top: 0; +- display: flex; +- align-items: center; +- z-index: 99; ++ .toplayer { ++ width: 100%; ++ height: 100%; ++ position: absolute; ++ left: 0; ++ top: 0; ++ display: flex; ++ align-items: center; ++ z-index: 99; + +- &>div{ +- display: flex; +- align-items: flex-start; +- } ++ & > div { ++ display: flex; ++ align-items: flex-start; ++ } + +- .itemTit1 { +- font-size: 34px; +- line-height: 42px; +- height: 40%; +- letter-spacing: 1px; +- color: #072270; +- margin-bottom: 12px; +- } +- .enTit1{ +- font-size: 22px; +- line-height: 24px; +- color: #072270; +- } +- } +- .bgImg1 { +- position: absolute; +- width: 45%; +- height: auto; +- right: -20px; +- top: 30%; +- } +- } ++ .itemTit1 { ++ font-size: 34px; ++ line-height: 42px; ++ height: 40%; ++ letter-spacing: 1px; ++ color: #072270; ++ margin-bottom: 12px; ++ } ++ .enTit1 { ++ font-size: 22px; ++ line-height: 24px; ++ color: #072270; ++ } ++ } ++ .bgImg1 { ++ position: absolute; ++ width: 45%; ++ height: auto; ++ right: -20px; ++ top: 30%; ++ } ++ } + +- .bot-rights{ +- font-size: 18px; +- color: #333; +- } +- } ++ .bot-rights { ++ font-size: 18px; ++ color: #333; ++ } ++} + +- @media screen and (min-width: 1200px) and (max-width: 1400px){ +- .gridCont { +- width: 100%; +- height: 100%; +- display: grid; +- grid-gap: 15px; +- grid-template-columns: repeat(3, 1fr); +- grid-auto-flow: row; +- justify-content: center; ++@media screen and (min-width: 1200px) and (max-width: 1400px) { ++ .gridCont { ++ width: 100%; ++ height: 100%; ++ display: grid; ++ grid-gap: 15px; ++ grid-template-columns: repeat(3, 1fr); ++ grid-auto-flow: row; ++ justify-content: center; + +- .toplayer{ +- width: 100%; +- height: 100%; +- position: absolute; +- left: 0; +- top: 0; +- display: flex; +- align-items: center; +- padding: 0 20px; +- z-index: 99; ++ .toplayer { ++ width: 100%; ++ height: 100%; ++ position: absolute; ++ left: 0; ++ top: 0; ++ display: flex; ++ align-items: center; ++ padding: 0 20px; ++ z-index: 99; + +- .itemTit { +- font-size: 26px; +- line-height: 30px; +- height: 40%; +- color: #072270; +- margin-bottom: 2px; +- } +- .enTit{ +- font-size: 14px; +- color: #072270; +- } ++ .itemTit { ++ font-size: 26px; ++ line-height: 30px; ++ height: 40%; ++ color: #072270; ++ margin-bottom: 2px; ++ } ++ .enTit { ++ font-size: 14px; ++ color: #072270; ++ } + +- .iconImg { +- width: 44px; +- height: 44px; +- margin-right: 10px; +- } +- +- } +- .bgImg { +- position: absolute; +- width: 30%; +- height: auto; +- right: -10px; +- top: 15px; +- } +- } ++ .iconImg { ++ width: 44px; ++ height: 44px; ++ margin-right: 10px; ++ } ++ } ++ .bgImg { ++ position: absolute; ++ width: 30%; ++ height: auto; ++ right: -10px; ++ top: 15px; ++ } ++ } + +- .grid-content-1{ +- grid-row-start: 1; +- grid-row-end: 3; ++ .grid-content-1 { ++ grid-row-start: 1; ++ grid-row-end: 3; + +- .toplayer{ +- width: 100%; +- height: 100%; +- position: absolute; +- left: 0; +- top: 0; +- display: flex; +- align-items: center; +- z-index: 99; ++ .toplayer { ++ width: 100%; ++ height: 100%; ++ position: absolute; ++ left: 0; ++ top: 0; ++ display: flex; ++ align-items: center; ++ z-index: 99; + +- &>div{ +- display: flex; +- align-items: flex-start; +- } ++ & > div { ++ display: flex; ++ align-items: flex-start; ++ } + +- .itemTit1 { +- font-size: 28px; +- line-height: 36px; +- height: 40%; +- letter-spacing: 1px; +- color: #072270; +- margin-bottom: 12px; +- } +- .enTit1{ +- font-size: 16px; +- color: #072270; +- } +- } +- .bgImg1 { +- position: absolute; +- width: 45%; +- height: auto; +- right: -20px; +- top: 30%; +- } +- } +- .bot-rights{ +- font-size: 15px; +- color: #333; +- } +- } +- @media screen and (max-width: 1200px){ +- .gridCont { +- width: 100%; +- height: 100%; +- display: grid; +- grid-gap: 10px; +- grid-template-columns: repeat(3, 1fr); +- grid-auto-flow: row; +- justify-content: center; ++ .itemTit1 { ++ font-size: 28px; ++ line-height: 36px; ++ height: 40%; ++ letter-spacing: 1px; ++ color: #072270; ++ margin-bottom: 12px; ++ } ++ .enTit1 { ++ font-size: 16px; ++ color: #072270; ++ } ++ } ++ .bgImg1 { ++ position: absolute; ++ width: 45%; ++ height: auto; ++ right: -20px; ++ top: 30%; ++ } ++ } ++ .bot-rights { ++ font-size: 15px; ++ color: #333; ++ } ++} ++@media screen and (max-width: 1200px) { ++ .gridCont { ++ width: 100%; ++ height: 100%; ++ display: grid; ++ grid-gap: 10px; ++ grid-template-columns: repeat(3, 1fr); ++ grid-auto-flow: row; ++ justify-content: center; + +- .toplayer{ +- width: 100%; +- height: 100%; +- position: absolute; +- left: 0; +- top: 0; +- display: flex; +- align-items: center; +- padding: 0 15px; +- z-index: 99; ++ .toplayer { ++ width: 100%; ++ height: 100%; ++ position: absolute; ++ left: 0; ++ top: 0; ++ display: flex; ++ align-items: center; ++ padding: 0 15px; ++ z-index: 99; + +- .itemTit { +- font-size: 18px; +- line-height: 22px; +- color: #072270; +- } +- .enTit{ +- font-size: 12px; +- line-height: 14px; +- color: #072270; +- } ++ .itemTit { ++ font-size: 18px; ++ line-height: 22px; ++ color: #072270; ++ } ++ .enTit { ++ font-size: 12px; ++ line-height: 14px; ++ color: #072270; ++ } + +- .iconImg { +- width: 32px; +- height: 32px; +- margin-right: 10px; +- } +- } +- .bgImg { +- position: absolute; +- width: 45%; +- height: auto; +- right: -10px; +- top: 15px; +- } +- } ++ .iconImg { ++ width: 32px; ++ height: 32px; ++ margin-right: 10px; ++ } ++ } ++ .bgImg { ++ position: absolute; ++ width: 45%; ++ height: auto; ++ right: -10px; ++ top: 15px; ++ } ++ } + +- .grid-content-1{ +- grid-row-start: 1; +- grid-row-end: 3; ++ .grid-content-1 { ++ grid-row-start: 1; ++ grid-row-end: 3; + +- .toplayer{ +- width: 100%; +- height: 100%; +- position: absolute; +- left: 0; +- top: 0; +- display: flex; +- align-items: center; +- z-index: 99; ++ .toplayer { ++ width: 100%; ++ height: 100%; ++ position: absolute; ++ left: 0; ++ top: 0; ++ display: flex; ++ align-items: center; ++ z-index: 99; + +- &>div{ +- display: flex; +- align-items: flex-start; +- } ++ & > div { ++ display: flex; ++ align-items: flex-start; ++ } + +- .itemTit1 { +- font-size: 24px; +- line-height: 36px; +- height: 40%; +- letter-spacing: 1px; +- color: #072270; +- margin-bottom: 12px; +- } +- .enTit1{ +- font-size: 14px; +- color: #072270; +- } +- } +- .bgImg1 { +- position: absolute; +- width: 45%; +- height: auto; +- right: -20px; +- top: 30%; +- } +- } +- .bot-rights{ +- font-size: 12px; +- color: #333; +- } +- } ++ .itemTit1 { ++ font-size: 24px; ++ line-height: 36px; ++ height: 40%; ++ letter-spacing: 1px; ++ color: #072270; ++ margin-bottom: 12px; ++ } ++ .enTit1 { ++ font-size: 14px; ++ color: #072270; ++ } ++ } ++ .bgImg1 { ++ position: absolute; ++ width: 45%; ++ height: auto; ++ right: -20px; ++ top: 30%; ++ } ++ } ++ .bot-rights { ++ font-size: 12px; ++ color: #333; ++ } ++} + .login-container { + width: 100%; + height: 100%; +@@ -704,13 +706,13 @@ + } + } + } +- .topPanelBg{ ++ .topPanelBg { + position: absolute; + width: 100%; + height: 60px; + top: 0; + left: 0; +- background: rgba(255,255,255,.8); ++ background: rgba(255, 255, 255, 0.8); + z-index: 9; + } + .topPanelCont { +@@ -729,7 +731,7 @@ + display: flex; + align-items: center; + +- img{ ++ img { + width: 146px; + height: auto; + } +@@ -773,7 +775,7 @@ + } + } + } +- .leftCont{ ++ .leftCont { + position: absolute; + left: 0; + top: 0; +@@ -783,7 +785,7 @@ + background: url('../../assets/newMenu/leftbg.png') no-repeat center; + background-size: 100% 100%; + } +- .topCont{ ++ .topCont { + position: absolute; + width: 100%; + height: 200px; +@@ -795,62 +797,62 @@ + flex-direction: column; + justify-content: center; + align-items: flex-start; +- .topInfo{ ++ .topInfo { + width: 100%; + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 10px; + +- .topTit{ ++ .topTit { + font-size: 44px; +- font-family: "PingFang SC"; ++ font-family: 'PingFang SC'; + font-weight: bolder; + text-align: left; + color: #fff; +- text-shadow: 0 3px 8px rgba(0,0,0,.2); ++ text-shadow: 0 3px 8px rgba(0, 0, 0, 0.2); + } + +- .topTime{ ++ .topTime { + padding: 15px 10px; + box-sizing: border-box; +- background: rgba(6,64,195,.8); ++ background: rgba(6, 64, 195, 0.8); + border-radius: 8px; + color: #fff; +- font-family: "PingFang SC"; ++ font-family: 'PingFang SC'; + font-weight: 600; + font-size: 16px; + display: flex; + align-items: center; + +- .time{ ++ .time { + font-size: 48px; + } +- &>span{ ++ & > span { + width: 1px; + height: 40px; + margin: 0 15px; + background: #fff; + } +- .today{ ++ .today { + display: flex; + flex-direction: column; + align-items: flex-start; + +- span{ ++ span { + font-size: 14px; + } + +- span:first-of-type{ ++ span:first-of-type { + margin-right: 10px; + } + } + } + } +- .line{ ++ .line { + width: 120px; + height: 6px; +- background: #00EEFF; ++ background: #00eeff; + } + } + .menuGrid { +@@ -861,7 +863,6 @@ + top: 260px; + left: 240px; + .gridCont { +- + .grid-content { + border-radius: 16px; + position: relative; +@@ -871,17 +872,16 @@ + border: none; + + &:hover { +- background-image: radial-gradient(ellipse farthest-side at 50% 100%,#48A3FF 0%,#fff 120%); +- box-shadow: 8px 8px 24px rgba(20,97,234,.2), -8px -8px 24px #fafafa; ++ background-image: radial-gradient(ellipse farthest-side at 50% 100%, #48a3ff 0%, #fff 120%); ++ box-shadow: 8px 8px 24px rgba(20, 97, 234, 0.2), -8px -8px 24px #fafafa; + } + } +- .cont-bg-1{ +- background: #D9EAFF; ++ .cont-bg-1 { ++ background: #d9eaff; + } +- .cont-bg-2{ +- background: #CDD6FF; ++ .cont-bg-2 { ++ background: #cdd6ff; + } +- + + /*.grid-content-2{*/ + /* background-image: linear-gradient(135deg,#0098F5,#1461EA);*/ +@@ -892,7 +892,7 @@ + /*}*/ + } + } +- .bot-rights{ ++ .bot-rights { + width: calc(100vw - 240px); + height: 60px; + position: absolute; +@@ -903,11 +903,11 @@ + align-items: center; + justify-content: center; + +- img{ ++ img { + width: 248px; + height: 8px; + } +- div{ ++ div { + margin: 0 20px; + } + } +Index: src/api/specialWorkSystem/approveRule/index.ts +IDEA additional info: +Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP +<+>import request from '/@/utils/request';\r\n\r\nexport function approveRuleApi() {\r\n return {\r\n // v1\r\n getApproveRuleList: (data: object) => {\r\n return request({\r\n url: import.meta.env.VITE_API_URL + `/rule/listByPage`,\r\n method: 'post',\r\n data: data\r\n });\r\n },\r\n // v1\r\n addApproveRule: (data: object) => {\r\n return request({\r\n url: import.meta.env.VITE_API_URL + `/rule/save`,\r\n method: 'post',\r\n data: data\r\n });\r\n },\r\n // v1\r\n modApproveRule: (data: object) => {\r\n return request({\r\n url: import.meta.env.VITE_API_URL + `/rule/update`,\r\n method: 'post',\r\n data: data\r\n });\r\n },\r\n // v1\r\n deleteApproveRule: (data: object) => {\r\n return request({\r\n url: import.meta.env.VITE_API_URL + `/work/ruleItemStand/delete`,\r\n method: 'post',\r\n data: data\r\n });\r\n },\r\n // v1\r\n getAllApproveRuleList: (data: {}) => {\r\n return request({\r\n url: import.meta.env.VITE_API_URL + `/prevent/device/select/listDevices`,\r\n method: 'post',\r\n data\r\n });\r\n }\r\n };\r\n}\r\n +Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP +<+>UTF-8 +=================================================================== +diff --git a/src/api/specialWorkSystem/approveRule/index.ts b/src/api/specialWorkSystem/approveRule/index.ts +--- a/src/api/specialWorkSystem/approveRule/index.ts (revision 2e0110788cc8563381d4d8050b559d8f4448c6bf) ++++ b/src/api/specialWorkSystem/approveRule/index.ts (date 1660889194066) +@@ -29,7 +29,7 @@ + // v1 + deleteApproveRule: (data: object) => { + return request({ +- url: import.meta.env.VITE_API_URL + `/work/ruleItemStand/delete`, ++ url: import.meta.env.VITE_API_URL + `/rule/del`, + method: 'post', + data: data + }); diff --git a/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_19_16_50__Default_Changelist_.xml b/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_19_16_50__Default_Changelist_.xml new file mode 100644 index 0000000..14ea69a --- /dev/null +++ b/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_19_16_50__Default_Changelist_.xml @@ -0,0 +1,9 @@ +<changelist name="Uncommitted_changes_before_Update_at_2022_8_19_16_50_[Default_Changelist]" date="1660899123237" recycled="true" deleted="true"> + <option name="PATH" value="$PROJECT_DIR$/.idea/shelf/Uncommitted_changes_before_Update_at_2022_8_19_16_50_[Default_Changelist]/shelved.patch" /> + <option name="DESCRIPTION" value="Uncommitted changes before Update at 2022/8/19 16:50 [Default Changelist]" /> + <binary> + <option name="BEFORE_PATH" value=".idea/shelf/Uncommitted_changes_before_Update_at_2022_8_11_19_22_[Default_Changelist]/companyLogo.png" /> + <option name="AFTER_PATH" /> + <option name="SHELVED_PATH" /> + </binary> +</changelist> \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index c738754..3b4f398 100644 --- a/src/App.vue +++ b/src/App.vue @@ -13,7 +13,6 @@ <!-- </router-view>--> <el-config-provider :size="getGlobalComponentSize" :locale="i18nLocale"> <router-view v-show="themeConfig.lockScreenTime > 1" /> - <router-view v-show="themeConfig.lockScreenTime > 1" /> <LockScreen v-if="themeConfig.isLockScreen" /> <Setings ref="setingsRef" v-show="themeConfig.lockScreenTime > 1" /> <CloseFull v-if="!themeConfig.isLockScreen" /> diff --git a/src/api/specialWorkSystem/approveRule/index.ts b/src/api/specialWorkSystem/approveRule/index.ts index f881c8c..a95e65d 100644 --- a/src/api/specialWorkSystem/approveRule/index.ts +++ b/src/api/specialWorkSystem/approveRule/index.ts @@ -29,7 +29,7 @@ // v1 deleteApproveRule: (data: object) => { return request({ - url: import.meta.env.VITE_API_URL + `/work/ruleItemStand/delete`, + url: import.meta.env.VITE_API_URL + `/rule/del`, method: 'post', data: data }); diff --git a/src/layout/routerView/link.vue b/src/layout/routerView/link.vue index a48f002..ca1c5f9 100644 --- a/src/layout/routerView/link.vue +++ b/src/layout/routerView/link.vue @@ -1,9 +1,7 @@ <template> - <div class="layout-view-bg-white flex layout-view-link" :style="{ height: `calc(100vh - ${setLinkHeight}` }"> - <a :href="currentRouteMeta.isLink" target="_blank" rel="opener" class="flex-margin"> - {{ $t(currentRouteMeta.title) }}:{{ currentRouteMeta.isLink }} - </a> - </div> + <div class="layout-view-bg-white flex layout-view-link" :style="{ height: `calc(100vh - ${setLinkHeight}` }"> + <a :href="currentRouteMeta.isLink" target="_blank" rel="opener" class="flex-margin"> {{ $t(currentRouteMeta.title) }}:{{ currentRouteMeta.isLink }} </a> + </div> </template> <script lang="ts"> @@ -14,48 +12,48 @@ // 定义接口来定义对象的类型 interface LinkViewState { - currentRouteMeta: { - isLink: string; - title: string; - }; + currentRouteMeta: { + isLink: string; + title: string; + }; } interface LinkViewRouteMeta extends RouteMeta { - isLink: string; - title: string; + isLink: string; + title: string; } export default defineComponent({ - name: 'layoutLinkView', - setup() { - const storesThemeConfig = useThemeConfig(); - const { themeConfig } = storeToRefs(storesThemeConfig); - const route = useRoute(); - const state = reactive<LinkViewState>({ - currentRouteMeta: { - isLink: '', - title: '', - }, - }); - // 设置 link 的高度 - const setLinkHeight = computed(() => { - let { isTagsview } = themeConfig.value; - if (isTagsview) return `115px`; - else return `80px`; - }); - // 监听路由的变化,设置内容 - watch( - () => route.path, - () => { - state.currentRouteMeta = <LinkViewRouteMeta>route.meta; - }, - { - immediate: true, - } - ); - return { - setLinkHeight, - ...toRefs(state), - }; - }, + name: 'layoutLinkView', + setup() { + const storesThemeConfig = useThemeConfig(); + const { themeConfig } = storeToRefs(storesThemeConfig); + const route = useRoute(); + const state = reactive<LinkViewState>({ + currentRouteMeta: { + isLink: '', + title: '' + } + }); + // 设置 link 的高度 + const setLinkHeight = computed(() => { + let { isTagsview } = themeConfig.value; + if (isTagsview) return `115px`; + else return `80px`; + }); + // 监听路由的变化,设置内容 + watch( + () => route.path, + () => { + state.currentRouteMeta = <LinkViewRouteMeta>route.meta; + }, + { + immediate: true + } + ); + return { + setLinkHeight, + ...toRefs(state) + }; + } }); </script> diff --git a/src/utils/request.ts b/src/utils/request.ts index 72c5505..fe82a55 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -2,8 +2,8 @@ import { ElMessage, ElMessageBox } from 'element-plus'; import JSONbig from 'json-bigint'; import Cookies from 'js-cookie'; -import {useLoginApi} from "/@/api/login"; -import { Session, } from '/@/utils/storage'; +import { useLoginApi } from '/@/api/login'; +import { Session } from '/@/utils/storage'; // var jsonBig = require('json-bigint')({ "storeAsString": true }); // 配置新建一个 axios 实例 @@ -52,15 +52,21 @@ // 对响应数据做点什么 if (response.data.code && response.data.code === 'A0213') { ElMessage.error('用户uid不存在'); - Session.clear(); - window.location.href = '/'; + useLoginApi() + .signOut() + .then(() => { + Session.clear(); + window.location.href = '/'; + }); } else if (response.data.code && response.data.code === 'A0215') { ElMessage.error('token失效'); // logOut; - useLoginApi().signOut().then(()=>{ - Session.clear(); - window.location.href = '/'; - }) + useLoginApi() + .signOut() + .then(() => { + Session.clear(); + window.location.href = '/'; + }); } // if(response.data.code && response.data.code !== '200'){ return Promise.resolve(response); @@ -89,15 +95,15 @@ if (error.message.indexOf('timeout') != -1) { ElMessage.error('网络超时'); setTimeout(() => { - // Session.clear(); + Session.clear(); window.location.href = '/'; }, 1000); } else if (error.message == 'Network Error') { ElMessage.error('网络连接错误'); - // setTimeout(() => { - // Session.clear(); - // window.location.href = '/'; - // }, 1000); + setTimeout(() => { + Session.clear(); + window.location.href = '/'; + }, 1000); } else { if (error.response.data) ElMessage.error(error.response.data.error); else ElMessage.error('接口路径找不到'); diff --git a/src/views/intellectInspect/inspectIndex/components/inspectRecordDialog.vue b/src/views/intellectInspect/inspectIndex/components/inspectRecordDialog.vue index e065d90..3724421 100644 --- a/src/views/intellectInspect/inspectIndex/components/inspectRecordDialog.vue +++ b/src/views/intellectInspect/inspectIndex/components/inspectRecordDialog.vue @@ -43,16 +43,16 @@ <el-table-column prop="quotaContent" label="指标作业" show-overflow-tooltip align="center"></el-table-column> <el-table-column prop="secondReferenceResult" label="参数值" show-overflow-tooltip align="center"> <template #default="scope"> - <div :style="{color: scope.row.reportResult==1?'#ff0000':'#409eff'}"> - {{scope.row.dataReportType==1?'无':scope.row.secondReferenceResult}} + <div :style="{ color: scope.row.reportResult == 1 ? '#ff0000' : '#409eff' }"> + {{ scope.row.dataReportType == 1 ? '无' : scope.row.secondReferenceResult }} </div> </template> </el-table-column> <el-table-column prop="quotaUnit" label="指标单位" show-overflow-tooltip align="center"></el-table-column> <el-table-column prop="reportResult" label="结果" show-overflow-tooltip align="center"> <template #default="scope"> - <div :style="{color: scope.row.reportResult==1?'#ff0000':'#409eff'}"> - {{scope.row.reportResult==0?'正常':(scope.row.reportResult==1?'异常':'无')}} + <div :style="{ color: scope.row.reportResult == 1 ? '#ff0000' : '#409eff' }"> + {{ scope.row.reportResult == 0 ? '正常' : scope.row.reportResult == 1 ? '异常' : '无' }} </div> </template> </el-table-column> @@ -140,8 +140,8 @@ rfidId: number | null; quotaId: number | null; quotaUnit: number | null; - reportResult: number | null - secondReferenceResult: number |null; + reportResult: number | null; + secondReferenceResult: number | null; execSequence: number | null; dataReportType: number | null; firstReferenceValue: number | null; @@ -173,7 +173,7 @@ quotaId: null, quotaUnit: null, execSequence: null, - secondReferenceResult:null, + secondReferenceResult: null, reportResult: null, dataReportType: null, firstReferenceValue: null, @@ -235,7 +235,7 @@ quotaUnit: null, reportResult: null, execSequence: null, - secondReferenceResult:null, + secondReferenceResult: null, dataReportType: null, firstReferenceValue: null, secondReferenceSign: null, @@ -266,7 +266,7 @@ data.inspectTaskForm.execDepId = res.data.data.execDepId; giveClassGroup(); data.inspectTaskForm = JSON.parse(JSON.stringify(res.data.data)); - console.log(data.inspectTaskForm,'this data') + console.log(data.inspectTaskForm, 'this data'); } else { } }) @@ -277,7 +277,6 @@ // const toRefer =(row, column, cellValue, index)=>{ // return row.secondReferenceResult==0?'正常':(row.reportResult==1?'异常':'无') // } - const submitInspectPoint = async () => { if (data.title === '新增巡检任务' && data.pointTitle === '新增巡检点') { diff --git a/src/views/loginPage/component/accountLogin.vue b/src/views/loginPage/component/accountLogin.vue index 604b58f..05fea55 100644 --- a/src/views/loginPage/component/accountLogin.vue +++ b/src/views/loginPage/component/accountLogin.vue @@ -109,15 +109,16 @@ let currentTimeInfo = currentTime.value; // 登录成功,跳到转首页 // 如果是复制粘贴的路径,非首页/登录页,那么登录成功后重定向到对应的路径中 - if (route.query?.redirect) { - router.push('/newMenu'); - // router.push({ - // path: <string>route.query?.redirect, - // query: Object.keys(<string>route.query?.params).length > 0 ? JSON.parse(<string>route.query?.params) : '', - // }); - } else { - router.push('/loginPage'); - } + // if (route.query?.redirect) { + // debugger; + router.push('/newMenu'); + // router.push({ + // path: <string>route.query?.redirect, + // query: Object.keys(<string>route.query?.params).length > 0 ? JSON.parse(<string>route.query?.params) : '', + // }); + // } else { + // router.push('/loginPage'); + // } state.loading.signIn = true; const signInText = t('message.signInText'); ElMessage.success(`${currentTimeInfo},${signInText}`); diff --git a/src/views/outLink/index.vue b/src/views/outLink/index.vue new file mode 100644 index 0000000..4288641 --- /dev/null +++ b/src/views/outLink/index.vue @@ -0,0 +1,64 @@ +<template> + <div class="layout-view-bg-white flex layout-view-link" :style="{ height: `calc(100vh - ${setLinkHeight}` }"> + <a :href="currentRouteMeta.isLink" target="_blank" rel="opener" class="flex-margin"> {{ $t(currentRouteMeta.title) }}:{{ currentRouteMeta.isLink }} </a> + </div> +</template> + +<script lang="ts"> +import { defineComponent, toRefs, reactive, computed, watch, onMounted } from 'vue'; +import { useRoute, RouteMeta } from 'vue-router'; +import { storeToRefs } from 'pinia'; +import { useThemeConfig } from '/@/stores/themeConfig'; + +// 定义接口来定义对象的类型 +interface LinkViewState { + currentRouteMeta: { + isLink: string; + title: string; + }; +} +interface LinkViewRouteMeta extends RouteMeta { + isLink: string; + title: string; +} + +export default defineComponent({ + name: 'index', + setup() { + const storesThemeConfig = useThemeConfig(); + const { themeConfig } = storeToRefs(storesThemeConfig); + const route = useRoute(); + const state = reactive<LinkViewState>({ + currentRouteMeta: { + isLink: '', + title: '' + } + }); + // 设置 link 的高度 + const setLinkHeight = computed(() => { + let { isTagsview } = themeConfig.value; + if (isTagsview) return `115px`; + else return `80px`; + }); + // 监听路由的变化,设置内容 + watch( + () => route.path, + () => { + state.currentRouteMeta = <LinkViewRouteMeta>route.meta; + }, + { + immediate: true + } + ); + + onMounted(() => { + window.open(state.currentRouteMeta.isLink as string, '_blank'); + }); + + return { + setLinkHeight, + ...toRefs(state) + }; + } +}); +</script> diff --git a/src/views/safeKnowledge/bmgz/index.vue b/src/views/safeKnowledge/bmgz/index.vue index be13f8a..5a754e9 100644 --- a/src/views/safeKnowledge/bmgz/index.vue +++ b/src/views/safeKnowledge/bmgz/index.vue @@ -1,40 +1,31 @@ <template> - <div class="home-container"> - <iframe src="http://39.104.85.193/bmgz"></iframe> - </div> + <div class="home-container"> + <iframe src="http://39.104.85.193/bmgz"></iframe> + </div> </template> <script> export default { - name: 'safeKnowledgeSys', - props: { - - }, - data(){ - return{ - - } - }, - created() { - - }, - methods:{ - - } -} + name: 'safeKnowledgeSys', + props: {}, + data() { + return {}; + }, + created() {}, + methods: {} +}; </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped lang="scss"> - .home-container{ +.home-container { height: calc(100vh - 144px); box-sizing: border-box; overflow: hidden; - - iframe{ - width: 100%; - height: 100%; - border: none; + iframe { + width: 100%; + height: 100%; + border: none; } - } +} </style> diff --git a/src/views/specialWorkSystem/workApplyManage/myJobApply/index.vue b/src/views/specialWorkSystem/workApplyManage/myJobApply/index.vue index 7a1a175..c8dd308 100644 --- a/src/views/specialWorkSystem/workApplyManage/myJobApply/index.vue +++ b/src/views/specialWorkSystem/workApplyManage/myJobApply/index.vue @@ -1,807 +1,785 @@ <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="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-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="applyTime" label="申请时间" width="180"/> - <el-table-column label="申请状态" width="180"> - <template #default="scope"> - <el-tag type="success">{{ 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="作业申请详情"> - <el-form :model="details" label-width="120px"> - <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.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-item> - <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> - </el-form-item> - </el-form> - </el-dialog> - <el-dialog v-model="dialogStatus" title="作业申请进度"> - <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">审批类型:<span>{{item.typeDesc}}</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> + <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="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-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="applyTime" label="申请时间" width="180" /> + <el-table-column label="申请状态" width="180"> + <template #default="scope"> + <el-tag type="success">{{ 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="作业申请详情"> + <el-form :model="details" label-width="120px"> + <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.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-item> + <el-button type="primary" @click="dialogDetails = false" size="default">确认</el-button> + </el-form-item> + </el-form> + </el-dialog> + <el-dialog v-model="dialogStatus" title="作业申请进度"> + <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"> + 审批类型:<span>{{ item.typeDesc }}</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 } 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 { workApplyApi } from '/@/api/specialWorkSystem/workApply'; - import type { TabsPaneContext } from 'element-plus' +import { toRefs, reactive, defineComponent, ref, onMounted } 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 { workApplyApi } from '/@/api/specialWorkSystem/workApply'; +import type { TabsPaneContext } from 'element-plus'; - // 定义接口来定义对象的类型 - 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:{} - } +// 定义接口来定义对象的类型 +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>; +} +interface type { + id: number; + name: string; +} - export default defineComponent({ - name: 'myApply', - components: {}, - setup() { - const userInfo = useUserInfo(); - const { userInfos } = storeToRefs(userInfo); - const router = useRouter(); - const state = reactive<stateType>({ - pageIndex1: 1, - pageSize1: 10, - totalSize1: 0, - activeName: '1', - chosenIndex: null, - searchWord: '', - applyData: [], - workTimeList: [], - multipleSelection: [], - approveInfo: { - approvalSteps:[], - operators: [] - }, - dialogDetails: false, - dialogStatus: false, - deleteDialog: false, - addRecord: {}, - details: {}, - statusInfo:{}, - deleteId: null, - deleteArr: [] - }); - interface User { - name: string; - list: []; - info: string; - } +export default defineComponent({ + name: 'myApply', + components: {}, + setup() { + const userInfo = useUserInfo(); + const { userInfos } = storeToRefs(userInfo); + const router = useRouter(); + const state = reactive<stateType>({ + pageIndex1: 1, + pageSize1: 10, + totalSize1: 0, + activeName: '1', + 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 reLoadData = async () => { + getListByPage(); + }; - // 填写表单 - const toApply =()=>{ - router.push({ - path: 'workTicket', - }); - } + // 填写表单 + const toApply = () => { + router.push({ + path: 'workTicket' + }); + }; - const handleClick = (tab: TabsPaneContext, event: Event) => { - console.log(tab, event) - } + const handleClick = (tab: TabsPaneContext, event: Event) => { + console.log(tab, event); + }; - // 分页获取工作时间组列表 - const getListByPage = async () => { - const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { name: state.searchWord } }; - let res = await workApplyApi().getApplyListtPage(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 - console.log('0212121') - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }; + // 分页获取工作时间组列表 + const getListByPage = async () => { + const data = { pageSize: state.pageSize1, pageIndex: state.pageIndex1, searchParams: { name: state.searchWord } }; + let res = await workApplyApi().getApplyListtPage(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; + console.log('0212121'); + } 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 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 searchRecord = async () => { + if (state.searchWord == '') { + ElMessage({ + type: 'warning', + message: '请输入查询关键词' + }); + } else { + getListByPage(); + } + }; - const clearSearch = async () => { - state.searchWord = ''; - getListByPage(); - }; + const clearSearch = async () => { + state.searchWord = ''; + getListByPage(); + }; - // 查看进度 - const viewStatus = (row)=>{ - getStatus({ workApplyId: row.workApplyId }); - state.dialogStatus = true - }; + // 查看进度 + 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); - console.log(state.approveInfo,'steps') - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }; + // 查询进度方法 + 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); + console.log(state.approveInfo, 'steps'); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - const deleteRecordBtn = (row) => { - state.deleteId = row.workApplyId; - state.deleteDialog = true; - }; + 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: res.data.msg - }); - getListByPage(); - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - }; + // 取消申请方法 + const deleteRecord = async (data: any) => { + let res = await workApplyApi().cancelApply(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: res.data.msg + }); + getListByPage(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }; - const conFirmDelete = () => { - deleteRecord({ workApplyId: state.deleteId }); - state.deleteDialog = false; - }; + 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 handleSizeChange1 = (val: number) => { + state.pageSize1 = val; + getListByPage(); + }; + const handleCurrentChange1 = (val: number) => { + state.pageIndex1 = val; + getListByPage(); + }; - // 查看记录 - const viewRecord = (row) => { - state.details = JSON.parse(JSON.stringify(row)); - state.details.workDetail.otherSpecialWork = state.details.workDetail.otherSpecialWork.split(',') - if(state.details.workDetail.otherSpecialWork == null || state.details.workDetail.otherSpecialWork == []){state.details.workDetail.otherSpecialWork = []} - else{ - state.details.workDetail.otherSpecialWork.map(item =>{ - console.log(item,'item') - if(item == '1'){ - item = '动火作业' - return item - } else if(item == '2'){ - item = '受限空间作业' - return item - } else if(item == '3'){ - item = '吊装作业' - return item - } else if(item == '4'){ - item = '动土作业' - return item - } else if(item == '5'){ - item = '断路作业' - return item - } else if(item == '6'){ - item = '高处作业' - return item - } else if(item == '7'){ - item = '临时用电作业' - return item - } else { - item = '盲板抽堵作业' - return item - } - }) - } - console.log(state.details.workDetail.otherSpecialWork,'666666') - state.dialogDetails = true; - }; + // 查看记录 + const viewRecord = (row: any) => { + row.workDetail.otherSpecialWork = JSON.parse(JSON.stringify(row.workDetail.otherSpecialWork.split(','))).map((item: Array<string>) => { + return state.workType.find((i: { id: number }) => i.id === Number(item))?.name; + }); + state.details = JSON.parse(JSON.stringify(row)); + // state.details.workDetail.otherSpecialWork = state.details.workDetail.otherSpecialWork.split(','); + // if (state.details.workDetail.otherSpecialWork == null || state.details.workDetail.otherSpecialWork == []) { + // state.details.workDetail.otherSpecialWork = []; + // } else { + // state.details.workDetail.otherSpecialWork.map((item) => { + // console.log(item, 'item'); + // if (item == '1') { + // item = '动火作业'; + // return item; + // } else if (item == '2') { + // item = '受限空间作业'; + // return item; + // } else if (item == '3') { + // item = '吊装作业'; + // return item; + // } else if (item == '4') { + // item = '动土作业'; + // return item; + // } else if (item == '5') { + // item = '断路作业'; + // return item; + // } else if (item == '6') { + // item = '高处作业'; + // return item; + // } else if (item == '7') { + // item = '临时用电作业'; + // return item; + // } else { + // item = '盲板抽堵作业'; + // return item; + // } + // }); + // } + // console.log(state.details.workDetail.otherSpecialWork, '666666'); + state.dialogDetails = true; + }; + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId', value); + userInfos.value.projectId = value; + await initBackEndControlRoutes(); + }; - // 折线图 - const renderMenu = async (value: string) => { - Session.set('projectId', value); - userInfos.value.projectId = value; - await initBackEndControlRoutes(); - }; + // 页面载入时执行方法 + onMounted(() => { + getListByPage(); + }); - // 页面载入时执行方法 - onMounted(() => { - getListByPage(); - }); - - return { - View, - Edit, - Delete, - Refresh, - Plus, - Finished, - reLoadData, - toApply, - handleClick, - toNames, - searchRecord, - clearSearch, - viewRecord, - viewStatus, - deleteRecordBtn, - conFirmDelete, - getListByPage, - handleSizeChange1, - handleCurrentChange1, - ...toRefs(state) - }; - } - }); + return { + View, + Edit, + Delete, + Refresh, + Plus, + Finished, + reLoadData, + toApply, + handleClick, + toNames, + 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%; +$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); - } + &::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; + .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; + .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; + .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%; + .box-card { + width: 100%; - .card-header { - display: flex; - justify-content: space-between; - align-items: center; + .card-header { + display: flex; + justify-content: space-between; + align-items: center; - span{ - font-weight: bold; - margin-left: 10px; - } - } + span { + font-weight: bold; + margin-left: 10px; + } + } - .text { - width: 100%; - font-size: 14px; - margin-bottom: 10px; - padding-left: 10px; + .text { + width: 100%; + font-size: 14px; + margin-bottom: 10px; + padding-left: 10px; - span{ - font-weight: bolder; - color: #409EFF; - } + 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; + &: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; - } - &>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; + } + } + .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; + & > span { + flex: 1; + } + & > div { + flex: 2; + 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; + & > 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; + & > 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; - } - } - .item-cont{ - width: 100%; - display: flex; - align-items: center; - justify-content: space-between; - padding: 10px 0; - border-bottom: 1px solid #c6e2ff; + & > 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; + } + } + } + } + } + &: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; + } - &>span{ - flex: 1; - } - &>div{ - flex: 2; - text-align: center; + .topInfo { + display: flex; + align-items: center; + font-size: 16px; + font-weight: bold; - &>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; - } - } - } - } - } - &: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; - } - } + & > div { + white-space: nowrap; + margin-right: 20px; + } + } + } + .el-card { + border: 0; + } +} </style> diff --git a/src/views/specialWorkSystem/workApplyManage/workTicket/index.vue b/src/views/specialWorkSystem/workApplyManage/workTicket/index.vue index 7d162b9..88aab2a 100644 --- a/src/views/specialWorkSystem/workApplyManage/workTicket/index.vue +++ b/src/views/specialWorkSystem/workApplyManage/workTicket/index.vue @@ -1,317 +1,279 @@ <template> - <div class="home-container"> - <div style="height: 100%"> - <el-form :model="form" label-width="120px" :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.value" - :label="item.label" - :value="item.value" - /> - </el-select> - </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="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="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.value" - /> - </el-select> - </el-form-item> - </el-col> - </el-row> - </div> - </el-form> - <div class="applyBtn"> - <el-button type="primary" size="large" plain @click="submitForm(ruleFormRef)">发起申请</el-button> - </div> - </div> - </div> + <div class="home-container"> + <div style="height: 100%"> + <el-form :model="form" label-width="120px" :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.value" :label="item.label" :value="item.value" /> + </el-select> + </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="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="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.value" /> + </el-select> + </el-form-item> + </el-col> + </el-row> + </div> + </el-form> + <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 } from 'element-plus' - import type { FormInstance, FormRules } from 'element-plus' - import { workApplyApi } from '/@/api/specialWorkSystem/workApply'; +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'; +interface stateType { + form: Object; + workerList: Array<any>; + workTypeList: Array<any>; + workLevelList: Array<any>; + otherWorkList: Array<any>; +} +export default defineComponent({ + name: 'workTicket', + components: {}, + setup() { + const userInfo = useUserInfo(); + const { userInfos } = storeToRefs(userInfo); + const state = reactive<stateType>({ + form: { + operatorUids: [], + workType: 1, + workLevel: null, + workContent: '', + workLocation: '', + workDetail: { + hotMethod: '', + otherSpecialWork: [] + }, + workTimeLine: [], + expStartTime: '', + expEndTime: '' + }, + workerList: [ + { + label: '张三', + value: 53 + }, + { + label: '李四', + value: 54 + }, + { + label: '测试一', + value: 55 + }, + { + label: '测试二', + value: 56 + } + ], + workTypeList: [ + { + label: '类型一', + value: 1 + }, + { + label: '类型二', + value: 2 + } + ], + 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 ruleFormRef = ref<FormInstance>(); + const applyRules = reactive<FormRules>({ + operatorUid: [{ 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' }], + workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + 'workDetail.hotMethod': [{ required: true, message: '该内容不能为空', trigger: 'blur' }], + 'workDetail.otherSpecialWork': [{ required: true, message: '该内容不能为空', trigger: 'blur' }] + }); + 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().postFireApply(data); + if (res.data.code === '200') { + ElMessage({ + type: 'success', + message: '提交成功!' + }); + formEl.resetFields(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + } else { + console.log('error submit!', fields); + } + }); + }; + // 折线图 + const renderMenu = async (value: string) => { + Session.set('projectId', value); + userInfos.value.projectId = value; + await initBackEndControlRoutes(); + }; - interface stateType { - form: Object, - workerList: Array<any>, - workTypeList: Array<any>, - workLevelList: Array<any>, - otherWorkList: Array<any> - } - export default defineComponent({ - name: 'workTicket', - components: {}, - setup() { - const userInfo = useUserInfo() - const { userInfos } = storeToRefs(userInfo); - const state = reactive<stateType>({ - form: { - operatorUids: [], - workType: 1, - workLevel: null, - workContent: '', - workLocation: '', - workDetail:{ - hotMethod: '', - otherSpecialWork: [] - }, - workTimeLine: [], - expStartTime: '', - expEndTime: '' - }, - workerList:[ - { - label: "张三", - value: 53 - }, - { - label: "李四", - value: 54 - }, - { - label: "测试一", - value: 55 - }, - { - label: "测试二", - value: 56 - } - ], - workTypeList: [ - { - label: "类型一", - value: 1 - }, - { - label: "类型二", - value: 2 - } - ], - 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 ruleFormRef = ref<FormInstance>() - const applyRules = reactive<FormRules>({ - operatorUid: [{ 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' }], - workTimeLine: [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - "workDetail.hotMethod": [{ required: true, message: '该内容不能为空', trigger: 'blur' }], - "workDetail.otherSpecialWork": [{ required: true, message: '该内容不能为空', trigger: 'blur' }] - }); - 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().postFireApply(data) - if (res.data.code === '200') { - ElMessage({ - type: 'success', - message: '提交成功!' - }); - formEl.resetFields() - } else { - ElMessage({ - type: 'warning', - message: res.data.msg - }); - } - } 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, - submitForm, - ...toRefs(state), - }; - }, - }); + return { + renderMenu, + Search, + ruleFormRef, + applyRules, + 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; - 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; - } - } +.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, 0.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/workFlow/approveBasic/index.vue b/src/views/specialWorkSystem/workFlow/approveBasic/index.vue index 8720d1f..d6fda36 100644 --- a/src/views/specialWorkSystem/workFlow/approveBasic/index.vue +++ b/src/views/specialWorkSystem/workFlow/approveBasic/index.vue @@ -22,7 +22,7 @@ <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> <el-button type="primary" :icon="Plus" size="default" @click="openApproveBasicDialog('新增', {})">新建</el-button> - <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> + <el-button type="danger" :icon="Delete" size="default" @click="deleteMoreApproveBasic" plain>批量删除</el-button> </el-col> <el-button type="primary" :icon="Refresh" size="default" /> </el-row> @@ -199,6 +199,33 @@ type: 'warning' }) .then(async () => { + let res = await approveBasicApi().deleteApproveBasic({ ids: [row.ruleStandId] }); + if (res.data.code === '200') { + state.deleteList.ids = []; + ElMessage({ + type: 'success', + duration: 2000, + message: '删除成功' + }); + await getInspectionTask(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }) + .catch(() => {}); + }; + + // 批量删除 + const deleteMoreApproveBasic = (row: any) => { + ElMessageBox.confirm(`此操作将永久删除这些标准项,是否继续?`, '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { let res = await approveBasicApi().deleteApproveBasic(state.deleteList); if (res.data.code === '200') { ElMessage({ @@ -274,6 +301,7 @@ parseNumber, handleSelectionChange, deleteApproveBasic, + deleteMoreApproveBasic, getInspectionTask, onHandleSizeChange, onHandleCurrentChange, diff --git a/src/views/specialWorkSystem/workFlow/approveRule/index.vue b/src/views/specialWorkSystem/workFlow/approveRule/index.vue index 0893fd7..50ed8ff 100644 --- a/src/views/specialWorkSystem/workFlow/approveRule/index.vue +++ b/src/views/specialWorkSystem/workFlow/approveRule/index.vue @@ -4,9 +4,7 @@ <el-row class="homeCard"> <div class="basic-line"> <span>规则名称:</span> - <el-select v-model="tableData.params.searchParams.ruleName" clearable filterable class="input-box" placeholder="任务类型"> - <el-option v-for="item in workTypeList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> + <el-input v-model="tableData.params.searchParams.ruleName" class="input-box" placeholder="规则名称"> </el-input> </div> <div class="basic-line"> <span>部门:</span> @@ -34,7 +32,7 @@ <el-row class="cardTop"> <el-col :span="12" class="mainCardBtn"> <el-button type="primary" :icon="Plus" size="default" @click="openApproveRuleDialog('新增', {})">新建</el-button> - <!-- <el-button type="danger" :icon="Delete" size="default" plain>删除</el-button>--> + <el-button type="danger" :icon="Delete" size="default" @click="deleteApproveRule" plain>批量删除</el-button> </el-col> <el-button type="primary" :icon="Refresh" size="default" /> </el-row> @@ -63,7 +61,6 @@ <template #default="scope"> <el-button link type="primary" size="small" :icon="View" @click="openApproveRuleDialog('查看', scope.row)">查看</el-button> <el-button link type="primary" size="small" :icon="Edit" @click="openApproveRuleDialog('修改', scope.row)">修改</el-button> - <el-button link type="danger" size="small" :icon="Delete" @click="deleteApproveRule(scope.row)">删除</el-button> </template> </el-table-column> </el-table> @@ -217,7 +214,34 @@ // 删除 const deleteApproveRule = (row: any) => { - ElMessageBox.confirm(`此操作将永久删除该任务:“${row.unitName}”,是否继续?`, '提示', { + ElMessageBox.confirm(`此操作将永久删除该审批规则,是否继续?`, '提示', { + confirmButtonText: '确认', + cancelButtonText: '取消', + type: 'warning' + }) + .then(async () => { + let res = await approveRuleApi().deleteApproveRule({ ids: [row.id] }); + state.deleteList.ids = []; + if (res.data.code === '200') { + ElMessage({ + type: 'success', + duration: 2000, + message: '删除成功' + }); + await getApproveRule(); + } else { + ElMessage({ + type: 'warning', + message: res.data.msg + }); + } + }) + .catch(() => {}); + }; + + // 批量删除 + const deleteMoreApproveRule = (row: any) => { + ElMessageBox.confirm(`此操作将永久删除这些审批规则,是否继续?`, '提示', { confirmButtonText: '确认', cancelButtonText: '取消', type: 'warning' @@ -301,6 +325,7 @@ parseNumber, deleteApproveRule, getApproveRule, + deleteMoreApproveRule, handleSelectionChange, onHandleSizeChange, onHandleCurrentChange, @@ -437,15 +462,6 @@ border: 2px solid #0098f5; color: #0098f5; } -} -.el-input { - width: 100% !important; -} -:deep(.el-date-editor) { - width: 100%; -} -.el-select { - width: 100%; } :deep(.el-textarea.is-disabled .el-textarea__inner) { background-color: var(--el-card-bg-color); diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue index 7b5cd4b..4bc20a5 100644 --- a/src/views/system/menu/index.vue +++ b/src/views/system/menu/index.vue @@ -191,6 +191,7 @@ onMounted(() => { getMenuList(); getRoleList(); + console.log(1); }); return { parseRole, -- Gitblit v1.9.2