diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/LoginController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/LoginController.java index 60cbef71..7f64b650 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/LoginController.java +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/app/LoginController.java @@ -78,8 +78,15 @@ public abstract class LoginController { loginUser.setNickname(nickName); loginUser.setUserType(userType); loginUser.setDeptId(deptId); - loginUser.setPlatformType(PlatformTypeEnums.ENTERPRISE.getKey()); - + if(deviceType.equals("supervision_app")){ + loginUser.setPlatformType(PlatformTypeEnums.SUPERVISION.getKey()); + } + else if(deviceType.equals("enforcement_app")){ + loginUser.setPlatformType(PlatformTypeEnums.ENFORCEMENT.getKey()); + } + else if(deviceType.equals("enterprise_app")){ + loginUser.setPlatformType(PlatformTypeEnums.ENTERPRISE.getKey()); + } SaLoginParameter model = new SaLoginParameter(); model.setDeviceType(deviceType); model.setExtra("clientid", clientId); diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/nos/common.js b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/nos/common.js new file mode 100644 index 00000000..6d79358a --- /dev/null +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/nos/common.js @@ -0,0 +1,11 @@ +import { _get, _post } from "@/http/index"; + +const baseUrl = "/app-enf"; + +// 公共api +// 执法端-查询企业信息以及二维码地址 +export const queryListAndQrInfo = (params, success, error) => _post(baseUrl + "/enterpriseInfo/queryListAndQrInfo", params, success, error); +// 执法端-分页查询用户 +export const queryUsersByPage = (params, success, error) => _get(baseUrl + "/system/queryUsersByPage", params, success, error); +// 查询执依据告列表 +export const queryAccordingList = (params, success, error) => _get(baseUrl + "/according/list", params, success, error); diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/nos/index.js b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/nos/index.js new file mode 100644 index 00000000..a049b45f --- /dev/null +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/api/nos/index.js @@ -0,0 +1,35 @@ +import { _get, _post } from "@/http/index"; + +const baseUrl = "/app-enf"; + +// enf 测试单 Demo:GET /nosapi/enforcementcode/enfDemo/list -> TableDataInfo { rows, total } +export const listEnfDemo = (params) => + _get("/enforcementcode/enfDemo/list", params); + +// 非现场api +// 新增非现场执法任务 +export const nosAddApi = (params, success, error) => _post("/app-enf/nos-law-enforcement-task/add", params, success, error); +// 分页查询非现场执法任务 +export const nosListPageApi = (params, success, error) => _post("/app-enf/nos-law-enforcement-task/page", params, success, error); +// 获取非现场执法任务详情 +export const nosInfoApi = (params, success, error) => _get("/app-enf/nos-law-enforcement-task/detail", params, success, error); +// 审核非现场执法任务 +export const nosApproveApi = (params, success, error) => _post("/app-enf/nos-law-enforcement-task/approve", params, success, error); +// 查询非现场执法项目任务类别 +export const nosTypeApi = (params, success, error) => _post("/app-enf/nos-law-enforcement-task/type", params, success, error); +//查询非现场执法项目任务来源列表 +export const nosTaskSourceListApi = (params, success, error) => _post("/app-enf/task-source/list", params, success, error); + +//查询已评价的任务 +export const nosTaskHasCommentPageApi = (params, success, error) => _post("/app-enf/nos-law-enforcement-task/has-comment/page", params, success, error); + +//获取当前用户所属执法单位备案 +export const isFilingApi = (params, success, error) => _get("/enf-app/nos-law-enforcement-filing/detail", params, success, error); + +//开启云笔录 +export const cloudRecordStartApi = (params, success, error) => _get("/app-enf/nos-law-enforcement-task/start/digital-voice-logging", params, success, error); +//查询云笔录详情 +export const cloudRecordDetailApi = (params, success, error) => _get("/app-enf/nos-law-enforcement-task/digital-voice-logging/detail", params, success, error); +//确认云笔录材料 +export const cloudRecordConfirmApi = (params, success, error) => _post("/app-enf/nos-law-enforcement-task/digital-voice-logging/confirm", params, success, error); + diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/common/globalExpandRouter.js b/zdxt-web-client/zdxt-efcode-enforcement-app/src/common/globalExpandRouter.js index adb4a6e4..a2c0f263 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/src/common/globalExpandRouter.js +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/common/globalExpandRouter.js @@ -4,7 +4,7 @@ const $globalRouterModules = (routes) => { let pathArr = []; let nameArr = []; const modulesRouter = import.meta.glob( - ["../router/enterprise-app/ent-main-router.js", "../router/demo/demo-main-router.js", "../router/enforcement-app/enf-main-router.js", "../router/supervision-app/sup-main-router.js"] + ["../router/enterprise-app/ent-main-router.js", "../router/nos/nos-base-router.js", "../router/demo/demo-main-router.js", "../router/enforcement-app/enf-main-router.js", "../router/supervision-app/sup-main-router.js"] ,{ eager: true, }); diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/nos/AttachmentTaskSource.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/nos/AttachmentTaskSource.vue new file mode 100644 index 00000000..057e4d26 --- /dev/null +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/nos/AttachmentTaskSource.vue @@ -0,0 +1,189 @@ + + + 通知/公告 + + + + 附 件 (仅限于PDF文档,50M以下,最多五个文件) + + + + + + + + + + + + + diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/nos/EnforcementInfoSection.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/nos/EnforcementInfoSection.vue new file mode 100644 index 00000000..7740f61b --- /dev/null +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/nos/EnforcementInfoSection.vue @@ -0,0 +1,539 @@ + + + {{ formData.taskTypeId == 1 ? '执法信息' : '巡查信息' }} + + + + + + + *{{ formData.taskTypeId == 1 ? '执法人员' : '参与人员' }} + + + {{ defaultPerson?.lawEnforcerName }} {{ defaultPerson?.lawEnforcerIdCard ?? defaultPerson?.lawEnforcerPhone }} + + + + {{ person.lawEnforcerName || "请选择" }} {{ person.lawEnforcerIdCard ?? person.lawEnforcerPhone }} + + + + + 请选择 + + + + + + + + + + + + + + + + + *{{ requirementLabel }} + + 指定企业要上传的材料名称(例如:营业执照) + + + + + + + + + + + + + + + + + + + + *执法依据 + + + + {{ basis || "请选择" }} + + + + + + + + + + + + + + + + + + + + + + diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/nos/EnterpriseInfoSection.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/nos/EnterpriseInfoSection.vue new file mode 100644 index 00000000..9f7f097b --- /dev/null +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/nos/EnterpriseInfoSection.vue @@ -0,0 +1,85 @@ + + + 检查对象 + + + + + + + + + + + + diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/nos/RegisterPopups.vue b/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/nos/RegisterPopups.vue new file mode 100644 index 00000000..7e061aa2 --- /dev/null +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/components/enforcement/nos/RegisterPopups.vue @@ -0,0 +1,619 @@ + + + + + + + 选择企业 + + + + + 搜索 + + + + {{ item.enterpriseName }} + 统一社会信用代码:{{ item.usciCode }} + + + + + + + + + + + + + + + + + + + + + 人员查询 + + + + + 搜索 + + + + {{ person.userName }} + 执法证件号:{{ person.lawEnforcerIdCard ?? person.lawEnforcerPhone }} + + + + + + + + + + + 执法依据 + + + + + 搜索 + + + + {{ item.name }} + + + + + + + + + + + + + + + + diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/src/util/fileUrl.js b/zdxt-web-client/zdxt-efcode-enforcement-app/src/util/fileUrl.js new file mode 100644 index 00000000..be828f69 --- /dev/null +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/src/util/fileUrl.js @@ -0,0 +1,39 @@ +import { baseUrl } from "@/config/env" + +const isAbsoluteUrl = (path) => typeof path === "string" && /^https?:\/\//i.test(path) + +const getApiBase = () => (baseUrl || "").replace(/\/+$/, "") + +/** + * 去掉 VITE_BASE_URL 多余前缀,支持重复前缀,得到相对路径,如 /profile/2026/... + */ +export const toRelativeFilePath = (path) => { + if (typeof path !== "string" || !path) return "" + if (isAbsoluteUrl(path)) return path + + const prefix = getApiBase() + let p = path.startsWith("/") ? path : `/${path}` + + if (prefix) { + const normalizedPrefix = prefix.startsWith("/") ? prefix : `/${prefix}` + while (p === normalizedPrefix || p.startsWith(`${normalizedPrefix}/`)) { + p = p.slice(normalizedPrefix.length) || "/" + if (!p.startsWith("/")) p = `/${p}` + } + } + + return p +} + +/** + * 拼接为前端可访问路径,如 /profile/2026/06/12/xxx.pdf + */ +export const toFullFileUrl = (path) => { + if (typeof path !== "string" || !path) return "" + if (isAbsoluteUrl(path)) return path + + const prefix = getApiBase() + const relative = toRelativeFilePath(path) + if (!prefix) return relative + return prefix + relative +} diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/vite-env/.env.enforcement-dev-zrb b/zdxt-web-client/zdxt-efcode-enforcement-app/vite-env/.env.enforcement-dev-zrb index 560994f8..e09ed6f3 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/vite-env/.env.enforcement-dev-zrb +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/vite-env/.env.enforcement-dev-zrb @@ -5,3 +5,4 @@ VITE_CONTEXT_PATH = '/efcode20-enf-app/' VITE_PROXY_TARGET = 'http://localhost:17000' VITE_DEFAULT_LOGIN = '/enforcement/loginByPassword' VITE_APP_ENV = 'dev' +VITE_FILE_URL = '' diff --git a/zdxt-web-client/zdxt-efcode-enforcement-app/vite-env/.env.enforcement-prod b/zdxt-web-client/zdxt-efcode-enforcement-app/vite-env/.env.enforcement-prod index 2d8ae639..245c4d0d 100644 --- a/zdxt-web-client/zdxt-efcode-enforcement-app/vite-env/.env.enforcement-prod +++ b/zdxt-web-client/zdxt-efcode-enforcement-app/vite-env/.env.enforcement-prod @@ -5,3 +5,4 @@ VITE_PROXY_TARGET = 'http://localhost:17000' VITE_CONTEXT_PATH = '/efcode20-enf-app/' VITE_DEFAULT_LOGIN = '/enforce/loginByPassword' VITE_APP_ENV = 'prod' +VITE_FILE_URL = ''