| | |
| | | <view |
| | | class="address-item" |
| | | v-for="(item, index) in searchResults" |
| | | :key="'search-' + index" |
| | | :key="index" |
| | | @click="selectAddress(item)" |
| | | > |
| | | <!-- ç¡®ä¿ä½¿ç¨æå¼è¯æ³ --> |
| | |
| | | // åºç¨å
¨å±é
ç½® |
| | | |
| | | // â ï¸ éè¦ï¼æ¬å°å¼åæ¶ï¼è¯·ä¿®æ¹æ¤å¤çLOCAL_IPä¸ºä½ ççµèå
ç½IP |
| | | // Windowsæ¥ç: cmdæ§è¡ ipconfig |
| | | // Mac/Linuxæ¥ç: ç»ç«¯æ§è¡ ifconfig æ ip addr |
| | | const LOCAL_IP = 'localhost' // ä¿®æ¹ä¸ºä½ çIPï¼å¦: '192.168.1.100' |
| | | |
| | | // ç¯å¢é
ç½® |
| | | const ENV_CONFIG = { |
| | | // æ¬å°å¼åç¯å¢ |
| | | development: { |
| | | baseUrl: `http://${LOCAL_IP}:8080`, |
| | | description: 'æ¬å°å¼åç¯å¢' |
| | | }, |
| | | // æµè¯ç¯å¢ |
| | | test: { |
| | | baseUrl: 'http://test.yourdomain.com', |
| | | description: 'æµè¯ç¯å¢' |
| | | }, |
| | | // ç产ç¯å¢ |
| | | production: { |
| | | baseUrl: 'https://api.yourdomain.com', |
| | | description: 'ç产ç¯å¢' |
| | | } |
| | | } |
| | | |
| | | // å½å使ç¨çç¯å¢ï¼æå¨åæ¢ï¼ |
| | | // å¯éå¼: 'development', 'test', 'production' |
| | | const CURRENT_ENV = 'development' |
| | | |
| | | module.exports = { |
| | | // baseUrl: 'https://vue.ruoyi.vip/prod-api', |
| | | baseUrl: 'http://localhost:8080', |
| | | // APIåºç¡å°å |
| | | baseUrl: ENV_CONFIG[CURRENT_ENV].baseUrl, |
| | | |
| | | // åºç¨ä¿¡æ¯ |
| | | appInfo: { |
| | | // åºç¨åç§° |
| | | name: "ruoyi-app", |
| | | name: "æ°èªè°åº¦ç³»ç»", |
| | | // åºç¨çæ¬ |
| | | version: "1.1.0", |
| | | // åºç¨logo |
| | | logo: "/static/logo.png", |
| | | // 宿¹ç½ç« |
| | | site_url: "http://ruoyi.vip", |
| | | // æ¿çåè®® |
| | | agreements: [{ |
| | | |
| | | // å½åç¯å¢ä¿¡æ¯ï¼ä»
å¼åæ¶æ¾ç¤ºï¼ |
| | | env: CURRENT_ENV, |
| | | envDescription: ENV_CONFIG[CURRENT_ENV].description, |
| | | showEnv: CURRENT_ENV === 'development', // æ¯å¦æ¾ç¤ºç¯å¢ä¿¡æ¯ |
| | | |
| | | // æ¿çåè®®ï¼ä½¿ç¨æ¬å°é¡µé¢ï¼ |
| | | agreements: [ |
| | | { |
| | | title: "éç§æ¿ç", |
| | | url: "https://ruoyi.vip/protocol.html" |
| | | url: "/pages/mine/privacy-policy/index" |
| | | }, |
| | | { |
| | | title: "ç¨æ·æå¡åè®®", |
| | | url: "https://ruoyi.vip/protocol.html" |
| | | url: "/pages/mine/user-agreement/index" |
| | | } |
| | | ] |
| | | } |
| | |
| | | }, |
| | | "quickapp" : {}, |
| | | "mp-weixin" : { |
| | | "appid" : "wxccd7e2a0911b3397", |
| | | "appid" : "wx40692cc44953a8cb", |
| | | "setting" : { |
| | | "urlCheck" : false, |
| | | "es6" : false, |
| | |
| | | "navigationBarTitleText": "å
³äºæä»¬" |
| | | } |
| | | }, { |
| | | "path": "pages/mine/user-agreement/index", |
| | | "style": { |
| | | "navigationBarTitleText": "ç¨æ·æå¡åè®®" |
| | | } |
| | | }, { |
| | | "path": "pages/mine/privacy-policy/index", |
| | | "style": { |
| | | "navigationBarTitleText": "éç§æ¿ç" |
| | | } |
| | | }, { |
| | | "path": "pages/common/webview/index", |
| | | "style": { |
| | | "navigationBarTitleText": "æµè§ç½é¡µ" |
| | |
| | | <!-- ä»»å¡å¤´é¨ï¼æ é¢åç¶ææ ç¾ --> |
| | | <view class="task-header"> |
| | | <view class="task-title">{{ getTaskTypeText(task.type) }} - {{ task.vehicle }}</view> |
| | | <view class="task-status" :class="getStatusClass(task.taskStatus)"> |
| | | <view class="task-status" :class="task.taskStatus === 'PENDING' ? 'status-pending' : task.taskStatus === 'DEPARTING' ? 'status-departing' : task.taskStatus === 'ARRIVED' ? 'status-arrived' : task.taskStatus === 'RETURNING' ? 'status-returning' : task.taskStatus === 'COMPLETED' ? 'status-completed' : task.taskStatus === 'CANCELLED' ? 'status-cancelled' : task.taskStatus === 'IN_PROGRESS' ? 'status-in-progress' : 'status-default'"> |
| | | {{ getStatusText(task.status) }} |
| | | </view> |
| | | </view> |
| | |
| | | <text class="wechat-text">微信ä¸é®ç»å½</text> |
| | | </view> |
| | | </view> |
| | | <view class="reg text-center" v-if="register"> |
| | | <text class="text-grey1">没æè´¦å·ï¼</text> |
| | | <text @click="handleUserRegister" class="text-blue">ç«å³æ³¨å</text> |
| | | </view> |
| | | |
| | | <view class="xieyi text-center"> |
| | | <text class="text-grey1">ç»å½å³ä»£è¡¨åæ</text> |
| | | <text @click="handleUserAgrement" class="text-blue">ãç¨æ·åè®®ã</text> |
| | | <text @click="handlePrivacy" class="text-blue">ãéç§åè®®ã</text> |
| | | <text @click.stop="handleUserAgrement" class="text-blue agreement-link">ãç¨æ·åè®®ã</text> |
| | | <text class="text-grey1">å</text> |
| | | <text @click.stop="handlePrivacy" class="text-blue agreement-link">ãéç§åè®®ã</text> |
| | | </view> |
| | | </view> |
| | | </scroll-view> |
| | |
| | | register: false, |
| | | globalConfig: getApp().globalData.config, |
| | | loginForm: { |
| | | username: "admin", |
| | | password: "admin123", |
| | | username: "", |
| | | password: "", |
| | | code: "", |
| | | uuid: '' |
| | | } |
| | |
| | | }, |
| | | // éç§åè®® |
| | | handlePrivacy() { |
| | | let site = this.globalConfig.appInfo.agreements[0] |
| | | this.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`) |
| | | this.$tab.navigateTo('/pages/mine/privacy-policy/index') |
| | | }, |
| | | // ç¨æ·åè®® |
| | | handleUserAgrement() { |
| | | let site = this.globalConfig.appInfo.agreements[1] |
| | | this.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`) |
| | | this.$tab.navigateTo('/pages/mine/user-agreement/index') |
| | | }, |
| | | // è·åå¾å½¢éªè¯ç |
| | | getCode() { |
| | |
| | | } |
| | | } |
| | | |
| | | .reg, .xieyi { |
| | | .reg { |
| | | margin: 20rpx 0; |
| | | |
| | | .text-grey1 { |
| | |
| | | color: #007AFF; |
| | | } |
| | | } |
| | | |
| | | .xieyi { |
| | | margin: 50rpx 0 30rpx 0; |
| | | padding: 20rpx 0; |
| | | line-height: 2; |
| | | |
| | | .text-grey1 { |
| | | color: #888; |
| | | font-size: 24rpx; |
| | | } |
| | | |
| | | .agreement-link { |
| | | color: #007AFF; |
| | | font-size: 24rpx; |
| | | padding: 10rpx 8rpx; |
| | | margin: 0 5rpx; |
| | | display: inline-block; |
| | | position: relative; |
| | | z-index: 10; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <view>ç¼è¾èµæ</view> |
| | | </view> |
| | | </view> |
| | | <view class="list-cell list-cell-arrow" @click="handleUserAgreement"> |
| | | <view class="menu-item-box"> |
| | | <view class="iconfont icon-text menu-icon"></view> |
| | | <view>ç¨æ·æå¡åè®®</view> |
| | | </view> |
| | | </view> |
| | | <view class="list-cell list-cell-arrow" @click="handlePrivacyPolicy"> |
| | | <view class="menu-item-box"> |
| | | <view class="iconfont icon-safe menu-icon"></view> |
| | | <view>éç§æ¿ç</view> |
| | | </view> |
| | | </view> |
| | | <view class="list-cell list-cell-arrow" @click="handleHelp"> |
| | | <view class="menu-item-box"> |
| | | <view class="iconfont icon-help menu-icon"></view> |
| | |
| | | handleAbout() { |
| | | this.$tab.navigateTo('/pages/mine/about/index') |
| | | }, |
| | | handleUserAgreement() { |
| | | this.$tab.navigateTo('/pages/mine/user-agreement/index') |
| | | }, |
| | | handlePrivacyPolicy() { |
| | | this.$tab.navigateTo('/pages/mine/privacy-policy/index') |
| | | }, |
| | | handleJiaoLiuQun() { |
| | | this.$modal.showToast('QQ群ï¼â 133713780(满)ãâ¡146013835(满)ãâ¢189091635') |
| | | }, |
| New file |
| | |
| | | <template> |
| | | <view class="privacy-container"> |
| | | <view class="header"> |
| | | <view class="back-btn" @click="goBack"> |
| | | <uni-icons type="arrowleft" size="20"></uni-icons> |
| | | </view> |
| | | <view class="title">éç§æ¿ç</view> |
| | | </view> |
| | | |
| | | <scroll-view class="content" scroll-y="true"> |
| | | <view class="privacy-content"> |
| | | <view class="update-time">æ´æ°æ¥æï¼2025å¹´1æ25æ¥</view> |
| | | <view class="effect-time">çææ¥æï¼2025å¹´10æ25æ¥</view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">å¼è¨</text> |
| | | <text class="section-text"> |
| | | æ¥æè½¬è¿è°åº¦ç³»ç»ï¼ä»¥ä¸ç®ç§°"æä»¬"ï¼æ·±ç¥ä¸ªäººä¿¡æ¯å¯¹æ¨çéè¦æ§ï¼æä»¬å°æç
§æ³å¾æ³è§çè¦æ±ï¼éåç¸åºçå®å
¨ä¿æ¤æªæ½ï¼å°½åä¿æ¤æ¨ç个人信æ¯å®å
¨å¯æ§ã |
| | | </text> |
| | | <text class="section-text"> |
| | | æ¬ãéç§æ¿çãéç¨äºæä»¬åæ¨æä¾çæææå¡ãæä»¬å¸æéè¿æ¬æ¿çåæ¨è¯´ææä»¬å¦ä½æ¶éã使ç¨ãåå¨åå享æ¨ç个人信æ¯ï¼ä»¥åæ¨äº«æçç¸å
³æå©ã |
| | | </text> |
| | | <text class="section-text highlight"> |
| | | 请æ¨å¨ä½¿ç¨æä»¬ç产å/æå¡åï¼ä»ç»é
读并å
åçè§£æ¬æ¿çï¼ç¹å«æ¯ä»¥ç²ä½/ä¸å线æ è¯çæ¡æ¬¾ï¼æ¨åºéç¹é
读ã妿¨å¯¹æ¬æ¿çæä»»ä½çé®ï¼å¯éè¿æ¬æ¿çææ«æä¾çèç³»æ¹å¼ä¸æä»¬èç³»ã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">ä¸ãæä»¬å¦ä½æ¶éåä½¿ç¨æ¨ç个人信æ¯</text> |
| | | <text class="section-text"> |
| | | ä¸ªäººä¿¡æ¯æ¯æä»¥çµåæè
å
¶ä»æ¹å¼è®°å½çè½å¤åç¬æè
ä¸å
¶ä»ä¿¡æ¯ç»åè¯å«ç¹å®èªç¶äººèº«ä»½æè
åæ ç¹å®èªç¶äººæ´»å¨æ
åµçåç§ä¿¡æ¯ã |
| | | </text> |
| | | <text class="section-text"> |
| | | æä»¬ä»
ä¼åºäºä»¥ä¸ç®çï¼æ¶éåä½¿ç¨æ¨ç个人信æ¯ï¼ |
| | | </text> |
| | | |
| | | <text class="subsection-title">1.1 è´¦å·æ³¨åä¸ç»å½</text> |
| | | <text class="section-text"> |
| | | 彿¨æ³¨ååä½¿ç¨æ¬ç³»ç»æ¶ï¼æä»¬éè¦æ¶éï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ææºå·ç ï¼ç¨äºè´¦å·æ³¨åãç»å½éªè¯åå®å
¨ä¿é |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · å§åï¼ç¨äºèº«ä»½è¯å«åä»»å¡åé
|
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æå±é¨é¨/æºæï¼ç¨äºæé管çåä»»å¡åä½ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · èä½/è§è²ï¼ç¨äºç¡®å®ç³»ç»ä½¿ç¨æé |
| | | </text> |
| | | |
| | | <text class="subsection-title">1.2 ä»»å¡è°åº¦æå¡</text> |
| | | <text class="section-text"> |
| | | 为äºåæ¨æä¾ä»»å¡è°åº¦æå¡ï¼æä»¬éè¦æ¶éï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ä½ç½®ä¿¡æ¯ï¼è·åæ¨ç宿¶ä½ç½®ï¼ç¨äºä»»å¡åé
ã车è¾è°åº¦åè·¯å¾è§å |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ä»»å¡ç¸å
³ä¿¡æ¯ï¼å
æ¬æ£è
ä¿¡æ¯ï¼å§åãå¹´é¾ãæ§å«ãç
æ
æè¿°ï¼ãå°åä¿¡æ¯ãå»é¢ä¿¡æ¯ç |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · 车è¾ä¿¡æ¯ï¼è½¦çå·ã车è¾ç±»åã设å¤ç¼å·ç |
| | | </text> |
| | | <text class="section-text highlight"> |
| | | ä½ç½®ä¿¡æ¯å±äºææä¸ªäººä¿¡æ¯ï¼æä»¬ä»
卿¨ä¸»å¨å¼å¯å®ä½æé并使ç¨ç¸å
³åè½æ¶æ¶éï¼æ¨å¯ä»¥éæ¶å¨ç³»ç»è®¾ç½®ä¸å
³éå®ä½æéãæç»æä¾ä½ç½®ä¿¡æ¯å¯è½å¯¼è´é¨ååè½æ æ³ä½¿ç¨ï¼ä½ä¸å½±åå
¶ä»åè½çæ£å¸¸ä½¿ç¨ã |
| | | </text> |
| | | |
| | | <text class="subsection-title">1.3 æ¶æ¯æ¨éæå¡</text> |
| | | <text class="section-text"> |
| | | 为äºåæ¶åæ¨æ¨éä»»å¡éç¥ãç³»ç»æ¶æ¯çä¿¡æ¯ï¼æä»¬éè¦æ¶éï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · 设å¤ä¿¡æ¯ï¼è®¾å¤åå·ãæä½ç³»ç»çæ¬ãè®¾å¤æ è¯ç¬¦ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æ¨étokenï¼ç¨äºæ¶æ¯æ¨é |
| | | </text> |
| | | |
| | | <text class="subsection-title">1.4 ç³»ç»å®å
¨ä¸ä¼å</text> |
| | | <text class="section-text"> |
| | | 为äºä¿éç³»ç»å®å
¨ç¨³å®è¿è¡å¹¶æåç¨æ·ä½éªï¼æä»¬ä¼æ¶éï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æ¥å¿ä¿¡æ¯ï¼æä½æ¥å¿ãé误æ¥å¿ãæ§è½æ°æ® |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ç½ç»ä¿¡æ¯ï¼IPå°åãç½ç»ç±»å |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · åºç¨ä½¿ç¨æ
åµï¼é¡µé¢è®¿é®è®°å½ãåè½ä½¿ç¨é¢ç |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">äºãæä»¬å¦ä½ä½¿ç¨Cookieååç±»ææ¯</text> |
| | | <text class="section-text"> |
| | | Cookieæ¯ä¸ç§ç½ç»æå¡å¨åå¨å¨è®¡ç®æºæç§»å¨è®¾å¤ä¸ççº¯ææ¬æä»¶ãæä»¬ä½¿ç¨Cookieååç±»ææ¯ä¸»è¦ä¸ºäºå®ç°ä»¥ä¸åè½ï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · è®°ä½æ¨çç»å½ç¶æï¼é¿å
éå¤ç»å½ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · åææ¨ä½¿ç¨æä»¬æå¡çæ
åµï¼ä»¥ä¾¿ä¼åæå¡ä½éª |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ä¿éç³»ç»å®å
¨ï¼é²èå®å
¨é£é© |
| | | </text> |
| | | <text class="section-text"> |
| | | æ¨å¯ä»¥éè¿æµè§å¨æè®¾å¤è®¾ç½®æç»æç®¡çCookieï¼ä½è¿å¯è½å½±åæ¨ä½¿ç¨æä»¬æå¡çé¨ååè½ã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">ä¸ãæä»¬å¦ä½å
±äº«ã转让ãå
¬å¼æ«é²æ¨ç个人信æ¯</text> |
| | | |
| | | <text class="subsection-title">3.1 å
񄧮</text> |
| | | <text class="section-text"> |
| | | æä»¬ä¸ä¼åç¬¬ä¸æ¹å
±äº«æ¨ç个人信æ¯ï¼é¤éï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · äºå
è·å¾æ¨çæç¡®åæ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ä¸å
³èæºæå
±äº«ï¼å¨ä¸å¡éè¦ä¸ç¬¦åæ³å¾è§å®çæ
åµä¸ï¼æä»¬å¯è½ä¸æ¨æå±å»çæºæãæ¥æä¸å¿å
±äº«å¿
è¦ä¿¡æ¯ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æ³å¾æ³è§è§å®çå
¶ä»æ
å½¢ |
| | | </text> |
| | | |
| | | <text class="subsection-title">3.2 转让</text> |
| | | <text class="section-text"> |
| | | æä»¬ä¸ä¼å°æ¨ç个人信æ¯è½¬è®©ç»ä»»ä½å
¬å¸ãç»ç»å个人ï¼ä½ä»¥ä¸æ
åµé¤å¤ï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · äºå
è·å¾æ¨çæç¡®åæ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æ ¹æ®æ³å¾æ³è§æå¼ºå¶æ§çè¡æ¿æå¸æ³è¦æ± |
| | | </text> |
| | | |
| | | <text class="subsection-title">3.3 å
¬å¼æ«é²</text> |
| | | <text class="section-text"> |
| | | æä»¬ä»
ä¼å¨ä»¥ä¸æ
åµä¸å
¬å¼æ«é²æ¨ç个人信æ¯ï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · è·å¾æ¨çæç¡®åæ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · åºäºæ³å¾æ³è§ãæ³å¾ç¨åºãè¯è®¼ææ¿åºä¸»ç®¡é¨é¨å¼ºå¶æ§è¦æ± |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">åãæä»¬å¦ä½ä¿æ¤æ¨ç个人信æ¯</text> |
| | | <text class="section-text"> |
| | | 4.1 æä»¬é常éè§ä¸ªäººä¿¡æ¯å®å
¨ï¼å¹¶éåä¸ååçå¯è¡çæªæ½ä¿æ¤æ¨ç个人信æ¯ï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æ°æ®å å¯ï¼éç¨SSL/TLSå å¯ä¼ è¾ï¼å¯¹æææ°æ®è¿è¡å å¯åå¨ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · è®¿é®æ§å¶ï¼å»ºç«ä¸¥æ ¼çæ°æ®è®¿é®æéæ§å¶åå®¡æ¹æºå¶ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · å®å
¨å®¡è®¡ï¼å®æè¿è¡å®å
¨å®¡è®¡åé£é©è¯ä¼° |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · 人å管çï¼å¯¹å¤ç个人信æ¯çåå·¥è¿è¡èº«ä»½è®¤è¯åæé管ç |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · åºæ¥ååºï¼å¶å®ä¸ªäººä¿¡æ¯å®å
¨äºä»¶åºæ¥é¢æ¡ |
| | | </text> |
| | | <text class="section-text"> |
| | | 4.2 æä»¬ä¼éååçå¯è¡çæªæ½ï¼å°½åé¿å
æ¶éæ å
³ç个人信æ¯ã |
| | | </text> |
| | | <text class="section-text highlight"> |
| | | 4.3 äºèç½å¹¶éç»å¯¹å®å
¨çç¯å¢ï¼æä»¬å¼ºç建议æ¨éåç§¯ææªæ½ä¿æ¤ä¸ªäººä¿¡æ¯çå®å
¨ï¼å
æ¬ä½ä¸éäºä½¿ç¨å¤æå¯ç ãå®æä¿®æ¹å¯ç ãä¸å°èªå·±çè´¦å·å¯ç ç个人信æ¯éé²ç»ä»äººã |
| | | </text> |
| | | <text class="section-text highlight"> |
| | | 4.4 妿åç个人信æ¯å®å
¨äºä»¶ï¼æä»¬å°æç
§æ³å¾æ³è§çè¦æ±ï¼åæ¶åæ¨åç¥ï¼å®å
¨äºä»¶çåºæ¬æ
åµåå¯è½çå½±åãæä»¬å·²éåæå°è¦éåçå¤ç½®æªæ½ãæ¨å¯èªä¸»é²èåéä½é£é©ç建议çã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">äºãæ¨å¦ä½ç®¡ç个人信æ¯</text> |
| | | <text class="section-text"> |
| | | æç
§ä¸å½ç¸å
³çæ³å¾æ³è§ï¼æä»¬ä¿éæ¨å¯¹èªå·±ç个人信æ¯è¡ä½¿ä»¥ä¸æå©ï¼ |
| | | </text> |
| | | |
| | | <text class="subsection-title">5.1 访é®åæ´æ£æ¨ç个人信æ¯</text> |
| | | <text class="section-text"> |
| | | æ¨å¯ä»¥éè¿ä»¥ä¸æ¹å¼è®¿é®åæ´æ£æ¨ç个人信æ¯ï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · éè¿"æç-个人信æ¯"页颿¥çåä¿®æ¹åºæ¬ä¿¡æ¯ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · è系系ç»ç®¡çååå©ä¿®æ¹ |
| | | </text> |
| | | |
| | | <text class="subsection-title">5.2 å 餿¨ç个人信æ¯</text> |
| | | <text class="section-text"> |
| | | å¨ä»¥ä¸æ
å½¢ä¸ï¼æ¨å¯ä»¥åæä»¬æåºå é¤ä¸ªäººä¿¡æ¯ç请æ±ï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æä»¬å¤ç个人信æ¯çè¡ä¸ºè¿åæ³å¾æ³è§ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æä»¬æ¶éãä½¿ç¨æ¨ç个人信æ¯ï¼å´æªå¾å¾æ¨çåæ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æä»¬å¤ç个人信æ¯çè¡ä¸ºè¿åäºä¸æ¨ççº¦å® |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æ¨æ³¨éäºè´¦å· |
| | | </text> |
| | | |
| | | <text class="subsection-title">5.3 注éè´¦å·</text> |
| | | <text class="section-text"> |
| | | æ¨å¯ä»¥éè¿è系系ç»ç®¡çåç³è¯·æ³¨éè´¦å·ãè´¦å·æ³¨éåï¼æä»¬å°åæ¢ä¸ºæ¨æä¾æå¡ï¼å¹¶æ ¹æ®æ³å¾æ³è§è¦æ±å 餿¨ç个人信æ¯ã |
| | | </text> |
| | | |
| | | <text class="subsection-title">5.4 æ¤ååæ</text> |
| | | <text class="section-text"> |
| | | æ¨å¯ä»¥éè¿è®¾å¤æé设置æ¤å对ä½ç½®ä¿¡æ¯ãæå头ãç¸åçæææéçææã |
| | | </text> |
| | | <text class="section-text"> |
| | | 请æ¨çè§£ï¼ç¹å®çä¸å¡åè½éè¦æ¨çä¿¡æ¯æè½å¾ä»¥å®æï¼å½æ¨æ¤ååæåï¼æä»¬æ æ³ç»§ç»ä¸ºæ¨æä¾æ¤å忿坹åºçæå¡ã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">å
ãæä»¬å¦ä½å¤çæªæå¹´äººç个人信æ¯</text> |
| | | <text class="section-text"> |
| | | 6.1 æ¬ç³»ç»ä¸»è¦é¢åå»çæ¥æä»ä¸äººåï¼ååä¸ä¸åæªæå¹´äººæä¾æå¡ã |
| | | </text> |
| | | <text class="section-text"> |
| | | 6.2 妿æä»¬åç°å¨æªäºå
è·å¾å¯è¯å®çç¶æ¯ææ³å®çæ¤äººåæçæ
åµä¸æ¶éäºæªæå¹´äººç个人信æ¯ï¼æä»¬ä¼è®¾æ³å°½å¿«å é¤ç¸å
³æ°æ®ã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">ä¸ãæ¨ç个人信æ¯å¦ä½å¨å
¨çèå´å
转移</text> |
| | | <text class="section-text"> |
| | | æä»¬å¨ä¸å人æ°å
±åå½å¢å
æ¶éå产çç个人信æ¯å°åå¨å¨ä¸å人æ°å
±åå½å¢å
ã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">å
«ãæ¬æ¿çå¦ä½æ´æ°</text> |
| | | <text class="section-text"> |
| | | 8.1 æä»¬å¯è½éæ¶ä¿®è®¢æ¬æ¿çå
容ãå¦è¯¥çåæ´ä¼å¯¼è´æ¨å¨æ¬æ¿ç项䏿å©çå®è´¨åæï¼æä»¬å°å¨åæ´çæåï¼éè¿å¨é¡µé¢æ¾èä½ç½®æç¤ºã忍åéæ¶æ¯çæ¹å¼éç¥æ¨ã |
| | | </text> |
| | | <text class="section-text highlight"> |
| | | 8.2 å¨è¯¥ç§æ
åµä¸ï¼è¥æ¨ç»§ç»ä½¿ç¨æä»¬çæå¡ï¼å³è¡¨ç¤ºåæåç»ä¿®è®¢çæ¬æ¿çç约æã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">ä¹ãå¦ä½èç³»æä»¬</text> |
| | | <text class="section-text"> |
| | | 9.1 妿¨å¯¹æ¬éç§æ¿çææ¨ä¸ªäººä¿¡æ¯çç¸å
³äºå®æä»»ä½é®é¢ãæè§æå»ºè®®ï¼è¯·éè¿ä»¥ä¸æ¹å¼ä¸æä»¬èç³»ï¼ |
| | | </text> |
| | | <text class="section-text"> |
| | | çµåé®ç®±ï¼wanglizhong@966120.com.cn |
| | | </text> |
| | | <text class="section-text"> |
| | | 客æçµè¯ï¼020-966120 |
| | | </text> |
| | | <text class="section-text"> |
| | | 工使¶é´ï¼å¨ä¸è³å¨æ¥ 24å°æ¶ |
| | | </text> |
| | | <text class="section-text"> |
| | | 9.2 ä¸è¬æ
åµä¸ï¼æä»¬å°å¨15ä¸ªå·¥ä½æ¥å
å夿¨ç请æ±ã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">åãå®ä¹</text> |
| | | <text class="section-text"> |
| | | 个人信æ¯ï¼æä»¥çµåæè
å
¶ä»æ¹å¼è®°å½çè½å¤åç¬æè
ä¸å
¶ä»ä¿¡æ¯ç»åè¯å«ç¹å®èªç¶äººèº«ä»½æè
åæ ç¹å®èªç¶äººæ´»å¨æ
åµçåç§ä¿¡æ¯ã |
| | | </text> |
| | | <text class="section-text"> |
| | | ææä¸ªäººä¿¡æ¯ï¼æä¸æ¦æ³é²æè
éæ³ä½¿ç¨ï¼å®¹æå¯¼è´èªç¶äººçäººæ ¼å°ä¸¥åå°ä¾µå®³æè
人身ã财产å®å
¨åå°å±å®³ç个人信æ¯ï¼å
æ¬çç©è¯å«ãå®æä¿¡ä»°ãç¹å®èº«ä»½ãå»çå¥åº·ãéèè´¦æ·ãè¡è¸ªè½¨è¿¹çä¿¡æ¯ã |
| | | </text> |
| | | <text class="section-text"> |
| | | 个人信æ¯å é¤ï¼æå¨å®ç°æ¥å¸¸ä¸å¡åè½ææ¶åçç³»ç»ä¸å»é¤ä¸ªäººä¿¡æ¯çè¡ä¸ºï¼ä½¿å
¶ä¿æä¸å¯è¢«æ£ç´¢ã访é®çç¶æã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="footer"> |
| | | <text class="footer-text">æè°¢æ¨ä¿¡ä»»å¹¶ä½¿ç¨æ¥æè½¬è¿è°åº¦ç³»ç»ï¼</text> |
| | | </view> |
| | | </view> |
| | | </scroll-view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return {} |
| | | }, |
| | | methods: { |
| | | goBack() { |
| | | uni.navigateBack() |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | .privacy-container { |
| | | height: 100vh; |
| | | display: flex; |
| | | flex-direction: column; |
| | | background-color: #f5f5f5; |
| | | |
| | | .header { |
| | | display: flex; |
| | | align-items: center; |
| | | padding: 20rpx; |
| | | background-color: white; |
| | | border-bottom: 1rpx solid #f0f0f0; |
| | | |
| | | .back-btn { |
| | | width: 60rpx; |
| | | height: 60rpx; |
| | | border-radius: 50%; |
| | | background-color: #f0f0f0; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | margin-right: 20rpx; |
| | | } |
| | | |
| | | .title { |
| | | font-size: 36rpx; |
| | | font-weight: bold; |
| | | color: #333; |
| | | } |
| | | } |
| | | |
| | | .content { |
| | | flex: 1; |
| | | padding: 30rpx; |
| | | } |
| | | |
| | | .privacy-content { |
| | | background-color: white; |
| | | border-radius: 15rpx; |
| | | padding: 40rpx 30rpx; |
| | | |
| | | .update-time, |
| | | .effect-time { |
| | | font-size: 24rpx; |
| | | color: #999; |
| | | margin-bottom: 10rpx; |
| | | } |
| | | |
| | | .section { |
| | | margin-top: 40rpx; |
| | | |
| | | &:first-child { |
| | | margin-top: 30rpx; |
| | | } |
| | | |
| | | .section-title { |
| | | display: block; |
| | | font-size: 32rpx; |
| | | font-weight: bold; |
| | | color: #333; |
| | | margin-bottom: 20rpx; |
| | | line-height: 1.5; |
| | | } |
| | | |
| | | .subsection-title { |
| | | display: block; |
| | | font-size: 30rpx; |
| | | font-weight: bold; |
| | | color: #666; |
| | | margin: 25rpx 0 15rpx; |
| | | line-height: 1.5; |
| | | } |
| | | |
| | | .section-text { |
| | | display: block; |
| | | font-size: 28rpx; |
| | | color: #666; |
| | | line-height: 1.8; |
| | | margin-bottom: 15rpx; |
| | | text-align: justify; |
| | | |
| | | &.highlight { |
| | | background-color: #fff8e6; |
| | | padding: 20rpx; |
| | | border-left: 4rpx solid #ff9500; |
| | | border-radius: 8rpx; |
| | | margin: 20rpx 0; |
| | | font-weight: bold; |
| | | color: #333; |
| | | } |
| | | |
| | | &.indent { |
| | | padding-left: 40rpx; |
| | | position: relative; |
| | | |
| | | &::before { |
| | | content: ''; |
| | | position: absolute; |
| | | left: 20rpx; |
| | | top: 18rpx; |
| | | width: 8rpx; |
| | | height: 8rpx; |
| | | background-color: #666; |
| | | border-radius: 50%; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .footer { |
| | | margin-top: 60rpx; |
| | | padding-top: 40rpx; |
| | | border-top: 1rpx solid #f0f0f0; |
| | | text-align: center; |
| | | |
| | | .footer-text { |
| | | font-size: 28rpx; |
| | | color: #007AFF; |
| | | font-weight: bold; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| New file |
| | |
| | | <template> |
| | | <view class="agreement-container"> |
| | | <view class="header"> |
| | | <view class="back-btn" @click="goBack"> |
| | | <uni-icons type="arrowleft" size="20"></uni-icons> |
| | | </view> |
| | | <view class="title">ç¨æ·æå¡åè®®</view> |
| | | </view> |
| | | |
| | | <scroll-view class="content" scroll-y="true"> |
| | | <view class="agreement-content"> |
| | | <view class="update-time">æ´æ°æ¥æï¼2025å¹´1æ25æ¥</view> |
| | | <view class="effect-time">çææ¥æï¼2025å¹´1æ25æ¥</view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">欢è¿ä½¿ç¨æ¥æè½¬è¿è°åº¦ç³»ç»ï¼</text> |
| | | <text class="section-text"> |
| | | 卿¨ä½¿ç¨æ¥æè½¬è¿è°åº¦ç³»ç»ï¼ä»¥ä¸ç®ç§°"æ¬ç³»ç»"æ"æ¬æå¡"ï¼ä¹åï¼è¯·æ¨ä»ç»é
读并å
åçè§£æ¬ãç¨æ·æå¡åè®®ãï¼ä»¥ä¸ç®ç§°"æ¬åè®®"ï¼ã |
| | | </text> |
| | | <text class="section-text"> |
| | | æ¬åè®®æ¯æ¨ä¸æ¬ç³»ç»è¿è¥æ¹ï¼ä»¥ä¸ç®ç§°"æä»¬"ï¼ä¹é´å°±ä½¿ç¨æ¬ç³»ç»æè®¢ç«çåè®®ãéè¿æ³¨åãç»å½æä½¿ç¨æ¬ç³»ç»ï¼å³è¡¨ç¤ºæ¨å·²é
读ãçè§£å¹¶åææ¥åæ¬åè®®çå
¨é¨å
容ã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">ä¸ãæå¡è¯´æ</text> |
| | | <text class="section-text"> |
| | | 1.1 æ¬ç³»ç»æ¯ä¸ä¸ªä¸ä¸çæ¥æè½¬è¿è°åº¦ç®¡çå¹³å°ï¼ä¸ºå»çæºæãæ¥æä¸å¿åç¸å
³å·¥ä½äººåæä¾ä»»å¡è°åº¦ã车è¾ç®¡çã人ååè°çæå¡ã |
| | | </text> |
| | | <text class="section-text"> |
| | | 1.2 æ¬ç³»ç»æ¯æçåè½å
æ¬ä½ä¸éäºï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æ¥æè½¬è¿ä»»å¡å建ä¸ç®¡ç |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ç¦ç¥è½¦æå¡ä»»å¡ç®¡ç |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · 车è¾è°åº¦ä¸å®ä½è·è¸ª |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · 人ååé
ä¸åä½ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ä»»å¡ç¶æå®æ¶æ´æ° |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æ¶æ¯éç¥ä¸æé |
| | | </text> |
| | | <text class="section-text"> |
| | | 1.3 æä»¬å°æ ¹æ®ä¸å¡åå±éè¦ï¼ä¸å®æå°å¯¹æ¬ç³»ç»åç¸å
³åè½è¿è¡è°æ´ãå级æä¼åã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">äºãè´¦å·æ³¨åä¸ä½¿ç¨</text> |
| | | <text class="section-text"> |
| | | 2.1 æ¨éè¦éè¿åæ³é徿³¨åå¹¶è·å¾æ¬ç³»ç»è´¦å·ï¼è´¦å·ç±ç³»ç»ç®¡çåç»ä¸åé
å管çã |
| | | </text> |
| | | <text class="section-text"> |
| | | 2.2 æ¨åºå½å¦¥åä¿ç®¡è´¦å·åå¯ç ï¼ä¸å¾å°è´¦å·è½¬è®©ãåºåæä»¥å
¶ä»æ¹å¼æä¾ç»ä»äººä½¿ç¨ãå æ¨ä¿ç®¡ä¸å导è´çè´¦å·è¢«çç¨çæå¤±ç±æ¨èªè¡æ¿æ
ã |
| | | </text> |
| | | <text class="section-text"> |
| | | 2.3 æ¨æ¿è¯ºæä¾ç注åä¿¡æ¯çå®ãåç¡®ã宿´ï¼å¹¶åæ¶æ´æ°ç¸å
³ä¿¡æ¯ãå¦å æä¾èåä¿¡æ¯é æçä¸ååæç±æ¨èªè¡æ¿æ
ã |
| | | </text> |
| | | <text class="section-text"> |
| | | 2.4 æ¨ç解并åæï¼æ¨çè´¦å·ä»
éæ¬äººä½¿ç¨ï¼ç¦æ¢èµ ä¸ãåç¨ãç§ç¨ã转让æå®åã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">ä¸ãç¨æ·è¡ä¸ºè§è</text> |
| | | <text class="section-text"> |
| | | 3.1 æ¨å¨ä½¿ç¨æ¬ç³»ç»æ¶ï¼åºå½éµå®ä¸å人æ°å
±åå½ç¸å
³æ³å¾æ³è§ï¼ä¸å¾å©ç¨æ¬ç³»ç»ä»äºè¿æ³è¿è§æ´»å¨ã |
| | | </text> |
| | | <text class="section-text"> |
| | | 3.2 æ¨ä¸å¾è¿è¡ä»¥ä¸è¡ä¸ºï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · åå¸ãä¼ æè¿æ³è¿è§ä¿¡æ¯ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ä¾µç¯ä»äººç¥è¯äº§æãåä¸ç§å¯æå
¶ä»åæ³æç |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æ¶ææ»å»ãç ´åç³»ç»å®å
¨ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ä¼ æè®¡ç®æºç
æ¯æå
¶ä»ç ´åæ§ç¨åº |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · å©ç¨ç³»ç»æ¼æ´è°å䏿£å½å©ç |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · å¹²æ°ç³»ç»æ£å¸¸è¿è¡ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · å½ä»»æç¼é ãæé èåä»»å¡ä¿¡æ¯ |
| | | </text> |
| | | <text class="section-text"> |
| | | 3.3 æ¨åºå½æç
§ç宿
åµå¡«åä»»å¡ä¿¡æ¯ï¼ç¡®ä¿æ£è
ä¿¡æ¯ãå°åä¿¡æ¯çåç¡®æ 误ï¼ä»¥ä¿éæ¥ææå¡çåæ¶æ§åæææ§ã |
| | | </text> |
| | | <text class="section-text"> |
| | | 3.4 ä½ä¸ºæ¥æè½¬è¿å·¥ä½äººåï¼æ¨åºå½ï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · åæ¶ååºä»»å¡åé
|
| | | </text> |
| | | <text class="section-text indent"> |
| | | · åç¡®æ´æ°ä»»å¡ç¶æ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · éµå®èä¸éå¾·åæä½è§è |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ä¿æ¤æ£è
éç§åä¸ªäººä¿¡æ¯ |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">åãéç§ä¿æ¤</text> |
| | | <text class="section-text"> |
| | | 4.1 æä»¬é常éè§ç¨æ·éç§ä¿æ¤ï¼å°æç
§ãéç§æ¿çãççº¦å®æ¶éã使ç¨ãåå¨åä¿æ¤æ¨ç个人信æ¯ã |
| | | </text> |
| | | <text class="section-text"> |
| | | 4.2 å¨ä½¿ç¨æ¬ç³»ç»è¿ç¨ä¸ï¼æä»¬å¯è½éè¦æ¶é以ä¸ä¿¡æ¯ï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · åºæ¬ä¿¡æ¯ï¼å§åãææºå·ç ãæå±é¨é¨ç |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ä½ç½®ä¿¡æ¯ï¼ç¨äºä»»å¡å®ä½å车è¾è·è¸ª |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · 设å¤ä¿¡æ¯ï¼ç¨äºç³»ç»ä¼ååé®é¢ææ¥ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æä½æ¥å¿ï¼ç¨äºæå¡æ¹è¿åå®å
¨ä¿é |
| | | </text> |
| | | <text class="section-text"> |
| | | 4.3 æªç»æ¨åæï¼æä»¬ä¸ä¼åç¬¬ä¸æ¹æä¾ãåºå®ãåºç§ãå享æäº¤ææ¨ç个人信æ¯ã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">äºãç¥è¯äº§æ</text> |
| | | <text class="section-text"> |
| | | 5.1 æ¬ç³»ç»åå
¶å
å«çææå
容ï¼å
æ¬ä½ä¸éäºæåãå¾çã软件ãç¨åºãæ°æ®çï¼çç¥è¯äº§æåå½æä»¬æææå·²è·å¾åæ³ææã |
| | | </text> |
| | | <text class="section-text"> |
| | | 5.2 æªç»æä»¬ä¹¦é¢è®¸å¯ï¼æ¨ä¸å¾ä»¥ä»»ä½å½¢å¼å¤å¶ãä¼ æãå±ç¤ºãéåãä¸ä¼ ãä¸è½½æ¬ç³»ç»çä»»ä½å
容ã |
| | | </text> |
| | | <text class="section-text"> |
| | | 5.3 æ¨å¨ä½¿ç¨æ¬ç³»ç»è¿ç¨ä¸å建ç任塿°æ®ãæä½è®°å½çï¼å
¶ä½¿ç¨æå½æ¨ææï¼ä½æä»¬ææå°å
¶ç¨äºç»è®¡åæãæå¡æ¹è¿çç®çã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">å
ãæå¡ä¸ææç»æ¢</text> |
| | | <text class="section-text"> |
| | | 6.1 å¨ä»¥ä¸æ
åµä¸ï¼æä»¬ææä¸ææç»æ¢åæ¨æä¾æå¡ï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æ¨è¿åæ¬åè®®çä»»ä½çº¦å® |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ç³»ç»ç»´æ¤ãå级éè¦ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ä¸å¯æåæå
¶ä»ä¸å¯æ§å ç´ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · æ¿åºé¨é¨ã叿³æºå
³çè¦æ± |
| | | </text> |
| | | <text class="section-text"> |
| | | 6.2 å ç³»ç»ç»´æ¤æå级çåå éè¦æåæå¡çï¼æä»¬å°å°½å¯è½äºå
éç¥æ¨ã |
| | | </text> |
| | | <text class="section-text"> |
| | | 6.3 妿æ¨ä¸åä½¿ç¨æ¬ç³»ç»ï¼å¯ä»¥ç³è¯·æ³¨éè´¦å·ãè´¦å·æ³¨éåï¼æ¨å°æ æ³å使ç¨è¯¥è´¦å·ï¼ä¸æ æ³æ¢å¤ç¸å
³æ°æ®ã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">ä¸ãå
责声æ</text> |
| | | <text class="section-text"> |
| | | 7.1 æ¬ç³»ç»ä»
ä½ä¸ºæ¥æè½¬è¿è°åº¦ç®¡çå·¥å
·ï¼æä»¬å¯¹ä»¥ä¸æ
åµä¸æ¿æ
è´£ä»»ï¼ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · å ç¨æ·æä½ä¸å½å¯¼è´ç任使失 |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · å ç½ç»æ
éãè®¾å¤æ
éçææ¯åå 导è´çæå¡ä¸æ |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · å ä¸å¯æå导è´çæå¡ä¸æææ°æ®ä¸¢å¤± |
| | | </text> |
| | | <text class="section-text indent"> |
| | | · ç¨æ·ä¹é´å ä½¿ç¨æ¬ç³»ç»äº§çççº çº· |
| | | </text> |
| | | <text class="section-text"> |
| | | 7.2 æ¬ç³»ç»æä¾çå®ä½ã导èªçåè½ä»
ä¾åèï¼å®é
æ§è¡ä»»å¡æ¶è¯·ä»¥ç°åºå®é
æ
åµä¸ºåã |
| | | </text> |
| | | <text class="section-text"> |
| | | 7.3 æä»¬å¯¹æ¬ç³»ç»ä¸ç¬¬ä¸æ¹æä¾çæå¡æå
容䏿¿æ
责任ã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">å
«ãåè®®åæ´</text> |
| | | <text class="section-text"> |
| | | 8.1 æä»¬æææ ¹æ®éè¦ä¿®æ¹æ¬åè®®çå
容ï¼ä¿®æ¹åçåè®®å°å¨ç³»ç»å
å
¬å¸ã |
| | | </text> |
| | | <text class="section-text"> |
| | | 8.2 妿æ¨ä¸åæä¿®æ¹åçåè®®å
å®¹ï¼æ¨ææåæ¢ä½¿ç¨æ¬ç³»ç»ã妿æ¨ç»§ç»ä½¿ç¨æ¬ç³»ç»ï¼åè§ä¸ºæ¨æ¥åä¿®æ¹åçåè®®ã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">ä¹ãäºè®®è§£å³</text> |
| | | <text class="section-text"> |
| | | 9.1 æ¬åè®®ç订ç«ãæ§è¡åè§£éåäºè®®çè§£å³ååºéç¨ä¸å人æ°å
±å彿³å¾ã |
| | | </text> |
| | | <text class="section-text"> |
| | | 9.2 å¦åæ¹å°±æ¬åè®®å
容æå
¶æ§è¡åçä»»ä½äºè®®ï¼åæ¹åºå°½éå好ååè§£å³ï¼åå䏿æ¶ï¼ä»»ä½ä¸æ¹åå¯åæä»¬æå¨å°äººæ°æ³é¢æèµ·è¯è®¼ã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">åãå
¶ä»</text> |
| | | <text class="section-text"> |
| | | 10.1 æ¬åè®®æææ¨ä¸æä»¬ä¹é´å
³äºä½¿ç¨æ¬ç³»ç»ç宿´åè®®ï¼å代忹ä¹åå°±ç¸åäºé¡¹è¾¾æçä»»ä½å£å¤´æä¹¦é¢åè®®ã |
| | | </text> |
| | | <text class="section-text"> |
| | | 10.2 妿¬åè®®ç任使¡æ¬¾è¢«è§ä¸ºæ æææ æ³æ§è¡ï¼è¯¥æ¡æ¬¾åºäºä»¥å é¤ï¼å
¶ä½æ¡æ¬¾ç»§ç»ææã |
| | | </text> |
| | | <text class="section-text"> |
| | | 10.3 æä»¬å¯¹æ¬åè®®æ¥ææç»è§£éæã |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="section"> |
| | | <text class="section-title">åä¸ãèç³»æä»¬</text> |
| | | <text class="section-text"> |
| | | 妿¨å¯¹æ¬åè®®æä»»ä½çé®ãæè§æå»ºè®®ï¼è¯·éè¿ä»¥ä¸æ¹å¼èç³»æä»¬ï¼ |
| | | </text> |
| | | <text class="section-text"> |
| | | çµåé®ç®±ï¼wanglizhong@966129.com.cn |
| | | </text> |
| | | <text class="section-text"> |
| | | 客æçµè¯ï¼966120 |
| | | </text> |
| | | <text class="section-text"> |
| | | 工使¶é´ï¼å¨ä¸è³å¨æ¥ 24å°æ¶ |
| | | </text> |
| | | </view> |
| | | |
| | | <view class="footer"> |
| | | <text class="footer-text">忬¡æè°¢æ¨éæ©ä½¿ç¨å¹¿ä¸æ°èªè°åº¦ç³»ç»ï¼</text> |
| | | </view> |
| | | </view> |
| | | </scroll-view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return {} |
| | | }, |
| | | methods: { |
| | | goBack() { |
| | | uni.navigateBack() |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | .agreement-container { |
| | | height: 100vh; |
| | | display: flex; |
| | | flex-direction: column; |
| | | background-color: #f5f5f5; |
| | | |
| | | .header { |
| | | display: flex; |
| | | align-items: center; |
| | | padding: 20rpx; |
| | | background-color: white; |
| | | border-bottom: 1rpx solid #f0f0f0; |
| | | |
| | | .back-btn { |
| | | width: 60rpx; |
| | | height: 60rpx; |
| | | border-radius: 50%; |
| | | background-color: #f0f0f0; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | margin-right: 20rpx; |
| | | } |
| | | |
| | | .title { |
| | | font-size: 36rpx; |
| | | font-weight: bold; |
| | | color: #333; |
| | | } |
| | | } |
| | | |
| | | .content { |
| | | flex: 1; |
| | | padding: 30rpx; |
| | | } |
| | | |
| | | .agreement-content { |
| | | background-color: white; |
| | | border-radius: 15rpx; |
| | | padding: 40rpx 30rpx; |
| | | |
| | | .update-time, |
| | | .effect-time { |
| | | font-size: 24rpx; |
| | | color: #999; |
| | | margin-bottom: 10rpx; |
| | | } |
| | | |
| | | .section { |
| | | margin-top: 40rpx; |
| | | |
| | | &:first-child { |
| | | margin-top: 30rpx; |
| | | } |
| | | |
| | | .section-title { |
| | | display: block; |
| | | font-size: 32rpx; |
| | | font-weight: bold; |
| | | color: #333; |
| | | margin-bottom: 20rpx; |
| | | line-height: 1.5; |
| | | } |
| | | |
| | | .section-text { |
| | | display: block; |
| | | font-size: 28rpx; |
| | | color: #666; |
| | | line-height: 1.8; |
| | | margin-bottom: 15rpx; |
| | | text-align: justify; |
| | | |
| | | &.indent { |
| | | padding-left: 40rpx; |
| | | position: relative; |
| | | |
| | | &::before { |
| | | content: ''; |
| | | position: absolute; |
| | | left: 20rpx; |
| | | top: 18rpx; |
| | | width: 8rpx; |
| | | height: 8rpx; |
| | | background-color: #666; |
| | | border-radius: 50%; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .footer { |
| | | margin-top: 60rpx; |
| | | padding-top: 40rpx; |
| | | border-top: 1rpx solid #f0f0f0; |
| | | text-align: center; |
| | | |
| | | .footer-text { |
| | | font-size: 28rpx; |
| | | color: #007AFF; |
| | | font-weight: bold; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <image :src="codeUrl" @click="getCode" class="login-code-img"></image> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- åè®®åæ --> |
| | | <view class="agreement-section"> |
| | | <checkbox-group @change="handleAgreementChange"> |
| | | <label class="agreement-label"> |
| | | <checkbox value="agreed" :checked="agreedToTerms" color="#007AFF" /> |
| | | <text class="agreement-text"> |
| | | æå·²é
è¯»å¹¶åæ |
| | | <text class="agreement-link" @click.stop="handleUserAgreement">ãç¨æ·æå¡åè®®ã</text> |
| | | å |
| | | <text class="agreement-link" @click.stop="handlePrivacy">ãéç§æ¿çã</text> |
| | | </text> |
| | | </label> |
| | | </checkbox-group> |
| | | </view> |
| | | |
| | | <view class="action-btn"> |
| | | <button @click="handleRegister()" class="register-btn cu-btn block bg-blue lg round">注å</button> |
| | | </view> |
| | |
| | | return { |
| | | codeUrl: "", |
| | | captchaEnabled: true, |
| | | agreedToTerms: false, |
| | | globalConfig: getApp().globalData.config, |
| | | registerForm: { |
| | | username: "", |
| | |
| | | // ç¨æ·ç»å½ |
| | | handleUserLogin() { |
| | | this.$tab.navigateTo(`/pages/login`) |
| | | }, |
| | | // åè®®éæ©åæ´ |
| | | handleAgreementChange(e) { |
| | | this.agreedToTerms = e.detail.value.length > 0 |
| | | }, |
| | | // ç¨æ·åè®® |
| | | handleUserAgreement() { |
| | | this.$tab.navigateTo('/pages/mine/user-agreement/index') |
| | | }, |
| | | // éç§æ¿ç |
| | | handlePrivacy() { |
| | | this.$tab.navigateTo('/pages/mine/privacy-policy/index') |
| | | }, |
| | | // è·åå¾å½¢éªè¯ç |
| | | getCode() { |
| | |
| | | this.$modal.msgError("两次è¾å
¥çå¯ç ä¸ä¸è´") |
| | | } else if (this.registerForm.code === "" && this.captchaEnabled) { |
| | | this.$modal.msgError("请è¾å
¥éªè¯ç ") |
| | | } else if (!this.agreedToTerms) { |
| | | this.$modal.msgError("请å
é
读并åæç¨æ·æå¡åè®®åéç§æ¿ç") |
| | | } else { |
| | | this.$modal.loading("注åä¸ï¼è¯·èå¿çå¾
...") |
| | | this.register() |
| | |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | .agreement-section { |
| | | margin: 30rpx 0; |
| | | |
| | | .agreement-label { |
| | | display: flex; |
| | | align-items: flex-start; |
| | | |
| | | checkbox { |
| | | margin-right: 15rpx; |
| | | transform: scale(0.9); |
| | | flex-shrink: 0; |
| | | } |
| | | |
| | | .agreement-text { |
| | | flex: 1; |
| | | font-size: 26rpx; |
| | | color: #666; |
| | | line-height: 2; |
| | | text-align: left; |
| | | |
| | | .agreement-link { |
| | | color: #007AFF; |
| | | text-decoration: underline; |
| | | padding: 8rpx 5rpx; |
| | | display: inline-block; |
| | | position: relative; |
| | | z-index: 10; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | .login-code { |
| | | height: 38px; |
| | | float: right; |
| | |
| | | </view> |
| | | <view class="info-item"> |
| | | <view class="label">ä»»å¡ç¶æ</view> |
| | | <view class="value status" :class="taskDetail.taskStatus.toLowerCase()"> |
| | | <view class="value status" :class="taskDetail.taskStatus === 'PENDING' ? 'pending' : taskDetail.taskStatus === 'DEPARTING' ? 'in_progress' : taskDetail.taskStatus === 'ARRIVED' ? 'in_progress' : taskDetail.taskStatus === 'RETURNING' ? 'in_progress' : taskDetail.taskStatus === 'IN_PROGRESS' ? 'in_progress' : taskDetail.taskStatus === 'COMPLETED' ? 'completed' : taskDetail.taskStatus === 'CANCELLED' ? 'cancelled' : ''"> |
| | | {{ getStatusText(taskDetail.taskStatus) }} |
| | | </view> |
| | | </view> |
| | |
| | | <!-- ä»»å¡å¤´é¨ï¼æ é¢åç¶ææ ç¾ --> |
| | | <view class="task-header"> |
| | | <view class="task-title">{{ getTaskTypeText(task.taskType) }} - {{ task.vehicle }}</view> |
| | | <view class="task-status" :class="getStatusClass(task.taskStatus)"> |
| | | <view class="task-status" :class="task.taskStatus === 'PENDING' ? 'status-pending' : task.taskStatus === 'DEPARTING' ? 'status-departing' : task.taskStatus === 'ARRIVED' ? 'status-arrived' : task.taskStatus === 'RETURNING' ? 'status-returning' : task.taskStatus === 'COMPLETED' ? 'status-completed' : task.taskStatus === 'CANCELLED' ? 'status-cancelled' : task.taskStatus === 'IN_PROGRESS' ? 'status-in-progress' : 'status-default'"> |
| | | {{ getStatusText(task.taskStatus) }} |
| | | </view> |
| | | </view> |
| | |
| | | |
| | | // 页é¢ç½åå |
| | | const whiteList = [ |
| | | '/pages/login', '/pages/register', '/pages/common/webview/index' |
| | | '/pages/login', |
| | | '/pages/register', |
| | | '/pages/common/webview/index', |
| | | '/pages/mine/privacy-policy/index', // éç§æ¿çï¼å¿å访é®ï¼ |
| | | '/pages/mine/user-agreement/index' // ç¨æ·åè®®ï¼å¿å访é®ï¼ |
| | | ] |
| | | |
| | | // æ£æ¥å°åç½åå |
| New file |
| | |
| | | # 微信å°ç¨åºæ¬å°æ¥å£è°è¯é
ç½®æå |
| | | |
| | | ## ä¸ãå½åé
ç½®ç¶æ |
| | | |
| | | ### 1.1 å端æ¥å£å°åé
ç½® |
| | | |
| | | **æä»¶ä½ç½®**: `app/config.js` |
| | | |
| | | ```javascript |
| | | module.exports = { |
| | | baseUrl: 'http://localhost:8080', // â
å·²é
置为æ¬å°æ¥å£ |
| | | // ...å
¶ä»é
ç½® |
| | | } |
| | | ``` |
| | | |
| | | ### 1.2 é®é¢è¯´æ |
| | | |
| | | 微信å°ç¨åºé»è®¤**ä¸å
è®¸è®¿é®æ¬å°æ¥å£**ï¼localhost æ 127.0.0.1ï¼ï¼ä¼æ¥ä»¥ä¸éè¯¯ï¼ |
| | | |
| | | ``` |
| | | request:fail url not in domain list |
| | | // æ |
| | | request:fail -104:net::ERR_CONNECTION_FAILED |
| | | ``` |
| | | |
| | | ## äºãè§£å³æ¹æ¡ï¼3ç§æ¹æ³ï¼ |
| | | |
| | | ### æ¹æ¡1ï¼å¼åè
å·¥å
·ä¸å
³éååæ ¡éªï¼æ¨èç¨äºå¼åè°è¯ï¼ |
| | | |
| | | è¿æ¯æç®åå¿«éçæ¹æ³ï¼é忬å°å¼åè°è¯ã |
| | | |
| | | #### æ¥éª¤ï¼ |
| | | |
| | | 1. **æå¼å¾®ä¿¡å¼åè
å·¥å
·** |
| | | - ç¡®ä¿å·²å®è£
微信å¼åè
å·¥å
· |
| | | - 导å
¥é¡¹ç®ï¼éæ© `app` ç®å½ |
| | | |
| | | 2. **å
³éååæ ¡éª** |
| | | - ç¹å»å³ä¸è§"详æ
"æé® |
| | | - 忢å°"æ¬å°è®¾ç½®"éé¡¹å¡ |
| | | - å¾é â
**䏿 ¡éªåæ³ååãweb-viewï¼ä¸å¡ååï¼ãTLS çæ¬ä»¥å HTTPS è¯ä¹¦** |
| | | |
| | | 3. **确认é
ç½®çæ** |
| | | ```javascript |
| | | // app/config.js ä¿æ |
| | | baseUrl: 'http://localhost:8080' |
| | | ``` |
| | | |
| | | 4. **éæ°ç¼è¯** |
| | | - ç¹å»"ç¼è¯"æé® |
| | | - æ¥çæ§å¶å°æ¯å¦æç½ç»è¯·æ± |
| | | |
| | | #### ä¼ç¹ï¼ |
| | | - â
é
ç½®ç®åï¼ç«å³çæ |
| | | - â
éåå¼åè°è¯ |
| | | - â
ä¸éè¦ä¿®æ¹ä»£ç |
| | | |
| | | #### 缺ç¹ï¼ |
| | | - â ä»
å¨å¼åè
å·¥å
·ä¸ææ |
| | | - â çæºé¢è§æ¶æ æ |
| | | - â æ£å¼çæ¬å¿
é¡»é
ç½®åæ³åå |
| | | |
| | | --- |
| | | |
| | | ### æ¹æ¡2ï¼ä½¿ç¨å
ç½IPå°åï¼æ¨èç¨äºçæºè°è¯ï¼ |
| | | |
| | | 使ç¨çµèçå
ç½IPå°åæ¿ä»£localhostï¼å¯ä»¥è®©ææºè®¿é®çµèä¸çå端æå¡ã |
| | | |
| | | #### æ¥éª¤ï¼ |
| | | |
| | | 1. **æ¥æ¾çµèå
ç½IP** |
| | | |
| | | **Windowsç³»ç»**ï¼ |
| | | ```bash |
| | | # å½ä»¤è¡æ§è¡ |
| | | ipconfig |
| | | |
| | | # æ¥æ¾ç±»ä¼¼è¿æ ·çå°å |
| | | IPv4 å°å . . . . . . . . . . . . : 192.168.1.100 |
| | | ``` |
| | | |
| | | **Mac/Linuxç³»ç»**ï¼ |
| | | ```bash |
| | | # ç»ç«¯æ§è¡ |
| | | ifconfig |
| | | |
| | | # æ |
| | | ip addr show |
| | | |
| | | # æ¥æ¾ä»¥ 192.168.x.x æ 10.x.x.x å¼å¤´çå°å |
| | | ``` |
| | | |
| | | 2. **ä¿®æ¹é
ç½®æä»¶** |
| | | |
| | | **æ¹æ³Aï¼ç´æ¥ä¿®æ¹config.jsï¼ç®åä½ä¸çµæ´»ï¼** |
| | | ```javascript |
| | | // app/config.js |
| | | module.exports = { |
| | | baseUrl: 'http://192.168.1.100:8080', // æ¹ä¸ºä½ çå
ç½IP |
| | | // ... |
| | | } |
| | | ``` |
| | | |
| | | **æ¹æ³Bï¼ç¯å¢åéé
ç½®ï¼æ¨èï¼** |
| | | ```javascript |
| | | // app/config.js |
| | | module.exports = { |
| | | // æ ¹æ®è¿è¡ç¯å¢èªå¨éæ© |
| | | baseUrl: process.env.NODE_ENV === 'development' |
| | | ? 'http://192.168.1.100:8080' // å¼åç¯å¢ï¼å
ç½IP |
| | | : 'https://api.yourdomain.com', // ç产ç¯å¢ï¼çº¿ä¸åå |
| | | // ... |
| | | } |
| | | ``` |
| | | |
| | | 3. **ç¡®ä¿å端å
许跨å访é®** |
| | | |
| | | æ£æ¥å端é
ç½®ï¼RuoYiæ¡æ¶é»è®¤å·²é
ç½®ï¼ï¼ |
| | | ```java |
| | | // ruoyi-framework/src/main/java/com/ruoyi/framework/config/CorsConfig.java |
| | | @Override |
| | | public void addCorsMappings(CorsRegistry registry) { |
| | | registry.addMapping("/**") |
| | | .allowedOriginPatterns("*") // å
è®¸æææ¥æº |
| | | .allowCredentials(true) |
| | | .allowedMethods("GET", "POST", "PUT", "DELETE") |
| | | .maxAge(3600); |
| | | } |
| | | ``` |
| | | |
| | | 4. **ç¡®ä¿çµèé²ç«å¢å
许访é®** |
| | | |
| | | **Windowsé²ç«å¢**ï¼ |
| | | - æ§å¶é¢æ¿ â Windows Defender é²ç«å¢ â é«çº§è®¾ç½® |
| | | - å
¥ç«è§å â æ°å»ºè§å â ç«¯å£ â TCP â ç¹å®ç«¯å£ 8080 |
| | | - å
è®¸è¿æ¥ |
| | | |
| | | **临æ¶å
³éé²ç«å¢æµè¯**ï¼ |
| | | ```bash |
| | | # Windowsï¼ç®¡çåæéï¼ |
| | | netsh advfirewall set allprofiles state off |
| | | |
| | | # æµè¯å®æåè®°å¾æå¼ |
| | | netsh advfirewall set allprofiles state on |
| | | ``` |
| | | |
| | | 5. **ææºåçµèè¿æ¥åä¸WiFi** |
| | | - ç¡®ä¿ææºåçµèå¨åä¸å±åç½ |
| | | - æå¼å¾®ä¿¡å¼åè
å·¥å
· â é¢è§ â æ«ç çæºè°è¯ |
| | | |
| | | #### ä¼ç¹ï¼ |
| | | - â
å¯ä»¥çæºè°è¯ |
| | | - â
å¢éæåå¯ä»¥å
±äº«è°è¯ |
| | | - â
æ¥è¿çå®ç¯å¢ |
| | | |
| | | #### 缺ç¹ï¼ |
| | | - â IPå°åå¯è½ä¼åå |
| | | - â éè¦é
ç½®é²ç«å¢ |
| | | - â ä»
éåä¸å±åç½ |
| | | |
| | | --- |
| | | |
| | | ### æ¹æ¡3ï¼ä½¿ç¨å
ç½ç©¿éå·¥å
·ï¼æ¨èç¨äºè¿ç¨è°è¯ï¼ |
| | | |
| | | 使ç¨å
ç½ç©¿éå·¥å
·ï¼å¦è±ç壳ãngrokãFRPï¼å°æ¬å°æå¡æ å°å°å
¬ç½ååã |
| | | |
| | | #### 3.1 ä½¿ç¨ ngrokï¼å
è´¹ä¸ç®åï¼ |
| | | |
| | | 1. **ä¸è½½å®è£
ngrok** |
| | | - å®ç½ï¼https://ngrok.com/ |
| | | - ä¸è½½å¯¹åºç³»ç»çæ¬ |
| | | - 注åè´¦å·è·åauthtoken |
| | | |
| | | 2. **å¯å¨å端æå¡** |
| | | ```bash |
| | | # ç¡®ä¿å端è¿è¡å¨8080ç«¯å£ |
| | | cd RuoYi-Vue-master |
| | | java -jar ruoyi-admin.jar |
| | | ``` |
| | | |
| | | 3. **å¯å¨ ngrok** |
| | | ```bash |
| | | # Windows |
| | | ngrok.exe http 8080 |
| | | |
| | | # Mac/Linux |
| | | ./ngrok http 8080 |
| | | ``` |
| | | |
| | | 4. **è·åå
¬ç½å°å** |
| | | ``` |
| | | Session Status online |
| | | Forwarding https://abc123.ngrok.io -> http://localhost:8080 |
| | | ^^^^^^^^^^^^^^^^^^^^^^^^ |
| | | è¿å°±æ¯ä½ çå
¬ç½å°å |
| | | ``` |
| | | |
| | | 5. **ä¿®æ¹é
ç½®** |
| | | ```javascript |
| | | // app/config.js |
| | | module.exports = { |
| | | baseUrl: 'https://abc123.ngrok.io', // ngrokæä¾çå°å |
| | | // ... |
| | | } |
| | | ``` |
| | | |
| | | 6. **å¨å¾®ä¿¡å°ç¨åºåå°é
ç½®åå** |
| | | - ç»å½å¾®ä¿¡å
¬ä¼å¹³å°ï¼https://mp.weixin.qq.com |
| | | - å¼å â å¼å管ç â å¼å设置 â æå¡å¨åå |
| | | - é
ç½® requeståæ³ååï¼`https://abc123.ngrok.io` |
| | | |
| | | #### 3.2 使ç¨è±ç壳ï¼å½å
稳å®ï¼ |
| | | |
| | | 1. **ä¸è½½å®è£
è±ç壳** |
| | | - å®ç½ï¼https://hsk.oray.com/ |
| | | - 注åè´¦å· |
| | | |
| | | 2. **å建å
ç½ç©¿éæ å°** |
| | | - å
ç½ä¸»æºï¼localhost |
| | | - å
ç½ç«¯å£ï¼8080 |
| | | - å¤ç½ååï¼ç³»ç»åé
ï¼å¦ xxx.vicp.funï¼ |
| | | |
| | | 3. **ä¿®æ¹é
ç½®** |
| | | ```javascript |
| | | // app/config.js |
| | | module.exports = { |
| | | baseUrl: 'http://xxx.vicp.fun', // è±ç壳æä¾çåå |
| | | // ... |
| | | } |
| | | ``` |
| | | |
| | | #### ä¼ç¹ï¼ |
| | | - â
å¯ä»¥è¿ç¨è®¿é® |
| | | - â
稳å®çåå |
| | | - â
æ¯æHTTPS |
| | | |
| | | #### 缺ç¹ï¼ |
| | | - â éè¦ç¬¬ä¸æ¹æå¡ |
| | | - â å
è´¹çæéå¶ |
| | | - â å¯è½æå»¶è¿ |
| | | |
| | | --- |
| | | |
| | | ## ä¸ãæ¨èé
ç½®æ¹æ¡ |
| | | |
| | | ### 3.1 å¤ç¯å¢é
ç½®ï¼æä½³å®è·µï¼ |
| | | |
| | | ä¿®æ¹ `app/config.js`ï¼æ¯æå¤ç¯å¢èªå¨åæ¢ï¼ |
| | | |
| | | ```javascript |
| | | // app/config.js |
| | | |
| | | // ç¯å¢é
ç½® |
| | | const ENV_CONFIG = { |
| | | // å¼åç¯å¢ |
| | | development: { |
| | | baseUrl: 'http://192.168.1.100:8080', // ä¿®æ¹ä¸ºä½ çå
ç½IP |
| | | description: 'å¼åç¯å¢' |
| | | }, |
| | | // æµè¯ç¯å¢ |
| | | test: { |
| | | baseUrl: 'http://test.yourdomain.com', |
| | | description: 'æµè¯ç¯å¢' |
| | | }, |
| | | // ç产ç¯å¢ |
| | | production: { |
| | | baseUrl: 'https://api.yourdomain.com', |
| | | description: 'ç产ç¯å¢' |
| | | } |
| | | } |
| | | |
| | | // å½åç¯å¢ï¼æå¨åæ¢ï¼ |
| | | const CURRENT_ENV = 'development' // å¯é: development, test, production |
| | | |
| | | // 导åºé
ç½® |
| | | module.exports = { |
| | | baseUrl: ENV_CONFIG[CURRENT_ENV].baseUrl, |
| | | |
| | | // åºç¨ä¿¡æ¯ |
| | | appInfo: { |
| | | name: "æ°èªè°åº¦ç³»ç»", |
| | | version: "1.1.0", |
| | | logo: "/static/logo.png", |
| | | site_url: "http://ruoyi.vip", |
| | | |
| | | // ç¯å¢ä¿¡æ¯ï¼ç¨äºè°è¯ï¼ |
| | | env: CURRENT_ENV, |
| | | envDescription: ENV_CONFIG[CURRENT_ENV].description, |
| | | |
| | | // åè®®ï¼ä½¿ç¨æ¬å°é¡µé¢ï¼ |
| | | agreements: [ |
| | | { |
| | | title: "éç§æ¿ç", |
| | | url: "/pages/mine/privacy-policy/index" |
| | | }, |
| | | { |
| | | title: "ç¨æ·æå¡åè®®", |
| | | url: "/pages/mine/user-agreement/index" |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ### 3.2 æ¾ç¤ºå½åç¯å¢ä¿¡æ¯ï¼è°è¯ç¨ï¼ |
| | | |
| | | å¨é¦é¡µæ¾ç¤ºå½å使ç¨çæ¥å£å°åï¼ |
| | | |
| | | ```vue |
| | | <!-- app/pages/index.vue --> |
| | | <template> |
| | | <view> |
| | | <!-- å¼åç¯å¢æç¤º --> |
| | | <view v-if="isDev" class="dev-info"> |
| | | <text>{{ envInfo }}</text> |
| | | </view> |
| | | |
| | | <!-- ...å
¶ä»å
容 --> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | isDev: process.env.NODE_ENV === 'development', |
| | | envInfo: '' |
| | | } |
| | | }, |
| | | onLoad() { |
| | | const config = getApp().globalData.config |
| | | this.envInfo = `ç¯å¢ï¼${config.appInfo.envDescription}\næ¥å£ï¼${config.baseUrl}` |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style> |
| | | .dev-info { |
| | | position: fixed; |
| | | bottom: 0; |
| | | left: 0; |
| | | right: 0; |
| | | background: rgba(255, 0, 0, 0.8); |
| | | color: white; |
| | | padding: 10rpx; |
| | | font-size: 20rpx; |
| | | text-align: center; |
| | | z-index: 9999; |
| | | } |
| | | </style> |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## åã宿´é
ç½®æ¥éª¤ï¼æ¨èæµç¨ï¼ |
| | | |
| | | ### æ¥éª¤1: å¯å¨å端æå¡ |
| | | |
| | | ```bash |
| | | # è¿å
¥å端项ç®ç®å½ |
| | | cd d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master |
| | | |
| | | # å¯å¨å端ï¼ç¡®ä¿ç«¯å£8080ï¼ |
| | | # æ¹æ³1: IDEAç´æ¥è¿è¡ RuoYiApplication.java |
| | | # æ¹æ³2: å½ä»¤è¡è¿è¡ |
| | | mvn spring-boot:run |
| | | ``` |
| | | |
| | | ### æ¥éª¤2: æ¥æ¾çµèå
ç½IP |
| | | |
| | | ```bash |
| | | # Windows |
| | | ipconfig |
| | | |
| | | # æ¾å°ç±»ä¼¼è¿æ ·çå°å |
| | | 以太ç½éé
å¨ ä»¥å¤ªç½: |
| | | IPv4 å°å . . . . . . . . . . . . : 192.168.1.100 |
| | | ``` |
| | | |
| | | ### æ¥éª¤3: ä¿®æ¹é
ç½®æä»¶ |
| | | |
| | | ```javascript |
| | | // app/config.js |
| | | module.exports = { |
| | | baseUrl: 'http://192.168.1.100:8080', // æ¹ä¸ºä½ çIP |
| | | // ... |
| | | } |
| | | ``` |
| | | |
| | | ### æ¥éª¤4: 微信å¼åè
å·¥å
·é
ç½® |
| | | |
| | | 1. **æå¼é¡¹ç®** |
| | | - HBuilderX â è¿è¡ â è¿è¡å°å°ç¨åºæ¨¡æå¨ â 微信å¼åè
å·¥å
· |
| | | - æç´æ¥å¨å¾®ä¿¡å¼åè
å·¥å
·ä¸å¯¼å
¥ `app` ç®å½ |
| | | |
| | | 2. **å
³éååæ ¡éª** |
| | | - 详æ
â æ¬å°è®¾ç½® |
| | | - â
å¾é"䏿 ¡éªåæ³åå..." |
| | | |
| | | 3. **æ¸
é¤ç¼åéæ°ç¼è¯** |
| | | - å·¥å
· â æ¸
é¤ç¼å â æ¸
餿æç¼å |
| | | - ç¹å»"ç¼è¯" |
| | | |
| | | ### æ¥éª¤5: éªè¯é
ç½® |
| | | |
| | | 1. **æ£æ¥ç½ç»è¯·æ±** |
| | | - æå¼è°è¯å¨ â Network |
| | | - ç»å½ç³»ç»ï¼æ¥ç请æ±å°åæ¯å¦æ£ç¡® |
| | | |
| | | 2. **æµè¯æ¥å£** |
| | | ```javascript |
| | | // 卿§å¶å°æ§è¡ |
| | | console.log(getApp().globalData.config.baseUrl) |
| | | // åºè¯¥è¾åº: http://192.168.1.100:8080 |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## äºã常è§é®é¢ææ¥ |
| | | |
| | | ### é®é¢1: request:fail url not in domain list |
| | | |
| | | **åå **: ååæ ¡éªæªå
³é |
| | | |
| | | **è§£å³**: |
| | | - 微信å¼åè
å·¥å
· â 详æ
â æ¬å°è®¾ç½® |
| | | - â
å¾é"䏿 ¡éªåæ³åå..." |
| | | |
| | | --- |
| | | |
| | | ### é®é¢2: request:fail -104:net::ERR_CONNECTION_FAILED |
| | | |
| | | **åå **: |
| | | 1. å端æå¡æªå¯å¨ |
| | | 2. IPå°åé误 |
| | | 3. é²ç«å¢é»æ¢ |
| | | |
| | | **è§£å³**: |
| | | ```bash |
| | | # 1. æ£æ¥å端æ¯å¦å¯å¨ |
| | | netstat -ano | findstr 8080 |
| | | |
| | | # 2. æ£æ¥IPæ¯å¦æ£ç¡® |
| | | ipconfig |
| | | |
| | | # 3. æµè¯å端æ¯å¦å¯è®¿é® |
| | | # æµè§å¨æå¼: http://192.168.1.100:8080 |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### é®é¢3: çæºè°è¯æ æ³è®¿é® |
| | | |
| | | **åå **: ææºåçµèä¸å¨åä¸WiFi |
| | | |
| | | **è§£å³**: |
| | | 1. ç¡®ä¿ææºåçµèè¿æ¥åä¸WiFi |
| | | 2. 使ç¨å
ç½IPèélocalhost |
| | | 3. æ£æ¥é²ç«å¢è®¾ç½® |
| | | |
| | | --- |
| | | |
| | | ### é®é¢4: è·¨åé误 |
| | | |
| | | **åå **: å端æªé
置跨å |
| | | |
| | | **è§£å³**: |
| | | ```java |
| | | // ruoyi-framework/src/main/java/com/ruoyi/framework/config/CorsConfig.java |
| | | // ç¡®ä¿å·²é
ç½®CORS |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## å
ãä¸åå¼åå·¥å
·çé
ç½® |
| | | |
| | | ### 6.1 HBuilderX |
| | | |
| | | 1. **è¿è¡å°å¾®ä¿¡å°ç¨åº** |
| | | - èå â è¿è¡ â è¿è¡å°å°ç¨åºæ¨¡æå¨ â 微信å¼åè
å·¥å
· |
| | | |
| | | 2. **é
置微信å¼åè
å·¥å
·è·¯å¾** |
| | | - å·¥å
· â 设置 â è¿è¡é
ç½® |
| | | - é
ç½®"微信å¼åè
å·¥å
·è·¯å¾" |
| | | |
| | | 3. **manifest.jsoné
ç½®** |
| | | - æºç è§å¾ â mp-weixin â appid |
| | | - å¡«åä½ çå°ç¨åºAppID |
| | | |
| | | ### 6.2 ç´æ¥ä½¿ç¨å¾®ä¿¡å¼åè
å·¥å
· |
| | | |
| | | 1. **导å
¥é¡¹ç®** |
| | | - æå¼å¾®ä¿¡å¼åè
å·¥å
· |
| | | - éæ©"导å
¥é¡¹ç®" |
| | | - 项ç®ç®å½ï¼`app` |
| | | - AppIDï¼ä½¿ç¨æµè¯å·æä½ çAppID |
| | | |
| | | 2. **é
ç½®** |
| | | - 详æ
â æ¬å°è®¾ç½® â 䏿 ¡éªåå |
| | | |
| | | --- |
| | | |
| | | ## ä¸ãæ¨èé
ç½®ï¼æç»çæ¬ï¼ |
| | | |
| | | ```javascript |
| | | // app/config.js - 宿´é
ç½®ç¤ºä¾ |
| | | |
| | | // èªå¨æ£æµè¿è¡ç¯å¢ |
| | | const isDev = process.env.NODE_ENV === 'development' |
| | | const isMP = process.env.VUE_APP_PLATFORM === 'mp-weixin' |
| | | |
| | | // è·åæ¬å°IPï¼éè¦æå¨é
ç½®ï¼ |
| | | const LOCAL_IP = '192.168.1.100' // â ï¸ ä¿®æ¹ä¸ºä½ ççµèIP |
| | | |
| | | // ç¯å¢é
ç½® |
| | | const ENV_CONFIG = { |
| | | // æ¬å°å¼å |
| | | local: `http://${LOCAL_IP}:8080`, |
| | | |
| | | // æµè¯ç¯å¢ |
| | | test: 'http://test.yourdomain.com', |
| | | |
| | | // ç产ç¯å¢ |
| | | prod: 'https://api.yourdomain.com' |
| | | } |
| | | |
| | | // èªå¨éæ©ç¯å¢ |
| | | let baseUrl = ENV_CONFIG.local // é»è®¤æ¬å°å¼å |
| | | |
| | | // æ ¹æ®ä¸åæ¡ä»¶éæ©ç¯å¢ |
| | | if (process.env.UNI_PLATFORM === 'h5' && !isDev) { |
| | | // H5ç产ç¯å¢ |
| | | baseUrl = ENV_CONFIG.prod |
| | | } |
| | | |
| | | module.exports = { |
| | | baseUrl: baseUrl, |
| | | |
| | | appInfo: { |
| | | name: "æ°èªè°åº¦ç³»ç»", |
| | | version: "1.1.0", |
| | | logo: "/static/logo.png", |
| | | site_url: "http://ruoyi.vip", |
| | | |
| | | // æ¾ç¤ºå½åç¯å¢ï¼å¼åæ¶å¯è§ï¼ |
| | | showEnv: isDev, |
| | | currentEnv: baseUrl, |
| | | |
| | | agreements: [ |
| | | { |
| | | title: "éç§æ¿ç", |
| | | url: "/pages/mine/privacy-policy/index" |
| | | }, |
| | | { |
| | | title: "ç¨æ·æå¡åè®®", |
| | | url: "/pages/mine/user-agreement/index" |
| | | } |
| | | ] |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## å
«ãæ»ç» |
| | | |
| | | ### å¼åé¶æ®µæ¨èæ¹æ¡ |
| | | |
| | | | åºæ¯ | æ¨èæ¹æ¡ | é
ç½®å¤æåº¦ | |
| | | |------|----------|-----------| |
| | | | 微信å¼åè
å·¥å
·è°è¯ | æ¹æ¡1 + localhost | â ç®å | |
| | | | çæºè°è¯ | æ¹æ¡2 + å
ç½IP | ââ ä¸ç | |
| | | | è¿ç¨è°è¯/æ¼ç¤º | æ¹æ¡3 + å
ç½ç©¿é | âââ 夿 | |
| | | |
| | | ### å¿«éå¼å§ï¼æç®åæ¹å¼ï¼ |
| | | |
| | | 1. **å¯å¨å端**: è¿è¡ RuoYiApplication.java |
| | | 2. **é
ç½®å端**: `config.js` ä¸ `baseUrl: 'http://localhost:8080'` |
| | | 3. **微信工å
·**: å¾é"䏿 ¡éªåæ³åå" |
| | | 4. **å¼å§è°è¯**: ç¹å»"ç¼è¯" |
| | | |
| | | ### 注æäºé¡¹ |
| | | |
| | | â ï¸ **å®å
¨æé**ï¼ |
| | | - ç产ç¯å¢å¿
须使ç¨HTTPSåå |
| | | - ä¸è¦å°æµè¯é
ç½®æäº¤å°ä»£ç ä»åº |
| | | - ä½¿ç¨ `.env` æä»¶ç®¡çææé
ç½® |
| | | |
| | | â ï¸ **æ§è½æé**ï¼ |
| | | - å
ç½ç©¿éä¼å¢å å»¶è¿ |
| | | - 建议ä¼å
使ç¨å±åç½è°è¯ |
| | | - 大æä»¶ä¸ä¼ 建议使ç¨ç´è¿ |
| | | |
| | | --- |
| | | |
| | | 妿å
¶ä»é®é¢ï¼è¯·åèï¼ |
| | | - 微信å°ç¨åºå®æ¹ææ¡£ï¼https://developers.weixin.qq.com/miniprogram/dev/ |
| | | - uni-app宿¹ææ¡£ï¼https://uniapp.dcloud.io/ |
| New file |
| | |
| | | # 微信å°ç¨åºæ¬å°è°è¯ - å¿«éé
ç½®æ¸
å |
| | | |
| | | ## â
é
ç½®æ¥éª¤ï¼5åéå®æï¼ |
| | | |
| | | ### 第1æ¥ï¼æ¥æ¾çµèIPå°åï¼1åéï¼ |
| | | |
| | | **Windowsç³»ç»**ï¼ |
| | | ```bash |
| | | # æå¼å½ä»¤æç¤ºç¬¦ï¼Win+Rï¼è¾å
¥cmdï¼ |
| | | ipconfig |
| | | |
| | | # æ¾å°è¿ä¸è¡ï¼ |
| | | IPv4 å°å . . . . . . . . . . . . : 192.168.1.100 |
| | | ââââââââââââââ |
| | | è®°ä¸è¿ä¸ªIPå°å |
| | | ``` |
| | | |
| | | **Macç³»ç»**ï¼ |
| | | ```bash |
| | | # æå¼ç»ç«¯ |
| | | ifconfig |
| | | |
| | | # æ¾å° en0 æ en1 ä¸ç inet å°å |
| | | inet 192.168.1.100 |
| | | ââââââââââââââ |
| | | è®°ä¸è¿ä¸ªIPå°å |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### 第2æ¥ï¼ä¿®æ¹é
ç½®æä»¶ï¼30ç§ï¼ |
| | | |
| | | æå¼æä»¶ï¼`app/config.js` |
| | | |
| | | æ¾å°ç¬¬6è¡ï¼ä¿®æ¹ä¸ºä½ çIPï¼ |
| | | |
| | | ```javascript |
| | | // ä¿®æ¹å |
| | | const LOCAL_IP = 'localhost' |
| | | |
| | | // ä¿®æ¹åï¼å¡«å
¥ä½ åæè®°ä¸çIPï¼ |
| | | const LOCAL_IP = '192.168.1.100' // â ï¸ æ¹æä½ çIP |
| | | ``` |
| | | |
| | | ä¿åæä»¶ã |
| | | |
| | | --- |
| | | |
| | | ### 第3æ¥ï¼å¯å¨å端æå¡ï¼1åéï¼ |
| | | |
| | | **æ¹æ³1ï¼ä½¿ç¨IDEA** |
| | | - æå¼é¡¹ç® `RuoYi-Vue-master` |
| | | - æ¾å° `ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java` |
| | | - ç¹å»è¿è¡æé® â¶ï¸ |
| | | - çå¾
å¯å¨å®æï¼çå° `Application Run Successfully` |
| | | |
| | | **æ¹æ³2ï¼å½ä»¤è¡** |
| | | ```bash |
| | | cd d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master |
| | | mvn spring-boot:run |
| | | ``` |
| | | |
| | | **éªè¯å端æ¯å¦å¯å¨**ï¼ |
| | | - æµè§å¨æå¼ï¼http://localhost:8080 |
| | | - åºè¯¥çå°è¥ä¾ç³»ç»çç»å½é¡µé¢ |
| | | |
| | | --- |
| | | |
| | | ### 第4æ¥ï¼é
置微信å¼åè
å·¥å
·ï¼2åéï¼ |
| | | |
| | | 1. **æå¼å¾®ä¿¡å¼åè
å·¥å
·** |
| | | - å¦ææ²¡æå®è£
ï¼ä¸è½½å°åï¼https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html |
| | | |
| | | 2. **导å
¥é¡¹ç®** |
| | | - ç¹å»"+"å· â 导å
¥é¡¹ç® |
| | | - ç®å½ï¼`d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\app` |
| | | - AppIDï¼ä½¿ç¨æµè¯å·ï¼æå¡«å
¥ä½ çAppIDï¼ |
| | | - 项ç®åç§°ï¼æ¥æè½¬è¿è°åº¦ç³»ç» |
| | | |
| | | 3. **å
³éååæ ¡éª**ï¼éè¦ï¼ï¼ |
| | | - ç¹å»å³ä¸è§"详æ
" |
| | | - 忢å°"æ¬å°è®¾ç½®"æ ç¾ |
| | | - â
å¾é"䏿 ¡éªåæ³ååãweb-viewï¼ä¸å¡ååï¼ãTLSçæ¬ä»¥åHTTPSè¯ä¹¦" |
| | | |
| | | 4. **ç¼è¯è¿è¡** |
| | | - ç¹å»"ç¼è¯"æé® |
| | | - çå¾
ç¼è¯å®æ |
| | | |
| | | --- |
| | | |
| | | ### 第5æ¥ï¼æµè¯éªè¯ï¼1åéï¼ |
| | | |
| | | 1. **æµè¯ç»å½** |
| | | - å¨å°ç¨åºæ¨¡æå¨ä¸è¾å
¥è´¦å·å¯ç |
| | | - è´¦å·ï¼`admin` |
| | | - å¯ç ï¼`admin123` |
| | | - ç¹å»ç»å½ |
| | | |
| | | 2. **æ£æ¥ç½ç»è¯·æ±** |
| | | - æå¼è°è¯å¨ â Network æ ç¾ |
| | | - åºè¯¥è½çå°è¯·æ±åéå°ï¼`http://192.168.1.100:8080/...` |
| | | |
| | | 3. **妿ç»å½æå** |
| | | - â
é
ç½®å®æï¼ |
| | | |
| | | --- |
| | | |
| | | ## â 常è§é®é¢å¿«éè§£å³ |
| | | |
| | | ### é®é¢1ï¼request:fail -104 |
| | | |
| | | **åå **ï¼å端没æå¯å¨æIPé误 |
| | | |
| | | **è§£å³**ï¼ |
| | | ```bash |
| | | # 1. æ£æ¥å端æ¯å¦è¿è¡ |
| | | æµè§å¨æå¼: http://192.168.1.100:8080 |
| | | |
| | | # 2. 妿æä¸å¼ï¼æ£æ¥IPæ¯å¦æ£ç¡® |
| | | 忬¡æ§è¡: ipconfig |
| | | |
| | | # 3. ç¡®ä¿ç«¯å£8080没æè¢«å ç¨ |
| | | netstat -ano | findstr 8080 |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### é®é¢2ï¼request:fail url not in domain list |
| | | |
| | | **åå **ï¼æ²¡æå
³éååæ ¡éª |
| | | |
| | | **è§£å³**ï¼ |
| | | - 微信å¼åè
å·¥å
· â 详æ
â æ¬å°è®¾ç½® |
| | | - â
å¾é"䏿 ¡éªåæ³åå..." |
| | | |
| | | --- |
| | | |
| | | ### é®é¢3ï¼çæºè°è¯æ æ³è®¿é® |
| | | |
| | | **åå **ï¼ææºåçµèä¸å¨åä¸WiFi |
| | | |
| | | **è§£å³**ï¼ |
| | | 1. ç¡®ä¿ææºåçµèè¿æ¥åä¸WiFi |
| | | 2. æ£æ¥çµèé²ç«å¢æ¯å¦é»æ¢äº8080ç«¯å£ |
| | | 3. 临æ¶å
³éé²ç«å¢æµè¯ï¼ |
| | | ```bash |
| | | # Windowsï¼ç®¡çåæéï¼ |
| | | netsh advfirewall set allprofiles state off |
| | | |
| | | # æµè¯å®æåè®°å¾æå¼ |
| | | netsh advfirewall set allprofiles state on |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## ð± çæºè°è¯é
ç½® |
| | | |
| | | ### çæºé¢è§ |
| | | |
| | | 1. **微信å¼åè
å·¥å
·ä¸** |
| | | - ç¹å»"é¢è§"æé® |
| | | - æ«æäºç»´ç |
| | | |
| | | 2. **ææºè¿æ¥åä¸WiFi** |
| | | - ç¡®ä¿ææºåçµèå¨åä¸ç½ç» |
| | | |
| | | 3. **å¦ææ æ³è®¿é®** |
| | | - æ£æ¥é²ç«å¢è®¾ç½® |
| | | - å°è¯ä¸´æ¶å
³éé²ç«å¢ |
| | | |
| | | --- |
| | | |
| | | ## ð§ ç¯å¢åæ¢ |
| | | |
| | | ### å¼åç¯å¢ï¼æ¬å°è°è¯ï¼ |
| | | |
| | | ```javascript |
| | | // app/config.js |
| | | const CURRENT_ENV = 'development' // ä½¿ç¨æ¬å°IP |
| | | ``` |
| | | |
| | | ### æµè¯ç¯å¢ |
| | | |
| | | ```javascript |
| | | // app/config.js |
| | | const CURRENT_ENV = 'test' // ä½¿ç¨æµè¯æå¡å¨ |
| | | ``` |
| | | |
| | | éè¦å
å¨ç¬¬13-16è¡é
ç½®æµè¯æå¡å¨å°åï¼ |
| | | ```javascript |
| | | test: { |
| | | baseUrl: 'http://test.yourdomain.com', // æ¹ä¸ºå®é
å°å |
| | | description: 'æµè¯ç¯å¢' |
| | | } |
| | | ``` |
| | | |
| | | ### ç产ç¯å¢ |
| | | |
| | | ```javascript |
| | | // app/config.js |
| | | const CURRENT_ENV = 'production' // 使ç¨çº¿ä¸æå¡å¨ |
| | | ``` |
| | | |
| | | éè¦å
å¨ç¬¬17-20è¡é
ç½®ç产æå¡å¨å°åï¼ |
| | | ```javascript |
| | | production: { |
| | | baseUrl: 'https://api.yourdomain.com', // æ¹ä¸ºå®é
å°å |
| | | description: 'ç产ç¯å¢' |
| | | } |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## ð é
ç½®æ£æ¥æ¸
å |
| | | |
| | | å¼å§è°è¯åï¼è¯·ç¡®è®¤ï¼ |
| | | |
| | | - [ ] å端æå¡å·²å¯å¨ï¼http://localhost:8080 å¯ä»¥è®¿é®ï¼ |
| | | - [ ] å·²æ¥å°çµèIPå°å |
| | | - [ ] config.js ä¸å·²å¡«åæ£ç¡®çIPå°å |
| | | - [ ] 微信å¼åè
å·¥å
·å·²å®è£
|
| | | - [ ] å·²å
³éååæ ¡éª |
| | | - [ ] ææºåçµèå¨åä¸WiFiï¼çæºè°è¯æ¶ï¼ |
| | | |
| | | --- |
| | | |
| | | ## ð¡ æç¤º |
| | | |
| | | ### æ¥çå½åé
ç½® |
| | | |
| | | å¨å°ç¨åºä¸æå¼æ§å¶å°ï¼Consoleï¼ï¼æ§è¡ï¼ |
| | | |
| | | ```javascript |
| | | console.log(getApp().globalData.config.baseUrl) |
| | | // åºè¯¥è¾åº: http://192.168.1.100:8080 |
| | | ``` |
| | | |
| | | ### æ¥çå½åç¯å¢ |
| | | |
| | | ```javascript |
| | | const config = getApp().globalData.config |
| | | console.log('ç¯å¢:', config.appInfo.envDescription) |
| | | console.log('æ¥å£:', config.baseUrl) |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ## ð éè¦å¸®å©ï¼ |
| | | |
| | | 妿æç
§ä»¥ä¸æ¥éª¤ä»æ æ³è§£å³ï¼è¯·æä¾ï¼ |
| | | |
| | | 1. é误æªå¾ï¼æ§å¶å° Console å Networkï¼ |
| | | 2. é
ç½®æä»¶å
容ï¼config.jsï¼ |
| | | 3. å端å¯å¨æ¥å¿ |
| | | 4. çµèIPå°å |
| | | |
| | | --- |
| | | |
| | | ## â
é
ç½®æåæ å¿ |
| | | |
| | | å½ä½ çå°ï¼ |
| | | - â
å°ç¨åºè½æ£å¸¸ç»å½ |
| | | - â
Networkä¸è½çå°è¯·æ±åéå°ä½ çIPå°å |
| | | - â
åç«¯è½æ¶å°è¯·æ±å¹¶è¿åæ°æ® |
| | | |
| | | æåä½ ï¼é
ç½®æåï¼ð |
| New file |
| | |
| | | # uni-app 模æ¿è¯æ³ä¿®å¤ - :class æ¹æ³è°ç¨é®é¢ |
| | | |
| | | ## é®é¢æè¿° |
| | | |
| | | ç¼è¯æ¶éå°ä»¥ä¸éè¯¯ï¼ |
| | | |
| | | ``` |
| | | Module Error (from ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/templateLoader.js): |
| | | (Emitted value instead of an instance of Error) |
| | | Errors compiling template: |
| | | :class䏿¯æ getStatusClass(task.taskStatus) è¯æ³ |
| | | ``` |
| | | |
| | | ## é®é¢åå |
| | | |
| | | å¨ uni-app çæ¨¡æ¿ä¸ï¼`:class` 䏿¯æç´æ¥è°ç¨æ¹æ³ï¼ä¾å¦ï¼ |
| | | |
| | | ```vue |
| | | <!-- â éè¯¯åæ³ --> |
| | | <view class="task-status" :class="getStatusClass(task.taskStatus)"> |
| | | ``` |
| | | |
| | | è¿æ¯ uni-app çè¯æ³éå¶ï¼ä¸æ å Vue.js ä¸åã |
| | | |
| | | ## è§£å³æ¹æ¡ |
| | | |
| | | å°æ¹æ³è°ç¨æ¹ä¸ºè¡¨è¾¾å¼æ¼æ¥å符串çå½¢å¼ï¼ä½¿ç¨ä¸å
è¿ç®ç¬¦ï¼æ¡ä»¶è¡¨è¾¾å¼ï¼æ¥å®ç°ï¼ |
| | | |
| | | ```vue |
| | | <!-- â
æ£ç¡®åæ³ --> |
| | | <view class="task-status" :class="task.taskStatus === 'PENDING' ? 'status-pending' : task.taskStatus === 'DEPARTING' ? 'status-departing' : task.taskStatus === 'ARRIVED' ? 'status-arrived' : task.taskStatus === 'RETURNING' ? 'status-returning' : task.taskStatus === 'COMPLETED' ? 'status-completed' : task.taskStatus === 'CANCELLED' ? 'status-cancelled' : task.taskStatus === 'IN_PROGRESS' ? 'status-in-progress' : 'status-default'"> |
| | | ``` |
| | | |
| | | ## ä¿®æ¹æä»¶ |
| | | |
| | | ### 1. app/pages/index.vue |
| | | |
| | | **ä¿®æ¹åï¼** |
| | | ```vue |
| | | <view class="task-status" :class="getStatusClass(task.taskStatus)"> |
| | | {{ getStatusText(task.status) }} |
| | | </view> |
| | | ``` |
| | | |
| | | **ä¿®æ¹åï¼** |
| | | ```vue |
| | | <view class="task-status" :class="task.taskStatus === 'PENDING' ? 'status-pending' : task.taskStatus === 'DEPARTING' ? 'status-departing' : task.taskStatus === 'ARRIVED' ? 'status-arrived' : task.taskStatus === 'RETURNING' ? 'status-returning' : task.taskStatus === 'COMPLETED' ? 'status-completed' : task.taskStatus === 'CANCELLED' ? 'status-cancelled' : task.taskStatus === 'IN_PROGRESS' ? 'status-in-progress' : 'status-default'"> |
| | | {{ getStatusText(task.status) }} |
| | | </view> |
| | | ``` |
| | | |
| | | ### 2. app/pages/task/index.vue |
| | | |
| | | **ä¿®æ¹åï¼** |
| | | ```vue |
| | | <view class="task-status" :class="getStatusClass(task.taskStatus)"> |
| | | {{ getStatusText(task.taskStatus) }} |
| | | </view> |
| | | ``` |
| | | |
| | | **ä¿®æ¹åï¼** |
| | | ```vue |
| | | <view class="task-status" :class="task.taskStatus === 'PENDING' ? 'status-pending' : task.taskStatus === 'DEPARTING' ? 'status-departing' : task.taskStatus === 'ARRIVED' ? 'status-arrived' : task.taskStatus === 'RETURNING' ? 'status-returning' : task.taskStatus === 'COMPLETED' ? 'status-completed' : task.taskStatus === 'CANCELLED' ? 'status-cancelled' : task.taskStatus === 'IN_PROGRESS' ? 'status-in-progress' : 'status-default'"> |
| | | {{ getStatusText(task.taskStatus) }} |
| | | </view> |
| | | ``` |
| | | |
| | | ### 3. app/pages/task/detail.vue |
| | | |
| | | **ä¿®æ¹åï¼** |
| | | ```vue |
| | | <view class="value status" :class="taskDetail.taskStatus.toLowerCase()"> |
| | | {{ getStatusText(taskDetail.taskStatus) }} |
| | | </view> |
| | | ``` |
| | | |
| | | **ä¿®æ¹åï¼** |
| | | ```vue |
| | | <view class="value status" :class="taskDetail.taskStatus === 'PENDING' ? 'pending' : taskDetail.taskStatus === 'DEPARTING' ? 'in_progress' : taskDetail.taskStatus === 'ARRIVED' ? 'in_progress' : taskDetail.taskStatus === 'RETURNING' ? 'in_progress' : taskDetail.taskStatus === 'IN_PROGRESS' ? 'in_progress' : taskDetail.taskStatus === 'COMPLETED' ? 'completed' : taskDetail.taskStatus === 'CANCELLED' ? 'cancelled' : ''"> |
| | | {{ getStatusText(taskDetail.taskStatus) }} |
| | | </view> |
| | | ``` |
| | | |
| | | **说æï¼** |
| | | - `detail.vue` ä¸ä½¿ç¨çæ¯å°åçç¶æç±»åï¼`pending`, `in_progress`, `completed`, `cancelled`ï¼ |
| | | - å°å¤ä¸ªè¿è¡ä¸çç¶æï¼`DEPARTING`, `ARRIVED`, `RETURNING`, `IN_PROGRESS`ï¼é½æ å°ä¸º `in_progress` ç±» |
| | | |
| | | ## ç¶æç±»åæ å° |
| | | |
| | | å `getStatusClass` æ¹æ³çæ å°é»è¾ï¼ |
| | | |
| | | ```javascript |
| | | getStatusClass(status) { |
| | | const statusClassMap = { |
| | | 'PENDING': 'status-pending', // å¾
å¤ç |
| | | 'DEPARTING': 'status-departing', // åºåä¸ |
| | | 'ARRIVED': 'status-arrived', // å·²å°è¾¾ |
| | | 'RETURNING': 'status-returning', // è¿ç¨ä¸ |
| | | 'COMPLETED': 'status-completed', // 已宿 |
| | | 'CANCELLED': 'status-cancelled', // 已忶 |
| | | 'IN_PROGRESS': 'status-in-progress' // å¤çä¸ |
| | | } |
| | | return statusClassMap[status] || 'status-default' |
| | | } |
| | | ``` |
| | | |
| | | ç°å¨ç´æ¥å¨æ¨¡æ¿ä¸ä½¿ç¨ä¸å
表达å¼å®ç°ç¸åçæ å°é»è¾ã |
| | | |
| | | ## uni-app 模æ¿è¯æ³éå¶ |
| | | |
| | | ### 䏿¯æçè¯æ³ |
| | | |
| | | 1. **æ¹æ³è°ç¨** â |
| | | ```vue |
| | | :class="getStatusClass(task.taskStatus)" |
| | | ``` |
| | | |
| | | 2. **å¤æè¡¨è¾¾å¼** â |
| | | ```vue |
| | | :style="{ color: getColor(item.type) }" |
| | | ``` |
| | | |
| | | ### æ¯æçè¯æ³ |
| | | |
| | | 1. **ç®å屿§è®¿é®** â
|
| | | ```vue |
| | | :class="task.statusClass" |
| | | ``` |
| | | |
| | | 2. **ä¸å
è¿ç®ç¬¦** â
|
| | | ```vue |
| | | :class="task.status === 'PENDING' ? 'status-pending' : 'status-default'" |
| | | ``` |
| | | |
| | | 3. **æ°ç»/对象åé¢é** â
|
| | | ```vue |
| | | :class="[task.baseClass, task.statusClass]" |
| | | :class="{ 'active': task.isActive, 'disabled': task.isDisabled }" |
| | | ``` |
| | | |
| | | 4. **计ç®å±æ§** â
|
| | | ```vue |
| | | :class="taskStatusClass" |
| | | |
| | | // å¨ computed ä¸å®ä¹ |
| | | computed: { |
| | | taskStatusClass() { |
| | | return this.getStatusClass(this.task.taskStatus) |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ## æ¿ä»£æ¹æ¡æ¯è¾ |
| | | |
| | | ### æ¹æ¡1ï¼ä¸å
è¿ç®ç¬¦ï¼å·²éç¨ï¼ |
| | | |
| | | **ä¼ç¹ï¼** |
| | | - æ éä¿®æ¹ script é¨å |
| | | - é»è¾ç´è§ï¼å¨æ¨¡æ¿ä¸å¯è§ |
| | | |
| | | **缺ç¹ï¼** |
| | | - 表达å¼è¾é¿ï¼ä»£ç åä½ |
| | | - å¤ä¸ªç¶ææ¶å¯è¯»æ§ç¨å·® |
| | | |
| | | ### æ¹æ¡2ï¼è®¡ç®å±æ§ |
| | | |
| | | ```vue |
| | | <template> |
| | | <view class="task-status" :class="statusClass"> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | computed: { |
| | | statusClass() { |
| | | return this.getStatusClass(this.task.taskStatus) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | ``` |
| | | |
| | | **ä¼ç¹ï¼** |
| | | - æ¨¡æ¿æ´ç®æ´ |
| | | - é»è¾å°è£
å¨ script ä¸ |
| | | |
| | | **缺ç¹ï¼** |
| | | - éè¦ä¸ºåè¡¨ä¸æ¯ä¸ªé¡¹ç®å®ä¹è®¡ç®å±æ§ |
| | | - å¨ `v-for` ä¸ä½¿ç¨æ¶å¤æåº¦è¾é« |
| | | |
| | | ### æ¹æ¡3ï¼é¢å¤çæ°æ® |
| | | |
| | | ```javascript |
| | | loadTasks() { |
| | | listTask(this.queryParams).then(response => { |
| | | this.taskList = response.rows.map(task => ({ |
| | | ...task, |
| | | statusClass: this.getStatusClass(task.taskStatus) |
| | | })) |
| | | }) |
| | | } |
| | | ``` |
| | | |
| | | **ä¼ç¹ï¼** |
| | | - æ¨¡æ¿æç®æ´ |
| | | - æ§è½æå¥½ï¼é¢è®¡ç®ä¸æ¬¡ï¼ |
| | | |
| | | **缺ç¹ï¼** |
| | | - éè¦å¨æ°æ®å è½½æ¶å¤ç |
| | | - å¢å äºæ°æ®å¯¹è±¡çåæ®µ |
| | | |
| | | ## æä½³å®è·µ |
| | | |
| | | ### 对äºå表渲æï¼æ¨èæ¹æ¡1æ3ï¼ |
| | | |
| | | ```vue |
| | | <!-- æ¹æ¡1ï¼ä¸å
è¿ç®ç¬¦ --> |
| | | <view v-for="task in taskList" :key="task.id"> |
| | | <view :class="task.status === 'PENDING' ? 'status-pending' : 'status-default'"> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- æ¹æ¡3ï¼é¢å¤çæ°æ® --> |
| | | <view v-for="task in taskList" :key="task.id"> |
| | | <view :class="task.statusClass"> |
| | | </view> |
| | | </view> |
| | | ``` |
| | | |
| | | ### 对äºå个å
ç´ ï¼æ¨èæ¹æ¡2ï¼ |
| | | |
| | | ```vue |
| | | <!-- æ¹æ¡2ï¼è®¡ç®å±æ§ --> |
| | | <template> |
| | | <view :class="taskStatusClass"> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | computed: { |
| | | taskStatusClass() { |
| | | return this.getStatusClass(this.currentTask.taskStatus) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | ``` |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | 1. **ä¿çæ¹æ³å®ä¹** |
| | | - è½ç¶æ¨¡æ¿ä¸ä¸è½ç´æ¥è°ç¨ `getStatusClass` æ¹æ³ |
| | | - ä½è¯¥æ¹æ³ä»å¯ç¨äºå
¶ä»åºæ¯ï¼å¦é¢å¤çæ°æ®ï¼ |
| | | - 建议ä¿çå¨ä»£ç ä¸ |
| | | |
| | | 2. **表达å¼é¿åº¦** |
| | | - uni-app 对模æ¿è¡¨è¾¾å¼æé¿åº¦éå¶ |
| | | - è¿é¿ç表达å¼å¯è½å¯¼è´ç¼è¯è¦å |
| | | - 建议使ç¨é¢å¤çæ°æ®æ¹æ¡ |
| | | |
| | | 3. **æ§è½èè** |
| | | - ä¸å
è¿ç®ç¬¦å¨æ¯æ¬¡æ¸²ææ¶é½ä¼è®¡ç® |
| | | - 大å表建议使ç¨é¢å¤çæ¹æ¡ |
| | | - 计ç®å±æ§ä¼ç¼åç»æ |
| | | |
| | | ## ç¸å
³ææ¡£ |
| | | |
| | | - [uni-app 模æ¿è¯æ³éå¶](https://uniapp.dcloud.net.cn/tutorial/vue-api.html#%E6%A8%A1%E6%9D%BF%E8%AF%AD%E6%B3%95) |
| | | - [Vue æ¡ä»¶æ¸²æ](https://cn.vuejs.org/guide/essentials/conditional.html) |
| | | - [Vue Class ä¸ Style ç»å®](https://cn.vuejs.org/guide/essentials/class-and-style.html) |
| | | |
| | | ## æ´æ°æ¥å¿ |
| | | |
| | | - **2025-01-25**: ä¿®å¤ `:class` æ¹æ³è°ç¨è¯æ³é误 |
| | | - æä»¶: `app/pages/index.vue` (第57è¡) |
| | | - æä»¶: `app/pages/task/index.vue` (第115è¡) |
| | | - æä»¶: `app/pages/task/detail.vue` (第22è¡) |
| | | - æ¹æ³: å°æ¹æ³è°ç¨æ¹ä¸ºä¸å
è¡¨è¾¾å¼ |
| | | - åå : uni-app 模æ¿ä¸æ¯ææ¹æ³è°ç¨å `.toLowerCase()` çåç¬¦ä¸²æ¹æ³ |
| New file |
| | |
| | | # åå°ä»»å¡ç®¡ç - æ¥æè½¬è¿æ©å±ä¿¡æ¯æ¾ç¤º |
| | | |
| | | ## æ¦è¿° |
| | | |
| | | å¨åå°ç®¡ççé¢çä»»å¡ç®¡çåè½ä¸ï¼æ°å¢å¯¹æ¥æè½¬è¿ä»»å¡åç¦ç¥è½¦ä»»å¡æ©å±ä¿¡æ¯çå±ç¤ºæ¯æï¼ä½¿ç®¡çåè½å¤æ¥ç宿´çä»»å¡è¯¦æ
ã |
| | | |
| | | ## ä¿®æ¹å
容 |
| | | |
| | | ### 1. ä»»å¡è¯¦æ
页é¢å¢å¼º (detail.vue) |
| | | |
| | | **æä»¶**: `ruoyi-ui/src/views/task/general/detail.vue` |
| | | |
| | | #### 1.1 æ·»å æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯å±ç¤º |
| | | |
| | | å¨åºæ¬ä¿¡æ¯ä¹åï¼æ ¹æ®ä»»å¡ç±»å卿æ¾ç¤ºæ©å±ä¿¡æ¯ï¼ |
| | | |
| | | ```vue |
| | | <!-- æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ --> |
| | | <el-descriptions v-if="taskDetail.taskType === 'EMERGENCY_TRANSFER' && taskDetail.emergencyInfo" |
| | | title="æ¥æè½¬è¿ä¿¡æ¯" :column="2" border style="margin-top: 20px;"> |
| | | <el-descriptions-item label="æ£è
å§å">{{ taskDetail.emergencyInfo.patientName }}</el-descriptions-item> |
| | | <el-descriptions-item label="æ£è
æ§å«"> |
| | | <dict-tag :options="dict.type.sys_user_sex" :value="taskDetail.emergencyInfo.patientGender"/> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="æ£è
å¹´é¾">{{ taskDetail.emergencyInfo.patientAge }}</el-descriptions-item> |
| | | <el-descriptions-item label="èç³»çµè¯">{{ taskDetail.emergencyInfo.contactPhone }}</el-descriptions-item> |
| | | <el-descriptions-item label="æ¥éå»é¢" :span="2">{{ taskDetail.emergencyInfo.hospitalName }}</el-descriptions-item> |
| | | <el-descriptions-item label="å°±è¯ç§å®¤" :span="2"> |
| | | <dict-tag v-if="taskDetail.emergencyInfo.hospitalDepartment" |
| | | :options="dict.type.hospital_department" |
| | | :value="taskDetail.emergencyInfo.hospitalDepartment"/> |
| | | <span v-else style="color: #C0C4CC;">--</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="ç
æ
æè¿°" :span="2"> |
| | | <span v-if="taskDetail.emergencyInfo.illnessDescription">{{ taskDetail.emergencyInfo.illnessDescription }}</span> |
| | | <span v-else style="color: #C0C4CC;">--</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="ç¹æ®éæ±" :span="2"> |
| | | <span v-if="taskDetail.emergencyInfo.specialRequirements">{{ taskDetail.emergencyInfo.specialRequirements }}</span> |
| | | <span v-else style="color: #C0C4CC;">--</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="æ¯å¦éè¦æ
æ¶"> |
| | | <el-tag v-if="taskDetail.emergencyInfo.needsStretcher == 1" type="success" size="small">æ¯</el-tag> |
| | | <el-tag v-else type="info" size="small">å¦</el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="æ¯å¦éè¦è½®æ¤
"> |
| | | <el-tag v-if="taskDetail.emergencyInfo.needsWheelchair == 1" type="success" size="small">æ¯</el-tag> |
| | | <el-tag v-else type="info" size="small">å¦</el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="æ¯å¦éè¦æ°§æ°"> |
| | | <el-tag v-if="taskDetail.emergencyInfo.needsOxygen == 1" type="success" size="small">æ¯</el-tag> |
| | | <el-tag v-else type="info" size="small">å¦</el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="ç´§æ¥ç¨åº¦"> |
| | | <el-tag v-if="taskDetail.emergencyInfo.urgencyLevel === 'HIGH'" type="danger" size="small">ç´§æ¥</el-tag> |
| | | <el-tag v-else-if="taskDetail.emergencyInfo.urgencyLevel === 'MEDIUM'" type="warning" size="small">ä¸è¬</el-tag> |
| | | <el-tag v-else-if="taskDetail.emergencyInfo.urgencyLevel === 'LOW'" type="info" size="small">䏿¥</el-tag> |
| | | <span v-else style="color: #C0C4CC;">--</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="éªå人æ°">{{ taskDetail.emergencyInfo.companionCount || 0 }} 人</el-descriptions-item> |
| | | <el-descriptions-item label="é¢ä¼°è´¹ç¨">{{ taskDetail.emergencyInfo.estimatedCost || '--' }} å
</el-descriptions-item> |
| | | </el-descriptions> |
| | | ``` |
| | | |
| | | #### 1.2 æ·»å ç¦ç¥è½¦ä»»å¡æ©å±ä¿¡æ¯å±ç¤º |
| | | |
| | | ```vue |
| | | <!-- ç¦ç¥è½¦ä»»å¡æ©å±ä¿¡æ¯ --> |
| | | <el-descriptions v-if="taskDetail.taskType === 'WELFARE' && taskDetail.welfareInfo" |
| | | title="ç¦ç¥è½¦æå¡ä¿¡æ¯" :column="2" border style="margin-top: 20px;"> |
| | | <el-descriptions-item label="ä¹å®¢å§å">{{ taskDetail.welfareInfo.passengerName }}</el-descriptions-item> |
| | | <el-descriptions-item label="ä¹å®¢æ§å«"> |
| | | <dict-tag :options="dict.type.sys_user_sex" :value="taskDetail.welfareInfo.passengerGender"/> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="ä¹å®¢å¹´é¾">{{ taskDetail.welfareInfo.passengerAge }}</el-descriptions-item> |
| | | <el-descriptions-item label="èç³»çµè¯">{{ taskDetail.welfareInfo.contactPhone }}</el-descriptions-item> |
| | | <el-descriptions-item label="æå¡ç±»å" :span="2"> |
| | | <span v-if="taskDetail.welfareInfo.serviceType">{{ taskDetail.welfareInfo.serviceType }}</span> |
| | | <span v-else style="color: #C0C4CC;">--</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="ç¹æ®éæ±" :span="2"> |
| | | <span v-if="taskDetail.welfareInfo.specialRequirements">{{ taskDetail.welfareInfo.specialRequirements }}</span> |
| | | <span v-else style="color: #C0C4CC;">--</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="æ¯å¦éè¦è½®æ¤
"> |
| | | <el-tag v-if="taskDetail.welfareInfo.needsWheelchair == 1" type="success" size="small">æ¯</el-tag> |
| | | <el-tag v-else type="info" size="small">å¦</el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="éªå人æ°">{{ taskDetail.welfareInfo.companionCount || 0 }} 人</el-descriptions-item> |
| | | <el-descriptions-item label="é¢ä¼°è´¹ç¨">{{ taskDetail.welfareInfo.estimatedCost || '--' }} å
</el-descriptions-item> |
| | | <el-descriptions-item label="å®é
è´¹ç¨">{{ taskDetail.welfareInfo.actualCost || '--' }} å
</el-descriptions-item> |
| | | </el-descriptions> |
| | | ``` |
| | | |
| | | #### 1.3 æ´æ°åå
¸ç±»å |
| | | |
| | | ```javascript |
| | | dicts: [ |
| | | 'sys_task_type', |
| | | 'sys_task_status', |
| | | 'sys_vehicle_type', |
| | | 'sys_task_vehicle_status', |
| | | 'sys_user_sex', // â
æ°å¢ï¼æ§å«åå
¸ |
| | | 'hospital_department' // â
æ°å¢ï¼å»é¢ç§å®¤åå
¸ |
| | | ] |
| | | ``` |
| | | |
| | | ### 2. ä»»å¡å表页é¢ä¼å (index.vue) |
| | | |
| | | **æä»¶**: `ruoyi-ui/src/views/task/general/index.vue` |
| | | |
| | | #### 2.1 æ·»å æ¥æè½¬è¿ä»»å¡æ è¯ |
| | | |
| | | å¨ä»»å¡ç±»ååæ¾ç¤ºç¹æ®å¾æ æ è¯æ¥æè½¬è¿ä»»å¡ï¼ |
| | | |
| | | ```vue |
| | | <el-table-column label="ä»»å¡ç±»å" align="center" prop="taskType" width="120"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.sys_task_type" :value="scope.row.taskType"/> |
| | | <!-- â
æ¥æè½¬è¿ä»»å¡æ¾ç¤ºè¦å徿 --> |
| | | <el-tag v-if="scope.row.taskType === 'EMERGENCY_TRANSFER'" type="danger" size="mini" style="margin-left: 5px;"> |
| | | <i class="el-icon-warning"></i> |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | ``` |
| | | |
| | | ### 3. åç«¯æ°æ®å è½½ï¼å·²å®æï¼ |
| | | |
| | | **æä»¶**: `SysTaskServiceImpl.java` |
| | | |
| | | å端ç `getTaskDetail` æ¹æ³å·²æ£ç¡®å®ç°æ©å±ä¿¡æ¯å è½½ï¼ |
| | | |
| | | ```java |
| | | @Override |
| | | public SysTask getTaskDetail(Long taskId) { |
| | | SysTask task = sysTaskMapper.selectSysTaskByTaskId(taskId); |
| | | if (task != null) { |
| | | // æ¥è¯¢å
³èè½¦è¾ |
| | | task.setAssignedVehicles(sysTaskVehicleMapper.selectSysTaskVehicleByTaskId(taskId)); |
| | | // æ¥è¯¢éä»¶ |
| | | task.setAttachments(sysTaskAttachmentMapper.selectSysTaskAttachmentByTaskId(taskId)); |
| | | // æ¥è¯¢æä½æ¥å¿ |
| | | task.setOperationLogs(sysTaskLogMapper.selectSysTaskLogByTaskId(taskId)); |
| | | |
| | | // â
å è½½æ¥æè½¬è¿æ©å±ä¿¡æ¯ |
| | | if ("EMERGENCY_TRANSFER".equals(task.getTaskType())) { |
| | | SysTaskEmergency emergencyInfo = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId); |
| | | task.setEmergencyInfo(emergencyInfo); |
| | | } |
| | | // â
å è½½ç¦ç¥è½¦æ©å±ä¿¡æ¯ |
| | | else if ("WELFARE".equals(task.getTaskType())) { |
| | | SysTaskWelfare welfareInfo = sysTaskWelfareMapper.selectSysTaskWelfareByTaskId(taskId); |
| | | task.setWelfareInfo(welfareInfo); |
| | | } |
| | | } |
| | | return task; |
| | | } |
| | | ``` |
| | | |
| | | ## åè½å±ç¤º |
| | | |
| | | ### æ¥æè½¬è¿ä»»å¡è¯¦æ
é¡µé¢ |
| | | |
| | | æ¾ç¤ºå
容å
æ¬ï¼ |
| | | |
| | | **åºæ¬ä¿¡æ¯** |
| | | - ä»»å¡ç¼å·ãç±»åãç¶æ |
| | | - åå»ºäººãæ§è¡äººãé¨é¨ |
| | | - åºåå°åãç®çå°å |
| | | - è®¡åæ¶é´ãå®é
æ¶é´ |
| | | |
| | | **æ¥æè½¬è¿ä¿¡æ¯**ï¼ä»
EMERGENCY_TRANSFER ç±»åæ¾ç¤ºï¼ |
| | | - æ£è
ä¿¡æ¯ï¼å§åãæ§å«ãå¹´é¾ãèç³»çµè¯ |
| | | - å»çä¿¡æ¯ï¼æ¥éå»é¢ãå°±è¯ç§å®¤ãç
æ
æè¿° |
| | | - ç¹æ®éæ±ï¼æ
æ¶ãè½®æ¤
ãæ°§æ° |
| | | - ç´§æ¥ç¨åº¦ï¼é«/ä¸/ä½ |
| | | - éªå人æ°ãé¢ä¼°è´¹ç¨ |
| | | |
| | | **ç¦ç¥è½¦æå¡ä¿¡æ¯**ï¼ä»
WELFARE ç±»åæ¾ç¤ºï¼ |
| | | - ä¹å®¢ä¿¡æ¯ï¼å§åãæ§å«ãå¹´é¾ãèç³»çµè¯ |
| | | - æå¡ä¿¡æ¯ï¼æå¡ç±»åãç¹æ®éæ± |
| | | - è¾
å©è®¾å¤ï¼è½®æ¤
éæ± |
| | | - è´¹ç¨ä¿¡æ¯ï¼é¢ä¼°è´¹ç¨ãå®é
è´¹ç¨ãéªåäººæ° |
| | | |
| | | **å
³è车è¾** |
| | | - 车çå·ã车è¾ç±»åãåçåå· |
| | | - åé
æ¶é´ãåé
人ãç¶æ |
| | | |
| | | **ä»»å¡éä»¶** |
| | | - æä»¶å表åä¸è½½ |
| | | |
| | | **æä½æ¥å¿** |
| | | - æ¶é´çº¿å½¢å¼å±ç¤ºæä½è®°å½ |
| | | |
| | | ### ä»»å¡åè¡¨é¡µé¢ |
| | | |
| | | - ä»»å¡å表å±ç¤ºåºæ¬ä¿¡æ¯ |
| | | - æ¥æè½¬è¿ä»»å¡å¸¦æçº¢è²è¦å徿 æ è¯ |
| | | - æ¯ææä»»å¡ç±»åãç¶æçé |
| | | - ç¹å»ä»»å¡ç¼å·æ¥ç详æ
|
| | | |
| | | ## 使ç¨åºæ¯ |
| | | |
| | | ### åºæ¯1ï¼æ¥çæ¥æè½¬è¿ä»»å¡è¯¦æ
|
| | | |
| | | ``` |
| | | 1. è¿å
¥åå°ç®¡ç â ä»»å¡ç®¡ç |
| | | 2. å¨åè¡¨ä¸æ¾å°æ¥æè½¬è¿ä»»å¡ï¼å¸¦çº¢è²è¦å徿 ï¼ |
| | | 3. ç¹å»ä»»å¡ç¼å·æ"æ¥ç"æé® |
| | | 4. æ¥ç宿´çä»»å¡ä¿¡æ¯ï¼å
æ¬ï¼ |
| | | - åºæ¬ä»»å¡ä¿¡æ¯ |
| | | - æ£è
详ç»ä¿¡æ¯ |
| | | - å»çç¸å
³ä¿¡æ¯ |
| | | - ç¹æ®éæ±é
ç½® |
| | | - å
³è车è¾åæ§è¡äººå |
| | | - æä½åå²è®°å½ |
| | | ``` |
| | | |
| | | ### åºæ¯2ï¼çéç¹å®ç±»åä»»å¡ |
| | | |
| | | ``` |
| | | 1. å¨ä»»å¡ç®¡çé¡µé¢ |
| | | 2. 使ç¨"ä»»å¡ç±»å"çéå¨ |
| | | 3. éæ©"æ¥æè½¬è¿" |
| | | 4. æ¥çæææ¥æè½¬è¿ä»»å¡å表 |
| | | ``` |
| | | |
| | | ### åºæ¯3ï¼çæ§ç´§æ¥ä»»å¡ |
| | | |
| | | ``` |
| | | 1. å¨ä»»å¡å表ä¸è¯å«æ¥æè½¬è¿ä»»å¡ï¼çº¢è²è¦å徿 ï¼ |
| | | 2. ç¹å»æ¥ç详æ
|
| | | 3. æ¥ç"ç´§æ¥ç¨åº¦"åæ®µï¼ |
| | | - 红è²"ç´§æ¥"æ ç¾ â é«ä¼å
级å¤ç |
| | | - é»è²"ä¸è¬"æ ç¾ â æ£å¸¸å¤ç |
| | | - ç°è²"䏿¥"æ ç¾ â 常è§å¤ç |
| | | 4. æ ¹æ®ç´§æ¥ç¨åº¦è°åº¦èµæº |
| | | ``` |
| | | |
| | | ## æ¾ç¤ºææ |
| | | |
| | | ### æ¥æè½¬è¿ä»»å¡æ è¯ |
| | | |
| | | - **å表**: ä»»å¡ç±»åæè¾¹æ¾ç¤º `红è²è¦å徿 ` |
| | | - **详æ
**: ç¬ç«ç"æ¥æè½¬è¿ä¿¡æ¯"å¡ç |
| | | |
| | | ### åæ®µæ¾ç¤ºè§å |
| | | |
| | | 1. **å¿
å¡«åæ®µ**: ç´æ¥æ¾ç¤ºå¼ |
| | | 2. **å¯éåæ®µä¸ºç©º**: æ¾ç¤º `--` (ç°è²) |
| | | 3. **å¸å°å段**: ä½¿ç¨æ ç¾æ¾ç¤º |
| | | - `æ¯` â ç»¿è²æ ç¾ |
| | | - `å¦` â ç°è²æ ç¾ |
| | | 4. **æä¸¾å段**: 使ç¨åå
¸æ ç¾ |
| | | - æ§å«: ç·/女 |
| | | - ç§å®¤: 使ç¨å»é¢ç§å®¤åå
¸ |
| | | - ç´§æ¥ç¨åº¦: |
| | | - HIGH â 红è²"ç´§æ¥" |
| | | - MEDIUM â é»è²"ä¸è¬" |
| | | - LOW â ç°è²"䏿¥" |
| | | |
| | | ## æ°æ®æµç¨ |
| | | |
| | | ``` |
| | | å端页é¢å è½½ |
| | | â |
| | | è°ç¨ getTask(taskId) API |
| | | â |
| | | å端 SysTaskServiceImpl.getTaskDetail() |
| | | â |
| | | æ¥è¯¢åºæ¬ä»»å¡ä¿¡æ¯ (sys_task) |
| | | â |
| | | æ ¹æ® task_type 夿 |
| | | ââ EMERGENCY_TRANSFER â æ¥è¯¢ sys_task_emergency |
| | | ââ WELFARE â æ¥è¯¢ sys_task_welfare |
| | | â |
| | | è¿å宿´ä»»å¡å¯¹è±¡ |
| | | â |
| | | åç«¯æ ¹æ® taskType æ¡ä»¶æ¸²ææ©å±ä¿¡æ¯ |
| | | ``` |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | ### 1. æ°æ®å®æ´æ§ |
| | | |
| | | ç¡®ä¿æ©å±ä¿¡æ¯è¡¨ä¸çæ°æ®ä¸ä¸»ä»»å¡è¡¨æ£ç¡®å
³èï¼ |
| | | - `sys_task_emergency.task_id` = `sys_task.task_id` |
| | | - `sys_task_welfare.task_id` = `sys_task.task_id` |
| | | |
| | | ### 2. åå
¸æ°æ®é
ç½® |
| | | |
| | | éè¦ç¡®ä¿ä»¥ä¸åå
¸ç±»åå·²æ£ç¡®é
ç½®ï¼ |
| | | - `sys_user_sex`: æ§å«åå
¸ï¼ç·/å¥³ï¼ |
| | | - `hospital_department`: å»é¢ç§å®¤åå
¸ï¼æ¥è¯ç§ãå¿å
ç§çï¼ |
| | | |
| | | ### 3. æéæ§å¶ |
| | | |
| | | åå°ç®¡ççé¢å·²ææéæ§å¶ï¼ |
| | | ```javascript |
| | | v-hasPermi="['task:general:query']" // æ¥çæé |
| | | v-hasPermi="['task:general:edit']" // ç¼è¾æé |
| | | v-hasPermi="['task:general:assign']" // åé
æé |
| | | ``` |
| | | |
| | | ### 4. 空å¼å¤ç |
| | | |
| | | ææå¯éåæ®µé½åäºç©ºå¼å¤æï¼é¿å
æ¾ç¤º `undefined` æ `null`ï¼ |
| | | ```vue |
| | | <span v-if="taskDetail.emergencyInfo.illnessDescription"> |
| | | {{ taskDetail.emergencyInfo.illnessDescription }} |
| | | </span> |
| | | <span v-else style="color: #C0C4CC;">--</span> |
| | | ``` |
| | | |
| | | ## ç¸å
³æä»¶ |
| | | |
| | | ### å端æä»¶ |
| | | - `/ruoyi-ui/src/views/task/general/index.vue` - ä»»å¡åè¡¨é¡µé¢ |
| | | - `/ruoyi-ui/src/views/task/general/detail.vue` - ä»»å¡è¯¦æ
é¡µé¢ |
| | | |
| | | ### å端æä»¶ |
| | | - `/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/SysTaskController.java` - 任塿§å¶å¨ |
| | | - `/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java` - 任塿å¡å®ç° |
| | | - `/ruoyi-system/src/main/resources/mapper/system/SysTaskMapper.xml` - ä»»å¡Mapper |
| | | - `/ruoyi-system/src/main/resources/mapper/system/SysTaskEmergencyMapper.xml` - æ¥æè½¬è¿Mapper |
| | | - `/ruoyi-system/src/main/resources/mapper/system/SysTaskWelfareMapper.xml` - ç¦ç¥è½¦Mapper |
| | | |
| | | ### å®ä½ç±» |
| | | - `/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTask.java` - ä»»å¡å®ä½ |
| | | - `/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskEmergency.java` - æ¥æè½¬è¿æ©å±å®ä½ |
| | | - `/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysTaskWelfare.java` - ç¦ç¥è½¦æ©å±å®ä½ |
| | | |
| | | ## æµè¯å»ºè®® |
| | | |
| | | ### æµè¯ç¨ä¾1ï¼æ¥çæ¥æè½¬è¿ä»»å¡è¯¦æ
|
| | | |
| | | ``` |
| | | åç½®æ¡ä»¶ï¼ç³»ç»ä¸å卿¥æè½¬è¿ä»»å¡ |
| | | æ¥éª¤ï¼ |
| | | 1. ç»å½åå°ç®¡çç³»ç» |
| | | 2. è¿å
¥ä»»å¡ç®¡çé¡µé¢ |
| | | 3. æ¾å°ä¸æ¡æ¥æè½¬è¿ä»»å¡ï¼æçº¢è²è¦å徿 ï¼ |
| | | 4. ç¹å»ä»»å¡ç¼å·æ¥ç详æ
|
| | | éªè¯ï¼ |
| | | - æ¾ç¤ºåºæ¬ä»»å¡ä¿¡æ¯ |
| | | - æ¾ç¤º"æ¥æè½¬è¿ä¿¡æ¯"å¡ç |
| | | - æææ£è
ä¿¡æ¯æ£ç¡®æ¾ç¤º |
| | | - å»é¢ãç§å®¤ä¿¡æ¯æ£ç¡®æ¾ç¤º |
| | | - ç¹æ®éæ±æ ç¾æ£ç¡®æ¾ç¤º |
| | | - ç´§æ¥ç¨åº¦æ ç¾é¢è²æ£ç¡® |
| | | ``` |
| | | |
| | | ### æµè¯ç¨ä¾2ï¼æ¥çç¦ç¥è½¦ä»»å¡è¯¦æ
|
| | | |
| | | ``` |
| | | åç½®æ¡ä»¶ï¼ç³»ç»ä¸åå¨ç¦ç¥è½¦ä»»å¡ |
| | | æ¥éª¤ï¼ |
| | | 1. è¿å
¥ä»»å¡ç®¡çé¡µé¢ |
| | | 2. æ¾å°ä¸æ¡ç¦ç¥è½¦ä»»å¡ |
| | | 3. ç¹å»æ¥ç详æ
|
| | | éªè¯ï¼ |
| | | - æ¾ç¤ºåºæ¬ä»»å¡ä¿¡æ¯ |
| | | - æ¾ç¤º"ç¦ç¥è½¦æå¡ä¿¡æ¯"å¡ç |
| | | - ä¹å®¢ä¿¡æ¯æ£ç¡®æ¾ç¤º |
| | | - æå¡ç±»åãè´¹ç¨ä¿¡æ¯æ£ç¡®æ¾ç¤º |
| | | ``` |
| | | |
| | | ### æµè¯ç¨ä¾3ï¼ç©ºå¼æ¾ç¤º |
| | | |
| | | ``` |
| | | åç½®æ¡ä»¶ï¼åå»ºä¸æ¡åªå¡«å¿
å¡«åæ®µçæ¥æè½¬è¿ä»»å¡ |
| | | æ¥éª¤ï¼ |
| | | 1. æ¥çä»»å¡è¯¦æ
|
| | | éªè¯ï¼ |
| | | - å¯éåæ®µæ¾ç¤º "--"ï¼ç°è²ï¼ |
| | | - ä¸åºç° undefined æ null |
| | | - 页é¢å¸å±æ£å¸¸ |
| | | ``` |
| | | |
| | | ## æ´æ°æ¥å¿ |
| | | |
| | | - **2025-01-25**: åå§çæ¬ |
| | | - åå°ä»»å¡è¯¦æ
页颿¯ææ¥æè½¬è¿æ©å±ä¿¡æ¯æ¾ç¤º |
| | | - åå°ä»»å¡è¯¦æ
页颿¯æç¦ç¥è½¦æ©å±ä¿¡æ¯æ¾ç¤º |
| | | - ä»»å¡åè¡¨é¡µé¢æ·»å æ¥æè½¬è¿ä»»å¡å¾æ æ è¯ |
| | | - æ°å¢æ§å«åå»é¢ç§å®¤åå
¸æ¯æ |
| New file |
| | |
| | | # ç¨æ·åè®®ä¸éç§æ¿çå®å说æ |
| | | |
| | | ## ä¸ãåè½æ¦è¿° |
| | | |
| | | ä¸ºæ¥æè½¬è¿è°åº¦ç³»ç»å®åäºç¨æ·åè®®åéç§æ¿çåè½ï¼ç¬¦åä¸å½æ³å¾æ³è§è¦æ±ï¼ã个人信æ¯ä¿æ¤æ³ãããç½ç»å®å
¨æ³ãããæ°æ³å
¸ãçï¼ï¼æåç¨æ·ä½éªåæ³å¾åè§æ§ã |
| | | |
| | | ## äºãå®ç°å
容 |
| | | |
| | | ### 2.1 æ°å¢é¡µé¢ |
| | | |
| | | #### 1. ç¨æ·æå¡åè®®é¡µé¢ |
| | | - **æä»¶è·¯å¾**: `app/pages/mine/user-agreement/index.vue` |
| | | - **è·¯ç±è·¯å¾**: `/pages/mine/user-agreement/index` |
| | | - **页颿 é¢**: ç¨æ·æå¡åè®® |
| | | |
| | | **åè®®å
å®¹ç« è**: |
| | | 1. 欢è¿ä½¿ç¨æ¥æè½¬è¿è°åº¦ç³»ç» |
| | | 2. æå¡è¯´æï¼ç³»ç»åè½ãæå¡èå´ï¼ |
| | | 3. è´¦å·æ³¨åä¸ä½¿ç¨ï¼è´¦å·ç®¡çãä¿¡æ¯ç宿§ï¼ |
| | | 4. ç¨æ·è¡ä¸ºè§èï¼æ³å¾åè§ãç¦æ¢è¡ä¸ºãè䏿ä½ï¼ |
| | | 5. éç§ä¿æ¤ï¼ä¿¡æ¯æ¶éã使ç¨ãä¿æ¤ï¼ |
| | | 6. ç¥è¯äº§æï¼å
å®¹æææã使ç¨éå¶ï¼ |
| | | 7. æå¡ä¸ææç»æ¢ï¼ä¸ææ
å½¢ãéç¥æºå¶ãè´¦å·æ³¨éï¼ |
| | | 8. å
责声æï¼è´£ä»»çå®ãé£é©æç¤ºï¼ |
| | | 9. åè®®åæ´ï¼ä¿®æ¹æºå¶ãçææ¹å¼ï¼ |
| | | 10. äºè®®è§£å³ï¼æ³å¾éç¨ãç®¡è¾æ³é¢ï¼ |
| | | 11. å
¶ä»ï¼å®æ´æ§ãå¯å岿§ãè§£éæï¼ |
| | | 12. èç³»æä»¬ï¼é®ç®±ãçµè¯ã工使¶é´ï¼ |
| | | |
| | | **页é¢ç¹ç¹**: |
| | | - ç§»å¨ç«¯ä¼åçUI设计 |
| | | - æ¸
æ°çå±çº§ç»æ |
| | | - æè¯»çæçæ ·å¼ |
| | | - è¿åæé®å¯¼èª |
| | | - æ»å¨æ¥ç宿´å
容 |
| | | |
| | | #### 2. éç§æ¿çé¡µé¢ |
| | | - **æä»¶è·¯å¾**: `app/pages/mine/privacy-policy/index.vue` |
| | | - **è·¯ç±è·¯å¾**: `/pages/mine/privacy-policy/index` |
| | | - **页颿 é¢**: éç§æ¿ç |
| | | |
| | | **æ¿çå
å®¹ç« è**: |
| | | 1. å¼è¨ï¼æ³å¾åè§ãæ¿çç®çï¼ |
| | | 2. ä¿¡æ¯æ¶éä¸ä½¿ç¨ |
| | | - è´¦å·æ³¨åä¸ç»å½ï¼ææºå·ãå§åãé¨é¨ãèä½ï¼ |
| | | - ä»»å¡è°åº¦æå¡ï¼ä½ç½®ä¿¡æ¯ãä»»å¡ä¿¡æ¯ã车è¾ä¿¡æ¯ï¼ |
| | | - æ¶æ¯æ¨éæå¡ï¼è®¾å¤ä¿¡æ¯ãæ¨étokenï¼ |
| | | - ç³»ç»å®å
¨ä¸ä¼åï¼æ¥å¿ãç½ç»ãä½¿ç¨æ
åµï¼ |
| | | 3. Cookieååç±»ææ¯ï¼ç¨éãç®¡çæ¹å¼ï¼ |
| | | 4. ä¿¡æ¯å
±äº«ã转让ãå
¬å¼æ«é²ï¼ååãä¾å¤æ
å½¢ï¼ |
| | | 5. ä¿¡æ¯å®å
¨ä¿æ¤æªæ½ï¼å å¯ãè®¿é®æ§å¶ã审计ãåºæ¥ååºï¼ |
| | | 6. ç¨æ·æå©ç®¡çï¼è®¿é®ãæ´æ£ãå é¤ã注éãæ¤ååæï¼ |
| | | 7. æªæå¹´äººä¿æ¤ï¼æå¡éå¶ãçæ¤äººåæï¼ |
| | | 8. è·¨å¢ä¼ è¾ï¼å¢å
åå¨ï¼ |
| | | 9. æ¿çæ´æ°ï¼åæ´éç¥ãçææ¹å¼ï¼ |
| | | 10. èç³»æä»¬ï¼é®ç®±ãçµè¯ãååºæ¶é´ï¼ |
| | | 11. å®ä¹ï¼ä¸ªäººä¿¡æ¯ãææä¸ªäººä¿¡æ¯ãå é¤ï¼ |
| | | |
| | | **页é¢ç¹ç¹**: |
| | | - 符åã个人信æ¯ä¿æ¤æ³ãè¦æ± |
| | | - ææä¿¡æ¯é«äº®æ¾ç¤ºï¼é»è²èæ¯ + æ©è²è¾¹æ¡ï¼ |
| | | - 详ç»çå类说æ |
| | | - æç¡®çç¨æ·æå© |
| | | - ä¸ä¸çæ³å¾æ¯è¯ |
| | | |
| | | ### 2.2 ä¿®æ¹é¡µé¢ |
| | | |
| | | #### 1. ç»å½é¡µé¢ (`app/pages/login.vue`) |
| | | |
| | | **ä¿®æ¹å
容**: |
| | | - å°åè®®é¾æ¥ä»å¤é¨URLæ¹ä¸ºæ¬å°é¡µé¢ |
| | | - `handlePrivacy()` æ¹æ³ï¼è·³è½¬å° `/pages/mine/privacy-policy/index` |
| | | - `handleUserAgrement()` æ¹æ³ï¼è·³è½¬å° `/pages/mine/user-agreement/index` |
| | | |
| | | **ä¿®æ¹å**: |
| | | ```javascript |
| | | handlePrivacy() { |
| | | let site = this.globalConfig.appInfo.agreements[0] |
| | | this.$tab.navigateTo(`/pages/common/webview/index?title=${site.title}&url=${site.url}`) |
| | | } |
| | | ``` |
| | | |
| | | **ä¿®æ¹å**: |
| | | ```javascript |
| | | handlePrivacy() { |
| | | this.$tab.navigateTo('/pages/mine/privacy-policy/index') |
| | | } |
| | | ``` |
| | | |
| | | #### 2. 注åé¡µé¢ (`app/pages/register.vue`) |
| | | |
| | | **æ°å¢åè½**: |
| | | |
| | | 1. **åè®®åæcheckbox** |
| | | ```vue |
| | | <view class="agreement-section"> |
| | | <checkbox-group @change="handleAgreementChange"> |
| | | <label class="agreement-label"> |
| | | <checkbox value="agreed" :checked="agreedToTerms" color="#007AFF" /> |
| | | <text class="agreement-text"> |
| | | æå·²é
è¯»å¹¶åæ |
| | | <text class="agreement-link" @click.stop="handleUserAgreement">ãç¨æ·æå¡åè®®ã</text> |
| | | å |
| | | <text class="agreement-link" @click.stop="handlePrivacy">ãéç§æ¿çã</text> |
| | | </text> |
| | | </label> |
| | | </checkbox-group> |
| | | </view> |
| | | ``` |
| | | |
| | | 2. **æ°æ®å段** |
| | | ```javascript |
| | | data() { |
| | | return { |
| | | agreedToTerms: false, // æ¯å¦åæåè®® |
| | | // ... å
¶ä»å段 |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | 3. **éªè¯é»è¾** |
| | | ```javascript |
| | | async handleRegister() { |
| | | // ... å
¶ä»éªè¯ |
| | | if (!this.agreedToTerms) { |
| | | this.$modal.msgError("请å
é
读并åæç¨æ·æå¡åè®®åéç§æ¿ç") |
| | | return |
| | | } |
| | | // ... 注åé»è¾ |
| | | } |
| | | ``` |
| | | |
| | | 4. **æ°å¢æ¹æ³** |
| | | ```javascript |
| | | // åè®®éæ©åæ´ |
| | | handleAgreementChange(e) { |
| | | this.agreedToTerms = e.detail.value.length > 0 |
| | | }, |
| | | // ç¨æ·åè®® |
| | | handleUserAgreement() { |
| | | this.$tab.navigateTo('/pages/mine/user-agreement/index') |
| | | }, |
| | | // éç§æ¿ç |
| | | handlePrivacy() { |
| | | this.$tab.navigateTo('/pages/mine/privacy-policy/index') |
| | | } |
| | | ``` |
| | | |
| | | 5. **æ ·å¼è°æ´** |
| | | ```scss |
| | | .agreement-section { |
| | | margin: 30rpx 0; |
| | | |
| | | .agreement-label { |
| | | display: flex; |
| | | align-items: flex-start; |
| | | |
| | | checkbox { |
| | | margin-right: 15rpx; |
| | | transform: scale(0.9); |
| | | } |
| | | |
| | | .agreement-text { |
| | | flex: 1; |
| | | font-size: 24rpx; |
| | | color: #666; |
| | | line-height: 1.6; |
| | | text-align: left; |
| | | |
| | | .agreement-link { |
| | | color: #007AFF; |
| | | text-decoration: underline; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | #### 3. "æç"é¡µé¢ (`app/pages/mine/index.vue`) |
| | | |
| | | **æ°å¢èå项**: |
| | | |
| | | å¨"ç¼è¾èµæ"å"常è§é®é¢"ä¹é´æå
¥ä¸¤ä¸ªèåé¡¹ï¼ |
| | | |
| | | ```vue |
| | | <view class="list-cell list-cell-arrow" @click="handleUserAgreement"> |
| | | <view class="menu-item-box"> |
| | | <view class="iconfont icon-text menu-icon"></view> |
| | | <view>ç¨æ·æå¡åè®®</view> |
| | | </view> |
| | | </view> |
| | | <view class="list-cell list-cell-arrow" @click="handlePrivacyPolicy"> |
| | | <view class="menu-item-box"> |
| | | <view class="iconfont icon-safe menu-icon"></view> |
| | | <view>éç§æ¿ç</view> |
| | | </view> |
| | | </view> |
| | | ``` |
| | | |
| | | **æ°å¢æ¹æ³**: |
| | | ```javascript |
| | | handleUserAgreement() { |
| | | this.$tab.navigateTo('/pages/mine/user-agreement/index') |
| | | }, |
| | | handlePrivacyPolicy() { |
| | | this.$tab.navigateTo('/pages/mine/privacy-policy/index') |
| | | } |
| | | ``` |
| | | |
| | | ### 2.3 è·¯ç±é
ç½® |
| | | |
| | | å¨ `app/pages.json` ä¸å·²æ·»å è·¯ç±é
ç½®ï¼ |
| | | |
| | | ```json |
| | | { |
| | | "path": "pages/mine/user-agreement/index", |
| | | "style": { |
| | | "navigationBarTitleText": "ç¨æ·æå¡åè®®" |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/mine/privacy-policy/index", |
| | | "style": { |
| | | "navigationBarTitleText": "éç§æ¿ç" |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ## ä¸ãæ³å¾åè§è¦ç¹ |
| | | |
| | | ### 3.1 符åçæ³å¾æ³è§ |
| | | |
| | | 1. **ãä¸å人æ°å
±åå½ä¸ªäººä¿¡æ¯ä¿æ¤æ³ã** |
| | | - æç¡®åç¥æ¶éç个人信æ¯ç±»å |
| | | - 说æä¸ªäººä¿¡æ¯ç使ç¨ç®ç |
| | | - æ æ³¨ææä¸ªäººä¿¡æ¯ï¼ä½ç½®ä¿¡æ¯ï¼ |
| | | - æç¡®ç¨æ·çå项æå© |
| | | |
| | | 2. **ãä¸å人æ°å
±åå½ç½ç»å®å
¨æ³ã** |
| | | - ä¿¡æ¯å®å
¨ä¿æ¤æªæ½ |
| | | - æ°æ®åå¨å¨å¢å
|
| | | - å®å
¨äºä»¶åºæ¥ååº |
| | | |
| | | 3. **ãä¸å人æ°å
±å彿°æ³å
¸ã** |
| | | - ååæ¡æ¬¾è§è |
| | | - äºè®®è§£å³æºå¶ |
| | | - ç¨æ·æçä¿æ¤ |
| | | |
| | | ### 3.2 å
³é®åè§å
容 |
| | | |
| | | #### ä¿¡æ¯æ¶éåç¥ |
| | | - â
æç¡®ååºæ¶éçä¿¡æ¯ç±»å |
| | | - â
è¯´ææ¯ç§ä¿¡æ¯çç¨é |
| | | - â
æ æ³¨ææä¿¡æ¯ï¼ä½ç½®ãå»çå¥åº·ï¼ |
| | | - â
æä¾æç»ææçå½±å说æ |
| | | |
| | | #### ç¨æ·æå© |
| | | - â
访é®åæ´æ£ä¸ªäººä¿¡æ¯çæå© |
| | | - â
å é¤ä¸ªäººä¿¡æ¯çæå© |
| | | - â
注éè´¦å·çæå© |
| | | - â
æ¤ååæçæå© |
| | | |
| | | #### ä¿¡æ¯å®å
¨ |
| | | - â
æ°æ®å å¯ä¼ è¾ååå¨ |
| | | - â
è®¿é®æ§å¶åæé管ç |
| | | - â
å®å
¨å®¡è®¡æºå¶ |
| | | - â
å®å
¨äºä»¶åºæ¥ååº |
| | | |
| | | #### ç¨æ·åæ |
| | | - â
æ³¨åæ¶å¿
é¡»å¾éåæåè®® |
| | | - â
åè®®å¯éæ¶æ¥ç |
| | | - â
åè®®åæ´æ¶éç¥ç¨æ· |
| | | |
| | | ## åãä½¿ç¨æ¹å¼ |
| | | |
| | | ### 4.1 ç¨æ·è®¿é®è·¯å¾ |
| | | |
| | | 1. **ç»å½é¡µé¢** |
| | | - ç¹å»"ãç¨æ·åè®®ã"æ"ãéç§åè®®ã"龿¥ |
| | | - ç´æ¥è·³è½¬å°å¯¹åºé¡µé¢ |
| | | |
| | | 2. **注å页é¢** |
| | | - å¿
é¡»å¾éåè®®åæcheckboxæè½æ³¨å |
| | | - ç¹å»åè®®é¾æ¥å¯æ¥ç详ç»å
容 |
| | | - ä½¿ç¨ `@click.stop` 鲿¢äºä»¶å泡 |
| | | |
| | | 3. **"æç"页é¢** |
| | | - éè¿èå项"ç¨æ·æå¡åè®®"è®¿é® |
| | | - éè¿èå项"éç§æ¿ç"è®¿é® |
| | | |
| | | ### 4.2 å¼åéæ |
| | | |
| | | å¦éå¨å
¶ä»é¡µé¢å¼ç¨åè®®ï¼ä½¿ç¨ä»¥ä¸ä»£ç ï¼ |
| | | |
| | | ```javascript |
| | | // 跳转å°ç¨æ·åè®® |
| | | this.$tab.navigateTo('/pages/mine/user-agreement/index') |
| | | |
| | | // 跳转å°éç§æ¿ç |
| | | this.$tab.navigateTo('/pages/mine/privacy-policy/index') |
| | | ``` |
| | | |
| | | ## äºãå®å¶å建议 |
| | | |
| | | ### 5.1 å¿
须修æ¹çå
容 |
| | | |
| | | å¨å®é
é¨ç½²åï¼è¯·å¡å¿
ä¿®æ¹ä»¥ä¸å
å®¹ï¼ |
| | | |
| | | 1. **èç³»æ¹å¼**ï¼ä¸¤ä¸ªæä»¶é½éè¦ä¿®æ¹ï¼ |
| | | ```vue |
| | | <!-- ç¨æ·æå¡åè®® --> |
| | | <text class="section-text"> |
| | | çµåé®ç®±ï¼support@example.com <!-- æ¹ä¸ºå®é
é®ç®± --> |
| | | </text> |
| | | <text class="section-text"> |
| | | 客æçµè¯ï¼400-XXX-XXXX <!-- æ¹ä¸ºå®é
çµè¯ --> |
| | | </text> |
| | | |
| | | <!-- éç§æ¿ç --> |
| | | <text class="section-text"> |
| | | çµåé®ç®±ï¼privacy@example.com <!-- æ¹ä¸ºå®é
é®ç®± --> |
| | | </text> |
| | | <text class="section-text"> |
| | | 客æçµè¯ï¼400-XXX-XXXX <!-- æ¹ä¸ºå®é
çµè¯ --> |
| | | </text> |
| | | ``` |
| | | |
| | | 2. **æ´æ°æ¥æåçææ¥æ** |
| | | ```vue |
| | | <view class="update-time">æ´æ°æ¥æï¼2025å¹´1æ25æ¥</view> <!-- æ¹ä¸ºå®é
æ¥æ --> |
| | | <view class="effect-time">çææ¥æï¼2025å¹´1æ25æ¥</view> <!-- æ¹ä¸ºå®é
æ¥æ --> |
| | | ``` |
| | | |
| | | 3. **è¿è¥ä¸»ä½ä¿¡æ¯** |
| | | - å¦æææ£å¼çå
¬å¸åç§°ï¼è¯·å¨åè®®ä¸æ·»å |
| | | - 妿æè¥ä¸æ§ç
§ä¿¡æ¯ï¼å»ºè®®å¨"å
³äºæä»¬"ä¸è¡¥å
|
| | | |
| | | ### 5.2 å¯éä¼åå
容 |
| | | |
| | | 1. **æ·»å çæ¬å·ç®¡ç** |
| | | - å¨åè®®é¡¶é¨æ¾ç¤ºçæ¬å·ï¼å¦ v1.0ï¼ |
| | | - è®°å½åå²çæ¬åæ´ |
| | | |
| | | 2. **æ·»å ä¸è½½åè½** |
| | | - å
è®¸ç¨æ·ä¸è½½PDFçæ¬çåè®® |
| | | - æ¹ä¾¿ç¨æ·ä¿å忥é
|
| | | |
| | | 3. **æ·»å æç´¢åè½** |
| | | - 对äºå
容è¾é¿çåè®®ï¼æä¾å
³é®è¯æç´¢ |
| | | - å¿«éå®ä½å°ç¸å
³ç« è |
| | | |
| | | 4. **å½é
忝æ** |
| | | - å¦éæ¯æå¤è¯è¨ï¼å¯æ·»å è¯è¨åæ¢åè½ |
| | | - åå¤è±æçæ¬çåè®® |
| | | |
| | | ### 5.3 æ³å¾å®¡æ ¸å»ºè®® |
| | | |
| | | **éè¦æç¤º**: è½ç¶æä»¬çåè®®å
容已尽å¯è½ç¬¦åæ³å¾è¦æ±ï¼ä½ä»å»ºè®®ï¼ |
| | | |
| | | 1. **ä¸ä¸å®¡æ ¸** |
| | | - 请贵å
¬å¸çæ³å¾é¡¾é®å®¡æ ¸åè®®å
容 |
| | | - æ ¹æ®å®é
ä¸å¡æ
åµè°æ´æ¡æ¬¾ |
| | | |
| | | 2. **è¡ä¸ç¹æ®è¦æ±** |
| | | - å»çæ¥æè¡ä¸å¯è½æç¹æ®çæ³å¾è¦æ± |
| | | - 请å¨è¯¢å»çæ³å¾ä¸å®¶ |
| | | |
| | | 3. **å®ææ´æ°** |
| | | - éçæ³å¾æ³è§çååï¼å®ææ´æ°åè®®å
容 |
| | | - ç¹å«å
³æ³¨ã个人信æ¯ä¿æ¤æ³ãç宿½ç»å |
| | | |
| | | ## å
ãææ¯å®ç°ç»è |
| | | |
| | | ### 6.1 页é¢ç»æ |
| | | |
| | | ``` |
| | | åè®®é¡µé¢ |
| | | âââ Headerï¼é¡¶é¨å¯¼èªæ ï¼ |
| | | â âââ è¿åæé® |
| | | â âââ 页颿 é¢ |
| | | âââ Contentï¼å
容åºåï¼ |
| | | âââ ScrollViewï¼å¯æ»å¨å®¹å¨ï¼ |
| | | âââ åè®®å
容 |
| | | âââ æ´æ°æ¥æ |
| | | âââ çææ¥æ |
| | | âââ ç« èå
容 |
| | | â âââ ç« èæ é¢ |
| | | â âââ å°èæ é¢ |
| | | â âââ æ£æ |
| | | â âââ å表项 |
| | | âââ 页è |
| | | ``` |
| | | |
| | | ### 6.2 æ ·å¼ç³»ç» |
| | | |
| | | **ååºå¼è®¾è®¡**: |
| | | - ä½¿ç¨ `rpx` åä½ï¼èªå¨éé
ä¸åå±å¹å°ºå¯¸ |
| | | - æå°åä½ `24rpx`ï¼æ£æåä½ `28rpx`ï¼æ é¢åä½ `32rpx` |
| | | |
| | | **é¢è²æ¹æ¡**: |
| | | - 主è²è°ï¼`#333`ï¼æ·±ç°ï¼ |
| | | - æ¬¡è¦æåï¼`#666`ï¼ä¸ç°ï¼ |
| | | - æç¤ºæåï¼`#999`ï¼æµ
ç°ï¼ |
| | | - é«äº®è²ï¼`#007AFF`ï¼èè²ï¼ |
| | | - ææä¿¡æ¯èæ¯ï¼`#fff8e6`ï¼æ·¡é»ï¼ |
| | | - ææä¿¡æ¯è¾¹æ¡ï¼`#ff9500`ï¼æ©è²ï¼ |
| | | |
| | | **å¸å±ç¹ç¹**: |
| | | - å
容åºåï¼ç½è²èæ¯ï¼åè§å¡ç |
| | | - è¡é«ï¼`1.8`ï¼å¢å¼ºå¯è¯»æ§ |
| | | - 段è½é´è·ï¼`15rpx`ï¼æ¸
æ°åé |
| | | - å表缩è¿ï¼`40rpx`ï¼å±çº§ææ¾ |
| | | |
| | | ### 6.3 交äºè®¾è®¡ |
| | | |
| | | 1. **è¿å导èª** |
| | | ```javascript |
| | | goBack() { |
| | | uni.navigateBack() |
| | | } |
| | | ``` |
| | | |
| | | 2. **æ»å¨æ¥ç** |
| | | - ä½¿ç¨ `scroll-view` ç»ä»¶ |
| | | - æ¯æåç´æ»å¨ |
| | | - èªå¨éèæ»å¨æ¡ï¼ä¿æç¾è§ï¼ |
| | | |
| | | 3. **龿¥ç¹å»** |
| | | - åè®®ä¸ç龿¥ä½¿ç¨èè²æ è¯ |
| | | - ç¹å»å¯è·³è½¬å°å¯¹åºé¡µé¢ |
| | | - ä½¿ç¨ `@click.stop` 鲿¢äºä»¶å泡 |
| | | |
| | | ## ä¸ãç»´æ¤åæ´æ° |
| | | |
| | | ### 7.1 åè®®æ´æ°æµç¨ |
| | | |
| | | å½éè¦æ´æ°åè®®å
容æ¶ï¼ |
| | | |
| | | 1. **ä¿®æ¹å
容** |
| | | - å¨å¯¹åºç `.vue` æä»¶ä¸ä¿®æ¹åè®®ææ¬ |
| | | - æ´æ°"æ´æ°æ¥æ"å"çææ¥æ" |
| | | |
| | | 2. **éç¥ç¨æ·**ï¼å»ºè®®å®ç°ï¼ |
| | | - å¨ç¨æ·ä¸æ¬¡ç»å½æ¶æ¾ç¤ºåè®®æ´æ°æç¤º |
| | | - è¦æ±ç¨æ·éæ°åæåè®® |
| | | - è®°å½ç¨æ·åæçåè®®çæ¬å· |
| | | |
| | | 3. **ä¿ååå²çæ¬**ï¼å»ºè®®å®ç°ï¼ |
| | | - 卿°æ®åºä¸ä¿ååè®®çåå²çæ¬ |
| | | - è®°å½ç¨æ·åæçæ¯åªä¸ªçæ¬ |
| | | - æ¹ä¾¿è¿½æº¯å审计 |
| | | |
| | | ### 7.2 çæ§ååé¦ |
| | | |
| | | **ç¨æ·å馿¶é**: |
| | | - å¨åè®®é¡µé¢æ·»å "æè§åé¦"å
¥å£ |
| | | - æ¶éç¨æ·å¯¹åè®®å
容ççé® |
| | | - åæ¶ååºç¨æ·çå¨è¯¢ |
| | | |
| | | **æ°æ®ç»è®¡**: |
| | | - ç»è®¡åè®®çæ¥çæ¬¡æ° |
| | | - åæç¨æ·çåçæ¶é´ |
| | | - è¯å«ç¨æ·å
³æ³¨çç« è |
| | | |
| | | ## å
«ã注æäºé¡¹ |
| | | |
| | | ### 8.1 å¼å注æäºé¡¹ |
| | | |
| | | 1. **å符ç¼ç ** |
| | | - ç¡®ä¿æä»¶ä½¿ç¨ UTF-8 ç¼ç |
| | | - é¿å
䏿乱ç é®é¢ |
| | | |
| | | 2. **跨平å°å
¼å®¹** |
| | | - å¨å¾®ä¿¡å°ç¨åºãH5ãApp䏿µè¯ |
| | | - ç¡®ä¿æ»å¨å导èªåè½æ£å¸¸ |
| | | |
| | | 3. **æ§è½ä¼å** |
| | | - åè®®å
容è¾é¿ï¼æ³¨æé¡µé¢å è½½æ§è½ |
| | | - å¯ä»¥èèæå è½½æå页æ¾ç¤º |
| | | |
| | | ### 8.2 åè§æ³¨æäºé¡¹ |
| | | |
| | | 1. **å¿
é¡»åæ** |
| | | - æ³¨åæ¶å¿
é¡»å¾éåæåè®® |
| | | - ä¸è½é»è®¤å¾éï¼å¿
é¡»ç¨æ·ä¸»å¨æä½ |
| | | |
| | | 2. **æäºè®¿é®** |
| | | - åè®®é¾æ¥å¿
é¡»æ¸
æ°å¯è§ |
| | | - éæ¶å¯ä»¥æ¥ç宿´åè®® |
| | | |
| | | 3. **æç¡®åç¥** |
| | | - æ¶éææä¿¡æ¯æ¶å¿
é¡»æç¡®åç¥ |
| | | - 说ææç»ææçå½±å |
| | | |
| | | 4. **è·ååæ** |
| | | - éè¦æéï¼å¦å®ä½ï¼éåç¬ææ |
| | | - ä¸è½ä¸æ¬¡æ§æææææé |
| | | |
| | | ## ä¹ãåç»ä¼å建议 |
| | | |
| | | 1. **æ·»å åè®®çæ¬ç®¡çç³»ç»** |
| | | - å¨åå°ç®¡çç³»ç»ä¸æ·»å åè®®çæ¬ç®¡ç |
| | | - æ¯æå¨çº¿ç¼è¾åé¢è§ |
| | | - èªå¨è®°å½æ´æ°åå² |
| | | |
| | | 2. **å®ç°åè®®åæè®°å½** |
| | | - 卿°æ®åºä¸è®°å½ç¨æ·åæåè®®çæ¶é´åçæ¬ |
| | | - å½åè®®æ´æ°æ¶ï¼æç¤ºç¨æ·éæ°åæ |
| | | - 符åã个人信æ¯ä¿æ¤æ³ãçè¦æ± |
| | | |
| | | 3. **æ·»å å议导åºåè½** |
| | | - å
è®¸ç¨æ·å¯¼åºPDFçæ¬ |
| | | - æ¹ä¾¿ç¨æ·ä¿ååæå° |
| | | |
| | | 4. **ä¼åç§»å¨ç«¯ä½éª** |
| | | - æ·»å ç®å½å¯¼èªï¼å¿«éè·³è½¬å°æå®ç« è |
| | | - ä¼åé¿ææ¬çé
读ä½éª |
| | | - æ·»å å¤é´æ¨¡å¼ |
| | | |
| | | ## åãæä»¶æ¸
å |
| | | |
| | | ### æ°å¢æä»¶ |
| | | - `app/pages/mine/user-agreement/index.vue` - ç¨æ·æå¡åè®®é¡µé¢ |
| | | - `app/pages/mine/privacy-policy/index.vue` - éç§æ¿çé¡µé¢ |
| | | - `prd/ç¨æ·åè®®ä¸éç§æ¿çå®å说æ.md` - æ¬è¯´æææ¡£ |
| | | |
| | | ### ä¿®æ¹æä»¶ |
| | | - `app/pages/login.vue` - ä¿®æ¹åè®®é¾æ¥æå |
| | | - `app/pages/register.vue` - æ·»å åè®®åæcheckbox |
| | | - `app/pages/mine/index.vue` - æ·»å åè®®èåå
¥å£ |
| | | - `app/pages.json` - æ·»å è·¯ç±é
ç½®ï¼ä¹å已添å ï¼ |
| | | |
| | | ## åä¸ãæ»ç» |
| | | |
| | | æ¬æ¬¡å®åå·¥ä½å®ç°äºï¼ |
| | | |
| | | â
**宿´çç¨æ·åè®®åéç§æ¿ç页é¢** |
| | | â
**符åä¸å½æ³å¾æ³è§è¦æ±** |
| | | â
**æ³¨åæ¶å¼ºå¶åæåè®®** |
| | | â
**å¤å¤ä¾¿æ·è®¿é®å
¥å£** |
| | | â
**ç§»å¨ç«¯ä¼åçUI设计** |
| | | â
**ææä¿¡æ¯é«äº®æç¤º** |
| | | â
**æ¸
æ°çå
å®¹ç»æ** |
| | | â
**ä¸ä¸çæ³å¾æ¯è¯** |
| | | |
| | | 请å¨å®é
é¨ç½²åï¼å¡å¿
ï¼ |
| | | 1. ä¿®æ¹èç³»æ¹å¼ä¸ºå®é
ä¿¡æ¯ |
| | | 2. æ´æ°æ¥æä¸ºå®é
æ¥æ |
| | | 3. 请æ³å¾é¡¾é®å®¡æ ¸åè®®å
容 |
| | | 4. æ ¹æ®å®é
ä¸å¡è°æ´æ¡æ¬¾ |
| | | |
| | | 妿任ä½é®é¢æéè¦è¿ä¸æ¥è°æ´ï¼è¯·éæ¶èç³»å¼åå¢éï¼ |
| New file |
| | |
| | | # ç¨æ·åè®®ä¸éç§æ¿çå®å说æ |
| | | |
| | | ## æ¦è¿° |
| | | |
| | | ä¸ºæ¥æè½¬è¿è°åº¦ç³»ç»æ·»å äºå®æ´çç¨æ·æå¡åè®®åéç§æ¿çï¼ç¡®ä¿ç¬¦åä¸å½æ³å¾æ³è§è¦æ±ï¼ä¿æ¤ç¨æ·æçå个人信æ¯å®å
¨ã |
| | | |
| | | ## æ°å¢æä»¶ |
| | | |
| | | ### 1. ç¨æ·æå¡åè®®é¡µé¢ |
| | | |
| | | **æä»¶è·¯å¾**: `app/pages/mine/user-agreement/index.vue` |
| | | |
| | | **主è¦å
容**: |
| | | - **æå¡è¯´æ**: ç³»ç»åè½ãæå¡èå´ãåè½è°æ´è¯´æ |
| | | - **è´¦å·æ³¨åä¸ä½¿ç¨**: è´¦å·ç®¡çè§èãä¿¡æ¯ç宿§è¦æ± |
| | | - **ç¨æ·è¡ä¸ºè§è**: åæ³ä½¿ç¨è¦æ±ãç¦æ¢è¡ä¸ºå表ãè䏿ä½è§è |
| | | - **éç§ä¿æ¤**: ä¿¡æ¯æ¶é说æãéç§æ¿çå¼ç¨ |
| | | - **ç¥è¯äº§æ**: ç³»ç»å
容å½å±ã使ç¨éå¶ |
| | | - **æå¡ä¸ææç»æ¢**: 䏿æ
å½¢ãéç¥æºå¶ãè´¦å·æ³¨é |
| | | - **å
责声æ**: 责任èå´ãåèæ§è¯´æ |
| | | - **åè®®åæ´**: ä¿®æ¹æºå¶ãç¨æ·éæ©æ |
| | | - **äºè®®è§£å³**: éç¨æ³å¾ãè§£å³éå¾ |
| | | - **èç³»æ¹å¼**: 客æé®ç®±ãçµè¯ã工使¶é´ |
| | | |
| | | **ç¹è²åè½**: |
| | | - ð± ç§»å¨ç«¯ä¼åå¸å± |
| | | - ð æ¸
æ°çç« èç»æ |
| | | - ð¨ å好çè§è§è®¾è®¡ |
| | | - â
éç¹å
容çªåºæ¾ç¤º |
| | | - ð è¿åæé®æ¯æ |
| | | |
| | | ### 2. éç§æ¿çé¡µé¢ |
| | | |
| | | **æä»¶è·¯å¾**: `app/pages/mine/privacy-policy/index.vue` |
| | | |
| | | **主è¦å
容**: |
| | | - **å¼è¨**: éç§ä¿æ¤æ¿è¯ºãæ¿çéç¨èå´ |
| | | - **ä¿¡æ¯æ¶éä¸ä½¿ç¨**: |
| | | - è´¦å·æ³¨åä¿¡æ¯ï¼ææºå·ãå§åãé¨é¨ãèä½ï¼ |
| | | - ä»»å¡è°åº¦ä¿¡æ¯ï¼ä½ç½®ãæ£è
ä¿¡æ¯ã车è¾ä¿¡æ¯ï¼ |
| | | - æ¶æ¯æ¨éä¿¡æ¯ï¼è®¾å¤ä¿¡æ¯ãæ¨étokenï¼ |
| | | - ç³»ç»ä¼åä¿¡æ¯ï¼æ¥å¿ãç½ç»ãä½¿ç¨æ
åµï¼ |
| | | - **Cookieååç±»ææ¯**: 使ç¨ç®çãç®¡çæ¹å¼ |
| | | - **ä¿¡æ¯å
±äº«ã转让ãå
¬å¼æ«é²**: å
±äº«æ
å½¢ã转让éå¶ãæ«é²æ¡ä»¶ |
| | | - **ä¿¡æ¯å®å
¨ä¿æ¤**: |
| | | - æ°æ®å å¯ï¼SSL/TLSãæææ°æ®å å¯ï¼ |
| | | - è®¿é®æ§å¶ï¼æé管çãå®¡æ¹æºå¶ï¼ |
| | | - å®å
¨å®¡è®¡ï¼å®æè¯ä¼°ï¼ |
| | | - 人å管çï¼èº«ä»½è®¤è¯ï¼ |
| | | - åºæ¥ååºï¼äºä»¶é¢æ¡ï¼ |
| | | - **ç¨æ·æå©**: |
| | | - 访é®åæ´æ£ä¿¡æ¯ |
| | | - å é¤ä¸ªäººä¿¡æ¯ |
| | | - 注éè´¦å· |
| | | - æ¤ååæ |
| | | - **æªæå¹´äººä¿æ¤**: é¢å对象说æãç¹æ®ä¿æ¤æªæ½ |
| | | - **è·¨å¢ä¼ è¾**: æ°æ®åå¨ä½ç½®è¯´æ |
| | | - **æ¿çæ´æ°**: 修订éç¥æºå¶ |
| | | - **èç³»æ¹å¼**: éç§é®é¢èç³»æ¸ é |
| | | - **æ¯è¯å®ä¹**: 个人信æ¯ãææä¿¡æ¯çå®ä¹ |
| | | |
| | | **ç¹è²åè½**: |
| | | - ð ææä¿¡æ¯é«äº®æ¾ç¤º |
| | | - ð 详ç»çä¿¡æ¯ç±»å说æ |
| | | - ð¡ï¸ å®å
¨ä¿æ¤æªæ½è¯¦è§£ |
| | | - â¡ ç¨æ·æå©æç¡®å举 |
| | | - ð å¤ç§èç³»æ¹å¼ |
| | | |
| | | ## è·¯ç±é
ç½® |
| | | |
| | | å·²å¨ `app/pages.json` 䏿·»å è·¯ç±é
ç½®ï¼ |
| | | |
| | | ```json |
| | | { |
| | | "path": "pages/mine/user-agreement/index", |
| | | "style": { |
| | | "navigationBarTitleText": "ç¨æ·æå¡åè®®" |
| | | } |
| | | }, |
| | | { |
| | | "path": "pages/mine/privacy-policy/index", |
| | | "style": { |
| | | "navigationBarTitleText": "éç§æ¿ç" |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ## ä½¿ç¨æ¹å¼ |
| | | |
| | | ### ä»"æç"页é¢è·³è½¬ |
| | | |
| | | ```vue |
| | | <template> |
| | | <view class="setting-item" @click="viewUserAgreement"> |
| | | <text>ç¨æ·æå¡åè®®</text> |
| | | <uni-icons type="arrowright" size="16"></uni-icons> |
| | | </view> |
| | | |
| | | <view class="setting-item" @click="viewPrivacyPolicy"> |
| | | <text>éç§æ¿ç</text> |
| | | <uni-icons type="arrowright" size="16"></uni-icons> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | methods: { |
| | | viewUserAgreement() { |
| | | uni.navigateTo({ |
| | | url: '/pages/mine/user-agreement/index' |
| | | }) |
| | | }, |
| | | viewPrivacyPolicy() { |
| | | uni.navigateTo({ |
| | | url: '/pages/mine/privacy-policy/index' |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | ``` |
| | | |
| | | ### 卿³¨å页é¢å¼ç¨ |
| | | |
| | | ```vue |
| | | <template> |
| | | <view class="agreement-tips"> |
| | | <checkbox-group @change="agreeChange"> |
| | | <label> |
| | | <checkbox value="agree" :checked="agreedToTerms" /> |
| | | <text>æå·²é
读并åæ</text> |
| | | <text class="link" @click.stop="viewUserAgreement">ãç¨æ·æå¡åè®®ã</text> |
| | | <text>å</text> |
| | | <text class="link" @click.stop="viewPrivacyPolicy">ãéç§æ¿çã</text> |
| | | </label> |
| | | </checkbox-group> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return { |
| | | agreedToTerms: false |
| | | } |
| | | }, |
| | | methods: { |
| | | agreeChange(e) { |
| | | this.agreedToTerms = e.detail.value.includes('agree') |
| | | }, |
| | | viewUserAgreement() { |
| | | uni.navigateTo({ |
| | | url: '/pages/mine/user-agreement/index' |
| | | }) |
| | | }, |
| | | viewPrivacyPolicy() { |
| | | uni.navigateTo({ |
| | | url: '/pages/mine/privacy-policy/index' |
| | | }) |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | ``` |
| | | |
| | | ## æ³å¾åè§è¦ç¹ |
| | | |
| | | ### 1. 符åã个人信æ¯ä¿æ¤æ³ãè¦æ± |
| | | |
| | | â
**æç¡®åç¥**: æ¸
æ¥è¯´ææ¶éåªäºä¸ªäººä¿¡æ¯ |
| | | â
**ç¨é说æ**: 详ç»è¯´ææ¯ç±»ä¿¡æ¯ç使ç¨ç®ç |
| | | â
**ææä¿¡æ¯æ 注**: 对ä½ç½®ä¿¡æ¯çæææ°æ®ç¹å«æ 注 |
| | | â
**ç¨æ·æå©**: æç¡®ç¨æ·è®¿é®ãæ´æ£ãå é¤çæå© |
| | | â
**å®å
¨ä¿æ¤**: 说æéåçå®å
¨ä¿æ¤æªæ½ |
| | | |
| | | ### 2. 符åãç½ç»å®å
¨æ³ãè¦æ± |
| | | |
| | | â
**æ°æ®å®å
¨**: è¯´ææ°æ®å å¯ãè®¿é®æ§å¶çæªæ½ |
| | | â
**äºä»¶åºæ¥**: æç¡®å®å
¨äºä»¶çå¤çåéç¥æºå¶ |
| | | â
**æ°æ®åå¨**: è¯´ææ°æ®åå¨å¨å¢å
|
| | | |
| | | ### 3. 符åãæ°æ³å
¸ãè¦æ± |
| | | |
| | | â
**éç§æä¿æ¤**: å°éç¨æ·éç§æ |
| | | â
**个人信æ¯ä¿æ¤**: åæ³ãæ£å½ãå¿
è¦åå |
| | | â
**æªæå¹´äººä¿æ¤**: ç¹å«ä¿æ¤æªæ½ |
| | | |
| | | ## å®å¶å建议 |
| | | |
| | | ### æ ¹æ®å®é
æ
åµä¿®æ¹ä»¥ä¸å
å®¹ï¼ |
| | | |
| | | 1. **èç³»æ¹å¼** |
| | | - çµåé®ç®±ï¼å° `support@example.com` æ¹ä¸ºå®é
é®ç®± |
| | | - 客æçµè¯ï¼å° `400-XXX-XXXX` æ¹ä¸ºå®é
çµè¯ |
| | | - éç§é®ç®±ï¼å° `privacy@example.com` æ¹ä¸ºå®é
é®ç®± |
| | | |
| | | 2. **å
¬å¸ä¿¡æ¯** |
| | | - æ ¹æ®å®é
è¿è¥ä¸»ä½å®åå
¬å¸åç§° |
| | | - æ·»å å
¬å¸æ³¨åå°å |
| | | - æ·»å ç»ä¸ç¤¾ä¼ä¿¡ç¨ä»£ç |
| | | |
| | | 3. **æ°æ®å¤ç** |
| | | - æ ¹æ®å®é
ä¸å¡è°æ´æ¶éçä¿¡æ¯ç±»å |
| | | - è¡¥å
ç¬¬ä¸æ¹æå¡åä¿¡æ¯ï¼å¦å°å¾æå¡ï¼ |
| | | - å®åæ°æ®ä¿åæé说æ |
| | | |
| | | 4. **ç¹å®åºæ¯** |
| | | - æ ¹æ®å®é
ä¸å¡è¡¥å
ç¹æ®åºæ¯çéç§å¤ç |
| | | - æ·»å å
·ä½çå»çæ°æ®å¤ç说æ |
| | | - å®åæ£è
ä¿¡æ¯ä¿æ¤ç»å |
| | | |
| | | ## æ ·å¼ç¹ç¹ |
| | | |
| | | ### éç¨æ ·å¼ |
| | | |
| | | - **ååºå¼å¸å±**: éé
ä¸åå±å¹å°ºå¯¸ |
| | | - **æ¸
æ°å±çº§**: æ é¢ãå°æ é¢ãæ£æå±æ¬¡åæ |
| | | - **æè¯»æ§**: åéçåå·ãè¡é«ãé´è· |
| | | - **è§è§å¼å¯¼**: 使ç¨å¾æ ãé¢è²å¼ºè°éç¹ |
| | | |
| | | ### éç§æ¿çç¹æ®æ ·å¼ |
| | | |
| | | ```scss |
| | | .highlight { |
| | | background-color: #fff8e6; // æ·¡é»è²èæ¯ |
| | | padding: 20rpx; |
| | | border-left: 4rpx solid #ff9500; // æ©è²å·¦è¾¹æ¡ |
| | | border-radius: 8rpx; |
| | | font-weight: bold; |
| | | color: #333; |
| | | } |
| | | ``` |
| | | |
| | | ç¨äºçªåºæ¾ç¤ºææä¿¡æ¯ãéè¦æç¤ºçå
容ã |
| | | |
| | | ### åè¡¨æ ·å¼ |
| | | |
| | | ```scss |
| | | .indent { |
| | | padding-left: 40rpx; |
| | | position: relative; |
| | | |
| | | &::before { |
| | | content: ''; |
| | | position: absolute; |
| | | left: 20rpx; |
| | | top: 18rpx; |
| | | width: 8rpx; |
| | | height: 8rpx; |
| | | background-color: #666; |
| | | border-radius: 50%; |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ç¨äºæ¾ç¤ºé¡¹ç®å表ï¼ä½¿ç¨åç¹æ è®°ã |
| | | |
| | | ## ç»´æ¤å»ºè®® |
| | | |
| | | ### å®ææ´æ° |
| | | |
| | | 1. **æ³å¾æ³è§åæ´æ¶**: åæ¶æ´æ°ç¸å
³æ¡æ¬¾ |
| | | 2. **åè½åæ´æ¶**: æ´æ°åè½è¯´æåä¿¡æ¯æ¶é说æ |
| | | 3. **å®å
¨æªæ½å级æ¶**: æ´æ°å®å
¨ä¿æ¤è¯´æ |
| | | 4. **è³å°æ¯å¹´ä¸æ¬¡**: 审æ¥åæ´æ°æ´ä½å
容 |
| | | |
| | | ### çæ¬ç®¡ç |
| | | |
| | | å»ºè®®å¨æä»¶é¡¶é¨æ·»å çæ¬è®°å½ï¼ |
| | | |
| | | ```vue |
| | | <view class="version-info"> |
| | | <text>çæ¬ï¼v1.0</text> |
| | | <text>æ´æ°æ¥æï¼2025å¹´1æ25æ¥</text> |
| | | <text>çææ¥æï¼2025å¹´1æ25æ¥</text> |
| | | </view> |
| | | ``` |
| | | |
| | | ### åæ´éç¥ |
| | | |
| | | å½åè®®ææ¿çæé大忴æ¶ï¼åºï¼ |
| | | 1. å¨ç³»ç»ä¸å¼¹çªéç¥ç¨æ· |
| | | 2. è¦æ±ç¨æ·éæ°åæ |
| | | 3. ä¿çåæ´è®°å½ |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | ### 1. æ³å¾å®¡æ ¸ |
| | | |
| | | â ï¸ **éè¦**: å»ºè®®å¨æ£å¼ä½¿ç¨åï¼è¯·ä¸ä¸å¾å¸å®¡æ ¸åè®®åæ¿çå
容ï¼ç¡®ä¿å®å
¨ç¬¦åï¼ |
| | | - ã个人信æ¯ä¿æ¤æ³ã |
| | | - ãç½ç»å®å
¨æ³ã |
| | | - ãæ°æ³å
¸ã |
| | | - ãæ°æ®å®å
¨æ³ã |
| | | - ç¸å
³è¡ä¸è§èï¼å»çè¡ä¸ï¼ |
| | | |
| | | ### 2. å»çæ°æ®ç¹æ®æ§ |
| | | |
| | | ç±äºæ¶åå»çæ¥æä¸å¡ï¼å¯è½éè¦è¡¥å
ï¼ |
| | | - æ£è
å»çæ°æ®çç¹æ®ä¿æ¤æªæ½ |
| | | - å»çä¿¡æ¯è±æå¤ç |
| | | - å»çæ°æ®è®¿é®æé管ç |
| | | - 符åå»çè¡ä¸æ°æ®å®å
¨è§è |
| | | |
| | | ### 3. æææé说æ |
| | | |
| | | 对äºä½ç½®ä¿¡æ¯çæææéï¼éè¦ï¼ |
| | | - å¨é¦æ¬¡ä½¿ç¨æ¶å¼¹çªè¯´æ |
| | | - æä¾æç»é项 |
| | | - 说ææç»åçå½±å |
| | | - å
è®¸éæ¶æ¤åææ |
| | | |
| | | ### 4. æªæå¹´äººä¿æ¤ |
| | | |
| | | å¦æç³»ç»å¯è½è¢«æªæå¹´äººä½¿ç¨ï¼éè¦ï¼ |
| | | - æ·»å å¹´é¾éªè¯æºå¶ |
| | | - è¦æ±çæ¤äººåæ |
| | | - ç¹æ®çéç§ä¿æ¤æªæ½ |
| | | |
| | | ## ç¸å
³æä»¶ |
| | | |
| | | - `/app/pages/mine/user-agreement/index.vue` - ç¨æ·æå¡åè®®é¡µé¢ |
| | | - `/app/pages/mine/privacy-policy/index.vue` - éç§æ¿çé¡µé¢ |
| | | - `/app/pages.json` - è·¯ç±é
ç½®æä»¶ |
| | | |
| | | ## æ´æ°æ¥å¿ |
| | | |
| | | - **2025-01-25**: åå§çæ¬ |
| | | - åå»ºç¨æ·æå¡åè®®é¡µé¢ |
| | | - å建éç§æ¿çé¡µé¢ |
| | | - æ·»å è·¯ç±é
ç½® |
| | | - å®åæ³å¾åè§å
容 |
| New file |
| | |
| | | # ç»å½æ³¨ååè®®é¾æ¥ä¼å说æ |
| | | |
| | | ## é®é¢æè¿° |
| | | |
| | | ç¨æ·åé¦ç»å½çé¢çéç§åè®®åç¨æ·åè®®é¾æ¥ï¼ |
| | | 1. ä½ç½®å¤ªé ä¸ï¼å®¹æè¢«å
¶ä»å
ç´ é®æ¡ |
| | | 2. ç¹å»åºå太å°ï¼ä¸å®¹æç¹å» |
| | | 3. ç¹å»å¯è½æ ååº |
| | | |
| | | ## ä¼åæ¹æ¡ |
| | | |
| | | ### ä¸ãç»å½é¡µé¢ (`app/pages/login.vue`) |
| | | |
| | | #### 1.1 模æ¿ä¼å |
| | | |
| | | **ä¿®æ¹å**: |
| | | ```vue |
| | | <view class="xieyi text-center"> |
| | | <text class="text-grey1">ç»å½å³ä»£è¡¨åæ</text> |
| | | <text @click="handleUserAgrement" class="text-blue">ãç¨æ·åè®®ã</text> |
| | | <text @click="handlePrivacy" class="text-blue">ãéç§åè®®ã</text> |
| | | </view> |
| | | ``` |
| | | |
| | | **ä¿®æ¹å**: |
| | | ```vue |
| | | <view class="xieyi text-center"> |
| | | <text class="text-grey1">ç»å½å³ä»£è¡¨åæ</text> |
| | | <text @click.stop="handleUserAgrement" class="text-blue agreement-link">ãç¨æ·åè®®ã</text> |
| | | <text class="text-grey1">å</text> |
| | | <text @click.stop="handlePrivacy" class="text-blue agreement-link">ãéç§åè®®ã</text> |
| | | </view> |
| | | ``` |
| | | |
| | | **ä¼åç¹**: |
| | | - â
æ·»å `@click.stop` 黿¢äºä»¶å泡 |
| | | - â
æ·»å `agreement-link` ç±»åï¼å¢å ç¹å»åºå |
| | | - â
å¨ä¸¤ä¸ªåè®®ä¹é´æ·»å "å"åï¼æ´ç¬¦åè¯ä¹ |
| | | |
| | | #### 1.2 æ ·å¼ä¼å |
| | | |
| | | **ä¿®æ¹å**: |
| | | ```scss |
| | | .reg, .xieyi { |
| | | margin: 20rpx 0; |
| | | |
| | | .text-grey1 { |
| | | color: #888; |
| | | } |
| | | |
| | | .text-blue { |
| | | margin: 0 10rpx; |
| | | color: #007AFF; |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | **ä¿®æ¹å**: |
| | | ```scss |
| | | .reg { |
| | | margin: 20rpx 0; |
| | | |
| | | .text-grey1 { |
| | | color: #888; |
| | | } |
| | | |
| | | .text-blue { |
| | | margin: 0 10rpx; |
| | | color: #007AFF; |
| | | } |
| | | } |
| | | |
| | | .xieyi { |
| | | margin: 50rpx 0 30rpx 0; // åä¸ç§»å¨ï¼å¢å ä¸è¾¹è· |
| | | padding: 20rpx 0; // å¢å å
è¾¹è· |
| | | line-height: 2; // å¢å è¡é« |
| | | |
| | | .text-grey1 { |
| | | color: #888; |
| | | font-size: 24rpx; |
| | | } |
| | | |
| | | .agreement-link { |
| | | color: #007AFF; |
| | | font-size: 24rpx; |
| | | padding: 10rpx 8rpx; // å¢å ç¹å»åºå |
| | | margin: 0 5rpx; |
| | | display: inline-block; |
| | | position: relative; |
| | | z-index: 10; // ç¡®ä¿å¨æä¸å± |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | **ä¼åç¹**: |
| | | - â
**åä¸ç§»å¨**: `margin-top: 50rpx`ï¼åæ¥20rpxï¼ |
| | | - â
**å¢å ç¹å»åºå**: `padding: 10rpx 8rpx` |
| | | - â
**æé«å±çº§**: `z-index: 10` |
| | | - â
**å¢å è¡é«**: `line-height: 2`ï¼é²æ¢æåæ¥æ¤ |
| | | - â
**åç¦»æ ·å¼**: å° `.reg` å `.xieyi` åå¼ï¼ç¬ç«æ§å¶ |
| | | |
| | | ### äºã注åé¡µé¢ (`app/pages/register.vue`) |
| | | |
| | | #### 2.1 模æ¿ï¼å·²æ£ç¡®ï¼ |
| | | |
| | | ```vue |
| | | <view class="agreement-section"> |
| | | <checkbox-group @change="handleAgreementChange"> |
| | | <label class="agreement-label"> |
| | | <checkbox value="agreed" :checked="agreedToTerms" color="#007AFF" /> |
| | | <text class="agreement-text"> |
| | | æå·²é
è¯»å¹¶åæ |
| | | <text class="agreement-link" @click.stop="handleUserAgreement">ãç¨æ·æå¡åè®®ã</text> |
| | | å |
| | | <text class="agreement-link" @click.stop="handlePrivacy">ãéç§æ¿çã</text> |
| | | </text> |
| | | </label> |
| | | </checkbox-group> |
| | | </view> |
| | | ``` |
| | | |
| | | å·²å
å« `@click.stop`ï¼æ£ç¡®é»æ¢äºä»¶å泡ã |
| | | |
| | | #### 2.2 æ ·å¼ä¼å |
| | | |
| | | **ä¿®æ¹å**: |
| | | ```scss |
| | | .agreement-section { |
| | | margin: 30rpx 0; |
| | | |
| | | .agreement-label { |
| | | display: flex; |
| | | align-items: flex-start; |
| | | |
| | | checkbox { |
| | | margin-right: 15rpx; |
| | | transform: scale(0.9); |
| | | } |
| | | |
| | | .agreement-text { |
| | | flex: 1; |
| | | font-size: 24rpx; |
| | | color: #666; |
| | | line-height: 1.6; |
| | | text-align: left; |
| | | |
| | | .agreement-link { |
| | | color: #007AFF; |
| | | text-decoration: underline; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | **ä¿®æ¹å**: |
| | | ```scss |
| | | .agreement-section { |
| | | margin: 30rpx 0; |
| | | |
| | | .agreement-label { |
| | | display: flex; |
| | | align-items: flex-start; |
| | | |
| | | checkbox { |
| | | margin-right: 15rpx; |
| | | transform: scale(0.9); |
| | | flex-shrink: 0; // 鲿¢checkbox被å缩 |
| | | } |
| | | |
| | | .agreement-text { |
| | | flex: 1; |
| | | font-size: 26rpx; // å¢å¤§åä½ï¼å24rpxï¼ |
| | | color: #666; |
| | | line-height: 2; // å¢å è¡é«ï¼å1.6ï¼ |
| | | text-align: left; |
| | | |
| | | .agreement-link { |
| | | color: #007AFF; |
| | | text-decoration: underline; |
| | | padding: 8rpx 5rpx; // å¢å ç¹å»åºå |
| | | display: inline-block; |
| | | position: relative; |
| | | z-index: 10; // ç¡®ä¿å¨æä¸å± |
| | | } |
| | | } |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | **ä¼åç¹**: |
| | | - â
**鲿¢å缩**: checkboxæ·»å `flex-shrink: 0` |
| | | - â
**å¢å¤§åä½**: `font-size: 26rpx`ï¼å24rpxï¼ |
| | | - â
**å¢å è¡é«**: `line-height: 2`ï¼å1.6ï¼ |
| | | - â
**å¢å ç¹å»åºå**: `padding: 8rpx 5rpx` |
| | | - â
**æé«å±çº§**: `z-index: 10` |
| | | |
| | | ## ä¼åææå¯¹æ¯ |
| | | |
| | | ### ç»å½é¡µé¢ |
| | | |
| | | | é¡¹ç® | ä¼åå | ä¼åå | |
| | | |------|--------|--------| |
| | | | ä¸è¾¹è· | 20rpx | 50rpx | |
| | | | å
è¾¹è· | æ | 20rpx 0 | |
| | | | è¡é« | é»è®¤ | 2 | |
| | | | ç¹å»åºå | ä»
æå | æå + padding(10rpx 8rpx) | |
| | | | z-index | é»è®¤ | 10 | |
| | | | äºä»¶å泡 | å¯è½å泡 | 已黿¢(@click.stop) | |
| | | |
| | | ### 注åé¡µé¢ |
| | | |
| | | | é¡¹ç® | ä¼åå | ä¼åå | |
| | | |------|--------|--------| |
| | | | åä½å¤§å° | 24rpx | 26rpx | |
| | | | è¡é« | 1.6 | 2 | |
| | | | ç¹å»åºå | ä»
æå | æå + padding(8rpx 5rpx) | |
| | | | z-index | é»è®¤ | 10 | |
| | | | checkboxå缩 | å¯è½ | 已鲿¢(flex-shrink: 0) | |
| | | |
| | | ## ææ¯è¦ç¹ |
| | | |
| | | ### 1. 黿¢äºä»¶å泡 |
| | | |
| | | ä½¿ç¨ `@click.stop` æ¿ä»£ `@click`ï¼ |
| | | |
| | | ```vue |
| | | <!-- é误 --> |
| | | <text @click="handlePrivacy">ãéç§åè®®ã</text> |
| | | |
| | | <!-- æ£ç¡® --> |
| | | <text @click.stop="handlePrivacy">ãéç§åè®®ã</text> |
| | | ``` |
| | | |
| | | **åå **: |
| | | - å¨uni-appä¸ï¼ç¹å«æ¯å¨å¾®ä¿¡å°ç¨åºç¯å¢ä¸ï¼ç¹å»äºä»¶å¯è½ä¼è¢«ç¶å
ç´ æè· |
| | | - ä½¿ç¨ `.stop` 修饰符å¯ä»¥é»æ¢äºä»¶å泡ï¼ç¡®ä¿ç¹å»åªè§¦åå½åå
ç´ çäºä»¶ |
| | | |
| | | ### 2. å¢å ç¹å»çåº |
| | | |
| | | éè¿ `padding` å¢å å¯ç¹å»åºåï¼ |
| | | |
| | | ```scss |
| | | .agreement-link { |
| | | padding: 10rpx 8rpx; |
| | | display: inline-block; // å¿
é¡»æ¯å级æè¡å
å级å
ç´ |
| | | } |
| | | ``` |
| | | |
| | | **ææ**: |
| | | - ç¹å»åºåä» "æå宽度" æ©å¤§å° "æå宽度 + padding" |
| | | - æåç§»å¨ç«¯ç¨æ·ä½éª |
| | | |
| | | ### 3. ç¡®ä¿å
ç´ å±çº§ |
| | | |
| | | ä½¿ç¨ `z-index` å `position: relative`ï¼ |
| | | |
| | | ```scss |
| | | .agreement-link { |
| | | position: relative; |
| | | z-index: 10; |
| | | } |
| | | ``` |
| | | |
| | | **åå **: |
| | | - 鲿¢è¢«å
¶ä»å
ç´ ï¼å¦å¾®ä¿¡ç»å½æé®ï¼é®æ¡ |
| | | - ç¡®ä¿ç¹å»äºä»¶è½å¤æ£å¸¸è§¦å |
| | | |
| | | ### 4. è§è§å离 |
| | | |
| | | éè¿å¢å é´è·åè¡é«ï¼ |
| | | |
| | | ```scss |
| | | .xieyi { |
| | | margin: 50rpx 0 30rpx 0; // åä¸ç§»å¨ |
| | | padding: 20rpx 0; |
| | | line-height: 2; |
| | | } |
| | | ``` |
| | | |
| | | **ææ**: |
| | | - åè®®åºåä¸ä¸æ¹æé®ä¿æè¶³å¤è·ç¦» |
| | | - æåä¸ä¼æ¥æ¤ï¼æ´æé
读 |
| | | |
| | | ## æµè¯è¦ç¹ |
| | | |
| | | ### æµè¯ç¯å¢ |
| | | - â
微信å°ç¨åº |
| | | - â
H5 |
| | | - â
Android App |
| | | - â
iOS App |
| | | |
| | | ### æµè¯æ¥éª¤ |
| | | |
| | | #### ç»å½é¡µé¢æµè¯ |
| | | 1. æå¼ç»å½é¡µé¢ |
| | | 2. å䏿»å¨ï¼æ¥çåè®®åºåæ¯å¦åä¸ç§»å¨ |
| | | 3. ç¹å»"ãç¨æ·åè®®ã"龿¥ |
| | | 4. éªè¯æ¯å¦è·³è½¬å°ç¨æ·åè®®é¡µé¢ |
| | | 5. è¿åç»å½é¡µé¢ |
| | | 6. ç¹å»"ãéç§åè®®ã"龿¥ |
| | | 7. éªè¯æ¯å¦è·³è½¬å°éç§æ¿çé¡µé¢ |
| | | 8. å¨ä¸åå±å¹å°ºå¯¸ä¸æµè¯ï¼å¤§å±ãå°å±ï¼ |
| | | |
| | | #### 注å页颿µè¯ |
| | | 1. æå¼æ³¨åé¡µé¢ |
| | | 2. ç¹å»åè®®checkbox |
| | | 3. ç¹å»"ãç¨æ·æå¡åè®®ã"龿¥ |
| | | 4. éªè¯æ¯å¦è·³è½¬å°ç¨æ·å议页é¢ï¼checkboxç¶æä¿æï¼ |
| | | 5. è¿å注åé¡µé¢ |
| | | 6. ç¹å»"ãéç§æ¿çã"龿¥ |
| | | 7. éªè¯æ¯å¦è·³è½¬å°éç§æ¿çé¡µé¢ |
| | | 8. éªè¯ä¸å¾écheckboxæ¶æ¯å¦è½æ³¨å |
| | | |
| | | ### é¢æç»æ |
| | | - â
åè®®é¾æ¥ä½ç½®åä¸ç§»å¨ï¼ä¸è¢«å
¶ä»å
ç´ é®æ¡ |
| | | - â
ç¹å»åè®®é¾æ¥ååºçµæï¼æ é精确ç¹å»æå |
| | | - â
跳转æ£ç¡®ï¼è½æ£å¸¸æ¥çåè®®å
容 |
| | | - â
注å页é¢çcheckboxä¸åè®®é¾æ¥äºä¸å¹²æ° |
| | | - â
åå¹³å°è¡¨ç°ä¸è´ |
| | | |
| | | ## å¯è½çé®é¢åè§£å³æ¹æ¡ |
| | | |
| | | ### é®é¢1: 卿äºè®¾å¤ä¸ç¹å»ä»ä¸ååº |
| | | |
| | | **ææ¥æ¥éª¤**: |
| | | 1. æ£æ¥æµè§å¨æ§å¶å°æ¯å¦æé误 |
| | | 2. æ£æ¥è·¯ç±é
ç½®æ¯å¦æ£ç¡® |
| | | 3. æ£æ¥åè®®é¡µé¢æä»¶æ¯å¦åå¨ |
| | | |
| | | **è§£å³æ¹æ¡**: |
| | | ```javascript |
| | | // æ·»å è°è¯æ¥å¿ |
| | | handlePrivacy() { |
| | | console.log('ç¹å»éç§åè®®') |
| | | this.$tab.navigateTo('/pages/mine/privacy-policy/index') |
| | | } |
| | | ``` |
| | | |
| | | ### é®é¢2: ç¹å»åºå太大ï¼è¯¯è§¦ |
| | | |
| | | **è§£å³æ¹æ¡**: |
| | | è°æ´ `padding` å¼ï¼ |
| | | ```scss |
| | | .agreement-link { |
| | | padding: 5rpx 5rpx; // åå°padding |
| | | } |
| | | ``` |
| | | |
| | | ### é®é¢3: å¨å°å±è®¾å¤ä¸åè®®æåæ¢è¡æ¾ç¤ºä¸ç¾è§ |
| | | |
| | | **è§£å³æ¹æ¡**: |
| | | ```scss |
| | | .xieyi { |
| | | font-size: 22rpx; // åå°åä½ |
| | | line-height: 1.8; // è°æ´è¡é« |
| | | } |
| | | ``` |
| | | |
| | | ## åç»ä¼å建议 |
| | | |
| | | 1. **æ·»å ç¹å»åé¦** |
| | | ```scss |
| | | .agreement-link { |
| | | &:active { |
| | | opacity: 0.7; |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | 2. **æ·»å ä¸å线å¨ç»** |
| | | ```scss |
| | | .agreement-link { |
| | | position: relative; |
| | | |
| | | &::after { |
| | | content: ''; |
| | | position: absolute; |
| | | bottom: 0; |
| | | left: 0; |
| | | width: 100%; |
| | | height: 1px; |
| | | background-color: #007AFF; |
| | | transform: scaleX(0); |
| | | transition: transform 0.3s; |
| | | } |
| | | |
| | | &:active::after { |
| | | transform: scaleX(1); |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | 3. **èèæ éç¢è®¿é®** |
| | | - æ·»å `aria-label` 屿§ |
| | | - ç¡®ä¿è¶³å¤çé¢è²å¯¹æ¯åº¦ |
| | | - æ¯æé®çå¯¼èª |
| | | |
| | | ## æ»ç» |
| | | |
| | | æ¬æ¬¡ä¼å主è¦è§£å³äºï¼ |
| | | 1. â
**ä½ç½®é®é¢**: åè®®åºååä¸ç§»å¨50rpxï¼é¿å
è¢«é®æ¡ |
| | | 2. â
**ç¹å»é®é¢**: å¢å paddingæ©å¤§ç¹å»çåºï¼æ·»å z-indexç¡®ä¿å¯ç¹å» |
| | | 3. â
**交äºé®é¢**: 使ç¨@click.stop黿¢äºä»¶å泡ï¼ç¡®ä¿ç¹å»ååº |
| | | 4. â
**è§è§é®é¢**: å¢å è¡é«åé´è·ï¼æåå¯è¯»æ§ |
| | | |
| | | ææä¿®æ¹å·²ç»è¿è¯æ³æ£æ¥ï¼å¯ç´æ¥ä½¿ç¨ã建议å¨å®é
设å¤ä¸è¿è¡å
åæµè¯ï¼ç¡®ä¿åå¹³å°è¡¨ç°ä¸è´ã |
| New file |
| | |
| | | # ç»å®è½¦è¾é¨é¨è¿æ»¤åè½è¯´æ |
| | | |
| | | ## åè½æ¦è¿° |
| | | |
| | | ç¨æ·ç»å®è½¦è¾æ¶ï¼ç³»ç»èªå¨éå¶åªè½ç»å®ä¸èªå·±åä¸åå
¬å¸ç车è¾ï¼ç¡®ä¿è½¦è¾ç®¡ççè§èæ§åæ°æ®é离ã |
| | | |
| | | ## å®ç°ç¶æ |
| | | |
| | | ### â
å·²å®ç°åè½ |
| | | |
| | | #### 1. å端é¨é¨è¿æ»¤ |
| | | |
| | | **æä»¶**: [`app/pages/bind-vehicle.vue`](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\app\pages\bind-vehicle.vue) |
| | | |
| | | **æ ¸å¿é»è¾**: |
| | | ```javascript |
| | | loadVehicleList() { |
| | | this.loading = true |
| | | // â
è·åå½åç¨æ·çé¨é¨ID |
| | | const deptId = this.currentUser.deptId |
| | | |
| | | // â
ä¸¥æ ¼éªè¯ï¼é¨é¨IDä¸å卿¶ï¼ä¸å è½½è½¦è¾ |
| | | if (!deptId) { |
| | | this.loading = false |
| | | console.error('æ æ³è·åç¨æ·é¨é¨ä¿¡æ¯') |
| | | this.$modal.showToast('æ æ³è·åç¨æ·é¨é¨ä¿¡æ¯') |
| | | return |
| | | } |
| | | |
| | | // â
使ç¨ç¨æ·å®é
é¨é¨IDæ¥è¯¢è½¦è¾ |
| | | listAvailableVehicles(deptId, 'GENERAL').then(response => { |
| | | // ... |
| | | }) |
| | | } |
| | | ``` |
| | | |
| | | **å
³é®ç¹æ§**: |
| | | - â
ä¸ä½¿ç¨é»è®¤å¼ï¼ä¸¥æ ¼æ£æ¥ [deptId](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\domain\SysTask.java#L95-L96) |
| | | - â
[deptId](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\domain\SysTask.java#L95-L96) 为空æ¶ï¼ç»åºå好æç¤º |
| | | - â
æ å¯ç¨è½¦è¾æ¶ï¼æ¾ç¤ºæç¡®æç¤ºä¿¡æ¯ |
| | | - â
è®°å½è¯¦ç»æ¥å¿ä¾¿äºè°è¯ |
| | | |
| | | #### 2. å端é¨é¨è¿æ»¤ |
| | | |
| | | **æ¥å£**: `GET /task/vehicle/available` |
| | | |
| | | **æä»¶**: [`SysTaskVehicleController.java`](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\ruoyi-admin\src\main\java\com\ruoyi\web\controller\task\SysTaskVehicleController.java) |
| | | |
| | | ```java |
| | | @GetMapping("/available") |
| | | public AjaxResult getAvailableVehicles( |
| | | @RequestParam Long deptId, // â
å¿
å¡«åæ° |
| | | @RequestParam(required = false) String taskType) { |
| | | |
| | | List<SysTaskVehicle> list = sysTaskService.getAvailableVehicles(deptId, taskType); |
| | | return success(list); |
| | | } |
| | | ``` |
| | | |
| | | **Serviceå±è¿æ»¤**: |
| | | - â
æ ¹æ® [deptId](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\domain\SysTask.java#L95-L96) æ¥è¯¢è½¦è¾ |
| | | - â
è¿æ»¤ `status='0'` çæ£å¸¸è½¦è¾ |
| | | - â
è¿æ»¤ `car_id` å `dept_id` ä¸ä¸ºç©ºçè½¦è¾ |
| | | |
| | | ## ä¸å¡æµç¨ |
| | | |
| | | ### åºæ¯1ï¼æ·±å³åå
¬å¸ç¨æ·ç»å®è½¦è¾ |
| | | |
| | | ``` |
| | | ç¨æ·ç»å½ (deptId: 101) |
| | | â |
| | | æå¼ç»å®è½¦è¾é¡µé¢ |
| | | â |
| | | ç³»ç»æ£æ¥ deptId = 101 |
| | | â |
| | | è°ç¨ API: /task/vehicle/available?deptId=101&taskType=GENERAL |
| | | â |
| | | å端æ¥è¯¢: SELECT * FROM tb_vehicle_info WHERE dept_id=101 AND status='0' |
| | | â |
| | | è¿åç»æ: |
| | | - 粤A12345 (æ·±å³åå
¬å¸) |
| | | - 粤A67890 (æ·±å³åå
¬å¸) |
| | | â |
| | | å端æ¾ç¤º: ä»
æ¾ç¤ºæ·±å³åå
¬å¸çè½¦è¾ |
| | | â |
| | | ç¨æ·éæ©å¹¶ç»å® |
| | | ``` |
| | | |
| | | ### åºæ¯2ï¼ç¨æ·æ é¨é¨ä¿¡æ¯ |
| | | |
| | | ``` |
| | | ç¨æ·ç»å½ (deptId: null) |
| | | â |
| | | æå¼ç»å®è½¦è¾é¡µé¢ |
| | | â |
| | | ç³»ç»æ£æ¥ deptId = null |
| | | â |
| | | â ç»æ¢å è½½ï¼æ¾ç¤ºæç¤ºï¼"æ æ³è·åç¨æ·é¨é¨ä¿¡æ¯" |
| | | â |
| | | 车è¾å表为空ï¼ç¨æ·æ æ³ç»å® |
| | | ``` |
| | | |
| | | ### åºæ¯3ï¼åå
¬å¸ææ è½¦è¾ |
| | | |
| | | ``` |
| | | ç¨æ·ç»å½ (deptId: 103) |
| | | â |
| | | æå¼ç»å®è½¦è¾é¡µé¢ |
| | | â |
| | | ç³»ç»æ£æ¥ deptId = 103 |
| | | â |
| | | è°ç¨ API: /task/vehicle/available?deptId=103&taskType=GENERAL |
| | | â |
| | | å端æ¥è¯¢: SELECT * FROM tb_vehicle_info WHERE dept_id=103 AND status='0' |
| | | â |
| | | è¿åç»æ: [] (空æ°ç») |
| | | â |
| | | å端æ¾ç¤ºæç¤ºï¼"å½ååå
¬å¸ææ å¯ç¨è½¦è¾" |
| | | ``` |
| | | |
| | | ## æ°æ®éç¦»ç¤ºä¾ |
| | | |
| | | ### é¨é¨ç»æ |
| | | ``` |
| | | 100 (æ»å
¬å¸) |
| | | âââ 101 (æ·±å³åå
¬å¸) |
| | | â âââ 粤A12345 |
| | | â âââ 粤A67890 |
| | | â âââ 粤A11111 |
| | | âââ 102 (广å·åå
¬å¸) |
| | | â âââ 粤B12345 |
| | | â âââ 粤B67890 |
| | | â âââ 粤B22222 |
| | | âââ 103 (å京åå
¬å¸) |
| | | âââ 京A12345 |
| | | âââ 京A67890 |
| | | ``` |
| | | |
| | | ### ç¨æ·å¯è§è½¦è¾ |
| | | |
| | | | ç¨æ· | é¨é¨ID | å¯è§è½¦è¾ | ä¸å¯è§è½¦è¾ | |
| | | |------|--------|---------|-----------| |
| | | | å¼ ä¸ | 101 (æ·±å³) | 粤A12345, 粤A67890, 粤A11111 | 粤B*, 京A* | |
| | | | æå | 102 (广å·) | 粤B12345, 粤B67890, 粤B22222 | 粤A*, 京A* | |
| | | | çäº | 103 (å京) | 京A12345, 京A67890 | 粤A*, 粤B* | |
| | | | èµµå
| null (æ é¨é¨) | (æ ) | (å
¨é¨) | |
| | | |
| | | ## å®å
¨æ§ä¿é |
| | | |
| | | ### 1. å端éªè¯ |
| | | - â
æ£æ¥ç¨æ·é¨é¨ä¿¡æ¯æ¯å¦åå¨ |
| | | - â
ä¸ä½¿ç¨é»è®¤å¼ 100 |
| | | - â
ç©ºå¼æ¶ç»æ¢å è½½ |
| | | |
| | | ### 2. å端éªè¯ |
| | | - â
[deptId](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\domain\SysTask.java#L95-L96) ä½ä¸ºå¿
å¡«åæ° |
| | | - â
æ°æ®åºæ¥è¯¢æ¶å¼ºå¶æ·»å é¨é¨æ¡ä»¶ |
| | | - â
è¿æ»¤æ æè½¦è¾ï¼car_idãdept_id ä¸ºç©ºï¼ |
| | | |
| | | ### 3. 建议å¢å¼ºï¼å¯éï¼ |
| | | |
| | | å¯ä»¥å¨å端Controller䏿·»å æéæ ¡éªï¼ |
| | | |
| | | ```java |
| | | @GetMapping("/available") |
| | | public AjaxResult getAvailableVehicles(@RequestParam Long deptId, @RequestParam(required = false) String taskType) { |
| | | // â
éªè¯è¯·æ±ç deptId æ¯å¦ä¸ç¨æ·ç deptId ä¸è´ |
| | | LoginUser loginUser = SecurityUtils.getLoginUser(); |
| | | Long userDeptId = loginUser.getUser().getDeptId(); |
| | | |
| | | if (!deptId.equals(userDeptId)) { |
| | | return error("æ ææ¥è¯¢å
¶ä»é¨é¨ç车è¾"); |
| | | } |
| | | |
| | | List<SysTaskVehicle> list = sysTaskService.getAvailableVehicles(deptId, taskType); |
| | | return success(list); |
| | | } |
| | | ``` |
| | | |
| | | ## ç¸å
³æ¥å£ |
| | | |
| | | ### 1. æ¥è¯¢å¯ç¨è½¦è¾ |
| | | |
| | | **æ¥å£**: `GET /task/vehicle/available` |
| | | |
| | | **请æ±åæ°**: |
| | | ``` |
| | | deptId: 101 (å¿
å¡«) é¨é¨ID |
| | | taskType: GENERAL (å¯é) ä»»å¡ç±»å |
| | | ``` |
| | | |
| | | **ååºç¤ºä¾**: |
| | | ```json |
| | | { |
| | | "code": 200, |
| | | "msg": "æ¥è¯¢æå", |
| | | "data": [ |
| | | { |
| | | "vehicleId": 1, |
| | | "vehicleNo": "粤A12345", |
| | | "vehicleType": "ææ¤è½¦", |
| | | "vehicleBrand": "ç¦ç¹", |
| | | "vehicleModel": "å
¨é¡º", |
| | | "deptId": 101, |
| | | "status": "0" |
| | | } |
| | | ] |
| | | } |
| | | ``` |
| | | |
| | | **æ è½¦è¾æ¶**: |
| | | ```json |
| | | { |
| | | "code": 200, |
| | | "msg": "æ¥è¯¢æå", |
| | | "data": [] |
| | | } |
| | | ``` |
| | | |
| | | ### 2. ç»å®è½¦è¾ |
| | | |
| | | **æ¥å£**: `POST /system/vehicle/bind` |
| | | |
| | | **请æ±ä½**: |
| | | ```json |
| | | { |
| | | "userId": 1, |
| | | "vehicleId": 123 |
| | | } |
| | | ``` |
| | | |
| | | ### 3. æ¥è¯¢ç¨æ·ç»å®è½¦è¾ |
| | | |
| | | **æ¥å£**: `GET /system/vehicle/user/bound/{userId}` |
| | | |
| | | **ååºç¤ºä¾**: |
| | | ```json |
| | | { |
| | | "code": 200, |
| | | "msg": "æ¥è¯¢æå", |
| | | "data": { |
| | | "vehicleId": 123, |
| | | "vehicleNumber": "粤A12345", |
| | | "deptId": 101, |
| | | "bindTime": "2025-10-25 10:30:00" |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ## ç¨æ·ä½éªä¼å |
| | | |
| | | ### å好æç¤ºä¿¡æ¯ |
| | | |
| | | | åºæ¯ | æç¤ºå
容 | |
| | | |------|---------| |
| | | | æ é¨é¨ä¿¡æ¯ | "æ æ³è·åç¨æ·é¨é¨ä¿¡æ¯" | |
| | | | æ å¯ç¨è½¦è¾ | "å½ååå
¬å¸ææ å¯ç¨è½¦è¾" | |
| | | | å 载失败 | "å 载车è¾å表失败" | |
| | | | éå¤ç»å® | "å½åå·²ç»å®æ¤è½¦è¾ï¼æ ééå¤ç»å®" | |
| | | | 强å¶ç»å®ç¡®è®¤ | "æ¨å½åå·²ç»å®è½¦è¾ï¼ç²¤A12345ï¼ç¡®è®¤è¦è§£ç»æ§è½¦è¾å¹¶ç»å®æ°è½¦è¾ï¼ç²¤A67890 åï¼" | |
| | | |
| | | ### æ¥å¿è®°å½ |
| | | |
| | | ```javascript |
| | | // æåå è½½ |
| | | console.log(`å è½½äº ${vehicleList.length} è¾è½¦è¾ï¼é¨é¨ID: ${deptId}ï¼`) |
| | | |
| | | // æ é¨é¨ä¿¡æ¯ |
| | | console.error('æ æ³è·åç¨æ·é¨é¨ä¿¡æ¯') |
| | | |
| | | // æ å¯ç¨è½¦è¾ |
| | | console.log('å½ååå
¬å¸ææ å¯ç¨è½¦è¾') |
| | | |
| | | // å 载失败 |
| | | console.error('å 载车è¾å表失败:', error) |
| | | ``` |
| | | |
| | | ## æµè¯åºæ¯ |
| | | |
| | | ### 1. æ£å¸¸ç»å® |
| | | - [x] æ·±å³ç¨æ·åªè½çå°æ·±å³çè½¦è¾ |
| | | - [x] 广å·ç¨æ·åªè½çå°å¹¿å·çè½¦è¾ |
| | | - [x] ç¨æ·å¯ä»¥æåç»å®æ¬åå
¬å¸çè½¦è¾ |
| | | |
| | | ### 2. è¾¹çæ
åµ |
| | | - [x] ç¨æ·æ é¨é¨ä¿¡æ¯ï¼æ¾ç¤ºæç¤º |
| | | - [x] åå
¬å¸æ 车è¾ï¼æ¾ç¤ºæç¤º |
| | | - [x] ç½ç»å¼å¸¸ï¼æ¾ç¤ºé误æç¤º |
| | | |
| | | ### 3. æ°æ®é离 |
| | | - [x] æ·±å³ç¨æ·çä¸å°å¹¿å·çè½¦è¾ |
| | | - [x] 广å·ç¨æ·çä¸å°æ·±å³çè½¦è¾ |
| | | - [x] ä¸ååå
¬å¸ç¨æ·æ°æ®å®å
¨é离 |
| | | |
| | | ### 4. éå¤ç»å® |
| | | - [x] ç»å®åä¸è½¦è¾ï¼æç¤ºå·²ç»å® |
| | | - [x] ç»å®å
¶ä»è½¦è¾ï¼æç¤ºæ¯å¦è§£ç»æ§è½¦è¾ |
| | | |
| | | ## ç¸å
³æä»¶ |
| | | |
| | | ### å端 |
| | | - [`app/pages/bind-vehicle.vue`](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\app\pages\bind-vehicle.vue) - ç»å®è½¦è¾é¡µé¢ |
| | | - [`app/api/vehicle.js`](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\app\api\vehicle.js) - 车è¾API |
| | | |
| | | ### å端 |
| | | - [`SysTaskVehicleController.java`](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\ruoyi-admin\src\main\java\com\ruoyi\web\controller\task\SysTaskVehicleController.java) - 车è¾Controller |
| | | - [`SysTaskServiceImpl.java`](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\service\impl\SysTaskServiceImpl.java) - ä»»å¡Service |
| | | - [`VehicleInfoMapper.xml`](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\resources\mapper\system\VehicleInfoMapper.xml) - 车è¾Mapper |
| | | |
| | | ### ææ¡£ |
| | | - [ç»å®è½¦è¾é¨é¨è¿æ»¤ä¼å.md](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\prd\ç»å®è½¦è¾é¨é¨è¿æ»¤ä¼å.md) |
| | | - [车è¾ç»å®è§£ç»åè½è¯´æ.md](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\prd\车è¾ç»å®è§£ç»åè½è¯´æ.md) |
| | | |
| | | ## æ»ç» |
| | | |
| | | â
**已宿**: ç»å®è½¦è¾æ¶å·²ç»å®ç°äºé¨é¨è¿æ»¤åè½ |
| | | â
**å端éªè¯**: ä¸¥æ ¼æ£æ¥ç¨æ·é¨é¨ä¿¡æ¯ï¼ä¸ä½¿ç¨é»è®¤å¼ |
| | | â
**åç«¯è¿æ»¤**: æ ¹æ®é¨é¨IDæ¥è¯¢è½¦è¾ï¼ç¡®ä¿æ°æ®é离 |
| | | â
**ç¨æ·ä½éª**: æä¾å好çæç¤ºä¿¡æ¯åæ¥å¿è®°å½ |
| | | |
| | | ð¡ **建议**: å¯ä»¥å¨å端å¢å æéæ ¡éªï¼éªè¯è¯·æ±ç [deptId](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\domain\SysTask.java#L95-L96) æ¯å¦ä¸ç¨æ·ç [deptId](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\java\com\ruoyi\system\domain\SysTask.java#L95-L96) ä¸è´ï¼è¿ä¸æ¥æé«å®å
¨æ§ã |
| | | |
| | | --- |
| | | |
| | | **æ´æ°æ¶é´**: 2025-10-25 |
| | | **çæ¬**: v1.0 |
| | | **ç¶æ**: â
å·²å®ç° |
| New file |
| | |
| | | # 车è¾åæ¥é¨é¨æ¥è¯¢ä¿®å¤è¯´æ |
| | | |
| | | ## é®é¢æè¿° |
| | | |
| | | å¨ `VehicleSyncServiceImpl.findDeptByDispatchOrderClass()` æ¹æ³ä¸ï¼è½ç¶è®¾ç½®äº `query.setDispatchOrderClass(dispatchOrderClass)`ï¼ä½å¨ `SysDeptMapper.xml` ä¸ç `selectDeptList` æ¥è¯¢æ²¡æå¯¹åºç `dispatchOrderClass` å `serviceOrderClass` åæ®µæ¡ä»¶å¤æï¼å¯¼è´æ æ³æ£ç¡®æ¥è¯¢å°é¨é¨ã |
| | | |
| | | ## ä¿®å¤å
容 |
| | | |
| | | ### 1. ä¿®å¤ SysDeptMapper.xml |
| | | |
| | | **æä»¶**: `ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml` |
| | | |
| | | å¨ `selectDeptList` æ¹æ³ä¸æ·»å äº `serviceOrderClass` å `dispatchOrderClass` çæ¥è¯¢æ¡ä»¶ï¼ |
| | | |
| | | ```xml |
| | | <select id="selectDeptList" parameterType="SysDept" resultMap="SysDeptResult"> |
| | | <include refid="selectDeptVo"/> |
| | | where d.del_flag = '0' |
| | | <!-- ... å
¶ä»æ¡ä»¶ ... --> |
| | | |
| | | <!-- â
æ°å¢ï¼æå¡åç¼ç æ¥è¯¢ --> |
| | | <if test="serviceOrderClass != null and serviceOrderClass != ''"> |
| | | AND service_order_class = #{serviceOrderClass} |
| | | </if> |
| | | |
| | | <!-- â
æ°å¢ï¼è°åº¦åç¼ç æ¥è¯¢ --> |
| | | <if test="dispatchOrderClass != null and dispatchOrderClass != ''"> |
| | | AND dispatch_order_class = #{dispatchOrderClass} |
| | | </if> |
| | | |
| | | <!-- æ°æ®èå´è¿æ»¤ --> |
| | | ${params.dataScope} |
| | | order by d.parent_id, d.order_num |
| | | </select> |
| | | ``` |
| | | |
| | | ### 2. ä¼å VehicleSyncServiceImpl |
| | | |
| | | **æä»¶**: `ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java` |
| | | |
| | | ä¿®æ¹ `parseDeptIdFromCarOrdClass()` æ¹æ³ï¼ä½¿å
¶å¨æ¾å°é¨é¨åèªå¨è½¬æ¢ä¸ºåå
¬å¸IDï¼ |
| | | |
| | | **ä¿®æ¹å**ï¼ |
| | | ```java |
| | | private Long parseDeptIdFromCarOrdClass(String carOrdClass) { |
| | | // ... æ¥æ¾é¨é¨é»è¾ ... |
| | | SysDept dept = findDeptByDispatchOrderClass(code); |
| | | if (dept != null) { |
| | | return dept.getDeptId(); // â ç´æ¥è¿åé¨é¨ID |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | **ä¿®æ¹å**ï¼ |
| | | ```java |
| | | private Long parseDeptIdFromCarOrdClass(String carOrdClass) { |
| | | // ... æ¥æ¾é¨é¨é»è¾ ... |
| | | SysDept dept = findDeptByDispatchOrderClass(code); |
| | | if (dept != null) { |
| | | // â
å°é¨é¨ID转æ¢ä¸ºåå
¬å¸ID |
| | | Long branchCompanyId = sysDeptMapper.selectBranchCompanyIdByDeptId(dept.getDeptId()); |
| | | if (branchCompanyId != null) { |
| | | log.debug("å°é¨é¨ID {} 转æ¢ä¸ºåå
¬å¸ID: {}", dept.getDeptId(), branchCompanyId); |
| | | return branchCompanyId; |
| | | } else { |
| | | log.warn("é¨é¨ID {} æ æ³è½¬æ¢ä¸ºåå
¬å¸IDï¼å¯è½æ¯æ»å
¬å¸ææ°æ®å¼å¸¸", dept.getDeptId()); |
| | | return null; |
| | | } |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ## ä¿®å¤åç |
| | | |
| | | ### ä¿®å¤åçé®é¢æµç¨ |
| | | |
| | | ``` |
| | | 1. VehicleSyncServiceImpl 设置æ¥è¯¢æ¡ä»¶ |
| | | ââ query.setDispatchOrderClass("ZB") |
| | | ââ sysDeptMapper.selectDeptList(query) |
| | | |
| | | 2. SysDeptMapper.xml æ§è¡æ¥è¯¢ |
| | | ââ WHERE del_flag = '0' |
| | | ââ AND dept_id = ? (妿æ) |
| | | ââ AND parent_id = ? (妿æ) |
| | | ââ â æ²¡æ dispatch_order_class æ¡ä»¶ |
| | | |
| | | 3. ç»æï¼æ¥è¯¢å°ææé¨é¨ï¼ä¸æ¯ææçç»æ |
| | | ``` |
| | | |
| | | ### ä¿®å¤åçæ£ç¡®æµç¨ |
| | | |
| | | ``` |
| | | 1. VehicleSyncServiceImpl 设置æ¥è¯¢æ¡ä»¶ |
| | | ââ query.setDispatchOrderClass("ZB") |
| | | ââ sysDeptMapper.selectDeptList(query) |
| | | |
| | | 2. SysDeptMapper.xml æ§è¡æ¥è¯¢ |
| | | ââ WHERE del_flag = '0' |
| | | ââ â
AND dispatch_order_class = 'ZB' |
| | | ââ æ¾å°å¹é
çé¨é¨ |
| | | |
| | | 3. 转æ¢ä¸ºåå
¬å¸ID |
| | | ââ è°ç¨ selectBranchCompanyIdByDeptId(deptId) |
| | | ââ 妿æ¯åå
¬å¸ï¼ç´æ¥è¿å |
| | | ââ 妿æ¯åé¨é¨ï¼ä»ancestors䏿¥æ¾åå
¬å¸ID |
| | | |
| | | 4. ç»æï¼æ£ç¡®çåå
¬å¸ID |
| | | ``` |
| | | |
| | | ## 使ç¨åºæ¯ |
| | | |
| | | ### åºæ¯1ï¼è½¦è¾åæ¥æ¶è§£æé¨é¨ |
| | | |
| | | 仿§ç³»ç»åæ¥è½¦è¾æ°æ®æ¶ï¼æ ¹æ® `CarOrdClass` åæ®µï¼å¦ "ZB", "HB.TI"ï¼æ¥æ¾å¯¹åºçåå
¬å¸ï¼ |
| | | |
| | | ```java |
| | | // CarOrdClass = "ZB" |
| | | Long branchCompanyId = parseDeptIdFromCarOrdClass("ZB"); |
| | | |
| | | // æµç¨ï¼ |
| | | // 1. æå "ZB" â ["ZB"] |
| | | // 2. æ¥è¯¢ dispatch_order_class = 'ZB' çé¨é¨ â æ¾å°é¨é¨201 |
| | | // 3. å°é¨é¨201转æ¢ä¸ºåå
¬å¸ID â 101 |
| | | // 4. è¿ååå
¬å¸ID: 101 |
| | | ``` |
| | | |
| | | ### åºæ¯2ï¼å¤æ®µç¼ç è§£æ |
| | | |
| | | å¤çå
å«å¤ä¸ªç¼ç çæ
åµï¼ |
| | | |
| | | ```java |
| | | // CarOrdClass = "HB.TI" |
| | | Long branchCompanyId = parseDeptIdFromCarOrdClass("HB.TI"); |
| | | |
| | | // æµç¨ï¼ |
| | | // 1. æå "HB.TI" â ["HB", "TI"] |
| | | // 2. å
æ¥è¯¢ dispatch_order_class = 'HB' â æ¾å°é¨é¨202 |
| | | // 3. å°é¨é¨202转æ¢ä¸ºåå
¬å¸ID â 102 |
| | | // 4. è¿ååå
¬å¸ID: 102 |
| | | ``` |
| | | |
| | | ## æ°æ®ç¤ºä¾ |
| | | |
| | | ### é¨é¨è¡¨æ°æ® |
| | | |
| | | ```sql |
| | | -- sys_dept è¡¨æ°æ®ç¤ºä¾ |
| | | dept_id | parent_id | dept_name | dispatch_order_class | ancestors |
| | | --------|-----------|-------------|---------------------|------------ |
| | | 100 | 0 | æ»å
¬å¸ | NULL | 0 |
| | | 101 | 100 | å京åå
¬å¸ | NULL | 0,100 |
| | | 102 | 100 | 䏿µ·åå
¬å¸ | NULL | 0,100 |
| | | 201 | 101 | åäº¬æ¥æé¨ | ZB | 0,100,101 |
| | | 202 | 102 | 䏿µ·æ¥æé¨ | HB | 0,100,102 |
| | | 203 | 102 | 䏿µ·è½¬è¿é¨ | TI | 0,100,102 |
| | | ``` |
| | | |
| | | ### æ¥è¯¢ç¤ºä¾ |
| | | |
| | | #### 示ä¾1ï¼æ¥è¯¢ dispatch_order_class = 'ZB' çé¨é¨ |
| | | |
| | | **ä¿®å¤åï¼æ¥è¯¢æ¡ä»¶æ æï¼**ï¼ |
| | | ```sql |
| | | SELECT * FROM sys_dept WHERE del_flag = '0' |
| | | -- è¿åææé¨é¨ï¼éè¯¯ï¼ |
| | | ``` |
| | | |
| | | **ä¿®å¤åï¼æ£ç¡®æ¥è¯¢ï¼**ï¼ |
| | | ```sql |
| | | SELECT * FROM sys_dept |
| | | WHERE del_flag = '0' |
| | | AND dispatch_order_class = 'ZB' |
| | | -- è¿åé¨é¨201ï¼æ£ç¡®ï¼ |
| | | ``` |
| | | |
| | | #### 示ä¾2ï¼å°é¨é¨ID转æ¢ä¸ºåå
¬å¸ID |
| | | |
| | | ```java |
| | | // è¾å
¥ï¼deptId = 201 (åäº¬æ¥æé¨) |
| | | Long branchCompanyId = sysDeptMapper.selectBranchCompanyIdByDeptId(201L); |
| | | // è¿åï¼101 (å京åå
¬å¸) |
| | | |
| | | // SQLæ§è¡é»è¾ï¼ |
| | | // 1. æ£æ¥ dept_id=201 ç parent_id æ¯å¦ä¸º 100 â å¦ï¼parent_id=101ï¼ |
| | | // 2. æ¥è¯¢ ancestors="0,100,101" |
| | | // 3. ä½¿ç¨ FIND_IN_SET æ¥æ¾ parent_id=100 çé¨é¨ID |
| | | // 4. æ¾å° dept_id=101ï¼è¿å |
| | | ``` |
| | | |
| | | ## æµè¯éªè¯ |
| | | |
| | | ### æµè¯ç¨ä¾1ï¼ç²¾ç¡®å¹é
å个ç¼ç |
| | | |
| | | ```java |
| | | // CarOrdClass = "ZB" |
| | | Long result = parseDeptIdFromCarOrdClass("ZB"); |
| | | // 颿ï¼101 (å京åå
¬å¸) |
| | | ``` |
| | | |
| | | ### æµè¯ç¨ä¾2ï¼å¤æ®µç¼ç å¹é
|
| | | |
| | | ```java |
| | | // CarOrdClass = "HB.TI" |
| | | Long result = parseDeptIdFromCarOrdClass("HB.TI"); |
| | | // 颿ï¼102 (䏿µ·åå
¬å¸) |
| | | ``` |
| | | |
| | | ### æµè¯ç¨ä¾3ï¼ç©ºå¼å¤ç |
| | | |
| | | ```java |
| | | // CarOrdClass = null |
| | | Long result = parseDeptIdFromCarOrdClass(null); |
| | | // 颿ï¼null |
| | | ``` |
| | | |
| | | ### æµè¯ç¨ä¾4ï¼æªå¹é
çç¼ç |
| | | |
| | | ```java |
| | | // CarOrdClass = "UNKNOWN" |
| | | Long result = parseDeptIdFromCarOrdClass("UNKNOWN"); |
| | | // 颿ï¼null |
| | | // æ¥å¿ï¼è¦å "æªæ¾å°å¹é
CarOrdClass='UNKNOWN' çé¨é¨" |
| | | ``` |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | ### 1. é¨é¨æ°æ®å®æ´æ§ |
| | | |
| | | ç¡®ä¿ `sys_dept` 表ä¸ï¼ |
| | | - `dispatch_order_class` åæ®µå·²æ£ç¡®é
ç½® |
| | | - åå
¬å¸ç `parent_id = 100` |
| | | - åé¨é¨ç `ancestors` åæ®µæ£ç¡®ç»´æ¤ |
| | | |
| | | ### 2. æ¥å¿çæ§ |
| | | |
| | | æ¹æ³ä¸æ·»å äºè¯¦ç»çæ¥å¿è¾åºï¼ |
| | | |
| | | ```java |
| | | // è°è¯æ¥å¿ |
| | | log.debug("éè¿dispatch_order_class='{}' æ¾å°é¨é¨: {} (ID={})", code, dept.getDeptName(), dept.getDeptId()); |
| | | log.debug("å°é¨é¨ID {} 转æ¢ä¸ºåå
¬å¸ID: {}", dept.getDeptId(), branchCompanyId); |
| | | |
| | | // è¦åæ¥å¿ |
| | | log.warn("é¨é¨ID {} æ æ³è½¬æ¢ä¸ºåå
¬å¸IDï¼å¯è½æ¯æ»å
¬å¸ææ°æ®å¼å¸¸", dept.getDeptId()); |
| | | log.warn("æªæ¾å°å¹é
CarOrdClass='{}' çé¨é¨", carOrdClass); |
| | | ``` |
| | | |
| | | 建议å¨ç产ç¯å¢å¼å¯ DEBUG çº§å«æ¥å¿ï¼ä¾¿äºææ¥é®é¢ã |
| | | |
| | | ### 3. æ§è½èè |
| | | |
| | | å¦æè½¦è¾åæ¥é大ï¼å»ºè®®ï¼ |
| | | - 对 `dispatch_order_class` åæ®µæ·»å ç´¢å¼ |
| | | - 对 `service_order_class` åæ®µæ·»å ç´¢å¼ |
| | | |
| | | ```sql |
| | | CREATE INDEX idx_dispatch_order_class ON sys_dept(dispatch_order_class); |
| | | CREATE INDEX idx_service_order_class ON sys_dept(service_order_class); |
| | | ``` |
| | | |
| | | ## ç¸å
³æä»¶ |
| | | |
| | | - `/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml` - æ·»å æ¥è¯¢æ¡ä»¶ |
| | | - `/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/VehicleSyncServiceImpl.java` - ä¼å转æ¢é»è¾ |
| | | - `/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java` - ä½¿ç¨ selectBranchCompanyIdByDeptId æ¹æ³ |
| | | - `/prd/é¨é¨åå
¬å¸IDè·åæ¹æ³è¯´æ.md` - åå
¬å¸IDè½¬æ¢æ¹æ³ææ¡£ |
| | | |
| | | ## æ´æ°æ¥å¿ |
| | | |
| | | - **2025-01-25**: ä¿®å¤ SysDeptMapper.xml ä¸ç¼ºå°æ¥è¯¢æ¡ä»¶çé®é¢ |
| | | - **2025-01-25**: ä¼å parseDeptIdFromCarOrdClass æ¹æ³ï¼èªå¨è½¬æ¢ä¸ºåå
¬å¸ID |
| | | - **ç®ç**: ç¡®ä¿è½¦è¾åæ¥æ¶è½æ£ç¡®å¹é
é¨é¨å¹¶è½¬æ¢ä¸ºåå
¬å¸ID |
| New file |
| | |
| | | # è½¦è¾æ¥è¯¢é¨é¨èªå¨å¹é
åè½è¯´æ |
| | | |
| | | ## åè½æ¦è¿° |
| | | |
| | | å¨è½¦è¾æ¥è¯¢æ¶ï¼æ è®ºç¨æ·ä¼ å
¥çæ¯åå
¬å¸IDè¿æ¯åé¨é¨IDï¼å¦ææ¯é¨ãä¸å¡é¨ï¼ï¼ç³»ç»é½ä¼èªå¨æ¥æ¾å
¶æå±çåå
¬å¸ï¼å¹¶è¿å该åå
¬å¸ç车è¾ã |
| | | |
| | | ## ä¸å¡èæ¯ |
| | | |
| | | ### é¨é¨å±çº§ç»æ |
| | | |
| | | ``` |
| | | 100 (æ»å
¬å¸) |
| | | âââ 101 (æ·±å³åå
¬å¸) â 车è¾å½å±äºåå
¬å¸ |
| | | â âââ 201 (ææ¯é¨) â ç¨æ·å¯è½å±äºåé¨é¨ |
| | | â âââ 202 (ä¸å¡é¨) |
| | | â âââ 203 (è´¢å¡é¨) |
| | | âââ 102 (广å·åå
¬å¸) |
| | | â âââ 204 (ææ¯é¨) |
| | | â âââ 205 (ä¸å¡é¨) |
| | | â âââ 206 (è´¢å¡é¨) |
| | | âââ 103 (å京åå
¬å¸) |
| | | âââ 207 (ææ¯é¨) |
| | | âââ 208 (ä¸å¡é¨) |
| | | ``` |
| | | |
| | | ### é®é¢åºæ¯ |
| | | |
| | | **åæé»è¾**ï¼ |
| | | - ç¨æ·Aï¼ææ¯é¨ï¼deptId=201ï¼æ¥è¯¢è½¦è¾ |
| | | - ç³»ç»æ¥è¯¢ï¼`WHERE dept_id = 201` |
| | | - ç»æï¼â æ¥ä¸å°è½¦è¾ï¼å 为车è¾çdept_id=101ï¼ä¸æ¯201ï¼ |
| | | |
| | | **ææé»è¾**ï¼ |
| | | - ç¨æ·Aï¼ææ¯é¨ï¼deptId=201ï¼æ¥è¯¢è½¦è¾ |
| | | - ç³»ç»èªå¨æ¾å°åå
¬å¸ï¼201 â 101ï¼æ·±å³åå
¬å¸ï¼ |
| | | - ç³»ç»æ¥è¯¢ï¼`WHERE dept_id = 101` |
| | | - ç»æï¼â
æ¥å°æ·±å³åå
¬å¸çææè½¦è¾ |
| | | |
| | | ## å®ç°æ¹æ¡ |
| | | |
| | | ### SQLæ¥è¯¢é»è¾ |
| | | |
| | | **æä»¶**ï¼[`VehicleInfoMapper.xml`](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\resources\mapper\system\VehicleInfoMapper.xml) |
| | | |
| | | ```xml |
| | | <!-- é¨é¨è¿æ»¤ï¼èªå¨æ¥æ¾ä¼ å
¥é¨é¨æå±çåå
¬å¸ï¼parent_id=100ï¼ --> |
| | | <if test="deptId != null"> |
| | | and v.dept_id = ( |
| | | <!-- å¦æä¼ å
¥çå°±æ¯åå
¬å¸ï¼parent_id=100ï¼ï¼ç´æ¥è¿å --> |
| | | select case |
| | | when exists(select 1 from sys_dept where dept_id = #{deptId} and parent_id = 100) |
| | | then #{deptId} |
| | | else ( |
| | | <!-- å¦åä» ancestors 䏿¥æ¾åå
¬å¸ID --> |
| | | select d.dept_id |
| | | from sys_dept d |
| | | where d.parent_id = 100 |
| | | and FIND_IN_SET(d.dept_id, ( |
| | | select ancestors from sys_dept where dept_id = #{deptId} |
| | | )) |
| | | limit 1 |
| | | ) |
| | | end |
| | | ) |
| | | </if> |
| | | ``` |
| | | |
| | | ### æ¥è¯¢é»è¾è¯´æ |
| | | |
| | | #### æ¥éª¤1ï¼å¤æä¼ å
¥çdeptIdæ¯å¦ä¸ºåå
¬å¸ |
| | | |
| | | ```sql |
| | | when exists(select 1 from sys_dept where dept_id = #{deptId} and parent_id = 100) |
| | | ``` |
| | | |
| | | - å¦æä¼ å
¥ç `deptId` ç `parent_id = 100`ï¼è¯´æä¼ å
¥çå°±æ¯åå
¬å¸ |
| | | - ç´æ¥ä½¿ç¨è¯¥ `deptId` æ¥è¯¢ |
| | | |
| | | #### æ¥éª¤2ï¼å¦æä¸æ¯åå
¬å¸ï¼ä»ancestors䏿¥æ¾ |
| | | |
| | | ```sql |
| | | select d.dept_id |
| | | from sys_dept d |
| | | where d.parent_id = 100 |
| | | and FIND_IN_SET(d.dept_id, ( |
| | | select ancestors from sys_dept where dept_id = #{deptId} |
| | | )) |
| | | ``` |
| | | |
| | | **åç**ï¼ |
| | | - æ¯ä¸ªé¨é¨ç `ancestors` åæ®µåå¨äºææä¸çº§é¨é¨IDï¼ç¨éå·åéï¼ |
| | | - ä¾å¦ï¼ææ¯é¨(201)ç `ancestors` å¯è½æ¯ `"100,101,201"` |
| | | - ä½¿ç¨ `FIND_IN_SET` å¨ ancestors 䏿¥æ¾ `parent_id=100` çé¨é¨ |
| | | - æ¾å°çå°±æ¯åå
¬å¸ID |
| | | |
| | | ## 使ç¨ç¤ºä¾ |
| | | |
| | | ### 示ä¾1ï¼ä¼ å
¥åå
¬å¸ID |
| | | |
| | | **è¾å
¥**ï¼ |
| | | ```javascript |
| | | deptId: 101 // æ·±å³åå
¬å¸ |
| | | ``` |
| | | |
| | | **SQLæ§è¡**ï¼ |
| | | ```sql |
| | | -- æ£æ¥ï¼101 ç parent_id = 100 â
|
| | | -- ç´æ¥ä½¿ç¨ï¼dept_id = 101 |
| | | WHERE v.dept_id = 101 |
| | | ``` |
| | | |
| | | **ç»æ**ï¼â
è¿åæ·±å³åå
¬å¸çææè½¦è¾ |
| | | |
| | | ### 示ä¾2ï¼ä¼ å
¥åé¨é¨ID |
| | | |
| | | **è¾å
¥**ï¼ |
| | | ```javascript |
| | | deptId: 201 // æ·±å³åå
¬å¸-ææ¯é¨ |
| | | ``` |
| | | |
| | | **æ°æ®**ï¼ |
| | | ```sql |
| | | -- sys_dept è¡¨æ°æ® |
| | | dept_id | parent_id | ancestors |
| | | 101 | 100 | 100,101 |
| | | 201 | 101 | 100,101,201 |
| | | ``` |
| | | |
| | | **SQLæ§è¡**ï¼ |
| | | ```sql |
| | | -- 1. æ£æ¥ï¼201 ç parent_id = 100 â |
| | | -- 2. æ¥è¯¢ ancestorsï¼select ancestors from sys_dept where dept_id = 201 |
| | | -- ç»æï¼"100,101,201" |
| | | -- 3. å¨ ancestors 䏿¥æ¾ parent_id=100 çé¨é¨ |
| | | -- FIND_IN_SET(d.dept_id, "100,101,201") and d.parent_id = 100 |
| | | -- æ¾å°ï¼101 |
| | | -- 4. 使ç¨ï¼dept_id = 101 |
| | | WHERE v.dept_id = 101 |
| | | ``` |
| | | |
| | | **ç»æ**ï¼â
è¿åæ·±å³åå
¬å¸çææè½¦è¾ |
| | | |
| | | ### 示ä¾3ï¼ä¼ å
¥åé¨é¨ID |
| | | |
| | | **è¾å
¥**ï¼ |
| | | ```javascript |
| | | deptId: 301 // æ·±å³åå
¬å¸-ææ¯é¨-å¼åç» |
| | | ``` |
| | | |
| | | **æ°æ®**ï¼ |
| | | ```sql |
| | | -- sys_dept è¡¨æ°æ® |
| | | dept_id | parent_id | ancestors |
| | | 101 | 100 | 100,101 |
| | | 201 | 101 | 100,101,201 |
| | | 301 | 201 | 100,101,201,301 |
| | | ``` |
| | | |
| | | **SQLæ§è¡**ï¼ |
| | | ```sql |
| | | -- 1. æ£æ¥ï¼301 ç parent_id = 100 â |
| | | -- 2. æ¥è¯¢ ancestorsï¼"100,101,201,301" |
| | | -- 3. å¨ ancestors 䏿¥æ¾ parent_id=100 çé¨é¨ |
| | | -- æ¾å°ï¼101 |
| | | -- 4. 使ç¨ï¼dept_id = 101 |
| | | WHERE v.dept_id = 101 |
| | | ``` |
| | | |
| | | **ç»æ**ï¼â
è¿åæ·±å³åå
¬å¸çææè½¦è¾ |
| | | |
| | | ## åºç¨åºæ¯ |
| | | |
| | | ### åºæ¯1ï¼ç»å®è½¦è¾ |
| | | |
| | | **ç¨æ·**ï¼ææ¯é¨åå·¥ï¼deptId=201ï¼ |
| | | |
| | | ```javascript |
| | | // å端è°ç¨ |
| | | listAvailableVehicles(201, 'GENERAL') |
| | | |
| | | // å端æ¥è¯¢ |
| | | SELECT * FROM tb_vehicle_info v |
| | | WHERE v.dept_id = ( |
| | | -- èªå¨æ¾å°åå
¬å¸ï¼201 â 101 |
| | | ... |
| | | ) |
| | | ``` |
| | | |
| | | **ç»æ**ï¼æ¾ç¤ºæ·±å³åå
¬å¸çææè½¦è¾ |
| | | |
| | | ### åºæ¯2ï¼åå»ºä»»å¡ |
| | | |
| | | **ç¨æ·**ï¼ä¸å¡é¨åå·¥ï¼deptId=202ï¼ |
| | | |
| | | ```javascript |
| | | // å端è°ç¨ |
| | | listAvailableVehicles(202, 'EMERGENCY') |
| | | |
| | | // å端æ¥è¯¢ |
| | | SELECT * FROM tb_vehicle_info v |
| | | WHERE v.dept_id = ( |
| | | -- èªå¨æ¾å°åå
¬å¸ï¼202 â 101 |
| | | ... |
| | | ) |
| | | ``` |
| | | |
| | | **ç»æ**ï¼æ¾ç¤ºæ·±å³åå
¬å¸çææè½¦è¾ |
| | | |
| | | ## æ°æ®æµç¨å¾ |
| | | |
| | | ```mermaid |
| | | sequenceDiagram |
| | | participant User as ç¨æ·(ææ¯é¨) |
| | | participant Page as åç«¯é¡µé¢ |
| | | participant API as å端API |
| | | participant DB as æ°æ®åº |
| | | |
| | | User->>Page: æå¼ç»å®è½¦è¾é¡µé¢ |
| | | Page->>Page: è·åç¨æ·é¨é¨ID: 201 |
| | | Page->>API: listAvailableVehicles(201, 'GENERAL') |
| | | API->>DB: SELECT dept_id FROM sys_dept WHERE dept_id=201 |
| | | DB-->>API: parent_id=101 (䏿¯100) |
| | | API->>DB: SELECT ancestors FROM sys_dept WHERE dept_id=201 |
| | | DB-->>API: "100,101,201" |
| | | API->>DB: FIND_IN_SET in ancestors WHERE parent_id=100 |
| | | DB-->>API: æ¾å°åå
¬å¸ID: 101 |
| | | API->>DB: SELECT * FROM tb_vehicle_info WHERE dept_id=101 |
| | | DB-->>API: æ·±å³åå
¬å¸ç车è¾å表 |
| | | API-->>Page: è¿åè½¦è¾æ°æ® |
| | | Page-->>User: æ¾ç¤ºæ·±å³åå
¬å¸çè½¦è¾ |
| | | ``` |
| | | |
| | | ## å
¼å®¹æ§ |
| | | |
| | | ### â
æ¯æçåºæ¯ |
| | | |
| | | | è¾å
¥deptId | é¨é¨ç±»å | æ¥è¯¢ç»æ | |
| | | |-----------|---------|---------| |
| | | | 101 | åå
¬å¸ | 101çè½¦è¾ â
| |
| | | | 201 | åé¨é¨ | 101çè½¦è¾ â
| |
| | | | 301 | åé¨é¨ | 101çè½¦è¾ â
| |
| | | | 401 | æ¾åé¨é¨ | 101çè½¦è¾ â
| |
| | | |
| | | ### â ï¸ ç¹æ®æ
åµ |
| | | |
| | | | è¾å
¥deptId | 说æ | æ¥è¯¢ç»æ | |
| | | |-----------|------|---------| |
| | | | 100 | æ»å
¬å¸ | â æ¥ä¸å°ï¼è½¦è¾å¿
é¡»å½å±äºåå
¬å¸ï¼ | |
| | | | null | ç©ºå¼ | â 䏿§è¡é¨é¨è¿æ»¤ | |
| | | |
| | | ## æ§è½ä¼å |
| | | |
| | | ### ç´¢å¼å»ºè®® |
| | | |
| | | ä¸ºäºæé«æ¥è¯¢æ§è½ï¼å»ºè®®å¨ `sys_dept` 表添å ç´¢å¼ï¼ |
| | | |
| | | ```sql |
| | | -- é¨é¨è¡¨ç´¢å¼ |
| | | CREATE INDEX idx_parent_id ON sys_dept(parent_id); |
| | | CREATE INDEX idx_ancestors ON sys_dept(ancestors(100)); |
| | | |
| | | -- 车è¾è¡¨ç´¢å¼ï¼å·²åå¨ï¼ |
| | | CREATE INDEX idx_dept_id ON tb_vehicle_info(dept_id); |
| | | ``` |
| | | |
| | | ### æ¥è¯¢ä¼å |
| | | |
| | | - â
ä½¿ç¨ `CASE WHEN` åå°åæ¥è¯¢æ¬¡æ° |
| | | - â
ä½¿ç¨ `LIMIT 1` éå¶ç»æé |
| | | - â
`FIND_IN_SET` å©ç¨ç´¢å¼æ¥è¯¢ |
| | | |
| | | ## æµè¯éªè¯ |
| | | |
| | | ### æµè¯åºæ¯1ï¼åå
¬å¸ç¨æ· |
| | | |
| | | ```sql |
| | | -- 模æè¾å
¥ï¼deptId = 101 |
| | | SELECT * FROM tb_vehicle_info v |
| | | WHERE v.dept_id = ( |
| | | select case |
| | | when exists(select 1 from sys_dept where dept_id = 101 and parent_id = 100) |
| | | then 101 |
| | | else (...) |
| | | end |
| | | ) |
| | | -- ç»æï¼dept_id = 101 |
| | | ``` |
| | | |
| | | ### æµè¯åºæ¯2ï¼åé¨é¨ç¨æ· |
| | | |
| | | ```sql |
| | | -- 模æè¾å
¥ï¼deptId = 201 |
| | | SELECT * FROM tb_vehicle_info v |
| | | WHERE v.dept_id = ( |
| | | select case |
| | | when exists(select 1 from sys_dept where dept_id = 201 and parent_id = 100) |
| | | then 201 |
| | | else ( |
| | | select d.dept_id |
| | | from sys_dept d |
| | | where d.parent_id = 100 |
| | | and FIND_IN_SET(d.dept_id, ( |
| | | select ancestors from sys_dept where dept_id = 201 |
| | | )) |
| | | limit 1 |
| | | ) |
| | | end |
| | | ) |
| | | -- ç»æï¼dept_id = 101 |
| | | ``` |
| | | |
| | | ## å½±åèå´ |
| | | |
| | | ### ä¿®æ¹çæä»¶ |
| | | - [`VehicleInfoMapper.xml`](file://d:\project\æ¥æè½¬è¿\code\Api\RuoYi-Vue-master\ruoyi-system\src\main\resources\mapper\system\VehicleInfoMapper.xml) - è½¦è¾æ¥è¯¢Mapper |
| | | |
| | | ### å½±åçåè½ |
| | | 1. â
ç»å®è½¦è¾ - èªå¨æ¾ç¤ºåå
¬å¸è½¦è¾ |
| | | 2. â
åå»ºä»»å¡ - èªå¨æ¾ç¤ºåå
¬å¸è½¦è¾ |
| | | 3. â
车è¾ç®¡ç - èªå¨æåå
¬å¸è¿æ»¤ |
| | | 4. â
ææè°ç¨ `selectVehicleInfoList` çå°æ¹ |
| | | |
| | | ### ååå
¼å®¹ |
| | | - â
ä¼ å
¥åå
¬å¸IDä»ç¶æ£å¸¸å·¥ä½ |
| | | - â
ä¼ å
¥åé¨é¨IDèªå¨è½¬æ¢ä¸ºåå
¬å¸ID |
| | | - â
ä¸å½±åå
¶ä»æ¥è¯¢æ¡ä»¶ |
| | | |
| | | ## æ»ç» |
| | | |
| | | ### â
ä¼å¿ |
| | | |
| | | 1. **èªå¨å¹é
** - æ è®ºç¨æ·å¨åªä¸ªå±çº§çé¨é¨ï¼é½è½çå°åå
¬å¸çè½¦è¾ |
| | | 2. **ç¨æ·å好** - ç¨æ·ä¸éè¦å
³å¿èªå·±æ¯å¨åªä¸ªåé¨é¨ |
| | | 3. **æ°æ®é离** - ä¾ç¶ä¿æåå
¬å¸ä¹é´çæ°æ®é离 |
| | | 4. **ååå
¼å®¹** - ä¸å½±åç°æåè½ |
| | | |
| | | ### ð æ³¨æäºé¡¹ |
| | | |
| | | 1. **ancestorsåæ®µ** - ä¾èµ `sys_dept` 表ç `ancestors` åæ®µæ£ç¡®ç»´æ¤ |
| | | 2. **æ§è½** - 建议添å ç´¢å¼ä»¥æé«æ¥è¯¢æ§è½ |
| | | 3. **æ»å
¬å¸** - ä¼ å
¥æ»å
¬å¸ID(100)ä¸ä¼è¿åè½¦è¾ |
| | | |
| | | --- |
| | | |
| | | **æ´æ°æ¶é´**: 2025-10-25 |
| | | **çæ¬**: v1.0 |
| | | **ç¶æ**: â
å·²å®ç° |
| New file |
| | |
| | | # é¨é¨åå
¬å¸IDè·åæ¹æ³è¯´æ |
| | | |
| | | ## æ¦è¿° |
| | | |
| | | æ°å¢äºç¬ç«çæ¹æ³ `selectBranchCompanyIdByDeptId`ï¼ç¨äºè·åæå®é¨é¨ID对åºçåå
¬å¸IDï¼parent_id=100çé¨é¨ï¼ã |
| | | |
| | | ## æ¹æ³å®ä¹ |
| | | |
| | | ### Mapperæ¥å£ |
| | | |
| | | **æä»¶**: `SysDeptMapper.java` |
| | | |
| | | ```java |
| | | /** |
| | | * è·åæå®é¨é¨IDçåå
¬å¸ID(parent_id=100çé¨é¨) |
| | | * å¦æä¼ å
¥çå°±æ¯åå
¬å¸ï¼ç´æ¥è¿åï¼å¦åä»ancestors䏿¥æ¾åå
¬å¸ID |
| | | * |
| | | * @param deptId é¨é¨ID |
| | | * @return åå
¬å¸IDï¼å¦ææ¾ä¸å°åè¿ånull |
| | | */ |
| | | public Long selectBranchCompanyIdByDeptId(@Param("deptId") Long deptId); |
| | | ``` |
| | | |
| | | ### SQLå®ç° |
| | | |
| | | **æä»¶**: `SysDeptMapper.xml` |
| | | |
| | | ```xml |
| | | <!-- è·åæå®é¨é¨IDçåå
¬å¸IDï¼parent_id=100çé¨é¨ï¼ --> |
| | | <select id="selectBranchCompanyIdByDeptId" parameterType="Long" resultType="Long"> |
| | | select case |
| | | -- å¦æä¼ å
¥çå°±æ¯åå
¬å¸ï¼parent_id=100ï¼ï¼ç´æ¥è¿å |
| | | when exists(select 1 from sys_dept where dept_id = #{deptId} and parent_id = 100 and del_flag = '0') |
| | | then #{deptId} |
| | | else ( |
| | | -- å¦åä» ancestors 䏿¥æ¾åå
¬å¸ID |
| | | select d.dept_id |
| | | from sys_dept d |
| | | where d.parent_id = 100 |
| | | and d.del_flag = '0' |
| | | and FIND_IN_SET(d.dept_id, ( |
| | | select ancestors from sys_dept where dept_id = #{deptId} and del_flag = '0' |
| | | )) |
| | | limit 1 |
| | | ) |
| | | end |
| | | </select> |
| | | ``` |
| | | |
| | | ## 使ç¨ç¤ºä¾ |
| | | |
| | | ### å¨Serviceå±ä¸ä½¿ç¨ |
| | | |
| | | ```java |
| | | @Autowired |
| | | private SysDeptMapper deptMapper; |
| | | |
| | | public void someMethod(Long deptId) { |
| | | // è·ååå
¬å¸ID |
| | | Long branchCompanyId = deptMapper.selectBranchCompanyIdByDeptId(deptId); |
| | | |
| | | if (branchCompanyId != null) { |
| | | // 使ç¨åå
¬å¸IDè¿è¡åç»æä½ |
| | | System.out.println("åå
¬å¸ID: " + branchCompanyId); |
| | | } else { |
| | | // æ¾ä¸å°åå
¬å¸ï¼å¯è½æ¯æ»å
¬å¸ææ°æ®å¼å¸¸ï¼ |
| | | System.out.println("æªæ¾å°åå
¬å¸ID"); |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ### å¨MyBatis XMLä¸ä½¿ç¨ |
| | | |
| | | å¯ä»¥å¨å
¶ä»MapperçSQLä¸ä½ä¸ºåæ¥è¯¢ä½¿ç¨ï¼ |
| | | |
| | | ```xml |
| | | <select id="someQuery" resultType="SomeType"> |
| | | SELECT * FROM some_table |
| | | WHERE dept_id = ( |
| | | SELECT CASE |
| | | WHEN EXISTS(SELECT 1 FROM sys_dept WHERE dept_id = #{deptId} AND parent_id = 100 AND del_flag = '0') |
| | | THEN #{deptId} |
| | | ELSE ( |
| | | SELECT d.dept_id |
| | | FROM sys_dept d |
| | | WHERE d.parent_id = 100 |
| | | AND d.del_flag = '0' |
| | | AND FIND_IN_SET(d.dept_id, ( |
| | | SELECT ancestors FROM sys_dept WHERE dept_id = #{deptId} AND del_flag = '0' |
| | | )) |
| | | LIMIT 1 |
| | | ) |
| | | END |
| | | ) |
| | | </select> |
| | | ``` |
| | | |
| | | ## å·¥ä½åç |
| | | |
| | | ### é¨é¨ç»æç¤ºä¾ |
| | | |
| | | ``` |
| | | æ»å
¬å¸ (dept_id=100, parent_id=0, ancestors="0") |
| | | âââ å京åå
¬å¸ (dept_id=101, parent_id=100, ancestors="0,100") |
| | | â âââ ææ¯é¨ (dept_id=201, parent_id=101, ancestors="0,100,101") |
| | | â âââ ä¸å¡é¨ (dept_id=202, parent_id=101, ancestors="0,100,101") |
| | | âââ 䏿µ·åå
¬å¸ (dept_id=102, parent_id=100, ancestors="0,100") |
| | | âââ å¸åºé¨ (dept_id=203, parent_id=102, ancestors="0,100,102") |
| | | ``` |
| | | |
| | | ### æ¥è¯¢é»è¾ |
| | | |
| | | 1. **ä¼ å
¥åå
¬å¸ID** (å¦: deptId=101) |
| | | - æ£æ¥ `parent_id = 100` â
|
| | | - ç´æ¥è¿å: `101` |
| | | |
| | | 2. **ä¼ å
¥åé¨é¨ID** (å¦: deptId=201) |
| | | - æ£æ¥ `parent_id = 100` â |
| | | - æ¥è¯¢ `ancestors = "0,100,101"` |
| | | - ä½¿ç¨ `FIND_IN_SET` æ¥æ¾ `parent_id=100` çé¨é¨ |
| | | - æ¾å°å¹é
: `101` |
| | | - è¿å: `101` |
| | | |
| | | 3. **ä¼ å
¥æ»å
¬å¸ID** (å¦: deptId=100) |
| | | - æ£æ¥ `parent_id = 100` â (parent_id=0) |
| | | - ancestors䏿²¡æparent_id=100çé¨é¨ |
| | | - è¿å: `null` |
| | | |
| | | ## åºç¨åºæ¯ |
| | | |
| | | ### 1. è½¦è¾æ¥è¯¢ |
| | | ç¨æ·å¨ä»»æé¨é¨ï¼æ¥è¯¢æ¶èªå¨å®ä½å°æå±åå
¬å¸ç车è¾ï¼ |
| | | |
| | | ```java |
| | | // åå§å®ç°ï¼VehicleInfoMapper.xmlï¼ |
| | | Long branchCompanyId = deptMapper.selectBranchCompanyIdByDeptId(userDeptId); |
| | | List<VehicleInfo> vehicles = vehicleMapper.selectByDeptId(branchCompanyId); |
| | | ``` |
| | | |
| | | ### 2. æ°æ®æéè¿æ»¤ |
| | | éå¶ç¨æ·åªè½æ¥çæå±åå
¬å¸çæ°æ®ï¼ |
| | | |
| | | ```java |
| | | public List<SomeData> getDataList(Long userDeptId) { |
| | | Long branchCompanyId = deptMapper.selectBranchCompanyIdByDeptId(userDeptId); |
| | | return someMapper.selectByBranchCompany(branchCompanyId); |
| | | } |
| | | ``` |
| | | |
| | | ### 3. æ¥è¡¨ç»è®¡ |
| | | æåå
¬å¸ç»´åº¦ç»è®¡æ°æ®ï¼ |
| | | |
| | | ```java |
| | | public Map<String, Object> getStatistics(Long deptId) { |
| | | Long branchCompanyId = deptMapper.selectBranchCompanyIdByDeptId(deptId); |
| | | return statisticsService.getByBranchCompany(branchCompanyId); |
| | | } |
| | | ``` |
| | | |
| | | ## æ§è½ä¼å建议 |
| | | |
| | | ### 1. æ·»å ç´¢å¼ |
| | | ç¡®ä¿ä»¥ä¸å段æç´¢å¼ï¼ |
| | | ```sql |
| | | -- å·²æçç´¢å¼ |
| | | CREATE INDEX idx_parent_id ON sys_dept(parent_id); |
| | | CREATE INDEX idx_del_flag ON sys_dept(del_flag); |
| | | |
| | | -- 建议添å å¤åç´¢å¼ |
| | | CREATE INDEX idx_parent_del ON sys_dept(parent_id, del_flag); |
| | | ``` |
| | | |
| | | ### 2. ç»æç¼å |
| | | 对äºé¢ç¹æ¥è¯¢çåºæ¯ï¼å¯ä»¥èèç¼åç»æï¼ |
| | | |
| | | ```java |
| | | @Cacheable(value = "branchCompany", key = "#deptId") |
| | | public Long getBranchCompanyId(Long deptId) { |
| | | return deptMapper.selectBranchCompanyIdByDeptId(deptId); |
| | | } |
| | | ``` |
| | | |
| | | ## 注æäºé¡¹ |
| | | |
| | | 1. **è¿åå¼å¯è½ä¸ºnull** |
| | | - æ»å
¬å¸ï¼dept_id=100ï¼æ¥è¯¢æ¶ä¼è¿ånull |
| | | - é¨é¨æ°æ®å¼å¸¸æ¶ä¹ä¼è¿ånull |
| | | - ä½¿ç¨æ¶éè¦å空å¼å¤æ |
| | | |
| | | 2. **åªæ¥è¯¢æ£å¸¸é¨é¨** |
| | | - SQLä¸å·²è¿æ»¤ `del_flag = '0'` |
| | | - 被å é¤çé¨é¨ä¸ä¼è¢«æ¥è¯¢å° |
| | | |
| | | 3. **åå
¬å¸å®ä¹** |
| | | - åå
¬å¸å¿
须满足 `parent_id = 100` |
| | | - 妿ç»ç»æ¶æè°æ´ï¼éè¦ç¡®ä¿è¿ä¸ªè§åä»ç¶éç¨ |
| | | |
| | | 4. **ancestorsåæ®µç»´æ¤** |
| | | - é¨é¨å±çº§åæ´æ¶å¿
é¡»æ´æ°ancestorsåæ®µ |
| | | - ancestorsæ ¼å¼å¿
é¡»æ¯éå·åéçIDå表 |
| | | |
| | | ## æµè¯åºæ¯ |
| | | |
| | | ### æµè¯ç¨ä¾1: ä¼ å
¥åå
¬å¸ID |
| | | ``` |
| | | è¾å
¥: deptId = 101 (å京åå
¬å¸) |
| | | 颿è¾åº: 101 |
| | | ``` |
| | | |
| | | ### æµè¯ç¨ä¾2: ä¼ å
¥åé¨é¨ID |
| | | ``` |
| | | è¾å
¥: deptId = 201 (ææ¯é¨) |
| | | 颿è¾åº: 101 (å京åå
¬å¸) |
| | | ``` |
| | | |
| | | ### æµè¯ç¨ä¾3: ä¼ å
¥æ»å
¬å¸ID |
| | | ``` |
| | | è¾å
¥: deptId = 100 (æ»å
¬å¸) |
| | | 颿è¾åº: null |
| | | ``` |
| | | |
| | | ### æµè¯ç¨ä¾4: ä¼ å
¥å¤çº§åé¨é¨ID |
| | | ``` |
| | | è¾å
¥: deptId = 301 (åè®¾ææ¯é¨ä¸çå°ç»ï¼ancestors="0,100,101,201") |
| | | 颿è¾åº: 101 (å京åå
¬å¸) |
| | | ``` |
| | | |
| | | ## æ´æ°æ¥å¿ |
| | | |
| | | - **2025-01-25**: å建ç¬ç«æ¹æ³ `selectBranchCompanyIdByDeptId` |
| | | - ç®ç: ç®ååå
¬å¸IDæ¥è¯¢é»è¾ï¼æé«ä»£ç å¤ç¨æ§ |
| New file |
| | |
| | | # éç§æ¿çåç¨æ·åè®®å¿å访é®é
置说æ |
| | | |
| | | ## ä¸ãéæ±èæ¯ |
| | | |
| | | æ ¹æ®æ³å¾æ³è§åç¨æ·ä½éªè¦æ±ï¼ |
| | | - ç¨æ·å¨æ³¨å/ç»å½ååºè½æ¥çãéç§æ¿çãåãç¨æ·æå¡åè®®ã |
| | | - è¿ä¸¤ä¸ªé¡µé¢éè¦æ¯æ**å¿å访é®**ï¼æ éç»å½ï¼ |
| | | - ç¨æ·å¯ä»¥å
åäºè§£åè®®å
容ååå³å®æ¯å¦æ³¨å |
| | | |
| | | ## äºãå®ç°æ¹æ¡ |
| | | |
| | | ### 2.1 ä¿®æ¹å
容 |
| | | |
| | | **æä»¶**: `app/permission.js` |
| | | |
| | | **ä¿®æ¹å**: |
| | | ```javascript |
| | | // 页é¢ç½åå |
| | | const whiteList = [ |
| | | '/pages/login', '/pages/register', '/pages/common/webview/index' |
| | | ] |
| | | ``` |
| | | |
| | | **ä¿®æ¹å**: |
| | | ```javascript |
| | | // 页é¢ç½åå |
| | | const whiteList = [ |
| | | '/pages/login', |
| | | '/pages/register', |
| | | '/pages/common/webview/index', |
| | | '/pages/mine/privacy-policy/index', // éç§æ¿çï¼å¿å访é®ï¼ |
| | | '/pages/mine/user-agreement/index' // ç¨æ·åè®®ï¼å¿å访é®ï¼ |
| | | ] |
| | | ``` |
| | | |
| | | ### 2.2 å·¥ä½åç |
| | | |
| | | **æéæ¦æªæºå¶**: |
| | | |
| | | 1. **æ¦æªææé¡µé¢è·³è½¬** |
| | | - `navigateTo`: ä¿çå½å页é¢ï¼è·³è½¬å°æ°é¡µé¢ |
| | | - `redirectTo`: å
³éå½å页é¢ï¼è·³è½¬å°æ°é¡µé¢ |
| | | - `reLaunch`: å
³éææé¡µé¢ï¼æå¼å°åºç¨å
çæä¸ªé¡µé¢ |
| | | - `switchTab`: è·³è½¬å° tabBar é¡µé¢ |
| | | |
| | | 2. **æ£æ¥ç¨æ·ç»å½ç¶æ** |
| | | ```javascript |
| | | if (getToken()) { |
| | | // å·²ç»å½ï¼å
è®¸è®¿é® |
| | | return true |
| | | } |
| | | ``` |
| | | |
| | | 3. **æªç»å½æ¶æ£æ¥ç½åå** |
| | | ```javascript |
| | | if (checkWhite(to.url)) { |
| | | // å¨ç½ååä¸ï¼å
è®¸è®¿é® |
| | | return true |
| | | } else { |
| | | // ä¸å¨ç½ååï¼è·³è½¬å°ç»å½é¡µ |
| | | uni.reLaunch({ url: loginPage }) |
| | | return false |
| | | } |
| | | ``` |
| | | |
| | | ## ä¸ãç½åå页é¢å表 |
| | | |
| | | | 页é¢è·¯å¾ | 说æ | ç¨é | |
| | | |---------|------|------| |
| | | | `/pages/login` | ç»å½é¡µé¢ | ç¨æ·ç»å½å
¥å£ | |
| | | | `/pages/register` | 注åé¡µé¢ | ç¨æ·æ³¨åå
¥å£ | |
| | | | `/pages/common/webview/index` | WebViewé¡µé¢ | å è½½å¤é¨ç½é¡µ | |
| | | | `/pages/mine/privacy-policy/index` | éç§æ¿ç | å±ç¤ºéç§ä¿æ¤æ¿çï¼æ°å¢ï¼ | |
| | | | `/pages/mine/user-agreement/index` | ç¨æ·åè®® | å±ç¤ºæå¡åè®®ï¼æ°å¢ï¼ | |
| | | |
| | | ## åã使ç¨åºæ¯ |
| | | |
| | | ### åºæ¯1: ç»å½é¡µé¢æ¥çåè®® |
| | | |
| | | **ç¨æ·æä½**: |
| | | ``` |
| | | ç»å½é¡µé¢ â ç¹å»ãéç§åè®®ãæãç¨æ·åè®®ã |
| | | â |
| | | æ¥çåè®®å
å®¹ï¼æ éç»å½ï¼ |
| | | â |
| | | è¿åç»å½é¡µé¢ |
| | | ``` |
| | | |
| | | **代ç å®ç°**: |
| | | ```vue |
| | | <!-- app/pages/login.vue --> |
| | | <view class="xieyi text-center"> |
| | | <text class="text-grey1">ç»å½å³ä»£è¡¨åæ</text> |
| | | <text @click.stop="handleUserAgrement" class="text-blue">ãç¨æ·åè®®ã</text> |
| | | <text class="text-grey1">å</text> |
| | | <text @click.stop="handlePrivacy" class="text-blue">ãéç§åè®®ã</text> |
| | | </view> |
| | | |
| | | <script> |
| | | methods: { |
| | | handlePrivacy() { |
| | | // â
å¯ä»¥ç´æ¥è·³è½¬ï¼æ éç»å½ |
| | | this.$tab.navigateTo('/pages/mine/privacy-policy/index') |
| | | }, |
| | | handleUserAgrement() { |
| | | // â
å¯ä»¥ç´æ¥è·³è½¬ï¼æ éç»å½ |
| | | this.$tab.navigateTo('/pages/mine/user-agreement/index') |
| | | } |
| | | } |
| | | </script> |
| | | ``` |
| | | |
| | | ### åºæ¯2: 注å页颿¥çåè®® |
| | | |
| | | **ç¨æ·æä½**: |
| | | ``` |
| | | 注åé¡µé¢ â ç¹å»åè®®é¾æ¥ |
| | | â |
| | | æ¥çåè®®å
å®¹ï¼æ éç»å½ï¼ |
| | | â |
| | | è¿å注åé¡µé¢ â å¾éåæ â å®ææ³¨å |
| | | ``` |
| | | |
| | | **代ç å®ç°**: |
| | | ```vue |
| | | <!-- app/pages/register.vue --> |
| | | <view class="agreement-section"> |
| | | <checkbox-group @change="handleAgreementChange"> |
| | | <label class="agreement-label"> |
| | | <checkbox value="agreed" :checked="agreedToTerms" color="#007AFF" /> |
| | | <text class="agreement-text"> |
| | | æå·²é
è¯»å¹¶åæ |
| | | <text class="agreement-link" @click.stop="handleUserAgreement">ãç¨æ·æå¡åè®®ã</text> |
| | | å |
| | | <text class="agreement-link" @click.stop="handlePrivacy">ãéç§æ¿çã</text> |
| | | </text> |
| | | </label> |
| | | </checkbox-group> |
| | | </view> |
| | | |
| | | <script> |
| | | methods: { |
| | | handlePrivacy() { |
| | | // â
å¯ä»¥ç´æ¥è·³è½¬ï¼æ éç»å½ |
| | | this.$tab.navigateTo('/pages/mine/privacy-policy/index') |
| | | }, |
| | | handleUserAgreement() { |
| | | // â
å¯ä»¥ç´æ¥è·³è½¬ï¼æ éç»å½ |
| | | this.$tab.navigateTo('/pages/mine/user-agreement/index') |
| | | } |
| | | } |
| | | </script> |
| | | ``` |
| | | |
| | | ### åºæ¯3: å·²ç»å½ç¨æ·æ¥çåè®® |
| | | |
| | | **ç¨æ·æä½**: |
| | | ``` |
| | | æçé¡µé¢ â ç¹å»"ç¨æ·æå¡åè®®"æ"éç§æ¿ç"èå |
| | | â |
| | | æ¥çåè®®å
容 |
| | | â |
| | | è¿åæçé¡µé¢ |
| | | ``` |
| | | |
| | | **代ç å®ç°**: |
| | | ```vue |
| | | <!-- app/pages/mine/index.vue --> |
| | | <view class="list-cell list-cell-arrow" @click="handleUserAgreement"> |
| | | <view class="menu-item-box"> |
| | | <view class="iconfont icon-text menu-icon"></view> |
| | | <view>ç¨æ·æå¡åè®®</view> |
| | | </view> |
| | | </view> |
| | | |
| | | <script> |
| | | methods: { |
| | | handleUserAgreement() { |
| | | // â
å·²ç»å½ç¨æ·ä¹å¯è®¿é® |
| | | this.$tab.navigateTo('/pages/mine/user-agreement/index') |
| | | } |
| | | } |
| | | </script> |
| | | ``` |
| | | |
| | | ## äºãæéæ§å¶æµç¨å¾ |
| | | |
| | | ``` |
| | | ç¨æ·è·³è½¬é¡µé¢ |
| | | â |
| | | æ£æ¥æ¯å¦å·²ç»å½ï¼ |
| | | â |
| | | æ¯ â å
è®¸è®¿é®ææé¡µé¢ |
| | | â |
| | | å¦ â æ£æ¥æ¯å¦å¨ç½ååï¼ |
| | | â |
| | | æ¯ â å
è®¸è®¿é® |
| | | â |
| | | å¦ â 强å¶è·³è½¬å°ç»å½é¡µ |
| | | ``` |
| | | |
| | | ## å
ãæµè¯éªè¯ |
| | | |
| | | ### æµè¯æ¥éª¤ |
| | | |
| | | #### æµè¯1: æªç»å½ç¶æè®¿é®åè®®ï¼æ ¸å¿æµè¯ï¼ |
| | | |
| | | 1. **æ¸
é¤ç»å½ç¶æ** |
| | | ```javascript |
| | | // 卿§å¶å°æ§è¡ |
| | | uni.removeStorageSync('token') |
| | | uni.removeStorageSync('user') |
| | | ``` |
| | | |
| | | 2. **éå¯å°ç¨åº** |
| | | - 微信å¼åè
å·¥å
· â ç¼è¯ |
| | | |
| | | 3. **æµè¯ç»å½é¡µé¢** |
| | | - åºè¯¥èªå¨è·³è½¬å°ç»å½é¡µé¢ |
| | | - ç¹å»ãç¨æ·åè®®ã龿¥ |
| | | - â
åºè¯¥è½æå跳转å°å议页é¢ï¼ä¸ä¼è¢«æ¦æªï¼ |
| | | - æ¥çåè®®å
容 |
| | | - ç¹å»è¿åæé® |
| | | - â
åºè¯¥è¿åå°ç»å½é¡µé¢ |
| | | |
| | | 4. **æµè¯æ³¨å页é¢** |
| | | - ä»ç»å½é¡µç¹å»"ç«å³æ³¨å" |
| | | - ç¹å»åè®®é¾æ¥ |
| | | - â
åºè¯¥è½æå跳转å°åè®®é¡µé¢ |
| | | - è¿å注åé¡µé¢ |
| | | - â
checkboxç¶æä¿æ |
| | | |
| | | #### æµè¯2: å·²ç»å½ç¶æè®¿é®åè®® |
| | | |
| | | 1. **æ£å¸¸ç»å½** |
| | | - è´¦å·: admin |
| | | - å¯ç : admin123 |
| | | |
| | | 2. **ä»"æç"页é¢è®¿é®** |
| | | - è¿å
¥"æç"é¡µé¢ |
| | | - ç¹å»"ç¨æ·æå¡åè®®" |
| | | - â
åºè¯¥è½æå跳转 |
| | | - è¿å |
| | | - ç¹å»"éç§æ¿ç" |
| | | - â
åºè¯¥è½æå跳转 |
| | | |
| | | #### æµè¯3: ç´æ¥è®¿é®åè®®é¡µé¢ |
| | | |
| | | 卿µè§å¨ä¸ç´æ¥è¾å
¥å°åï¼H5è°è¯ï¼: |
| | | ``` |
| | | http://localhost:9090/#/pages/mine/privacy-policy/index |
| | | http://localhost:9090/#/pages/mine/user-agreement/index |
| | | ``` |
| | | |
| | | â
åºè¯¥è½ç´æ¥è®¿é®ï¼ä¸ä¼è·³è½¬å°ç»å½é¡µ |
| | | |
| | | ### é¢æç»æ |
| | | |
| | | | æµè¯åºæ¯ | é¢æç»æ | |
| | | |---------|---------| |
| | | | æªç»å½è®¿é®ç»å½é¡µ | â
å
è®¸è®¿é® | |
| | | | æªç»å½è®¿é®æ³¨å页 | â
å
è®¸è®¿é® | |
| | | | æªç»å½è®¿é®éç§æ¿ç | â
å
许访é®ï¼æ°å¢ï¼ | |
| | | | æªç»å½è®¿é®ç¨æ·åè®® | â
å
许访é®ï¼æ°å¢ï¼ | |
| | | | æªç»å½è®¿é®é¦é¡µ | â 跳转å°ç»å½é¡µ | |
| | | | æªç»å½è®¿é®ä»»å¡é¡µ | â 跳转å°ç»å½é¡µ | |
| | | | å·²ç»å½è®¿é®ææé¡µé¢ | â
å
è®¸è®¿é® | |
| | | |
| | | ## ä¸ã常è§é®é¢ |
| | | |
| | | ### é®é¢1: ç¹å»åè®®é¾æ¥åä»è·³è½¬å°ç»å½é¡µ |
| | | |
| | | **åå **: ç½ååè·¯å¾é
ç½®é误 |
| | | |
| | | **æ£æ¥**: |
| | | ```javascript |
| | | // app/permission.js |
| | | // ç¡®ä¿è·¯å¾å®å
¨å¹é
|
| | | '/pages/mine/privacy-policy/index' // â
æ£ç¡® |
| | | '/pages/mine/privacy-policy' // â é误ï¼ç¼ºå°/indexï¼ |
| | | ``` |
| | | |
| | | **è§£å³**: ç¡®ä¿è·¯å¾ä¸pages.jsonä¸çé
ç½®ä¸è´ |
| | | |
| | | --- |
| | | |
| | | ### é®é¢2: ä»å议页é¢è¿ååï¼ç»å½é¡µææ³¨åé¡µç¶æä¸¢å¤± |
| | | |
| | | **åå **: 使ç¨äºé误çè·³è½¬æ¹æ³ |
| | | |
| | | **è§£å³**: |
| | | ```javascript |
| | | // â
æ£ç¡®ï¼ä½¿ç¨navigateToï¼ä¿çå½åé¡µé¢ |
| | | this.$tab.navigateTo('/pages/mine/privacy-policy/index') |
| | | |
| | | // â é误ï¼ä½¿ç¨redirectToä¼å
³éå½åé¡µé¢ |
| | | this.$tab.redirectTo('/pages/mine/privacy-policy/index') |
| | | ``` |
| | | |
| | | --- |
| | | |
| | | ### é®é¢3: H5ç¯å¢ä¸å·æ°å议页é¢å跳转å°ç»å½é¡µ |
| | | |
| | | **åå **: H5å·æ°ä¼éæ°æ§è¡è·¯ç±å®å« |
| | | |
| | | **éªè¯**: è¿æ¯æ£å¸¸ç°è±¡ï¼ç§»å¨ç«¯ä¸åå¨å·æ°æä½ |
| | | |
| | | **è§£å³**: å¦éH5æ¯æå·æ°ï¼éè¦é¢å¤é
置路ç±å®å« |
| | | |
| | | --- |
| | | |
| | | ## å
«ãå®å
¨èè |
| | | |
| | | ### 8.1 ç½ååèå´æ§å¶ |
| | | |
| | | **åå**: åªå°å¿
è¦ç页é¢å å
¥ç½åå |
| | | |
| | | **å½åç½åå**: |
| | | - â
ç»å½/注å页é¢ï¼å¿
é¡»å¿åè®¿é® |
| | | - â
å议页é¢ï¼æ³å¾è¦æ±å¿åè®¿é® |
| | | - â
WebView页é¢ï¼ç¨äºæ¾ç¤ºå¤é¨åè®®é¾æ¥ |
| | | |
| | | **ä¸åºå å
¥ç½ååç页é¢**: |
| | | - â é¦é¡µ |
| | | - â ä»»å¡é¡µé¢ |
| | | - â æ¶æ¯é¡µé¢ |
| | | - â 个人信æ¯é¡µé¢ |
| | | - â å
¶ä»ä¸å¡åè½é¡µé¢ |
| | | |
| | | ### 8.2 æ°æ®å®å
¨ |
| | | |
| | | **å议页é¢ç¹ç¹**: |
| | | - â
纯å±ç¤ºå
å®¹ï¼æ æææ°æ® |
| | | - â
䏿¶åAPIè°ç¨ |
| | | - â
ä¸éè¦ç¨æ·èº«ä»½éªè¯ |
| | | - â
ä¸ä¼æ³é²ç³»ç»ä¿¡æ¯ |
| | | |
| | | **å®å
¨æªæ½**: |
| | | ```vue |
| | | <!-- å议页é¢åªå
å«éæå
容 --> |
| | | <template> |
| | | <view class="agreement-container"> |
| | | <!-- åªæææ¬å
å®¹ï¼æ ç¨æ·æ°æ® --> |
| | | <view class="agreement-content"> |
| | | <text>åè®®å
容...</text> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <script> |
| | | export default { |
| | | data() { |
| | | return {} // æ æææ°æ® |
| | | }, |
| | | methods: { |
| | | goBack() { |
| | | uni.navigateBack() // åªæè¿ååè½ |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | ``` |
| | | |
| | | ## ä¹ãåç»ä¼å建议 |
| | | |
| | | ### 9.1 æ·»å åè®®çæ¬ç®¡ç |
| | | |
| | | ```javascript |
| | | // app/config.js |
| | | module.exports = { |
| | | agreements: { |
| | | privacyPolicy: { |
| | | version: '1.0', |
| | | lastUpdate: '2025-01-25', |
| | | path: '/pages/mine/privacy-policy/index' |
| | | }, |
| | | userAgreement: { |
| | | version: '1.0', |
| | | lastUpdate: '2025-01-25', |
| | | path: '/pages/mine/user-agreement/index' |
| | | } |
| | | } |
| | | } |
| | | ``` |
| | | |
| | | ### 9.2 è®°å½ç¨æ·åæç¶æ |
| | | |
| | | ```javascript |
| | | // ç¨æ·é¦æ¬¡è®¿é®æ¶ |
| | | localStorage.setItem('agreement_accepted', JSON.stringify({ |
| | | privacyPolicy: { version: '1.0', acceptedAt: '2025-01-25' }, |
| | | userAgreement: { version: '1.0', acceptedAt: '2025-01-25' } |
| | | })) |
| | | |
| | | // åè®®æ´æ°æ¶ï¼æç¤ºç¨æ·éæ°é
读 |
| | | if (currentVersion !== acceptedVersion) { |
| | | // æ¾ç¤ºåè®®æ´æ°æç¤º |
| | | } |
| | | ``` |
| | | |
| | | ### 9.3 æ·»å 访é®ç»è®¡ |
| | | |
| | | ```javascript |
| | | // ç»è®¡å议页é¢è®¿é®é |
| | | onLoad() { |
| | | // 䏿¥ç»è®¡æ°æ® |
| | | uni.request({ |
| | | url: '/api/statistics/agreement-view', |
| | | method: 'POST', |
| | | data: { |
| | | type: 'privacy-policy', |
| | | timestamp: new Date().getTime() |
| | | } |
| | | }) |
| | | } |
| | | ``` |
| | | |
| | | ## åãæ»ç» |
| | | |
| | | ### 宿çå·¥ä½ |
| | | |
| | | â
**æéé
ç½®**: å·²å°éç§æ¿çåç¨æ·å议页é¢å å
¥ç½åå |
| | | â
**å¿å访é®**: ç¨æ·æ éç»å½å³å¯æ¥çåè®®å
容 |
| | | â
**æ³å¾åè§**: 满足ã个人信æ¯ä¿æ¤æ³ãçæ³è§è¦æ± |
| | | â
**ç¨æ·ä½éª**: ç¨æ·å¯å¨æ³¨ååå
åäºè§£åè®® |
| | | |
| | | ### ä¿®æ¹çæä»¶ |
| | | |
| | | - â
`app/permission.js` - æ·»å å议页é¢å°ç½åå |
| | | |
| | | ### å½±åçé¡µé¢ |
| | | |
| | | - â
`app/pages/login.vue` - ç»å½é¡µåè®®é¾æ¥å¯æ£å¸¸è®¿é® |
| | | - â
`app/pages/register.vue` - 注å页åè®®é¾æ¥å¯æ£å¸¸è®¿é® |
| | | - â
`app/pages/mine/index.vue` - å·²ç»å½ç¨æ·ä¹å¯è®¿é® |
| | | - â
`app/pages/mine/privacy-policy/index.vue` - æ¯æå¿åè®¿é® |
| | | - â
`app/pages/mine/user-agreement/index.vue` - æ¯æå¿åè®¿é® |
| | | |
| | | ### æµè¯å»ºè®® |
| | | |
| | | 1. â
æ¸
é¤ç»å½ç¶æï¼æµè¯æªç»å½è®¿é® |
| | | 2. â
ä»ç»å½é¡µç¹å»åè®®é¾æ¥æµè¯ |
| | | 3. â
仿³¨å页ç¹å»åè®®é¾æ¥æµè¯ |
| | | 4. â
ç»å½åä»"æç"页é¢è®¿é®æµè¯ |
| | | 5. â
å¨ä¸å平尿µè¯ï¼H5ã微信å°ç¨åºãAppï¼ |
| | | |
| | | --- |
| | | |
| | | é
ç½®å®æï¼ç°å¨ç¨æ·å¯ä»¥å¨æªç»å½ç¶æä¸æ¥çéç§æ¿çåç¨æ·åè®®äºãð |
| | |
| | | * @return é¨é¨ä¿¡æ¯ |
| | | */ |
| | | public SysDept selectDeptByDepartmentIdAndParentId(@Param("departmentId") Integer departmentId, @Param("parentId") Long parentId); |
| | | |
| | | /** |
| | | * è·åæå®é¨é¨IDçåå
¬å¸IDï¼parent_id=100çé¨é¨ï¼ |
| | | * å¦æä¼ å
¥çå°±æ¯åå
¬å¸ï¼ç´æ¥è¿åï¼å¦åä»ancestors䏿¥æ¾åå
¬å¸ID |
| | | * |
| | | * @param deptId é¨é¨ID |
| | | * @return åå
¬å¸IDï¼å¦ææ¾ä¸å°åè¿ånull |
| | | */ |
| | | public Long selectBranchCompanyIdByDeptId(@Param("deptId") Long deptId); |
| | | } |
| | |
| | | VehicleInfo queryParam = new VehicleInfo(); |
| | | queryParam.setStatus("0"); // 0表示æ£å¸¸ç¶æ |
| | | // ä¸è®¾ç½®deptIdï¼æ¥è¯¢ææé¨é¨çè½¦è¾ |
| | | queryParam.setDeptId(deptId); |
| | | |
| | | List<VehicleInfo> vehicles = vehicleInfoMapper.selectVehicleInfoList(queryParam); |
| | | |
| | |
| | | } |
| | | |
| | | /** |
| | | * ä»CarOrdClassè§£æé¨é¨ID |
| | | * ä» CarOrdClass è§£æé¨é¨IDï¼å¹¶è½¬æ¢ä¸ºåå
¬å¸ID |
| | | * CarOrdClassæ ¼å¼å¯è½æ¯ï¼ZBãHB.TIç |
| | | * éè¦æåå¹¶å¨sys_deptä¸å¹é
dispatch_order_classåæ®µ |
| | | * |
| | | * @param carOrdClass 车è¾åæ®ç±»åç¼ç |
| | | * @return é¨é¨IDï¼å¦ææªæ¾å°è¿ånull |
| | | * @return åå
¬å¸IDï¼å¦ææªæ¾å°è¿ånull |
| | | */ |
| | | private Long parseDeptIdFromCarOrdClass(String carOrdClass) |
| | | { |
| | |
| | | { |
| | | log.debug("éè¿dispatch_order_class='{}' æ¾å°é¨é¨: {} (ID={})", |
| | | code, dept.getDeptName(), dept.getDeptId()); |
| | | return dept.getDeptId(); |
| | | |
| | | // å°é¨é¨ID转æ¢ä¸ºåå
¬å¸ID |
| | | Long branchCompanyId = sysDeptMapper.selectBranchCompanyIdByDeptId(dept.getDeptId()); |
| | | if (branchCompanyId != null) |
| | | { |
| | | log.debug("å°é¨é¨ID {} 转æ¢ä¸ºåå
¬å¸ID: {}", dept.getDeptId(), branchCompanyId); |
| | | return branchCompanyId; |
| | | } |
| | | else |
| | | { |
| | | log.warn("é¨é¨ID {} æ æ³è½¬æ¢ä¸ºåå
¬å¸IDï¼å¯è½æ¯æ»å
¬å¸ææ°æ®å¼å¸¸", dept.getDeptId()); |
| | | return null; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | <if test="status != null and status != ''"> |
| | | AND status = #{status} |
| | | </if> |
| | | <if test="serviceOrderClass != null and serviceOrderClass != ''"> |
| | | AND service_order_class = #{serviceOrderClass} |
| | | </if> |
| | | <if test="dispatchOrderClass != null and dispatchOrderClass != ''"> |
| | | AND dispatch_order_class = #{dispatchOrderClass} |
| | | </if> |
| | | <!-- æ°æ®èå´è¿æ»¤ --> |
| | | ${params.dataScope} |
| | | order by d.parent_id, d.order_num |
| | |
| | | limit 1 |
| | | </select> |
| | | |
| | | <!-- è·åæå®é¨é¨IDçåå
¬å¸IDï¼parent_id=100çé¨é¨ï¼ --> |
| | | <select id="selectBranchCompanyIdByDeptId" parameterType="Long" resultType="Long"> |
| | | select case |
| | | -- å¦æä¼ å
¥çå°±æ¯åå
¬å¸ï¼parent_id=100ï¼ï¼ç´æ¥è¿å |
| | | when exists(select 1 from sys_dept where dept_id = #{deptId} and parent_id = 100 and del_flag = '0') |
| | | then #{deptId} |
| | | else ( |
| | | -- å¦åä» ancestors 䏿¥æ¾åå
¬å¸ID |
| | | select d.dept_id |
| | | from sys_dept d |
| | | where d.parent_id = 100 |
| | | and d.del_flag = '0' |
| | | and FIND_IN_SET(d.dept_id, ( |
| | | select ancestors from sys_dept where dept_id = #{deptId} and del_flag = '0' |
| | | )) |
| | | limit 1 |
| | | ) |
| | | end |
| | | </select> |
| | | |
| | | </mapper> |
| | |
| | | <if test="vehicleModel != null and vehicleModel != ''"> and v.vehicle_model = #{vehicleModel}</if> |
| | | <if test="status != null and status != ''"> and v.status = #{status}</if> |
| | | <if test="platformCode != null and platformCode != ''"> and v.platform_code = #{platformCode}</if> |
| | | <if test="deptId != null"> and v.dept_id = #{deptId}</if> |
| | | <!-- é¨é¨è¿æ»¤ï¼èªå¨æ¥æ¾ä¼ å
¥é¨é¨æå±çåå
¬å¸ï¼parent_id=100ï¼ --> |
| | | <if test="deptId != null"> |
| | | and v.dept_id = ( |
| | | <!-- å¦æä¼ å
¥çå°±æ¯åå
¬å¸ï¼parent_id=100ï¼ï¼ç´æ¥è¿å --> |
| | | select case |
| | | when exists(select 1 from sys_dept where dept_id = #{deptId} and parent_id = 100) then #{deptId} |
| | | else ( |
| | | <!-- å¦åä» ancestors 䏿¥æ¾åå
¬å¸ID --> |
| | | select d.dept_id |
| | | from sys_dept d |
| | | where d.parent_id = 100 |
| | | and FIND_IN_SET(d.dept_id, ( |
| | | select ancestors from sys_dept where dept_id = #{deptId} |
| | | )) |
| | | limit 1 |
| | | ) |
| | | end |
| | | ) |
| | | </if> |
| | | <!-- ä»»å¡è½¦è¾éæ©å¿
é¡»è¿æ»¤ï¼åªæ¾ç¤ºcar_idådept_idé½ä¸ä¸ºç©ºçè½¦è¾ --> |
| | | and v.car_id is not null and v.car_id != '' |
| | | and v.dept_id is not null |
| | |
| | | <el-descriptions-item label="夿³¨" :span="2">{{ taskDetail.remark }}</el-descriptions-item> |
| | | </el-descriptions> |
| | | |
| | | <!-- æ¥æè½¬è¿ä»»å¡æ©å±ä¿¡æ¯ --> |
| | | <el-descriptions v-if="taskDetail.taskType === 'EMERGENCY_TRANSFER' && taskDetail.emergencyInfo" title="æ¥æè½¬è¿ä¿¡æ¯" :column="2" border style="margin-top: 20px;"> |
| | | <el-descriptions-item label="æ£è
å§å">{{ taskDetail.emergencyInfo.patientName }}</el-descriptions-item> |
| | | <el-descriptions-item label="æ£è
æ§å«"> |
| | | <dict-tag :options="dict.type.sys_user_sex" :value="taskDetail.emergencyInfo.patientGender"/> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="æ£è
å¹´é¾">{{ taskDetail.emergencyInfo.patientAge }}</el-descriptions-item> |
| | | <el-descriptions-item label="èç³»çµè¯">{{ taskDetail.emergencyInfo.contactPhone }}</el-descriptions-item> |
| | | <el-descriptions-item label="æ¥éå»é¢" :span="2">{{ taskDetail.emergencyInfo.hospitalName }}</el-descriptions-item> |
| | | <el-descriptions-item label="å°±è¯ç§å®¤" :span="2"> |
| | | <dict-tag v-if="taskDetail.emergencyInfo.hospitalDepartment" :options="dict.type.hospital_department" :value="taskDetail.emergencyInfo.hospitalDepartment"/> |
| | | <span v-else style="color: #C0C4CC;">--</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="ç
æ
æè¿°" :span="2"> |
| | | <span v-if="taskDetail.emergencyInfo.illnessDescription">{{ taskDetail.emergencyInfo.illnessDescription }}</span> |
| | | <span v-else style="color: #C0C4CC;">--</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="ç¹æ®éæ±" :span="2"> |
| | | <span v-if="taskDetail.emergencyInfo.specialRequirements">{{ taskDetail.emergencyInfo.specialRequirements }}</span> |
| | | <span v-else style="color: #C0C4CC;">--</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="æ¯å¦éè¦æ
æ¶"> |
| | | <el-tag v-if="taskDetail.emergencyInfo.needsStretcher == 1" type="success" size="small">æ¯</el-tag> |
| | | <el-tag v-else type="info" size="small">å¦</el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="æ¯å¦éè¦è½®æ¤
"> |
| | | <el-tag v-if="taskDetail.emergencyInfo.needsWheelchair == 1" type="success" size="small">æ¯</el-tag> |
| | | <el-tag v-else type="info" size="small">å¦</el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="æ¯å¦éè¦æ°§æ°"> |
| | | <el-tag v-if="taskDetail.emergencyInfo.needsOxygen == 1" type="success" size="small">æ¯</el-tag> |
| | | <el-tag v-else type="info" size="small">å¦</el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="ç´§æ¥ç¨åº¦"> |
| | | <el-tag v-if="taskDetail.emergencyInfo.urgencyLevel === 'HIGH'" type="danger" size="small">ç´§æ¥</el-tag> |
| | | <el-tag v-else-if="taskDetail.emergencyInfo.urgencyLevel === 'MEDIUM'" type="warning" size="small">ä¸è¬</el-tag> |
| | | <el-tag v-else-if="taskDetail.emergencyInfo.urgencyLevel === 'LOW'" type="info" size="small">䏿¥</el-tag> |
| | | <span v-else style="color: #C0C4CC;">--</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="éªå人æ°">{{ taskDetail.emergencyInfo.companionCount || 0 }} 人</el-descriptions-item> |
| | | <el-descriptions-item label="é¢ä¼°è´¹ç¨">{{ taskDetail.emergencyInfo.estimatedCost || '--' }} å
</el-descriptions-item> |
| | | </el-descriptions> |
| | | |
| | | <!-- ç¦ç¥è½¦ä»»å¡æ©å±ä¿¡æ¯ --> |
| | | <el-descriptions v-if="taskDetail.taskType === 'WELFARE' && taskDetail.welfareInfo" title="ç¦ç¥è½¦æå¡ä¿¡æ¯" :column="2" border style="margin-top: 20px;"> |
| | | <el-descriptions-item label="ä¹å®¢å§å">{{ taskDetail.welfareInfo.passengerName }}</el-descriptions-item> |
| | | <el-descriptions-item label="ä¹å®¢æ§å«"> |
| | | <dict-tag :options="dict.type.sys_user_sex" :value="taskDetail.welfareInfo.passengerGender"/> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="ä¹å®¢å¹´é¾">{{ taskDetail.welfareInfo.passengerAge }}</el-descriptions-item> |
| | | <el-descriptions-item label="èç³»çµè¯">{{ taskDetail.welfareInfo.contactPhone }}</el-descriptions-item> |
| | | <el-descriptions-item label="æå¡ç±»å" :span="2"> |
| | | <span v-if="taskDetail.welfareInfo.serviceType">{{ taskDetail.welfareInfo.serviceType }}</span> |
| | | <span v-else style="color: #C0C4CC;">--</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="ç¹æ®éæ±" :span="2"> |
| | | <span v-if="taskDetail.welfareInfo.specialRequirements">{{ taskDetail.welfareInfo.specialRequirements }}</span> |
| | | <span v-else style="color: #C0C4CC;">--</span> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="æ¯å¦éè¦è½®æ¤
"> |
| | | <el-tag v-if="taskDetail.welfareInfo.needsWheelchair == 1" type="success" size="small">æ¯</el-tag> |
| | | <el-tag v-else type="info" size="small">å¦</el-tag> |
| | | </el-descriptions-item> |
| | | <el-descriptions-item label="éªå人æ°">{{ taskDetail.welfareInfo.companionCount || 0 }} 人</el-descriptions-item> |
| | | <el-descriptions-item label="é¢ä¼°è´¹ç¨">{{ taskDetail.welfareInfo.estimatedCost || '--' }} å
</el-descriptions-item> |
| | | <el-descriptions-item label="å®é
è´¹ç¨">{{ taskDetail.welfareInfo.actualCost || '--' }} å
</el-descriptions-item> |
| | | </el-descriptions> |
| | | |
| | | <!-- æä½æé® --> |
| | | <div style="margin-top: 20px; text-align: center;"> |
| | | <el-button type="primary" @click="handleEdit" v-hasPermi="['task:general:edit']">ç¼è¾ä»»å¡</el-button> |
| | |
| | | |
| | | export default { |
| | | name: "TaskDetail", |
| | | dicts: ['sys_task_type', 'sys_task_status', 'sys_vehicle_type', 'sys_task_vehicle_status'], |
| | | dicts: ['sys_task_type', 'sys_task_status', 'sys_vehicle_type', 'sys_task_vehicle_status', 'sys_user_sex', 'hospital_department'], |
| | | data() { |
| | | return { |
| | | // ä»»å¡è¯¦æ
|
| | |
| | | >{{ scope.row.taskCode }}</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ä»»å¡ç±»å" align="center" prop="taskType"> |
| | | <el-table-column label="ä»»å¡ç±»å" align="center" prop="taskType" width="120"> |
| | | <template slot-scope="scope"> |
| | | <dict-tag :options="dict.type.sys_task_type" :value="scope.row.taskType"/> |
| | | <el-tag v-if="scope.row.taskType === 'EMERGENCY_TRANSFER'" type="danger" size="mini" style="margin-left: 5px;"> |
| | | <i class="el-icon-warning"></i> |
| | | </el-tag> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="ä»»å¡ç¶æ" align="center" prop="taskStatus"> |