diff --git a/manifest.json b/manifest.json index 4474113..868f952 100644 --- a/manifest.json +++ b/manifest.json @@ -74,7 +74,13 @@ "es6" : true, "postcss" : true, "minified" : true - } + }, + "permission" : { + "scope.userLocation" : { + "desc" : "你的位置信息将用于选择隐患位置" + } + }, + "requiredPrivateInfos" : ["chooseLocation", "getLocation"] }, "mp-toutiao" : { "appid" : "", diff --git a/pages.json b/pages.json index 936941d..fec7d84 100644 --- a/pages.json +++ b/pages.json @@ -14,6 +14,12 @@ "navigationBarTitleText": "三查一曝光" } }, + { + "path": "pages/map/map", + "style": { + "navigationBarTitleText": "一张图" + } + }, { "path": "pages/plandetail/plandetail", "style": { @@ -98,6 +104,12 @@ "navigationBarTitleText": "隐患验收" } }, + { + "path":"pages/hiddendanger/assignment", + "style": { + "navigationBarTitleText": "隐患交办" + } + }, { "path":"pages/closeout/application", "style": { @@ -170,7 +182,53 @@ "navigationBarTitleText": "编辑资料" } - } + }, + { + "path" : "pages/login/login", + "style" : + { + "navigationBarTitleText" : "登录页面", + "navigationStyle": "custom" + } + }, + { + "path" : "pages/login/reg", + "style" : + { + "navigationBarTitleText" : "注册账号", + "navigationStyle": "custom" + } + }, + { + "path" : "pages/login/enterprise", + "style" : + { + "navigationBarTitleText" : "注册新企业" + } + }, + { + "path" : "pages/login/success", + "style" : + { + "navigationBarTitleText" : "注册成功" + } + }, + { + "path" : "pages/login/forget", + "style" : + { + "navigationBarTitleText" : "忘记密码", + "navigationStyle": "custom" + } + }, + { + "path" : "pages/login/agreement", + "style" : + { + "navigationBarTitleText" : "用户协议", + "navigationStyle": "custom" + } + } ], "globalStyle": { "navigationBarTextStyle": "white", @@ -178,5 +236,37 @@ "navigationBarBackgroundColor": "#007aff", "backgroundColor": "#F8F8F8" }, + "tabBar": { + "color": "#999999", + "selectedColor": "#007aff", + "borderStyle": "black", + "backgroundColor": "#ffffff", + "list": [ + { + "pagePath": "pages/index/index", + "text": "首页", + "iconPath": "static/tabBar/home.png", + "selectedIconPath": "static/tabBar/home.png" + }, + { + "pagePath": "pages/map/map", + "text": "一张图", + "iconPath": "static/tabBar/map.png", + "selectedIconPath": "static/tabBar/map.png" + }, + { + "pagePath": "pages/Inspectionwarning/Inspectionwarning", + "text": "预警", + "iconPath": "static/tabBar/warning.png", + "selectedIconPath": "static/tabBar/warning.png" + }, + { + "pagePath": "pages/personalcenter/my", + "text": "我的", + "iconPath": "static/tabBar/my.png", + "selectedIconPath": "static/tabBar/my.png" + } + ] + }, "uniIdRouter": {} } diff --git a/pages/closeout/application.vue b/pages/closeout/application.vue index ba1b800..16d7719 100644 --- a/pages/closeout/application.vue +++ b/pages/closeout/application.vue @@ -1,25 +1,26 @@ \ No newline at end of file diff --git a/pages/closeout/editor.vue b/pages/closeout/editor.vue index 52dbd71..0692b17 100644 --- a/pages/closeout/editor.vue +++ b/pages/closeout/editor.vue @@ -3,36 +3,133 @@ 隐患 - * - - - 整改时限 - * - - - 隐患治理责任单位 - - 主要负责人 - - 主要治理内容 - - 隐患治理完成情况 - - 隐患治理责任单位自行验收的情况 - - - - + + 隐患日期 + + 隐患治理责任单位 + + 主要负责人 + + 创建时间 + + 状态 + + + + - - \ No newline at end of file + + .result-btn { + flex: 1; + height: 80rpx; + line-height: 80rpx; + border-radius: 8rpx; + background: #f5f5f5; + color: #666; + font-size: 28rpx; + + &::after { + border: none; + } + + &.active { + background: #2667E9; + color: #fff; + } + } + diff --git a/pages/hiddendanger/assignment.vue b/pages/hiddendanger/assignment.vue new file mode 100644 index 0000000..18ce30b --- /dev/null +++ b/pages/hiddendanger/assignment.vue @@ -0,0 +1,210 @@ + + + + + \ No newline at end of file diff --git a/pages/hiddendanger/rectification.vue b/pages/hiddendanger/rectification.vue index 3a09cd4..034a523 100644 --- a/pages/hiddendanger/rectification.vue +++ b/pages/hiddendanger/rectification.vue @@ -28,141 +28,154 @@ {{ selectedDate || '请选择日期' }} - - - 整改人员 - * + + + + - - - + 整改图片/视频 * - + \ No newline at end of file + diff --git a/pages/index/index.vue b/pages/index/index.vue index 22d20ab..3d1e902 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -5,10 +5,10 @@ - 湘西和谐云大数据产业发展有限公司 + {{ userInfo.deptName || '未知部门' }} - 手机号: - 17374339800 + 用户: + {{ userInfo.nickName || userInfo.username || '未登录' }} @@ -18,11 +18,11 @@ - - - 功能菜单 + + + 功能菜单 - + {{ item.name}} @@ -87,41 +87,41 @@ - + 我的隐患排查 - + 隐患 #15 标题: - 有隐患 + {{item.title}} 隐患来源: - 企业自查 + {{item.source}} 隐患位置: - 湖南省湘西土家族苗族自治州吉首市人民北路105号 + {{item.address}} 隐患等级: - 一般隐患 + {{item.levelName}} 隐患状态: - 待验收 + {{item.statusName}} 发现时间: - 2025-11-11 17:08:09 + {{item.createdAt}} - + @@ -129,41 +129,41 @@ - - - - - - 首页 - - - - - - 一张图 - - - - - - 预警 - - - - - - 我的 - - @@ -286,7 +302,8 @@ .content {} .grid-list { - // gap: 5px 5px; + gap: 30rpx; + margin-top: 30rpx; } .list { diff --git a/pages/login/agreement.vue b/pages/login/agreement.vue new file mode 100644 index 0000000..43ad64b --- /dev/null +++ b/pages/login/agreement.vue @@ -0,0 +1,27 @@ + + + + + \ No newline at end of file diff --git a/pages/login/enterprise.vue b/pages/login/enterprise.vue new file mode 100644 index 0000000..58877fd --- /dev/null +++ b/pages/login/enterprise.vue @@ -0,0 +1,214 @@ + + + + + \ No newline at end of file diff --git a/pages/login/forget.vue b/pages/login/forget.vue new file mode 100644 index 0000000..72b69ce --- /dev/null +++ b/pages/login/forget.vue @@ -0,0 +1,296 @@ + + + + + \ No newline at end of file diff --git a/pages/login/login.vue b/pages/login/login.vue new file mode 100644 index 0000000..9e5939b --- /dev/null +++ b/pages/login/login.vue @@ -0,0 +1,391 @@ + + + + + diff --git a/pages/login/reg.vue b/pages/login/reg.vue new file mode 100644 index 0000000..21cc8b3 --- /dev/null +++ b/pages/login/reg.vue @@ -0,0 +1,365 @@ + + + + + \ No newline at end of file diff --git a/pages/login/success.vue b/pages/login/success.vue new file mode 100644 index 0000000..38c3d25 --- /dev/null +++ b/pages/login/success.vue @@ -0,0 +1,31 @@ + + + + + \ No newline at end of file diff --git a/pages/map/map.vue b/pages/map/map.vue new file mode 100644 index 0000000..53a3a2c --- /dev/null +++ b/pages/map/map.vue @@ -0,0 +1,18 @@ + + + + + + diff --git a/pages/membermanagemen/membermanagemen.vue b/pages/membermanagemen/membermanagemen.vue index 41d35fd..ad339d9 100644 --- a/pages/membermanagemen/membermanagemen.vue +++ b/pages/membermanagemen/membermanagemen.vue @@ -1,6 +1,6 @@ + \ No newline at end of file diff --git a/pages/personalcenter/my.vue b/pages/personalcenter/my.vue index 068fbe8..82576cd 100644 --- a/pages/personalcenter/my.vue +++ b/pages/personalcenter/my.vue @@ -67,7 +67,7 @@ - + @@ -98,6 +98,24 @@ url:'/pages/personalcenter/account' }) } + //退出登录 + const handleLogout = () => { + uni.showModal({ + title: '提示', + content: '确定要退出登录吗?', + success: function (res) { + if (res.confirm) { + console.log('用户点击确定'); + uni.clearStorageSync() + uni.reLaunch({ + url:'/pages/login/login' + }) + } else if (res.cancel) { + console.log('用户点击取消'); + } + } + }); + } diff --git a/request/api.js b/request/api.js index 288d6c3..255aca5 100644 --- a/request/api.js +++ b/request/api.js @@ -37,6 +37,14 @@ export function addHiddenDanger(params) { data: params }); } +//交办隐患 +export function assignHiddenDanger(params) { + return requestAPI({ + url: '/frontend/hazard/assign', + method: 'POST', + data: params + }); +} //文件图片上传 export function uploadFile(params) { return requestAPI({ @@ -61,6 +69,15 @@ export function getHiddenDangerDetail(params) { data: params }); } +//获取隐患排查列表 +export function getHiddenDangerList(params) { + return requestAPI({ + url: '/frontend/hazard/my/list', + method: 'GET', + data: params + }); +} + //提交整改 export function submitRectification(params) { return requestAPI({ @@ -75,4 +92,81 @@ export function getHiddenDangerLabelList() { url: '/frontend/hazard/tag/list', method: 'GET' }); +} +//获取部门人员列表(本部门、上级部门、上上级部门) +export function getDepartmentPersonUsers(params) { + return requestAPI({ + url: '/frontend/hazard/dept/users', + method: 'GET', + data: params + }); +} +//成员管理 +//添加成员 +export function addMember(params) { + return requestAPI({ + url: '/frontend/member/add', + method: 'POST', + data: params + }); +} +//获取成员列表 +export function getMemberList(params) { + return requestAPI({ + url: '/frontend/member/list', + method: 'GET', + data: params + }); +} +//锁定/解锁成员 +export function lockOrUnlockMember(params) { + return requestAPI({ + url: '/frontend/member/lock', + method: 'POST', + data: params + }); +} +//销号申请 +//申请销号 +export function applyDelete(params) { + return requestAPI({ + url: '/frontend/hazard/writeoff/apply', + method: 'POST', + data: params + }); +} +//获取验收完成的隐患列表(可申请销号) +export function getAcceptanceList(params) { + return requestAPI({ + url: '/frontend/hazard/verified/list', + method: 'GET', + data: params + }); +} +//获取我的销号申请列表 +export function getMyWriteOffList(params) { + return requestAPI({ + url: '/frontend/hazard/writeoff/my/list', + method: 'GET', + data: params + }); +} + +//验收整改 +export function acceptanceRectification(params) { + return requestAPI({ + url: '/frontend/hazard/verify', + method: 'POST', + data: params + }); +} + +//登录 +export function login(params) { + return requestAPI({ + url: '/frontend/auth/login', + method: 'POST', + data: params, + noAuth: true // 登录接口不需要 Authorization + }); } \ No newline at end of file diff --git a/request/request.js b/request/request.js index d44b2ff..58fc448 100644 --- a/request/request.js +++ b/request/request.js @@ -7,15 +7,14 @@ import Request from './luch-request/index.js'; const http = new Request({ baseURL: baseUrl, - timeout: 10000, - header: { - // 'content-type': 'application/json', - 'Authorization': "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiNzQ5NGU2MzAtNTRlYS00ZTM5LWIxYjUtNzc2MzY5NTRhYmJmIn0.7l5CMwFitlpXniZ6PTR5DqN8ASFTFZ1DCUZKjOtr5CpuXWiPHeSW19nY8XKfGdxMvB7j-OnXuSznLRjx-N7K9g" - } + timeout: 10000 }) -// 固定的 token -const AUTH_TOKEN = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiNTQyMjJlODYtZDUyNS00ZTA0LWI3Y2QtMGU1ZWYzYmIwM2EwIn0.x8zPXafDGVjIDIcAdWsWT3F2fU20QHVLFR15b251LfwpfRt_UaDo1-bvHEyi8hxqVkiStOqi09TTUTPBgjPYkw"; +// 动态获取 token(从登录接口存储的) +const getToken = () => { + const token = uni.getStorageSync('token'); + return token ? `Bearer ${token}` : ''; +}; // 请求之前查看是否为空 const isEmptyObject = (obj) => { return Object.keys(obj).length === 0; @@ -44,7 +43,7 @@ function showToast(title) { // 请求 const requestAPI = (config) => { // 支持对象参数或传统参数 - let { url, method = 'GET', data = {} } = typeof config === 'object' && config.url ? config : { url: config, method: arguments[1] || 'GET', data: arguments[2] || {} }; + let { url, method = 'GET', data = {}, noAuth = false } = typeof config === 'object' && config.url ? config : { url: config, method: arguments[1] || 'GET', data: arguments[2] || {} }; if (method == 'GET' && !isEmptyObject(data)) { url += '?' + objectToQueryString(data); @@ -53,14 +52,24 @@ const requestAPI = (config) => { uni.showLoading({ title: '加载中...' }); + + // 构建 header,登录等接口不需要 Authorization + const header = { + 'Content-Type': 'application/json' + }; + if (!noAuth) { + const token = getToken(); + if (token) { + header['Authorization'] = token; + } + } + return new Promise((resolve, reject) => { uni.request({ url: baseUrl + url, method, data, - header: { - 'Authorization': AUTH_TOKEN - }, + header, success: (res) => { uni.hideLoading(); @@ -79,8 +88,14 @@ const requestAPI = (config) => { resolve(res.data); } else if (res.data.code === 401) { // token过期处理 - uni.removeStorageSync('_user_token_'); + uni.removeStorageSync('token'); + uni.removeStorageSync('userInfo'); showToast('登录已过期,请重新登录'); + setTimeout(() => { + uni.reLaunch({ + url: '/pages/login/login' + }); + }, 1500); reject('401'); } else { showToast(res.data.msg || '请求失败'); @@ -109,4 +124,4 @@ const requestAPI = (config) => { }; // 文件末尾应该导出 -export { requestAPI,baseUrl,AUTH_TOKEN }; \ No newline at end of file +export { requestAPI, baseUrl, getToken }; \ No newline at end of file diff --git a/static/index/Bell2x.png b/static/index/Bell2x.png new file mode 100644 index 0000000..a2db94f Binary files /dev/null and b/static/index/Bell2x.png differ diff --git a/static/index/Bell_BG2x.png b/static/index/Bell_BG2x.png new file mode 100644 index 0000000..1df81c1 Binary files /dev/null and b/static/index/Bell_BG2x.png differ diff --git a/static/index/cl.png b/static/index/cl.png new file mode 100644 index 0000000..66d6ea1 Binary files /dev/null and b/static/index/cl.png differ diff --git a/static/index/eye.png b/static/index/eye.png new file mode 100644 index 0000000..5d037bf Binary files /dev/null and b/static/index/eye.png differ diff --git a/static/index/index_bg.png b/static/index/index_bg.png new file mode 100644 index 0000000..595bf59 Binary files /dev/null and b/static/index/index_bg.png differ diff --git a/static/index/index_bg2.png b/static/index/index_bg2.png new file mode 100644 index 0000000..3a05710 Binary files /dev/null and b/static/index/index_bg2.png differ diff --git a/static/index/lock.png b/static/index/lock.png new file mode 100644 index 0000000..fe9de5a Binary files /dev/null and b/static/index/lock.png differ diff --git a/static/index/op.png b/static/index/op.png new file mode 100644 index 0000000..5d037bf Binary files /dev/null and b/static/index/op.png differ diff --git a/static/index/phone.png b/static/index/phone.png new file mode 100644 index 0000000..818765c Binary files /dev/null and b/static/index/phone.png differ diff --git a/static/index/photos.png b/static/index/photos.png new file mode 100644 index 0000000..aca5bcd Binary files /dev/null and b/static/index/photos.png differ diff --git a/static/index/蒙版组 260.png b/static/index/蒙版组 260.png new file mode 100644 index 0000000..163cd61 Binary files /dev/null and b/static/index/蒙版组 260.png differ diff --git a/static/index/蒙版组 261.png b/static/index/蒙版组 261.png new file mode 100644 index 0000000..f870604 Binary files /dev/null and b/static/index/蒙版组 261.png differ diff --git a/static/tabBar/组 20264.png b/static/tabBar/home.png similarity index 100% rename from static/tabBar/组 20264.png rename to static/tabBar/home.png diff --git a/static/tabBar/组 20261.png b/static/tabBar/map.png similarity index 100% rename from static/tabBar/组 20261.png rename to static/tabBar/map.png diff --git a/static/tabBar/组 20263.png b/static/tabBar/my.png similarity index 100% rename from static/tabBar/组 20263.png rename to static/tabBar/my.png diff --git a/static/tabBar/组 20262.png b/static/tabBar/warning.png similarity index 100% rename from static/tabBar/组 20262.png rename to static/tabBar/warning.png diff --git a/unpackage/dist/dev/mp-weixin/app.js b/unpackage/dist/dev/mp-weixin/app.js index f264b7b..92d3c9d 100644 --- a/unpackage/dist/dev/mp-weixin/app.js +++ b/unpackage/dist/dev/mp-weixin/app.js @@ -4,6 +4,7 @@ const common_vendor = require("./common/vendor.js"); const uni_modules_uviewPlus_index = require("./uni_modules/uview-plus/index.js"); if (!Math) { "./pages/index/index.js"; + "./pages/map/map.js"; "./pages/plandetail/plandetail.js"; "./pages/Inspectionresult/Inspectionresult.js"; "./pages/membermanagemen/membermanagemen.js"; @@ -18,6 +19,7 @@ if (!Math) { "./pages/hiddendanger/view.js"; "./pages/hiddendanger/rectification.js"; "./pages/hiddendanger/acceptance.js"; + "./pages/hiddendanger/assignment.js"; "./pages/closeout/application.js"; "./pages/closeout/editor.js"; "./pages/equipmentregistration/equipmentregistration.js"; @@ -29,6 +31,12 @@ if (!Math) { "./pages/personalcenter/settings.js"; "./pages/personalcenter/account.js"; "./pages/personalcenter/edit.js"; + "./pages/login/login.js"; + "./pages/login/reg.js"; + "./pages/login/enterprise.js"; + "./pages/login/success.js"; + "./pages/login/forget.js"; + "./pages/login/agreement.js"; } const _sfc_main = { onLaunch: function() { diff --git a/unpackage/dist/dev/mp-weixin/app.json b/unpackage/dist/dev/mp-weixin/app.json index f8a4939..a5e0473 100644 --- a/unpackage/dist/dev/mp-weixin/app.json +++ b/unpackage/dist/dev/mp-weixin/app.json @@ -1,6 +1,7 @@ { "pages": [ "pages/index/index", + "pages/map/map", "pages/plandetail/plandetail", "pages/Inspectionresult/Inspectionresult", "pages/membermanagemen/membermanagemen", @@ -15,6 +16,7 @@ "pages/hiddendanger/view", "pages/hiddendanger/rectification", "pages/hiddendanger/acceptance", + "pages/hiddendanger/assignment", "pages/closeout/application", "pages/closeout/editor", "pages/equipmentregistration/equipmentregistration", @@ -25,7 +27,13 @@ "pages/personalcenter/notification", "pages/personalcenter/settings", "pages/personalcenter/account", - "pages/personalcenter/edit" + "pages/personalcenter/edit", + "pages/login/login", + "pages/login/reg", + "pages/login/enterprise", + "pages/login/success", + "pages/login/forget", + "pages/login/agreement" ], "window": { "navigationBarTextStyle": "white", @@ -33,5 +41,46 @@ "navigationBarBackgroundColor": "#007aff", "backgroundColor": "#F8F8F8" }, + "tabBar": { + "color": "#999999", + "selectedColor": "#007aff", + "borderStyle": "black", + "backgroundColor": "#ffffff", + "list": [ + { + "pagePath": "pages/index/index", + "text": "首页", + "iconPath": "static/tabBar/home.png", + "selectedIconPath": "static/tabBar/home.png" + }, + { + "pagePath": "pages/map/map", + "text": "一张图", + "iconPath": "static/tabBar/map.png", + "selectedIconPath": "static/tabBar/map.png" + }, + { + "pagePath": "pages/Inspectionwarning/Inspectionwarning", + "text": "预警", + "iconPath": "static/tabBar/warning.png", + "selectedIconPath": "static/tabBar/warning.png" + }, + { + "pagePath": "pages/personalcenter/my", + "text": "我的", + "iconPath": "static/tabBar/my.png", + "selectedIconPath": "static/tabBar/my.png" + } + ] + }, + "permission": { + "scope.userLocation": { + "desc": "你的位置信息将用于选择隐患位置" + } + }, + "requiredPrivateInfos": [ + "chooseLocation", + "getLocation" + ], "usingComponents": {} } \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/common/assets.js b/unpackage/dist/dev/mp-weixin/common/assets.js index c1f7059..5ef40ef 100644 --- a/unpackage/dist/dev/mp-weixin/common/assets.js +++ b/unpackage/dist/dev/mp-weixin/common/assets.js @@ -1,27 +1,29 @@ "use strict"; -const _imports_0$2 = "/static/蒙版组 273.png"; -const _imports_1$2 = "/static/tabbar/组 20264.png"; -const _imports_2$1 = "/static/tabbar/组 20261.png"; -const _imports_3$1 = "/static/tabbar/组 20262.png"; -const _imports_4$1 = "/static/tabbar/组 20263.png"; -const _imports_0$1 = "/static/my/Helpcenter.png"; -const _imports_1$1 = "/static/my/CustomerService.png"; +const _imports_0$5 = "/static/蒙版组 273.png"; +const _imports_0$4 = "/static/my/Helpcenter.png"; +const _imports_1$2 = "/static/my/CustomerService.png"; const _imports_2 = "/static/my/Account.png"; -const _imports_3 = "/static/my/Notification.png"; +const _imports_3$1 = "/static/my/Notification.png"; const _imports_4 = "/static/my/Delete.png"; const _imports_5 = "/static/my/Settings.png"; -const _imports_0 = "/static/my/Customer service.png"; -const _imports_1 = "/static/my/Phone.png"; -exports._imports_0 = _imports_0$2; -exports._imports_0$1 = _imports_0$1; -exports._imports_0$2 = _imports_0; +const _imports_0$3 = "/static/my/Customer service.png"; +const _imports_1$1 = "/static/my/Phone.png"; +const _imports_0$2 = "/static/index/index_bg.png"; +const _imports_0$1 = "/static/index/phone.png"; +const _imports_1 = "/static/index/lock.png"; +const _imports_3 = "/static/index/photos.png"; +const _imports_0 = "/static/index/蒙版组 260.png"; +exports._imports_0 = _imports_0$5; +exports._imports_0$1 = _imports_0$4; +exports._imports_0$2 = _imports_0$3; +exports._imports_0$3 = _imports_0$2; +exports._imports_0$4 = _imports_0$1; +exports._imports_0$5 = _imports_0; exports._imports_1 = _imports_1$2; exports._imports_1$1 = _imports_1$1; exports._imports_1$2 = _imports_1; -exports._imports_2 = _imports_2$1; -exports._imports_2$1 = _imports_2; +exports._imports_2 = _imports_2; exports._imports_3 = _imports_3$1; exports._imports_3$1 = _imports_3; -exports._imports_4 = _imports_4$1; -exports._imports_4$1 = _imports_4; +exports._imports_4 = _imports_4; exports._imports_5 = _imports_5; diff --git a/unpackage/dist/dev/mp-weixin/common/vendor.js b/unpackage/dist/dev/mp-weixin/common/vendor.js index ddec472..e2beea0 100644 --- a/unpackage/dist/dev/mp-weixin/common/vendor.js +++ b/unpackage/dist/dev/mp-weixin/common/vendor.js @@ -7775,6 +7775,7 @@ const createSubpackageApp = initCreateSubpackageApp(); const createHook = (lifecycle) => (hook, target = getCurrentInstance()) => { !isInSSRComponentSetup && injectHook(lifecycle, hook, target); }; +const onShow = /* @__PURE__ */ createHook(ON_SHOW); const onLoad = /* @__PURE__ */ createHook(ON_LOAD); /*! * vue-router v4.3.0 @@ -7812,6 +7813,9 @@ exports.n = n; exports.nextTick$1 = nextTick$1; exports.o = o; exports.onLoad = onLoad; +exports.onMounted = onMounted; +exports.onShow = onShow; +exports.onUnmounted = onUnmounted; exports.p = p; exports.r = r; exports.reactive = reactive; @@ -7821,4 +7825,5 @@ exports.s = s; exports.sr = sr; exports.t = t; exports.useRouter = useRouter; +exports.watch = watch; exports.wx$1 = wx$1; diff --git a/unpackage/dist/dev/mp-weixin/pages/closeout/application.js b/unpackage/dist/dev/mp-weixin/pages/closeout/application.js index ef28a61..b5ea90f 100644 --- a/unpackage/dist/dev/mp-weixin/pages/closeout/application.js +++ b/unpackage/dist/dev/mp-weixin/pages/closeout/application.js @@ -1,76 +1,204 @@ "use strict"; const common_vendor = require("../../common/vendor.js"); +const request_api = require("../../request/api.js"); if (!Array) { - const _easycom_up_input2 = common_vendor.resolveComponent("up-input"); + const _easycom_up_picker2 = common_vendor.resolveComponent("up-picker"); const _easycom_up_datetime_picker2 = common_vendor.resolveComponent("up-datetime-picker"); + const _easycom_up_input2 = common_vendor.resolveComponent("up-input"); const _easycom_up_textarea2 = common_vendor.resolveComponent("up-textarea"); const _easycom_u_popup2 = common_vendor.resolveComponent("u-popup"); - (_easycom_up_input2 + _easycom_up_datetime_picker2 + _easycom_up_textarea2 + _easycom_u_popup2)(); + (_easycom_up_picker2 + _easycom_up_datetime_picker2 + _easycom_up_input2 + _easycom_up_textarea2 + _easycom_u_popup2)(); } -const _easycom_up_input = () => "../../uni_modules/uview-plus/components/u-input/u-input.js"; +const _easycom_up_picker = () => "../../uni_modules/uview-plus/components/u-picker/u-picker.js"; const _easycom_up_datetime_picker = () => "../../uni_modules/uview-plus/components/u-datetime-picker/u-datetime-picker.js"; +const _easycom_up_input = () => "../../uni_modules/uview-plus/components/u-input/u-input.js"; const _easycom_up_textarea = () => "../../uni_modules/uview-plus/components/u-textarea/u-textarea.js"; const _easycom_u_popup = () => "../../uni_modules/uview-plus/components/u-popup/u-popup.js"; if (!Math) { - (_easycom_up_input + _easycom_up_datetime_picker + _easycom_up_textarea + _easycom_u_popup)(); + (_easycom_up_picker + _easycom_up_datetime_picker + _easycom_up_input + _easycom_up_textarea + _easycom_u_popup)(); } const _sfc_main = { __name: "application", setup(__props) { const showAddPopup = common_vendor.ref(false); - const handleAdd = () => { - showAddPopup.value = false; - common_vendor.index.showToast({ - title: "新增成功", - icon: "success" - }); + const showHazardPicker = common_vendor.ref(false); + const showDatePicker = common_vendor.ref(false); + const selectedHazard = common_vendor.ref(""); + const selectedHazardId = common_vendor.ref(""); + const hazardColumns = common_vendor.ref([["暂无数据"]]); + const hazardList = common_vendor.ref([]); + const dateValue = common_vendor.ref(Date.now()); + const formData = common_vendor.reactive({ + rectifyDeadline: "", + // 整改时限 + responsibleDeptName: "", + // 隐患治理责任单位 + responsiblePerson: "", + // 主要负责人 + mainTreatmentContent: "", + // 主要治理内容 + treatmentResult: "", + // 隐患治理完成内容 + selfVerifyContent: "" + // 责任单位自行验收情况 + }); + const fetchHazardList = async () => { + try { + const res = await request_api.getMyWriteOffList(); + if (res.code === 0 && res.data) { + const list = res.data; + hazardList.value = list; + if (list.length > 0) { + hazardColumns.value = [list.map((item) => item.hazardTitle || `隐患${item.hazardId}`)]; + } + console.log("隐患列表:", list); + } + } catch (error) { + console.error("获取隐患列表失败:", error); + } + }; + const onHazardConfirm = (e) => { + console.log("选择的隐患:", e); + if (e.value && e.value.length > 0) { + selectedHazard.value = e.value[0]; + const index = e.indexs[0]; + if (hazardList.value[index]) { + selectedHazardId.value = hazardList.value[index].hazardId; + } + } + showHazardPicker.value = false; + }; + const onDateConfirm = (e) => { + console.log("选择的日期时间:", e); + const date = new Date(e.value); + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, "0"); + const day = String(date.getDate()).padStart(2, "0"); + const hours = String(date.getHours()).padStart(2, "0"); + const minutes = String(date.getMinutes()).padStart(2, "0"); + const seconds = String(date.getSeconds()).padStart(2, "0"); + formData.rectifyDeadline = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; + showDatePicker.value = false; + }; + const resetForm = () => { + selectedHazard.value = ""; + selectedHazardId.value = ""; + formData.rectifyDeadline = ""; + formData.responsibleDeptName = ""; + formData.responsiblePerson = ""; + formData.mainTreatmentContent = ""; + formData.treatmentResult = ""; + formData.selfVerifyContent = ""; + }; + const handleAdd = async () => { + if (!selectedHazardId.value) { + common_vendor.index.showToast({ title: "请选择隐患", icon: "none" }); + return; + } + const params = { + hazardId: Number(selectedHazardId.value), + // 隐患ID(必需) + rectifyDeadline: formData.rectifyDeadline || "", + // 整改时限 + responsiblePerson: formData.responsiblePerson || "", + // 主要负责人 + mainTreatmentContent: formData.mainTreatmentContent || "", + // 主要治理内容 + treatmentResult: formData.treatmentResult || "", + // 隐患治理完成内容 + selfVerifyContent: formData.selfVerifyContent || "" + // 责任单位自行验收情况 + }; + console.log("提交数据:", params); + try { + const res = await request_api.applyDelete(params); + if (res.code === 0) { + common_vendor.index.showToast({ title: "申请成功", icon: "success" }); + showAddPopup.value = false; + resetForm(); + } else { + common_vendor.index.showToast({ title: res.msg || "申请失败", icon: "none" }); + } + } catch (error) { + console.error("申请失败:", error); + common_vendor.index.showToast({ title: "请求失败", icon: "none" }); + } }; - const value1 = common_vendor.ref(Date.now()); const editor = () => { common_vendor.index.navigateTo({ url: "/pages/closeout/editor" }); }; + common_vendor.onMounted(() => { + fetchHazardList(); + }); return (_ctx, _cache) => { return { - a: common_vendor.o(($event) => editor()), + a: common_vendor.f(hazardList.value, (item, index, i0) => { + return { + a: common_vendor.t(item.hazardTitle), + b: common_vendor.t(item.statusName), + c: common_vendor.t(item.hazardCreatedAt), + d: common_vendor.t(item.responsibleDeptName), + e: common_vendor.t(item.responsiblePerson), + f: common_vendor.t(item.createdAt), + g: common_vendor.o(($event) => editor(), index), + h: index + }; + }), b: common_vendor.o(($event) => showAddPopup.value = true), c: common_vendor.o(($event) => showAddPopup.value = false), - d: common_vendor.p({ - placeholder: "请选择隐患" - }), - e: common_vendor.o(($event) => value1.value = $event), - f: common_vendor.p({ - hasInput: true, - show: _ctx.show, - mode: "date", - modelValue: value1.value - }), - g: common_vendor.p({ - placeholder: "请输入隐患治理责任单位" - }), - h: common_vendor.p({ - placeholder: "请输入主要负责人" - }), - i: common_vendor.o(($event) => _ctx.value = $event), + d: common_vendor.t(selectedHazard.value || "请选择隐患"), + e: common_vendor.n(selectedHazard.value ? "" : "text-gray"), + f: common_vendor.o(($event) => showHazardPicker.value = true), + g: common_vendor.o(onHazardConfirm), + h: common_vendor.o(($event) => showHazardPicker.value = false), + i: common_vendor.o(($event) => showHazardPicker.value = false), j: common_vendor.p({ - placeholder: "请输入主要治理内容", - modelValue: _ctx.value + show: showHazardPicker.value, + columns: hazardColumns.value }), - k: common_vendor.o(($event) => _ctx.value = $event), - l: common_vendor.p({ - placeholder: "请输入隐患治理完成情况", - modelValue: _ctx.value - }), - m: common_vendor.o(($event) => _ctx.value = $event), - n: common_vendor.p({ - placeholder: "请输入隐患治理责任单位自行验收的情况", - modelValue: _ctx.value - }), - o: common_vendor.o(($event) => showAddPopup.value = false), - p: common_vendor.o(handleAdd), - q: common_vendor.o(($event) => showAddPopup.value = false), + k: common_vendor.t(formData.rectifyDeadline || "请选择整改时限"), + l: common_vendor.n(formData.rectifyDeadline ? "" : "text-gray"), + m: common_vendor.o(($event) => showDatePicker.value = true), + n: common_vendor.o(onDateConfirm), + o: common_vendor.o(($event) => showDatePicker.value = false), + p: common_vendor.o(($event) => showDatePicker.value = false), + q: common_vendor.o(($event) => dateValue.value = $event), r: common_vendor.p({ + show: showDatePicker.value, + mode: "datetime", + modelValue: dateValue.value + }), + s: common_vendor.o(($event) => formData.responsibleDeptName = $event), + t: common_vendor.p({ + placeholder: "请输入隐患治理责任单位", + modelValue: formData.responsibleDeptName + }), + v: common_vendor.o(($event) => formData.responsiblePerson = $event), + w: common_vendor.p({ + placeholder: "请输入主要负责人", + modelValue: formData.responsiblePerson + }), + x: common_vendor.o(($event) => formData.mainTreatmentContent = $event), + y: common_vendor.p({ + placeholder: "请输入主要治理内容", + modelValue: formData.mainTreatmentContent + }), + z: common_vendor.o(($event) => formData.treatmentResult = $event), + A: common_vendor.p({ + placeholder: "请输入隐患治理完成情况", + modelValue: formData.treatmentResult + }), + B: common_vendor.o(($event) => formData.selfVerifyContent = $event), + C: common_vendor.p({ + placeholder: "请输入隐患治理责任单位自行验收的情况", + modelValue: formData.selfVerifyContent + }), + D: common_vendor.o(($event) => showAddPopup.value = false), + E: common_vendor.o(handleAdd), + F: common_vendor.o(($event) => showAddPopup.value = false), + G: common_vendor.p({ show: showAddPopup.value, mode: "center", round: "20" diff --git a/unpackage/dist/dev/mp-weixin/pages/closeout/application.json b/unpackage/dist/dev/mp-weixin/pages/closeout/application.json index 37e1577..91b4492 100644 --- a/unpackage/dist/dev/mp-weixin/pages/closeout/application.json +++ b/unpackage/dist/dev/mp-weixin/pages/closeout/application.json @@ -1,8 +1,9 @@ { "navigationBarTitleText": "销号申请", "usingComponents": { - "up-input": "../../uni_modules/uview-plus/components/u-input/u-input", + "up-picker": "../../uni_modules/uview-plus/components/u-picker/u-picker", "up-datetime-picker": "../../uni_modules/uview-plus/components/u-datetime-picker/u-datetime-picker", + "up-input": "../../uni_modules/uview-plus/components/u-input/u-input", "up-textarea": "../../uni_modules/uview-plus/components/u-textarea/u-textarea", "u-popup": "../../uni_modules/uview-plus/components/u-popup/u-popup" } diff --git a/unpackage/dist/dev/mp-weixin/pages/closeout/application.wxml b/unpackage/dist/dev/mp-weixin/pages/closeout/application.wxml index d319964..655f726 100644 --- a/unpackage/dist/dev/mp-weixin/pages/closeout/application.wxml +++ b/unpackage/dist/dev/mp-weixin/pages/closeout/application.wxml @@ -1 +1 @@ -发现火苗已审核隐患日期:2025-11-11责任单位:吉首网络有限公司判定人员:张起创建时间:2025-11-14 06:33:49新增销号申请×隐患*整改时限*隐患治理责任单位主要负责人主要治理内容隐患治理完成内容隐患治理责任单位自行验收的情况 \ No newline at end of file +{{item.a}}{{item.b}}隐患日期:{{item.c}}责任单位:{{item.d}}判定人员:{{item.e}}创建时间:{{item.f}}新增销号申请×隐患*{{d}}整改时限{{k}}隐患治理责任单位主要负责人主要治理内容隐患治理完成内容隐患治理责任单位自行验收的情况 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/closeout/application.wxss b/unpackage/dist/dev/mp-weixin/pages/closeout/application.wxss index 3f8bd14..c7dcc43 100644 --- a/unpackage/dist/dev/mp-weixin/pages/closeout/application.wxss +++ b/unpackage/dist/dev/mp-weixin/pages/closeout/application.wxss @@ -75,4 +75,14 @@ } .popup-footer .btn-confirm.data-v-4b6250eb { color: #fff; +} +.picker-input.data-v-4b6250eb { + background: #fff; + border-radius: 8rpx; + padding: 24rpx 20rpx; + margin-bottom: 20rpx; + border: 1rpx solid #eee; +} +.picker-input text.data-v-4b6250eb { + font-size: 28rpx; } \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/closeout/editor.js b/unpackage/dist/dev/mp-weixin/pages/closeout/editor.js index 08332cd..7885122 100644 --- a/unpackage/dist/dev/mp-weixin/pages/closeout/editor.js +++ b/unpackage/dist/dev/mp-weixin/pages/closeout/editor.js @@ -1,46 +1,145 @@ "use strict"; const common_vendor = require("../../common/vendor.js"); -const _sfc_main = {}; +const request_api = require("../../request/api.js"); if (!Array) { const _easycom_up_input2 = common_vendor.resolveComponent("up-input"); - const _easycom_up_textarea2 = common_vendor.resolveComponent("up-textarea"); - (_easycom_up_input2 + _easycom_up_textarea2)(); + _easycom_up_input2(); } const _easycom_up_input = () => "../../uni_modules/uview-plus/components/u-input/u-input.js"; -const _easycom_up_textarea = () => "../../uni_modules/uview-plus/components/u-textarea/u-textarea.js"; if (!Math) { - (_easycom_up_input + _easycom_up_textarea)(); + _easycom_up_input(); } -function _sfc_render(_ctx, _cache) { - return { - a: common_vendor.p({ - placeholder: "请输入内容" - }), - b: common_vendor.p({ - placeholder: "请输入内容" - }), - c: common_vendor.p({ - placeholder: "请输入内容" - }), - d: common_vendor.p({ - placeholder: "请输入内容" - }), - e: common_vendor.o(($event) => _ctx.value1 = $event), - f: common_vendor.p({ - placeholder: "请输入内容", - modelValue: _ctx.value1 - }), - g: common_vendor.o(($event) => _ctx.value1 = $event), - h: common_vendor.p({ - placeholder: "请输入内容", - modelValue: _ctx.value1 - }), - i: common_vendor.o(($event) => _ctx.value1 = $event), - j: common_vendor.p({ - placeholder: "请输入内容", - modelValue: _ctx.value1 - }) - }; -} -const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]); +const _sfc_main = { + __name: "editor", + setup(__props) { + const getPageOptions = () => { + const pages = getCurrentPages(); + const currentPage = pages[pages.length - 1]; + return (currentPage == null ? void 0 : currentPage.options) || {}; + }; + const pageId = common_vendor.ref(""); + const canEdit = common_vendor.ref(false); + const formData = common_vendor.reactive({ + id: "", + hazardId: "", + hazardTitle: "", + // 隐患标题 + hazardCreatedAt: "", + // 隐患日期 + responsibleDeptName: "", + // 隐患治理责任单位 + responsiblePerson: "", + // 主要负责人 + createdAt: "", + // 创建时间 + statusName: "" + // 状态 + }); + const fetchDetail = async (id) => { + console.log("=== fetchDetail 被调用 ===, id:", id); + try { + const res = await request_api.getMyWriteOffList(); + console.log("接口返回:", res); + if (res.code === 0 && res.data && res.data.length > 0) { + const list = res.data; + let data = null; + if (id) { + data = list.find((item) => item.id == id); + } + if (!data) { + data = list[0]; + } + console.log("绑定数据:", data); + formData.id = data.id; + formData.hazardId = data.hazardId; + formData.hazardTitle = data.hazardTitle || ""; + formData.hazardCreatedAt = data.hazardCreatedAt || ""; + formData.responsibleDeptName = data.responsibleDeptName || ""; + formData.responsiblePerson = data.responsiblePerson || ""; + formData.createdAt = data.createdAt || ""; + formData.statusName = data.statusName || ""; + if (data.status == 1 || data.statusName === "待审核") { + canEdit.value = true; + console.log("状态为待审核,可以编辑"); + } else { + canEdit.value = false; + console.log("状态为已审核,不可编辑"); + } + } + } catch (error) { + console.error("获取详情失败:", error); + } + }; + const handleCancel = () => { + common_vendor.index.navigateBack(); + }; + const handleSubmit = async () => { + console.log("保存数据:", formData); + common_vendor.index.showToast({ title: "保存成功", icon: "success" }); + setTimeout(() => { + common_vendor.index.navigateBack(); + }, 1500); + }; + common_vendor.onLoad((options) => { + console.log("=== onLoad 触发 ==="); + console.log("options:", options); + pageId.value = (options == null ? void 0 : options.id) || ""; + fetchDetail(pageId.value); + }); + common_vendor.onMounted(() => { + console.log("=== onMounted 触发 ==="); + if (!pageId.value) { + const options = getPageOptions(); + console.log("备用获取参数:", options); + pageId.value = (options == null ? void 0 : options.id) || ""; + fetchDetail(pageId.value); + } + }); + return (_ctx, _cache) => { + return common_vendor.e({ + a: common_vendor.o(($event) => formData.hazardTitle = $event), + b: common_vendor.p({ + placeholder: "", + disabled: true, + modelValue: formData.hazardTitle + }), + c: common_vendor.o(($event) => formData.hazardCreatedAt = $event), + d: common_vendor.p({ + placeholder: "", + disabled: true, + modelValue: formData.hazardCreatedAt + }), + e: common_vendor.o(($event) => formData.responsibleDeptName = $event), + f: common_vendor.p({ + placeholder: "请输入", + disabled: !canEdit.value, + modelValue: formData.responsibleDeptName + }), + g: common_vendor.o(($event) => formData.responsiblePerson = $event), + h: common_vendor.p({ + placeholder: "请输入", + disabled: !canEdit.value, + modelValue: formData.responsiblePerson + }), + i: common_vendor.o(($event) => formData.createdAt = $event), + j: common_vendor.p({ + placeholder: "", + disabled: true, + modelValue: formData.createdAt + }), + k: common_vendor.o(($event) => formData.statusName = $event), + l: common_vendor.p({ + placeholder: "", + disabled: true, + modelValue: formData.statusName + }), + m: common_vendor.o(handleCancel), + n: canEdit.value + }, canEdit.value ? { + o: common_vendor.o(handleSubmit) + } : {}); + }; + } +}; +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-bbd4165b"]]); wx.createPage(MiniProgramPage); diff --git a/unpackage/dist/dev/mp-weixin/pages/closeout/editor.json b/unpackage/dist/dev/mp-weixin/pages/closeout/editor.json index 03c2202..90c3841 100644 --- a/unpackage/dist/dev/mp-weixin/pages/closeout/editor.json +++ b/unpackage/dist/dev/mp-weixin/pages/closeout/editor.json @@ -1,7 +1,6 @@ { "navigationBarTitleText": "编辑销号申请", "usingComponents": { - "up-input": "../../uni_modules/uview-plus/components/u-input/u-input", - "up-textarea": "../../uni_modules/uview-plus/components/u-textarea/u-textarea" + "up-input": "../../uni_modules/uview-plus/components/u-input/u-input" } } \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/closeout/editor.wxml b/unpackage/dist/dev/mp-weixin/pages/closeout/editor.wxml index c3a2e49..8a2b7e8 100644 --- a/unpackage/dist/dev/mp-weixin/pages/closeout/editor.wxml +++ b/unpackage/dist/dev/mp-weixin/pages/closeout/editor.wxml @@ -1 +1 @@ -隐患*整改时限*隐患治理责任单位主要负责人主要治理内容隐患治理完成情况隐患治理责任单位自行验收的情况 \ No newline at end of file +隐患隐患日期隐患治理责任单位主要负责人创建时间状态 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/closeout/editor.wxss b/unpackage/dist/dev/mp-weixin/pages/closeout/editor.wxss index 755dbf6..9fe7be5 100644 --- a/unpackage/dist/dev/mp-weixin/pages/closeout/editor.wxss +++ b/unpackage/dist/dev/mp-weixin/pages/closeout/editor.wxss @@ -1,6 +1,30 @@ - -.page { - min-height: 100vh; - background: #EBF2FC; -} - +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ +/* uni.scss */ +/* 颜色变量 */ +/* 行为相关颜色 */ +/* 文字基本颜色 */ +/* 背景颜色 */ +/* 边框颜色 */ +/* 尺寸变量 */ +/* 文字尺寸 */ +/* 图片尺寸 */ +/* Border Radius */ +/* 水平间距 */ +/* 垂直间距 */ +/* 透明度 */ +/* 文章场景相关 */ +.page.data-v-bbd4165b { + min-height: 100vh; + background: #EBF2FC; +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.js b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.js index b1bdfce..00c0c1d 100644 --- a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.js +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.js @@ -6,17 +6,17 @@ if (!Array) { const _easycom_up_upload2 = common_vendor.resolveComponent("up-upload"); const _easycom_up_input2 = common_vendor.resolveComponent("up-input"); const _easycom_up_choose2 = common_vendor.resolveComponent("up-choose"); - const _easycom_u_popup2 = common_vendor.resolveComponent("u-popup"); const _easycom_up_textarea2 = common_vendor.resolveComponent("up-textarea"); - (_easycom_up_upload2 + _easycom_up_input2 + _easycom_up_choose2 + _easycom_u_popup2 + _easycom_up_textarea2)(); + const _easycom_u_popup2 = common_vendor.resolveComponent("u-popup"); + (_easycom_up_upload2 + _easycom_up_input2 + _easycom_up_choose2 + _easycom_up_textarea2 + _easycom_u_popup2)(); } const _easycom_up_upload = () => "../../uni_modules/uview-plus/components/u-upload/u-upload.js"; const _easycom_up_input = () => "../../uni_modules/uview-plus/components/u-input/u-input.js"; const _easycom_up_choose = () => "../../uni_modules/uview-plus/components/u-choose/u-choose.js"; -const _easycom_u_popup = () => "../../uni_modules/uview-plus/components/u-popup/u-popup.js"; const _easycom_up_textarea = () => "../../uni_modules/uview-plus/components/u-textarea/u-textarea.js"; +const _easycom_u_popup = () => "../../uni_modules/uview-plus/components/u-popup/u-popup.js"; if (!Math) { - (_easycom_up_upload + _easycom_up_input + _easycom_up_choose + _easycom_u_popup + _easycom_up_textarea)(); + (_easycom_up_upload + _easycom_up_input + _easycom_up_choose + _easycom_up_textarea + _easycom_u_popup)(); } const _sfc_main = { __name: "Inspection", @@ -51,39 +51,53 @@ const _sfc_main = { // 隐患等级索引 description: "", // 隐患描述 - tagIndex: 0 + tagIndex: 0, // 隐患标签索引 + source: "" + // 隐患来源 }); const lng = common_vendor.ref(0); const lat = common_vendor.ref(0); - const showAddressPopup = common_vendor.ref(false); - const addressKeyword = common_vendor.ref(""); const selectedAddress = common_vendor.ref(""); - const tempSelectedAddress = common_vendor.ref(""); - const addressList = common_vendor.ref([ - "湖南省湘西土家族苗族自治州吉首市人民北路105号", - "湖南省湘西土家族苗族自治州吉首市人民南路100号", - "湖南省湘西土家族苗族自治州吉首市团结广场", - "湖南省湘西土家族苗族自治州吉首市火车站" - ]); - const filteredAddressList = common_vendor.computed(() => { - if (!addressKeyword.value) - return addressList.value; - return addressList.value.filter((item) => item.includes(addressKeyword.value)); - }); - const confirmAddress = () => { - if (tempSelectedAddress.value) { - selectedAddress.value = tempSelectedAddress.value; - } - showAddressPopup.value = false; + const chooseLocation = () => { + console.log("chooseLocation called"); + showAddPopup.value = false; + setTimeout(() => { + common_vendor.index.chooseLocation({ + success: (res) => { + console.log("选择位置成功:", res); + selectedAddress.value = res.address + (res.name ? `(${res.name})` : ""); + lng.value = res.longitude; + lat.value = res.latitude; + showAddPopup.value = true; + }, + fail: (err) => { + console.error("选择位置失败:", err); + showAddPopup.value = true; + if (err.errMsg && err.errMsg.indexOf("cancel") === -1) { + common_vendor.index.showToast({ + title: "选择位置失败", + icon: "none" + }); + } + } + }); + }, 300); }; const handleAdd = async () => { + var _a; if (!formData.title) { - common_vendor.index.showToast({ title: "请输入隐患标题", icon: "none" }); + common_vendor.index.showToast({ + title: "请输入隐患标题", + icon: "none" + }); return; } if (fileList1.value.length === 0) { - common_vendor.index.showToast({ title: "请上传隐患图片/视频", icon: "none" }); + common_vendor.index.showToast({ + title: "请上传隐患图片/视频", + icon: "none" + }); return; } fileList1.value.map((file) => { @@ -103,6 +117,7 @@ const _sfc_main = { }); const selectedTag = tagOptions.value[formData.tagIndex]; const tagId = selectedTag ? selectedTag.id : null; + console.log("innnn", sourceOptions); const params = { title: formData.title, //标题 @@ -122,8 +137,8 @@ const _sfc_main = { //关联任务ID checkPointId: checkPointId.value, //关联检查点ID - source: "cillum labore veniam" - //隐患来源 + source: ((_a = sourceOptions.value[formData.source]) == null ? void 0 : _a.title) || "" + //隐患来源(随手拍、企业自查、行业互查、专家诊查) }; try { const res = await request_api.addHiddenDanger(params); @@ -139,12 +154,19 @@ const _sfc_main = { formData.tagIndex = 0; selectedAddress.value = ""; fileList1.value = []; + fetchHiddenDangerList(); } else { - common_vendor.index.showToast({ title: res.msg || "新增失败", icon: "none" }); + common_vendor.index.showToast({ + title: res.msg || "新增失败", + icon: "none" + }); } } catch (error) { console.error(error); - common_vendor.index.showToast({ title: "请求失败", icon: "none" }); + common_vendor.index.showToast({ + title: "请求失败", + icon: "none" + }); } }; const hiddenDangerList = common_vendor.ref([]); @@ -152,16 +174,24 @@ const _sfc_main = { try { const res = await request_api.getMyHiddenDangerList(); if (res.code === 0) { - hiddenDangerList.value = res.data; + hiddenDangerList.value = res.data.records; } else { - common_vendor.index.showToast({ title: res.msg || "获取隐患列表失败", icon: "none" }); + common_vendor.index.showToast({ + title: res.msg || "获取隐患列表失败", + icon: "none" + }); } } catch (error) { console.error(error); - common_vendor.index.showToast({ title: "请求失败", icon: "none" }); + common_vendor.index.showToast({ + title: "请求失败", + icon: "none" + }); } }; - fetchHiddenDangerList(); + common_vendor.onShow(() => { + fetchHiddenDangerList(); + }); const details = (item) => { common_vendor.index.navigateTo({ url: `/pages/hiddendanger/view?hazardId=${item.hazardId}&assignId=${item.assignId}` @@ -172,9 +202,14 @@ const _sfc_main = { url: `/pages/hiddendanger/rectification?hazardId=${item.hazardId}&assignId=${item.assignId}` }); }; - const acceptance = () => { + const acceptance = (item) => { common_vendor.index.navigateTo({ - url: "/pages/hiddendanger/acceptance" + url: `/pages/hiddendanger/acceptance?hazardId=${item.hazardId}&assignId=${item.assignId}&rectifyId=${item.rectifyId}` + }); + }; + const assignHazard = (item) => { + common_vendor.index.navigateTo({ + url: `/pages/hiddendanger/assignment?hazardId=${item.hazardId}&assignId=${item.assignId}` }); }; const fileList1 = common_vendor.ref([]); @@ -210,7 +245,7 @@ const _sfc_main = { filePath, name: "file", header: { - "Authorization": request_request.AUTH_TOKEN + "Authorization": request_request.getToken() }, success: (res) => { const data = JSON.parse(res.data); @@ -237,33 +272,88 @@ const _sfc_main = { title: item.name })); } else { - common_vendor.index.showToast({ title: res.msg || "获取标签列表失败", icon: "none" }); + common_vendor.index.showToast({ + title: res.msg || "获取标签列表失败", + icon: "none" + }); } } catch (error) { console.error(error); - common_vendor.index.showToast({ title: "请求失败", icon: "none" }); + common_vendor.index.showToast({ + title: "请求失败", + icon: "none" + }); } }; fetchTagOptions(); const levelOptions = common_vendor.ref([ - { id: 1, title: "轻微隐患" }, - { id: 2, title: "一般隐患" }, - { id: 3, title: "重大隐患" } + { + id: 1, + title: "轻微隐患" + }, + { + id: 2, + title: "一般隐患" + }, + { + id: 3, + title: "重大隐患" + } ]); + const sourceOptions = common_vendor.ref([ + { + id: 1, + title: "随手拍" + }, + { + id: 2, + title: "企业自查" + }, + { + id: 3, + title: "行业互查" + }, + { + id: 4, + title: "专家诊查" + } + ]); + common_vendor.watch(() => formData.source, (newVal) => { + const selected = sourceOptions.value[newVal]; + console.log("隐患来源选择结果:", { + 索引: newVal, + 选中项: selected, + id: selected == null ? void 0 : selected.id, + title: selected == null ? void 0 : selected.title + }); + }); return (_ctx, _cache) => { return { a: common_vendor.f(hiddenDangerList.value, (item, k0, i0) => { - return { + return common_vendor.e({ a: common_vendor.t(item.title), b: common_vendor.t(item.statusName), c: common_vendor.t(item.levelName), - d: common_vendor.t(item.address), - e: common_vendor.t(item.createdAt), - f: common_vendor.o(($event) => details(item), item.hazardId), - g: common_vendor.o(($event) => Rectification(item), item.hazardId), - h: common_vendor.o(($event) => acceptance(), item.hazardId), - i: item.hazardId - }; + d: item.levelName === "轻微隐患" ? 1 : "", + e: item.levelName === "一般隐患" ? 1 : "", + f: item.levelName === "重大隐患" ? 1 : "", + g: common_vendor.t(item.address), + h: common_vendor.t(item.createdAt), + i: common_vendor.o(($event) => details(item), item.hazardId), + j: item.statusName === "待整改" || item.statusName === "待验收" + }, item.statusName === "待整改" || item.statusName === "待验收" ? { + k: common_vendor.o(($event) => Rectification(item), item.hazardId) + } : {}, { + l: item.statusName === "待验收" + }, item.statusName === "待验收" ? { + m: common_vendor.o(($event) => acceptance(item), item.hazardId) + } : {}, { + n: item.statusName === "待交办" + }, item.statusName === "待交办" ? { + o: common_vendor.o(($event) => assignHazard(item), item.hazardId) + } : {}, { + p: item.hazardId + }); }), b: common_vendor.o(($event) => showAddPopup.value = true), c: common_vendor.o(($event) => showAddPopup.value = false), @@ -289,43 +379,32 @@ const _sfc_main = { ["item-height"]: "72rpx", modelValue: formData.level }), - k: common_vendor.t(selectedAddress.value || "请选择地址"), - l: common_vendor.n(selectedAddress.value ? "" : "text-gray"), - m: common_vendor.o(($event) => showAddressPopup.value = true), - n: common_vendor.o(($event) => showAddressPopup.value = true), - o: common_vendor.o(($event) => showAddressPopup.value = false), - p: addressKeyword.value, - q: common_vendor.o(($event) => addressKeyword.value = $event.detail.value), - r: common_vendor.f(filteredAddressList.value, (item, index, i0) => { - return { - a: common_vendor.t(item), - b: index, - c: common_vendor.o(($event) => tempSelectedAddress.value = item, index), - d: tempSelectedAddress.value === item ? 1 : "" - }; + k: common_vendor.o(($event) => formData.source = $event), + l: common_vendor.p({ + options: sourceOptions.value, + wrap: false, + ["item-width"]: "183rpx", + ["item-height"]: "72rpx", + modelValue: formData.source }), - s: common_vendor.o(($event) => showAddressPopup.value = false), - t: common_vendor.o(confirmAddress), - v: common_vendor.o(($event) => showAddressPopup.value = false), - w: common_vendor.p({ - show: showAddressPopup.value, - mode: "center", - round: "20" - }), - x: common_vendor.o(($event) => formData.description = $event), - y: common_vendor.p({ + m: common_vendor.t(selectedAddress.value || "请选择地址"), + n: common_vendor.n(selectedAddress.value ? "" : "text-gray"), + o: common_vendor.o(chooseLocation), + p: common_vendor.o(chooseLocation), + q: common_vendor.o(($event) => formData.description = $event), + r: common_vendor.p({ placeholder: "请输入内容", modelValue: formData.description }), - z: common_vendor.o(($event) => formData.tagIndex = $event), - A: common_vendor.p({ + s: common_vendor.o(($event) => formData.tagIndex = $event), + t: common_vendor.p({ options: tagOptions.value, modelValue: formData.tagIndex }), - B: common_vendor.o(($event) => showAddPopup.value = false), - C: common_vendor.o(handleAdd), - D: common_vendor.o(($event) => showAddPopup.value = false), - E: common_vendor.p({ + v: common_vendor.o(($event) => showAddPopup.value = false), + w: common_vendor.o(handleAdd), + x: common_vendor.o(($event) => showAddPopup.value = false), + y: common_vendor.p({ show: showAddPopup.value, mode: "center", round: "20" diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.json b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.json index e691161..c7ac2c3 100644 --- a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.json +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.json @@ -4,7 +4,7 @@ "up-upload": "../../uni_modules/uview-plus/components/u-upload/u-upload", "up-input": "../../uni_modules/uview-plus/components/u-input/u-input", "up-choose": "../../uni_modules/uview-plus/components/u-choose/u-choose", - "u-popup": "../../uni_modules/uview-plus/components/u-popup/u-popup", - "up-textarea": "../../uni_modules/uview-plus/components/u-textarea/u-textarea" + "up-textarea": "../../uni_modules/uview-plus/components/u-textarea/u-textarea", + "u-popup": "../../uni_modules/uview-plus/components/u-popup/u-popup" } } \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.wxml b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.wxml index e22c7d7..396a5b5 100644 --- a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.wxml +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.wxml @@ -1 +1 @@ -{{item.a}}{{item.b}}隐患等级:{{item.c}}隐患位置:{{item.d}}创建时间:{{item.e}}新增隐患排查×隐患图片/视频*必填:请上传现场照片或者视频作为隐患证据隐患标题*请用简洁的语言概括隐患要点隐患等级*隐患位置*{{k}}选择地址×{{item.a}}如:办公楼3层东侧消防通道、生产车间A区设备旁等,或点击"选择地址"按钮在地图上选择隐患描述*请详细说明隐患现状、潜在风险及影响范围隐患标签可选择多个相关标签对隐患进行分类 \ No newline at end of file +{{item.a}}{{item.b}}隐患等级:{{item.c}}隐患位置:{{item.g}}创建时间:{{item.h}}新增隐患排查×隐患图片/视频*必填:请上传现场照片或者视频作为隐患证据隐患标题*请用简洁的语言概括隐患要点隐患等级*隐患来源*隐患位置*{{m}}如:办公楼3层东侧消防通道、生产车间A区设备旁等,或点击"选择地址"按钮在地图上选择隐患描述*请详细说明隐患现状、潜在风险及影响范围隐患标签可选择多个相关标签对隐患进行分类 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.wxss b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.wxss index d79fc87..c361ab0 100644 --- a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.wxss +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/Inspection.wxss @@ -35,6 +35,25 @@ border-radius: 20rpx; padding: 20rpx; } +.level-tag.data-v-b44c631d { + padding: 4rpx 16rpx; + border-radius: 8rpx; +} +.level-minor.data-v-b44c631d { + background: #F6FFED; + border: 2rpx solid #B7EB8F; + color: #52C41A; +} +.level-normal.data-v-b44c631d { + background: #FFF7E6; + border: 2rpx solid #FFD591; + color: #FA8C16; +} +.level-major.data-v-b44c631d { + background: #FFF1F0; + border: 2rpx solid #FFA39E; + color: #F5222D; +} .popup-content.data-v-b44c631d { width: 600rpx; background: #fff; diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/acceptance.js b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/acceptance.js index b961188..4c5edfd 100644 --- a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/acceptance.js +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/acceptance.js @@ -1,5 +1,7 @@ "use strict"; const common_vendor = require("../../common/vendor.js"); +const request_api = require("../../request/api.js"); +const request_request = require("../../request/request.js"); if (!Array) { const _easycom_up_textarea2 = common_vendor.resolveComponent("up-textarea"); const _easycom_up_upload2 = common_vendor.resolveComponent("up-upload"); @@ -13,7 +15,132 @@ if (!Math) { const _sfc_main = { __name: "acceptance", setup(__props) { + const rectifyId = common_vendor.ref(""); + const hazardId = common_vendor.ref(""); + const assignId = common_vendor.ref(""); + const rectifyData = common_vendor.reactive({ + rectifyPlan: "", + rectifyResult: "" + }); + const rectifyAttachments = common_vendor.ref([]); + const formData = common_vendor.reactive({ + result: 1, + // 验收结果 1.通过 2.不通过 + verifyRemark: "" + // 验收备注 + }); const fileList1 = common_vendor.ref([]); + const getFullPath = (filePath) => { + if (!filePath) + return ""; + if (filePath.startsWith("http://") || filePath.startsWith("https://")) { + return filePath; + } + return request_request.baseUrl + filePath; + }; + const previewImage = (index) => { + const urls = rectifyAttachments.value.map((item) => getFullPath(item.filePath)); + common_vendor.index.previewImage({ + current: index, + urls + }); + }; + const fetchDetail = async () => { + if (!hazardId.value || !assignId.value) + return; + try { + const res = await request_api.getHiddenDangerDetail({ hazardId: hazardId.value, assignId: assignId.value }); + if (res.code === 0 && res.data) { + if (res.data.assigns && res.data.assigns.length > 0) { + const assign = res.data.assigns[0]; + if (assign.rectify) { + rectifyData.rectifyPlan = assign.rectify.rectifyPlan || ""; + rectifyData.rectifyResult = assign.rectify.rectifyResult || ""; + if (assign.rectify.attachments) { + rectifyAttachments.value = assign.rectify.attachments; + } + console.log("整改记录:", rectifyData); + console.log("整改附件:", rectifyAttachments.value); + } + } + } else { + common_vendor.index.showToast({ title: res.msg || "获取详情失败", icon: "none" }); + } + } catch (error) { + console.error("获取隐患详情失败:", error); + common_vendor.index.showToast({ title: "请求失败", icon: "none" }); + } + }; + common_vendor.onLoad((options) => { + if (options.rectifyId) { + rectifyId.value = options.rectifyId; + } + if (options.hazardId) { + hazardId.value = options.hazardId; + } + if (options.assignId) { + assignId.value = options.assignId; + } + console.log("验收页面参数:", { rectifyId: rectifyId.value, hazardId: hazardId.value, assignId: assignId.value }); + fetchDetail(); + }); + const handleCancel = () => { + common_vendor.index.navigateBack(); + }; + const handleSubmit = async () => { + if (!rectifyId.value) { + common_vendor.index.showToast({ + title: "缺少整改ID", + icon: "none" + }); + return; + } + const attachments = fileList1.value.map((file) => { + let url = ""; + if (typeof file.url === "string") { + url = file.url; + } else if (file.url && typeof file.url === "object") { + url = file.url.url || file.url.path || ""; + } + const fileName = typeof url === "string" && url ? url.split("/").pop() : file.name || ""; + return { + fileName: fileName || "", + filePath: url || "", + fileType: file.type || "image/png", + fileSize: file.size || 0 + }; + }); + const params = { + rectifyId: Number(rectifyId.value), + result: formData.result, + verifyRemark: formData.verifyRemark || "", + attachments + }; + console.log("提交验收参数:", params); + try { + const res = await request_api.acceptanceRectification(params); + if (res.code === 0) { + common_vendor.index.showToast({ + title: "验收成功", + icon: "success" + }); + setTimeout(() => { + common_vendor.index.navigateBack(); + }, 1500); + } else { + common_vendor.index.showToast({ + title: res.msg || "验收失败", + icon: "none" + }); + } + } catch (error) { + console.error("验收失败:", error); + common_vendor.index.showToast({ + title: "请求失败", + icon: "none" + }); + } + }; const deletePic = (event) => { fileList1.value.splice(event.index, 1); }; @@ -39,45 +166,64 @@ const _sfc_main = { fileListLen++; } }; - const uploadFilePromise = (url) => { + const uploadFilePromise = (filePath) => { return new Promise((resolve, reject) => { common_vendor.index.uploadFile({ - url: "http://192.168.2.21:7001/upload", - // 仅为示例,非真实的接口地址 - filePath: url, + url: request_request.baseUrl + "/frontend/attachment/upload", + filePath, name: "file", - formData: { - user: "test" + header: { + "Authorization": request_request.getToken() }, success: (res) => { - setTimeout(() => { - resolve(res.data.data); - }, 1e3); + const data = JSON.parse(res.data); + if (data.code === 0) { + resolve(data.data); + } else { + reject(data.msg || "上传失败"); + } + }, + fail: (err) => { + console.error("上传失败:", err); + reject(err); } }); }); }; return (_ctx, _cache) => { - return { - a: common_vendor.o(($event) => _ctx.value1 = $event), - b: common_vendor.p({ - placeholder: "请输入内容", - modelValue: _ctx.value1 + return common_vendor.e({ + a: common_vendor.t(rectifyData.rectifyPlan || "暂无"), + b: common_vendor.t(rectifyData.rectifyResult || "暂无"), + c: rectifyAttachments.value.length > 0 + }, rectifyAttachments.value.length > 0 ? { + d: common_vendor.f(rectifyAttachments.value, (img, idx, i0) => { + return { + a: idx, + b: getFullPath(img.filePath), + c: common_vendor.o(($event) => previewImage(idx), idx) + }; + }) + } : {}, { + e: common_vendor.n(formData.result === 1 ? "active" : ""), + f: common_vendor.o(($event) => formData.result = 1), + g: common_vendor.n(formData.result === 2 ? "active" : ""), + h: common_vendor.o(($event) => formData.result = 2), + i: common_vendor.o(($event) => formData.verifyRemark = $event), + j: common_vendor.p({ + placeholder: "请输入验收备注", + modelValue: formData.verifyRemark }), - c: common_vendor.o(($event) => _ctx.value1 = $event), - d: common_vendor.p({ - placeholder: "请输入内容", - modelValue: _ctx.value1 - }), - e: common_vendor.o(afterRead), - f: common_vendor.o(deletePic), - g: common_vendor.p({ + k: common_vendor.o(afterRead), + l: common_vendor.o(deletePic), + m: common_vendor.p({ fileList: fileList1.value, name: "1", multiple: true, maxCount: 10 - }) - }; + }), + n: common_vendor.o(handleCancel), + o: common_vendor.o(handleSubmit) + }); }; } }; diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/acceptance.wxml b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/acceptance.wxml index 9ba33c7..1660e30 100644 --- a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/acceptance.wxml +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/acceptance.wxml @@ -1 +1 @@ -整改记录验收内容*验收图片/视频* \ No newline at end of file +整改记录整改方案:{{a}}完成情况:{{b}}整改附件:暂无附件验收结果*验收备注验收图片/视频 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/acceptance.wxss b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/acceptance.wxss index 4ec6123..7cde0ea 100644 --- a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/acceptance.wxss +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/acceptance.wxss @@ -27,4 +27,20 @@ .page.data-v-39f9b795 { min-height: 100vh; background: #EBF2FC; +} +.result-btn.data-v-39f9b795 { + flex: 1; + height: 80rpx; + line-height: 80rpx; + border-radius: 8rpx; + background: #f5f5f5; + color: #666; + font-size: 28rpx; +} +.result-btn.data-v-39f9b795::after { + border: none; +} +.result-btn.active.data-v-39f9b795 { + background: #2667E9; + color: #fff; } \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/assignment.js b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/assignment.js new file mode 100644 index 0000000..c78a2e2 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/assignment.js @@ -0,0 +1,149 @@ +"use strict"; +const common_vendor = require("../../common/vendor.js"); +const request_api = require("../../request/api.js"); +if (!Array) { + const _easycom_up_picker2 = common_vendor.resolveComponent("up-picker"); + const _easycom_up_datetime_picker2 = common_vendor.resolveComponent("up-datetime-picker"); + (_easycom_up_picker2 + _easycom_up_datetime_picker2)(); +} +const _easycom_up_picker = () => "../../uni_modules/uview-plus/components/u-picker/u-picker.js"; +const _easycom_up_datetime_picker = () => "../../uni_modules/uview-plus/components/u-datetime-picker/u-datetime-picker.js"; +if (!Math) { + (_easycom_up_picker + _easycom_up_datetime_picker)(); +} +const _sfc_main = { + __name: "assignment", + setup(__props) { + const hazardId = common_vendor.ref(""); + const assignId = common_vendor.ref(""); + const showUserPicker = common_vendor.ref(false); + const selectedUser = common_vendor.ref(""); + const selectedUserId = common_vendor.ref(""); + const userColumns = common_vendor.ref([["暂无数据"]]); + const userList = common_vendor.ref([]); + const showDatePicker = common_vendor.ref(false); + const dateValue = common_vendor.ref(Date.now()); + const selectedDate = common_vendor.ref(""); + const fetchDeptUsers = async () => { + try { + const res = await request_api.getDepartmentPersonUsers(); + if (res.code === 0 && res.data) { + const users = []; + res.data.forEach((dept) => { + if (dept.users && dept.users.length > 0) { + dept.users.forEach((user) => { + users.push({ + id: String(user.userId), + name: `${user.nickName}(${dept.deptName})` + }); + }); + } + }); + userList.value = users; + userColumns.value = [users.map((u) => u.name)]; + console.log("整改人员列表:", users); + } + } catch (error) { + console.error("获取部门人员失败:", error); + } + }; + const onUserConfirm = (e) => { + console.log("选择的人员:", e); + if (e.value && e.value.length > 0) { + selectedUser.value = e.value[0]; + const user = userList.value.find((u) => u.name === e.value[0]); + if (user) { + selectedUserId.value = user.id; + } + } + showUserPicker.value = false; + }; + const onDateConfirm = (e) => { + console.log("选择的日期时间:", e); + const date = new Date(e.value); + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, "0"); + const day = String(date.getDate()).padStart(2, "0"); + const hours = String(date.getHours()).padStart(2, "0"); + const minutes = String(date.getMinutes()).padStart(2, "0"); + const seconds = String(date.getSeconds()).padStart(2, "0"); + selectedDate.value = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; + showDatePicker.value = false; + }; + const handleCancel = () => { + common_vendor.index.navigateBack(); + }; + const handleSubmit = async () => { + if (!selectedUserId.value) { + common_vendor.index.showToast({ title: "请选择整改人员", icon: "none" }); + return; + } + if (!selectedDate.value) { + common_vendor.index.showToast({ title: "请选择整改期限", icon: "none" }); + return; + } + const params = { + hazardId: Number(hazardId.value), + // 隐患ID + assigneeId: Number(selectedUserId.value), + // 被指派人ID + deadline: selectedDate.value, + // 处理期限 + assignRemark: "" + // 交办备注(可选) + }; + console.log("提交数据:", params); + try { + const res = await request_api.assignHiddenDanger(params); + if (res.code === 0) { + common_vendor.index.showToast({ title: "交办成功", icon: "success" }); + setTimeout(() => { + common_vendor.index.navigateBack(); + }, 1500); + } else { + common_vendor.index.showToast({ title: res.msg || "交办失败", icon: "none" }); + } + } catch (error) { + console.error("交办失败:", error); + common_vendor.index.showToast({ title: "请求失败", icon: "none" }); + } + }; + common_vendor.onLoad((options) => { + if (options.hazardId) + hazardId.value = options.hazardId; + if (options.assignId) + assignId.value = options.assignId; + fetchDeptUsers(); + }); + return (_ctx, _cache) => { + return { + a: common_vendor.t(selectedUser.value || "请选择整改人员"), + b: common_vendor.n(selectedUser.value ? "" : "text-gray"), + c: common_vendor.o(($event) => showUserPicker.value = true), + d: common_vendor.o(onUserConfirm), + e: common_vendor.o(($event) => showUserPicker.value = false), + f: common_vendor.o(($event) => showUserPicker.value = false), + g: common_vendor.p({ + show: showUserPicker.value, + columns: userColumns.value + }), + h: common_vendor.t(selectedDate.value || "请选择整改期限"), + i: common_vendor.n(selectedDate.value ? "" : "text-gray"), + j: common_vendor.o(($event) => showDatePicker.value = true), + k: common_vendor.o(onDateConfirm), + l: common_vendor.o(($event) => showDatePicker.value = false), + m: common_vendor.o(($event) => showDatePicker.value = false), + n: common_vendor.o(($event) => dateValue.value = $event), + o: common_vendor.p({ + show: showDatePicker.value, + mode: "datetime", + modelValue: dateValue.value + }), + p: common_vendor.o(handleCancel), + q: common_vendor.o(handleSubmit) + }; + }; + } +}; +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-6209e844"]]); +wx.createPage(MiniProgramPage); diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/assignment.json b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/assignment.json new file mode 100644 index 0000000..bfed723 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/assignment.json @@ -0,0 +1,7 @@ +{ + "navigationBarTitleText": "隐患交办", + "usingComponents": { + "up-picker": "../../uni_modules/uview-plus/components/u-picker/u-picker", + "up-datetime-picker": "../../uni_modules/uview-plus/components/u-datetime-picker/u-datetime-picker" + } +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/assignment.wxml b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/assignment.wxml new file mode 100644 index 0000000..e3d890f --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/assignment.wxml @@ -0,0 +1 @@ +整改人员*{{a}}整改期限*{{h}} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/assignment.wxss b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/assignment.wxss new file mode 100644 index 0000000..d275fe9 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/assignment.wxss @@ -0,0 +1,63 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ +/* uni.scss */ +/* 颜色变量 */ +/* 行为相关颜色 */ +/* 文字基本颜色 */ +/* 背景颜色 */ +/* 边框颜色 */ +/* 尺寸变量 */ +/* 文字尺寸 */ +/* 图片尺寸 */ +/* Border Radius */ +/* 水平间距 */ +/* 垂直间距 */ +/* 透明度 */ +/* 文章场景相关 */ +.page.data-v-6209e844 { + min-height: 100vh; + background: #EBF2FC; +} +.picker-input.data-v-6209e844 { + background: #fff; + border-radius: 8rpx; + padding: 24rpx 20rpx; + margin-bottom: 20rpx; + border: 1rpx solid #F6F6F6; +} +.picker-input text.data-v-6209e844 { + font-size: 28rpx; + color: #333; +} +.btn-group.data-v-6209e844 { + display: flex; + gap: 30rpx; +} +.btn-cancel.data-v-6209e844 { + flex: 1; + height: 80rpx; + line-height: 80rpx; + border: 2rpx solid #2667E9; + border-radius: 40rpx; + background: #fff; + color: #2667E9; + font-size: 30rpx; +} +.btn-confirm.data-v-6209e844 { + flex: 1; + height: 80rpx; + line-height: 80rpx; + border-radius: 40rpx; + color: #fff; + font-size: 30rpx; +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/rectification.js b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/rectification.js index 0211d2c..a986116 100644 --- a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/rectification.js +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/rectification.js @@ -5,20 +5,18 @@ const request_request = require("../../request/request.js"); if (!Array) { const _easycom_up_textarea2 = common_vendor.resolveComponent("up-textarea"); const _easycom_up_input2 = common_vendor.resolveComponent("up-input"); - const _easycom_up_calendar2 = common_vendor.resolveComponent("up-calendar"); - const _easycom_up_radio2 = common_vendor.resolveComponent("up-radio"); - const _easycom_up_radio_group2 = common_vendor.resolveComponent("up-radio-group"); + const _easycom_up_datetime_picker2 = common_vendor.resolveComponent("up-datetime-picker"); + const _easycom_up_select2 = common_vendor.resolveComponent("up-select"); const _easycom_up_upload2 = common_vendor.resolveComponent("up-upload"); - (_easycom_up_textarea2 + _easycom_up_input2 + _easycom_up_calendar2 + _easycom_up_radio2 + _easycom_up_radio_group2 + _easycom_up_upload2)(); + (_easycom_up_textarea2 + _easycom_up_input2 + _easycom_up_datetime_picker2 + _easycom_up_select2 + _easycom_up_upload2)(); } const _easycom_up_textarea = () => "../../uni_modules/uview-plus/components/u-textarea/u-textarea.js"; const _easycom_up_input = () => "../../uni_modules/uview-plus/components/u-input/u-input.js"; -const _easycom_up_calendar = () => "../../uni_modules/uview-plus/components/u-calendar/u-calendar.js"; -const _easycom_up_radio = () => "../../uni_modules/uview-plus/components/u-radio/u-radio.js"; -const _easycom_up_radio_group = () => "../../uni_modules/uview-plus/components/u-radio-group/u-radio-group.js"; +const _easycom_up_datetime_picker = () => "../../uni_modules/uview-plus/components/u-datetime-picker/u-datetime-picker.js"; +const _easycom_up_select = () => "../../uni_modules/uview-plus/components/u-select/u-select.js"; const _easycom_up_upload = () => "../../uni_modules/uview-plus/components/u-upload/u-upload.js"; if (!Math) { - (_easycom_up_textarea + _easycom_up_input + _easycom_up_calendar + _easycom_up_radio + _easycom_up_radio_group + _easycom_up_upload)(); + (_easycom_up_textarea + _easycom_up_input + _easycom_up_datetime_picker + _easycom_up_select + _easycom_up_upload)(); } const _sfc_main = { __name: "rectification", @@ -36,27 +34,34 @@ const _sfc_main = { // 投资资金(实际) }); const show = common_vendor.ref(false); - const mode = common_vendor.ref("single"); + const value1 = common_vendor.ref(Date.now()); const selectedDate = common_vendor.ref(""); - const radiovalue1 = common_vendor.ref(""); - const radiolist1 = common_vendor.reactive([ - { - name: "孙致远", - disabled: false - }, - { - name: "符友成", - disabled: false - }, - { - name: "向彪", - disabled: false - }, - { - name: "向纪荣", - disabled: false + common_vendor.ref(""); + const cateId = common_vendor.ref(""); + const cateList = common_vendor.ref([]); + const fetchDeptUsers = async () => { + try { + const res = await request_api.getDepartmentPersonUsers(); + if (res.code === 0 && res.data) { + const userList = []; + res.data.forEach((dept) => { + if (dept.users && dept.users.length > 0) { + dept.users.forEach((user) => { + userList.push({ + id: String(user.userId), + name: `${user.nickName}(${dept.deptName})` + }); + }); + } + }); + cateList.value = userList; + console.log("整改人员列表:", cateList.value); + } + } catch (error) { + console.error("获取部门人员失败:", error); } - ]); + }; + fetchDeptUsers(); const fileList1 = common_vendor.ref([]); const deletePic = (event) => { fileList1.value.splice(event.index, 1); @@ -83,10 +88,6 @@ const _sfc_main = { fileListLen++; } }; - const confirmDate = (e) => { - selectedDate.value = e[0]; - show.value = false; - }; const uploadFilePromise = (filePath) => { return new Promise((resolve, reject) => { common_vendor.index.uploadFile({ @@ -94,7 +95,7 @@ const _sfc_main = { filePath, name: "file", header: { - "Authorization": request_request.AUTH_TOKEN + "Authorization": request_request.getToken() }, success: (res) => { const data = JSON.parse(res.data); @@ -113,11 +114,17 @@ const _sfc_main = { }; const handleSubmit = async () => { if (!formData.rectifyPlan) { - common_vendor.index.showToast({ title: "请输入整改方案", icon: "none" }); + common_vendor.index.showToast({ + title: "请输入整改方案", + icon: "none" + }); return; } if (!formData.rectifyResult) { - common_vendor.index.showToast({ title: "请输入整改完成情况", icon: "none" }); + common_vendor.index.showToast({ + title: "请输入整改完成情况", + icon: "none" + }); return; } const attachments = fileList1.value.map((file) => { @@ -147,16 +154,25 @@ const _sfc_main = { try { const res = await request_api.submitRectification(params); if (res.code === 0) { - common_vendor.index.showToast({ title: "提交成功", icon: "success" }); + common_vendor.index.showToast({ + title: "提交成功", + icon: "success" + }); setTimeout(() => { common_vendor.index.navigateBack(); }, 1500); } else { - common_vendor.index.showToast({ title: res.msg || "提交失败", icon: "none" }); + common_vendor.index.showToast({ + title: res.msg || "提交失败", + icon: "none" + }); } } catch (error) { console.error("提交整改失败:", error); - common_vendor.index.showToast({ title: "请求失败", icon: "none" }); + common_vendor.index.showToast({ + title: "请求失败", + icon: "none" + }); } }; common_vendor.onLoad((options) => { @@ -167,6 +183,10 @@ const _sfc_main = { assignId.value = options.assignId; } }); + const selectItem = (item) => { + console.log("选择的整改人员:", item); + cateId.value = item.id; + }; return (_ctx, _cache) => { return { a: common_vendor.o(($event) => formData.rectifyPlan = $event), @@ -194,42 +214,29 @@ const _sfc_main = { i: common_vendor.t(selectedDate.value || "请选择日期"), j: common_vendor.n(selectedDate.value ? "" : "text-gray"), k: common_vendor.o(($event) => show.value = true), - l: common_vendor.o(confirmDate), - m: common_vendor.o(($event) => show.value = false), - n: common_vendor.p({ + l: common_vendor.o(($event) => value1.value = $event), + m: common_vendor.p({ + hasInput: true, show: show.value, - mode: mode.value + mode: "date", + modelValue: value1.value }), - o: common_vendor.f(radiolist1, (item, index, i0) => { - return { - a: index, - b: common_vendor.o(_ctx.radioChange, index), - c: "f18ba0ce-6-" + i0 + ",f18ba0ce-5", - d: common_vendor.p({ - shape: "square", - customStyle: { - marginBottom: "8px" - }, - label: item.name, - name: item.name - }) - }; + n: common_vendor.o(selectItem), + o: common_vendor.o(($event) => cateId.value = $event), + p: common_vendor.p({ + label: "整改人员", + options: cateList.value, + current: cateId.value }), - p: common_vendor.o(_ctx.groupChange), - q: common_vendor.o(($event) => radiovalue1.value = $event), - r: common_vendor.p({ - placement: "column", - modelValue: radiovalue1.value - }), - s: common_vendor.o(afterRead), - t: common_vendor.o(deletePic), - v: common_vendor.p({ + q: common_vendor.o(afterRead), + r: common_vendor.o(deletePic), + s: common_vendor.p({ fileList: fileList1.value, name: "1", multiple: true, maxCount: 10 }), - w: common_vendor.o(handleSubmit) + t: common_vendor.o(handleSubmit) }; }; } diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/rectification.json b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/rectification.json index 38977b1..fdcc52d 100644 --- a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/rectification.json +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/rectification.json @@ -3,9 +3,8 @@ "usingComponents": { "up-textarea": "../../uni_modules/uview-plus/components/u-textarea/u-textarea", "up-input": "../../uni_modules/uview-plus/components/u-input/u-input", - "up-calendar": "../../uni_modules/uview-plus/components/u-calendar/u-calendar", - "up-radio": "../../uni_modules/uview-plus/components/u-radio/u-radio", - "up-radio-group": "../../uni_modules/uview-plus/components/u-radio-group/u-radio-group", + "up-datetime-picker": "../../uni_modules/uview-plus/components/u-datetime-picker/u-datetime-picker", + "up-select": "../../uni_modules/uview-plus/components/u-select/u-select", "up-upload": "../../uni_modules/uview-plus/components/u-upload/u-upload" } } \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/rectification.wxml b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/rectification.wxml index 120b067..4d83774 100644 --- a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/rectification.wxml +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/rectification.wxml @@ -1 +1 @@ -整改方案*整改完成情况*投资资金(计划)*投资资金(实际)*限定整改时间*{{i}}整改人员*整改图片/视频* \ No newline at end of file +整改方案*整改完成情况*投资资金(计划)*投资资金(实际)*限定整改时间*{{i}}整改图片/视频* \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/view.js b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/view.js index a557989..3de786d 100644 --- a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/view.js +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/view.js @@ -1,6 +1,7 @@ "use strict"; const common_vendor = require("../../common/vendor.js"); const request_api = require("../../request/api.js"); +const request_request = require("../../request/request.js"); if (!Array) { const _easycom_up_input2 = common_vendor.resolveComponent("up-input"); const _easycom_up_textarea2 = common_vendor.resolveComponent("up-textarea"); @@ -26,11 +27,34 @@ const _sfc_main = { createdAt: "", attachments: [] }); + const rectifyAttachments = common_vendor.ref([]); + const getFullPath = (filePath) => { + if (!filePath) + return ""; + if (filePath.startsWith("http://") || filePath.startsWith("https://")) { + return filePath; + } + return request_request.baseUrl + filePath; + }; + const previewRectifyImage = (index) => { + const urls = rectifyAttachments.value.map((item) => getFullPath(item.filePath)); + common_vendor.index.previewImage({ + current: index, + urls + }); + }; const fetchDetail = async (hazardId, assignId) => { try { const res = await request_api.getHiddenDangerDetail({ hazardId, assignId }); if (res.code === 0 && res.data) { Object.assign(detailData, res.data); + if (res.data.assigns && res.data.assigns.length > 0) { + const assign = res.data.assigns[0]; + if (assign.rectify && assign.rectify.attachments) { + rectifyAttachments.value = assign.rectify.attachments; + console.log("整改附件:", rectifyAttachments.value); + } + } } else { common_vendor.index.showToast({ title: res.msg || "获取详情失败", icon: "none" }); } @@ -46,12 +70,13 @@ const _sfc_main = { }); return (_ctx, _cache) => { return common_vendor.e({ - a: (detailData == null ? void 0 : detailData.attachments) && detailData.attachments.length > 0 - }, (detailData == null ? void 0 : detailData.attachments) && detailData.attachments.length > 0 ? { - b: common_vendor.f(detailData.attachments, (img, idx, i0) => { + a: rectifyAttachments.value.length > 0 + }, rectifyAttachments.value.length > 0 ? { + b: common_vendor.f(rectifyAttachments.value, (img, idx, i0) => { return { a: idx, - b: img.filePath + b: getFullPath(img.filePath), + c: common_vendor.o(($event) => previewRectifyImage(idx), idx) }; }) } : {}, { diff --git a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/view.wxml b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/view.wxml index 06c9330..feefefb 100644 --- a/unpackage/dist/dev/mp-weixin/pages/hiddendanger/view.wxml +++ b/unpackage/dist/dev/mp-weixin/pages/hiddendanger/view.wxml @@ -1 +1 @@ -隐患图片/视频*暂无图片必填:请上传现场照片或者视频作为隐患证据隐患标题*请用简洁的语言概括隐患要点隐患等级*轻微隐患一般隐患重大隐患请用隐患可能造成的危害程度选择等级隐患位置*如:办公楼3层东侧消防通道,生产车间A区设备旁等,或点击"选择地址"按钮在地图上选择隐患描述*请详细说明隐患现状、潜在风险及影响范围隐患来源{{l}}创建时间{{m}} \ No newline at end of file +隐患图片/视频*暂无图片必填:请上传现场照片或者视频作为隐患证据隐患标题*请用简洁的语言概括隐患要点隐患等级*轻微隐患一般隐患重大隐患请用隐患可能造成的危害程度选择等级隐患位置*如:办公楼3层东侧消防通道,生产车间A区设备旁等,或点击"选择地址"按钮在地图上选择隐患描述*请详细说明隐患现状、潜在风险及影响范围隐患来源{{l}}创建时间{{m}} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/index/index.js b/unpackage/dist/dev/mp-weixin/pages/index/index.js index e401d57..5c67fba 100644 --- a/unpackage/dist/dev/mp-weixin/pages/index/index.js +++ b/unpackage/dist/dev/mp-weixin/pages/index/index.js @@ -6,6 +6,28 @@ const _sfc_main = { __name: "index", setup(__props) { const loading = common_vendor.ref(true); + const userInfo = common_vendor.reactive({ + userId: "", + username: "", + nickName: "", + deptId: "", + deptName: "" + }); + const getUserInfo = () => { + try { + const storedUserInfo = common_vendor.index.getStorageSync("userInfo"); + if (storedUserInfo) { + const info = JSON.parse(storedUserInfo); + userInfo.userId = info.userId || ""; + userInfo.username = info.username || ""; + userInfo.nickName = info.nickName || ""; + userInfo.deptId = info.deptId || ""; + userInfo.deptName = info.deptName || ""; + } + } catch (e) { + console.error("获取用户信息失败:", e); + } + }; const infoList = common_vendor.ref([ { name: "成员管理", @@ -54,16 +76,6 @@ const _sfc_main = { url: `/pages/Inspectionresult/Inspectionresult?id=${item.id}` }); }; - const Inspectionwarning = () => { - common_vendor.index.navigateTo({ - url: "/pages/Inspectionwarning/Inspectionwarning" - }); - }; - const my = () => { - common_vendor.index.navigateTo({ - url: "/pages/personalcenter/my" - }); - }; const handleMenuClick = (item) => { const menuRoutes = { "成员管理": "/pages/membermanagemen/membermanagemen", @@ -109,11 +121,37 @@ const _sfc_main = { return dateStr.split(" ")[0]; }; common_vendor.onLoad(() => { + getUserInfo(); getCheckPlanLists(); }); + const hiddenDangerParams = common_vendor.ref({ + pageNum: 1, + pageSize: 10, + name: "" + }); + const hiddenDangerData = common_vendor.ref([]); + const getHiddenDangerLists = async () => { + try { + const res = await request_api.getHiddenDangerList(hiddenDangerParams.value); + console.log(res); + if (res.code === 0) { + hiddenDangerData.value = res.data.records; + console.log(hiddenDangerData.value, 1111); + } + } catch (error) { + console.error(error); + } finally { + loading.value = false; + } + }; + common_vendor.onLoad(() => { + getHiddenDangerLists(); + }); return (_ctx, _cache) => { return common_vendor.e({ - a: common_vendor.f(infoList.value, (item, index, i0) => { + a: common_vendor.t(userInfo.deptName || "未知部门"), + b: common_vendor.t(userInfo.nickName || userInfo.username || "未登录"), + c: common_vendor.f(infoList.value, (item, index, i0) => { return { a: item.src, b: common_vendor.t(item.name), @@ -121,9 +159,9 @@ const _sfc_main = { d: common_vendor.o(($event) => handleMenuClick(item), index) }; }), - b: checkPlanData.value.length === 0 + d: checkPlanData.value.length === 0 }, checkPlanData.value.length === 0 ? {} : {}, { - c: common_vendor.f(checkPlanData.value, (item, index, i0) => { + e: common_vendor.f(checkPlanData.value, (item, index, i0) => { return { a: common_vendor.t(item.name), b: common_vendor.t(item.runModeName), @@ -140,13 +178,19 @@ const _sfc_main = { m: item.id }; }), - d: common_assets._imports_0, - e: common_assets._imports_1, - f: common_assets._imports_2, - g: common_assets._imports_3, - h: common_vendor.o(($event) => Inspectionwarning()), - i: common_assets._imports_4, - j: common_vendor.o(($event) => my()) + f: common_assets._imports_0, + g: common_vendor.f(hiddenDangerData.value, (item, index, i0) => { + return { + a: common_vendor.t(item.title), + b: common_vendor.t(item.source), + c: common_vendor.t(item.address), + d: common_vendor.t(item.levelName), + e: common_vendor.t(item.statusName), + f: common_vendor.t(item.createdAt), + g: item.id, + h: common_vendor.o(($event) => _ctx.HazardList(), item.id) + }; + }) }); }; } diff --git a/unpackage/dist/dev/mp-weixin/pages/index/index.wxml b/unpackage/dist/dev/mp-weixin/pages/index/index.wxml index f0ac6fd..f1b42eb 100644 --- a/unpackage/dist/dev/mp-weixin/pages/index/index.wxml +++ b/unpackage/dist/dev/mp-weixin/pages/index/index.wxml @@ -1 +1 @@ -湘西和谐云大数据产业发展有限公司手机号:17374339800切换功能菜单{{item.b}}我的检查计划 暂无检查计划 {{item.a}}{{item.b}}完成{{item.c}}计划时间:{{item.d}}至{{item.e}}完成进度:{{item.g}}%{{item.h}}总数{{item.i}}待完成0待验收{{item.j}}已完成我的隐患排查隐患#15标题:有隐患隐患来源:企业自查隐患位置:湖南省湘西土家族苗族自治州吉首市人民北路105号隐患等级:一般隐患隐患状态:待验收发现时间:2025-11-11 17:08:09首页一张图预警我的 \ No newline at end of file +{{a}}用户:{{b}}切换功能菜单{{item.b}}我的检查计划 暂无检查计划 {{item.a}}{{item.b}}完成{{item.c}}计划时间:{{item.d}}至{{item.e}}完成进度:{{item.g}}%{{item.h}}总数{{item.i}}待完成0待验收{{item.j}}已完成我的隐患排查隐患#15标题:{{item.a}}隐患来源:{{item.b}}隐患位置:{{item.c}}隐患等级:{{item.d}}隐患状态:{{item.e}}发现时间:{{item.f}} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/index/index.wxss b/unpackage/dist/dev/mp-weixin/pages/index/index.wxss index f4faba6..159acd7 100644 --- a/unpackage/dist/dev/mp-weixin/pages/index/index.wxss +++ b/unpackage/dist/dev/mp-weixin/pages/index/index.wxss @@ -24,6 +24,10 @@ /* 垂直间距 */ /* 透明度 */ /* 文章场景相关 */ +.grid-list.data-v-1cf27b2a { + gap: 30rpx; + margin-top: 30rpx; +} .list.data-v-1cf27b2a { background: #F2F6FF; box-shadow: 0rpx 4rpx 8rpx 2rpx #CADDFC; diff --git a/unpackage/dist/dev/mp-weixin/pages/login/agreement.js b/unpackage/dist/dev/mp-weixin/pages/login/agreement.js new file mode 100644 index 0000000..fe2387b --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/agreement.js @@ -0,0 +1,25 @@ +"use strict"; +const common_vendor = require("../../common/vendor.js"); +const _sfc_main = { + __name: "agreement", + setup(__props) { + const articleUrl = common_vendor.ref(""); + const webviewStyles = common_vendor.ref({ + progress: { + color: "#3D83F6" + // 使用蓝色主题色 + } + }); + common_vendor.onMounted(() => { + articleUrl.value = "http://www.baidu.com/"; + }); + return (_ctx, _cache) => { + return { + a: webviewStyles.value, + b: articleUrl.value + }; + }; + } +}; +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-b4896b2f"]]); +wx.createPage(MiniProgramPage); diff --git a/unpackage/dist/dev/mp-weixin/pages/login/agreement.json b/unpackage/dist/dev/mp-weixin/pages/login/agreement.json new file mode 100644 index 0000000..74df576 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/agreement.json @@ -0,0 +1,5 @@ +{ + "navigationBarTitleText": "用户协议", + "navigationStyle": "custom", + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/agreement.wxml b/unpackage/dist/dev/mp-weixin/pages/login/agreement.wxml new file mode 100644 index 0000000..433f333 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/agreement.wxml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/agreement.wxss b/unpackage/dist/dev/mp-weixin/pages/login/agreement.wxss new file mode 100644 index 0000000..991d9fc --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/agreement.wxss @@ -0,0 +1,26 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ +/* uni.scss */ +/* 颜色变量 */ +/* 行为相关颜色 */ +/* 文字基本颜色 */ +/* 背景颜色 */ +/* 边框颜色 */ +/* 尺寸变量 */ +/* 文字尺寸 */ +/* 图片尺寸 */ +/* Border Radius */ +/* 水平间距 */ +/* 垂直间距 */ +/* 透明度 */ +/* 文章场景相关 */ \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/enterprise.js b/unpackage/dist/dev/mp-weixin/pages/login/enterprise.js new file mode 100644 index 0000000..8e7247f --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/enterprise.js @@ -0,0 +1,152 @@ +"use strict"; +const common_vendor = require("../../common/vendor.js"); +if (!Array) { + const _easycom_up_input2 = common_vendor.resolveComponent("up-input"); + const _easycom_up_form_item2 = common_vendor.resolveComponent("up-form-item"); + const _easycom_up_form2 = common_vendor.resolveComponent("up-form"); + const _component_lsl_protocol_popup = common_vendor.resolveComponent("lsl-protocol-popup"); + (_easycom_up_input2 + _easycom_up_form_item2 + _easycom_up_form2 + _component_lsl_protocol_popup)(); +} +const _easycom_up_input = () => "../../uni_modules/uview-plus/components/u-input/u-input.js"; +const _easycom_up_form_item = () => "../../uni_modules/uview-plus/components/u-form-item/u-form-item.js"; +const _easycom_up_form = () => "../../uni_modules/uview-plus/components/u-form/u-form.js"; +if (!Math) { + (_easycom_up_input + _easycom_up_form_item + _easycom_up_form)(); +} +const _sfc_main = { + __name: "enterprise", + setup(__props) { + const state = common_vendor.reactive({ + showSex: false, + isAgreed: false, + // 用户是否同意协议 + showProtocolPopup: false, + // 是否显示协议弹窗 + model1: { + userInfo: { + name: "uview-plus UI", + sex: "" + } + }, + rules: { + "userInfo.name": { + type: "string", + required: true, + message: "请填写姓名", + trigger: ["blur", "change"] + } + } + }); + const toggleAgreement = () => { + state.isAgreed = !state.isAgreed; + }; + const showProtocol = (type) => { + if (type === "user") { + common_vendor.index.navigateTo({ + url: "/pages/login/agreement" + }); + } else if (type === "privacy") { + state.showProtocolPopup = true; + } + }; + const handleRegister = () => { + if (!state.isAgreed) { + common_vendor.index.showToast({ + title: "请先阅读并同意用户协议和隐私政策", + icon: "none", + duration: 2e3 + }); + return; + } + console.log("开始注册流程"); + }; + const handleAgreeProtocol = () => { + state.isAgreed = true; + state.showProtocolPopup = false; + common_vendor.index.showToast({ + title: "已同意协议条款", + icon: "success", + duration: 1500 + }); + }; + const closeProtocolPopup = () => { + state.showProtocolPopup = false; + }; + const other = [ + [ + { + tit: "《服务协议》", + type: "page", + // doc自行下载打开文档 page跳转页面 + content: "/pages/login/agreement" + // 文档地址/页面跳转地址 + }, + { + tit: "《隐私政策》", + type: "page", + // doc自行下载打开文档 page跳转页面 + content: "/pages/login/privacy" + // 文档地址/页面跳转地址 + } + ] + ]; + return (_ctx, _cache) => { + return common_vendor.e({ + a: common_vendor.p({ + border: "none", + placeholder: "请填写营业执照上的企业名称", + inputAlign: "right" + }), + b: common_vendor.sr("item1", "280ea37d-1,280ea37d-0"), + c: common_vendor.p({ + required: true, + label: "企业名称", + prop: "userInfo.name", + borderBottom: true, + ["label-width"]: "90" + }), + d: common_vendor.p({ + border: "none", + placeholder: "请输入管理员姓名", + inputAlign: "right" + }), + e: common_vendor.sr("item1", "280ea37d-3,280ea37d-0"), + f: common_vendor.p({ + required: true, + label: "管理员姓名", + prop: "userInfo.name", + borderBottom: true, + ["label-width"]: "120" + }), + g: common_vendor.sr("form1", "280ea37d-0"), + h: common_vendor.p({ + labelPosition: "left", + model: state.model1, + rules: state.rules + }), + i: common_vendor.n(state.isAgreed ? "bg-blue" : "bg-gray"), + j: !state.isAgreed, + k: common_vendor.o(handleRegister), + l: state.isAgreed + }, state.isAgreed ? {} : {}, { + m: state.isAgreed ? 1 : "", + n: common_vendor.o(($event) => showProtocol("user")), + o: common_vendor.o(($event) => showProtocol("privacy")), + p: common_vendor.o(toggleAgreement), + q: common_vendor.o(handleAgreeProtocol), + r: common_vendor.o(closeProtocolPopup), + s: common_vendor.p({ + title: "用户协议和隐私政策", + predesc: "为了更好地保护您的个人信息和合法权益,在使用我们的服务前,请您务必仔细阅读并充分理解以下协议条款。", + subdesc: '请您详细阅读各条款内容,特别是免除或限制责任的条款。如您同意以下协议条款,请点击"同意并继续"开始使用我们的服务。', + color: "#007AFF", + onNeed: state.showProtocolPopup, + other, + open_type: "getPhoneNumber|agreePrivacyAuthorization" + }) + }); + }; + } +}; +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-280ea37d"]]); +wx.createPage(MiniProgramPage); diff --git a/unpackage/dist/dev/mp-weixin/pages/login/enterprise.json b/unpackage/dist/dev/mp-weixin/pages/login/enterprise.json new file mode 100644 index 0000000..0b94816 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/enterprise.json @@ -0,0 +1,8 @@ +{ + "navigationBarTitleText": "注册新企业", + "usingComponents": { + "up-input": "../../uni_modules/uview-plus/components/u-input/u-input", + "up-form-item": "../../uni_modules/uview-plus/components/u-form-item/u-form-item", + "up-form": "../../uni_modules/uview-plus/components/u-form/u-form" + } +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/enterprise.wxml b/unpackage/dist/dev/mp-weixin/pages/login/enterprise.wxml new file mode 100644 index 0000000..c44e36f --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/enterprise.wxml @@ -0,0 +1 @@ + 我已阅读并接受 《服务协议》《隐私政策》 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/enterprise.wxss b/unpackage/dist/dev/mp-weixin/pages/login/enterprise.wxss new file mode 100644 index 0000000..67c2187 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/enterprise.wxss @@ -0,0 +1,59 @@ + +/* 协议同意区域 */ +.protocol-agreement.data-v-280ea37d { + padding: 30rpx 0; +} +.protocol-checkbox.data-v-280ea37d { + display: flex; + align-items: flex-start; + gap: 15rpx; +} +.checkbox.data-v-280ea37d { + width: 32rpx; + height: 32rpx; + border: 2rpx solid #ddd; + border-radius: 6rpx; + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + transition: all 0.3s ease; + margin-top: 2rpx; +} +.checkbox.checked.data-v-280ea37d { + background-color: #007AFF; + border-color: #007AFF; +} +.checkmark.data-v-280ea37d { + color: white; + font-size: 20rpx; + font-weight: bold; +} +.protocol-text.data-v-280ea37d { + font-size: 28rpx; + color: #666; + line-height: 1.6; + flex: 1; +} +.protocol-link.data-v-280ea37d { + color: #007AFF; + text-decoration: underline; +} + +/* 注册按钮样式 */ +.bg-gray.data-v-280ea37d { + background-color: #ccc !important; + color: #999 !important; +} +.bg-blue.data-v-280ea37d { + background-color: #007AFF !important; + color: white !important; +} +button[disabled].data-v-280ea37d { + opacity: 0.6; + cursor: not-allowed; +} +button.data-v-280ea37d:not([disabled]):active { + transform: scale(0.98); + transition: transform 0.1s ease; +} diff --git a/unpackage/dist/dev/mp-weixin/pages/login/forget.js b/unpackage/dist/dev/mp-weixin/pages/login/forget.js new file mode 100644 index 0000000..cc29120 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/forget.js @@ -0,0 +1,168 @@ +"use strict"; +const common_vendor = require("../../common/vendor.js"); +const common_assets = require("../../common/assets.js"); +if (!Array) { + const _component_cu_custom = common_vendor.resolveComponent("cu-custom"); + _component_cu_custom(); +} +const _sfc_main = { + __name: "forget", + setup(__props) { + const phone = common_vendor.ref(""); + const password = common_vendor.ref(""); + const code = common_vendor.ref(""); + const second = common_vendor.ref(0); + const showPassword = common_vendor.ref(false); + let timer = null; + const codeText = common_vendor.computed(() => { + if (second.value === 0) { + return "获取验证码"; + } else { + const secondStr = second.value < 10 ? `0${second.value}` : second.value; + return `重新获取${secondStr}`; + } + }); + const togglePassword = () => { + showPassword.value = !showPassword.value; + }; + const getCode = () => { + if (phone.value.length !== 11) { + common_vendor.index.showToast({ + icon: "none", + title: "手机号不正确" + }); + return; + } + if (second.value > 0) { + return; + } + second.value = 60; + startCountdown(); + common_vendor.index.request({ + url: "http://example.com/api/code", + data: { + phone: phone.value, + type: "forget" + }, + method: "POST", + dataType: "json", + success: (res) => { + if (res.data.code != 200) { + common_vendor.index.showToast({ + title: res.data.msg || "获取验证码失败", + icon: "none" + }); + second.value = 0; + clearCountdown(); + } else { + common_vendor.index.showToast({ + title: res.data.msg || "验证码已发送" + }); + } + }, + fail: () => { + common_vendor.index.showToast({ + title: "网络请求失败", + icon: "none" + }); + second.value = 0; + clearCountdown(); + } + }); + }; + const startCountdown = () => { + clearCountdown(); + timer = setInterval(() => { + second.value--; + if (second.value === 0) { + clearCountdown(); + } + }, 1e3); + }; + const clearCountdown = () => { + if (timer) { + clearInterval(timer); + timer = null; + } + }; + const handleReset = () => { + if (phone.value.length !== 11) { + common_vendor.index.showToast({ + icon: "none", + title: "手机号不正确" + }); + return; + } + if (password.value.length < 6) { + common_vendor.index.showToast({ + icon: "none", + title: "密码不正确" + }); + return; + } + if (code.value.length !== 4) { + common_vendor.index.showToast({ + icon: "none", + title: "验证码不正确" + }); + return; + } + common_vendor.index.request({ + url: "http://example.com/api/forget", + data: { + phone: phone.value, + password: password.value, + code: code.value + }, + method: "POST", + dataType: "json", + success: (res) => { + if (res.data.code != 200) { + common_vendor.index.showToast({ + title: res.data.msg || "修改密码失败", + icon: "none" + }); + } else { + common_vendor.index.showToast({ + title: res.data.msg || "修改密码成功" + }); + setTimeout(() => { + common_vendor.index.navigateBack(); + }, 1500); + } + }, + fail: () => { + common_vendor.index.showToast({ + title: "网络请求失败", + icon: "none" + }); + } + }); + }; + common_vendor.onUnmounted(() => { + clearCountdown(); + }); + return (_ctx, _cache) => { + return { + a: common_vendor.p({ + isBack: true + }), + b: common_assets._imports_0$4, + c: phone.value, + d: common_vendor.o(($event) => phone.value = $event.detail.value), + e: common_assets._imports_1$2, + f: !showPassword.value, + g: password.value, + h: common_vendor.o(($event) => password.value = $event.detail.value), + i: showPassword.value ? 1 : "", + j: common_vendor.o(togglePassword), + k: common_vendor.t(codeText.value), + l: second.value > 0 ? 1 : "", + m: common_vendor.o(getCode), + n: common_vendor.o(handleReset) + }; + }; + } +}; +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-79044ba6"]]); +wx.createPage(MiniProgramPage); diff --git a/unpackage/dist/dev/mp-weixin/pages/login/forget.json b/unpackage/dist/dev/mp-weixin/pages/login/forget.json new file mode 100644 index 0000000..84d9bb4 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/forget.json @@ -0,0 +1,5 @@ +{ + "navigationBarTitleText": "忘记密码", + "navigationStyle": "custom", + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/forget.wxml b/unpackage/dist/dev/mp-weixin/pages/login/forget.wxml new file mode 100644 index 0000000..3a7cfee --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/forget.wxml @@ -0,0 +1 @@ +返回忘记密码若您忘记了密码,可在此重新设置新密码。{{k}} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/forget.wxss b/unpackage/dist/dev/mp-weixin/pages/login/forget.wxss new file mode 100644 index 0000000..fc6e5f8 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/forget.wxss @@ -0,0 +1,116 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ +/* uni.scss */ +/* 颜色变量 */ +/* 行为相关颜色 */ +/* 文字基本颜色 */ +/* 背景颜色 */ +/* 边框颜色 */ +/* 尺寸变量 */ +/* 文字尺寸 */ +/* 图片尺寸 */ +/* Border Radius */ +/* 水平间距 */ +/* 垂直间距 */ +/* 透明度 */ +/* 文章场景相关 */ +page.data-v-79044ba6 { + background-color: #FFFFFF; +} +.content.data-v-79044ba6 { + display: flex; + flex-direction: column; + justify-content: center; + background-color: #FFFFFF; +} +.tishi.data-v-79044ba6 { + color: #999999; + font-size: 28rpx; + line-height: 50rpx; + margin-bottom: 50rpx; +} +.list.data-v-79044ba6 { + display: flex; + flex-direction: column; + padding-top: 50rpx; + padding-left: 70rpx; + padding-right: 70rpx; +} +.list .list-call.data-v-79044ba6 { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + height: 100rpx; + color: #333333; + background: #F5F7FB; + border-radius: 16rpx; + border: 2rpx solid #F5F7FB; + margin-top: 30rpx; + padding: 0 30rpx; +} +.list .list-call .img.data-v-79044ba6 { + width: 30rpx; + height: 36rpx; +} +.list .list-call .sl-input.data-v-79044ba6 { + flex: 1; + text-align: left; + font-size: 32rpx; + margin-left: 16rpx; +} +.list .list-call .eye-icon.data-v-79044ba6 { + font-size: 36rpx; + color: #999; +} +.list .list-call .eye-icon.data-v-79044ba6::before { + content: "\e69c"; + /* 闭眼图标的unicode */ +} +.list .list-call .eye-icon.eye-active.data-v-79044ba6 { + color: #3D83F6; +} +.list .list-call .eye-icon.eye-active.data-v-79044ba6::before { + content: "\e69d"; + /* 睁眼图标的unicode */ +} +.list .list-call .yzm.data-v-79044ba6 { + width: 200rpx; + height: 60rpx; + text-align: center; + font-size: 30rpx; + color: #3D83F6; +} +.list .list-call .yzm.yzms.data-v-79044ba6 { + color: #999999; +} +.padding-lr.data-v-79044ba6 { + padding-left: 70rpx; + padding-right: 70rpx; +} +.button-login.data-v-79044ba6 { + color: #FFFFFF; + font-size: 34rpx; + width: 100%; + height: 100rpx; + background: linear-gradient(90deg, #3E95F1 0%, #4269F5 100%); + border-radius: 50rpx; + line-height: 100rpx; + text-align: center; + margin-left: auto; + margin-right: auto; + margin-top: 130rpx; +} +.button-hover.data-v-79044ba6 { + opacity: 0.8; +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/login.js b/unpackage/dist/dev/mp-weixin/pages/login/login.js new file mode 100644 index 0000000..ecb50c6 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/login.js @@ -0,0 +1,99 @@ +"use strict"; +const common_vendor = require("../../common/vendor.js"); +const common_assets = require("../../common/assets.js"); +const request_api = require("../../request/api.js"); +const _sfc_main = { + __name: "login", + setup(__props) { + const username = common_vendor.ref(""); + const password = common_vendor.ref(""); + const showPassword = common_vendor.ref(true); + const changePassword = () => { + showPassword.value = !showPassword.value; + }; + const handleLogin = async () => { + console.log("点击登录按钮"); + console.log("用户名:", username.value); + console.log("密码:", password.value); + if (!username.value) { + common_vendor.index.showToast({ + icon: "none", + title: "请输入用户名" + }); + return; + } + if (!password.value) { + common_vendor.index.showToast({ + icon: "none", + title: "请输入密码" + }); + return; + } + try { + console.log("开始调用登录接口..."); + const res = await request_api.login({ + username: username.value, + password: password.value + }); + console.log("登录接口返回:", res); + if (res.code === 0) { + if (res.data.token) { + common_vendor.index.setStorageSync("token", res.data.token); + } + const userInfo = { + userId: res.data.userId, + username: res.data.username, + nickName: res.data.nickName, + deptId: res.data.deptId, + deptName: res.data.deptName + }; + common_vendor.index.setStorageSync("userInfo", JSON.stringify(userInfo)); + common_vendor.index.showToast({ + title: "登录成功", + icon: "success" + }); + setTimeout(() => { + common_vendor.index.reLaunch({ + url: "/pages/index/index" + }); + }, 1500); + } else { + common_vendor.index.showToast({ + title: res.msg || "登录失败", + icon: "none" + }); + } + } catch (error) { + console.error("登录失败:", error); + common_vendor.index.showToast({ + title: "网络请求失败", + icon: "none" + }); + } + }; + const goToReport = () => { + common_vendor.index.navigateTo({ + url: "/subpackages/suishoupai/pages/index/index" + }); + }; + return (_ctx, _cache) => { + return { + a: common_assets._imports_0$3, + b: common_assets._imports_0$4, + c: username.value, + d: common_vendor.o(($event) => username.value = $event.detail.value), + e: common_assets._imports_1$2, + f: showPassword.value, + g: password.value, + h: common_vendor.o(($event) => password.value = $event.detail.value), + i: showPassword.value ? "/static/index/cl.png" : "/static/index/op.png", + j: common_vendor.o(changePassword), + k: common_vendor.o(handleLogin), + l: common_assets._imports_3$1, + m: common_vendor.o(goToReport) + }; + }; + } +}; +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-e4e4508d"]]); +wx.createPage(MiniProgramPage); diff --git a/unpackage/dist/dev/mp-weixin/pages/login/login.json b/unpackage/dist/dev/mp-weixin/pages/login/login.json new file mode 100644 index 0000000..c6b4aea --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/login.json @@ -0,0 +1,5 @@ +{ + "navigationBarTitleText": "登录页面", + "navigationStyle": "custom", + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/login.wxml b/unpackage/dist/dev/mp-weixin/pages/login/login.wxml new file mode 100644 index 0000000..64fb977 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/login.wxml @@ -0,0 +1 @@ +注册成员账号忘记密码?随手拍举报 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/login.wxss b/unpackage/dist/dev/mp-weixin/pages/login/login.wxss new file mode 100644 index 0000000..01d4b4a --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/login.wxss @@ -0,0 +1,182 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ +/* uni.scss */ +/* 颜色变量 */ +/* 行为相关颜色 */ +/* 文字基本颜色 */ +/* 背景颜色 */ +/* 边框颜色 */ +/* 尺寸变量 */ +/* 文字尺寸 */ +/* 图片尺寸 */ +/* Border Radius */ +/* 水平间距 */ +/* 垂直间距 */ +/* 透明度 */ +/* 文章场景相关 */ +page.data-v-e4e4508d { + background-color: #FFFFFF; +} +.content.data-v-e4e4508d { + display: flex; + flex-direction: column; + justify-content: center; + background-color: #FFFFFF; +} +.header.data-v-e4e4508d { + width: 100%; + position: relative; + margin-bottom: 0; +} +.header .bg-image.data-v-e4e4508d { + width: 100%; + vertical-align: bottom; +} +.login.data-v-e4e4508d { + position: absolute; + top: 50%; + color: #666666; + font-size: 28rpx; +} +.list.data-v-e4e4508d { + display: flex; + flex-direction: column; + padding-top: 50rpx; + padding-left: 70rpx; + padding-right: 70rpx; + background-color: #FFFFFF; + margin-top: -2rpx; + /* 消除可能的间隙 */ +} +.list .list-call.data-v-e4e4508d { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + height: 100rpx; + color: #333333; + background: #F5F7FB; + border-radius: 16rpx; + border: 2rpx solid #F5F7FB; + margin-top: 30rpx; + padding: 0 30rpx; +} +.list .list-call .img.data-v-e4e4508d { + width: 30rpx; + height: 36rpx; +} +.list .list-call .sl-input.data-v-e4e4508d { + flex: 1; + text-align: left; + font-size: 32rpx; + margin-left: 16rpx; +} +.list .list-call .eye-img.data-v-e4e4508d { + width: 40rpx; + height: 40rpx; +} +.agreement.data-v-e4e4508d { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + font-size: 30rpx; + margin-top: 30rpx; + color: #3D83F6; + text-align: center; + height: 40rpx; + line-height: 40rpx; +} +.agreement .link.data-v-e4e4508d { + font-size: 30rpx; + color: #3D83F6; +} +.agreement .link.data-v-e4e4508d:active { + opacity: 0.8; +} +.padding-lr.data-v-e4e4508d { + padding-left: 70rpx; + padding-right: 70rpx; +} +.button-login.data-v-e4e4508d { + color: #FFFFFF; + font-size: 34rpx; + width: 100%; + height: 100rpx; + background: linear-gradient(90deg, #3E95F1 0%, #4269F5 100%); + border-radius: 50rpx; + line-height: 100rpx; + text-align: center; + margin-left: auto; + margin-right: auto; + margin-top: 130rpx; + border: none; +} +.button-login.data-v-e4e4508d::after { + border: none; +} +.button-report.data-v-e4e4508d { + color: #FFFFFF; + font-size: 34rpx; + width: 100%; + height: 100rpx; + background: linear-gradient(90deg, #FF7878 0%, #F2505B 100%); + border-radius: 50rpx; + line-height: 100rpx; + text-align: center; + margin-left: auto; + margin-right: auto; + display: flex; + align-items: center; + justify-content: center; +} +.margin-top.data-v-e4e4508d { + margin-top: 30rpx; +} +.button-hover.data-v-e4e4508d { + opacity: 0.8; +} +.text-blue.data-v-e4e4508d { + color: #3D83F6; + font-size: 28rpx; +} +.icon-image.data-v-e4e4508d { + width: 36rpx; + height: 36rpx; + margin-right: 8rpx; +} +.text-xl.data-v-e4e4508d { + font-size: 36rpx; +} +.text-black.data-v-e4e4508d { + color: #000000; +} +.text-bold.data-v-e4e4508d { + font-weight: bold; +} +.padding.data-v-e4e4508d { + padding: 30rpx; +} +.padding-top.data-v-e4e4508d { + padding-top: 15rpx; +} +.protocol-box.data-v-e4e4508d { + display: flex; + justify-content: center; + margin-top: 40rpx; +} +.protocol-box .protocol-link.data-v-e4e4508d { + font-size: 28rpx; + color: #3D83F6; + text-decoration: underline; +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/reg.js b/unpackage/dist/dev/mp-weixin/pages/login/reg.js new file mode 100644 index 0000000..48f760d --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/reg.js @@ -0,0 +1,201 @@ +"use strict"; +const common_vendor = require("../../common/vendor.js"); +if (!Array) { + const _component_cu_custom = common_vendor.resolveComponent("cu-custom"); + const _easycom_up_input2 = common_vendor.resolveComponent("up-input"); + const _easycom_up_form_item2 = common_vendor.resolveComponent("up-form-item"); + const _easycom_up_form2 = common_vendor.resolveComponent("up-form"); + (_component_cu_custom + _easycom_up_input2 + _easycom_up_form_item2 + _easycom_up_form2)(); +} +const _easycom_up_input = () => "../../uni_modules/uview-plus/components/u-input/u-input.js"; +const _easycom_up_form_item = () => "../../uni_modules/uview-plus/components/u-form-item/u-form-item.js"; +const _easycom_up_form = () => "../../uni_modules/uview-plus/components/u-form/u-form.js"; +if (!Math) { + (_easycom_up_input + _easycom_up_form_item + _easycom_up_form)(); +} +const _sfc_main = { + __name: "reg", + setup(__props) { + const phone = common_vendor.ref(""); + const password = common_vendor.ref(""); + const code = common_vendor.ref(""); + const invitation = common_vendor.ref(""); + const second = common_vendor.ref(0); + common_vendor.ref(false); + const state = common_vendor.reactive({ + showSex: false, + model1: { + userInfo: { + name: "uview-plus UI", + sex: "" + } + }, + rules: { + "userInfo.name": { + type: "string", + required: true, + message: "请填写姓名", + trigger: ["blur", "change"] + } + } + }); + common_vendor.computed(() => { + if (second.value === 0) { + return "获取验证码"; + } else { + const secondStr = second.value < 10 ? `0${second.value}` : second.value; + return `重新获取${secondStr}`; + } + }); + const handleRegister = () => { + if (phone.value.length !== 11) { + common_vendor.index.showToast({ + icon: "none", + title: "手机号不正确" + }); + return; + } + if (password.value.length < 6) { + common_vendor.index.showToast({ + icon: "none", + title: "密码不正确" + }); + return; + } + if (code.value.length !== 4) { + common_vendor.index.showToast({ + icon: "none", + title: "验证码不正确" + }); + return; + } + common_vendor.index.request({ + url: "http://example.com/api/register", + data: { + phone: phone.value, + password: password.value, + code: code.value, + invitation: invitation.value + }, + method: "POST", + dataType: "json", + success: (res) => { + if (res.data.code != 200) { + common_vendor.index.showToast({ + title: res.data.msg || "注册失败", + icon: "none" + }); + } else { + common_vendor.index.showToast({ + title: res.data.msg || "注册成功" + }); + setTimeout(() => { + common_vendor.index.navigateBack(); + }, 1500); + } + }, + fail: () => { + common_vendor.index.showToast({ + title: "网络请求失败", + icon: "none" + }); + } + }); + }; + common_vendor.onUnmounted(() => { + }); + return (_ctx, _cache) => { + return { + a: common_vendor.p({ + isBack: true + }), + b: common_vendor.p({ + border: "none", + placeholder: "请输入企业名称", + inputAlign: "right" + }), + c: common_vendor.sr("item1", "561d431d-2,561d431d-1"), + d: common_vendor.p({ + label: "加入企业", + prop: "userInfo.name", + borderBottom: true, + ["label-width"]: "90" + }), + e: common_vendor.p({ + border: "none", + placeholder: "请输入", + inputAlign: "right" + }), + f: common_vendor.sr("item1", "561d431d-4,561d431d-1"), + g: common_vendor.p({ + required: true, + label: "真实姓名", + prop: "userInfo.name", + borderBottom: true, + ["label-width"]: "90" + }), + h: common_vendor.p({ + border: "none", + placeholder: "选择", + inputAlign: "right" + }), + i: common_vendor.sr("item1", "561d431d-6,561d431d-1"), + j: common_vendor.p({ + required: true, + label: "选择分组/部门", + prop: "userInfo.name", + borderBottom: true, + ["label-width"]: "120" + }), + k: common_vendor.p({ + border: "none", + placeholder: "请输入手机号码", + inputAlign: "right" + }), + l: common_vendor.sr("item1", "561d431d-8,561d431d-1"), + m: common_vendor.p({ + required: true, + label: "手机号码", + prop: "userInfo.name", + borderBottom: true, + ["label-width"]: "90" + }), + n: common_vendor.p({ + border: "none", + placeholder: "请输入密码", + inputAlign: "right" + }), + o: common_vendor.sr("item1", "561d431d-10,561d431d-1"), + p: common_vendor.p({ + required: true, + label: "密码", + prop: "userInfo.name", + borderBottom: true, + ["label-width"]: "90" + }), + q: common_vendor.p({ + border: "none", + placeholder: "请输入密码", + inputAlign: "right" + }), + r: common_vendor.sr("item1", "561d431d-12,561d431d-1"), + s: common_vendor.p({ + required: true, + label: "确认密码", + prop: "userInfo.name", + borderBottom: true, + ["label-width"]: "90" + }), + t: common_vendor.sr("form1", "561d431d-1"), + v: common_vendor.p({ + labelPosition: "left", + model: state.model1, + rules: state.rules + }), + w: common_vendor.o(handleRegister) + }; + }; + } +}; +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-561d431d"]]); +wx.createPage(MiniProgramPage); diff --git a/unpackage/dist/dev/mp-weixin/pages/login/reg.json b/unpackage/dist/dev/mp-weixin/pages/login/reg.json new file mode 100644 index 0000000..a0a405a --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/reg.json @@ -0,0 +1,9 @@ +{ + "navigationBarTitleText": "注册账号", + "navigationStyle": "custom", + "usingComponents": { + "up-input": "../../uni_modules/uview-plus/components/u-input/u-input", + "up-form-item": "../../uni_modules/uview-plus/components/u-form-item/u-form-item", + "up-form": "../../uni_modules/uview-plus/components/u-form/u-form" + } +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/reg.wxml b/unpackage/dist/dev/mp-weixin/pages/login/reg.wxml new file mode 100644 index 0000000..8dfd875 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/reg.wxml @@ -0,0 +1 @@ +返回注册新成员账号 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/reg.wxss b/unpackage/dist/dev/mp-weixin/pages/login/reg.wxss new file mode 100644 index 0000000..ff983e3 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/reg.wxss @@ -0,0 +1,128 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ +/* uni.scss */ +/* 颜色变量 */ +/* 行为相关颜色 */ +/* 文字基本颜色 */ +/* 背景颜色 */ +/* 边框颜色 */ +/* 尺寸变量 */ +/* 文字尺寸 */ +/* 图片尺寸 */ +/* Border Radius */ +/* 水平间距 */ +/* 垂直间距 */ +/* 透明度 */ +/* 文章场景相关 */ +page.data-v-561d431d { + background-color: #FFFFFF; +} +.content.data-v-561d431d { + display: flex; + flex-direction: column; + justify-content: center; + background-color: #FFFFFF; +} +.header.data-v-561d431d { + width: 100%; + position: relative; +} +.header image.data-v-561d431d { + width: 100%; +} +.list.data-v-561d431d { + display: flex; + flex-direction: column; + padding-top: 50rpx; + padding-left: 70rpx; + padding-right: 70rpx; +} +.list .list-call.data-v-561d431d { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + height: 100rpx; + color: #333333; + background: #F5F7FB; + border-radius: 16rpx; + border: 2rpx solid #F5F7FB; + margin-top: 30rpx; + padding: 0 30rpx; +} +.list .list-call .img.data-v-561d431d { + width: 30rpx; + height: 36rpx; +} +.list .list-call .sl-input.data-v-561d431d { + flex: 1; + text-align: left; + font-size: 32rpx; + margin-left: 16rpx; +} +.list .list-call .eye-icon.data-v-561d431d { + font-size: 36rpx; + color: #999; +} +.list .list-call .eye-icon.data-v-561d431d::before { + content: "\e69c"; + /* 闭眼图标的unicode */ +} +.list .list-call .eye-icon.eye-active.data-v-561d431d { + color: #3D83F6; +} +.list .list-call .eye-icon.eye-active.data-v-561d431d::before { + content: "\e69d"; + /* 睁眼图标的unicode */ +} +.list .list-call .yzm.data-v-561d431d { + width: 200rpx; + height: 60rpx; + text-align: center; + font-size: 30rpx; + color: #3D83F6; +} +.list .list-call .yzm.yzms.data-v-561d431d { + color: #999999; +} +.code-icon.data-v-561d431d::before { + content: "\e682"; + /* 验证码图标的unicode */ + color: #999; + font-size: 36rpx; +} +.invite-icon.data-v-561d431d::before { + content: "\e683"; + /* 邀请码图标的unicode */ + color: #999; + font-size: 36rpx; +} +.button-login.data-v-561d431d { + color: #FFFFFF; + font-size: 34rpx; + width: 100%; + height: 100rpx; + background: linear-gradient(90deg, #3E95F1 0%, #4269F5 100%); + border-radius: 50rpx; + line-height: 100rpx; + text-align: center; + margin-left: auto; + margin-right: auto; + margin-top: 130rpx; +} +.button-hover.data-v-561d431d { + opacity: 0.8; +} +.data-v-561d431d .up-input__input { + color: #3D83F6; +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/success.js b/unpackage/dist/dev/mp-weixin/pages/login/success.js new file mode 100644 index 0000000..4d412b9 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/success.js @@ -0,0 +1,18 @@ +"use strict"; +const common_vendor = require("../../common/vendor.js"); +const common_assets = require("../../common/assets.js"); +const success = true; +const _sfc_main = { + __name: "success", + setup(__props) { + return (_ctx, _cache) => { + return common_vendor.e({ + a: success + }, { + b: common_assets._imports_0$5 + }); + }; + } +}; +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["__scopeId", "data-v-b27d95ff"]]); +wx.createPage(MiniProgramPage); diff --git a/unpackage/dist/dev/mp-weixin/pages/login/success.json b/unpackage/dist/dev/mp-weixin/pages/login/success.json new file mode 100644 index 0000000..d53efc4 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/success.json @@ -0,0 +1,4 @@ +{ + "navigationBarTitleText": "注册成功", + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/success.wxml b/unpackage/dist/dev/mp-weixin/pages/login/success.wxml new file mode 100644 index 0000000..c771a7b --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/success.wxml @@ -0,0 +1 @@ +注册成功等待管理员确认后,才能进行账号登录注册异常员工已注册,如账号异常请联系管理员 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/login/success.wxss b/unpackage/dist/dev/mp-weixin/pages/login/success.wxss new file mode 100644 index 0000000..479ecd0 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/login/success.wxss @@ -0,0 +1,6 @@ + +.but.data-v-b27d95ff { + width: 248rpx; + height: 88rpx; + margin-top: 100rpx; +} diff --git a/unpackage/dist/dev/mp-weixin/pages/map/map.js b/unpackage/dist/dev/mp-weixin/pages/map/map.js new file mode 100644 index 0000000..b84073a --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/map/map.js @@ -0,0 +1,8 @@ +"use strict"; +const common_vendor = require("../../common/vendor.js"); +const _sfc_main = {}; +function _sfc_render(_ctx, _cache) { + return {}; +} +const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-e06b858f"]]); +wx.createPage(MiniProgramPage); diff --git a/unpackage/dist/dev/mp-weixin/pages/map/map.json b/unpackage/dist/dev/mp-weixin/pages/map/map.json new file mode 100644 index 0000000..acf108d --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/map/map.json @@ -0,0 +1,4 @@ +{ + "navigationBarTitleText": "一张图", + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/map/map.wxml b/unpackage/dist/dev/mp-weixin/pages/map/map.wxml new file mode 100644 index 0000000..b3d8e42 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/map/map.wxml @@ -0,0 +1 @@ +一张图功能开发中... \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/map/map.wxss b/unpackage/dist/dev/mp-weixin/pages/map/map.wxss new file mode 100644 index 0000000..80c106b --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/pages/map/map.wxss @@ -0,0 +1,30 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ +/* uni.scss */ +/* 颜色变量 */ +/* 行为相关颜色 */ +/* 文字基本颜色 */ +/* 背景颜色 */ +/* 边框颜色 */ +/* 尺寸变量 */ +/* 文字尺寸 */ +/* 图片尺寸 */ +/* Border Radius */ +/* 水平间距 */ +/* 垂直间距 */ +/* 透明度 */ +/* 文章场景相关 */ +.content.data-v-e06b858f { + min-height: 100vh; + background: #EBF2FC; +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/membermanagemen/membermanagemen.js b/unpackage/dist/dev/mp-weixin/pages/membermanagemen/membermanagemen.js index 58b7d1f..c316e50 100644 --- a/unpackage/dist/dev/mp-weixin/pages/membermanagemen/membermanagemen.js +++ b/unpackage/dist/dev/mp-weixin/pages/membermanagemen/membermanagemen.js @@ -1,9 +1,11 @@ "use strict"; const common_vendor = require("../../common/vendor.js"); +const request_api = require("../../request/api.js"); if (!Array) { const _easycom_up_picker2 = common_vendor.resolveComponent("up-picker"); const _easycom_u_popup2 = common_vendor.resolveComponent("u-popup"); - (_easycom_up_picker2 + _easycom_u_popup2)(); + const _component_TabBar = common_vendor.resolveComponent("TabBar"); + (_easycom_up_picker2 + _easycom_u_popup2 + _component_TabBar)(); } const _easycom_up_picker = () => "../../uni_modules/uview-plus/components/u-picker/u-picker.js"; const _easycom_u_popup = () => "../../uni_modules/uview-plus/components/u-popup/u-popup.js"; @@ -13,6 +15,10 @@ if (!Math) { const _sfc_main = { __name: "membermanagemen", setup(__props) { + const list = common_vendor.ref([]); + request_api.getMemberList().then((res) => { + list.value = res.data; + }); const showPopup = common_vendor.ref(false); const showDeptPicker = common_vendor.ref(false); const formData = common_vendor.reactive({ @@ -22,34 +28,90 @@ const _sfc_main = { password: "", department: "" }); - const handleSubmit = () => { + const handleSubmit = async () => { if (!formData.username) { - common_vendor.index.showToast({ title: "请输入用户名", icon: "none" }); + common_vendor.index.showToast({ + title: "请输入用户名", + icon: "none" + }); return; } if (!formData.password || formData.password.length < 6 || formData.password.length > 16) { - common_vendor.index.showToast({ title: "请输入6-16位密码", icon: "none" }); + common_vendor.index.showToast({ + title: "请输入6-16位密码", + icon: "none" + }); return; } - if (!formData.department) { - common_vendor.index.showToast({ title: "请选择主部门", icon: "none" }); - return; + const params = { + userName: formData.username, + nickName: formData.nickname || "", + phonenumber: formData.phone || "", + password: formData.password, + roleType: "common" + }; + try { + const res = await request_api.addMember(params); + if (res.code === 0) { + common_vendor.index.showToast({ + title: "添加成功", + icon: "success" + }); + showPopup.value = false; + formData.username = ""; + formData.nickname = ""; + formData.phone = ""; + formData.password = ""; + formData.department = ""; + } else { + common_vendor.index.showToast({ + title: res.msg || "添加失败", + icon: "none" + }); + } + } catch (error) { + console.error("添加成员失败:", error); + common_vendor.index.showToast({ + title: "请求失败", + icon: "none" + }); } - console.log("提交数据:", formData); - common_vendor.index.showToast({ title: "添加成功", icon: "success" }); - showPopup.value = false; }; - const Lock = () => { + const Lock = (item) => { + const isLocked = item.lockStatus === 1; + const actionText = isLocked ? "解锁" : "锁定"; + const newLockStatus = isLocked ? 0 : 1; common_vendor.index.showModal({ title: "提示", - content: "确定要锁定该成员吗?", + content: `确定要${actionText}该成员吗?`, confirmColor: "#2667E9", - success: (res) => { + success: async (res) => { if (res.confirm) { - console.log("用户点击确定"); - common_vendor.index.showToast({ title: "锁定成功", icon: "success" }); - } else if (res.cancel) { - console.log("用户点击取消"); + try { + const result = await request_api.lockOrUnlockMember({ + userId: item.userId, + lockStatus: newLockStatus + }); + if (result.code === 0) { + common_vendor.index.showToast({ + title: `${actionText}成功`, + icon: "success" + }); + item.lockStatus = newLockStatus; + item.statusName = newLockStatus === 1 ? "已锁定" : "正常"; + } else { + common_vendor.index.showToast({ + title: result.msg || `${actionText}失败`, + icon: "none" + }); + } + } catch (error) { + console.error(`${actionText}成员失败:`, error); + common_vendor.index.showToast({ + title: "请求失败", + icon: "none" + }); + } } } }); @@ -58,31 +120,58 @@ const _sfc_main = { const columns = common_vendor.reactive([ ["湘西自治州和谐网络科技有限公司", "湘西自治州和谐云科技有限公司"] ]); + const deptColumns = common_vendor.reactive([ + ["湘西自治州和谐网络科技有限公司", "湘西自治州和谐云科技有限公司", "研发部门", "深圳总公司", "若依科技"] + ]); + const onDeptConfirm = (e) => { + console.log("选择的部门:", e); + if (e.value && e.value.length > 0) { + formData.department = e.value[0]; + } + showDeptPicker.value = false; + }; return (_ctx, _cache) => { return { - a: common_vendor.o(($event) => show.value = true), + a: common_vendor.f(list.value, (item, index, i0) => { + return { + a: common_vendor.o(($event) => show.value = true, item.id), + b: "06d9f81b-0-" + i0, + c: common_vendor.t(item.nickName), + d: common_vendor.t(item.statusName), + e: common_vendor.t(item.phonenumber), + f: common_vendor.t(item.lockStatus === 1 ? "解锁" : "锁定"), + g: common_vendor.o(($event) => Lock(item), item.id), + h: item.id + }; + }), b: common_vendor.p({ show: show.value, columns }), - c: common_vendor.o(($event) => Lock()), - d: common_vendor.o(($event) => showPopup.value = true), - e: common_vendor.o(($event) => showPopup.value = false), - f: formData.username, - g: common_vendor.o(($event) => formData.username = $event.detail.value), - h: formData.nickname, - i: common_vendor.o(($event) => formData.nickname = $event.detail.value), - j: formData.phone, - k: common_vendor.o(($event) => formData.phone = $event.detail.value), - l: formData.password, - m: common_vendor.o(($event) => formData.password = $event.detail.value), - n: common_vendor.t(formData.department || "请选择主部门"), - o: common_vendor.n(formData.department ? "" : "text-gray"), - p: common_vendor.o(($event) => showDeptPicker.value = true), - q: common_vendor.o(($event) => showPopup.value = false), - r: common_vendor.o(handleSubmit), - s: common_vendor.o(($event) => showPopup.value = false), - t: common_vendor.p({ + c: common_vendor.o(($event) => showPopup.value = true), + d: common_vendor.o(($event) => showPopup.value = false), + e: formData.username, + f: common_vendor.o(($event) => formData.username = $event.detail.value), + g: formData.nickname, + h: common_vendor.o(($event) => formData.nickname = $event.detail.value), + i: formData.phone, + j: common_vendor.o(($event) => formData.phone = $event.detail.value), + k: formData.password, + l: common_vendor.o(($event) => formData.password = $event.detail.value), + m: common_vendor.t(formData.department || "请选择主部门"), + n: common_vendor.n(formData.department ? "" : "text-gray"), + o: common_vendor.o(($event) => showDeptPicker.value = true), + p: common_vendor.o(onDeptConfirm), + q: common_vendor.o(($event) => showDeptPicker.value = false), + r: common_vendor.o(($event) => showDeptPicker.value = false), + s: common_vendor.p({ + show: showDeptPicker.value, + columns: deptColumns + }), + t: common_vendor.o(($event) => showPopup.value = false), + v: common_vendor.o(handleSubmit), + w: common_vendor.o(($event) => showPopup.value = false), + x: common_vendor.p({ show: showPopup.value, mode: "center", round: "20" diff --git a/unpackage/dist/dev/mp-weixin/pages/membermanagemen/membermanagemen.wxml b/unpackage/dist/dev/mp-weixin/pages/membermanagemen/membermanagemen.wxml index 9de6555..29cf532 100644 --- a/unpackage/dist/dev/mp-weixin/pages/membermanagemen/membermanagemen.wxml +++ b/unpackage/dist/dev/mp-weixin/pages/membermanagemen/membermanagemen.wxml @@ -1 +1 @@ -湘西自治州和谐网络科技有限公司负责人罗燚正常手机设置:未设置登录IP:45.135.228.172添加成员×用户名*昵称手机号密码*主部门*{{n}} \ No newline at end of file +湘西自治州和谐网络科技有限公司负责人{{item.c}}{{item.d}}手机设置:{{item.e}}登录IP:45.135.228.172添加成员×用户名*昵称手机号密码*主部门*{{m}} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/pages/personalcenter/helpcenter.js b/unpackage/dist/dev/mp-weixin/pages/personalcenter/helpcenter.js index 924b162..092f395 100644 --- a/unpackage/dist/dev/mp-weixin/pages/personalcenter/helpcenter.js +++ b/unpackage/dist/dev/mp-weixin/pages/personalcenter/helpcenter.js @@ -5,7 +5,7 @@ const _sfc_main = {}; function _sfc_render(_ctx, _cache) { return { a: common_assets._imports_0$2, - b: common_assets._imports_1$2 + b: common_assets._imports_1$1 }; } const MiniProgramPage = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]); diff --git a/unpackage/dist/dev/mp-weixin/pages/personalcenter/my.js b/unpackage/dist/dev/mp-weixin/pages/personalcenter/my.js index 56eee9b..cf8175c 100644 --- a/unpackage/dist/dev/mp-weixin/pages/personalcenter/my.js +++ b/unpackage/dist/dev/mp-weixin/pages/personalcenter/my.js @@ -24,19 +24,37 @@ const _sfc_main = { url: "/pages/personalcenter/account" }); }; + const handleLogout = () => { + common_vendor.index.showModal({ + title: "提示", + content: "确定要退出登录吗?", + success: function(res) { + if (res.confirm) { + console.log("用户点击确定"); + common_vendor.index.clearStorageSync(); + common_vendor.index.reLaunch({ + url: "/pages/login/login" + }); + } else if (res.cancel) { + console.log("用户点击取消"); + } + } + }); + }; return (_ctx, _cache) => { return { a: common_assets._imports_0$1, b: common_vendor.o(($event) => Helpcenter()), - c: common_assets._imports_1$1, - d: common_assets._imports_2$1, + c: common_assets._imports_1, + d: common_assets._imports_2, e: common_vendor.o(($event) => Account()), - f: common_assets._imports_3$1, + f: common_assets._imports_3, g: common_vendor.o(($event) => notification()), - h: common_assets._imports_4$1, + h: common_assets._imports_4, i: common_assets._imports_5, j: common_vendor.o(($event) => Settings()), - k: common_assets._imports_0$1 + k: common_assets._imports_0$1, + l: common_vendor.o(($event) => handleLogout()) }; }; } diff --git a/unpackage/dist/dev/mp-weixin/pages/personalcenter/my.wxml b/unpackage/dist/dev/mp-weixin/pages/personalcenter/my.wxml index 2e169c3..d9844fc 100644 --- a/unpackage/dist/dev/mp-weixin/pages/personalcenter/my.wxml +++ b/unpackage/dist/dev/mp-weixin/pages/personalcenter/my.wxml @@ -1 +1 @@ -我的测试17374339800帮助中心智能客服账号安全新消息通知清除缓存通用设置关于 \ No newline at end of file +我的测试17374339800帮助中心智能客服账号安全新消息通知清除缓存通用设置关于 \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/project.config.json b/unpackage/dist/dev/mp-weixin/project.config.json index d39d899..9988bdf 100644 --- a/unpackage/dist/dev/mp-weixin/project.config.json +++ b/unpackage/dist/dev/mp-weixin/project.config.json @@ -22,24 +22,7 @@ "libVersion": "3.12.0", "appid": "touristappid", "projectname": "sanchayibaoguang", - "condition": { - "search": { - "current": -1, - "list": [] - }, - "conversation": { - "current": -1, - "list": [] - }, - "game": { - "current": -1, - "list": [] - }, - "miniprogram": { - "current": -1, - "list": [] - } - }, + "condition": {}, "editorSetting": { "tabIndent": "insertSpaces", "tabSize": 2 diff --git a/unpackage/dist/dev/mp-weixin/project.private.config.json b/unpackage/dist/dev/mp-weixin/project.private.config.json deleted file mode 100644 index 81682a9..0000000 --- a/unpackage/dist/dev/mp-weixin/project.private.config.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", - "condition": { - "miniprogram": { - "list": [ - { - "name": "pages/index/index", - "pathName": "pages/index/index", - "query": "", - "launchMode": "default", - "scene": null - } - ] - } - } -} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/request/api.js b/unpackage/dist/dev/mp-weixin/request/api.js index 4134280..2d2fbd5 100644 --- a/unpackage/dist/dev/mp-weixin/request/api.js +++ b/unpackage/dist/dev/mp-weixin/request/api.js @@ -33,6 +33,13 @@ function addHiddenDanger(params) { data: params }); } +function assignHiddenDanger(params) { + return request_request.requestAPI({ + url: "/frontend/hazard/assign", + method: "POST", + data: params + }); +} function getMyHiddenDangerList(params) { return request_request.requestAPI({ url: "/frontend/hazard/my/list", @@ -47,6 +54,13 @@ function getHiddenDangerDetail(params) { data: params }); } +function getHiddenDangerList(params) { + return request_request.requestAPI({ + url: "/frontend/hazard/my/list", + method: "GET", + data: params + }); +} function submitRectification(params) { return request_request.requestAPI({ url: "/frontend/hazard/rectify", @@ -60,12 +74,80 @@ function getHiddenDangerLabelList() { method: "GET" }); } +function getDepartmentPersonUsers(params) { + return request_request.requestAPI({ + url: "/frontend/hazard/dept/users", + method: "GET", + data: params + }); +} +function addMember(params) { + return request_request.requestAPI({ + url: "/frontend/member/add", + method: "POST", + data: params + }); +} +function getMemberList(params) { + return request_request.requestAPI({ + url: "/frontend/member/list", + method: "GET", + data: params + }); +} +function lockOrUnlockMember(params) { + return request_request.requestAPI({ + url: "/frontend/member/lock", + method: "POST", + data: params + }); +} +function applyDelete(params) { + return request_request.requestAPI({ + url: "/frontend/hazard/writeoff/apply", + method: "POST", + data: params + }); +} +function getMyWriteOffList(params) { + return request_request.requestAPI({ + url: "/frontend/hazard/writeoff/my/list", + method: "GET", + data: params + }); +} +function acceptanceRectification(params) { + return request_request.requestAPI({ + url: "/frontend/hazard/verify", + method: "POST", + data: params + }); +} +function login(params) { + return request_request.requestAPI({ + url: "/frontend/auth/login", + method: "POST", + data: params, + noAuth: true + // 登录接口不需要 Authorization + }); +} +exports.acceptanceRectification = acceptanceRectification; exports.addHiddenDanger = addHiddenDanger; +exports.addMember = addMember; +exports.applyDelete = applyDelete; +exports.assignHiddenDanger = assignHiddenDanger; exports.enterCheckPlan = enterCheckPlan; exports.getCheckPlanList = getCheckPlanList; exports.getCheckTaskDetail = getCheckTaskDetail; +exports.getDepartmentPersonUsers = getDepartmentPersonUsers; exports.getHiddenDangerDetail = getHiddenDangerDetail; exports.getHiddenDangerLabelList = getHiddenDangerLabelList; +exports.getHiddenDangerList = getHiddenDangerList; +exports.getMemberList = getMemberList; exports.getMyHiddenDangerList = getMyHiddenDangerList; +exports.getMyWriteOffList = getMyWriteOffList; +exports.lockOrUnlockMember = lockOrUnlockMember; +exports.login = login; exports.submitCheckResult = submitCheckResult; exports.submitRectification = submitRectification; diff --git a/unpackage/dist/dev/mp-weixin/request/request.js b/unpackage/dist/dev/mp-weixin/request/request.js index 48c7580..6a2c6b9 100644 --- a/unpackage/dist/dev/mp-weixin/request/request.js +++ b/unpackage/dist/dev/mp-weixin/request/request.js @@ -4,13 +4,12 @@ const request_luchRequest_core_Request = require("./luch-request/core/Request.js const baseUrl = "http://192.168.1.168:5004"; new request_luchRequest_core_Request.Request({ baseURL: baseUrl, - timeout: 1e4, - header: { - // 'content-type': 'application/json', - "Authorization": "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiNzQ5NGU2MzAtNTRlYS00ZTM5LWIxYjUtNzc2MzY5NTRhYmJmIn0.7l5CMwFitlpXniZ6PTR5DqN8ASFTFZ1DCUZKjOtr5CpuXWiPHeSW19nY8XKfGdxMvB7j-OnXuSznLRjx-N7K9g" - } + timeout: 1e4 }); -const AUTH_TOKEN = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiNTQyMjJlODYtZDUyNS00ZTA0LWI3Y2QtMGU1ZWYzYmIwM2EwIn0.x8zPXafDGVjIDIcAdWsWT3F2fU20QHVLFR15b251LfwpfRt_UaDo1-bvHEyi8hxqVkiStOqi09TTUTPBgjPYkw"; +const getToken = () => { + const token = common_vendor.index.getStorageSync("token"); + return token ? `Bearer ${token}` : ""; +}; const isEmptyObject = (obj) => { return Object.keys(obj).length === 0; }; @@ -31,21 +30,28 @@ function showToast(title) { }); } const requestAPI = (config) => { - let { url, method = "GET", data = {} } = typeof config === "object" && config.url ? config : { url: config, method: arguments[1] || "GET", data: arguments[2] || {} }; + let { url, method = "GET", data = {}, noAuth = false } = typeof config === "object" && config.url ? config : { url: config, method: arguments[1] || "GET", data: arguments[2] || {} }; if (method == "GET" && !isEmptyObject(data)) { url += "?" + objectToQueryString(data); } common_vendor.index.showLoading({ title: "加载中..." }); + const header = { + "Content-Type": "application/json" + }; + if (!noAuth) { + const token = getToken(); + if (token) { + header["Authorization"] = token; + } + } return new Promise((resolve, reject) => { common_vendor.index.request({ url: baseUrl + url, method, data, - header: { - "Authorization": AUTH_TOKEN - }, + header, success: (res) => { common_vendor.index.hideLoading(); if (res.statusCode !== 200) { @@ -57,8 +63,14 @@ const requestAPI = (config) => { if (res.data.code === 200 || res.data.code === 0) { resolve(res.data); } else if (res.data.code === 401) { - common_vendor.index.removeStorageSync("_user_token_"); + common_vendor.index.removeStorageSync("token"); + common_vendor.index.removeStorageSync("userInfo"); showToast("登录已过期,请重新登录"); + setTimeout(() => { + common_vendor.index.reLaunch({ + url: "/pages/login/login" + }); + }, 1500); reject("401"); } else { showToast(res.data.msg || "请求失败"); @@ -83,6 +95,6 @@ const requestAPI = (config) => { }); }); }; -exports.AUTH_TOKEN = AUTH_TOKEN; exports.baseUrl = baseUrl; +exports.getToken = getToken; exports.requestAPI = requestAPI; diff --git a/unpackage/dist/dev/mp-weixin/static/index/Bell2x.png b/unpackage/dist/dev/mp-weixin/static/index/Bell2x.png new file mode 100644 index 0000000..a2db94f Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/static/index/Bell2x.png differ diff --git a/unpackage/dist/dev/mp-weixin/static/index/Bell_BG2x.png b/unpackage/dist/dev/mp-weixin/static/index/Bell_BG2x.png new file mode 100644 index 0000000..1df81c1 Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/static/index/Bell_BG2x.png differ diff --git a/unpackage/dist/dev/mp-weixin/static/index/cl.png b/unpackage/dist/dev/mp-weixin/static/index/cl.png new file mode 100644 index 0000000..66d6ea1 Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/static/index/cl.png differ diff --git a/unpackage/dist/dev/mp-weixin/static/index/eye.png b/unpackage/dist/dev/mp-weixin/static/index/eye.png new file mode 100644 index 0000000..5d037bf Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/static/index/eye.png differ diff --git a/unpackage/dist/dev/mp-weixin/static/index/index_bg.png b/unpackage/dist/dev/mp-weixin/static/index/index_bg.png new file mode 100644 index 0000000..595bf59 Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/static/index/index_bg.png differ diff --git a/unpackage/dist/dev/mp-weixin/static/index/index_bg2.png b/unpackage/dist/dev/mp-weixin/static/index/index_bg2.png new file mode 100644 index 0000000..3a05710 Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/static/index/index_bg2.png differ diff --git a/unpackage/dist/dev/mp-weixin/static/index/lock.png b/unpackage/dist/dev/mp-weixin/static/index/lock.png new file mode 100644 index 0000000..fe9de5a Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/static/index/lock.png differ diff --git a/unpackage/dist/dev/mp-weixin/static/index/op.png b/unpackage/dist/dev/mp-weixin/static/index/op.png new file mode 100644 index 0000000..5d037bf Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/static/index/op.png differ diff --git a/unpackage/dist/dev/mp-weixin/static/index/phone.png b/unpackage/dist/dev/mp-weixin/static/index/phone.png new file mode 100644 index 0000000..818765c Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/static/index/phone.png differ diff --git a/unpackage/dist/dev/mp-weixin/static/index/photos.png b/unpackage/dist/dev/mp-weixin/static/index/photos.png new file mode 100644 index 0000000..aca5bcd Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/static/index/photos.png differ diff --git a/unpackage/dist/dev/mp-weixin/static/index/蒙版组 260.png b/unpackage/dist/dev/mp-weixin/static/index/蒙版组 260.png new file mode 100644 index 0000000..163cd61 Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/static/index/蒙版组 260.png differ diff --git a/unpackage/dist/dev/mp-weixin/static/index/蒙版组 261.png b/unpackage/dist/dev/mp-weixin/static/index/蒙版组 261.png new file mode 100644 index 0000000..f870604 Binary files /dev/null and b/unpackage/dist/dev/mp-weixin/static/index/蒙版组 261.png differ diff --git a/unpackage/dist/dev/mp-weixin/static/tabBar/组 20264.png b/unpackage/dist/dev/mp-weixin/static/tabBar/home.png similarity index 100% rename from unpackage/dist/dev/mp-weixin/static/tabBar/组 20264.png rename to unpackage/dist/dev/mp-weixin/static/tabBar/home.png diff --git a/unpackage/dist/dev/mp-weixin/static/tabBar/组 20261.png b/unpackage/dist/dev/mp-weixin/static/tabBar/map.png similarity index 100% rename from unpackage/dist/dev/mp-weixin/static/tabBar/组 20261.png rename to unpackage/dist/dev/mp-weixin/static/tabBar/map.png diff --git a/unpackage/dist/dev/mp-weixin/static/tabBar/组 20263.png b/unpackage/dist/dev/mp-weixin/static/tabBar/my.png similarity index 100% rename from unpackage/dist/dev/mp-weixin/static/tabBar/组 20263.png rename to unpackage/dist/dev/mp-weixin/static/tabBar/my.png diff --git a/unpackage/dist/dev/mp-weixin/static/tabBar/组 20262.png b/unpackage/dist/dev/mp-weixin/static/tabBar/warning.png similarity index 100% rename from unpackage/dist/dev/mp-weixin/static/tabBar/组 20262.png rename to unpackage/dist/dev/mp-weixin/static/tabBar/warning.png diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/props.js b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/props.js new file mode 100644 index 0000000..66aac88 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/props.js @@ -0,0 +1,57 @@ +"use strict"; +const uni_modules_uviewPlus_libs_vue = require("../../libs/vue.js"); +const uni_modules_uviewPlus_libs_config_props = require("../../libs/config/props.js"); +const props = uni_modules_uviewPlus_libs_vue.defineMixin({ + props: { + // input的label提示语 + label: { + type: String, + default: () => uni_modules_uviewPlus_libs_config_props.props.formItem.label + }, + // 绑定的值 + prop: { + type: String, + default: () => uni_modules_uviewPlus_libs_config_props.props.formItem.prop + }, + // 绑定的规则 + rules: { + type: Array, + default: () => uni_modules_uviewPlus_libs_config_props.props.formItem.rules + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: [String, Boolean], + default: () => uni_modules_uviewPlus_libs_config_props.props.formItem.borderBottom + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: () => uni_modules_uviewPlus_libs_config_props.props.formItem.labelPosition + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: () => uni_modules_uviewPlus_libs_config_props.props.formItem.labelWidth + }, + // 右侧图标 + rightIcon: { + type: String, + default: () => uni_modules_uviewPlus_libs_config_props.props.formItem.rightIcon + }, + // 左侧图标 + leftIcon: { + type: String, + default: () => uni_modules_uviewPlus_libs_config_props.props.formItem.leftIcon + }, + // 是否显示左边的必填星号,只作显示用,具体校验必填的逻辑,请在rules中配置 + required: { + type: Boolean, + default: () => uni_modules_uviewPlus_libs_config_props.props.formItem.required + }, + leftIconStyle: { + type: [String, Object], + default: () => uni_modules_uviewPlus_libs_config_props.props.formItem.leftIconStyle + } + } +}); +exports.props = props; diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/u-form-item.js b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/u-form-item.js new file mode 100644 index 0000000..551a5a8 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/u-form-item.js @@ -0,0 +1,142 @@ +"use strict"; +const uni_modules_uviewPlus_components_uFormItem_props = require("./props.js"); +const uni_modules_uviewPlus_libs_mixin_mpMixin = require("../../libs/mixin/mpMixin.js"); +const uni_modules_uviewPlus_libs_mixin_mixin = require("../../libs/mixin/mixin.js"); +const uni_modules_uviewPlus_libs_config_props = require("../../libs/config/props.js"); +const uni_modules_uviewPlus_libs_config_color = require("../../libs/config/color.js"); +const uni_modules_uviewPlus_libs_function_index = require("../../libs/function/index.js"); +const common_vendor = require("../../../../common/vendor.js"); +const _sfc_main = { + name: "u-form-item", + mixins: [uni_modules_uviewPlus_libs_mixin_mpMixin.mpMixin, uni_modules_uviewPlus_libs_mixin_mixin.mixin, uni_modules_uviewPlus_components_uFormItem_props.props], + data() { + return { + // 错误提示语 + message: "", + parentData: { + // 提示文本的位置 + labelPosition: "left", + // 提示文本对齐方式 + labelAlign: "left", + // 提示文本的样式 + labelStyle: {}, + // 提示文本的宽度 + labelWidth: 45, + // 错误提示方式 + errorType: "message" + }, + color: uni_modules_uviewPlus_libs_config_color.color, + itemRules: [] + }; + }, + // 组件创建完成时,将当前实例保存到u-form中 + computed: { + propsLine() { + return uni_modules_uviewPlus_libs_config_props.props.line; + } + }, + mounted() { + this.init(); + }, + emits: ["click"], + watch: { + // 监听规则的变化 + rules: { + immediate: true, + handler(n) { + this.setRules(n); + } + } + }, + methods: { + addStyle: uni_modules_uviewPlus_libs_function_index.addStyle, + addUnit: uni_modules_uviewPlus_libs_function_index.addUnit, + init() { + this.updateParentData(); + if (!this.parent) { + uni_modules_uviewPlus_libs_function_index.error("u-form-item需要结合u-form组件使用"); + } + }, + // 手动设置校验的规则,如果规则中有函数的话,微信小程序中会过滤掉,所以只能手动调用设置规则 + setRules(rules) { + if (rules.length === 0) { + this.itemRules = []; + return; + } + this.itemRules = rules; + }, + // 获取父组件的参数 + updateParentData() { + this.getParentData("u-form"); + }, + // 移除u-form-item的校验结果 + clearValidate() { + this.message = null; + }, + // 清空当前的组件的校验结果,并重置为初始值 + resetField() { + const value = uni_modules_uviewPlus_libs_function_index.getProperty(this.parent.originalModel, this.prop); + uni_modules_uviewPlus_libs_function_index.setProperty(this.parent.model, this.prop, value); + this.message = null; + }, + // 点击组件 + clickHandler() { + this.$emit("click"); + } + } +}; +if (!Array) { + const _easycom_up_icon2 = common_vendor.resolveComponent("up-icon"); + const _easycom_u_line2 = common_vendor.resolveComponent("u-line"); + (_easycom_up_icon2 + _easycom_u_line2)(); +} +const _easycom_up_icon = () => "../u-icon/u-icon.js"; +const _easycom_u_line = () => "../u-line/u-line.js"; +if (!Math) { + (_easycom_up_icon + _easycom_u_line)(); +} +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return common_vendor.e({ + a: _ctx.required || _ctx.leftIcon || _ctx.label + }, _ctx.required || _ctx.leftIcon || _ctx.label ? common_vendor.e({ + b: _ctx.required + }, _ctx.required ? {} : {}, { + c: _ctx.leftIcon + }, _ctx.leftIcon ? { + d: common_vendor.p({ + name: _ctx.leftIcon, + ["custom-style"]: _ctx.leftIconStyle + }) + } : {}, { + e: common_vendor.t(_ctx.label), + f: common_vendor.s($data.parentData.labelStyle), + g: common_vendor.s({ + justifyContent: $data.parentData.labelAlign === "left" ? "flex-start" : $data.parentData.labelAlign === "center" ? "center" : "flex-end" + }), + h: $options.addUnit(_ctx.labelWidth || $data.parentData.labelWidth), + i: (_ctx.labelPosition || $data.parentData.labelPosition) === "left" ? 0 : "5px" + }) : {}, { + j: _ctx.$slots.right + }, _ctx.$slots.right ? {} : {}, { + k: common_vendor.o((...args) => $options.clickHandler && $options.clickHandler(...args)), + l: common_vendor.s($options.addStyle(_ctx.customStyle)), + m: common_vendor.s({ + flexDirection: (_ctx.labelPosition || $data.parentData.labelPosition) === "left" ? "row" : "column" + }), + n: !!$data.message && $data.parentData.errorType === "message" + }, !!$data.message && $data.parentData.errorType === "message" ? { + o: common_vendor.t($data.message), + p: $options.addUnit((_ctx.labelPosition || $data.parentData.labelPosition) === "top" ? 0 : _ctx.labelWidth || $data.parentData.labelWidth) + } : {}, { + q: _ctx.borderBottom + }, _ctx.borderBottom ? { + r: common_vendor.p({ + color: $data.message && $data.parentData.errorType === "border-bottom" ? $data.color.error : $options.propsLine.color, + customStyle: `margin-top: ${$data.message && $data.parentData.errorType === "message" ? "5px" : 0}` + }) + } : {}, { + s: !!$data.message && $data.parentData.errorType === "message" ? 1 : "" + }); +} +const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-42bac3de"]]); +wx.createComponent(Component); diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/u-form-item.json b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/u-form-item.json new file mode 100644 index 0000000..0d0f007 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/u-form-item.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "up-icon": "../u-icon/u-icon", + "u-line": "../u-line/u-line" + } +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/u-form-item.wxml b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/u-form-item.wxml new file mode 100644 index 0000000..69c0867 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/u-form-item.wxml @@ -0,0 +1 @@ +*{{o}} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/u-form-item.wxss b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/u-form-item.wxss new file mode 100644 index 0000000..8865d14 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form-item/u-form-item.wxss @@ -0,0 +1,94 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ +/* uni.scss */ +/* 颜色变量 */ +/* 行为相关颜色 */ +/* 文字基本颜色 */ +/* 背景颜色 */ +/* 边框颜色 */ +/* 尺寸变量 */ +/* 文字尺寸 */ +/* 图片尺寸 */ +/* Border Radius */ +/* 水平间距 */ +/* 垂直间距 */ +/* 透明度 */ +/* 文章场景相关 */ +.u-form-item.data-v-42bac3de { + display: flex; + flex-direction: column; + font-size: 14px; + color: #303133; +} +.u-form-item__body.data-v-42bac3de { + display: flex; + flex-direction: row; + padding: 10px 0; +} +.u-form-item__body__left.data-v-42bac3de { + display: flex; + flex-direction: row; + align-items: center; +} +.u-form-item__body__left__content.data-v-42bac3de { + position: relative; + display: flex; + flex-direction: row; + align-items: center; + padding-right: 10rpx; + flex: 1; +} +.u-form-item__body__left__content__icon.data-v-42bac3de { + margin-right: 8rpx; +} +.u-form-item__body__left__content__required.data-v-42bac3de { + position: absolute; + left: -9px; + color: #f56c6c; + line-height: 20px; + font-size: 20px; + top: 3px; +} +.u-form-item__body__left__content__label.data-v-42bac3de { + display: flex; + flex-direction: row; + align-items: center; + flex: 1; + color: #303133; + font-size: 15px; +} +.u-form-item__body__right.data-v-42bac3de { + flex: 1; +} +.u-form-item__body__right__content.data-v-42bac3de { + display: flex; + flex-direction: row; + align-items: center; + flex: 1; +} +.u-form-item__body__right__content__slot.data-v-42bac3de { + flex: 1; + display: flex; + flex-direction: row; + align-items: center; +} +.u-form-item__body__right__content__icon.data-v-42bac3de { + margin-left: 10rpx; + color: #c0c4cc; + font-size: 30rpx; +} +.u-form-item__body__right__message.data-v-42bac3de { + font-size: 12px; + line-height: 12px; + color: #f56c6c; +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form/props.js b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form/props.js new file mode 100644 index 0000000..223d64b --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form/props.js @@ -0,0 +1,49 @@ +"use strict"; +const uni_modules_uviewPlus_libs_vue = require("../../libs/vue.js"); +const uni_modules_uviewPlus_libs_config_props = require("../../libs/config/props.js"); +const props = uni_modules_uviewPlus_libs_vue.defineMixin({ + props: { + // 当前form的需要验证字段的集合 + model: { + type: Object, + default: () => uni_modules_uviewPlus_libs_config_props.props.form.model + }, + // 验证规则 + rules: { + type: [Object, Function, Array], + default: () => uni_modules_uviewPlus_libs_config_props.props.form.rules + }, + // 有错误时的提示方式,message-提示信息,toast-进行toast提示 + // border-bottom-下边框呈现红色,none-无提示 + errorType: { + type: String, + default: () => uni_modules_uviewPlus_libs_config_props.props.form.errorType + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: Boolean, + default: () => uni_modules_uviewPlus_libs_config_props.props.form.borderBottom + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: () => uni_modules_uviewPlus_libs_config_props.props.form.labelPosition + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: () => uni_modules_uviewPlus_libs_config_props.props.form.labelWidth + }, + // lable字体的对齐方式 + labelAlign: { + type: String, + default: () => uni_modules_uviewPlus_libs_config_props.props.form.labelAlign + }, + // lable的样式,对象形式 + labelStyle: { + type: Object, + default: () => uni_modules_uviewPlus_libs_config_props.props.form.labelStyle + } + } +}); +exports.props = props; diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form/u-form.js b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form/u-form.js new file mode 100644 index 0000000..5bbbbe3 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form/u-form.js @@ -0,0 +1,208 @@ +"use strict"; +const uni_modules_uviewPlus_components_uForm_props = require("./props.js"); +const uni_modules_uviewPlus_libs_mixin_mpMixin = require("../../libs/mixin/mpMixin.js"); +const uni_modules_uviewPlus_libs_mixin_mixin = require("../../libs/mixin/mixin.js"); +const uni_modules_uviewPlus_libs_util_asyncValidator = require("../../libs/util/async-validator.js"); +const uni_modules_uviewPlus_libs_function_index = require("../../libs/function/index.js"); +const uni_modules_uviewPlus_libs_function_test = require("../../libs/function/test.js"); +const common_vendor = require("../../../../common/vendor.js"); +uni_modules_uviewPlus_libs_util_asyncValidator.Schema.warning = function() { +}; +const _sfc_main = { + name: "u-form", + mixins: [uni_modules_uviewPlus_libs_mixin_mpMixin.mpMixin, uni_modules_uviewPlus_libs_mixin_mixin.mixin, uni_modules_uviewPlus_components_uForm_props.props], + provide() { + return { + uForm: this + }; + }, + data() { + return { + formRules: {}, + // 规则校验器 + validator: {}, + // 原始的model快照,用于resetFields方法重置表单时使用 + originalModel: null + }; + }, + watch: { + // 监听规则的变化 + rules: { + immediate: true, + handler(n) { + this.setRules(n); + } + }, + // 监听属性的变化,通知子组件u-form-item重新获取信息 + propsChange(n) { + var _a; + if ((_a = this.children) == null ? void 0 : _a.length) { + this.children.map((child) => { + typeof child.updateParentData == "function" && child.updateParentData(); + }); + } + }, + // 监听model的初始值作为重置表单的快照 + model: { + immediate: true, + handler(n) { + if (!this.originalModel) { + this.originalModel = uni_modules_uviewPlus_libs_function_index.deepClone(n); + } + } + } + }, + computed: { + propsChange() { + return [ + this.errorType, + this.borderBottom, + this.labelPosition, + this.labelWidth, + this.labelAlign, + this.labelStyle + ]; + } + }, + created() { + this.children = []; + }, + methods: { + // 手动设置校验的规则,如果规则中有函数的话,微信小程序中会过滤掉,所以只能手动调用设置规则 + setRules(rules) { + if (Object.keys(rules).length === 0) + return; + if (Object.keys(this.model).length === 0) { + uni_modules_uviewPlus_libs_function_index.error("设置rules,model必须设置!如果已经设置,请刷新页面。"); + return; + } + this.formRules = rules; + this.validator = new uni_modules_uviewPlus_libs_util_asyncValidator.Schema(rules); + }, + // 清空所有u-form-item组件的内容,本质上是调用了u-form-item组件中的resetField()方法 + resetFields() { + this.resetModel(); + }, + // 重置model为初始值的快照 + resetModel(obj) { + this.children.map((child) => { + const prop = child == null ? void 0 : child.prop; + const value = uni_modules_uviewPlus_libs_function_index.getProperty(this.originalModel, prop); + uni_modules_uviewPlus_libs_function_index.setProperty(this.model, prop, value); + }); + }, + // 清空校验结果 + clearValidate(props2) { + props2 = [].concat(props2); + this.children.map((child) => { + if (props2[0] === void 0 || props2.includes(child.prop)) { + child.message = null; + } + }); + }, + // 对部分表单字段进行校验 + async validateField(value, callback, event = null, options) { + this.$nextTick(() => { + const errorsRes = []; + value = [].concat(value); + let promises = this.children.map((child) => { + return new Promise((resolve, reject) => { + const childErrors = []; + if (value.includes(child.prop)) { + const propertyVal = uni_modules_uviewPlus_libs_function_index.getProperty( + this.model, + child.prop + ); + const propertyChain = child.prop.split("."); + const propertyName = propertyChain[propertyChain.length - 1]; + let rule = []; + if (child.itemRules && child.itemRules.length > 0) { + rule = child.itemRules; + } else { + rule = this.formRules[child.prop]; + } + if (!rule) { + resolve(); + return; + } + const rules = [].concat(rule); + if (!rules.length) { + resolve(); + } + for (let i = 0; i < rules.length; i++) { + const ruleItem = rules[i]; + const trigger = [].concat(ruleItem == null ? void 0 : ruleItem.trigger); + if (event && !trigger.includes(event)) { + resolve(); + continue; + } + const validator = new uni_modules_uviewPlus_libs_util_asyncValidator.Schema({ + [propertyName]: ruleItem + }); + validator.validate( + { + [propertyName]: propertyVal + }, + (errors, fields) => { + var _a; + if (uni_modules_uviewPlus_libs_function_test.test.array(errors)) { + errors.forEach((element) => { + element.prop = child.prop; + }); + errorsRes.push(...errors); + childErrors.push(...errors); + } + if (!options || (options == null ? void 0 : options.showErrorMsg) == true) { + child.message = ((_a = childErrors[0]) == null ? void 0 : _a.message) ? childErrors[0].message : null; + } + if (i == rules.length - 1) { + resolve(errorsRes); + } + } + ); + } + } else { + resolve({}); + } + }); + }); + Promise.all(promises).then((results) => { + typeof callback === "function" && callback(errorsRes); + }).catch((error2) => { + console.error("An error occurred:", error2); + }); + }); + }, + /** + * 校验全部数据 + * @param {Object} options + * @param {Boolean} options.showErrorMsg -是否显示校验信息, + */ + validate(options) { + if (Object.keys(this.formRules).length === 0) { + uni_modules_uviewPlus_libs_function_index.error("未设置rules,请看文档说明!如果已经设置,请刷新页面。"); + return; + } + return new Promise((resolve, reject) => { + this.$nextTick(() => { + const formItemProps = this.children.map( + (item) => item.prop + ); + this.validateField(formItemProps, (errors) => { + if (errors.length) { + this.errorType === "toast" && uni_modules_uviewPlus_libs_function_index.toast(errors[0].message); + reject(errors); + } else { + resolve(true); + } + }, null, options); + }); + }); + } + } +}; +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return {}; +} +const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render]]); +wx.createComponent(Component); diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form/u-form.json b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form/u-form.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form/u-form.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form/u-form.wxml b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form/u-form.wxml new file mode 100644 index 0000000..25b678a --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form/u-form.wxml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form/u-form.wxss b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-form/u-form.wxss new file mode 100644 index 0000000..e69de29 diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/props.js b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/props.js new file mode 100644 index 0000000..41a1426 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/props.js @@ -0,0 +1,37 @@ +"use strict"; +const uni_modules_uviewPlus_libs_vue = require("../../libs/vue.js"); +const uni_modules_uviewPlus_libs_config_props = require("../../libs/config/props.js"); +const props = uni_modules_uviewPlus_libs_vue.defineMixin({ + props: { + color: { + type: String, + default: () => uni_modules_uviewPlus_libs_config_props.props.line.color + }, + // 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带px单位的值等 + length: { + type: [String, Number], + default: () => uni_modules_uviewPlus_libs_config_props.props.line.length + }, + // 线条方向,col-竖向,row-横向 + direction: { + type: String, + default: () => uni_modules_uviewPlus_libs_config_props.props.line.direction + }, + // 是否显示细边框 + hairline: { + type: Boolean, + default: () => uni_modules_uviewPlus_libs_config_props.props.line.hairline + }, + // 线条与上下左右元素的间距,字符串形式,如"30px"、"20px 30px" + margin: { + type: [String, Number], + default: () => uni_modules_uviewPlus_libs_config_props.props.line.margin + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: () => uni_modules_uviewPlus_libs_config_props.props.line.dashed + } + } +}); +exports.props = props; diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/u-line.js b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/u-line.js new file mode 100644 index 0000000..a155174 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/u-line.js @@ -0,0 +1,38 @@ +"use strict"; +const uni_modules_uviewPlus_components_uLine_props = require("./props.js"); +const uni_modules_uviewPlus_libs_mixin_mpMixin = require("../../libs/mixin/mpMixin.js"); +const uni_modules_uviewPlus_libs_mixin_mixin = require("../../libs/mixin/mixin.js"); +const uni_modules_uviewPlus_libs_function_index = require("../../libs/function/index.js"); +const common_vendor = require("../../../../common/vendor.js"); +const _sfc_main = { + name: "u-line", + mixins: [uni_modules_uviewPlus_libs_mixin_mpMixin.mpMixin, uni_modules_uviewPlus_libs_mixin_mixin.mixin, uni_modules_uviewPlus_components_uLine_props.props], + computed: { + lineStyle() { + const style = {}; + style.margin = this.margin; + if (this.direction === "row") { + style.borderBottomWidth = "1px"; + style.borderBottomStyle = this.dashed ? "dashed" : "solid"; + style.width = uni_modules_uviewPlus_libs_function_index.addUnit(this.length); + if (this.hairline) + style.transform = "scaleY(0.5)"; + } else { + style.borderLeftWidth = "1px"; + style.borderLeftStyle = this.dashed ? "dashed" : "solid"; + style.height = uni_modules_uviewPlus_libs_function_index.addUnit(this.length); + if (this.hairline) + style.transform = "scaleX(0.5)"; + } + style.borderColor = this.color; + return uni_modules_uviewPlus_libs_function_index.deepMerge(style, uni_modules_uviewPlus_libs_function_index.addStyle(this.customStyle)); + } + } +}; +function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { + return { + a: common_vendor.s($options.lineStyle) + }; +} +const Component = /* @__PURE__ */ common_vendor._export_sfc(_sfc_main, [["render", _sfc_render], ["__scopeId", "data-v-72791e59"]]); +wx.createComponent(Component); diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/u-line.json b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/u-line.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/u-line.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/u-line.wxml b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/u-line.wxml new file mode 100644 index 0000000..d149a0f --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/u-line.wxml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/u-line.wxss b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/u-line.wxss new file mode 100644 index 0000000..c919e80 --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/components/u-line/u-line.wxss @@ -0,0 +1,29 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ +/* uni.scss */ +/* 颜色变量 */ +/* 行为相关颜色 */ +/* 文字基本颜色 */ +/* 背景颜色 */ +/* 边框颜色 */ +/* 尺寸变量 */ +/* 文字尺寸 */ +/* 图片尺寸 */ +/* Border Radius */ +/* 水平间距 */ +/* 垂直间距 */ +/* 透明度 */ +/* 文章场景相关 */ +.u-line.data-v-72791e59 { + vertical-align: middle; +} \ No newline at end of file diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/libs/function/index.js b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/libs/function/index.js index ba4a58c..5272504 100644 --- a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/libs/function/index.js +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/libs/function/index.js @@ -585,6 +585,7 @@ exports.deepMerge = deepMerge; exports.error = error; exports.formValidate = formValidate; exports.genLightColor = genLightColor; +exports.getProperty = getProperty; exports.getWindowInfo = getWindowInfo; exports.index = index; exports.os = os; @@ -592,6 +593,7 @@ exports.padZero = padZero; exports.page = page; exports.queryParams = queryParams; exports.range = range; +exports.setProperty = setProperty; exports.shallowMerge = shallowMerge; exports.sleep = sleep; exports.toast = toast; diff --git a/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/libs/util/async-validator.js b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/libs/util/async-validator.js new file mode 100644 index 0000000..350a6fa --- /dev/null +++ b/unpackage/dist/dev/mp-weixin/uni_modules/uview-plus/libs/util/async-validator.js @@ -0,0 +1,893 @@ +"use strict"; +const formatRegExp = /%[sdj%]/g; +let warning = function warning2() { +}; +if (typeof process !== "undefined" && process.env && true && typeof window !== "undefined" && typeof document !== "undefined") { + warning = function warning3(type2, errors) { + if (typeof console !== "undefined" && console.warn) { + if (errors.every((e) => typeof e === "string")) { + console.warn(type2, errors); + } + } + }; +} +function convertFieldsError(errors) { + if (!errors || !errors.length) + return null; + const fields = {}; + errors.forEach((error) => { + const { field } = error; + fields[field] = fields[field] || []; + fields[field].push(error); + }); + return fields; +} +function format() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + let i = 1; + const f = args[0]; + const len = args.length; + if (typeof f === "function") { + return f.apply(null, args.slice(1)); + } + if (typeof f === "string") { + let str = String(f).replace(formatRegExp, (x) => { + if (x === "%%") { + return "%"; + } + if (i >= len) { + return x; + } + switch (x) { + case "%s": + return String(args[i++]); + case "%d": + return Number(args[i++]); + case "%j": + try { + return JSON.stringify(args[i++]); + } catch (_) { + return "[Circular]"; + } + break; + default: + return x; + } + }); + for (let arg = args[i]; i < len; arg = args[++i]) { + str += ` ${arg}`; + } + return str; + } + return f; +} +function isNativeStringType(type2) { + return type2 === "string" || type2 === "url" || type2 === "hex" || type2 === "email" || type2 === "pattern"; +} +function isEmptyValue(value, type2) { + if (value === void 0 || value === null) { + return true; + } + if (type2 === "array" && Array.isArray(value) && !value.length) { + return true; + } + if (isNativeStringType(type2) && typeof value === "string" && !value) { + return true; + } + return false; +} +function asyncParallelArray(arr, func, callback) { + const results = []; + let total = 0; + const arrLength = arr.length; + function count(errors) { + results.push.apply(results, errors); + total++; + if (total === arrLength) { + callback(results); + } + } + arr.forEach((a) => { + func(a, count); + }); +} +function asyncSerialArray(arr, func, callback) { + let index = 0; + const arrLength = arr.length; + function next(errors) { + if (errors && errors.length) { + callback(errors); + return; + } + const original = index; + index += 1; + if (original < arrLength) { + func(arr[original], next); + } else { + callback([]); + } + } + next([]); +} +function flattenObjArr(objArr) { + const ret = []; + Object.keys(objArr).forEach((k) => { + ret.push.apply(ret, objArr[k]); + }); + return ret; +} +function asyncMap(objArr, option, func, callback) { + if (option.first) { + const _pending = new Promise((resolve, reject) => { + const next = function next2(errors) { + callback(errors); + return errors.length ? reject({ + errors, + fields: convertFieldsError(errors) + }) : resolve(); + }; + const flattenArr = flattenObjArr(objArr); + asyncSerialArray(flattenArr, func, next); + }); + _pending.catch((e) => e); + return _pending; + } + let firstFields = option.firstFields || []; + if (firstFields === true) { + firstFields = Object.keys(objArr); + } + const objArrKeys = Object.keys(objArr); + const objArrLength = objArrKeys.length; + let total = 0; + const results = []; + const pending = new Promise((resolve, reject) => { + const next = function next2(errors) { + results.push.apply(results, errors); + total++; + if (total === objArrLength) { + callback(results); + return results.length ? reject({ + errors: results, + fields: convertFieldsError(results) + }) : resolve(); + } + }; + if (!objArrKeys.length) { + callback(results); + resolve(); + } + objArrKeys.forEach((key) => { + const arr = objArr[key]; + if (firstFields.indexOf(key) !== -1) { + asyncSerialArray(arr, func, next); + } else { + asyncParallelArray(arr, func, next); + } + }); + }); + pending.catch((e) => e); + return pending; +} +function complementError(rule) { + return function(oe) { + if (oe && oe.message) { + oe.field = oe.field || rule.fullField; + return oe; + } + return { + message: typeof oe === "function" ? oe() : oe, + field: oe.field || rule.fullField + }; + }; +} +function deepMerge(target, source) { + if (source) { + for (const s in source) { + if (source.hasOwnProperty(s)) { + const value = source[s]; + if (typeof value === "object" && typeof target[s] === "object") { + target[s] = { ...target[s], ...value }; + } else { + target[s] = value; + } + } + } + } + return target; +} +function required(rule, value, source, errors, options, type2) { + if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type2 || rule.type))) { + errors.push(format(options.messages.required, rule.fullField)); + } +} +function whitespace(rule, value, source, errors, options) { + if (/^\s+$/.test(value) || value === "") { + errors.push(format(options.messages.whitespace, rule.fullField)); + } +} +const pattern = { + // http://emailregex.com/ + email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, + url: new RegExp( + "^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$", + "i" + ), + hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i +}; +var types = { + integer: function integer(value) { + return /^(-)?\d+$/.test(value); + }, + float: function float(value) { + return /^(-)?\d+(\.\d+)?$/.test(value); + }, + array: function array(value) { + return Array.isArray(value); + }, + regexp: function regexp(value) { + if (value instanceof RegExp) { + return true; + } + try { + return !!new RegExp(value); + } catch (e) { + return false; + } + }, + date: function date(value) { + return typeof value.getTime === "function" && typeof value.getMonth === "function" && typeof value.getYear === "function"; + }, + number: function number(value) { + if (isNaN(value)) { + return false; + } + return typeof +value === "number"; + }, + object: function object(value) { + return typeof value === "object" && !types.array(value); + }, + method: function method(value) { + return typeof value === "function"; + }, + email: function email(value) { + return typeof value === "string" && !!value.match(pattern.email) && value.length < 255; + }, + url: function url(value) { + return typeof value === "string" && !!value.match(pattern.url); + }, + hex: function hex(value) { + return typeof value === "string" && !!value.match(pattern.hex); + } +}; +function type(rule, value, source, errors, options) { + if (rule.required && value === void 0) { + required(rule, value, source, errors, options); + return; + } + const custom = ["integer", "float", "array", "regexp", "object", "method", "email", "number", "date", "url", "hex"]; + const ruleType = rule.type; + if (custom.indexOf(ruleType) > -1) { + if (!types[ruleType](value)) { + errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)); + } + } else if (ruleType && typeof value !== rule.type) { + errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)); + } +} +function range(rule, value, source, errors, options) { + const len = typeof rule.len === "number"; + const min = typeof rule.min === "number"; + const max = typeof rule.max === "number"; + const spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + let val = value; + let key = null; + const num = typeof value === "number"; + const str = typeof value === "string"; + const arr = Array.isArray(value); + if (num) { + key = "number"; + } else if (str) { + key = "string"; + } else if (arr) { + key = "array"; + } + if (!key) { + return false; + } + if (arr) { + val = value.length; + } + if (str) { + val = value.replace(spRegexp, "_").length; + } + if (len) { + if (val !== rule.len) { + errors.push(format(options.messages[key].len, rule.fullField, rule.len)); + } + } else if (min && !max && val < rule.min) { + errors.push(format(options.messages[key].min, rule.fullField, rule.min)); + } else if (max && !min && val > rule.max) { + errors.push(format(options.messages[key].max, rule.fullField, rule.max)); + } else if (min && max && (val < rule.min || val > rule.max)) { + errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max)); + } +} +const ENUM = "enum"; +function enumerable(rule, value, source, errors, options) { + rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : []; + if (rule[ENUM].indexOf(value) === -1) { + errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(", "))); + } +} +function pattern$1(rule, value, source, errors, options) { + if (rule.pattern) { + if (rule.pattern instanceof RegExp) { + rule.pattern.lastIndex = 0; + if (!rule.pattern.test(value)) { + errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)); + } + } else if (typeof rule.pattern === "string") { + const _pattern = new RegExp(rule.pattern); + if (!_pattern.test(value)) { + errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)); + } + } + } +} +const rules = { + required, + whitespace, + type, + range, + enum: enumerable, + pattern: pattern$1 +}; +function string(rule, value, callback, source, options) { + const errors = []; + const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); + if (validate2) { + if (isEmptyValue(value, "string") && !rule.required) { + return callback(); + } + rules.required(rule, value, source, errors, options, "string"); + if (!isEmptyValue(value, "string")) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + rules.pattern(rule, value, source, errors, options); + if (rule.whitespace === true) { + rules.whitespace(rule, value, source, errors, options); + } + } + } + callback(errors); +} +function method2(rule, value, callback, source, options) { + const errors = []; + const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); + if (validate2) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + rules.required(rule, value, source, errors, options); + if (value !== void 0) { + rules.type(rule, value, source, errors, options); + } + } + callback(errors); +} +function number2(rule, value, callback, source, options) { + const errors = []; + const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); + if (validate2) { + if (value === "") { + value = void 0; + } + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + rules.required(rule, value, source, errors, options); + if (value !== void 0) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + } + } + callback(errors); +} +function _boolean(rule, value, callback, source, options) { + const errors = []; + const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); + if (validate2) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + rules.required(rule, value, source, errors, options); + if (value !== void 0) { + rules.type(rule, value, source, errors, options); + } + } + callback(errors); +} +function regexp2(rule, value, callback, source, options) { + const errors = []; + const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); + if (validate2) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + rules.required(rule, value, source, errors, options); + if (!isEmptyValue(value)) { + rules.type(rule, value, source, errors, options); + } + } + callback(errors); +} +function integer2(rule, value, callback, source, options) { + const errors = []; + const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); + if (validate2) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + rules.required(rule, value, source, errors, options); + if (value !== void 0) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + } + } + callback(errors); +} +function floatFn(rule, value, callback, source, options) { + const errors = []; + const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); + if (validate2) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + rules.required(rule, value, source, errors, options); + if (value !== void 0) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + } + } + callback(errors); +} +function array2(rule, value, callback, source, options) { + const errors = []; + const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); + if (validate2) { + if (isEmptyValue(value, "array") && !rule.required) { + return callback(); + } + rules.required(rule, value, source, errors, options, "array"); + if (!isEmptyValue(value, "array")) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + } + } + callback(errors); +} +function object2(rule, value, callback, source, options) { + const errors = []; + const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); + if (validate2) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + rules.required(rule, value, source, errors, options); + if (value !== void 0) { + rules.type(rule, value, source, errors, options); + } + } + callback(errors); +} +const ENUM$1 = "enum"; +function enumerable$1(rule, value, callback, source, options) { + const errors = []; + const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); + if (validate2) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + rules.required(rule, value, source, errors, options); + if (value !== void 0) { + rules[ENUM$1](rule, value, source, errors, options); + } + } + callback(errors); +} +function pattern$2(rule, value, callback, source, options) { + const errors = []; + const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); + if (validate2) { + if (isEmptyValue(value, "string") && !rule.required) { + return callback(); + } + rules.required(rule, value, source, errors, options); + if (!isEmptyValue(value, "string")) { + rules.pattern(rule, value, source, errors, options); + } + } + callback(errors); +} +function date2(rule, value, callback, source, options) { + const errors = []; + const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); + if (validate2) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + rules.required(rule, value, source, errors, options); + if (!isEmptyValue(value)) { + let dateObject; + if (typeof value === "number") { + dateObject = new Date(value); + } else { + dateObject = value; + } + rules.type(rule, dateObject, source, errors, options); + if (dateObject) { + rules.range(rule, dateObject.getTime(), source, errors, options); + } + } + } + callback(errors); +} +function required$1(rule, value, callback, source, options) { + const errors = []; + const type2 = Array.isArray(value) ? "array" : typeof value; + rules.required(rule, value, source, errors, options, type2); + callback(errors); +} +function type$1(rule, value, callback, source, options) { + const ruleType = rule.type; + const errors = []; + const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); + if (validate2) { + if (isEmptyValue(value, ruleType) && !rule.required) { + return callback(); + } + rules.required(rule, value, source, errors, options, ruleType); + if (!isEmptyValue(value, ruleType)) { + rules.type(rule, value, source, errors, options); + } + } + callback(errors); +} +function any(rule, value, callback, source, options) { + const errors = []; + const validate2 = rule.required || !rule.required && source.hasOwnProperty(rule.field); + if (validate2) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + rules.required(rule, value, source, errors, options); + } + callback(errors); +} +const validators = { + string, + method: method2, + number: number2, + boolean: _boolean, + regexp: regexp2, + integer: integer2, + float: floatFn, + array: array2, + object: object2, + enum: enumerable$1, + pattern: pattern$2, + date: date2, + url: type$1, + hex: type$1, + email: type$1, + required: required$1, + any +}; +function newMessages() { + return { + default: "Validation error on field %s", + required: "%s is required", + enum: "%s must be one of %s", + whitespace: "%s cannot be empty", + date: { + format: "%s date %s is invalid for format %s", + parse: "%s date could not be parsed, %s is invalid ", + invalid: "%s date %s is invalid" + }, + types: { + string: "%s is not a %s", + method: "%s is not a %s (function)", + array: "%s is not an %s", + object: "%s is not an %s", + number: "%s is not a %s", + date: "%s is not a %s", + boolean: "%s is not a %s", + integer: "%s is not an %s", + float: "%s is not a %s", + regexp: "%s is not a valid %s", + email: "%s is not a valid %s", + url: "%s is not a valid %s", + hex: "%s is not a valid %s" + }, + string: { + len: "%s must be exactly %s characters", + min: "%s must be at least %s characters", + max: "%s cannot be longer than %s characters", + range: "%s must be between %s and %s characters" + }, + number: { + len: "%s must equal %s", + min: "%s cannot be less than %s", + max: "%s cannot be greater than %s", + range: "%s must be between %s and %s" + }, + array: { + len: "%s must be exactly %s in length", + min: "%s cannot be less than %s in length", + max: "%s cannot be greater than %s in length", + range: "%s must be between %s and %s in length" + }, + pattern: { + mismatch: "%s value %s does not match pattern %s" + }, + clone: function clone() { + const cloned = JSON.parse(JSON.stringify(this)); + cloned.clone = this.clone; + return cloned; + } + }; +} +const messages = newMessages(); +function Schema(descriptor) { + this.rules = null; + this._messages = messages; + this.define(descriptor); +} +Schema.prototype = { + messages: function messages2(_messages) { + if (_messages) { + this._messages = deepMerge(newMessages(), _messages); + } + return this._messages; + }, + define: function define(rules2) { + if (!rules2) { + throw new Error("Cannot configure a schema with no rules"); + } + if (typeof rules2 !== "object" || Array.isArray(rules2)) { + throw new Error("Rules must be an object"); + } + this.rules = {}; + let z; + let item; + for (z in rules2) { + if (rules2.hasOwnProperty(z)) { + item = rules2[z]; + this.rules[z] = Array.isArray(item) ? item : [item]; + } + } + }, + validate: function validate(source_, o, oc) { + const _this = this; + if (o === void 0) { + o = {}; + } + if (oc === void 0) { + oc = function oc2() { + }; + } + let source = source_; + let options = o; + let callback = oc; + if (typeof options === "function") { + callback = options; + options = {}; + } + if (!this.rules || Object.keys(this.rules).length === 0) { + if (callback) { + callback(); + } + return Promise.resolve(); + } + function complete(results) { + let i; + let errors = []; + let fields = {}; + function add(e) { + if (Array.isArray(e)) { + let _errors; + errors = (_errors = errors).concat.apply(_errors, e); + } else { + errors.push(e); + } + } + for (i = 0; i < results.length; i++) { + add(results[i]); + } + if (!errors.length) { + errors = null; + fields = null; + } else { + fields = convertFieldsError(errors); + } + callback(errors, fields); + } + if (options.messages) { + let messages$1 = this.messages(); + if (messages$1 === messages) { + messages$1 = newMessages(); + } + deepMerge(messages$1, options.messages); + options.messages = messages$1; + } else { + options.messages = this.messages(); + } + let arr; + let value; + const series = {}; + const keys = options.keys || Object.keys(this.rules); + keys.forEach((z) => { + arr = _this.rules[z]; + value = source[z]; + arr.forEach((r) => { + let rule = r; + if (typeof rule.transform === "function") { + if (source === source_) { + source = { ...source }; + } + value = source[z] = rule.transform(value); + } + if (typeof rule === "function") { + rule = { + validator: rule + }; + } else { + rule = { ...rule }; + } + rule.validator = _this.getValidationMethod(rule); + rule.field = z; + rule.fullField = rule.fullField || z; + rule.type = _this.getType(rule); + if (!rule.validator) { + return; + } + series[z] = series[z] || []; + series[z].push({ + rule, + value, + source, + field: z + }); + }); + }); + const errorFields = {}; + return asyncMap(series, options, (data, doIt) => { + const { rule } = data; + let deep = (rule.type === "object" || rule.type === "array") && (typeof rule.fields === "object" || typeof rule.defaultField === "object"); + deep = deep && (rule.required || !rule.required && data.value); + rule.field = data.field; + function addFullfield(key, schema) { + return { ...schema, fullField: `${rule.fullField}.${key}` }; + } + function cb(e) { + if (e === void 0) { + e = []; + } + let errors = e; + if (!Array.isArray(errors)) { + errors = [errors]; + } + if (!options.suppressWarning && errors.length) { + Schema.warning("async-validator:", errors); + } + if (errors.length && rule.message) { + errors = [].concat(rule.message); + } + errors = errors.map(complementError(rule)); + if (options.first && errors.length) { + errorFields[rule.field] = 1; + return doIt(errors); + } + if (!deep) { + doIt(errors); + } else { + if (rule.required && !data.value) { + if (rule.message) { + errors = [].concat(rule.message).map(complementError(rule)); + } else if (options.error) { + errors = [options.error(rule, format(options.messages.required, rule.field))]; + } else { + errors = []; + } + return doIt(errors); + } + let fieldsSchema = {}; + if (rule.defaultField) { + for (const k in data.value) { + if (data.value.hasOwnProperty(k)) { + fieldsSchema[k] = rule.defaultField; + } + } + } + fieldsSchema = { ...fieldsSchema, ...data.rule.fields }; + for (const f in fieldsSchema) { + if (fieldsSchema.hasOwnProperty(f)) { + const fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]]; + fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f)); + } + } + const schema = new Schema(fieldsSchema); + schema.messages(options.messages); + if (data.rule.options) { + data.rule.options.messages = options.messages; + data.rule.options.error = options.error; + } + schema.validate(data.value, data.rule.options || options, (errs) => { + const finalErrors = []; + if (errors && errors.length) { + finalErrors.push.apply(finalErrors, errors); + } + if (errs && errs.length) { + finalErrors.push.apply(finalErrors, errs); + } + doIt(finalErrors.length ? finalErrors : null); + }); + } + } + let res; + if (rule.asyncValidator) { + res = rule.asyncValidator(rule, data.value, cb, data.source, options); + } else if (rule.validator) { + res = rule.validator(rule, data.value, cb, data.source, options); + if (res === true) { + cb(); + } else if (res === false) { + cb(rule.message || `${rule.field} fails`); + } else if (res instanceof Array) { + cb(res); + } else if (res instanceof Error) { + cb(res.message); + } + } + if (res && res.then) { + res.then(() => cb(), (e) => cb(e)); + } + }, (results) => { + complete(results); + }); + }, + getType: function getType(rule) { + if (rule.type === void 0 && rule.pattern instanceof RegExp) { + rule.type = "pattern"; + } + if (typeof rule.validator !== "function" && rule.type && !validators.hasOwnProperty(rule.type)) { + throw new Error(format("Unknown rule type %s", rule.type)); + } + return rule.type || "string"; + }, + getValidationMethod: function getValidationMethod(rule) { + if (typeof rule.validator === "function") { + return rule.validator; + } + const keys = Object.keys(rule); + const messageIndex = keys.indexOf("message"); + if (messageIndex !== -1) { + keys.splice(messageIndex, 1); + } + if (keys.length === 1 && keys[0] === "required") { + return validators.required; + } + return validators[this.getType(rule)] || false; + } +}; +Schema.register = function register(type2, validator) { + if (typeof validator !== "function") { + throw new Error("Cannot register a validator by type, validator is not a function"); + } + validators[type2] = validator; +}; +Schema.warning = warning; +Schema.messages = messages; +exports.Schema = Schema;