xiaoxin 3 yıl önce
ebeveyn
işleme
c49b9cbf56
100 değiştirilmiş dosya ile 9475 ekleme ve 3281 silme
  1. 21 0
      .prettierrc.js
  2. 21 13
      App.vue
  3. 0 0
      components/mx-datepicker/index.vue
  4. 12 10
      main.js
  5. 1 1
      manifest.json
  6. 0 242
      mmmm-image-tools_1.4.0/index.js
  7. 0 11
      mmmm-image-tools_1.4.0/package.json
  8. 38 11
      pages.json
  9. 191 0
      pages/evaluation/index.vue
  10. 0 181
      pages/feedback/feedback.vue
  11. 555 0
      pages/home/home.vue
  12. 846 0
      pages/home/index.vue
  13. 0 132
      pages/identity/identity.vue
  14. 68 0
      pages/identity/index.vue
  15. 0 658
      pages/index/index.vue
  16. 0 643
      pages/list-center/list-center.vue
  17. 0 710
      pages/list/list.vue
  18. 85 0
      pages/login-filter/index.vue
  19. 144 0
      pages/login/index.vue
  20. 0 129
      pages/login/login.vue
  21. 0 86
      pages/loginFilter/LoginFilter.vue
  22. 446 0
      pages/personal-information/index.vue
  23. 0 424
      pages/personal-information/personal-information.vue
  24. 855 0
      pages/repair-center/index.vue
  25. 448 0
      pages/repair-form/form.vue
  26. 773 0
      pages/repair-form/index.vue
  27. 132 0
      pages/select-identity/index.vue
  28. 8 30
      project.config.json
  29. 7 0
      project.private.config.json
  30. BIN
      static/1.jpg
  31. BIN
      static/2.jpg
  32. BIN
      static/3.png
  33. BIN
      static/4.png
  34. BIN
      static/index-img.jpg
  35. BIN
      static/information.png
  36. BIN
      static/list-img.png
  37. BIN
      static/put.png
  38. 284 0
      static/styles/base/global.scss
  39. 6 0
      static/styles/base/index.scss
  40. 16 0
      static/styles/core/function.scss
  41. 8 0
      static/styles/core/index.scss
  42. 82 0
      static/styles/core/mixin.scss
  43. 87 0
      static/styles/core/variable.scss
  44. 76 0
      static/styles/cover-vant.css
  45. 39 0
      static/styles/main.scss
  46. 5 0
      static/styles/modules/animation.scss
  47. 93 0
      static/styles/modules/border-radius.scss
  48. 117 0
      static/styles/modules/border.scss
  49. 253 0
      static/styles/modules/color.scss
  50. 16 0
      static/styles/modules/currency.scss
  51. 98 0
      static/styles/modules/distance.scss
  52. 9 0
      static/styles/modules/feedback.scss
  53. 155 0
      static/styles/modules/flexible.scss
  54. 88 0
      static/styles/modules/font-size.scss
  55. 217 0
      static/styles/modules/iconfont.scss
  56. 30 0
      static/styles/modules/image.scss
  57. 25 0
      static/styles/modules/index.scss
  58. 98 0
      static/styles/modules/margin.scss
  59. 89 0
      static/styles/modules/padding.scss
  60. 56 0
      static/styles/modules/size.scss
  61. 116 0
      static/styles/modules/text.scss
  62. 75 0
      static/styles/modules/utility.scss
  63. 95 0
      static/styles/modules/vant-popup-bottom.scss
  64. BIN
      static/个人中心.png
  65. BIN
      static/喇叭.png
  66. 1 0
      static/扬声器.svg
  67. BIN
      static/编辑.png
  68. BIN
      static/订单.png
  69. BIN
      static/资料.png
  70. 22 0
      uni_modules/uni-icons/changelog.md
  71. 1169 0
      uni_modules/uni-icons/components/uni-icons/icons.js
  72. 96 0
      uni_modules/uni-icons/components/uni-icons/uni-icons.vue
  73. 663 0
      uni_modules/uni-icons/components/uni-icons/uniicons.css
  74. BIN
      uni_modules/uni-icons/components/uni-icons/uniicons.ttf
  75. 86 0
      uni_modules/uni-icons/package.json
  76. 8 0
      uni_modules/uni-icons/readme.md
  77. 18 0
      uni_modules/uni-notice-bar/changelog.md
  78. 426 0
      uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue
  79. 87 0
      uni_modules/uni-notice-bar/package.json
  80. 13 0
      uni_modules/uni-notice-bar/readme.md
  81. BIN
      unpackage/dist/.DS_Store
  82. BIN
      unpackage/dist/build/.DS_Store
  83. 0 0
      unpackage/dist/build/.automator/mp-weixin/.automator.json
  84. BIN
      unpackage/dist/build/h5.zip
  85. 2 0
      unpackage/dist/build/h5/index.html
  86. BIN
      unpackage/dist/build/h5/static/1.jpg
  87. BIN
      unpackage/dist/build/h5/static/2.jpg
  88. BIN
      unpackage/dist/build/h5/static/3.png
  89. BIN
      unpackage/dist/build/h5/static/4.png
  90. 0 0
      unpackage/dist/build/h5/static/down.svg
  91. BIN
      unpackage/dist/build/h5/static/fonts/uniicons.b6d3756e.ttf
  92. 0 0
      unpackage/dist/build/h5/static/horn.svg
  93. 0 0
      unpackage/dist/build/h5/static/htz-image-upload/play.png
  94. BIN
      unpackage/dist/build/h5/static/img/4.afbcd06d.png
  95. 0 0
      unpackage/dist/build/h5/static/img/down.2844bc55.svg
  96. BIN
      unpackage/dist/build/h5/static/img/information.bf43c32a.png
  97. 0 0
      unpackage/dist/build/h5/static/img/letter.5a4aa0bf.svg
  98. BIN
      unpackage/dist/build/h5/static/img/list-img.37c80451.png
  99. BIN
      unpackage/dist/build/h5/static/img/put.b3f16c17.png
  100. 0 0
      unpackage/dist/build/mp-weixin/static/rep.svg

+ 21 - 0
.prettierrc.js

@@ -0,0 +1,21 @@
+// https://prettier.io/docs/en/options.html#prose-wrap
+
+module.exports = {
+  tabWidth: 2, // 缩进空格位数
+  useTabs: false, // 缩进是否使用tab指标符代替空格符
+  printWidth: 120, // 每一行的字符长度,超出长度换行
+  singleQuote: true, // 是否使用单引号
+  quoteProps: 'as-needed', // 对象属性是否使用引号,as-needed=必要情况下需要
+  jsxSingleQuote: false, // jsx是否使用单引号
+  semi: false, // 语句末尾是否使用分号结尾
+  eslintIntegration: true,
+  trailingComma: 'es5', // 是否使用尾逗号,ES5=仅支持ES5下的尾逗号
+  bracketSpacing: true, // 对象字面量的括号前后保留一个空格
+  jsxBracketSameLine: false, // jsx的尾尖括号是否保留在同一行
+  vueIndentScriptAndStyle: false, // 是否缩进vue的script和style标签
+  endOfLine: 'lf', // 设置行尾样式
+  htmlWhitespaceSensitivity: 'ignore',
+}
+
+// 格式化所有文件(. 表示所有文件)
+// npx prettier --write .

+ 21 - 13
App.vue

@@ -1,18 +1,26 @@
 <script>
-	export default {
-		onLaunch: function() {
-			// console.log('App Launch')
-		},
-		onShow: function() {
-			// console.log('App Show')
-		},
-		onHide: function() {
-			// console.log('App Hide')
-		}
-	}
+export default {
+  onLaunch: function () {
+    // console.log('App Launch')
+  },
+  onShow: function () {
+    // console.log('App Show')
+  },
+  onHide: function () {
+    // console.log('App Hide')
+  },
+}
 </script>
 
 <style lang="scss">
-	@import "uview-ui/index.scss";
-	/*每个页面公共css */
+@import 'uview-ui/index.scss';
+/*每个页面公共css */
+view {
+  font-size: 32rpx;
+  font-weight: 400;
+}
+span {
+  font-size: 28rpx;
+  line-height: 36rpx;
+}
 </style>

util/mx-datepicker/mx-datepicker.vue → components/mx-datepicker/index.vue


+ 12 - 10
main.js

@@ -1,14 +1,16 @@
-import Vue from 'vue'
-import App from './App'
-import {myRequest} from "./util/api"
+import Vue from "vue";
+import App from "./App";
+import { myRequest } from "./utils/api";
 import uView from "uview-ui";
-Vue.use(uView);
+import "@/static/styles/main.scss";
+import "@/static/styles/cover-vant.css";
 
-Vue.prototype.$myRequest = myRequest
+Vue.use(uView);
+Vue.prototype.$myRequest = myRequest;
 
-Vue.config.productionTip = false
-App.mpType = 'app'
+Vue.config.productionTip = false;
+App.mpType = "app";
 const app = new Vue({
-    ...App,
-})
-app.$mount()
+  ...App,
+});
+app.$mount();

+ 1 - 1
manifest.json

@@ -1,6 +1,6 @@
 {
     "name" : "报修系统",
-    "appid" : "__UNI__9149926",
+    "appid" : "__UNI__DBD5575",
     "description" : "",
     "versionName" : "1.0.0",
     "versionCode" : "100",

+ 0 - 242
mmmm-image-tools_1.4.0/index.js

@@ -1,242 +0,0 @@
-function getLocalFilePath(path) {
-    if (path.indexOf('_www') === 0 || path.indexOf('_doc') === 0 || path.indexOf('_documents') === 0 || path.indexOf('_downloads') === 0) {
-        return path
-    }
-    if (path.indexOf('file://') === 0) {
-        return path
-    }
-    if (path.indexOf('/storage/emulated/0/') === 0) {
-        return path
-    }
-    if (path.indexOf('/') === 0) {
-        var localFilePath = plus.io.convertAbsoluteFileSystem(path)
-        if (localFilePath !== path) {
-            return localFilePath
-        } else {
-            path = path.substr(1)
-        }
-    }
-    return '_www/' + path
-}
-
-function dataUrlToBase64(str) {
-    var array = str.split(',')
-    return array[array.length - 1]
-}
-
-var index = 0
-function getNewFileId() {
-    return Date.now() + String(index++)
-}
-
-function biggerThan(v1, v2) {
-    var v1Array = v1.split('.')
-    var v2Array = v2.split('.')
-    var update = false
-    for (var index = 0; index < v2Array.length; index++) {
-        var diff = v1Array[index] - v2Array[index]
-        if (diff !== 0) {
-            update = diff > 0
-            break
-        }
-    }
-    return update
-}
-
-export function pathToBase64(path) {
-	var	arr_path = path.split(".");
-	var ext = arr_path[arr_path.length - 1]
-	// console.log(ext)
-    return new Promise(function(resolve, reject) {
-		uni.compressImage({
-			src:path,
-			dst:'_doc/a'+path,
-			width:'40%',
-			height:'40%',
-			quality:20,
-		},function(e){
-			if (typeof window === 'object' && 'document' in window) {
-			    if (typeof FileReader === 'function') {
-			        var xhr = new XMLHttpRequest()
-			        xhr.open('GET', path, true)
-			        xhr.responseType = 'blob'
-			        xhr.onload = function() {
-			            if (this.status === 200) {
-			                let fileReader = new FileReader()
-			                fileReader.onload = function(e) {
-			                    resolve(e.target.result)
-			                }
-			                fileReader.onerror = reject
-			                fileReader.readAsDataURL(this.response)
-			            }
-			        }
-			        xhr.onerror = reject
-			        xhr.send()
-			        return
-			    }
-			    var canvas = document.createElement('canvas')
-			    var c2x = canvas.getContext('2d')
-			    var img = new Image
-			    img.onload = function() {
-			        canvas.width = img.width
-			        canvas.height = img.height
-			        c2x.drawImage(img, 0, 0)
-			        resolve(canvas.toDataURL())
-			        canvas.height = canvas.width = 0
-			    }
-			    img.onerror = reject
-			    img.src = path
-			    return
-			}
-		})
-        
-        if (typeof plus === 'object') {
-        		//官方压缩
-        		plus.zip.compressImage({
-        		//plus.zip.compressImg 官方Api地址 (http://www.html5plus.org/doc/zh_cn/zip.html)
-					src:path,     		//你要压缩的图片路径
-        			dst:'_doc/a'+path, //你要生成的图片路径,路径不能与src相同,不然app端会报错
-					width:'40%',
-        			quality:20,         //图片质量[10-100]
-        		},function(e) {
-        			//压缩成功后再转base64
-        			plus.io.resolveLocalFileSystemURL(e.target, function(entry) {
-        				entry.file(function(file) {
-        					var fileReader = new plus.io.FileReader()
-        					fileReader.onload = function(data) {
-        						resolve(data.target.result)
-        					}
-        					fileReader.onerror = function(error) {
-        						reject(error)
-        					}
-        					fileReader.readAsDataURL(file)
-        				}, function(error) {
-        				 	reject(error)
-        				})
-        			}, function(error) {
-        				reject(error)
-        			})
-        		},function(error) {
-        			console.log(error)		
-        		});
-        	return
-        }
-        if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
-			wx.compressImage({
-				src:path,
-				width:'40%',
-				height:'40%',
-				quality:20,
-				success:function(){
-					wx.getFileSystemManager().readFile({
-					    filePath: path,
-					    encoding: 'base64',
-					    success: function(res) {
-							if (ext == 'jpg') {
-								resolve('data:image/jpeg;base64,' + res.data)
-							} else {
-								resolve('data:image/' + ext + ';base64,' + res.data)
-							}
-					    },
-					    fail: function(error) {
-					        reject(error)
-					    }
-					})
-				}
-			})
-            // wx.getFileSystemManager().readFile({
-            //     filePath: path,
-            //     encoding: 'base64',
-            //     success: function(res) {
-            //         resolve('data:image/png;base64,' + res.data)
-            //     },
-            //     fail: function(error) {
-            //         reject(error)
-            //     }
-            // })
-            return
-        }
-        reject(new Error('not support'))
-    })
-}
-
-export function base64ToPath(base64) {
-    return new Promise(function(resolve, reject) {
-        if (typeof window === 'object' && 'document' in window) {
-            base64 = base64.split(',')
-            var type = base64[0].match(/:(.*?);/)[1]
-            var str = atob(base64[1])
-            var n = str.length
-            var array = new Uint8Array(n)
-            while (n--) {
-                array[n] = str.charCodeAt(n)
-            }
-            return resolve((window.URL || window.webkitURL).createObjectURL(new Blob([array], { type: type })))
-        }
-        var extName = base64.split(',')[0].match(/data\:\S+\/(\S+);/)
-        if (extName) {
-            extName = extName[1]
-        } else {
-            reject(new Error('base64 error'))
-        }
-        var fileName = getNewFileId() + '.' + extName
-        if (typeof plus === 'object') {
-            var basePath = '_doc'
-            var dirPath = 'uniapp_temp'
-            var filePath = basePath + '/' + dirPath + '/' + fileName
-            if (!biggerThan(plus.os.name === 'Android' ? '1.9.9.80627' : '1.9.9.80472', plus.runtime.innerVersion)) {
-                plus.io.resolveLocalFileSystemURL(basePath, function(entry) {
-                    entry.getDirectory(dirPath, {
-                        create: true,
-                        exclusive: false,
-                    }, function(entry) {
-                        entry.getFile(fileName, {
-                            create: true,
-                            exclusive: false,
-                        }, function(entry) {
-                            entry.createWriter(function(writer) {
-                                writer.onwrite = function() {
-                                    resolve(filePath)
-                                }
-                                writer.onerror = reject
-                                writer.seek(0)
-                                writer.writeAsBinary(dataUrlToBase64(base64))
-                            }, reject)
-                        }, reject)
-                    }, reject)
-                }, reject)
-                return
-            }
-            var bitmap = new plus.nativeObj.Bitmap(fileName)
-            bitmap.loadBase64Data(base64, function() {
-                bitmap.save(filePath, {}, function() {
-                    bitmap.clear()
-                    resolve(filePath)
-                }, function(error) {
-                    bitmap.clear()
-                    reject(error)
-                })
-            }, function(error) {
-                bitmap.clear()
-                reject(error)
-            })
-            return
-        }
-        if (typeof wx === 'object' && wx.canIUse('getFileSystemManager')) {
-            var filePath = wx.env.USER_DATA_PATH + '/' + fileName
-            wx.getFileSystemManager().writeFile({
-                filePath: filePath,
-                data: dataUrlToBase64(base64),
-                encoding: 'base64',
-                success: function() {
-                    resolve(filePath)
-                },
-                fail: function(error) {
-                    reject(error)
-                }
-            })
-            return
-        }
-        reject(new Error('not support'))
-    })
-}

+ 0 - 11
mmmm-image-tools_1.4.0/package.json

@@ -1,11 +0,0 @@
-{
-    "id": "mmmm-image-tools",
-    "name": "image-tools",
-    "version": "1.4.0",
-    "description": "图像转换工具,可用于图像和base64的转换",
-    "keywords": [
-        "base64",
-        "保存",
-        "图像"
-    ]
-}

+ 38 - 11
pages.json

@@ -3,16 +3,22 @@
 		"^u-(.*)": "@/uview-ui/components/u-$1/u-$1.vue"
 	},
 	"pages": [
+		// {
+		// 	"path": "pages/select-identity/index",
+		// 	"style": {
+		// 		"navigationBarTitleText": "身份选择",
+		// 		"navigationStyle": "custom"
+		// 	}
+		// },
 		{
-			"path": "pages/identity/identity",
+			"path": "pages/identity/index",
 			"style": {
-				"navigationBarTitleText": "身份选择",
+				"navigationBarTitleText": "身份",
 				"navigationStyle": "custom"
 			}
-
 		},
 		{
-			"path": "pages/loginFilter/LoginFilter",
+			"path": "pages/login-filter/index",
 			"style": {
 				"navigationBarTitleText": "报修系统",
 				"enablePullDownRefresh": true,
@@ -21,7 +27,7 @@
 
 		},
 		{
-			"path": "pages/index/index",
+			"path": "pages/home/index",
 			"style": {
 				"navigationBarTitleText": "报修系统",
 				"enablePullDownRefresh": true,
@@ -34,7 +40,20 @@
 			}
 		},
 		{
-			"path": "pages/login/login",
+			"path": "pages/home/home",
+			"style": {
+				"navigationBarTitleText": "报修系统",
+				"enablePullDownRefresh": true,
+				"navigationStyle": "custom",
+				"h5": {
+					"pullToRefresh": {
+						"color": "#007AFF"
+					}
+				}
+			}
+		},
+		{
+			"path": "pages/login/index",
 			"style": {
 				"navigationBarTitleText": "维修端登录",
 				"navigationStyle": "custom"
@@ -42,7 +61,7 @@
 
 		},
 		{
-			"path": "pages/list/list",
+			"path": "pages/repair-form/index",
 			"style": {
 				"navigationBarTitleText": "报修",
 				"navigationStyle": "custom"
@@ -50,7 +69,15 @@
 
 		},
 		{
-			"path": "pages/list-center/list-center",
+			"path": "pages/repair-form/form",
+			"style": {
+				"navigationBarTitleText": "报修",
+				"navigationStyle": "custom"
+			}
+		
+		},
+		{
+			"path": "pages/repair-center/index",
 			"style": {
 				"navigationBarTitleText": "维修中心",
 				"enablePullDownRefresh": true,
@@ -58,7 +85,7 @@
 			}
 		},
 		{
-			"path": "pages/feedback/feedback",
+			"path": "pages/evaluation/index",
 			"style": {
 				"navigationBarTitleText": "用户评价",
 				"enablePullDownRefresh": true,
@@ -67,9 +94,9 @@
 
 		},
 		{
-			"path": "pages/personal-information/personal-information",
+			"path": "pages/personal-information/index",
 			"style": {
-				"navigationBarTitleText": "个人信息",
+				"navigationBarTitleText": "个人信息",
 				"navigationStyle": "custom"
 			}
 		}

+ 191 - 0
pages/evaluation/index.vue

@@ -0,0 +1,191 @@
+<template>
+  <view class="page">
+    <!-- 头部 -->
+    <view class="head">
+      <view class="location">
+        评价信箱
+        <image class="loc" src="../../static/letter.svg" mode=""></image>
+      </view>
+    </view>
+
+    <!-- 订单 -->
+    <view class="main u-flex-y">
+      <view class="content-list" v-for="(item, index) in feedbackList" :key="index">
+        <text class="num">订单号:{{ item.orderId }}</text>
+        <view class="list">
+          <view class="">故障类型:{{ item.repairsFault.faultName }}</view>
+          <view class="p">来自 {{ item.repairsStudent.dormNumber }} 的评价:</view>
+          <view class="text">
+            {{ item.orderAdvice }}
+          </view>
+        </view>
+      </view>
+
+      <view class="isOver">----我是有底线的----</view>
+      <!-- <view class="isOver" v-if="flag">
+				----我是有底线的----
+			</view> -->
+      <!-- <view class="isOver" v-if="feedbackList.length==0">
+				----暂无评价----
+			</view> -->
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      feedbackList: [],
+      pageNum: 1,
+      pageSize: 4,
+      total: '',
+      flag: false,
+    }
+  },
+  onLoad() {
+    this.getfeedback()
+  },
+  methods: {
+    // 获取评价列表数据
+    async getfeedback() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/order/queryAllOrderByUserAdvice?pageNum=${this.pageNum}&pageSize=${this.pageSize}`,
+      })
+      // console.log(res)
+      if (res.status == 200) {
+        this.total = res.data.total
+        this.feedbackList = [...this.feedbackList, ...res.data.list]
+        uni.hideLoading()
+      } else {
+        uni.hideLoading()
+      }
+    },
+
+    // 下拉页面刷新函数
+    onPullDownRefresh() {
+      this.flag = false
+      this.feedbackList = []
+      this.pageNum = 1
+      this.getfeedback()
+      setTimeout(() => {
+        uni.stopPullDownRefresh()
+      }, 1000)
+    },
+
+    // 上拉触底加载更多数据
+    onReachBottom() {
+      if (this.feedbackList.length < this.total) {
+        uni.showLoading({
+          title: '数据加载中',
+        })
+        this.pageNum++
+        this.getfeedback()
+      } else {
+        this.flag = true
+      }
+    },
+  },
+}
+</script>
+
+<style scoped>
+template {
+  position: relative;
+}
+.page {
+  height: 100vh;
+}
+.main {
+  position: fixed;
+  top: 130rpx;
+  left: 50%;
+  align-items: center;
+  width: 720rpx;
+  height: 100vh;
+  padding: 20rpx;
+  background: #fff;
+  transform: translateX(-360rpx);
+  overflow: scroll;
+}
+
+.head {
+  height: 300rpx;
+  border-radius: 0rpx 0rpx 20rpx 20rpx;
+  background-color: rgba(42, 130, 228, 1);
+}
+
+.head .location {
+  padding-top: 36rpx;
+  font-size: 30rpx;
+  font-weight: bold;
+  text-align: center;
+  color: rgba(255, 255, 255, 1);
+}
+
+.loc {
+  width: 40rpx;
+  height: 40rpx;
+  font-size: 42rpx;
+  vertical-align: middle;
+}
+
+.num {
+  float: left;
+  margin-left: 20rpx;
+  margin-top: 18rpx;
+  font-size: 22rpx;
+  font-weight: 700;
+  color: rgba(42, 130, 228, 1);
+}
+
+.got {
+  float: right;
+  margin-top: 18rpx;
+  margin-right: 18rpx;
+  color: rgba(212, 48, 48, 1);
+}
+
+.list {
+  float: left;
+  margin-left: 42rpx;
+  margin-top: 18rpx;
+  font-size: 22rpx;
+  color: rgba(80, 80, 80, 1);
+}
+
+.p {
+  margin-top: 16rpx;
+}
+
+.list .text {
+  width: 484rpx;
+  height: 108rpx;
+  margin-top: 30rpx;
+  /* margin-left: 50rpx; */
+  text-align: center;
+  line-height: 108rpx;
+  background-color: rgba(255, 255, 255, 1);
+}
+
+.content-list {
+  width: 700rpx;
+  height: 500rpx;
+  /* float: left; */
+  /* margin-left: 16rpx; */
+  margin-top: 22rpx;
+  border-radius: 28rpx 28rpx 0rpx 0rpx;
+  background-color: rgba(229, 229, 229, 1);
+}
+
+.isOver {
+  display: block;
+  width: 100%;
+  height: 120rpx;
+  line-height: 120rpx;
+  text-align: center;
+  font-size: 28rpx;
+  color: rgba(80, 80, 80, 0.27);
+}
+</style>

+ 0 - 181
pages/feedback/feedback.vue

@@ -1,181 +0,0 @@
-<template>
-	<view>
-		<!-- 头部 -->
-		<view class="head">
-			<view class="location">
-				评价信箱<image class="loc" src="../../static/letter.svg" mode=""></image>
-			</view>
-		</view>
-
-		<!-- 订单 -->
-		<view class="main">
-			<view class="content-list" v-for="(item,index) in feedbackList" :key="index">
-				<text class="num">订单号:{{item.orderId}}</text>
-				<view class="list">
-					<view class="">
-						故障类型:{{item.repairsFault.faultName}}
-					</view>
-					<view class="p">
-						来自 {{item.repairsStudent.dormNumber}} 的评价:
-					</view>
-					<view class="text">
-						{{item.orderAdvice}}
-					</view>
-				</view>
-			</view>
-			<view class="isOver" v-if="flag">
-				----我是有底线的----
-			</view>
-			<view class="isOver" v-if="feedbackList.length==0">
-				----暂无评价----
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				feedbackList: [],
-				pageNum: 1,
-				pageSize: 4,
-				total: "",
-				flag: false,
-			}
-		},
-		onLoad() {
-			this.getfeedback()
-		},
-		methods: {
-			// 获取评价列表数据
-			async getfeedback() {
-				let res = await this.$myRequest({
-					method: "post",
-					url: `/order/queryAllOrderByUserAdvice?pageNum=${this.pageNum}&pageSize=${this.pageSize}`,
-				})
-				// console.log(res)
-				if (res.status == 200) {
-					this.total = res.data.total
-					this.feedbackList = [...this.feedbackList, ...res.data.list]
-					uni.hideLoading()
-				} else {
-					uni.hideLoading()
-				}
-			},
-			
-			// 下拉页面刷新函数
-			onPullDownRefresh() {
-				this.flag = false
-				this.feedbackList = []
-				this.pageNum = 1
-				this.getfeedback()
-				setTimeout(() => {
-					uni.stopPullDownRefresh();
-				}, 1000);
-			},
-			
-			// 上拉触底加载更多数据
-			onReachBottom() {
-				if (this.feedbackList.length < this.total) {
-					uni.showLoading({
-						title: "数据加载中"
-					})
-					this.pageNum++
-					this.getfeedback()
-				} else {
-					this.flag = true
-				}
-			},
-		}
-	}
-</script>
-
-<style>
-	template {
-		position: relative;
-	}
-
-	.main {
-		position: relative;
-		top: -192rpx;
-	}
-
-	.head {
-		height: 300rpx;
-		border-radius: 0rpx 0rpx 20rpx 20rpx;
-		background-color: rgba(42, 130, 228, 1);
-	}
-
-	.head .location {
-		padding-top: 36rpx;
-		font-size: 30rpx;
-		font-weight: bold;
-		text-align: center;
-		color: rgba(255, 255, 255, 1);
-	}
-
-	.loc {
-		width: 40rpx;
-		height: 40rpx;
-		font-size: 42rpx;
-		vertical-align: middle;
-	}
-
-	.num {
-		float: left;
-		margin-left: 20rpx;
-		margin-top: 18rpx;
-		font-size: 22rpx;
-		font-weight: 700;
-		color: rgba(42, 130, 228, 1);
-	}
-
-	.got {
-		float: right;
-		margin-top: 18rpx;
-		margin-right: 18rpx;
-		color: rgba(212, 48, 48, 1);
-	}
-
-	.list {
-		float: left;
-		margin-left: 42rpx;
-		margin-top: 18rpx;
-		font-size: 22rpx;
-		color: rgba(80, 80, 80, 1);
-	}
-
-	.p {
-		margin-top: 16rpx;
-	}
-
-	.list .text {
-		width: 484rpx;
-		height: 108rpx;
-		margin-top: 30rpx;
-		margin-left: 50rpx;
-		text-align: center;
-		line-height: 108rpx;
-		background-color: rgba(255, 255, 255, 1);
-	}
-
-	.content-list {
-		width: 720rpx;
-		height: 346rpx;
-		float: left;
-		margin-left: 16rpx;
-		margin-top: 22rpx;
-		border-radius: 28rpx 28rpx 0rpx 0rpx;
-		background-color: rgba(229, 229, 229, 1);
-	}
-
-	.isOver {
-		width: 100%;
-		height: 120rpx;
-		line-height: 120rpx;
-		text-align: center;
-		font-size: 28rpx;
-		color: rgba(80, 80, 80, 0.27);
-	}
-</style>

+ 555 - 0
pages/home/home.vue

@@ -0,0 +1,555 @@
+<template>
+  <view>
+    <header class="flex column items-center">
+      <image src="../../static/list-img.png" mode="aspectFit"></image>
+      <view class="notice flex items-center justify-start">
+        <image src="../../static/喇叭.png"></image>
+        <span class="f16 bold">公告:</span>
+        <uni-notice-bar
+          :single="true"
+          background-color="white"
+          color="blue"
+          :scrollable="true"
+          :text="notices"
+          :speed="30"
+        />
+      </view>
+      <view class="nav flex row items-center justify-around">
+        <navigator url="../repair-form/index" class="nav1 flex row items-center justify-start">
+          <image src="../../static/put.png"></image>
+          <view>前往报修</view>
+        </navigator>
+        <navigator url="../personal-information/index" class="nav2 flex row items-center justify-start">
+          <image src="../../static/information.png"></image>
+          <view>修改信息</view>
+        </navigator>
+      </view>
+      <view class="line"></view>
+      <!-- <input v-modal="token" /> -->
+    </header>
+
+    <view class="content">
+      <view class="list-text" v-if="Studentlist.length !== 0">----报修订单----</view>
+      <view class="list-text" v-else>----暂无数据----</view>
+
+      <view v-for="(item, index) in Studentlist" :key="index" @click="handleLookInfo(item)" class="content_item">
+        <view class="flex justify-between items-center">
+          <span class="blue-text bold">订单:{{ item.orderId }}</span>
+          <span :style="{ color: statusObj[item.orderStatus].color }">{{ statusObj[item.orderStatus].text }}</span>
+        </view>
+        <view class="list flex column items-start">
+          <span>故障原因:{{ item.repairsFault.faultName }}</span>
+          <span>维修人员:{{ item.repairsWork.workName == null ? '等待分配' : item.repairsWork.workName }}</span>
+          <span>宿舍楼栋:{{ item.repairsStudent.dormNumber }}</span>
+          <span>提交时间:{{ item.orderCommitTime }}</span>
+          <span>预约时间:{{ item.orderExpectedTime }}</span>
+          <span v-if="item.orderStatus == 2">维修时间:{{ item.orderCompleteTime }}</span>
+          <span v-if="item.orderStatus == 3">完成时间:{{ item.orderCompleteTime }}</span>
+        </view>
+        <button
+          class="btn flex items-center justify-center"
+          @click.stop="appraise(item)"
+          v-if="item.orderStatus == 3 && item.orderAdvice == null"
+          style="
+            width: 185rpx;
+            height: 36rpx;
+            background-color: rgba(42, 130, 228, 1);
+            color: white;
+            font-size: 24rpx;
+            border-radius: 32rpx;
+          "
+        >
+          维修后评价
+        </button>
+        <view class="sug">{{ item.orderStatus == 3 && item.orderAdvice !== null ? '已评价' : '' }}</view>
+        <button
+          v-if="item.orderStatus == 0"
+          class="btn flex items-center justify-center"
+          @click.stop="handleDelete(item)"
+        >
+          撤回订单
+        </button>
+      </view>
+      <view class="isOver" v-if="flag">----我是有底线的----</view>
+    </view>
+
+    <!-- 查看详情弹窗 -->
+    <uni-popup ref="popup" background-color="#fff">
+      <view class="popup_view" v-if="info">
+        <view class="popup_title">订单信息</view>
+        <view class="popup_item">订单号:{{ info.orderId }}</view>
+        <view class="popup_item">报修类型:{{ info.repairsFault.faultName }}</view>
+        <view class="popup_item">宿舍楼栋:{{ info.repairsStudent.dormNumber }}</view>
+        <view class="popup_item">提交时间:{{ info.orderCommitTime }}</view>
+        <view class="popup_item">预约时间:{{ info.orderExpectedTime }}</view>
+        <view class="popup_item">联系电话:{{ info.repairsStudent.studentPhone }}</view>
+        <view class="popup_item">备选电话:{{ info.repairsStudent.studentOtherPhone }}</view>
+        <view class="popup_item" v-if="info.orderBack">退回原因:{{ info.orderBack }}</view>
+        <view class="popup_item" v-if="info.orderAdvice">修后评价:{{ info.orderAdvice }}</view>
+        <view class="popup_img">
+          <text>故障图片:</text>
+          <image
+            v-for="(item, index) in info.orderImages"
+            :key="index"
+            :src="item ? item : '../../static/no-image.gif'"
+            mode="aspectFit"
+            @click="handleBig(index)"
+          ></image>
+        </view>
+      </view>
+    </uni-popup>
+
+    <!-- 图片放大弹窗 -->
+    <uni-popup ref="popup2">
+      <view class="popup_view" v-if="info" style="padding: 0px">
+        <image
+          v-for="(item, index) in info.orderImages"
+          :key="index"
+          :src="item ? item : '../../static/no-image.gif'"
+          v-if="index == activeIndex"
+        ></image>
+      </view>
+    </uni-popup>
+
+    <!-- 修改评价遮罩层 -->
+    <view class="box" v-if="dialogShow">
+      <view id="dialog">
+        <view class="replace">修后评价</view>
+        <view class="uni-textarea">
+          <textarea
+            v-model="inputcontent"
+            placeholder-style="color:rgba(229, 229, 229, 0.7)"
+            cols="20"
+            row="2"
+            placeholder="请输入内容"
+          />
+        </view>
+        <view class="cancle" @click="cancle">取消</view>
+        <view class="agree" @click="agree">确定</view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+const statusObj = {
+  0: { color: 'red', text: '等待后台分配' },
+  1: { color: 'red', text: '等待维修工接单' },
+  2: { color: 'orange', text: '维修工已接单' },
+  3: { color: 'green', text: '维修完成' },
+  4: { color: 'purple', text: '已退单' },
+}
+export default {
+  data() {
+    return {
+      // token: uni.getStorageSync('token'),
+      statusObj,
+      pageNum: 1,
+      pageSize: 6,
+      total: '',
+      dialogShow: false,
+      flag: false,
+      notices: '',
+      Studentlist: [],
+      value: [],
+      inputcontent: '',
+      orderId: null,
+      info: null,
+      activeIndex: null,
+      studentCampus: null,
+    }
+  },
+  onLoad() {
+    let res = uni.getStorageSync('student')
+    if (res.studentCampus == 0) {
+      this.studentCampus = '黄家湖校区'
+    } else if (res.studentCampus == 1) {
+      this.studentCampus = '墨轩湖校区'
+    }
+    this.getNotice()
+    this.getStudentlist()
+  },
+
+  methods: {
+    // 获取最新公告数据
+    async getNotice() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/notice/releaseNotice`,
+      })
+      // console.log(res)
+      if (res.status == 200) {
+        this.notices = res.data.noticeContent
+      } else {
+        console.log('获取最新公告数据失败')
+      }
+    },
+
+    // 获取学生订单
+    async getStudentlist() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/order/queryAllOrderByStudentId?pageNum=${this.pageNum}&pageSize=${this.pageSize}`,
+        // data: {
+        //   pageNum: this.pageNum,
+        //   pageSize: this.pageSize,
+        // },
+      })
+      // console.log(res)
+      if (res.status == 200) {
+        this.total = res.data.total
+        this.Studentlist = [...this.Studentlist, ...res.data.list]
+        uni.hideLoading()
+      } else {
+        console.log('获取订单数据失败')
+      }
+    },
+
+    // 下拉刷新
+    onPullDownRefresh() {
+      this.flag = false
+      this.Studentlist = []
+      this.pageNum = 1
+      this.getStudentlist()
+      this.getNotice()
+      setTimeout(() => {
+        uni.stopPullDownRefresh()
+      }, 1000)
+    },
+    // 上拉加载+结尾语句显示
+    onReachBottom() {
+      if (this.Studentlist.length < this.total) {
+        uni.showLoading({
+          title: '数据加载中',
+        })
+        this.pageNum++
+        this.getStudentlist()
+      } else {
+        this.flag = true
+      }
+    },
+    // 点击维修后评价按钮回调
+    appraise(item) {
+      this.dialogShow = true
+      this.inputcontent = ''
+      this.orderId = item.orderId
+    },
+    // 弹窗确定按钮回调
+    agree() {
+      if (this.inputcontent == '') {
+        uni.showToast({
+          title: '请输入内容',
+          icon: 'none',
+          duration: 2000,
+        })
+      } else {
+        this.dialogShow = false
+        this.getsuggest()
+      }
+    },
+
+    // 弹窗取消按钮回调
+    cancle() {
+      this.dialogShow = false
+      this.inputcontent = ''
+      uni.showToast({
+        title: '已取消评价',
+        icon: 'none',
+        duration: 2000,
+      })
+    },
+
+    // 修后评价请求
+    async getsuggest() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/order/updateOrderAdvice?orderAdvice=${this.inputcontent}&orderId=${this.orderId}`,
+      })
+      // console.log(res)
+      if (res.status == 200) {
+        uni.showToast({
+          title: '评价成功',
+          icon: 'success',
+        })
+        this.Studentlist = []
+        this.pageNum = 1
+        uni.pageScrollTo({
+          scrollTop: 0,
+        })
+        this.getStudentlist()
+      } else {
+        console.log('修后评价请求失败')
+      }
+    },
+
+    // 查看详情回调
+    async handleLookInfo(item) {
+      this.info = null
+      this.$refs.popup.open()
+      if (item.orderStatus == 0 || item.orderStatus == 4) {
+        let res = await this.$myRequest({
+          method: 'post',
+          url: `/order/queryByOrderIdNotWork?orderId=${item.orderId}`,
+        })
+        // console.log(res)
+        this.$nextTick(() => {
+          this.info = res.data
+          this.info.orderImages = this.info.orderImages.split(';')
+        })
+      } else {
+        let res = await this.$myRequest({
+          method: 'post',
+          url: `/order/queryByOrderId?orderId=${item.orderId}`,
+        })
+        // console.log(res)
+        this.$nextTick(() => {
+          this.info = res.data
+          this.info.orderImages = this.info.orderImages.split(';')
+        })
+      }
+    },
+
+    // 点击图片放大
+    handleBig(index) {
+      this.activeIndex = index
+      this.$refs.popup2.open()
+    },
+
+    // 撤回订单请求
+    handleDelete(item) {
+      uni.showModal({
+        title: '提示',
+        content: '确定撤回订单吗?',
+        success: async (res) => {
+          if (res.confirm) {
+            let res = await this.$myRequest({
+              url: `/order/deleteOrderById?orderId=${item.orderId}`,
+              method: 'post',
+            })
+            // console.log(res)
+            if (res.status == 200) {
+              uni.showToast({
+                title: '撤回成功',
+                icon: 'success',
+              })
+              this.Studentlist = []
+              this.pageNum = 1
+              uni.pageScrollTo({
+                scrollTop: 0,
+              })
+              this.getStudentlist()
+            } else {
+              uni.showToast({
+                title: '撤回失败',
+                icon: 'error',
+              })
+            }
+          } else if (res.cancel) {
+            // console.log('用户点击取消');
+          }
+        },
+      })
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+header {
+  position: fixed;
+  top: -70rpx;
+  left: 0;
+  right: 0;
+  padding: 20rpx;
+  background-color: #fff;
+  z-index: 2;
+  image {
+    width: 100%;
+  }
+  .notice {
+    width: 100%;
+    padding-left: 20rpx;
+    -moz-box-shadow: 0 0 10rpx #d3d3d3;
+    -webkit-box-shadow: 0 0 10rpx #d3d3d3;
+    box-shadow: 0 0 10rpx #d3d3d3;
+    image {
+      margin-right: 8rpx;
+      max-width: 24rpx;
+      max-height: 24rpx;
+    }
+    .uni-noticebar {
+      flex: 1;
+      margin-bottom: 0px;
+    }
+  }
+  .nav {
+    width: 100%;
+    margin: 32rpx 0;
+    font-size: 32rpx;
+    font-weight: 700;
+    .nav1,
+    .nav2 {
+      width: 300rpx;
+    }
+    image {
+      max-width: 123rpx;
+      max-height: 123rpx;
+      margin-right: 16rpx;
+      border-radius: 80rpx;
+      box-shadow: 0 0 10px #06c;
+    }
+  }
+  .line {
+    width: 100%;
+    height: 16rpx;
+    background-color: rgba(229, 229, 229, 0.62);
+    border-radius: 16rpx;
+  }
+}
+.content {
+  width: 100%;
+  padding: 710rpx 20rpx 20rpx;
+
+  .list-text {
+    margin: auto 0;
+    font-size: 28rpx;
+    text-align: center;
+    color: rgba(80, 80, 80, 0.27);
+  }
+  &_item {
+    position: relative;
+    width: 100%;
+    padding: 20rpx;
+    margin-bottom: 32rpx;
+    border-radius: 28rpx 28rpx 0rpx 0rpx;
+    background-color: rgba(229, 229, 229, 0.62);
+    .list {
+      span {
+        margin-top: 16rpx;
+      }
+    }
+    .btn {
+      position: absolute;
+      bottom: 16rpx;
+      right: 16rpx;
+      width: 160rpx;
+      height: 52rpx;
+      font-size: 28rpx;
+      border-radius: 32rpx;
+    }
+    .sug {
+      position: absolute;
+      bottom: 16rpx;
+      right: 16rpx;
+      color: #333333;
+    }
+  }
+  .isOver {
+    width: 100%;
+    height: 100rpx;
+    line-height: 100rpx;
+    text-align: center;
+    font-size: 28rpx;
+    color: rgba(80, 80, 80, 0.27);
+  }
+}
+
+.popup_view {
+  box-sizing: border-box;
+  width: 600rpx;
+  height: 860rpx;
+  padding: 50rpx;
+  overflow-y: auto;
+
+  image {
+    width: 100%;
+    height: 100%;
+  }
+
+  .popup_title {
+    font-size: 20px;
+  }
+
+  .popup_item {
+    margin: 20rpx 0;
+  }
+
+  .popup_img {
+    display: flex;
+
+    image {
+      margin: 0 6rpx;
+      width: 100rpx;
+      height: 200rpx;
+      background-color: #eee;
+    }
+  }
+}
+
+#dialog {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  width: 80%;
+  height: 180px;
+  text-align: center;
+  margin: auto;
+  background-color: white;
+  border-radius: 10px;
+}
+
+textarea {
+  height: 100px;
+  width: 90%;
+  margin-top: 5px;
+  margin-left: 5%;
+  text-align: left;
+  border: 1px solid rgba(229, 229, 229, 0.62);
+  font-size: 14px;
+}
+
+.box {
+  position: fixed;
+  top: 0;
+  left: 0;
+  margin: 0;
+  width: 100%;
+  height: 100%;
+  background: rgba(0, 0, 0, 0.3);
+}
+
+.replace {
+  width: 100%;
+  height: 16%;
+  margin-top: 4%;
+  font-size: 28rpx;
+  color: rgba(80, 80, 80, 1);
+}
+
+.cancle {
+  position: absolute;
+  top: 78%;
+  width: 50%;
+  height: 22%;
+  line-height: 2;
+  background-color: white;
+  border-radius: 0 0 0 16rpx;
+  border-top: 1px solid rgba(229, 229, 229, 0.62);
+  border-right: 1px solid rgba(229, 229, 229, 0.62);
+}
+
+.agree {
+  position: absolute;
+  top: 78%;
+  width: 50%;
+  height: 22%;
+  right: 0;
+  line-height: 2;
+  background-color: white;
+  border-top: 1px solid rgba(229, 229, 229, 0.62);
+  border-left: 1px solid rgba(229, 229, 229, 0.62);
+  border-radius: 0 0 16rpx 0;
+}
+</style>

+ 846 - 0
pages/home/index.vue

@@ -0,0 +1,846 @@
+<template>
+  <view>
+    <view>
+      <!-- 头部 -->
+      <header>
+        <view class="head">
+          <image src="../../static/list-img.png" mode="aspectFit"></image>
+          <!-- 公告 -->
+          <view class="notice">
+            <view class="notice-content" style="margin-top: 16rpx">
+              <view class="notice-first">
+                <image src="../../static/喇叭.png"></image>
+                <text style="line-height: 66rpx; margin-left: -22rpx">公告:</text>
+                <uni-notice-bar
+                  :single="true"
+                  background-color="white"
+                  color="blue"
+                  :scrollable="true"
+                  :text="notices"
+                  :speed="30"
+                />
+              </view>
+            </view>
+          </view>
+        </view>
+        <!-- 跳转导航 -->
+        <view class="nav">
+          <navigator url="../repair-form/index" class="nav1">
+            <image src="../../static/put.png"></image>
+            <view>前往报修</view>
+          </navigator>
+          <navigator url="../personal-information/index" class="nav2">
+            <image src="../../static/information.png"></image>
+            <view>修改信息</view>
+          </navigator>
+        </view>
+      </header>
+
+      <!-- 报修订单 -->
+      <view class="content">
+        <!-- 导航与报修单间的灰色背景 -->
+        <view class="point"></view>
+        <view class="list-text">----报修订单----</view>
+        <!-- <view class="list-text" v-if="Studentlist.length!==0">
+					----报修订单----
+				</view> -->
+        <!-- <view class="list-text" v-else>
+					----暂无数据----
+				</view> -->
+        <!-- 订单 -->
+        <view class="content-list" v-for="(item, index) in Studentlist" :key="index" @click="handleLookInfo(item)">
+          <text class="num">订单:{{ item.orderId }}</text>
+          <text class="newList">{{ item.orderStatus == 0 ? '等待后台分配' : '' }}</text>
+          <!-- 新订单 -->
+          <text class="waitList">{{ item.orderStatus == 1 ? '等待维修工接单' : '' }}</text>
+          <!-- 待接单 -->
+          <text class="readyList">{{ item.orderStatus == 2 ? '维修工已接单' : '' }}</text>
+          <!-- 已接单 -->
+          <text class="finishList">{{ item.orderStatus == 3 ? '维修完成' : '' }}</text>
+          <!-- 维修完成 -->
+          <text class="refuseList">{{ item.orderStatus == 4 ? '已退单' : '' }}</text>
+          <!-- 已退单 -->
+          <view class="list">
+            <view>故障原因:{{ item.repairsFault.faultName }}</view>
+            <view>维修人员:{{ item.repairsWork.workName == null ? '等待分配' : item.repairsWork.workName }}</view>
+            <view>宿舍楼栋:{{ item.repairsStudent.dormNumber }}</view>
+            <view>提交时间:{{ item.orderCommitTime }}</view>
+            <view>预约时间:{{ item.orderExpectedTime }}</view>
+            <view v-if="item.orderStatus == 2">维修时间:{{ item.orderRepairTime }}</view>
+            <view v-if="item.orderStatus == 3">完成时间:{{ item.orderCompleteTime }}</view>
+            <!-- <view>
+              {{ item.orderStatus == 3 ? "完成时间:" : "预约时间:"
+              }}{{
+                item.orderStatus == 3
+                  ? item.orderCompleteTime
+                  : item.orderExpectedTime
+              }}
+            </view> -->
+          </view>
+          <button
+            @click.stop="appraise(item)"
+            v-if="item.orderStatus == 3 && item.orderAdvice == null"
+            style="
+              width: 185rpx;
+              height: 36rpx;
+              background-color: rgba(42, 130, 228, 1);
+              color: white;
+              font-size: 24rpx;
+              border-radius: 32rpx;
+            "
+          >
+            维修后评价
+          </button>
+          <view class="sug">{{ item.orderStatus == 3 && item.orderAdvice !== null ? '已评价' : '' }}</view>
+          <button class="sug_left" v-if="item.orderStatus == 0" @click.stop="handleDelete(item)">撤回订单</button>
+        </view>
+        <!-- xiaxia -->
+        <view class="content-list" @click="handleLookInfo(item)">
+          <text class="num">订单:{{ 'DZ165437348' }}</text>
+          <text class="finishList">{{ '维修完成' }}</text>
+          <view class="list">
+            <view>故障原因:{{ '水龙头破裂' }}</view>
+            <view>维修人员:{{ '李海聪' }}</view>
+            <view>宿舍楼栋:{{ '19栋1单元203' }}</view>
+            <view>提交时间:{{ '2023-12-13 14:00' }}</view>
+            <view>
+              {{ '完成时间:2022-12-13 18:11' }}
+            </view>
+          </view>
+          <button
+            @click.stop="appraise(item)"
+            style="
+              width: 185rpx;
+              height: 36rpx;
+              background-color: rgba(42, 130, 228, 1);
+              color: white;
+              font-size: 24rpx;
+              border-radius: 32rpx;
+            "
+          >
+            维修后评价
+          </button>
+        </view>
+        <view class="content-list" @click="handleLookInfo(item)">
+          <text class="num">订单:{{ 'DZ165437348' }}</text>
+          <text class="readyList">{{ '维修工已接单' }}</text>
+          <view class="list">
+            <view>故障原因:{{ '设备不在线' }}</view>
+            <view>维修人员:{{ '赵一' }}</view>
+            <view>宿舍楼栋:{{ '19栋1单元203' }}</view>
+            <view>提交时间:{{ '2023-12-17 14:00' }}</view>
+            <view>
+              {{ '预约时间:2022-12-17 18:11' }}
+            </view>
+          </view>
+        </view>
+        <view class="content-list" @click="handleLookInfo(item)">
+          <text class="num">订单:{{ 'DZ165437348' }}</text>
+          <text class="readyList">{{ '维修工已接单' }}</text>
+          <view class="list">
+            <view>故障原因:{{ '设备不在线' }}</view>
+            <view>维修人员:{{ '李四' }}</view>
+            <view>宿舍楼栋:{{ '19栋1单元203' }}</view>
+            <view>提交时间:{{ '2023-12-17 14:00' }}</view>
+            <view>
+              {{ '预约时间:2022-12-17 18:11' }}
+            </view>
+          </view>
+          <button class="sug_left" @click.stop="handleDelete()">撤回订单</button>
+        </view>
+        <view class="isOver">----我是有底线的----</view>
+        <!-- <view class="isOver" v-if="flag">
+					----我是有底线的----
+				</view> -->
+      </view>
+    </view>
+
+    <!-- 查看详情弹窗 -->
+    <uni-popup ref="popup" background-color="#fff">
+      <view class="popup_view" v-if="info">
+        <view class="popup_title">订单信息</view>
+        <view class="popup_item">订单号:{{ info.orderId }}</view>
+        <view class="popup_item">报修类型:{{ info.repairsFault.faultName }}</view>
+        <view class="popup_item">酒店楼栋:{{ info.repairsStudent.dormNumber }}</view>
+        <view class="popup_item">提交时间:{{ info.orderCommitTime }}</view>
+        <view class="popup_item">预约时间:{{ info.orderExpectedTime }}</view>
+        <view class="popup_item">联系电话:{{ info.repairsStudent.studentPhone }}</view>
+        <view class="popup_item">备选电话:{{ info.repairsStudent.studentOtherPhone }}</view>
+        <view class="popup_item" v-if="info.orderBack">退回原因:{{ info.orderBack }}</view>
+        <view class="popup_item" v-if="info.orderAdvice">修后评价:{{ info.orderAdvice }}</view>
+        <view class="popup_img">
+          <text>故障图片:</text>
+          <image
+            v-for="(item, index) in info.orderImages"
+            :key="index"
+            :src="item ? item : '../../static/no-image.gif'"
+            mode="aspectFit"
+            @click="handleBig(index)"
+          ></image>
+        </view>
+      </view>
+    </uni-popup>
+
+    <!-- 图片放大弹窗 -->
+    <uni-popup ref="popup2">
+      <view class="popup_view" v-if="info" style="padding: 0px">
+        <image
+          v-for="(item, index) in info.orderImages"
+          :key="index"
+          :src="item ? item : '../../static/no-image.gif'"
+          v-if="index == activeIndex"
+        ></image>
+      </view>
+    </uni-popup>
+
+    <!-- 修改评价遮罩层 -->
+    <view class="box" v-if="dialogShow">
+      <view id="dialog">
+        <view class="replace">修后评价</view>
+        <view class="uni-textarea">
+          <textarea
+            v-model="inputcontent"
+            placeholder-style="color:rgba(229, 229, 229, 0.7)"
+            cols="20"
+            row="2"
+            placeholder="请输入内容"
+          />
+        </view>
+        <view class="cancle" @click="cancle">取消</view>
+        <view class="agree" @click="agree">确定</view>
+      </view>
+    </view>
+  </view>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      pageNum: 1,
+      pageSize: 6,
+      total: '',
+      dialogShow: false,
+      flag: false,
+      notices: '',
+      Studentlist: [],
+      value: [],
+      inputcontent: '',
+      orderId: null,
+      info: null,
+      activeIndex: null,
+      studentCampus: null,
+    }
+  },
+  onLoad() {
+    let res = uni.getStorageSync('student')
+    if (res.studentCampus == 0) {
+      this.studentCampus = '黄家湖校区'
+    } else if (res.studentCampus == 1) {
+      this.studentCampus = '墨轩湖校区'
+    }
+    this.getNotice()
+    this.getStudentlist()
+  },
+
+  methods: {
+    // 获取最新公告数据
+    async getNotice() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/notice/releaseNotice`,
+      })
+      // console.log(res)
+      if (res.status == 200) {
+        this.notices = res.data.noticeContent
+      } else {
+        console.log('获取最新公告数据失败')
+      }
+    },
+
+    // 获取学生订单
+    async getStudentlist() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/order/queryAllOrderByStudentId`,
+        data: {
+          pageNum: this.pageNum,
+          pageSize: this.pageSize,
+        },
+      })
+      // console.log(res)
+      if (res.status == 200) {
+        this.total = res.data.total
+        this.Studentlist = [...this.Studentlist, ...res.data.list]
+        uni.hideLoading()
+      } else {
+        console.log('获取订单数据失败')
+      }
+    },
+
+    // 下拉刷新
+    onPullDownRefresh() {
+      this.flag = false
+      this.Studentlist = []
+      this.pageNum = 1
+      this.getStudentlist()
+      this.getNotice()
+      setTimeout(() => {
+        uni.stopPullDownRefresh()
+      }, 1000)
+    },
+    // 上拉加载+结尾语句显示
+    onReachBottom() {
+      if (this.Studentlist.length < this.total) {
+        uni.showLoading({
+          title: '数据加载中',
+        })
+        this.pageNum++
+        this.getStudentlist()
+      } else {
+        this.flag = true
+      }
+    },
+    // 点击维修后评价按钮回调
+    appraise(item) {
+      this.dialogShow = true
+      this.inputcontent = ''
+      this.orderId = item.orderId
+    },
+    // 弹窗确定按钮回调
+    agree() {
+      if (this.inputcontent == '') {
+        uni.showToast({
+          title: '请输入内容',
+          icon: 'none',
+          duration: 2000,
+        })
+      } else {
+        this.dialogShow = false
+        this.getsuggest()
+      }
+    },
+
+    // 弹窗取消按钮回调
+    cancle() {
+      this.dialogShow = false
+      this.inputcontent = ''
+      uni.showToast({
+        title: '已取消评价',
+        icon: 'none',
+        duration: 2000,
+      })
+    },
+
+    // 修后评价请求
+    async getsuggest() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/order/updateOrderAdvice?orderAdvice=${this.inputcontent}&orderId=${this.orderId}`,
+      })
+      // console.log(res)
+      if (res.status == 200) {
+        uni.showToast({
+          title: '评价成功',
+          icon: 'success',
+        })
+        this.Studentlist = []
+        this.pageNum = 1
+        uni.pageScrollTo({
+          scrollTop: 0,
+        })
+        this.getStudentlist()
+      } else {
+        console.log('修后评价请求失败')
+      }
+    },
+
+    // 查看详情回调
+    async handleLookInfo(item) {
+      this.info = null
+      this.$refs.popup.open()
+      if (item.orderStatus == 0 || item.orderStatus == 4) {
+        let res = await this.$myRequest({
+          method: 'post',
+          url: `/order/queryByOrderIdNotWork?orderId=${item.orderId}`,
+        })
+        // console.log(res)
+        this.$nextTick(() => {
+          this.info = res.data
+          this.info.orderImages = this.info.orderImages.split(';')
+        })
+      } else {
+        let res = await this.$myRequest({
+          method: 'post',
+          url: `/order/queryByOrderId?orderId=${item.orderId}`,
+        })
+        // console.log(res)
+        this.$nextTick(() => {
+          this.info = res.data
+          this.info.orderImages = this.info.orderImages.split(';')
+        })
+      }
+    },
+
+    // 点击图片放大
+    handleBig(index) {
+      this.activeIndex = index
+      this.$refs.popup2.open()
+    },
+
+    // 撤回订单请求
+    handleDelete(item) {
+      uni.showModal({
+        title: '提示',
+        content: '确定撤回订单吗?',
+        success: async (res) => {
+          if (res.confirm) {
+            let res = await this.$myRequest({
+              url: `/order/deleteOrderById?orderId=${item.orderId}`,
+              method: 'post',
+            })
+            // console.log(res)
+            if (res.status == 200) {
+              uni.showToast({
+                title: '撤回成功',
+                icon: 'success',
+              })
+              this.Studentlist = []
+              this.pageNum = 1
+              uni.pageScrollTo({
+                scrollTop: 0,
+              })
+              this.getStudentlist()
+            } else {
+              uni.showToast({
+                title: '撤回失败',
+                icon: 'error',
+              })
+            }
+          } else if (res.cancel) {
+            // console.log('用户点击取消');
+          }
+        },
+      })
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+header {
+  //   position: fixed;
+  //   top: 0;
+  //   right: 0;
+  //   left: 0;
+  //   background-color: ;
+  //   z-index: 99;
+  .head {
+    position: relative;
+    height: 420rpx;
+    background-size: 100%;
+    margin-left: 36rpx;
+    margin-right: 36rpx;
+    margin-top: -96rpx;
+    image {
+      width: 100%;
+    }
+    .notice {
+      position: relative;
+      margin-top: -96rpx;
+      width: 100%;
+      height: 68rpx;
+      font-size: 30rpx;
+      font-weight: 700;
+      -moz-box-shadow: 0 0 10rpx #d3d3d3;
+      -webkit-box-shadow: 0 0 10rpx #d3d3d3;
+      box-shadow: 0 0 10rpx #d3d3d3;
+      // .uni-noticebar {
+      //   position: absolute;
+      //   width: 77%;
+      //   height: 20%;
+      //   top: 14rpx;
+      //   right: 26rpx;
+      //   display: flex;
+      //   box-sizing: border-box;
+      //   flex-direction: row;
+      //   align-items: center;
+      //   padding: 20rpx 2rpx;
+      //   margin-bottom: 20rpx;
+      // }
+      image {
+        width: 24rpx;
+        height: 24rpx;
+        left: -30rpx;
+      }
+      .notice-first {
+        margin-left: 60rpx;
+        color: black;
+      }
+      .notice-second {
+        float: right;
+        margin-right: 68rpx;
+        margin-bottom: 16rpx;
+        color: black;
+        width: 76%;
+        height: 86rpx;
+      }
+    }
+  }
+  .nav {
+    position: absolute;
+    width: 100%;
+    height: 236rpx;
+    margin-left: -48rpx;
+    margin-top: 28rpx;
+  }
+  .nav1 image {
+    position: absolute;
+    left: 114rpx;
+    top: 60rpx;
+    width: 123rpx;
+    height: 123rpx;
+    font-size: 48rpx;
+    border-radius: 80rpx;
+    box-shadow: 0 0 10px #06c;
+  }
+
+  .nav1 view {
+    position: absolute;
+    left: 254rpx;
+    // top: 70rpx;
+    line-height: 156rpx;
+    font-size: 30rpx;
+    font-weight: 700;
+  }
+
+  .nav2 image {
+    position: absolute;
+    right: 165rpx;
+    width: 123rpx;
+    height: 123rpx;
+    font-size: 48rpx;
+    top: 60rpx;
+    border-radius: 80rpx;
+    box-shadow: 0 0 10px #06c;
+  }
+
+  .nav2 view {
+    position: absolute;
+    right: 26rpx;
+    // top: 70rpx;
+    line-height: 126rpx;
+    font-size: 24rpx;
+    font-size: 30rpx;
+    font-weight: 700;
+  }
+
+  .nav .nav1 {
+    width: 272rpx;
+    height: 156rpx;
+    margin-top: 40rpx;
+    margin-left: 106rpx;
+  }
+
+  .nav .nav2 {
+    width: 272rpx;
+    height: 130rpx;
+    margin-top: -140rpx;
+    margin-left: 468rpx;
+  }
+}
+
+.content {
+  // margin-top: 550rpx;
+  padding-top: 550rpx;
+  height: 1200rpx;
+  background-color: rgba(255, 255, 255, 1);
+}
+
+.point {
+  height: 14rpx;
+  // font-weight: 700;
+  // margin-left: 40rpx;
+}
+
+.list-text {
+  margin-top: 30rpx;
+  font-size: 24rpx;
+  text-align: center;
+  color: rgba(80, 80, 80, 0.27);
+}
+
+.content-list {
+  position: relative;
+  width: 95%;
+  height: 290rpx;
+  margin: 0 auto;
+  margin-top: 22rpx;
+  padding-left: 20rpx;
+  font-size: 24rpx;
+  border-radius: 28rpx 28rpx 0rpx 0rpx;
+  // border: 2rpx solid rgba(229, 229, 229, 0.62);
+  background-color: rgba(229, 229, 229, 0.62);
+}
+
+.num {
+  float: left;
+  margin-left: 14rpx;
+  margin-top: 18rpx;
+  font-size: 28rpx;
+  font-weight: 700;
+  color: rgba(42, 130, 228, 1);
+}
+
+.newList {
+  float: right;
+  margin-top: 20rpx;
+  margin-right: 32rpx;
+  color: rgba(255, 141, 26, 1);
+}
+
+.readyList {
+  float: right;
+  margin-top: 20rpx;
+  margin-right: 4rpx;
+  color: rgba(212, 48, 48, 1);
+}
+
+.waitList {
+  float: right;
+  margin-top: 20rpx;
+  margin-right: 4rpx;
+  color: rgba(212, 48, 48, 1);
+}
+
+.finishList {
+  float: right;
+  margin-top: 20rpx;
+  margin-right: 4rpx;
+  color: yellowgreen;
+}
+
+.refuseList {
+  float: right;
+  margin-top: 20rpx;
+  margin-right: 4rpx;
+  color: rgba(212, 48, 48, 1);
+}
+
+.list {
+  float: left;
+  margin-left: -328rpx;
+  margin-top: 72rpx;
+  font-size: 28rpx;
+}
+
+.content-list button {
+  position: absolute;
+  bottom: 20rpx;
+  right: 42rpx;
+  line-height: 36rpx;
+}
+
+.content-list .sug {
+  position: absolute;
+  bottom: 30rpx;
+  right: 42rpx;
+  color: #333333;
+}
+
+.content-list .sug_left {
+  position: absolute;
+  bottom: 16rpx;
+  // left: -640rpx;
+  width: 160rpx;
+  height: 36rpx;
+  font-size: 24rpx;
+  border-radius: 32rpx;
+  // background-color: orange;
+}
+
+.isOver {
+  width: 100%;
+  height: 100rpx;
+  line-height: 100rpx;
+  text-align: center;
+  font-size: 24rpx;
+  color: rgba(80, 80, 80, 0.27);
+}
+
+.popup_view {
+  box-sizing: border-box;
+  width: 600rpx;
+  height: 860rpx;
+  padding: 50rpx;
+  overflow-y: auto;
+
+  image {
+    width: 100%;
+    height: 100%;
+  }
+
+  .popup_title {
+    font-size: 20px;
+  }
+
+  .popup_item {
+    margin: 20rpx 0;
+  }
+
+  .popup_img {
+    display: flex;
+
+    image {
+      margin: 0 6rpx;
+      width: 100rpx;
+      height: 200rpx;
+      background-color: #eee;
+    }
+  }
+}
+
+.content {
+  margin-top: 230rpx;
+  padding: 0 10rpx;
+  // height: 1200rpx;
+  background-color: rgba(255, 255, 255, 1);
+
+  .point {
+    height: 14rpx;
+    background-color: rgba(229, 229, 229, 0.62);
+  }
+
+  .list-text {
+    margin-top: 30rpx;
+    font-size: 24rpx;
+    text-align: center;
+    color: rgba(80, 80, 80, 0.27);
+  }
+
+  .content-list {
+    position: relative;
+    margin-top: 22rpx;
+    padding: 20rpx;
+    height: 280rpx;
+    border-radius: 28rpx 28rpx 28rpx 28rpx;
+    font-size: 24rpx;
+    background-color: rgba(229, 229, 229, 0.62);
+
+    .num {
+      float: left;
+      margin-left: 14rpx;
+      margin-top: 18rpx;
+      font-weight: 700;
+      color: rgba(42, 130, 228, 1);
+    }
+
+    .newList {
+      float: right;
+      margin-top: 20rpx;
+      margin-right: 32rpx;
+      color: rgba(255, 141, 26, 1);
+    }
+
+    .readyList {
+      float: right;
+      margin-top: 20rpx;
+      margin-right: 4rpx;
+      color: rgba(212, 48, 48, 1);
+    }
+
+    .waitList {
+      float: right;
+      margin-top: 20rpx;
+      margin-right: 4rpx;
+      color: orange;
+    }
+
+    .finishList {
+      float: right;
+      margin-top: 20rpx;
+      margin-right: 4rpx;
+      color: blue;
+    }
+
+    .refuseList {
+      float: right;
+      margin-top: 20rpx;
+      margin-right: 4rpx;
+      color: rgba(212, 48, 48, 1);
+    }
+
+    .list {
+      float: left;
+      margin-left: -280rpx;
+      margin-top: 64rpx;
+    }
+  }
+}
+
+#dialog {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  width: 80%;
+  height: 180px;
+  text-align: center;
+  margin: auto;
+  background-color: white;
+  border-radius: 10px;
+}
+
+textarea {
+  height: 100px;
+  width: 90%;
+  margin-top: 5px;
+  margin-left: 5%;
+  text-align: left;
+  border: 1px solid rgba(229, 229, 229, 0.62);
+  font-size: 14px;
+}
+
+.box {
+  position: fixed;
+  top: 0;
+  left: 0;
+  margin: 0;
+  width: 100%;
+  height: 100%;
+  background: rgba(0, 0, 0, 0.3);
+}
+
+.replace {
+  width: 100%;
+  height: 16%;
+  margin-top: 4%;
+  font-size: 28rpx;
+  color: rgba(80, 80, 80, 1);
+}
+
+.cancle {
+  position: absolute;
+  top: 78%;
+  width: 50%;
+  height: 22%;
+  line-height: 2;
+  background-color: white;
+  border-radius: 0 0 0 16rpx;
+  border-top: 1px solid rgba(229, 229, 229, 0.62);
+  border-right: 1px solid rgba(229, 229, 229, 0.62);
+}
+
+.agree {
+  position: absolute;
+  top: 78%;
+  width: 50%;
+  height: 22%;
+  right: 0;
+  line-height: 2;
+  background-color: white;
+  border-top: 1px solid rgba(229, 229, 229, 0.62);
+  border-left: 1px solid rgba(229, 229, 229, 0.62);
+  border-radius: 0 0 16rpx 0;
+}
+</style>

+ 0 - 132
pages/identity/identity.vue

@@ -1,132 +0,0 @@
-<template>
-	<view>
-		<view class="content">
-			
-		<!-- 学生选择按钮 -->
-		<button class="student" @click="getStudentId">
-			<view class="stu">
-				学生
-			</view>
-			<view class="stu_point">
-				学生用户选择此项
-			</view>
-			<view class="stu_img">
-				<image src="../../static/stu_img.svg" mode=""></image>
-			</view>
-		</button>
-		
-		<!-- 维修人员选择按钮 -->
-		<button class="worker" @click="getlogin">
-			<view class="work">
-				维修人员
-			</view>
-			<view class="work_point">
-				维修人员选择此项
-			</view>
-			<view class="work_img">
-				<image src="../../static/work_img.svg" mode=""></image>
-			</view>
-		</button>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				
-			}
-		},
-		onLoad() {
-			// let identity = uni.getStorageSync('identity');
-			// console.log(identity)
-			// if (identity){
-			// 	identity == 0 ?  uni.redirectTo({ url: "../loginFilter/LoginFilter" }) : uni.redirectTo({ url: "/pages/login/login" });
-			// }
-		},
-		methods: {
-			//维修工登录跳转页面
-			getlogin(){
-				uni.reLaunch({
-					url:'../login/login',
-				})
-			},
-			//学生登录跳转页面
-			async getStudentId(){
-				uni.reLaunch({
-					url:'../loginFilter/LoginFilter'
-				})
-			},
-		}
-	}
-</script>
-
-<style>
-.content{
-	flex-direction: column;
-	display: flex;
-}
-.student{
-	position: relative;
-	width: 702rpx;
-	height: 300rpx;
-	margin-top: 148rpx;
-	margin-left: 24rpx;
-	border-radius: 32rpx;
-	background-color: rgba(42, 69, 228, 0.89);
-}
-.student .stu{
-	position: absolute;
-	top: 34rpx;
-	left: 50rpx;
-	font-size: 56rpx;
-	font-weight: 700;
-	color: rgba(255, 255, 255, 1);
-}
-.student .stu_point{
-	position: absolute;
-	top: 140rpx;
-	left: 160rpx;
-	font: 32rpx;
-	color: rgba(255, 255, 255, 1);
-}
-.student image{
-	position: absolute;
-	right: 40rpx;
-	top: 72rpx;
-	width: 152rpx;
-	height: 152rpx;
-}
-.worker{
-	position: relative;
-	width: 702rpx;
-	height: 300rpx;
-	margin-top: 114rpx;
-	margin-left: 24rpx;
-	border-radius: 32rpx;
-	background-color: rgba(42, 130, 228, 1);
-}
-.worker .work {
-	position: absolute;
-	top: 34rpx;
-	left: 50rpx;
-	font-size: 56rpx;
-	font-weight: 700;
-	color: rgba(255, 255, 255, 1);
-}
-.worker .work_point{
-	position: absolute;
-	top: 140rpx;
-	left: 160rpx;
-	font: 32rpx;
-	color: rgba(255, 255, 255, 1);
-}
-.worker image{
-	position: absolute;
-	right: 40rpx;
-	top: 72rpx;
-	width: 152rpx;
-	height: 152rpx;
-}
-</style>

+ 68 - 0
pages/identity/index.vue

@@ -0,0 +1,68 @@
+<template>
+  <view class="identify">
+    <view class="identify_card flex items-center justify-between mb100" @click="handleStudent">
+      <view class="text flex column">
+        <view class="f32 white bold">学生</view>
+        <view class="ml20 f16 white">学生选择此项</view>
+      </view>
+      <image src="../../static/stu_img.svg"></image>
+    </view>
+    <view class="identify_card flex items-center justify-between blue-bg" @click="handleWorker">
+      <view class="flex column">
+        <view class="f32 white bold">维修人员</view>
+        <view class="ml20 f16 white">维修人员选择此项</view>
+      </view>
+      <image src="../../static/work_img.svg"></image>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {}
+  },
+  methods: {
+    //维修工登录跳转页面
+    handleWorker() {
+      uni.reLaunch({
+        url: '../login/index',
+      })
+    },
+    //用户登录跳转页面
+    async handleStudent() {
+      uni.setStorageSync(
+        'token',
+        'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2ODM4OTQ1MzAsInVzZXJJZCI6IjIwMTkwMjEwMjMwMTMyIn0.m36xA71_0kEpvNIF1qETH0s9c1IwYLGi1LmWARUAP8M'
+      )
+      uni.reLaunch({
+        // url: '../login-filter/index',
+        url: '../home/home',
+      })
+      // window.location.href = 'http://192.168.161.95:8082/#/pages/home/home'
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.identify {
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  height: 100vh;
+  padding: 100rpx 20rpx;
+  &_card {
+    padding: 40rpx;
+    border-radius: 32rpx;
+    background-color: rgba(42, 69, 228, 0.89);
+    text {
+      height: 300rpx;
+      line-height: 0px !important;
+    }
+    image {
+      max-width: 152rpx;
+      max-height: 152rpx;
+    }
+  }
+}
+</style>

+ 0 - 658
pages/index/index.vue

@@ -1,658 +0,0 @@
-<template>
-	<view>
-		<view>
-			<!-- 头部 -->
-			<view class="head">
-
-				<!-- 定位 -->
-				<view class="location" v-if="studentCampus">
-					所属校区:{{studentCampus}}
-				</view>
-
-				<!-- 公告 -->
-				<view class="notice">
-					<view class="notice-content" style="margin-top: 16rpx;">
-						<view class="notice-first">公告<image src="../../static/horn.svg" mode=""></image>:<text
-								class="notice-second" selectable space="nbsp">{{notices}}</text></view>
-					</view>
-				</view>
-			</view>
-
-			<!-- 跳转导航 -->
-			<view class="nav">
-				<navigator url="../list/list" class="nav1">
-					<image src="../../static/repair.svg"></image>
-					<view>前往报修</view>
-				</navigator>
-				<navigator url="../personal-information/personal-information" class="nav2">
-					<image src="../../static/person.svg"></image>
-					<view>修改信息</view>
-				</navigator>
-			</view>
-
-			<!-- 报修订单 -->
-			<view class="content">
-				<!-- 导航与报修单间的灰色背景 -->
-				<view class="point"></view>
-				<view class="list-text" v-if="Studentlist.length!==0">
-					----报修订单----
-				</view>
-				<view class="list-text" v-else>
-					----暂无数据----
-				</view>
-
-				<!-- 订单 -->
-				<view class="content-list" v-for="(item,index) in Studentlist" :key="index"
-					@click="handleLookInfo(item)">
-					<text class="num">订单号:{{item.orderId}}</text>
-					<text class="newList">{{item.orderStatus==0?'等待后台分配':''}} </text> <!-- 新订单 -->
-					<text class="waitList">{{item.orderStatus==1?'等待维修工接单':''}} </text> <!-- 待接单 -->
-					<text class="readyList">{{item.orderStatus==2?'维修工已接单':''}} </text> <!-- 已接单 -->
-					<text class="finishList">{{item.orderStatus==3?'维修完成':''}} </text> <!-- 维修完成 -->
-					<text class="refuseList">{{item.orderStatus==4?'已退单':''}} </text> <!-- 已退单 -->
-					<view class="list">
-						<view>
-							故障类型:{{item.repairsFault.faultName}}
-						</view>
-						<view>
-							维修人员:{{item.repairsWork.workName==null?"等待分配":item.repairsWork.workName}}
-						</view>
-						<view>
-							提交时间:{{item.orderCommitTime}}
-						</view>
-						<view>
-							{{item.orderStatus==3?'完成时间:':'预约时间:'}}{{item.orderStatus==3?item.orderCompleteTime:item.orderExpectedTime}}
-						</view>
-					</view>
-					<button @click.stop="appraise(item)" v-if="item.orderStatus == 3 && item.orderAdvice == null"
-						style="width: 185rpx; height: 36rpx; background-color:rgba(42, 130, 228, 1); color: white;font-size: 24rpx; border-radius: 32rpx;">
-						维修后评价
-					</button>
-					<view class="sug">{{(item.orderStatus == 3 && item.orderAdvice !== null)?'已评价':''}}</view>
-					<button class="sug_left" v-if="item.orderStatus == 0" @click.stop="handleDelete(item)">撤回订单</button>
-				</view>
-
-				<view class="isOver" v-if="flag">
-					----我是有底线的----
-				</view>
-			</view>
-		</view>
-
-		<!-- 查看详情弹窗 -->
-		<uni-popup ref="popup" background-color="#fff">
-			<view class="popup_view" v-if="info">
-				<view class="popup_title">订单信息</view>
-				<view class="popup_item">订单号:{{info.orderId}}</view>
-				<view class="popup_item">报修类型:{{info.repairsFault.faultName}}</view>
-				<view class="popup_item">宿舍楼栋:{{info.repairsStudent.dormNumber}}</view>
-				<view class="popup_item">提交时间:{{info.orderCommitTime}}</view>
-				<view class="popup_item">预约时间:{{info.orderExpectedTime}}</view>
-				<view class="popup_item">联系电话:{{info.repairsStudent.studentPhone}}</view>
-				<view class="popup_item">备选电话:{{info.repairsStudent.studentOtherPhone}}</view>
-				<view class="popup_item" v-if="info.orderBack">退回原因:{{info.orderBack}}</view>
-				<view class="popup_item" v-if="info.orderAdvice">修后评价:{{info.orderAdvice}}</view>
-				<view class="popup_img">
-					<text>故障图片:</text>
-					<image v-for="(item,index) in info.orderImages" :key="index"
-						:src="item?item:'../../static/no-image.gif'" mode="aspectFit" @click="handleBig(index)"></image>
-				</view>
-			</view>
-		</uni-popup>
-
-		<!-- 图片放大弹窗 -->
-		<uni-popup ref="popup2">
-			<view class="popup_view" v-if="info" style="padding: 0px;">
-				<image v-for="(item,index) in info.orderImages" :key="index"
-					:src="item?item:'../../static/no-image.gif'" v-if="index==activeIndex">
-				</image>
-			</view>
-		</uni-popup>
-
-		<!-- 修改评价遮罩层 -->
-		<view class="box" v-if="dialogShow">
-			<view id="dialog">
-				<view class="replace">
-					修改评价
-				</view>
-				<view class="uni-textarea">
-					<textarea v-model="inputcontent" placeholder-style="color:rgba(229, 229, 229, 0.7)" cols="20"
-						row="2" placeholder="请输入内容" />
-				</view>
-				<view class="cancle" @click="cancle">
-					取消
-				</view>
-				<view class="agree" @click="agree">
-					确定
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-<script>
-	export default {
-		data() {
-			return {
-				pageNum: 1,
-				pageSize: 6,
-				total: "",
-				dialogShow: false,
-				flag: false,
-				notices: "",
-				Studentlist: [],
-				value: [],
-				inputcontent: '',
-				orderId: null,
-				info: null,
-				activeIndex: null,
-				studentCampus: null,
-			}
-		},
-		onLoad() {
-			let res = uni.getStorageSync("student")
-			if (res.studentCampus == 0) {
-				this.studentCampus = "黄家湖校区"
-			} else if (res.studentCampus == 1) {
-				this.studentCampus = "墨轩湖校区"
-			}
-			this.getNotice()
-			this.getStudentlist()
-		},
-
-		methods: {
-			// 获取最新公告数据
-			async getNotice() {
-				let res = await this.$myRequest({
-					method: "post",
-					url: `/notice/releaseNotice`,
-				})
-				// console.log(res)
-				if (res.status == 200) {
-					this.notices = res.data.noticeContent
-				} else {
-					console.log("获取最新公告数据失败")
-				}
-			},
-
-			// 获取学生订单
-			async getStudentlist() {
-				let res = await this.$myRequest({
-					method: "post",
-					url: `/order/queryAllOrderByStudentId?pageNum=${this.pageNum}&pageSize=${this.pageSize}`
-				})
-				// console.log(res)
-				if (res.status == 200) {
-					this.total = res.data.total
-					this.Studentlist = [...this.Studentlist, ...res.data.list]
-					uni.hideLoading()
-				} else {
-					console.log("获取订单数据失败")
-				}
-			},
-
-			// 下拉刷新
-			onPullDownRefresh() {
-				this.flag = false
-				this.Studentlist = []
-				this.pageNum = 1
-				this.getStudentlist()
-				this.getNotice()
-				setTimeout(() => {
-					uni.stopPullDownRefresh();
-				}, 1000);
-			},
-			// 上拉加载+结尾语句显示
-			onReachBottom() {
-				if (this.Studentlist.length < this.total) {
-					uni.showLoading({
-						title: "数据加载中"
-					})
-					this.pageNum++
-					this.getStudentlist()
-				} else {
-					this.flag = true
-				}
-			},
-			// 点击维修后评价按钮回调
-			appraise(item) {
-				this.dialogShow = true
-				this.inputcontent = ''
-				this.orderId = item.orderId
-			},
-			// 弹窗确定按钮回调
-			agree() {
-				if (this.inputcontent == '') {
-					uni.showToast({
-						title: '请输入内容',
-						icon: 'none',
-						duration: 2000,
-					})
-				} else {
-					this.dialogShow = false
-					this.getsuggest()
-				}
-			},
-
-			// 弹窗取消按钮回调
-			cancle() {
-				this.dialogShow = false
-				this.inputcontent = ''
-				uni.showToast({
-					title: '已取消评价',
-					icon: 'none',
-					duration: 2000
-				})
-			},
-
-			// 修后评价请求
-			async getsuggest() {
-				let res = await this.$myRequest({
-					method: "post",
-					url: `/order/updateOrderAdvice?orderAdvice=${this.inputcontent}&orderId=${this.orderId}`,
-				})
-				// console.log(res)
-				if (res.status == 200) {
-					uni.showToast({
-						title: "评价成功",
-						icon: "success"
-					})
-					this.Studentlist = []
-					this.pageNum = 1
-					uni.pageScrollTo({
-						scrollTop: 0
-					});
-					this.getStudentlist()
-				} else {
-					console.log("修后评价请求失败")
-				}
-			},
-
-			// 查看详情回调
-			async handleLookInfo(item) {
-				this.info = null
-				this.$refs.popup.open()
-				if (item.orderStatus == 0 || item.orderStatus == 4) {
-					let res = await this.$myRequest({
-						method: "post",
-						url: `/order/queryByOrderIdNotWork?orderId=${item.orderId}`,
-					})
-					// console.log(res)
-					this.$nextTick(() => {
-						this.info = res.data
-						this.info.orderImages = this.info.orderImages.split(";")
-					})
-				} else {
-					let res = await this.$myRequest({
-						method: "post",
-						url: `/order/queryByOrderId?orderId=${item.orderId}`,
-					})
-					// console.log(res)
-					this.$nextTick(() => {
-						this.info = res.data
-						this.info.orderImages = this.info.orderImages.split(";")
-					})
-				}
-			},
-
-			// 点击图片放大
-			handleBig(index) {
-				this.activeIndex = index
-				this.$refs.popup2.open()
-			},
-
-			// 撤回订单请求
-			handleDelete(item) {
-				uni.showModal({
-					title: '提示',
-					content: '确定撤回订单吗?',
-					success: async (res) => {
-						if (res.confirm) {
-							let res = await this.$myRequest({
-								url: `/order/deleteOrderById?orderId=${item.orderId}`,
-								method: "post"
-							})
-							// console.log(res)
-							if (res.status == 200) {
-								uni.showToast({
-									title: "撤回成功",
-									icon: "success"
-								})
-								this.Studentlist = []
-								this.pageNum = 1
-								uni.pageScrollTo({
-									scrollTop: 0
-								});
-								this.getStudentlist()
-							} else {
-								uni.showToast({
-									title: "撤回失败",
-									icon: "error"
-								})
-							}
-						} else if (res.cancel) {
-							// console.log('用户点击取消');
-						}
-					}
-				});
-			}
-		},
-	}
-</script>
-
-<style lang="scss">
-	#dialog {
-		position: absolute;
-		top: 0;
-		right: 0;
-		bottom: 0;
-		left: 0;
-		width: 80%;
-		height: 180px;
-		text-align: center;
-		margin: auto;
-		background-color: white;
-		border-radius: 10px;
-	}
-
-	textarea {
-		height: 100px;
-		width: 90%;
-		margin-top: 5px;
-		margin-left: 5%;
-		text-align: left;
-		border: 1px solid rgba(229, 229, 229, 0.62);
-		font-size: 14px;
-	}
-
-	.box {
-		position: fixed;
-		top: 0;
-		left: 0;
-		margin: 0;
-		width: 100%;
-		height: 100%;
-		background: rgba(0, 0, 0, 0.3);
-	}
-
-	.replace {
-		width: 100%;
-		height: 16%;
-		margin-top: 4%;
-		font-size: 28rpx;
-		color: rgba(80, 80, 80, 1);
-	}
-
-	.cancle {
-		position: absolute;
-		top: 78%;
-		width: 50%;
-		height: 22%;
-		line-height: 2;
-		background-color: white;
-		border-radius: 0 0 0 16rpx;
-		border-top: 1px solid rgba(229, 229, 229, 0.62);
-		border-right: 1px solid rgba(229, 229, 229, 0.62);
-	}
-
-	.agree {
-		position: absolute;
-		top: 78%;
-		width: 50%;
-		height: 22%;
-		right: 0;
-		line-height: 2;
-		background-color: white;
-		border-top: 1px solid rgba(229, 229, 229, 0.62);
-		border-left: 1px solid rgba(229, 229, 229, 0.62);
-		border-radius: 0 0 16rpx 0;
-	}
-
-	.head {
-		position: relative;
-		height: 350rpx;
-		background-color: rgba(42, 130, 228, 1);
-		border-radius: 0rpx 0rpx 20rpx 20rpx;
-	}
-
-	.location {
-		position: absolute;
-		top: 38rpx;
-		left: 260rpx;
-		font-size: 24rpx;
-
-		color: rgba(255, 255, 255, 1);
-	}
-
-	.notice {
-		position: absolute;
-		margin-top: 126rpx;
-		margin-left: 18rpx;
-		/* top: 63px;
-		left: 11px; */
-		width: 716rpx;
-		height: 110rpx;
-		font-size: 24rpx;
-		background-color: rgba(255, 255, 255, 0.21);
-		border-radius: 22rpx 20rpx 20rpx 20rpx;
-	}
-
-	.notice-first {
-		margin-left: 20rpx;
-		color: rgba(255, 255, 255, 1);
-	}
-
-	.notice-first image {
-		height: 28rpx;
-		width: 28rpx;
-		font-size: 28rpx;
-		vertical-align: bottom;
-	}
-
-	.notice-second {
-		float: right;
-		margin-right: 48rpx;
-		color: rgba(255, 255, 255, 1);
-		width: 76%;
-		height: 70rpx;
-	}
-
-	.nav {
-		position: absolute;
-		top: 282rpx;
-		width: 718rpx;
-		height: 236rpx;
-		margin-left: 16rpx;
-		background-color: rgba(255, 255, 255, 1);
-		border-radius: 28rpx 28rpx 0rpx 0rpx;
-	}
-
-	.nav1 image {
-		position: absolute;
-		left: 218rpx;
-		top: 70rpx;
-		width: 48rpx;
-		height: 48rpx;
-		font-size: 48rpx;
-	}
-
-	.nav1 view {
-		position: absolute;
-		left: 200rpx;
-		top: 136rpx;
-		font-size: 24rpx;
-	}
-
-	.nav2 image {
-		position: absolute;
-		left: 450rpx;
-		width: 48rpx;
-		height: 48rpx;
-		font-size: 48rpx;
-		top: 72rpx;
-	}
-
-	.nav2 view {
-		position: absolute;
-		left: 426rpx;
-		top: 136rpx;
-		font-size: 24rpx;
-	}
-
-	.nav .nav1 {
-		width: 108rpx;
-		height: 120rpx;
-		margin-top: 64rpx;
-		margin-left: 186rpx;
-	}
-
-	.nav .nav2 {
-		width: 108rpx;
-		height: 120rpx;
-		margin-top: -126rpx;
-		margin-left: 420rpx;
-	}
-
-	.content {
-		margin-top: 170rpx;
-		height: 1200rpx;
-		background-color: rgba(255, 255, 255, 1);
-	}
-
-	.point {
-		height: 14rpx;
-		background-color: rgba(229, 229, 229, 0.62);
-	}
-
-	.list-text {
-		margin-top: 30rpx;
-		font-size: 24rpx;
-		text-align: center;
-		color: rgba(80, 80, 80, 0.27);
-	}
-
-	.content-list {
-		position: relative;
-		height: 290rpx;
-		margin-top: 22rpx;
-		padding-left: 20rpx;
-		font-size: 24rpx;
-		border-radius: 28rpx 28rpx 0rpx 0rpx;
-		background-color: rgba(229, 229, 229, 0.62);
-	}
-
-	.num {
-		float: left;
-		margin-left: 14rpx;
-		margin-top: 18rpx;
-		font-size: 28rpx;
-		font-weight: 700;
-		color: rgba(42, 130, 228, 1);
-	}
-
-	.newList {
-		float: right;
-		margin-top: 20rpx;
-		margin-right: 32rpx;
-		color: rgba(255, 141, 26, 1);
-	}
-
-	.readyList {
-		float: right;
-		margin-top: 20rpx;
-		margin-right: 4rpx;
-		color: rgba(212, 48, 48, 1);
-	}
-
-	.waitList {
-		float: right;
-		margin-top: 20rpx;
-		margin-right: 4rpx;
-		color: rgba(212, 48, 48, 1);
-	}
-
-	.finishList {
-		float: right;
-		margin-top: 20rpx;
-		margin-right: 4rpx;
-		color: yellowgreen;
-	}
-
-	.refuseList {
-		float: right;
-		margin-top: 20rpx;
-		margin-right: 4rpx;
-		color: rgba(212, 48, 48, 1);
-	}
-
-	.list {
-		float: left;
-		margin-left: -328rpx;
-		margin-top: 72rpx;
-		font-size: 28rpx;
-	}
-
-	.content-list button {
-		position: absolute;
-		bottom: 20rpx;
-		right: 42rpx;
-		line-height: 36rpx;
-	}
-
-	.content-list .sug {
-		position: absolute;
-		bottom: 30rpx;
-		right: 42rpx;
-		color: #333333;
-	}
-
-	.content-list .sug_left {
-		position: absolute;
-		bottom: 16rpx;
-		left: -450rpx;
-		width: 160rpx;
-		height: 36rpx;
-		font-size: 24rpx;
-		border-radius: 32rpx;
-		background-color: orange;
-	}
-
-	.isOver {
-		width: 100%;
-		height: 100rpx;
-		line-height: 100rpx;
-		text-align: center;
-		font-size: 24rpx;
-		color: rgba(80, 80, 80, 0.27);
-	}
-
-	.popup_view {
-		box-sizing: border-box;
-		width: 600rpx;
-		height: 860rpx;
-		padding: 50rpx;
-		overflow-y: auto;
-
-		image {
-			width: 100%;
-			height: 100%;
-		}
-
-		.popup_title {
-			font-size: 20px;
-		}
-
-		.popup_item {
-			margin: 20rpx 0;
-		}
-
-		.popup_img {
-			display: flex;
-
-			image {
-				margin: 0 6rpx;
-				width: 100rpx;
-				height: 200rpx;
-				background-color: #eee;
-			}
-		}
-	}
-</style>

+ 0 - 643
pages/list-center/list-center.vue

@@ -1,643 +0,0 @@
-<template>
-	<view>
-		<view class="head">
-			<view class="location">
-				维修中心<image class="loc" src="../../static/rep.svg" mode=""></image>
-			</view>
-		</view>
-		<view class="nav">
-			<navigator url="../feedback/feedback" hover-class="navigator-hover">
-				<image src="../../static/sug.svg" mode=""></image>
-				<view>评价建议</view>
-			</navigator>
-		</view>
-
-		<view class="content">
-			<view class="point"></view>
-			<view class="list-text" v-if="workerList.length!==0">
-				---- 报修订单 ----
-			</view>
-			<view v-if="item.orderStatus" class="content-list" v-for="(item,index) in workerList" :key="item.orderId"
-				@click="handleLookInfo(item)">
-				<text class="num">订单号:{{item.orderId}}</text>
-				<text class="newList">{{item.orderStatus==0?"新订单":''}} </text> <!-- 新订单 -->
-				<text class="waitList">{{item.orderStatus==1?"待接单":''}} </text> <!-- 待接单 -->
-				<text class="readyList">{{item.orderStatus==2?"已接单":''}} </text> <!-- 已接单 -->
-				<text class="finishList">{{item.orderStatus==3?"维修完成":''}} </text> <!-- 维修完成 -->
-				<text class="refuseList">{{item.orderStatus==4?"退单":''}} </text> <!-- 已退单 -->
-				<view class="list">
-					<view>故障类型:{{item.repairsFault.faultName}}</view>
-					<view>维修人员:{{item.repairsWork.workName}}</view>
-					<view>预约时间:{{item.orderExpectedTime}}</view>
-					<view v-if="item.orderStatus==1">派单时间:{{item.orderCompleteTime}}</view>
-					<view v-if="item.orderStatus==2">维修时间:{{item.orderCompleteTime}}</view>
-					<view v-if="item.orderStatus==3">完成时间:{{item.orderCompleteTime}}</view>
-				</view>
-				<button class="agreeIt2" v-if="item.orderStatus == 1" @click.stop="open(item,1)">
-					接受
-				</button>
-				<button class="refuse" v-if="item.orderStatus == 1" @click.stop="open(item,2)">
-					拒绝
-				</button>
-				<button class="agreeIt" v-if="item.orderStatus == 2" @click.stop="handleFinish(item.orderId)">
-					完成维修
-				</button>
-			</view>
-			<view class="isOver" v-if="flag">
-				----我是有底线的----
-			</view>
-			<view class="isOver" v-if="workerList.length==0">
-				----暂无订单----
-			</view>
-		</view>
-		<!-- 查看详情弹窗 -->
-		<uni-popup ref="popup" background-color="#fff">
-			<view class="popup_view" v-if="info">
-				<view class="popup_title">订单信息</view>
-				<view class="popup_item">订单号:{{info.orderId}}</view>
-				<view class="popup_item">报修类型:{{info.repairsFault.faultName}}</view>
-				<view class="popup_item">宿舍楼栋:{{info.repairsStudent.dormNumber}}</view>
-				<view class="popup_item">预约时间:{{info.orderExpectedTime}}</view>
-				<view v-if="info.orderStatus==1">派单时间:{{info.orderCompleteTime}}</view>
-				<view v-if="info.orderStatus==2">维修时间:{{info.orderCompleteTime}}</view>
-				<view v-if="info.orderStatus==3">完成时间:{{info.orderCompleteTime}}</view>
-				<view class="popup_item">联系电话:{{info.repairsStudent.studentPhone}}</view>
-				<view class="popup_item">备选电话:{{info.repairsStudent.studentOtherPhone}}</view>
-				<view class="popup_img">
-					<text>故障图片:</text>
-					<image v-for="(item,index) in info.orderImages" :key="index" :src="item?item:'../../static/no-image.gif'" mode="aspectFit" @click="handleBig(index)"></image>
-				</view>
-			</view>
-		</uni-popup>
-
-		<!-- 图片放大弹窗 -->
-		<uni-popup ref="popup2">
-			<view class="popup_view" v-if="info" style="padding: 0px;">
-				<image
-					v-for="(item,index) in info.orderImages" :key="index" :src="item?item:'../../static/no-image.gif'" v-if="index==activeIndex">
-				</image>
-			</view>
-		</uni-popup>
-		
-		<!-- 是否拒绝单子 -->
-		<view class="box" v-if="dialogShows">
-			<view id="dialog">
-				<view class="replace">
-					通知
-				</view>
-				<view class="uni-textarea">
-					确定拒绝此单?
-				</view>
-				<view class="cancle" @click="dialogShows = false">
-					取消
-				</view>
-				<view class="agree" @click="handleRefuse">
-					确定
-				</view>
-			</view>
-		</view>
-		<!-- 是否接受单子 -->
-		<view class="box" v-if="dialogShow">
-			<view id="dialog">
-				<view class="replace">
-					选择维修时间
-				</view>
-				<view class="uni-textarea">
-					<view @click="onShowDatePicker('datetime')" class="uni-list-cell-db-2">
-						<text style="margin-left: 20rpx;">{{timeValue}}</text>
-					</view>
-					<mx-date-picker :show="showPicker" :type="type" :value="timeValue" :show-tips="true"
-						:begin-text="'开始'" :end-text="'截至'" :show-seconds="true" @confirm="onSelected"
-						@cancel="onSelected" />
-				</view>
-				<view class="cancle" @click="cancleclose">
-					取消
-				</view>
-				<view class="agree" @click="agreeList">
-					确定
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	import MxDatePicker from "../../util/mx-datepicker/mx-datepicker"
-	export default {
-		components: {
-			MxDatePicker
-		},
-		data() {
-			return {
-				dialogShow: false,
-				dialogShows: false,
-				orderId: '',
-				orderStatus: null,
-				workerList: [],
-				flag: false,
-				pageNum: 1,
-				pageSize: 6,
-				total: "",
-				title: 'picker-view',
-				visible: true,
-				showPicker: false,
-				datetime: '',
-				range: ['2022-03-27', '2022-03-27'],
-				rangetime: '',
-				type: 'rangetime',
-				timeValue: '请点击选择时间',
-				info: null,
-				activeIndex:null
-			}
-		},
-		onLoad() {
-			this.getworkList()
-			this.getTime()
-		},
-
-		methods: {
-			// 初始化时间
-			getTime() {
-				let date = new Date(),
-					year = date.getFullYear(),
-					month = date.getMonth() + 1,
-					day = date.getDate(),
-					hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours(),
-					minute = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes(),
-					second = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
-				month >= 1 && month <= 9 ? (month = "0" + month) : "";
-				day >= 0 && day <= 9 ? (day = "0" + day) : "";
-				let timer = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second;
-				this.datetime = timer
-			},
-
-			// 获取报修订单列表
-			async getworkList() {
-				let res = await this.$myRequest({
-					method: "post",
-					url: `/order/queryAllOrderByWorkId?pageNum=${this.pageNum}&pageSize=${this.pageSize}`
-				})
-				// console.log(res)
-				if (res.status == 200) {
-					this.total = res.data.total
-					this.workerList = [...this.workerList, ...res.data.list]
-					uni.hideLoading()
-				} else {
-					uni.hideLoading()
-				}
-			},
-
-			// 接受订单
-			async agreeList() {
-				if (this.timeValue == "请点击选择时间") {
-					uni.showToast({
-						title: "请选择时间"
-					})
-				} else {
-					this.dialogShow = false
-					let res = await this.$myRequest({
-						method: "post",
-						url: `/order/updateOrderAccept?orderId=${this.orderId}&completeTime=${this.timeValue}`,
-					})
-					// console.log(res)
-					if (res.status == 200) {
-						uni.showToast({
-							title: "接单成功",
-							icon: "success"
-						})
-						this.workerList = []
-						this.pageNum = 1
-						uni.pageScrollTo({
-							scrollTop: 0
-						});
-						this.getworkList()
-					}
-					this.timeValue = '请点击选择时间'
-				}
-			},
-
-			// 拒绝订单
-			async handleRefuse() {
-				this.dialogShows = false
-				let res = await this.$myRequest({
-					method: "post",
-					url: `/order/updateOrderRefused?orderId=${this.orderId}`,
-				})
-				// console.log(res)
-				if (res.status == 200) {
-					uni.showToast({
-						title: "拒单成功",
-						icon: "success",
-					})
-					this.workerList = []
-					this.pageNum = 1
-					uni.pageScrollTo({
-						scrollTop: 0
-					});
-					this.getworkList()
-				}
-			},
-
-			onShowDatePicker(type) {
-				this.type = type;
-				this.showPicker = true;
-				this.timeValue = this[type];
-			},
-
-			onSelected(e) {
-				this.showPicker = false;
-				if (e) {
-					this[this.type] = e.value;
-					this.timeValue = e.value;
-				}
-			},
-
-			// 页面拉到底部触发事件
-			onReachBottom() {
-				if (this.workerList.length < this.total) {
-					uni.showLoading({
-						title: "数据加载中"
-					})
-					this.pageNum++
-					this.getworkList()
-				} else {
-					this.flag = true
-				}
-			},
-
-			// 下拉页面刷新函数
-			onPullDownRefresh() {
-				this.flag = false
-				this.workerList = []
-				this.pageNum = 1
-				this.getworkList()
-				setTimeout(() => {
-					uni.stopPullDownRefresh();
-				}, 1000);
-			},
-
-			// 控制 接受或者拒绝弹窗 打开
-			open(item, num) {
-				this.orderId = item.orderId
-				this.orderStatus = item.orderStatus
-				if (num == 1) {
-					this.dialogShow = true
-				} else {
-					this.dialogShows = true
-				}
-			},
-
-			cancleclose() {
-				this.dialogShow = false
-				this.timeValue = '请点击选择时间'
-			},
-
-			// 完成维修按钮回调
-			handleFinish(orderId) {
-				uni.showModal({
-					title: '提示',
-					content: '确定完成维修了吗?',
-					success: async (res) => {
-						if (res.confirm) {
-							let res = await this.$myRequest({
-								method: "post",
-								url: `/order/updateOrderFinish?orderId=${orderId}`,
-							})
-							// console.log(res)
-							if (res.status == 200) {
-								uni.showToast({
-									title: res.message,
-									icon: "success",
-								})
-								this.workerList = []
-								this.pageNum = 1
-								uni.pageScrollTo({
-									scrollTop: 0
-								});
-								this.getworkList()
-							}
-						} else if (res.cancel) {
-							// uni.showToast({
-							// 	title: "已取消"
-							// })
-						}
-					}
-				});
-			},
-
-			// 查看详情回调
-			async handleLookInfo(item) {
-				this.info = null
-				this.$refs.popup.open()
-				if (item.orderStatus == 0) {
-					let res = await this.$myRequest({
-						method: "post",
-						url: `/order/queryByOrderIdNotWork?orderId=${item.orderId}`,
-					})
-					// console.log(res)
-					this.$nextTick(() => {
-						this.info = res.data
-						this.info.orderImages=this.info.orderImages.split(";")
-					})
-				} else {
-					let res = await this.$myRequest({
-						method: "post",
-						url: `/order/queryByOrderId?orderId=${item.orderId}`,
-					})
-					// console.log(res)
-					this.$nextTick(() => {
-						this.info = res.data
-						this.info.orderImages=this.info.orderImages.split(";")
-					})
-				}
-			},
-
-			// 点击图片放大
-			handleBig(index) {
-				this.activeIndex=index
-				this.$refs.popup2.open()
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.picker-view {
-		width: 750rpx;
-		height: 600rpx;
-		margin-top: 20rpx;
-	}
-
-	.item {
-		height: 100rpx;
-		align-items: center;
-		justify-content: center;
-		text-align: center;
-	}
-
-	.head {
-		position: relative;
-		height: 350rpx;
-		border-radius: 0rpx 0rpx 20rpx 20rpx;
-		background-color: rgba(42, 130, 228, 1);
-	}
-
-	.location {
-		position: absolute;
-		top: 38rpx;
-		left: 300rpx;
-		font-size: 30rpx;
-		font-weight: bold;
-		color: rgba(255, 255, 255, 1);
-	}
-
-	.loc {
-		font-size: 24rpx;
-		width: 40rpx;
-		height: 40rpx;
-		vertical-align: bottom;
-	}
-
-	.nav {
-		position: absolute;
-		top: 144rpx;
-		width: 718rpx;
-		height: 236rpx;
-		margin-left: 18rpx;
-		background-color: rgba(255, 255, 255, 1);
-		border-radius: 28rpx 28rpx 0rpx 0rpx;
-	}
-
-	.nav image {
-		display: block;
-		width: 48rpx;
-		height: 48rpx;
-		margin: 64rpx auto;
-		font-size: 48rpx;
-	}
-
-	.nav view {
-		position: absolute;
-		left: 308rpx;
-		top: 136rpx;
-		font-size: 24rpx;
-	}
-
-	.nav navigator {
-		width: 108rpx;
-		height: 120rpx;
-		margin-top: 64rpx;
-		margin-left: 304rpx;
-	}
-
-	.content {
-		margin-top: 30rpx;
-		height: 1200rpx;
-		background-color: rgba(255, 255, 255, 1);
-	}
-
-	.point {
-		height: 14rpx;
-		background-color: rgba(229, 229, 229, 0.62);
-	}
-
-	.list-text {
-		margin-top: 30rpx;
-		font-size: 24rpx;
-		text-align: center;
-		color: rgba(80, 80, 80, 0.27);
-	}
-
-	.content-list {
-		position: relative;
-		margin-top: 22rpx;
-		padding-left: 20rpx;
-		height: 250rpx;
-		border-radius: 28rpx 28rpx 0rpx 0rpx;
-		font-size: 24rpx;
-		background-color: rgba(229, 229, 229, 0.62);
-	}
-
-	.num {
-		float: left;
-		margin-left: 14rpx;
-		margin-top: 18rpx;
-		font-weight: 700;
-		color: rgba(42, 130, 228, 1);
-	}
-
-	.list {
-		float: left;
-		margin-left: -280rpx;
-		margin-top: 64rpx;
-	}
-
-	.content-list .agreeIt {
-		position: absolute;
-		bottom: 20rpx;
-		right: 42rpx;
-		line-height: 50rpx;
-		width: 152rpx;
-		height: 50rpx;
-		background-color: rgba(42, 130, 228, 1);
-		color: white;
-		font-size: 24rpx;
-		border-radius: 28rpx;
-	}
-	.agreeIt2{
-		position: absolute;
-		bottom: 20rpx;
-		right: 42rpx;
-		line-height: 50rpx;
-		width: 122rpx;
-		height: 50rpx;
-		background-color: rgba(42, 130, 228, 1);
-		color: white;
-		font-size: 24rpx;
-		border-radius: 28rpx;
-	}
-
-	.content-list .refuse {
-		position: absolute;
-		bottom: 20rpx;
-		right: 190rpx;
-		line-height: 50rpx;
-		width: 122rpx;
-		height: 50rpx;
-		background-color: rgba(42, 130, 228, 1);
-		color: white;
-		font-size: 24rpx;
-		border-radius: 28rpx;
-	}
-
-	.isOver {
-		width: 100%;
-		height: 100rpx;
-		line-height: 100rpx;
-		text-align: center;
-		font-size: 24rpx;
-		color: rgba(80, 80, 80, 0.27);
-	}
-
-	#dialog {
-		position: absolute;
-		top: 0;
-		right: 0;
-		bottom: 0;
-		left: 0;
-		width: 80%;
-		height: 25%;
-		margin: auto;
-		border-radius: 16rpx;
-		text-align: center;
-		background-color: white;
-	}
-
-	.uni-textarea {
-		margin-top: 70rpx;
-		color: rgba(80, 80, 80, 1);
-	}
-
-	.box {
-		position: fixed;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 100%;
-		background: rgba(0, 0, 0, 0.3);
-	}
-
-	.replace {
-		margin-top: 4%;
-		font-size: 28rpx;
-		color: #4CD964;
-	}
-
-	.cancle {
-		position: absolute;
-		top: 78%;
-		width: 50%;
-		height: 22%;
-		border: 2rpx solid rgba(229, 229, 229, 0.62);
-		border-radius: 0 0 0 16rpx;
-		line-height: 2.7;
-		background-color: white;
-	}
-
-	.agree {
-		position: absolute;
-		right: 0;
-		top: 78%;
-		width: 50%;
-		height: 22%;
-		border-radius: 0 0 16rpx 0;
-		border: 2rpx solid rgba(229, 229, 229, 0.62);
-		line-height: 2.7;
-		background-color: white;
-	}
-
-	.newList {
-		float: right;
-		margin-top: 20rpx;
-		margin-right: 32rpx;
-		color: rgba(255, 141, 26, 1);
-	}
-
-	.readyList {
-		float: right;
-		margin-top: 20rpx;
-		margin-right: 4rpx;
-		color: rgba(212, 48, 48, 1);
-	}
-
-	.waitList {
-		float: right;
-		margin-top: 20rpx;
-		margin-right: 4rpx;
-		color: orange;
-	}
-
-	.finishList {
-		float: right;
-		margin-top: 20rpx;
-		margin-right: 4rpx;
-		color: blue;
-	}
-
-	.refuseList {
-		float: right;
-		margin-top: 20rpx;
-		margin-right: 4rpx;
-		color: rgba(212, 48, 48, 1);
-	}
-
-	.popup_view {
-		box-sizing: border-box;
-		width: 600rpx;
-		height: 840rpx;
-		padding: 50rpx;
-
-		image {
-			width: 100%;
-			height: 100%;
-		}
-
-		.popup_title {
-			font-size: 20px;
-		}
-
-		.popup_item {
-			margin: 20rpx 0;
-		}
-
-		.popup_img {
-			display: flex;
-			image {
-				margin: 0 6rpx;
-				width: 100rpx;
-				height: 200rpx;
-				background-color: #eee;
-			}
-		}
-	}
-</style>

+ 0 - 710
pages/list/list.vue

@@ -1,710 +0,0 @@
-<template>
-	<view class="list_body">
-		<view class="box" v-if="showPicker"> </view>
-		<mx-date-picker :show="showPicker" :type="type" :value="timeValue" :show-tips="true" :begin-text="'开始'"
-			:end-text="'截至'" :show-seconds="true" @confirm="onSelected" @cancel="onSelected" />
-		<view class="head">
-			<text>报修信息表<image src="../../static/pen.svg" mode=""></image></text>
-		</view>
-		<form @submit="formSubmit" @reset="formReset">
-			<view class="content">
-
-				<!-- 故障类型 -->
-				<view class="headline-1">
-					<text class="uni-list-cell-left"><text>*</text>故障类型:</text>
-					<picker @change="bindPickerChange($event,List)" :value="index" :range="List"
-						:range-key="'faultName'">
-						<view class="uni-list-cell">
-							<view class="uni-list-cell-db">
-								<template v-if="List!=null" v-model="index">
-									<view class="uni-input-1">
-										{{pickerData.faultName == undefined?'':pickerData.faultName}}
-										<image src="../../static/down.svg" mode=""></image>
-									</view>
-								</template>
-							</view>
-						</view>
-					</picker>
-				</view>
-
-				<!-- 宿舍楼栋 -->
-				<view class="headline-2">
-					<text class="uni-list-cell-left-2"><text>*</text>宿舍楼栋:</text>
-					<view class="uni-list-cell">
-						<picker class="uni-input-1" mode="multiSelector" :value="roomIndex" :range="room_List"
-							@change="bindPickerChange_room" @columnchange="handleNum">
-
-							<view class="uni-input" v-if="dormNumber">
-								{{dormNumber}}
-							</view>
-						</picker>
-						<image src="../../static/down.svg" class="uni-list-cell_image"></image>
-					</view>
-
-				</view>
-
-				<!-- 预期时间 -->
-				<view class="headline-2">
-					<text class="uni-list-cell-left-2"><text>*</text>预约时间:</text>
-					<view style="line-height: 35px;" @click="onShowDatePicker('datetime')" class="uni-list-cell-db-2">
-						<text style="margin-left: 10px;">{{timeValue}}</text>
-					</view>
-					<image src="../../static/down.svg" mode="" class="timeimg"></image>
-				</view>
-
-				<!-- 联系电话 -->
-				<view class="headline-2">
-					<text class="uni-list-cell-left-2"><text>*</text>联系电话:</text>
-					<view class="uni-list-cell-db-2">
-						<input type="number" maxlength=11 class="uni-input-2" v-model="formData.phone" />
-					</view>
-				</view>
-
-				<!-- 备选电话 -->
-				<view class="headline-2">
-					<text class="uni-list-cell-left-2">备选电话:</text>
-					<view class="uni-list-cell-db-2">
-						<input class="uni-input-2" type="number" maxlength=11 v-model="formData.inputphone" />
-					</view>
-				</view>
-
-				<!-- 照片 -->
-				<view class="photo">
-					<view class="photo-title">拍摄故障照片:</view>
-					<view class="upload-image-view">
-						<uni-file-picker limit="3" title="最多上传3张图片" :value="imageValue" fileMediatype="image"
-							:image-styles="imageStyles" mode="grid" @select="select" @delete="handleDelete">
-						</uni-file-picker>
-					</view>
-				</view>
-
-				<!-- 备注 -->
-				<view class="os-headline-2">
-					<text class="os-list-cell-left-2">备注:</text>
-					<view class="os-list-cell-db-2">
-						<input class="os-input-2" type="text" maxlength=50 v-model="formData.os" />
-					</view>
-				</view>
-				<button type="default" class="up" @click="getList">
-					立即提交
-				</button>
-			</view>
-		</form>
-	</view>
-
-</template>
-
-<script>
-	import * as TranslateImage from '../../util/imageZip.js'
-	import "../../static/upload-imgs.css"
-	import MxDatePicker from "../../util/mx-datepicker/mx-datepicker"
-	export default {
-		components: {
-			MxDatePicker
-		},
-		data() {
-			return {
-				imageStyles: {
-					width: 75,
-					height: 75,
-					border: {
-						color: "#ccc",
-						width: 1,
-						style: 'dashed',
-						radius: '5px'
-					}
-				},
-				imageList: [], //保存图片路径集合
-				List: [],
-				index: '',
-				faultName: null,
-				pickerData: '',
-				buildId: 1,
-				floorId: 1,
-				roomId: 1,
-				formData: {
-					phone: '',
-					inputphone: '',
-					os: ''
-				},
-				showPicker: false,
-				datetime: '',
-				rangetime: '',
-				type: 'rangetime',
-				timeValue: '',
-				imgs: null,
-				imageValue: [],
-				ceshiData1: [],
-				Timer: null,
-				room_List: [
-					[],
-					[],
-					[]
-				],
-				roomIndex: null,
-				IdList: [],
-				IdList2: [],
-				count: 0,
-				count2: 0,
-				dormNumber: null
-			}
-		},
-		onLoad() {
-			this.getStudentInformation()
-			this.getTime()
-			this.getfault()
-			this.getbuild()
-			this.getbuildHigh()
-			this.getrooms()
-		},
-
-		methods: {
-			// 获取学生数据
-			getStudentInformation() {
-				let res = uni.getStorageSync('student')
-				// console.log(res)
-				if (res) {
-					this.formData.phone = res.studentPhone
-					this.formData.inputphone = res.studentOtherPhone
-					this.dormNumber = res.dormNumber
-				}
-			},
-
-			// 初始化时间
-			getTime() {
-				let date = new Date(),
-					year = date.getFullYear(),
-					month = date.getMonth() + 1,
-					day = date.getDate(),
-					hour = date.getHours() < 10 ? "0" + date.getHours() : date.getHours(),
-					minute = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes(),
-					second = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds();
-				month >= 1 && month <= 9 ? (month = "0" + month) : "";
-				day >= 0 && day <= 9 ? (day = "0" + day) : "";
-				let timer = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second;
-				this.datetime = timer
-			},
-
-			// 获取故障类型信息
-			async getfault() {
-				let res = await this.$myRequest({
-					method: "post",
-					url: `/fault/queryAllFaultByStatus`,
-				})
-				// console.log(res)
-				this.$nextTick(() => {
-					this.List = res.data;
-				})
-			},
-
-			// 获取宿舍楼栋数据
-			async getbuild() {
-				let res = await this.$myRequest({
-					method: "post",
-					url: `/build/queryAllBuild`,
-				})
-				// console.log(res)
-				let tempList = []
-				res.data.forEach(item => {
-					tempList.push(item.buildName)
-				})
-				this.$nextTick(() => {
-					this.$set(this.room_List, 0, tempList)
-				})
-			},
-
-			// 获取宿舍楼层数据
-			async getbuildHigh() {
-				let res = await this.$myRequest({
-					method: "post",
-					url: `/build/queryAllFloorByBuildID?buildId=${this.buildId}`,
-				})
-				// console.log(res)
-				this.room_List[1] = []
-				this.room_List[2] = []
-				this.IdList = []
-				let tempList = []
-				res.data.forEach(item => {
-					tempList.push(item.floorName)
-					this.IdList.push(item.floorId)
-				})
-				this.$nextTick(() => {
-					this.$set(this.room_List, 1, tempList)
-					this.floorId = this.IdList[this.count]
-				})
-			},
-
-			// 获取宿舍房间数据
-			async getrooms() {
-				let res = await this.$myRequest({
-					method: "post",
-					url: `/build/queryAllRoomByFloorID?floorId=${this.floorId}`,
-				})
-				// console.log(res)
-				this.room_List[2] = []
-				this.IdList2 = []
-				let tempList = []
-				res.data.forEach(item => {
-					tempList.push(item.roomName)
-					this.IdList2.push(item.roomId)
-				})
-				this.$nextTick(() => {
-					this.$set(this.room_List, 2, tempList)
-					this.roomId = this.IdList2[this.count2]
-				})
-			},
-
-			// 时间选择框
-			onShowDatePicker(type) {
-				this.type = type;
-				this.showPicker = true;
-				this.timeValue = this[type];
-			},
-
-			// 时间选择框点击回调
-			onSelected(e) {
-				this.showPicker = false;
-				if (e) {
-					this[this.type] = e.value;
-					this.timeValue = e.value;
-				}
-			},
-
-			//故障选择
-			bindPickerChange(e, storage) {
-				this.index = e.target.value
-				this.pickerData = storage[this.index] // 这里就是选中的对象
-			},
-
-			// 提交订单
-			getList() {
-				// 处理图片参数数据
-				this.imgs = this.ceshiData1.join(';')
-				// 电话验证规则
-				let phoneVer = /^[1][3,4,5,7,8,9][0-9]{9}$/
-				// 简单校验
-				if (this.pickerData.faultId == null) {
-					uni.showToast({
-						icon: 'none',
-						title: '请选择故障类型',
-						duration: 2000
-					})
-					return
-				}
-				if (this.dormNumber == null) {
-					uni.showToast({
-						icon: 'none',
-						title: '请选择楼栋和宿舍号',
-						duration: 2000
-					})
-					return
-				}
-
-				if (!this.timeValue) {
-					uni.showToast({
-						icon: 'none',
-						title: '请选择预期时间',
-						duration: 2000
-					})
-					return
-				}
-
-				if (!this.formData.phone) {
-					uni.showToast({
-						title: "请输入联系电话",
-						icon: 'none'
-					})
-					return
-				} else if (!phoneVer.test(this.formData.phone)) {
-					uni.showToast({
-						title: "请输入正确的联系电话",
-						icon: 'none'
-					})
-					return
-				}
-
-				uni.showLoading({
-					title: '提交中'
-				});
-
-				if (this.Timer != null) {
-					clearTimeout(this.Timer);
-				}
-				this.Timer = setTimeout(async () => {
-					let res = await this.$myRequest({
-						method: "post",
-						url: `/order/insertOrder`,
-						data: {
-							faultId: String(this.pickerData.faultId),
-							dormNumber: this.dormNumber,
-							orderExpectedTime: this.timeValue,
-							studentDormitory: this.buildId + '-' + this.floorId + '-' + this.roomId,
-							orderImages: this.imgs,
-							orderNote: this.formData.os,
-							studentPhone: this.formData.phone,
-							otherPhone: this.formData.inputphone
-						},
-					})
-					// console.log(res)
-					if (res.status == 200) {
-						uni.showToast({
-							title: '提交成功',
-						});
-						uni.reLaunch({
-							url: '/pages/index/index'
-						})
-					} else {
-						uni.showToast({
-							title: '提交失败',
-							icon: 'error',
-						});
-					}
-				}, 1500)
-			},
-
-			// 选择图片压缩并上传
-			select(e) {
-				// console.log('选择文件:', e)
-				e.tempFiles.forEach((item) => {
-					TranslateImage.translate(item.path, ((res) => {
-						if (Number(res.size) > 1000000) {
-							uni.showModal({
-								content: `图片过大,请重新上传`,
-								showCancel: false,
-								success() {}
-							})
-							return
-						}
-						uni.showLoading({
-							title: '上传中'
-						});
-						uni.uploadFile({
-							url: `/baoxiu/repairApi/order/uploadImage`,
-							filePath: res.url,
-							name: 'orderImages',
-							success: (uploadFileRes) => {
-								this.ceshiData1.push((JSON.parse(uploadFileRes.data).data))
-								const path = item.path;
-								this.imageValue.push({
-									url: path,
-									name: ""
-								})
-								uni.hideLoading();
-							},
-							fail: () => {
-								uni.hideLoading();
-							}
-						});
-					}))
-				})
-			},
-
-			// 删除图片回调
-			handleDelete(e) {
-				const num = this.imageValue.findIndex(v => v.path === e.tempFilePath);
-				this.imageValue.splice(num, 1);
-				this.ceshiData1.splice(num, 1);
-			},
-
-			// 三级联动下拉框回调
-			bindPickerChange_room(e) {
-				// console.log('picker发送选择改变,携带值为', e.detail.value)
-				this.roomIndex = e.detail.value
-				this.dormNumber = this.room_List[0][this.roomIndex[0]] + this.room_List[1][this.roomIndex[1]] + this
-					.room_List[2][this.roomIndex[2]]
-				// console.log(this.buildId + '-' + this.floorId + '-' + this.roomId)
-			},
-
-			// 三级联动下拉框拖动回调
-			handleNum(e) {
-				// console.log("第"+(e.detail.column+1)+"列"+"第"+(e.detail.value+1)+"行" )
-				if (e.detail.column == 0) {
-					// console.log("楼栋发生变化,当前为"+(e.detail.value+1)+"栋")
-					if (e.detail.value < 4) {
-						this.buildId = e.detail.value + 1
-					} else {
-						this.buildId = e.detail.value + 5
-					}
-					// console.log(this.buildId + '-' + this.floorId + '-' + this.roomId)
-				} else if (e.detail.column == 1) {
-					// console.log("层数发生变化,当前为"+(e.detail.value+1)+"层")
-					this.floorId = this.IdList[e.detail.value]
-					this.count = e.detail.value
-					// console.log(this.buildId + '-' + this.floorId + '-' + this.roomId)
-				} else {
-					// console.log("房间数发生变化,当前为"+(e.detail.value+1)+"号")
-					this.roomId = this.IdList2[e.detail.value]
-					this.count2 = e.detail.value
-					// console.log(this.buildId + '-' + this.floorId + '-' + this.roomId)
-				}
-			}
-
-		},
-
-		// 监听属性
-		watch: {
-			buildId: {
-				handler() {
-					this.getbuildHigh()
-				},
-			},
-			floorId: {
-				handler() {
-					this.getrooms()
-				},
-			},
-		},
-	}
-</script>
-
-<style lang="scss">
-	.list_body {
-		width: 100%;
-		overflow: hidden;
-	}
-
-	.box {
-		position: fixed;
-		top: 0;
-		left: 0;
-		width: 100%;
-		height: 100%;
-		background: rgba(0, 0, 0, 0.3);
-		z-index: 99;
-	}
-
-	.test {
-		text-align: center;
-		padding: 20rpx 0;
-	}
-
-	button {
-		margin: 20rpx;
-		font-size: 28rpx;
-	}
-
-	.head {
-		height: 262rpx;
-		font-size: 30rpx;
-		color: white;
-		border-radius: 0rpx 0rpx 30rpx 30rpx;
-		background-color: rgba(42, 130, 228, 1);
-	}
-
-	.head text {
-		float: left;
-		margin-left: 290rpx;
-		margin-top: 24rpx;
-	}
-
-	.head image {
-		height: 34rpx;
-		width: 34rpx;
-		font-size: 34rpx;
-		vertical-align: bottom;
-	}
-
-	.headline-1 {
-		font-size: 24rpx;
-	}
-
-	.headline-2 {
-		font-size: 24rpx;
-	}
-
-	.content {
-		position: relative;
-		width: 720rpx;
-		height: 1260rpx;
-		margin-top: -162rpx;
-		margin-left: 14rpx;
-		border: 2rpx solid rgba(128, 128, 128, 0.45);
-		background-color: rgba(255, 255, 255, 1);
-	}
-
-	.uni-list-cell {
-		float: right;
-		width: 484rpx;
-		height: 70rpx;
-		margin-top: 36rpx;
-		margin-right: 64rpx;
-		border-radius: 32rpx;
-		line-height: 44rpx;
-		background-color: rgba(166, 166, 166, 0.18);
-	}
-
-	.uni-list-cell_image {
-		float: right;
-		margin-right: 10rpx;
-		margin-top: -40rpx;
-		width: 40rpx;
-		height: 40rpx;
-		font-size: 40rpx;
-	}
-
-	.uni-input-1 {
-		margin-left: 20rpx;
-		margin-top: 10rpx;
-		height: 50rpx;
-	}
-
-	.uni-input-1 image {
-		float: right;
-		margin-right: 10rpx;
-		width: 40rpx;
-		height: 40rpx;
-		font-size: 40rpx;
-	}
-
-	.uni-list-cell-left {
-		float: left;
-		margin-top: 48rpx;
-		margin-left: 26rpx;
-
-		text {
-			color: red;
-		}
-	}
-
-	.uni-list-cell-left-2 {
-		float: left;
-		margin-left: 30rpx;
-		margin-top: 76rpx;
-
-		text {
-			color: red;
-		}
-	}
-
-	.uni-list-cell-db-2 {
-		float: right;
-		margin-right: 64rpx;
-		margin-top: 36rpx;
-		width: 484rpx;
-		height: 70rpx;
-		border-radius: 32rpx;
-		background-color: rgba(166, 166, 166, 0.18);
-	}
-
-	.uni-input-2 {
-		margin-left: 20rpx;
-		margin-top: 16rpx;
-		font-size: 24rpx;
-	}
-
-	.uni-input-2 image {
-		float: right;
-		margin-right: 10rpx;
-		width: 40rpx;
-		height: 40rpx;
-		font-size: 40rpx;
-	}
-
-	.timeimg {
-		position: absolute;
-		right: 72rpx;
-		top: 262rpx;
-		width: 40rpx;
-		height: 40rpx;
-		font-size: 40rpx;
-	}
-
-	.photo {
-		height: 340rpx;
-		font-size: 24rpx;
-	}
-
-	.photo-title {
-		float: left;
-		margin-left: 26rpx;
-		margin-top: 30rpx;
-	}
-
-	.upload-image-view {
-		/* height: 300px; */
-	}
-
-	.image {
-		float: left;
-		margin-left: 26rpx;
-		margin-top: 30rpx;
-		height: 396rpx;
-		width: 644rpx;
-		box-sizing: border-box;
-		border-radius: 28rpx;
-		background-color: rgba(166, 166, 166, 0.18);
-	}
-
-	.imageText {
-		text-align: center;
-		border-radius: 28rpx;
-		width: 100%;
-		height: 100%;
-		background-color: rgba(166, 166, 166, 0.18);
-	}
-
-	.imgSrc image {
-		width: 646rPX;
-		height: 386rpx;
-	}
-
-	.os-headline-2 {
-		float: left;
-	}
-
-	.os-list-cell-left-2 {
-		float: left;
-		margin-left: 26rpx;
-		margin-top: 236rpx;
-		font-size: 24rpx;
-	}
-
-	.os-input-2 {
-		margin-left: 10rpx;
-		margin-top: 12rpx;
-		font-size: 24rpx;
-		line-height: 100%;
-	}
-
-	.os-list-cell-db-2 {
-		float: right;
-		width: 568rpx;
-		height: 60rpx;
-		margin-right: 30rpx;
-		margin-top: 224rpx;
-		border-radius: 28rpx;
-		background-color: rgba(166, 166, 166, 0.18);
-	}
-
-	.up {
-		position: absolute;
-		bottom: 212rpx;
-		left: 20rpx;
-		line-height: 72rpx;
-		width: 323px;
-		height: 36px;
-		background-color: rgba(42, 130, 228, 1);
-		color: white;
-		font-size: 12px;
-		border-radius: 14px;
-	}
-
-	.example-body {
-		padding: 10px;
-		padding-top: 0;
-	}
-
-	.custom-image-box {
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: row;
-		justify-content: space-between;
-		align-items: center;
-	}
-
-	.text {
-		font-size: 14px;
-		color: #333;
-	}
-</style>

+ 85 - 0
pages/login-filter/index.vue

@@ -0,0 +1,85 @@
+<template>
+  <view>
+    <!-- 登陆拦截页面 -->
+  </view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {}
+  },
+
+  onLoad() {
+    // let identity = uni.getStorageSync("identity");
+    // let updataMsg = uni.getStorageSync("updataMsg");
+    console.log('dgfskjdblail验证')
+    this.loginFilter() //获取token
+  },
+  methods: {
+    //获取token
+    loginFilter() {
+      let cardNumber = this.getQueryString('cardNumber')
+      let error = this.getQueryString('error')
+      let errorMsg = this.getQueryString('errorMsg')
+      //此为微校授权地址
+      let weixinUrl = `https://open.wecard.qq.com/connect/oauth/authorize?app_key=EE28EE2C93296F4E&response_type=code&scope=snsapi_base&ocode=1015730314&redirect_uri=https://jtishfw.ncjti.edu.cn/baoxiu/repairApi/wx/getCardNumber&state=STATE`
+      if (error) {
+        //微校服务器报错提示框
+        uni.showToast({
+          title: errorMsg,
+          icon: 'error',
+          mask: true,
+          duration: 1000,
+        })
+      } else if (!cardNumber) {
+        window.location.href = weixinUrl
+      } else {
+        uni.setStorageSync('token', cardNumber)
+        uni.setStorageSync('identity', JSON.stringify(0)) //身份标识
+        this.getDetailMess() //获取学生详细信息
+      }
+    },
+
+    //获取当前URL指定参数
+    getQueryString(name) {
+      let url = window.location.href // 获取URL
+
+      let pattern = new RegExp('[?&]' + name + '=([^&]+)', 'i') // 正则匹配URL
+
+      let matcher = pattern.exec(url)
+
+      if (matcher == null || matcher.length < 1) {
+        return false
+      }
+      return decodeURIComponent(matcher[1]) // 输出指定的参数值中文也可以
+    },
+
+    //换取详情信息
+    async getDetailMess() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/student/queryByStudentId`,
+      })
+      // console.log(res)
+      if (res.status == 200) {
+        uni.setStorageSync('student', res.data)
+        let updataMsg = uni.getStorageSync('updataMsg')
+        if (updataMsg) {
+          console.log('主页')
+          uni.reLaunch({
+            url: '../home/home',
+          })
+        } else {
+          console.log('信息页')
+          uni.reLaunch({
+            url: '../personal-information/personal-information',
+          })
+        }
+      }
+    },
+  },
+}
+</script>
+
+<style lang="scss"></style>

+ 144 - 0
pages/login/index.vue

@@ -0,0 +1,144 @@
+<template>
+  <view>
+    <view class="head"></view>
+    <view class="content flex column items-center">
+      <view class="title">账号登录</view>
+      <!-- <view class="headline-2"> -->
+      <view class="flex items-center justify-between uni-list-cell-db-2">
+        <!-- <text class="uni-list-cell-left-2">账号:</text> -->
+        <span>账号:</span>
+        <!-- <view class="uni-list-cell-db-2"> -->
+        <u--input class="flex items-center" placeholder="请输入手机号" v-model="phone" required />
+        <!-- </view> -->
+      </view>
+
+      <view class="flex items-center justify-between uni-list-cell-db-2">
+        <span>密码:</span>
+        <u--input class="flex items-center" placeholder="请输入密码" v-model="password" required />
+      </view>
+
+      <button
+        type="default"
+        @click="bindLogin"
+        style="
+          width: 273px;
+          height: 33px;
+          background-color: rgba(42, 130, 228, 1);
+          color: white;
+          font-size: 15px;
+          border-radius: 14px;
+        "
+      >
+        登录
+      </button>
+    </view>
+  </view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      phone: '',
+      password: '',
+    }
+  },
+  methods: {
+    async bindLogin() {
+      if (this.phone && this.password) {
+        uni.showLoading({
+          title: '登录中',
+        })
+        let res = await this.$myRequest({
+          method: 'post',
+          url: `/login/loginWork?phone=${this.phone}&password=${this.password}`,
+        })
+        // console.log(res)
+        if (res.status == 200) {
+          uni.setStorageSync('token', res.data)
+          uni.setStorageSync('identity', JSON.stringify(1)) //身份标识
+          uni.reLaunch({
+            url: '../repair-center/index',
+          })
+        } else {
+          uni.showToast({
+            icon: 'error',
+            title: '登录失败',
+          })
+        }
+      } else {
+        uni.showToast({
+          title: '请输入账号密码',
+          icon: 'none',
+        })
+      }
+    },
+  },
+}
+</script>
+
+<style lang="scss">
+.head {
+  height: 300rpx;
+  border-radius: 0px 0px 10px 10px;
+  background-color: rgba(42, 130, 228, 1);
+}
+
+.content {
+  position: fixed;
+  top: 120rpx;
+  left: 50%;
+  width: 720rpx;
+  height: 568rpx;
+  background-color: white;
+  border: 1px solid rgba(128, 128, 128, 0.45);
+  transform: translateX(-360rpx);
+}
+
+.title {
+  font-size: 36rpx;
+  font-weight: 700;
+  margin-top: 18rpx;
+  text-align: center;
+}
+
+.uni-list-cell-left-2 {
+  float: left;
+  margin-top: 80rpx;
+  margin-left: 26rpx;
+}
+
+.uni-list-cell-db-2 {
+  //   float: right;
+  //   margin-right: 34rpx;
+  //   margin-top: 70rpx;
+  width: 540rpx;
+  height: 70rpx;
+  padding: 0rpx 20rpx;
+  margin: 20rpx 0px;
+  border-radius: 28rpx;
+  background-color: rgba(166, 166, 166, 0.18);
+}
+
+.uni-input-2 {
+  //   margin-left: 20rpx;
+  //   margin-top: 20rpx;
+  font-size: 28rpx;
+  cursor: not-allowed;
+}
+
+.uni-input-placeholder {
+  text-align: center;
+}
+.u-input {
+  border: none;
+}
+
+button {
+  //   position: absolute;
+  //   bottom: 72rpx;
+  //   left: 140rpx;
+  margin-top: 60rpx;
+  line-height: 66rpx;
+}
+</style>

+ 0 - 129
pages/login/login.vue

@@ -1,129 +0,0 @@
-<template>
-	<view>
-		<view class="head">
-		</view>
-		<view class="content">
-			<view class="logo">
-				账号登录
-			</view>
-			<view class="headline-2">
-				<text class="uni-list-cell-left-2">账号:</text>
-				<view class="uni-list-cell-db-2">
-					<input class="uni-input-2" placeholder="请输入手机号" v-model="phone" required />
-				</view>
-			</view>
-
-			<view class="headline-2">
-				<text class="uni-list-cell-left-2">密码:</text>
-				<view class="uni-list-cell-db-2">
-					<input class="uni-input-2" placeholder="请输入密码" v-model="password" required />
-				</view>
-			</view>
-
-			<button type="default" @click="bindLogin"
-				style="width: 273px; height: 33px; background-color:rgba(42, 130, 228, 1); color: white;font-size: 15px; border-radius: 14px;">登录</button>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				phone: "",
-				password: "",
-			};
-		},
-		methods: {
-			async bindLogin() {
-				if (this.phone && this.password) {
-					uni.showLoading({
-						title: "登录中"
-					})
-					let res = await this.$myRequest({
-						method: "post",
-						url: `/login/loginWork?phone=${this.phone}&password=${this.password}`,
-					})
-					// console.log(res)
-					if (res.status == 200) {
-						uni.setStorageSync('token', res.data);
-						uni.setStorageSync('identity', JSON.stringify(1)); //身份标识
-						uni.reLaunch({
-							url: '../list-center/list-center'
-						})
-					} else {
-						uni.showToast({
-							icon: 'error',
-							title: '登录失败'
-						});
-					}
-				} else {
-					uni.showToast({
-						title: "请输入账号密码",
-						icon: "none"
-					})
-				}
-			}
-		},
-	}
-</script>
-
-<style>
-	.head {
-		position: relative;
-		height: 300rpx;
-		border-radius: 0px 0px 10px 10px;
-		background-color: rgba(42, 130, 228, 1);
-	}
-
-	.content {
-		position: absolute;
-		top: 120rpx;
-		left: 14rpx;
-		width: 720rpx;
-		height: 568rpx;
-		background-color: white;
-		border: 1px solid rgba(128, 128, 128, 0.45);
-	}
-
-	.logo {
-		font-size: 36rpx;
-		font-weight: 700;
-		margin-top: 18rpx;
-		text-align: center;
-	}
-
-	.uni-list-cell-left-2 {
-		float: left;
-		margin-top: 80rpx;
-		margin-left: 26rpx;
-	}
-
-	.uni-list-cell-db-2 {
-		float: right;
-		margin-right: 34rpx;
-		margin-top: 70rpx;
-		width: 540rpx;
-		height: 70rpx;
-		border-radius: 28rpx;
-		background-color: rgba(166, 166, 166, 0.18);
-	}
-
-	.uni-input-2 {
-		margin-left: 20rpx;
-		margin-top: 20rpx;
-		font-size: 24rpx;
-		cursor: not-allowed;
-	}
-
-	.uni-input-placeholder {
-		text-align: center;
-	}
-
-	button {
-		position: absolute;
-		bottom: 72rpx;
-		left: 140rpx;
-		line-height: 66rpx;
-	}
-</style>

+ 0 - 86
pages/loginFilter/LoginFilter.vue

@@ -1,86 +0,0 @@
-<template>
-	<view>
-		<!-- 登陆拦截页面 -->
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-			};
-		},
-
-		onLoad() {
-			// let identity = uni.getStorageSync("identity");
-			// let updataMsg = uni.getStorageSync("updataMsg");
-			this.loginFilter(); //获取token
-		},
-		methods: {
-			//获取token
-			loginFilter() {
-				let cardNumber = this.getQueryString("cardNumber");
-				let error = this.getQueryString("error");
-				let errorMsg = this.getQueryString("errorMsg");
-				//此为微校授权地址
-				let weixinUrl =
-					`https://open.wecard.qq.com/connect/oauth/authorize?app_key=EE28EE2C93296F4E&response_type=code&scope=snsapi_base&ocode=1015730314&redirect_uri=https://jtishfw.ncjti.edu.cn/baoxiu/repairApi/wx/getCardNumber&state=STATE`;
-				if (error) {
-					//微校服务器报错提示框
-					uni.showToast({
-						title: errorMsg,
-						icon: "error",
-						mask: true,
-						duration: 1000,
-					});
-				} else if (!cardNumber) {
-					window.location.href = weixinUrl;
-				} else {
-					uni.setStorageSync('token', cardNumber);
-					uni.setStorageSync('identity', JSON.stringify(0)); //身份标识
-					this.getDetailMess(); //获取学生详细信息
-				}
-			},
-			
-			//获取当前URL指定参数
-			getQueryString(name) {
-				let url = window.location.href; // 获取URL
-
-				let pattern = new RegExp("[?&]" + name + "=([^&]+)", "i"); // 正则匹配URL
-
-				let matcher = pattern.exec(url);
-
-				if (matcher == null || matcher.length < 1) {
-					return false;
-				}
-				return decodeURIComponent(matcher[1]); // 输出指定的参数值中文也可以
-			},
-
-			//换取详情信息
-			async getDetailMess() {
-				let res = await this.$myRequest({
-					method: "post",
-					url: `/student/queryByStudentId`,
-				})
-				// console.log(res)
-				if (res.status == 200) {
-					uni.setStorageSync('student', res.data);
-					let updataMsg = uni.getStorageSync('updataMsg');
-					if (updataMsg) {
-						console.log("主页")
-						uni.reLaunch({
-							url: '../index/index'
-						})
-					} else {
-						console.log("信息页")
-						uni.reLaunch({
-							url: '../personal-information/personal-information'
-						})
-					}
-				}
-			}
-		}
-	}
-</script>
-
-<style lang="scss"></style>

+ 446 - 0
pages/personal-information/index.vue

@@ -0,0 +1,446 @@
+<template>
+  <view class="bodyContent">
+    <form bindsubmit="handleSubmit">
+      <view class="uni-list">
+        <view class="uni-list-cell">
+          <view class="uni-list-cell-left">
+            <text>*</text>
+            姓名
+          </view>
+          <view class="uni-list-cell-db">
+            <u--input class="uni-input" v-model="name" placeholder="请输入姓名"></u--input>
+          </view>
+        </view>
+      </view>
+
+      <view class="uni-list">
+        <view class="uni-list-cell">
+          <view class="uni-list-cell-left">
+            <text>*</text>
+            性别
+          </view>
+          <view class="uni-list-cell-db">
+            <view class="radio">
+              <radio-group @change="radioChange">
+                <label style="margin-right: 30px">
+                  <radio value="0" :checked="men" />
+                  男
+                </label>
+                <label>
+                  <radio value="1" :checked="women" />
+                  女
+                </label>
+              </radio-group>
+            </view>
+          </view>
+        </view>
+      </view>
+
+      <view class="uni-list">
+        <view class="uni-list-cell">
+          <view class="uni-list-cell-left">
+            <text>*</text>
+            班级
+          </view>
+          <view class="uni-list-cell-db">
+            <u--input class="uni-input" v-model="studentClazz" placeholder="请输入班级"></u--input>
+          </view>
+        </view>
+      </view>
+      <view class="uni-list">
+        <view class="uni-list-cell">
+          <view class="uni-list-cell-left">
+            <text>*</text>
+            手机号
+          </view>
+          <view class="uni-list-cell-db">
+            <u--input class="uni-input" maxlength="11" v-model="studentPhone" placeholder="请输入手机号"></u--input>
+          </view>
+        </view>
+      </view>
+
+      <view class="uni-list">
+        <view class="uni-list-cell">
+          <view class="uni-list-cell-left">
+            <text>*</text>
+            备选手机号
+          </view>
+          <view class="uni-list-cell-db">
+            <u--input
+              class="uni-input"
+              maxlength="11"
+              v-model="studentOtherPhone"
+              placeholder="请输入备选手机号"
+            ></u--input>
+          </view>
+        </view>
+      </view>
+
+      <view class="uni-list">
+        <view class="cuni-list-cell">
+          <view class="uni-list-cell-left">
+            <text>*</text>
+            学生宿舍
+          </view>
+          <view class="uni-list-cell-db">
+            <picker
+              class="uni-input-1"
+              mode="multiSelector"
+              :value="roomIndex"
+              :range="room_List"
+              @change="bindPickerChange_room"
+              @columnchange="handleNum"
+            >
+              <view class="uni-input2" v-if="dormNumber">
+                {{ dormNumber }}
+              </view>
+              <view class="uni-input2" style="color: #c0c4cc" v-else>请选择学生宿舍</view>
+            </picker>
+          </view>
+        </view>
+      </view>
+
+      <view class="uni-list">
+        <view class="uni-list-cell">
+          <view class="uni-list-cell-left">
+            <text>*</text>
+            学生校区
+          </view>
+          <view class="uni-list-cell-db">
+            <picker @change="bindPickerChange" :value="studentCampus" :range="array">
+              <view class="uni-input2" v-if="studentCampus !== null">{{ array[studentCampus] }}</view>
+              <view class="uni-input2" style="color: #c0c4cc" v-else>请选择学生校区</view>
+            </picker>
+          </view>
+        </view>
+      </view>
+      <button
+        @click="modifyInformation"
+        form-type="submit"
+        style="color: white; background-color: rgba(42, 130, 228, 1)"
+      >
+        确认
+      </button>
+    </form>
+  </view>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      name: '', //姓名
+      studentSex: 0, //性别
+      studentClazz: '', //班级
+      studentPhone: '', //手机号
+      studentOtherPhone: '', //备用手机号
+      dormNumber: null, //学生宿舍
+      studentCampus: null, //学生校区
+      studentDormitory: '',
+      array: ['黄家湖校区', '墨轩湖校区'],
+      men: true,
+      women: false,
+      room_List: [[], [], []],
+      roomIndex: null,
+      buildId: 1,
+      floorId: 1,
+      roomId: 1,
+      IdList: [],
+      IdList2: [],
+      count: 0,
+      count2: 0,
+    }
+  },
+  onLoad() {
+    this.getStudentInformation()
+    // this.getbuild()
+    // this.getbuildHigh()
+    // this.getrooms()
+    this.init()
+  },
+  methods: {
+    async init() {
+      await this.getbuild()
+      await this.getbuildHigh()
+      await this.getrooms()
+    },
+    // 获取学生数据
+    getStudentInformation() {
+      let res = uni.getStorageSync('student')
+      // console.log('这是获取key中的内容', res)
+      if (res) {
+        this.name = res.studentName
+        this.studentSex = res.studentSex
+        if (this.studentSex == 0) {
+          this.men = true
+          this.women = false
+        } else {
+          this.men = false
+          this.women = true
+        }
+        this.studentCampus = res.studentCampus
+        this.studentPhone = res.studentPhone
+        this.studentOtherPhone = res.studentOtherPhone
+        this.studentDormitory = res.studentDormitory
+        this.dormNumber = res.dormNumber
+        this.studentClazz = res.studentClazz
+      }
+    },
+
+    // 获取宿舍楼栋数据
+    async getbuild() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/build/queryAllBuild`,
+      })
+      // console.log(res)
+      let tempList = []
+      res.data.forEach((item) => {
+        tempList.push(item.buildName)
+      })
+      this.$nextTick(() => {
+        this.$set(this.room_List, 0, tempList)
+      })
+    },
+
+    // 获取宿舍楼层数据
+    async getbuildHigh() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/build/queryAllFloorByBuildID?buildId=${this.buildId}`,
+      })
+      // console.log(res)
+      this.room_List[1] = []
+      this.room_List[2] = []
+      this.IdList = []
+      let tempList = []
+      res.data.forEach((item) => {
+        tempList.push(item.floorName)
+        this.IdList.push(item.floorId)
+      })
+      this.$nextTick(() => {
+        this.$set(this.room_List, 1, tempList)
+        this.floorId = this.IdList[this.count]
+      })
+    },
+
+    // 获取宿舍房间数据
+    async getrooms() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/build/queryAllRoomByFloorID?floorId=${this.floorId}`,
+      })
+      // console.log(res)
+      this.room_List[2] = []
+      this.IdList2 = []
+      let tempList2 = []
+      res.data.forEach((item) => {
+        tempList2.push(item.roomName)
+        this.IdList2.push(item.roomId)
+      })
+      this.$nextTick(() => {
+        this.$set(this.room_List, 2, tempList2)
+        this.roomId = this.IdList2[this.count2]
+      })
+    },
+
+    // 编辑信息
+    async modifyInformation() {
+      let phoneVer = /^[1][3,4,5,7,8,9][0-9]{9}$/ //验证规则
+      if (!this.name || !this.studentPhone || !this.studentOtherPhone) {
+        uni.showToast({
+          title: '请输入具体信息',
+          icon: 'none',
+        })
+      } else if (!phoneVer.test(this.studentPhone) || !phoneVer.test(this.studentOtherPhone)) {
+        uni.showToast({
+          title: '请输入正确的联系电话',
+          icon: 'none',
+        })
+      } else {
+        let res = await this.$myRequest({
+          method: 'post',
+          url: `/student/updateStudent?studentOtherPhone=${this.studentOtherPhone}&studentName=${this.name}&studentDormitory=${this.studentDormitory}&studentSex=${this.studentSex}&studentPhone=${this.studentPhone}&studentCampus=${this.studentCampus}&dormNumber=${this.dormNumber}&studentClazz=${this.studentClazz}`,
+        })
+        // console.log(res)
+        if (res.status == 200) {
+          uni.showToast({
+            title: '编辑成功',
+            icon: 'success',
+          })
+          uni.setStorageSync('updataMsg', true)
+          uni.setStorageSync('student', res.data)
+          setTimeout(() => {
+            uni.redirectTo({
+              url: '../home/home',
+            })
+          }, 1000)
+        } else {
+          uni.showToast({
+            title: '编辑失败',
+            icon: 'error',
+          })
+        }
+      }
+    },
+
+    // 学生校区选择框
+    bindPickerChange(e) {
+      // console.log(e)
+      this.studentCampus = e.detail.value
+    },
+
+    // 性别选择框
+    radioChange(e) {
+      // console.log(e.detail.value)
+      this.studentSex = e.detail.value
+    },
+
+    // 三级联动下拉框回调
+    bindPickerChange_room(e) {
+      // console.log('picker发送选择改变,携带值为', e.detail.value)
+      this.roomIndex = e.detail.value
+      this.dormNumber =
+        this.room_List[0][this.roomIndex[0]] +
+        this.room_List[1][this.roomIndex[1]] +
+        this.room_List[2][this.roomIndex[2]]
+      // console.log(this.buildId + '-' + this.floorId + '-' + this.roomId)
+    },
+
+    // 三级联动下拉框拖动回调
+    handleNum(e) {
+      // console.log("第"+(e.detail.column+1)+"列"+"第"+(e.detail.value+1)+"行" )
+      if (e.detail.column == 0) {
+        // console.log("楼栋发生变化,当前为"+(e.detail.value+1)+"栋")
+        if (e.detail.value < 4) {
+          this.buildId = e.detail.value + 1
+        } else {
+          this.buildId = e.detail.value + 5
+        }
+      } else if (e.detail.column == 1) {
+        // console.log("层数发生变化,当前为"+(e.detail.value+1)+"层")
+        this.floorId = this.IdList[e.detail.value]
+        this.count = e.detail.value
+      } else {
+        // console.log("房间数发生变化,当前为"+(e.detail.value+1)+"号")
+        this.roomId = this.IdList2[e.detail.value]
+        this.count2 = e.detail.value
+      }
+      // console.log(this.buildId + '-' + this.floorId + '-' + this.roomId)
+    },
+  },
+
+  // 监听属性
+  watch: {
+    buildId: {
+      handler() {
+        this.getbuildHigh()
+      },
+      immediate: true,
+    },
+    floorId: {
+      handler() {
+        this.getrooms()
+      },
+      immediate: true,
+    },
+  },
+}
+</script>
+
+<style>
+.bodyContent {
+  position: fixed;
+  width: 100%;
+}
+
+.uni-list-cell-left {
+  float: left;
+  width: 22%;
+  height: 94rpx;
+  text-align: center;
+  font-size: 28rpx;
+  border-bottom: 1px solid rgba(200, 200, 205, 1);
+  line-height: 94rpx;
+}
+
+.uni-list-cell-left text {
+  color: red;
+}
+
+.uni-list-cell-db {
+  float: right;
+  width: 78%;
+  height: 94rpx;
+  border-bottom: 1px solid rgba(200, 200, 205, 1);
+}
+
+/* .uni-list-cell-db .name {
+		float: right;
+	} */
+
+.uni-list {
+  position: relative;
+  font-size: 28rpx;
+}
+
+.uni-list-cell-db input {
+  height: 94rpx;
+  width: 78%;
+  float: right;
+  text-align: center;
+  line-height: 94rpx;
+  font-size: 28rpx;
+  border: none;
+}
+
+.uni-list-cell-db .u-border {
+  border: none;
+  float: right;
+  margin-top: 16rpx;
+  width: 196rpx;
+}
+
+.uni-list-cell-db .uni-input {
+  float: right;
+  margin-right: 44rpx;
+  width: 240rpx;
+  line-height: 94rpx;
+}
+
+.uni-list-cell-db .uni-input2 {
+  float: right;
+  margin-right: 64rpx;
+  width: 240rpx;
+  height: 96rpx;
+  line-height: 94rpx;
+  font-size: 30rpx;
+}
+
+.uni-list-cell-db uni-image {
+  position: absolute;
+  width: 52rpx;
+  height: 52rpx;
+  right: 6rpx;
+  top: 22rpx;
+}
+
+button {
+  position: absolute;
+  top: 690rpx;
+  left: 48rpx;
+  width: 656rpx;
+  height: 94rpx;
+  color: white;
+}
+
+.radio {
+  float: right;
+  margin: 24rpx 72rpx 0 0;
+  /* color: #C0C4CC; */
+}
+
+.uni-input-1 {
+  height: 50rpx;
+}
+</style>

+ 0 - 424
pages/personal-information/personal-information.vue

@@ -1,424 +0,0 @@
-<template>
-	<view class="bodyContent">
-		<form bindsubmit='handleSubmit'>
-			<view class="uni-list">
-				<view class="uni-list-cell">
-					<view class="uni-list-cell-left">
-						<text>*</text>姓名
-					</view>
-					<view class="uni-list-cell-db">
-						<u--input class="uni-input" v-model="name" placeholder="请输入姓名"></u--input>
-					</view>
-				</view>
-			</view>
-
-			<view class="uni-list">
-				<view class="uni-list-cell">
-					<view class="uni-list-cell-left">
-						<text>*</text>性别
-					</view>
-					<view class="uni-list-cell-db">
-						<view class="radio">
-							<radio-group @change="radioChange">
-								<label style="margin-right: 30px;">
-									<radio value="0" :checked="men" />男
-								</label>
-								<label>
-									<radio value="1" :checked="women" />女
-								</label>
-							</radio-group>
-						</view>
-					</view>
-				</view>
-			</view>
-
-			<view class="uni-list">
-				<view class="uni-list-cell">
-					<view class="uni-list-cell-left">
-						<text>*</text>班级
-					</view>
-					<view class="uni-list-cell-db">
-						<u--input class="uni-input" v-model="studentClazz" placeholder="请输入班级"></u--input>
-					</view>
-				</view>
-			</view>
-			<view class="uni-list">
-				<view class="uni-list-cell">
-					<view class="uni-list-cell-left">
-						<text>*</text>手机号
-					</view>
-					<view class="uni-list-cell-db">
-						<u--input class="uni-input" maxlength=11 v-model="studentPhone" placeholder="请输入手机号"></u--input>
-					</view>
-				</view>
-			</view>
-
-			<view class="uni-list">
-				<view class="uni-list-cell">
-					<view class="uni-list-cell-left">
-						<text>*</text>备选手机号
-					</view>
-					<view class="uni-list-cell-db">
-						<u--input class="uni-input" maxlength=11 v-model="studentOtherPhone" placeholder="请输入备选手机号">
-						</u--input>
-					</view>
-				</view>
-			</view>
-
-			<view class="uni-list">
-				<view class="cuni-list-cell">
-					<view class="uni-list-cell-left">
-						<text>*</text>学生宿舍
-					</view>
-					<view class="uni-list-cell-db">
-						<picker class="uni-input-1" mode="multiSelector" :value="roomIndex" :range="room_List"
-							@change="bindPickerChange_room" @columnchange="handleNum">
-							<view class="uni-input2" v-if="dormNumber">
-								{{dormNumber}}
-							</view>
-							<view class="uni-input2" style="color: #C0C4CC;" v-else>
-								请选择学生宿舍
-							</view>
-						</picker>
-
-					</view>
-				</view>
-			</view>
-
-			<view class="uni-list">
-				<view class="uni-list-cell">
-					<view class="uni-list-cell-left">
-						<text>*</text>学生校区
-					</view>
-					<view class="uni-list-cell-db">
-						<picker @change="bindPickerChange" :value="studentCampus" :range="array">
-							<view class="uni-input2" v-if="studentCampus!==null">{{array[studentCampus]}}</view>
-							<view class="uni-input2" style="color: #C0C4CC;" v-else>
-								请选择学生校区
-							</view>
-						</picker>
-					</view>
-				</view>
-			</view>
-			<button @click="modifyInformation" form-type="submit"
-				style="color: white;background-color:  rgba(42, 130, 228, 1);">确认</button>
-		</form>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				name: '', //姓名
-				studentSex: 0, //性别
-				studentClazz: '', //班级
-				studentPhone: '', //手机号
-				studentOtherPhone: '', //备用手机号
-				dormNumber: null, //学生宿舍
-				studentCampus: null, //学生校区
-				studentDormitory: '',
-				array: ['黄家湖校区', '墨轩湖校区'],
-				men: true,
-				women: false,
-				room_List: [
-					[],
-					[],
-					[]
-				],
-				roomIndex: null,
-				buildId: 1,
-				floorId: 1,
-				roomId: 1,
-				IdList: [],
-				IdList2: [],
-				count: 0,
-				count2: 0,
-			}
-		},
-		onLoad() {
-			this.getStudentInformation()
-			this.getbuild()
-			this.getbuildHigh()
-			this.getrooms()
-		},
-		methods: {
-			// 获取学生数据
-			getStudentInformation() {
-				let res = uni.getStorageSync('student')
-				// console.log('这是获取key中的内容', res)
-				if (res) {
-					this.name = res.studentName
-					this.studentSex = res.studentSex
-					if (this.studentSex == 0) {
-						this.men = true
-						this.women = false
-					} else {
-						this.men = false
-						this.women = true
-					}
-					this.studentCampus = res.studentCampus
-					this.studentPhone = res.studentPhone
-					this.studentOtherPhone = res.studentOtherPhone
-					this.studentDormitory = res.studentDormitory
-					this.dormNumber = res.dormNumber
-					this.studentClazz = res.studentClazz
-				}
-			},
-
-			// 获取宿舍楼栋数据
-			async getbuild() {
-				let res = await this.$myRequest({
-					method: "post",
-					url: `/build/queryAllBuild`,
-				})
-				// console.log(res)
-				let tempList = []
-				res.data.forEach(item => {
-					tempList.push(item.buildName)
-				})
-				this.$nextTick(() => {
-					this.$set(this.room_List, 0, tempList)
-				})
-			},
-
-			// 获取宿舍楼层数据
-			async getbuildHigh() {
-				let res = await this.$myRequest({
-					method: "post",
-					url: `/build/queryAllFloorByBuildID?buildId=${this.buildId}`,
-				})
-				// console.log(res)
-				this.room_List[1] = []
-				this.room_List[2] = []
-				this.IdList = []
-				let tempList = []
-				res.data.forEach(item => {
-					tempList.push(item.floorName)
-					this.IdList.push(item.floorId)
-				})
-				this.$nextTick(() => {
-					this.$set(this.room_List, 1, tempList)
-					this.floorId = this.IdList[this.count]
-				})
-			},
-
-			// 获取宿舍房间数据
-			async getrooms() {
-				let res = await this.$myRequest({
-					method: "post",
-					url: `/build/queryAllRoomByFloorID?floorId=${this.floorId}`,
-				})
-				// console.log(res)
-				this.room_List[2] = []
-				this.IdList2 = []
-				let tempList2 = []
-				res.data.forEach(item => {
-					tempList2.push(item.roomName)
-					this.IdList2.push(item.roomId)
-				})
-				this.$nextTick(() => {
-					this.$set(this.room_List, 2, tempList2)
-					this.roomId = this.IdList2[this.count2]
-				})
-			},
-
-			// 编辑信息
-			async modifyInformation() {
-				let phoneVer = /^[1][3,4,5,7,8,9][0-9]{9}$/ //验证规则
-				if (!this.name || !this.studentClazz || !this.studentPhone || !this
-					.studentOtherPhone || this.dormNumber == null || this.studentCampus == null) {
-					uni.showToast({
-						title: "请输入具体信息",
-						icon: "none"
-					})
-				} else if (!phoneVer.test(this.studentPhone) || !phoneVer.test(this.studentOtherPhone)) {
-					uni.showToast({
-						title: "请输入正确的联系电话",
-						icon: 'none'
-					})
-				} else {
-					let res = await this.$myRequest({
-						method: "post",
-						url: `/student/updateStudent?studentOtherPhone=${this.studentOtherPhone}&studentName=${this.name}&studentDormitory=${this.studentDormitory}&studentSex=${this.studentSex}&studentPhone=${this.studentPhone}&studentCampus=${this.studentCampus}&dormNumber=${this.dormNumber}&studentClazz=${this.studentClazz}`,
-					})
-					// console.log(res)
-					if (res.status == 200) {
-						uni.showToast({
-							title: '编辑成功',
-							icon: 'success'
-						})
-						uni.setStorageSync("updataMsg", true)
-						uni.setStorageSync('student', res.data);
-						setTimeout(() => {
-							uni.reLaunch({
-								url: '../index/index'
-							})
-						}, 1500)
-					} else {
-						uni.showToast({
-							title: '编辑失败',
-							icon: 'error'
-						})
-					}
-				}
-			},
-
-			// 学生校区选择框
-			bindPickerChange(e) {
-				// console.log(e)
-				this.studentCampus = e.detail.value
-			},
-
-			// 性别选择框
-			radioChange(e) {
-				// console.log(e.detail.value)
-				this.studentSex = e.detail.value
-			},
-
-			// 三级联动下拉框回调
-			bindPickerChange_room(e) {
-				// console.log('picker发送选择改变,携带值为', e.detail.value)
-				this.roomIndex = e.detail.value
-				this.dormNumber = this.room_List[0][this.roomIndex[0]] + this.room_List[1][this.roomIndex[1]] + this
-					.room_List[2][this.roomIndex[2]]
-				// console.log(this.buildId + '-' + this.floorId + '-' + this.roomId)
-			},
-
-			// 三级联动下拉框拖动回调
-			handleNum(e) {
-				// console.log("第"+(e.detail.column+1)+"列"+"第"+(e.detail.value+1)+"行" )
-				if (e.detail.column == 0) {
-					// console.log("楼栋发生变化,当前为"+(e.detail.value+1)+"栋")
-					if (e.detail.value < 4) {
-						this.buildId = e.detail.value + 1
-					} else {
-						this.buildId = e.detail.value + 5
-					}
-				} else if (e.detail.column == 1) {
-					// console.log("层数发生变化,当前为"+(e.detail.value+1)+"层")
-					this.floorId = this.IdList[e.detail.value]
-					this.count = e.detail.value
-				} else {
-					// console.log("房间数发生变化,当前为"+(e.detail.value+1)+"号")
-					this.roomId = this.IdList2[e.detail.value]
-					this.count2 = e.detail.value
-				}
-				// console.log(this.buildId + '-' + this.floorId + '-' + this.roomId)
-			}
-		},
-
-		// 监听属性
-		watch: {
-			buildId: {
-				handler() {
-					this.getbuildHigh()
-				},
-				immediate: true
-			},
-			floorId: {
-				handler() {
-					this.getrooms()
-				},
-				immediate: true
-			},
-		},
-	}
-</script>
-
-<style>
-	.bodyContent {
-		position: fixed;
-		width: 100%;
-	}
-
-	.uni-list-cell-left {
-		float: left;
-		width: 22%;
-		height: 94rpx;
-		text-align: center;
-		font-size: 28rpx;
-		border-bottom: 1px solid rgba(200, 200, 205, 1);
-		line-height: 94rpx;
-	}
-
-	.uni-list-cell-left text {
-		color: red;
-	}
-
-	.uni-list-cell-db {
-		float: right;
-		width: 78%;
-		height: 94rpx;
-		border-bottom: 1px solid rgba(200, 200, 205, 1);
-	}
-
-	/* .uni-list-cell-db .name {
-		float: right;
-	} */
-
-	.uni-list {
-		position: relative;
-		font-size: 28rpx;
-	}
-
-	.uni-list-cell-db input {
-		height: 94rpx;
-		width: 78%;
-		float: right;
-		text-align: center;
-		line-height: 94rpx;
-		font-size: 28rpx;
-		border: none;
-	}
-
-	.uni-list-cell-db .u-border {
-		border: none;
-		float: right;
-		margin-top: 16rpx;
-		width: 196rpx;
-	}
-
-	.uni-list-cell-db .uni-input {
-		float: right;
-		margin-right: 44rpx;
-		width: 240rpx;
-		line-height: 94rpx;
-	}
-
-	.uni-list-cell-db .uni-input2 {
-		float: right;
-		margin-right: 64rpx;
-		width: 240rpx;
-		height: 96rpx;
-		line-height: 94rpx;
-		font-size: 30rpx;
-	}
-
-	.uni-list-cell-db uni-image {
-		position: absolute;
-		width: 52rpx;
-		height: 52rpx;
-		right: 6rpx;
-		top: 22rpx;
-	}
-
-	button {
-		position: absolute;
-		top: 690rpx;
-		left: 48rpx;
-		width: 656rpx;
-		height: 94rpx;
-		color: white;
-	}
-
-	.radio {
-		float: right;
-		margin: 24rpx 72rpx 0 0;
-		/* color: #C0C4CC; */
-	}
-
-	.uni-input-1 {
-		height: 50rpx;
-	}
-</style>

+ 855 - 0
pages/repair-center/index.vue

@@ -0,0 +1,855 @@
+<template>
+  <view class="page">
+    <view class="head u-flex-y">
+      <view class="head_title">
+        维修中心
+        <image class="loc" src="../../static/rep.svg" mode=""></image>
+      </view>
+      <view class="nav">
+        <navigator url="../evaluation/index" hover-class="navigator-hover" class="u-flex-y">
+          <image src="../../static/sug.svg" mode=""></image>
+          <span>评价建议</span>
+        </navigator>
+      </view>
+      <!-- <view class="point"></view> -->
+    </view>
+    <!-- <view class="point"></view> -->
+    <view class="content">
+      <view class="point"></view>
+      <view class="list-text" v-if="workerList.length !== 0">---- 报修订单 ----</view>
+      <view
+        v-if="item.orderStatus"
+        class="content-list"
+        v-for="(item, index) in workerList"
+        :key="item.orderId"
+        @click="handleLookInfo(item)"
+      >
+        <text class="num">订单号:{{ item.orderId }}</text>
+        <text class="newList">{{ item.orderStatus == 0 ? '新订单' : '' }}</text>
+        <!-- 新订单 -->
+        <text class="waitList">{{ item.orderStatus == 1 ? '待接单' : '' }}</text>
+        <!-- 待接单 -->
+        <text class="readyList">{{ item.orderStatus == 2 ? '已接单' : '' }}</text>
+        <!-- 已接单 -->
+        <text class="finishList">{{ item.orderStatus == 3 ? '维修完成' : '' }}</text>
+        <!-- 维修完成 -->
+        <text class="refuseList">{{ item.orderStatus == 4 ? '退单' : '' }}</text>
+        <!-- 已退单 -->
+        <!-- <view>
+					<span class="orderId">订单号:{{ item.orderId }}</span>
+					<span :class="orderStatusStyle(item.orderStatus)">{{ orderStatusText(item.orderStatus) }}}</span>.
+				</view> -->
+        <view class="list flex column">
+          <span>故障类型:{{ item.repairsFault.faultName }}</span>
+          <span>维修人员:{{ item.repairsWork.workName }}</span>
+          <span>提交时间:{{ item.orderCommitTime }}</span>
+          <span>预约时间:{{ item.orderExpectedTime }}</span>
+          <!-- <view v-if="item.orderStatus == 1">派单时间:{{ item.orderCompleteTime }}</view> -->
+          <span v-if="item.orderStatus == 2">维修时间:{{ item.orderCompleteTime }}</span>
+          <span v-if="item.orderStatus == 3">完成时间:{{ item.orderCompleteTime }}</span>
+        </view>
+        <button class="agreeIt2" v-if="item.orderStatus == 1" @click.stop="open(item, 1)">接受</button>
+        <button class="refuse" v-if="item.orderStatus == 1" @click.stop="open(item, 2)">拒绝</button>
+        <button class="agreeIt" v-if="item.orderStatus == 2" @click.stop="handleFinish(item.orderId)">完成维修</button>
+      </view>
+      <view class="isOver" v-if="flag">----我是有底线的----</view>
+      <view class="isOver" v-if="workerList.length == 0">----暂无订单----</view>
+    </view>
+
+    <!-- 查看详情弹窗 -->
+    <uni-popup ref="popup" background-color="#fff">
+      <view class="popup_view" v-if="info">
+        <view class="popup_title">订单信息</view>
+        <view class="popup_item">订单号:{{ info.orderId }}</view>
+        <view class="popup_item">报修类型:{{ info.repairsFault.faultName }}</view>
+        <view class="popup_item">宿舍楼栋:{{ info.repairsStudent.dormNumber }}</view>
+        <view class="popup_item">预约时间:{{ info.orderExpectedTime }}</view>
+        <view v-if="info.orderStatus == 1">派单时间:{{ info.orderCompleteTime }}</view>
+        <view v-if="info.orderStatus == 2">维修时间:{{ info.orderCompleteTime }}</view>
+        <view v-if="info.orderStatus == 3">完成时间:{{ info.orderCompleteTime }}</view>
+        <view class="popup_item">联系电话:{{ info.repairsStudent.studentPhone }}</view>
+        <view class="popup_item">备选电话:{{ info.repairsStudent.studentOtherPhone }}</view>
+        <view class="popup_img">
+          <text>故障图片:</text>
+          <image
+            v-for="(item, index) in info.orderImages"
+            :key="index"
+            :src="item ? item : '../../static/no-image.gif'"
+            mode="aspectFit"
+            @click="handleBig(index)"
+          ></image>
+        </view>
+      </view>
+    </uni-popup>
+    <!-- 图片放大弹窗 -->
+    <uni-popup ref="popup2">
+      <view class="popup_view" v-if="info" style="padding: 0px">
+        <image
+          v-for="(item, index) in info.orderImages"
+          :key="index"
+          :src="item ? item : '../../static/no-image.gif'"
+          v-if="index == activeIndex"
+        ></image>
+      </view>
+    </uni-popup>
+    <!-- 是否拒绝单子 -->
+    <view class="box" v-if="dialogShows">
+      <view id="dialog">
+        <!-- <view class="replace">通知</view> -->
+        <view class="uni-textarea">请填写拒绝理由</view>
+        <u--textarea v-model="orderBack" placeholder="请输入退回理由"></u--textarea>
+        <!-- <textarea v-modal="orderBack"></textarea> -->
+        <view class="cancle" @click="dialogShows = false">取消</view>
+        <view class="agree" @click="handleRefuse">确定</view>
+      </view>
+    </view>
+    <!-- 是否接受单子 -->
+    <view class="box" v-if="dialogShow">
+      <view id="dialog">
+        <view class="replace">选择维修时间</view>
+        <view class="uni-textarea">
+          <view @click="onShowDatePicker('datetime')" class="uni-list-cell-db-2">
+            <text style="margin-left: 20rpx">{{ timeValue }}</text>
+          </view>
+          <mx-date-picker
+            :show="showPicker"
+            :type="type"
+            :value="timeValue"
+            :show-tips="true"
+            :begin-text="'开始'"
+            :end-text="'截至'"
+            :show-seconds="true"
+            @confirm="onSelected"
+            @cancel="onSelected"
+          />
+        </view>
+        <view class="cancle" @click="cancleclose">取消</view>
+        <view class="agree" @click="agreeList">确定</view>
+      </view>
+    </view>
+    <!-- 完成订单 -> 上传图片 -->
+    <view class="box" v-if="uploadDialog">
+      <view id="dialog">
+        <view class="replace">请上传维修图片</view>
+        <!-- 照片 -->
+        <view class="photo">
+          <view class="upload-image-view">
+            <uni-file-picker
+              limit="3"
+              :value="imageValue"
+              fileMediatype="image"
+              :image-styles="imageStyles"
+              mode="grid"
+              @select="select"
+              @delete="handleDelete"
+            ></uni-file-picker>
+          </view>
+        </view>
+        <view class="cancle" @click="uploadDialog = false">取消</view>
+        <view class="agree" @click="onFinish">确定</view>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+import * as TranslateImage from '../../utils/imageZip.js'
+import '../../static/upload-imgs.css'
+import MxDatePicker from '@/components/mx-datepicker'
+export default {
+  components: {
+    MxDatePicker,
+  },
+  data() {
+    return {
+      orderBack: '',
+      dialogShow: false,
+      dialogShows: false,
+      uploadDialog: false,
+      orderId: '',
+      orderStatus: null,
+      orderStatusStyle: {},
+      orderStatusText: {},
+      workerList: [],
+      flag: false,
+      pageNum: 1,
+      pageSize: 6,
+      total: '',
+      title: 'picker-view',
+      visible: true,
+      showPicker: false,
+      datetime: '',
+      range: ['2022-03-27', '2022-03-27'],
+      rangetime: '',
+      type: 'rangetime',
+      timeValue: '请点击选择时间',
+      info: null,
+      activeIndex: null,
+      imageValue: [],
+      ceshiData1: [],
+      Timer: null,
+      imgs: null,
+      imageStyles: {
+        width: 75,
+        height: 75,
+        border: {
+          color: '#ccc',
+          width: 1,
+          style: 'dashed',
+          radius: '5px',
+        },
+      },
+      finishJsonPramas: null, // 完成维修
+    }
+  },
+  onLoad() {
+    this.getworkList()
+    this.getTime()
+  },
+  // computed: {
+  // 	orderStatusStyle: () => {
+
+  // 	}
+  // },
+  methods: {
+    // 初始化时间
+    getTime() {
+      let date = new Date(),
+        year = date.getFullYear(),
+        month = date.getMonth() + 1,
+        day = date.getDate(),
+        hour = date.getHours() < 10 ? '0' + date.getHours() : date.getHours(),
+        minute = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes(),
+        second = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
+      month >= 1 && month <= 9 ? (month = '0' + month) : ''
+      day >= 0 && day <= 9 ? (day = '0' + day) : ''
+      let timer = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second
+      this.datetime = timer
+    },
+
+    // 获取报修订单列表
+    async getworkList() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/order/queryAllOrderByWorkId?pageNum=${this.pageNum}&pageSize=${this.pageSize}`,
+        // data: {
+        //   pageNum: this.pageNum,
+        //   pageSize: this.pageSize,
+        // },
+      })
+      // console.log(res)
+      if (res.status == 200) {
+        this.total = res.data.total
+        this.workerList = [...this.workerList, ...res.data.list]
+      }
+      uni.hideLoading()
+    },
+
+    // 接受订单
+    async agreeList() {
+      console.log(this.timeValue, ' agree')
+      if (this.timeValue == '请点击选择时间') {
+        uni.showToast({
+          title: '请选择时间',
+        })
+      } else {
+        this.dialogShow = false
+        let res = await this.$myRequest({
+          method: 'post',
+          url: `/order/updateOrderAccept?orderId=${this.orderId}&completeTime=${this.timeValue}`,
+        })
+        // console.log(res)
+        if (res.status == 200) {
+          uni.showToast({
+            title: '接单成功',
+            icon: 'success',
+          })
+          this.workerList = []
+          this.pageNum = 1
+          uni.pageScrollTo({
+            scrollTop: 0,
+          })
+          this.getworkList()
+        }
+        this.timeValue = '请点击选择时间'
+      }
+    },
+
+    // 拒绝订单
+    async handleRefuse() {
+      this.dialogShows = false
+      console.log(this.orderBack, 'orderBack')
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/order/updateOrderRefused?orderId=${this.orderId}&orderBack=${this.orderBack}`,
+      })
+      // console.log(res)
+      if (res.status == 200) {
+        uni.showToast({
+          title: '拒单成功',
+          icon: 'success',
+        })
+        this.workerList = []
+        this.pageNum = 1
+        uni.pageScrollTo({
+          scrollTop: 0,
+        })
+        this.getworkList()
+      }
+    },
+
+    onShowDatePicker(type) {
+      this.type = type
+      this.showPicker = true
+      this.timeValue = this[type]
+    },
+
+    onSelected(e) {
+      this.showPicker = false
+      if (e) {
+        this[this.type] = e.value
+        this.timeValue = e.value
+      }
+    },
+
+    // 页面拉到底部触发事件
+    onReachBottom() {
+      if (this.workerList.length < this.total) {
+        uni.showLoading({
+          title: '数据加载中',
+        })
+        this.pageNum++
+        this.getworkList()
+      } else {
+        this.flag = true
+      }
+    },
+
+    // 下拉页面刷新函数
+    onPullDownRefresh() {
+      this.flag = false
+      this.workerList = []
+      this.pageNum = 1
+      this.getworkList()
+      setTimeout(() => {
+        uni.stopPullDownRefresh()
+      }, 1000)
+    },
+
+    // 控制 接受或者拒绝弹窗 打开
+    open(item, num) {
+      this.orderId = item.orderId
+      this.orderStatus = item.orderStatus
+      if (num == 1) {
+        this.dialogShow = true
+      } else {
+        this.dialogShows = true
+      }
+    },
+
+    cancleclose() {
+      this.dialogShow = false
+      this.timeValue = '请点击选择时间'
+    },
+
+    // 完成维修按钮回调
+    handleFinish(orderId) {
+      this.finishJsonPramas = orderId
+      this.uploadDialog = true
+    },
+    onFinish() {
+      // 处理图片参数数据
+      this.imgs = this.ceshiData1.join(';')
+      if (this.Timer != null) {
+        clearTimeout(this.Timer)
+      }
+
+      console.log(this.imgs, 'this.imgs')
+      if (this.imgs === '') {
+        return uni.showToast({
+          title: '请上传维修图片',
+          icon: 'error',
+        })
+      }
+
+      this.Timer = setTimeout(async () => {
+        let res = await this.$myRequest({
+          method: 'post',
+          url: `/order/updateOrderFinish?orderId=${this.finishJsonPramas}&repairImage=${this.imgs}`,
+          //   data: {
+          //     repairImage: this.imgs,
+          //     orderId: this.finishJsonPramas,
+          //   },
+        })
+        // console.log(res)
+        if (res.status == 200) {
+          uni.showToast({
+            title: res.message,
+            icon: 'success',
+          })
+          this.workerList = []
+          this.pageNum = 1
+          uni.pageScrollTo({
+            scrollTop: 0,
+          })
+          this.uploadDialog = false
+          this.getworkList()
+        } else {
+          uni.showToast({
+            title: res.message,
+            icon: 'error',
+          })
+        }
+      }, 1500)
+    },
+    // 选择图片压缩并上传
+    select(e) {
+      // console.log('选择文件:', e)
+      e.tempFiles.forEach((item) => {
+        TranslateImage.translate(item.path, (res) => {
+          if (Number(res.size) > 1000000) {
+            this.imageValue = []
+            uni.showModal({
+              content: `图片过大,请重新上传`,
+              showCancel: false,
+              success() {},
+            })
+            return
+          }
+          uni.showLoading({
+            title: '上传中',
+          })
+          uni.uploadFile({
+            url: `/baoxiu/repairApi/order/uploadImage`,
+            filePath: res.url,
+            name: 'orderImages',
+            success: (uploadFileRes) => {
+              this.ceshiData1.push(JSON.parse(uploadFileRes.data).data)
+              const path = item.path
+              this.imageValue.push({
+                url: path,
+                name: '',
+              })
+              uni.hideLoading()
+            },
+            fail: () => {
+              uni.hideLoading()
+            },
+          })
+        })
+      })
+    },
+
+    // 删除图片回调
+    handleDelete(e) {
+      const num = this.imageValue.findIndex((v) => v.path === e.tempFilePath)
+      this.imageValue.splice(num, 1)
+      this.ceshiData1.splice(num, 1)
+      this.uploadDialog = false
+    },
+
+    // 查看详情回调
+    async handleLookInfo(item) {
+      this.info = null
+      this.$refs.popup.open()
+      if (item.orderStatus == 0) {
+        let res = await this.$myRequest({
+          method: 'post',
+          url: `/order/queryByOrderIdNotWork?orderId=${item.orderId}`,
+        })
+        // console.log(res)
+        this.$nextTick(() => {
+          this.info = res.data
+          this.info.orderImages = this.info.orderImages.split(';')
+        })
+      } else {
+        let res = await this.$myRequest({
+          method: 'post',
+          url: `/order/queryByOrderId?orderId=${item.orderId}`,
+        })
+        // console.log(res)
+        this.$nextTick(() => {
+          this.info = res.data
+          this.info.orderImages = this.info.orderImages.split(';')
+        })
+      }
+    },
+
+    // 点击图片放大
+    handleBig(index) {
+      this.activeIndex = index
+      this.$refs.popup2.open()
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.page {
+  height: 100hv;
+}
+
+.head {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  align-items: center;
+  height: 350rpx;
+  border-radius: 0rpx 0rpx 20rpx 20rpx;
+  background-color: rgba(42, 130, 228, 1);
+  text-align: center;
+  padding-top: 38rpx;
+  z-index: 2;
+  &_title {
+    font-size: 30rpx;
+    font-weight: bold;
+    color: rgba(255, 255, 255, 1);
+  }
+
+  .nav {
+    width: 718rpx;
+    height: 236rpx;
+    margin-top: 78rpx;
+    padding-top: 50rpx;
+    background-color: rgba(255, 255, 255, 1);
+    border-radius: 28rpx 28rpx 0rpx 0rpx;
+
+    navigator {
+      width: 108rpx;
+      height: 120rpx;
+      margin: 0 auto;
+    }
+
+    image {
+      display: block;
+      width: 96rpx;
+      height: 96rpx;
+      margin-left: 18rpx;
+    }
+
+    span {
+      font-size: 26rpx;
+    }
+  }
+}
+.point {
+  width: 100%;
+  height: 14rpx;
+  border-radius: 14rpx;
+  background-color: rgba(229, 229, 229, 0.62);
+}
+.content {
+  margin-top: 400rpx;
+  padding: 0 10rpx;
+  // height: 1200rpx;
+  background-color: rgba(255, 255, 255, 1);
+
+  .point {
+    width: 100%;
+    height: 14rpx;
+    background-color: rgba(229, 229, 229, 0.62);
+  }
+
+  .list-text {
+    margin-top: 30rpx;
+    font-size: 24rpx;
+    text-align: center;
+    color: rgba(80, 80, 80, 0.27);
+  }
+
+  .content-list {
+    position: relative;
+    margin-top: 22rpx;
+    padding-left: 20rpx;
+    height: 330rpx;
+    border-radius: 28rpx 28rpx 28rpx 28rpx;
+    font-size: 24rpx;
+    background-color: rgba(229, 229, 229, 0.62);
+
+    .num {
+      float: left;
+      //   margin-left: 14rpx;
+      margin-top: 18rpx;
+      font-weight: 700;
+      color: rgba(42, 130, 228, 1);
+    }
+
+    .newList {
+      float: right;
+      margin-top: 20rpx;
+      margin-right: 32rpx;
+      color: rgba(212, 48, 48, 1);
+    }
+
+    .readyList {
+      float: right;
+      margin-top: 20rpx;
+      margin-right: 4rpx;
+      color: orange;
+    }
+
+    .waitList {
+      float: right;
+      margin-top: 20rpx;
+      margin-right: 4rpx;
+      color: rgba(212, 48, 48, 1);
+    }
+
+    .finishList {
+      float: right;
+      margin-top: 20rpx;
+      margin-right: 4rpx;
+      color: blue;
+    }
+
+    .refuseList {
+      float: right;
+      margin-top: 20rpx;
+      margin-right: 4rpx;
+      color: rgba(212, 48, 48, 1);
+    }
+
+    .list {
+      float: left;
+      width: 500rpx;
+      //   margin-left: -280rpx;
+      //   margin-top: 64rpx;
+      span {
+        width: 100%;
+        text-align: left;
+      }
+    }
+  }
+}
+
+// .point {
+// 	height: 14rpx;
+// 	background-color: rgba(229, 229, 229, 0.62);
+// }
+
+// .list-text {
+// 	margin-top: 30rpx;
+// 	font-size: 24rpx;
+// 	text-align: center;
+// 	color: rgba(80, 80, 80, 0.27);
+// }
+
+.picker-view {
+  width: 750rpx;
+  height: 600rpx;
+  margin-top: 20rpx;
+}
+
+.item {
+  height: 100rpx;
+  align-items: center;
+  justify-content: center;
+  text-align: center;
+}
+
+.loc {
+  font-size: 24rpx;
+  width: 40rpx;
+  height: 40rpx;
+  vertical-align: baseline;
+}
+
+.list-text {
+  margin-top: 30rpx;
+  font-size: 24rpx;
+  text-align: center;
+  color: rgba(80, 80, 80, 0.27);
+}
+
+// .content-list {
+// 	position: relative;
+// 	margin-top: 22rpx;
+// 	padding-left: 20rpx;
+// 	height: 250rpx;
+// 	border-radius: 28rpx 28rpx 0rpx 0rpx;
+// 	font-size: 24rpx;
+// 	background-color: rgba(229, 229, 229, 0.62);
+// }
+
+// .list {
+// 	float: left;
+// 	margin-left: -280rpx;
+// 	margin-top: 64rpx;
+// }
+
+.content-list .agreeIt {
+  position: absolute;
+  bottom: 20rpx;
+  right: 42rpx;
+  line-height: 50rpx;
+  width: 152rpx;
+  height: 50rpx;
+  background-color: rgba(42, 130, 228, 1);
+  color: white;
+  font-size: 24rpx;
+  border-radius: 28rpx;
+}
+
+.agreeIt2 {
+  position: absolute;
+  bottom: 20rpx;
+  right: 42rpx;
+  line-height: 50rpx;
+  width: 122rpx;
+  height: 50rpx;
+  background-color: rgba(42, 130, 228, 1);
+  color: white;
+  font-size: 24rpx;
+  border-radius: 28rpx;
+}
+
+.content-list .refuse {
+  position: absolute;
+  bottom: 20rpx;
+  right: 190rpx;
+  line-height: 50rpx;
+  width: 122rpx;
+  height: 50rpx;
+  background-color: rgba(42, 130, 228, 1);
+  color: white;
+  font-size: 24rpx;
+  border-radius: 28rpx;
+}
+
+.isOver {
+  width: 100%;
+  height: 100rpx;
+  line-height: 100rpx;
+  text-align: center;
+  font-size: 24rpx;
+  color: rgba(80, 80, 80, 0.27);
+}
+
+#dialog {
+  position: absolute;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  width: 80%;
+  height: 25%;
+  margin: auto;
+  border-radius: 16rpx;
+  text-align: center;
+  background-color: white;
+}
+
+.uni-textarea {
+  //   margin-top: 70rpx;
+  color: rgba(80, 80, 80, 1);
+}
+
+.box {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background: rgba(0, 0, 0, 0.3);
+}
+
+.replace {
+  margin-top: 4%;
+  font-size: 28rpx;
+  color: #4cd964;
+}
+
+.cancle {
+  position: absolute;
+  top: 78%;
+  width: 50%;
+  height: 22%;
+  border: 2rpx solid rgba(229, 229, 229, 0.62);
+  border-radius: 0 0 0 16rpx;
+  line-height: 2.7;
+  background-color: white;
+}
+
+.agree {
+  position: absolute;
+  right: 0;
+  top: 78%;
+  width: 50%;
+  height: 22%;
+  border-radius: 0 0 16rpx 0;
+  border: 2rpx solid rgba(229, 229, 229, 0.62);
+  line-height: 2.7;
+  background-color: white;
+}
+
+// .newList {
+// 	float: right;
+// 	margin-top: 20rpx;
+// 	margin-right: 32rpx;
+// 	color: rgba(255, 141, 26, 1);
+// }
+
+// .readyList {
+// 	float: right;
+// 	margin-top: 20rpx;
+// 	margin-right: 4rpx;
+// 	color: rgba(212, 48, 48, 1);
+// }
+
+// .waitList {
+// 	float: right;
+// 	margin-top: 20rpx;
+// 	margin-right: 4rpx;
+// 	color: orange;
+// }
+
+// .finishList {
+// 	float: right;
+// 	margin-top: 20rpx;
+// 	margin-right: 4rpx;
+// 	color: blue;
+// }
+
+// .refuseList {
+// 	float: right;
+// 	margin-top: 20rpx;
+// 	margin-right: 4rpx;
+// 	color: rgba(212, 48, 48, 1);
+// }
+
+.popup_view {
+  box-sizing: border-box;
+  width: 600rpx;
+  height: 840rpx;
+  padding: 50rpx;
+  overflow: scroll;
+  image {
+    width: 100%;
+    height: 100%;
+  }
+
+  .popup_title {
+    font-size: 20px;
+  }
+
+  .popup_item {
+    margin: 20rpx 0;
+  }
+
+  .popup_img {
+    display: flex;
+
+    image {
+      margin: 0 6rpx;
+      width: 100rpx;
+      height: 200rpx;
+      background-color: #eee;
+    }
+  }
+}
+
+.photo {
+  padding: 10px;
+}
+</style>

+ 448 - 0
pages/repair-form/form.vue

@@ -0,0 +1,448 @@
+<script>
+import * as TranslateImage from '../../utils/imageZip.js'
+import '../../static/upload-imgs.css'
+import MxDatePicker from '@/components/mx-datepicker'
+export default {
+  components: {
+    MxDatePicker,
+  },
+  data() {
+    return {
+      imageStyles: {
+        width: 75,
+        height: 75,
+        border: {
+          color: '#ccc',
+          width: 1,
+          style: 'dashed',
+          radius: '5px',
+        },
+      },
+      imageList: [], //保存图片路径集合
+      List: [],
+      index: '',
+      faultName: null,
+      pickerData: '',
+      buildId: 1,
+      floorId: 1,
+      roomId: 1,
+      formData: {
+        phone: '',
+        inputphone: '',
+        os: '',
+      },
+      showPicker: false,
+      datetime: '',
+      rangetime: '',
+      type: 'rangetime',
+      timeValue: '',
+      imgs: null,
+      imageValue: [],
+      ceshiData1: [],
+      Timer: null,
+      room_List: [[], [], []],
+      roomIndex: null,
+      IdList: [],
+      IdList2: [],
+      count: 0,
+      count2: 0,
+      dormNumber: null,
+      fontnum: 0,
+    }
+  },
+  onLoad() {
+    this.getStudentInformation()
+    this.getTime()
+    this.getfault()
+    this.getbuild()
+    this.getbuildHigh()
+    this.getrooms()
+  },
+
+  methods: {
+    // 获取学生数据
+    getStudentInformation() {
+      let res = uni.getStorageSync('student')
+      // console.log(res)
+      if (res) {
+        this.formData.phone = res.studentPhone
+        this.formData.inputphone = res.studentOtherPhone
+        this.dormNumber = res.dormNumber
+      }
+    },
+    //统计textarea字数
+    sumfrontnum(e) {
+      console.log(e)
+      this.fontnum = e.detail.value.length
+    },
+    // 初始化时间
+    getTime() {
+      let date = new Date(),
+        year = date.getFullYear(),
+        month = date.getMonth() + 1,
+        day = date.getDate(),
+        hour = date.getHours() < 10 ? '0' + date.getHours() : date.getHours(),
+        minute = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes(),
+        second = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
+      month >= 1 && month <= 9 ? (month = '0' + month) : ''
+      day >= 0 && day <= 9 ? (day = '0' + day) : ''
+      let timer = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second
+      this.datetime = timer
+    },
+
+    // 获取故障类型信息
+    async getfault() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/fault/queryAllFaultByStatus`,
+      })
+      // console.log(res)
+      this.$nextTick(() => {
+        this.List = res.data
+      })
+    },
+
+    // 获取宿舍楼栋数据
+    async getbuild() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/build/queryAllBuild`,
+      })
+      // console.log(res)
+      let tempList = []
+      res.data.forEach((item) => {
+        tempList.push(item.buildName)
+        console.log('bulidid' + item.buildId)
+      })
+      this.$nextTick(() => {
+        this.$set(this.room_List, 0, tempList)
+      })
+    },
+
+    // 获取宿舍楼层数据
+    async getbuildHigh() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/build/queryAllFloorByBuildID?buildId=${this.buildId}`,
+      })
+      // console.log(res)
+      this.room_List[1] = []
+      this.room_List[2] = []
+      this.IdList = []
+      let tempList = []
+      res.data.forEach((item) => {
+        tempList.push(item.floorName)
+        this.IdList.push(item.floorId)
+        console.log('floorid' + item.floorId)
+      })
+      this.$nextTick(() => {
+        this.$set(this.room_List, 1, tempList)
+        this.floorId = this.IdList[this.count]
+      })
+    },
+
+    // 获取宿舍房间数据
+    async getrooms() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/build/queryAllRoomByFloorID?floorId=${this.floorId}`,
+      })
+      // console.log(res)
+      this.room_List[2] = []
+      this.IdList2 = []
+      let tempList = []
+      res.data.forEach((item) => {
+        tempList.push(item.roomName)
+        this.IdList2.push(item.roomId)
+        console.log('roomid' + item.roomId)
+      })
+      this.$nextTick(() => {
+        this.$set(this.room_List, 2, tempList)
+        this.roomId = this.IdList2[this.count2]
+      })
+    },
+
+    // 时间选择框
+    onShowDatePicker(type) {
+      this.type = type
+      this.showPicker = true
+      this.timeValue = this[type]
+    },
+
+    // 时间选择框点击回调
+    onSelected(e) {
+      this.showPicker = false
+      if (e) {
+        this[this.type] = e.value
+        this.timeValue = e.value
+      }
+    },
+
+    //故障选择
+    bindPickerChange(e, storage) {
+      this.index = e.target.value
+      this.pickerData = storage[this.index] // 这里就是选中的对象
+    },
+
+    // 提交订单
+    getList() {
+      console.log('ppppp' + this.buildId + '-' + this.floorId + '-' + this.roomId)
+      // 处理图片参数数据
+      this.imgs = this.ceshiData1.join(';')
+      // 电话验证规则
+      let phoneVer = /^[1][3,4,5,7,8,9][0-9]{9}$/
+      // 简单校验
+      if (this.pickerData.faultId == null) {
+        uni.showToast({
+          icon: 'none',
+          title: '请选择故障类型',
+          duration: 2000,
+        })
+        return
+      }
+      if (this.dormNumber == null) {
+        uni.showToast({
+          icon: 'none',
+          title: '请选择楼栋和宿舍号',
+          duration: 2000,
+        })
+        return
+      }
+
+      if (!this.timeValue) {
+        uni.showToast({
+          icon: 'none',
+          title: '请选择预期时间',
+          duration: 2000,
+        })
+        return
+      }
+
+      if (!this.formData.phone) {
+        uni.showToast({
+          title: '请输入联系电话',
+          icon: 'none',
+        })
+        return
+      } else if (!phoneVer.test(this.formData.phone)) {
+        uni.showToast({
+          title: '请输入正确的联系电话',
+          icon: 'none',
+        })
+        return
+      }
+
+      uni.showLoading({
+        title: '提交中',
+      })
+
+      if (this.Timer != null) {
+        clearTimeout(this.Timer)
+      }
+      this.Timer = setTimeout(async () => {
+        let res = await this.$myRequest({
+          method: 'post',
+          url: `/order/insertOrder`,
+          data: {
+            faultId: String(this.pickerData.faultId),
+            dormNumber: this.dormNumber,
+            orderExpectedTime: this.timeValue,
+            studentDormitory: this.buildId + '-' + this.floorId + '-' + this.roomId,
+            orderImages: this.imgs,
+            orderNote: this.formData.os,
+            studentPhone: this.formData.phone,
+            otherPhone: this.formData.inputphone,
+          },
+        })
+        // console.log(res)
+        if (res.status == 200) {
+          uni.showToast({
+            title: '提交成功',
+          })
+          uni.reLaunch({
+            url: '/pages/index/index',
+          })
+        } else {
+          uni.showToast({
+            title: '提交失败',
+            icon: 'error',
+          })
+        }
+      }, 1500)
+    },
+
+    // 选择图片压缩并上传
+    select(e) {
+      // console.log('选择文件:', e)
+      e.tempFiles.forEach((item) => {
+        TranslateImage.translate(item.path, (res) => {
+          if (Number(res.size) > 1000000) {
+            this.imageValue = []
+            uni.showModal({
+              content: `图片过大,请重新上传`,
+              showCancel: false,
+              success() {},
+            })
+            return
+          }
+          uni.showLoading({
+            title: '上传中',
+          })
+          uni.uploadFile({
+            url: `/baoxiu/repairApi/order/uploadImage`,
+            filePath: res.url,
+            name: 'orderImages',
+            success: (uploadFileRes) => {
+              this.ceshiData1.push(JSON.parse(uploadFileRes.data).data)
+              const path = item.path
+              this.imageValue.push({
+                url: path,
+                name: '',
+              })
+              uni.hideLoading()
+            },
+            fail: () => {
+              uni.hideLoading()
+            },
+          })
+        })
+      })
+    },
+
+    // 删除图片回调
+    handleDelete(e) {
+      const num = this.imageValue.findIndex((v) => v.path === e.tempFilePath)
+      this.imageValue.splice(num, 1)
+      this.ceshiData1.splice(num, 1)
+    },
+
+    // 三级联动下拉框回调
+    bindPickerChange_room(e) {
+      console.log('picker发送选择改变,携带值为', e.detail.value)
+      this.roomIndex = e.detail.value
+      this.dormNumber =
+        this.room_List[0][this.roomIndex[0]] +
+        this.room_List[1][this.roomIndex[1]] +
+        this.room_List[2][this.roomIndex[2]]
+      console.log('mmmmmm' + this.buildId + '-' + this.floorId + '-' + this.roomId)
+    },
+
+    // 三级联动下拉框拖动回调
+    handleNum(e) {
+      console.log('第' + (e.detail.column + 1) + '列' + '第' + (e.detail.value + 1) + '行')
+      if (e.detail.column == 0) {
+        console.log('楼栋发生变化,当前为' + (e.detail.value + 1) + '栋')
+        // if (e.detail.value < 4) {
+        this.buildId = e.detail.value + 1
+        // } else {
+        // this.buildId = e.detail.value + 5
+        // }
+        // console.log(this.buildId + '-' + this.floorId + '-' + this.roomId)
+      } else if (e.detail.column == 1) {
+        // console.log("层数发生变化,当前为"+(e.detail.value+1)+"层")
+        this.floorId = this.IdList[e.detail.value]
+        this.count = e.detail.value
+        // console.log(this.buildId + '-' + this.floorId + '-' + this.roomId)
+      } else {
+        // console.log("房间数发生变化,当前为"+(e.detail.value+1)+"号")
+        this.roomId = this.IdList2[e.detail.value]
+        this.count2 = e.detail.value
+        console.log('zuizong' + this.buildId + '-' + this.floorId + '-' + this.roomId)
+      }
+    },
+  },
+
+  // 监听属性
+  watch: {
+    buildId: {
+      handler() {
+        this.getbuildHigh()
+      },
+    },
+    floorId: {
+      handler() {
+        this.getrooms()
+      },
+    },
+  },
+}
+</script>
+
+<template>
+  <view class="form">
+    <view class="form_item flex items-center justify-between">
+      <span>宿舍楼栋:</span>
+      <span v-if="dormNumber">
+        {{ dormNumber }}
+      </span>
+      <span v-else>请选择</span>
+
+      <picker
+        class="picker flex justify-end items-center"
+        mode="multiSelector"
+        :value="roomIndex"
+        :range="room_List"
+        @change="bindPickerChange_room"
+        @columnchange="handleNum"
+      >
+        <image src="../../static/down.svg"></image>
+      </picker>
+    </view>
+    <view class="form_item flex items-center justify-between">
+      <span>故障分类:</span>
+      <span v-if="List != null">
+        {{ pickerData.faultName == undefined ? '' : pickerData.faultName }}
+      </span>
+      <picker
+        class="picker flex justify-end items-center"
+        @change="bindPickerChange($event, List)"
+        :value="index"
+        :range="List"
+        :range-key="'faultName'"
+      >
+        <image src="../../static/down.svg"></image>
+      </picker>
+    </view>
+    <view class="form_item flex items-center justify-between">
+      <span>预约时间:</span>
+      <span>{{ timeValue || '请选择' }}</span>
+      <view class="picker flex justify-end items-center" @click="onShowDatePicker('datetime')">
+        <image src="../../static/down.svg"></image>
+      </view>
+    </view>
+    <mx-date-picker
+      :show="showPicker"
+      :type="type"
+      :value="timeValue"
+      :show-tips="true"
+      :begin-text="'开始'"
+      :end-text="'截至'"
+      :show-seconds="true"
+      @confirm="onSelected"
+      @cancel="onSelected"
+    />
+    <view class="form_item flex items-center justify-between">
+      <span>联系电话:</span>
+      <input type="number" maxlength="11" class="flex-1" v-model="formData.phone" />
+    </view>
+  </view>
+</template>
+
+<style lang="scss" scoped>
+.form {
+  width: 100%;
+  padding: 20rpx;
+  &_item {
+    height: 80rpx;
+    border-bottom: 1px solid rgba(166, 166, 166, 0.18);
+  }
+  .picker {
+    flex: 1;
+    width: 400rpx;
+  }
+  image {
+    max-width: 40rpx;
+    max-height: 40rpx;
+  }
+}
+</style>

+ 773 - 0
pages/repair-form/index.vue

@@ -0,0 +1,773 @@
+<template>
+  <view class="list_body">
+    <view class="box" v-if="showPicker"></view>
+    <mx-date-picker
+      :show="showPicker"
+      :type="type"
+      :value="timeValue"
+      :show-tips="true"
+      :begin-text="'开始'"
+      :end-text="'截至'"
+      :show-seconds="true"
+      @confirm="onSelected"
+      @cancel="onSelected"
+    />
+    <view class="head">
+      <image src="../../static/4.png" mode="aspectFit"></image>
+      <!-- <text>报修信息表<image src="../../static/pen.svg" mode=""></image></text> -->
+    </view>
+    <form @submit="formSubmit" @reset="formReset">
+      <view class="content">
+        <!-- 宿舍楼栋 -->
+        <view class="headline-2">
+          <text class="uni-list-cell-left-2">宿舍楼栋:</text>
+          <view class="uni-list-cell">
+            <picker
+              class="uni-input-1"
+              mode="multiSelector"
+              :value="roomIndex"
+              :range="room_List"
+              @change="bindPickerChange_room"
+              @columnchange="handleNum"
+            >
+              <view class="uni-input" v-if="dormNumber">
+                {{ dormNumber }}
+              </view>
+              <image src="../../static/down.svg" class="uni-list-cell_image"></image>
+            </picker>
+          </view>
+        </view>
+        <!-- <hr> -->
+        <!-- <view class="line"></view> -->
+        <!-- 故障分类 -->
+        <view class="headline-2">
+          <text class="uni-list-cell-left">故障分类:</text>
+          <picker @change="bindPickerChange($event, List)" :value="index" :range="List" :range-key="'faultName'">
+            <view class="uni-list-cell-os">
+              <view class="uni-list-cell-db">
+                <template v-if="List != null" v-model="index">
+                  <view class="uni-input-1">
+                    {{ pickerData.faultName == undefined ? '' : pickerData.faultName }}
+                    <image src="../../static/down.svg" mode=""></image>
+                  </view>
+                </template>
+              </view>
+            </view>
+          </picker>
+        </view>
+        <!-- 预约时间 -->
+        <view class="headline-2">
+          <text class="uni-list-cell-left">预约时间:</text>
+          <view style="line-height: 35px" @click="onShowDatePicker('datetime')" class="uni-list-cell-db-2">
+            <text style="margin-left: 254rpx">{{ timeValue }}</text>
+            <image src="../../static/down.svg" mode="" class="timeimg"></image>
+          </view>
+        </view>
+        <view class="headline-2">
+          <text class="uni-list-cell-left">联系电话:</text>
+          <view class="uni-list-cell-db-2">
+            <input type="number" maxlength="11" class="uni-input-2" v-model="formData.phone" />
+          </view>
+        </view>
+        <!-- 故障原因 -->
+        <view class="os-headline-2">
+          <text class="os-list-cell-left-2">故障原因:</text>
+          <view class="os-list-cell-db-2">
+            <!-- <input class="os-input-2" type="text" maxlength=50 v-model="formData.os" /> -->
+            <textarea
+              @input="sumfrontnum"
+              maxlength="50"
+              class="os-input-2"
+              placeholder="工单描述,50字以内"
+              placeholder-style="font-size:24rpx"
+            ></textarea>
+          </view>
+          <view>
+            <text class="num">{{ fontnum }}/50</text>
+          </view>
+        </view>
+        <!-- 照片 -->
+        <view class="photo">
+          <view class="photo-title">上传图片(最多上传3张):</view>
+          <view class="upload-image-view">
+            <uni-file-picker
+              limit="3"
+              :value="imageValue"
+              fileMediatype="image"
+              :image-styles="imageStyles"
+              mode="grid"
+              @select="select"
+              @delete="handleDelete"
+            ></uni-file-picker>
+          </view>
+        </view>
+        <!-- 备注 -->
+
+        <button type="default" class="up" @click="getList">立即提交</button>
+      </view>
+    </form>
+  </view>
+</template>
+
+<script>
+import * as TranslateImage from '../../utils/imageZip.js'
+import '../../static/upload-imgs.css'
+import MxDatePicker from '@/components/mx-datepicker'
+export default {
+  components: {
+    MxDatePicker,
+  },
+  data() {
+    return {
+      imageStyles: {
+        width: 75,
+        height: 75,
+        border: {
+          color: '#ccc',
+          width: 1,
+          style: 'dashed',
+          radius: '5px',
+        },
+      },
+      imageList: [], //保存图片路径集合
+      List: [],
+      index: '',
+      faultName: null,
+      pickerData: '',
+      buildId: 1,
+      floorId: 1,
+      roomId: 1,
+      formData: {
+        phone: '',
+        inputphone: '',
+        os: '',
+      },
+      showPicker: false,
+      datetime: '',
+      rangetime: '',
+      type: 'rangetime',
+      timeValue: '',
+      imgs: null,
+      imageValue: [],
+      ceshiData1: [],
+      Timer: null,
+      room_List: [[], [], []],
+      roomIndex: null,
+      IdList: [],
+      IdList2: [],
+      count: 0,
+      count2: 0,
+      dormNumber: null,
+      fontnum: 0,
+    }
+  },
+  onLoad() {
+    this.getStudentInformation()
+    this.getTime()
+    this.getfault()
+    this.init()
+  },
+
+  methods: {
+    async init() {
+      await this.getbuild()
+      await this.getbuildHigh()
+      await this.getrooms()
+    },
+    // 获取学生数据
+    getStudentInformation() {
+      let res = uni.getStorageSync('student')
+      // console.log(res)
+      if (res) {
+        this.formData.phone = res.studentPhone
+        this.formData.inputphone = res.studentOtherPhone
+        this.dormNumber = res.dormNumber
+      }
+    },
+    //统计textarea字数
+    sumfrontnum(e) {
+      console.log(e)
+      this.fontnum = e.detail.value.length
+    },
+    // 初始化时间
+    getTime() {
+      let date = new Date(),
+        year = date.getFullYear(),
+        month = date.getMonth() + 1,
+        day = date.getDate(),
+        hour = date.getHours() < 10 ? '0' + date.getHours() : date.getHours(),
+        minute = date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes(),
+        second = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds()
+      month >= 1 && month <= 9 ? (month = '0' + month) : ''
+      day >= 0 && day <= 9 ? (day = '0' + day) : ''
+      let timer = year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second
+      this.datetime = timer
+    },
+
+    // 获取故障类型信息
+    async getfault() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/fault/queryAllFaultByStatus`,
+      })
+      // console.log(res)
+      this.$nextTick(() => {
+        this.List = res.data
+      })
+    },
+
+    // 获取宿舍楼栋数据
+    async getbuild() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/build/queryAllBuild`,
+      })
+      // console.log(res)
+      let tempList = []
+      res.data.forEach((item) => {
+        tempList.push(item.buildName)
+        console.log('bulidid' + item.buildId)
+      })
+      this.$nextTick(() => {
+        this.$set(this.room_List, 0, tempList)
+      })
+    },
+
+    // 获取宿舍楼层数据
+    async getbuildHigh() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/build/queryAllFloorByBuildID?buildId=${this.buildId}`,
+      })
+      // console.log(res)
+      this.room_List[1] = []
+      this.room_List[2] = []
+      this.IdList = []
+      let tempList = []
+      res.data.forEach((item) => {
+        tempList.push(item.floorName)
+        this.IdList.push(item.floorId)
+        console.log('floorid' + item.floorId)
+      })
+      this.$nextTick(() => {
+        this.$set(this.room_List, 1, tempList)
+        this.floorId = this.IdList[this.count]
+      })
+    },
+
+    // 获取宿舍房间数据
+    async getrooms() {
+      let res = await this.$myRequest({
+        method: 'post',
+        url: `/build/queryAllRoomByFloorID?floorId=${this.floorId}`,
+      })
+      // console.log(res)
+      this.room_List[2] = []
+      this.IdList2 = []
+      let tempList = []
+      res.data.forEach((item) => {
+        tempList.push(item.roomName)
+        this.IdList2.push(item.roomId)
+        console.log('roomid' + item.roomId)
+      })
+      this.$nextTick(() => {
+        this.$set(this.room_List, 2, tempList)
+        this.roomId = this.IdList2[this.count2]
+      })
+    },
+
+    // 时间选择框
+    onShowDatePicker(type) {
+      this.type = type
+      this.showPicker = true
+      this.timeValue = this[type]
+    },
+
+    // 时间选择框点击回调
+    onSelected(e) {
+      this.showPicker = false
+      if (e) {
+        this[this.type] = e.value
+        this.timeValue = e.value
+      }
+    },
+
+    //故障选择
+    bindPickerChange(e, storage) {
+      this.index = e.target.value
+      this.pickerData = storage[this.index] // 这里就是选中的对象
+    },
+
+    // 提交订单
+    getList() {
+      console.log('ppppp' + this.buildId + '-' + this.floorId + '-' + this.roomId)
+      // 处理图片参数数据
+      this.imgs = this.ceshiData1.join(';')
+      // 电话验证规则
+      let phoneVer = /^[1][3,4,5,7,8,9][0-9]{9}$/
+      // 简单校验
+      if (this.pickerData.faultId == null) {
+        uni.showToast({
+          icon: 'none',
+          title: '请选择故障类型',
+          duration: 2000,
+        })
+        return
+      }
+      if (this.dormNumber == null) {
+        uni.showToast({
+          icon: 'none',
+          title: '请选择楼栋和宿舍号',
+          duration: 2000,
+        })
+        return
+      }
+
+      if (!this.timeValue) {
+        uni.showToast({
+          icon: 'none',
+          title: '请选择预期时间',
+          duration: 2000,
+        })
+        return
+      }
+
+      if (!this.formData.phone) {
+        uni.showToast({
+          title: '请输入联系电话',
+          icon: 'none',
+        })
+        return
+      } else if (!phoneVer.test(this.formData.phone)) {
+        uni.showToast({
+          title: '请输入正确的联系电话',
+          icon: 'none',
+        })
+        return
+      }
+
+      uni.showLoading({
+        title: '提交中',
+      })
+
+      if (this.Timer != null) {
+        clearTimeout(this.Timer)
+      }
+      this.Timer = setTimeout(async () => {
+        let res = await this.$myRequest({
+          method: 'post',
+          url: `/order/insertOrder`,
+          data: {
+            faultId: String(this.pickerData.faultId),
+            dormNumber: this.dormNumber,
+            orderExpectedTime: this.timeValue,
+            studentDormitory: this.buildId + '-' + this.floorId + '-' + this.roomId,
+            orderImages: this.imgs,
+            orderNote: this.formData.os,
+            studentPhone: this.formData.phone,
+            otherPhone: this.formData.inputphone,
+          },
+        })
+        // console.log(res)
+        if (res.status == 200) {
+          uni.showToast({
+            title: '提交成功',
+          })
+          uni.reLaunch({
+            url: '/pages/home/home',
+          })
+        } else {
+          uni.showToast({
+            title: '提交失败',
+            icon: 'error',
+          })
+        }
+      }, 1500)
+    },
+
+    // 选择图片压缩并上传
+    select(e) {
+      // console.log('选择文件:', e)
+      e.tempFiles.forEach((item) => {
+        TranslateImage.translate(item.path, (res) => {
+          if (Number(res.size) > 1000000) {
+            this.imageValue = []
+            uni.showModal({
+              content: `图片过大,请重新上传`,
+              showCancel: false,
+              success() {},
+            })
+            return
+          }
+          uni.showLoading({
+            title: '上传中',
+          })
+          uni.uploadFile({
+            url: `/baoxiu/repairApi/order/uploadImage`,
+            filePath: res.url,
+            name: 'orderImages',
+            success: (uploadFileRes) => {
+              this.ceshiData1.push(JSON.parse(uploadFileRes.data).data)
+              const path = item.path
+              this.imageValue.push({
+                url: path,
+                name: '',
+              })
+              uni.hideLoading()
+            },
+            fail: () => {
+              uni.hideLoading()
+            },
+          })
+        })
+      })
+    },
+
+    // 删除图片回调
+    handleDelete(e) {
+      const num = this.imageValue.findIndex((v) => v.path === e.tempFilePath)
+      this.imageValue.splice(num, 1)
+      this.ceshiData1.splice(num, 1)
+    },
+
+    // 三级联动下拉框回调
+    bindPickerChange_room(e) {
+      console.log('picker发送选择改变,携带值为', e.detail.value)
+      this.roomIndex = e.detail.value
+      this.dormNumber =
+        this.room_List[0][this.roomIndex[0]] +
+        this.room_List[1][this.roomIndex[1]] +
+        this.room_List[2][this.roomIndex[2]]
+      console.log('mmmmmm' + this.buildId + '-' + this.floorId + '-' + this.roomId)
+    },
+
+    // 三级联动下拉框拖动回调
+    handleNum(e) {
+      console.log('第' + (e.detail.column + 1) + '列' + '第' + (e.detail.value + 1) + '行')
+      if (e.detail.column == 0) {
+        console.log('楼栋发生变化,当前为' + (e.detail.value + 1) + '栋')
+        // if (e.detail.value < 4) {
+        this.buildId = e.detail.value + 1
+        // } else {
+        // this.buildId = e.detail.value + 5
+        // }
+        // console.log(this.buildId + '-' + this.floorId + '-' + this.roomId)
+      } else if (e.detail.column == 1) {
+        // console.log("层数发生变化,当前为"+(e.detail.value+1)+"层")
+        this.floorId = this.IdList[e.detail.value]
+        this.count = e.detail.value
+        // console.log(this.buildId + '-' + this.floorId + '-' + this.roomId)
+      } else {
+        // console.log("房间数发生变化,当前为"+(e.detail.value+1)+"号")
+        this.roomId = this.IdList2[e.detail.value]
+        this.count2 = e.detail.value
+        console.log('zuizong' + this.buildId + '-' + this.floorId + '-' + this.roomId)
+      }
+    },
+  },
+
+  // 监听属性
+  watch: {
+    buildId: {
+      handler() {
+        this.getbuildHigh()
+      },
+    },
+    floorId: {
+      handler() {
+        this.getrooms()
+      },
+    },
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.list_body {
+  height: 100%;
+  overflow: hidden;
+  background-color: rgba(166, 166, 166, 0.18);
+}
+
+.box {
+  position: fixed;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+  background: rgba(0, 0, 0, 0.3);
+  z-index: 99;
+}
+
+.test {
+  text-align: center;
+  padding: 20rpx 0;
+}
+
+button {
+  margin: 20rpx;
+  font-size: 28rpx;
+}
+
+.head {
+  height: 550rpx;
+  margin-top: -80rpx;
+}
+
+.head image {
+  width: 100%;
+}
+
+.headline-1 {
+  font-size: 24rpx;
+}
+
+.headline-2 {
+  font-size: 24rpx;
+  height: 80rpx;
+  // margin-top: 0px;
+  border-bottom: 2rpx solid rgba(166, 166, 166, 0.18);
+}
+
+.content {
+  position: relative;
+  // width: 720rpx;
+  height: 1260rpx;
+  margin-top: -152rpx;
+  // margin-left: 14rpx;
+  // border: 2rpx solid rgba(128, 128, 128, 0.45);
+  background-color: rgba(255, 255, 255, 1);
+}
+
+.uni-list-cell {
+  float: right;
+  width: 78%;
+  height: 70rpx;
+  margin-top: 8rpx;
+  // margin-right: 10rpx;
+  // border: 2rpx solid gray;
+  line-height: 44rpx;
+  // border-radius: 16px;
+  // background-color: rgba(166, 166, 166, 0.18);
+}
+
+.uni-list-cell-os {
+  float: right;
+  width: 78%;
+  height: 70rpx;
+  margin-top: 2rpx;
+  // margin-right: 10rpx;
+  // border: 2rpx solid gray;
+  line-height: 44rpx;
+  // border-radius: 16px;
+  // background-color: rgba(166, 166, 166, 0.18);
+}
+
+// .uni-list-cell_image {
+// 	float: right;
+// 	margin-right: 15rpx;
+// 	margin-top: -42rpx;
+// 	width: 40rpx;
+// 	height: 40rpx;
+// 	font-size: 40rpx;
+// }
+
+.uni-input-1 {
+  position: relative;
+  margin-left: 254rpx;
+  margin-top: 14rpx;
+  height: 50rpx;
+}
+
+.uni-input-1 image {
+  position: absolute;
+  right: 10rpx;
+  top: 5rpx;
+  // float: right;
+  // margin-right: 10rpx;
+  // // margin-top: -10rpx;
+  width: 40rpx;
+  height: 40rpx;
+  font-size: 40rpx;
+}
+
+.uni-list-cell-left {
+  float: left;
+  margin-top: 26rpx;
+  margin-left: 30rpx;
+
+  text {
+    color: red;
+  }
+}
+
+.uni-list-cell-left-2 {
+  float: left;
+  margin-left: 30rpx;
+  margin-top: 26rpx;
+
+  text {
+    color: red;
+  }
+}
+
+.uni-list-cell-db-2 {
+  position: relative;
+  float: right;
+  // margin-right: 10rpx;
+  margin-top: 6rpx;
+  width: 78%;
+  height: 70rpx;
+  // border: 2rpx solid gray;
+  // border-radius: 16px;
+  // background-color: rgba(166, 166, 166, 0.18);
+}
+
+.uni-input-2 {
+  margin-left: 334rpx;
+  margin-top: 16rpx;
+  font-size: 24rpx;
+}
+
+.uni-input-2 image {
+  float: right;
+  margin-right: 10rpx;
+  width: 40rpx;
+  height: 40rpx;
+  font-size: 40rpx;
+}
+
+.timeimg {
+  position: absolute;
+  right: 9rpx;
+  top: 16rpx;
+  width: 40rpx;
+  height: 40rpx;
+  font-size: 40rpx;
+}
+
+.photo {
+  height: 340rpx;
+  font-size: 24rpx;
+}
+
+.photo-title {
+  float: left;
+  margin-left: 26rpx;
+  margin-top: 30rpx;
+  margin-bottom: 30rpx;
+}
+
+.upload-image-view {
+  /* height: 300px; */
+}
+
+.image {
+  float: left;
+  margin-left: 26rpx;
+  margin-top: 30rpx;
+  height: 396rpx;
+  width: 644rpx;
+  box-sizing: border-box;
+  border-radius: 28rpx;
+  background-color: rgba(166, 166, 166, 0.18);
+}
+
+.imageText {
+  text-align: center;
+  border-radius: 28rpx;
+  width: 100%;
+  height: 100%;
+  background-color: rgba(166, 166, 166, 0.18);
+}
+
+.imgSrc image {
+  width: 646rPX;
+  height: 386rpx;
+}
+
+.os-headline-2 {
+  position: relative;
+  float: left;
+}
+
+.os-list-cell-left-2 {
+  float: left;
+  margin-left: 26rpx;
+  margin-top: 25rpx;
+  font-size: 24rpx;
+}
+
+.os-input-2 {
+  margin-left: 10rpx;
+  margin-top: 12rpx;
+  width: 97%;
+  font-size: 28rpx;
+  line-height: 100%;
+}
+
+.os-list-cell-db-2 {
+  float: right;
+  width: 720rpx;
+  height: 200rpx;
+  margin-left: -130rpx;
+  margin-top: 64rpx;
+  border-radius: 16rpx;
+  // border: 2rpx solid gray;
+  // background-color: rgba(166, 166, 166, 0.18);
+}
+
+.os-headline-2 .num {
+  position: absolute;
+  top: 210rpx;
+  right: 20rpx;
+  font-size: 24rpx;
+}
+
+.up {
+  position: absolute;
+  bottom: 200rpx;
+  left: 18%;
+  line-height: 72rpx;
+  width: 60%;
+  height: 36px;
+  background-color: rgba(42, 130, 228, 1);
+  color: white;
+  font-size: 14px;
+  border-radius: 14px;
+}
+
+.example-body {
+  padding: 10px;
+  padding-top: 0;
+}
+
+.custom-image-box {
+  /* #ifndef APP-NVUE */
+  display: flex;
+  /* #endif */
+  flex-direction: row;
+  justify-content: space-between;
+  align-items: center;
+}
+
+.text {
+  font-size: 14px;
+  color: #333;
+}
+
+.time {
+  margin-top: 350rpx;
+  font-size: 24rpx;
+  margin-left: 26rpx;
+}
+
+.time-input {
+  position: relative;
+  margin-top: -44rpx;
+  margin-left: 135rpx;
+  /* margin-right: 137px; */
+  width: 300rpx;
+  border: 2rpx solid gray;
+}
+</style>

+ 132 - 0
pages/select-identity/index.vue

@@ -0,0 +1,132 @@
+<template>
+	<view>
+		<view class="content">
+			<!-- 学生选择按钮 -->
+			<button class="student" @click="getStudentId">
+				<view class="stu">
+					学生
+				</view>
+				<view class="stu_point">
+					学生选择此项
+				</view>
+				<view class="stu_img">
+					<image src="../../static/stu_img.svg" mode=""></image>
+				</view>
+			</button>
+
+			<!-- 维修人员选择按钮 -->
+			<button class="worker" @click="getlogin">
+				<view class="work">
+					维修人员
+				</view>
+				<view class="work_point">
+					维修人员选择此项
+				</view>
+				<view class="work_img">
+					<image src="../../static/work_img.svg" mode=""></image>
+				</view>
+			</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+
+			}
+		},
+		methods: {
+			//维修工登录跳转页面
+			getlogin() {
+				uni.reLaunch({
+					url: '../login/login',
+				})
+			},
+			//用户登录跳转页面
+			async getStudentId() {
+				uni.reLaunch({
+					url: '../login-filter/login-filter'
+				})
+			},
+		}
+	}
+</script>
+
+<style>
+	.content {
+		flex-direction: column;
+		display: flex;
+		height: 100vh;
+		padding: 0 10rpx;
+	}
+
+	.student {
+		position: relative;
+		width: 702rpx;
+		height: 300rpx;
+		margin-top: 200rpx;
+		border-radius: 32rpx;
+		background-color: rgba(42, 69, 228, 0.89);
+	}
+
+	.student .stu {
+		position: absolute;
+		top: 34rpx;
+		left: 50rpx;
+		font-size: 56rpx;
+		font-weight: 700;
+		color: rgba(255, 255, 255, 1);
+	}
+
+	.student .stu_point {
+		position: absolute;
+		top: 140rpx;
+		left: 160rpx;
+		font: 32rpx;
+		color: rgba(255, 255, 255, 1);
+	}
+
+	.student image {
+		position: absolute;
+		right: 40rpx;
+		top: 72rpx;
+		width: 152rpx;
+		height: 152rpx;
+	}
+
+	.worker {
+		position: relative;
+		width: 702rpx;
+		height: 300rpx;
+		margin-top: 114rpx;
+		border-radius: 32rpx;
+		background-color: rgba(42, 130, 228, 1);
+	}
+
+	.worker .work {
+		position: absolute;
+		top: 34rpx;
+		left: 50rpx;
+		font-size: 56rpx;
+		font-weight: 700;
+		color: rgba(255, 255, 255, 1);
+	}
+
+	.worker .work_point {
+		position: absolute;
+		top: 140rpx;
+		left: 160rpx;
+		font: 32rpx;
+		color: rgba(255, 255, 255, 1);
+	}
+
+	.worker image {
+		position: absolute;
+		right: 40rpx;
+		top: 72rpx;
+		width: 152rpx;
+		height: 152rpx;
+	}
+</style>

+ 8 - 30
project.config.json

@@ -1,8 +1,9 @@
 {
     "description": "项目配置文件",
-    "miniprogramRoot": "./dist/dev/mp-weixin/app.json",
+    "miniprogramRoot": "dist/dev/mp-weixin/app.json/",
     "packOptions": {
-        "ignore": []
+        "ignore": [],
+        "include": []
     },
     "setting": {
         "urlCheck": true,
@@ -46,33 +47,10 @@
     "libVersion": "2.23.2",
     "appid": "wx5517300868ed7286",
     "projectname": "miniRepairPro",
-    "debugOptions": {
-        "hidedInDevtools": []
-    },
-    "scripts": {},
-    "staticServerOptions": {
-        "baseURL": "",
-        "servePath": ""
-    },
-    "isGameTourist": false,
-    "condition": {
-        "search": {
-            "list": []
-        },
-        "conversation": {
-            "list": []
-        },
-        "game": {
-            "list": []
-        },
-        "plugin": {
-            "list": []
-        },
-        "gamePlugin": {
-            "list": []
-        },
-        "miniprogram": {
-            "list": []
-        }
+    "condition": {},
+    "srcMiniprogramRoot": "dist/dev/mp-weixin/app.json/",
+    "editorSetting": {
+        "tabIndent": "insertSpaces",
+        "tabSize": 4
     }
 }

+ 7 - 0
project.private.config.json

@@ -0,0 +1,7 @@
+{
+    "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html",
+    "projectname": "chuanghaikeji-smarCampus-repairForMiniProgram-",
+    "setting": {
+        "compileHotReLoad": true
+    }
+}

BIN
static/1.jpg


BIN
static/2.jpg


BIN
static/3.png


BIN
static/4.png


BIN
static/index-img.jpg


BIN
static/information.png


BIN
static/list-img.png


BIN
static/put.png


+ 284 - 0
static/styles/base/global.scss

@@ -0,0 +1,284 @@
+/**
+ * 全局样式
+ * @since 1.0.0
+ * @version 1.0.0
+ *
+ * @markdown
+ *
+ * # 更新日志
+ *
+ * ### 2017/03/114
+ *   - [feature] input,textarea,button上的:focus伪类上移除浏览器默认增加的聚焦外框
+ */
+
+/* 内外边距通常让各个浏览器样式的表现位置不同 */
+body,
+div,
+dl,
+dt,
+dd,
+ul,
+ol,
+li,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+pre,
+code,
+form,
+fieldset,
+legend,
+input,
+textarea,
+p,
+blockquote,
+th,
+td,
+hr,
+button,
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+menu,
+nav,
+section {
+  margin: 0;
+  padding: 0;
+}
+
+* {
+  box-sizing: border-box;
+
+  /* 提升动画性能 避免闪烁 msl 但是会照成字发虚,模糊,按需针对开启 */
+  //  backface-visibility: hidden
+
+  /* 大于0时,会造成iOS字体模糊,提升Android动画性能 */
+  // perspective: 0;
+  // /*提升动画性能*/
+  // transform: translate3d(1, 1, 1)
+  // /*提升动画性能*/
+  // opacity: 1
+}
+
+/* 更改盒子模型 */
+//*,
+//*:hover,
+//*:focus {
+//  /* ios下滚动流畅 */
+//  -webkit-overflow-scrolling: touch;
+//}
+
+/* 防止用户自定义背景颜色对网页的影响,添加让用户可以自定义字体 */
+html {
+  // background-color: $ui-clr-bg-comp;
+  font-size: $global-root-font-size;
+  // min-height: 100vh;
+  // min-width: 100vw;
+  height: -webkit-fill-available;
+  width: 100vw;
+  -webkit-text-size-adjust: 100%;
+  // background-color: aqua;
+}
+
+/* 保证层高 */
+body {
+  color: $ui-clr-text-pri;
+  // background-color: $ui-clr-bg-comp;
+  // font-family: $global-font-family;
+  // font-size: $global-font-size;
+  line-height: $global-line-height;
+  margin: 0 auto;
+  // padding-top: env(safe-area-inset-top);
+  // padding-left: env(safe-area-inset-left);
+  // padding-right: env(safe-area-inset-right);
+  // padding-bottom: env(safe-area-inset-bottom);
+  // min-height: 100vh;
+  // min-width: 100vw;
+  width: 100%;
+  height: -webkit-fill-available;
+  text-align: justify;
+  // user-select: none;
+  word-break: break-all;
+  word-wrap: break-word;
+}
+
+html,
+body {
+  // -webkit-overflow-scrolling: touch; // 弹性滚动
+  -webkit-tap-highlight-color: transparent;
+}
+
+li {
+  list-style-type: none;
+}
+
+// 去掉ios android
+textarea,
+input,
+button {
+  -webkit-appearance: none;
+  appearance: none;
+  border: 0;
+  border-radius: 0;
+  resize: none;
+  -webkit-tap-highlight-color: initial;
+}
+
+button {
+  background-color: transparent;
+  line-height: 1;
+}
+
+select {
+  -webkit-appearance: none;
+  appearance: none;
+  background: none;
+  border: none;
+  font-size: 100%;
+}
+
+input,
+textarea {
+  background-color: transparent;
+  border: 0;
+  color: $ui-clr-text-comp; // 表单元素的字体颜色不会继承,设置为辅助文字色
+  font-size: 1em;
+  line-height: $global-line-height; // 表单元素的行高不会继承,设置为基础行高
+  resize: none; // 不可调整尺寸
+}
+
+input::-webkit-input-placeholder {
+  color: #b8b8b8;
+}
+
+input::-ms-input-placeholder {
+  color: #b8b8b8;
+}
+
+input::-moz-placeholder {
+  color: #b8b8b8;
+}
+
+input[type='submit'],
+input[type='button'],
+input[type='reset'] {
+  line-height: 1;
+}
+
+textarea:focus,
+input:focus,
+button:focus {
+  outline: 0;
+}
+
+// 去掉ios android
+
+a {
+  color: $ui-clr-a-link;
+  // z-index: $ui-g-zindex-map.lg // 将连接的堆叠层级升高,用以避免移动端1px问题模拟产生的无法点击问题
+  cursor: pointer;
+  position: relative;
+  -webkit-tap-highlight-color: initial;
+  text-decoration: none;
+  -webkit-touch-callout: none;
+}
+
+i {
+  font-style: normal;
+}
+
+b {
+  font-weight: normal;
+}
+
+/* img样式初始化 */
+img {
+  backface-visibility: hidden;
+  max-width: 100%;
+  -webkit-touch-callout: none;
+}
+
+/* iframe 样式初始化 */
+iframe {
+  display: none;
+}
+
+table {
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+
+.clearfix:after {
+  content: '';
+  display: block;
+  height: 0;
+  visibility: hidden;
+  clear: both;
+}
+
+.clearfix {
+  *zoom: 1;
+}
+
+.full {
+  position: fixed !important;
+  top: 0;
+  left: 0;
+  bottom: 0;
+  right: 0;
+  overflow: auto;
+}
+
+.bold {
+  font-weight: bold;
+}
+
+.user-select-text {
+  user-select: text;
+}
+
+.receipt-status {
+  padding: 8px !important;
+  .label {
+    font-size: 14px;
+    text-align: center;
+    height: 28px;
+    line-height: 28px;
+    border-radius: 4px;
+    color: #ff8c39;
+    background-color: #fff3eb;
+    margin-left: 8px;
+    padding: 0 6px;
+    &.success {
+      color: #39dc5a;
+      background-color: #ebfbee;
+    }
+    &.invalid {
+      color: #1d1409;
+      background-color: #e8e7e6;
+    }
+    span {
+      display: inline-block;
+    }
+  }
+
+  &--right {
+    font-size: 15px;
+    color: #7468f2;
+    line-height: 20px;
+  }
+
+  .receipt-status-icon {
+    width: 16px;
+    height: 16px;
+    margin-right: 4px;
+  }
+}

+ 6 - 0
static/styles/base/index.scss

@@ -0,0 +1,6 @@
+/**
+ * 基础样式入口
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+@import './global';

+ 16 - 0
static/styles/core/function.scss

@@ -0,0 +1,16 @@
+/**
+ * 混入定义
+ * 加上
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+
+// 增减数值
+@function increase($target, $num) {
+  @return $target + $num;
+}
+
+// 为样式模块加上命名空间
+@function namespace($str) {
+  @return $global-ui-namespace + $str;
+}

+ 8 - 0
static/styles/core/index.scss

@@ -0,0 +1,8 @@
+/**
+ * 核心辅助样式入口,定义变量,继承,混合,函数等
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+@import './function';
+@import './mixin';
+@import './variable';

+ 82 - 0
static/styles/core/mixin.scss

@@ -0,0 +1,82 @@
+/**
+ * 混入定义
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+
+/* 定义1px边框 */
+@mixin border-side($side-list, $color, $width: 1) {
+  /* todo 抛出错误,提示,未定义颜色值 */
+  $top: '';
+  $bottom: '';
+  $left: '';
+  $right: '';
+  $image-url: '';
+
+  @each $side, $index in $side-list {
+    @if ($side == t) {
+      $top: "<line x1='0%' y1='0%' x2='100%' y2='0%' style='stroke:" + $color + ';stroke-width:' + $width + "' />";
+    }
+
+    @if ($side == b) {
+      $bottom: "<line x1='0%' y1='100%' x2='100%' y2='100%' style='stroke:" +
+        $color +
+        ';stroke-width:' +
+        $width +
+        "' />";
+    }
+
+    @if ($side == l) {
+      $left: "<line x1='0%' y1='0%' x2='0%' y2='100%' style='stroke:" + $color + ';stroke-width:' + $width + "' />";
+    }
+
+    @if ($side == r) {
+      $right: "<line x1='100%' y1='0%' x2='100%' y2='100%' style='stroke:" +
+        $color +
+        ';stroke-width:' +
+        $width +
+        "' />";
+    }
+
+    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='100%' height='100%'> " + $top + $bottom + $left + $right + ' </svg>');
+  }
+}
+
+/* 构建边框序列 */
+@mixin generate-border($side-list, $color) {
+  .#{$ui-border}.#{$side-list} {
+    @include border-side(t b l r, $color);
+  }
+
+  .#{$ui-border + '-t'}.#{$side-list} {
+    @include border-side(t, $color);
+  }
+
+  .#{$ui-border + '-b'}.#{$side-list} {
+    @include border-side(b, $color);
+  }
+
+  .#{$ui-border + '-l'}.#{$side-list} {
+    @include border-side(l, $color);
+  }
+
+  .#{$ui-border + '-r'}.#{$side-list} {
+    @include border-side(r, $color);
+  }
+}
+
+/* 多行文本省略,默认省略单行 */
+@mixin text-overflow($len: 1) {
+  @if $len == 1 {
+    display: block;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+    overflow: hidden;
+  } @else {
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: $len;
+    overflow: hidden;
+  }
+}

+ 87 - 0
static/styles/core/variable.scss

@@ -0,0 +1,87 @@
+/**
+ * 样式变量定义
+ * [注]变量名前需要加上'$'前缀,以方便与其他类型定义区分
+ * [注]色调命名约定:pri=主色调,comp=辅色调,cont=对比色调,spec=特殊色调
+ * [注]色调命名约定:safe=安全色,succ=成功色,warn=警告色,dang=危险色
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+
+/* ==========================================================================
+    全局变量
+========================================================================== */
+$global-ui-namespace: ''; // 命名空间前缀
+$global-sketch-width: 750; // 默认设计稿尺寸
+$global-min-width: 320px; // 默认最小宽度
+$global-max-width: 100vw; // 默认最大宽度
+$global-root-font-size: 13.33334vw; // 根html字体尺寸
+$global-font-size: 28px; // 默认字体尺寸
+$global-line-height: 40px; // 默认字体行间距
+$global-font-family : PingFangSC, 'Helvetica Neue', Helvetica, STHeiTi, Arial, 'Hiragino Sans GB', 'Microsoft Yahei', 'Apple Color Emoji', 'Segoe UI Emoji', 'NotoColorEmoji', 'Segoe UI Symbol', 'Android Emoji', 'EmojiSymbols', sans-serif;
+// $global-font-family: sans-serif;
+
+/* ==========================================================================
+    颜色变量
+========================================================================== */
+
+// 主题色调
+$ui-clr-pri: #7468f2; // 风格主色调 primary
+$ui-clr-comp: null; // 风格辅助色调 complementary
+$ui-clr-cont: null; // 风格对比色调 contrast
+$ui-clr-spec: null; // 风格特殊色调 special
+
+// 文字色调
+$ui-clr-text-pri: #333333; // 文字主色调
+$ui-clr-text-comp: #666666; // 文字辅助色调
+$ui-clr-text-cont: #999999; // 文字对比色调
+$ui-clr-text-spec: #ffffff; // 文字特殊色调
+
+// 背景色调
+$ui-clr-bg-pri: #ffffff; // 背景主色调
+$ui-clr-bg-comp: #f4f4f4; // 背景色辅色调
+$ui-clr-bg-cont: null; // 前景对比色调
+$ui-clr-bg-spec: null; // 前景特殊色调
+
+// 边框线色调
+$ui-clr-line-pri: #e0e0e0; // 边框线主色调
+$ui-clr-line-comp: #979797; // 边框线辅助色调
+$ui-clr-line-cont: null; // 边框线对比色调
+$ui-clr-line-spec: null; // 边框线特殊色调
+
+// 安全状态色调
+$ui-clr-safe-pri: null;
+$ui-clr-safe-comp: null;
+$ui-clr-safe-cont: null;
+$ui-clr-safe-spec: null;
+
+// 成功状态色调
+$ui-clr-succ-pri: null;
+$ui-clr-succ-comp: null;
+$ui-clr-succ-cont: null;
+$ui-clr-succ-spec: null;
+
+// 警告状态色调
+$ui-clr-warn-pri: null;
+$ui-clr-warn-comp: null;
+$ui-clr-warn-cont: null;
+$ui-clr-warn-spec: null;
+
+// 危险状态色调
+$ui-clr-dang-pri: #fe3d43;
+$ui-clr-dang-comp: null;
+$ui-clr-dang-cont: null;
+$ui-clr-dang-spec: null;
+
+// 可变状态颜色:active=活动状态,hover=悬浮状态,focus=焦点状态,visited=已访问状态,selected=选中状态,checked=勾选状态,disabled=不可用状态等
+$ui-clr-status-disabled: null;
+
+// 链接颜色 love hate
+$ui-clr-a-link: $ui-clr-text-pri;
+$ui-clr-a-visited: null;
+$ui-clr-a-hover: null;
+$ui-clr-a-active: null;
+
+// 点击反馈背景色 feed-back
+// $ui-clr-feedback: rgba(51, 181, 229, 0.4);
+$ui-clr-feedback: rgba(69, 78, 82, 0.4);
+

+ 76 - 0
static/styles/cover-vant.css

@@ -0,0 +1,76 @@
+/* 覆盖vant样式css */
+:root {
+  /* 按钮 */
+  --van-button-primary-background-color: #7468F2;
+  --van-button-primary-border-color: transparent;
+  --van-button-primary-color: #ffffff;
+  --van-button-default-background-color: #eee;
+  --van-button-default-color: #333;
+  --van-button-normal-font-size: 16px;
+  --van-search-padding: 0;
+  /* cell 左右边距 */
+  --van-cell-horizontal-padding: 10px;
+  --van-nav-bar-height: 44px;
+  --van-nav-bar-icon-color: #333333;
+  --van-nav-bar-arrow-size: 16px;
+  --van-nav-bar-title-font-size: 16px;
+  --van-font-weight-bold: 600;
+  /* 表单input字体样式 */
+  --van-field-placeholder-text-color: #999999;
+  --van-field-input-text-color: #333333;
+  /* 弹窗确认按钮颜色 */
+  --van-dialog-confirm-button-text-color: #7468F2 !important;
+  --van-padding-xs: 10px;
+  --van-action-sheet-close-icon-color: #333333;
+  --van-action-sheet-close-icon-size: 18px;
+}
+
+.van-hairline--bottom::after {
+  border-bottom-width: 0 !important;
+}
+
+.van-button {
+  border-radius: 8px !important;
+  -webkit-tap-highlight-color: rgba(0, 0, 0, 0.2);
+}
+
+.van-button--default {
+  background: #ffffff;
+}
+
+.van-dialog__header {
+  padding-top: 20px !important;
+  font-size: 18px;
+}
+
+.van-action-sheet__item,
+.van-action-sheet__cancel {
+  font-size: 17px;
+  line-height: 24px;
+  color: #000000;
+  -webkit-tap-highlight-color: transparent;
+}
+
+.van-action-sheet__item {
+  position: relative;
+}
+
+.van-action-sheet__item::after {
+  content: '';
+  position: absolute;
+  width: 100%;
+  height: 1px;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  transform: scaleY(0.5);
+  background-color: rgba(0, 0, 0, 0.1);
+}
+
+.van-action-sheet__content :last-child::after{
+  border-bottom: none;
+}
+
+.van-dialog__confirm {
+  font-weight: 600;
+}

+ 39 - 0
static/styles/main.scss

@@ -0,0 +1,39 @@
+/**
+ * 主题样式入口
+ * 以及业务使用的全局样式放在这里
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+@import './core/index';
+@import './base/index';
+@import './modules/index';
+
+.normal-color {
+  color: #7468f2;
+}
+
+.bold {
+  font-weight: 600;
+}
+
+.statue-label {
+  height: 22px;
+  line-height: 24px;
+  border-radius: 4px;
+  font-size: 14px;
+  width: 60px;
+  text-align: center;
+  // 作废
+  &.label-invalid {
+    background-color: #e8e7e6;
+    color: #999999;
+  }
+  &.label-success {
+    background-color: #ebfbee !important;
+    color: #39dc5a;
+  }
+  &.label-draft {
+    background-color: #fff3eb;
+    color: #ff8c39;
+  }
+}

+ 5 - 0
static/styles/modules/animation.scss

@@ -0,0 +1,5 @@
+/**
+ * 动画效果相关快捷样式类
+ * @since 1.0.0
+ * @version 1.0.0
+ */

+ 93 - 0
static/styles/modules/border-radius.scss

@@ -0,0 +1,93 @@
+.bdr0 {
+  overflow: hidden;
+  border-radius: 0;
+}
+
+.bdr0 {
+  overflow: hidden;
+  border-radius: 0;
+}
+
+.bdr4 {
+  overflow: hidden;
+  border-radius: 4px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+}
+
+.bdr4 {
+  overflow: hidden;
+  border-radius: 4px;
+}
+
+.bdr8 {
+  overflow: hidden;
+  border-radius: 8px;
+}
+
+.bdr8 {
+  overflow: hidden;
+  border-radius: 8px;
+}
+
+.bdr10 {
+  overflow: hidden;
+  border-radius: 10px;
+}
+
+.bdr10 {
+  overflow: hidden;
+  border-radius: 10px;
+}
+
+.bdr16 {
+  overflow: hidden;
+  border-radius: 16px;
+}
+
+.bdr16 {
+  overflow: hidden;
+  border-radius: 16px;
+}
+
+.bdr18 {
+  overflow: hidden;
+  border-radius: 18px;
+}
+
+.bdr18 {
+  overflow: hidden;
+  border-radius: 18px;
+}
+
+.bdr20 {
+  overflow: hidden;
+  border-radius: 20px;
+}
+
+.bdr20 {
+  overflow: hidden;
+  border-radius: 20px;
+}
+
+.bdr30 {
+  overflow: hidden;
+  border-radius: 30px;
+}
+
+.bdr30 {
+  overflow: hidden;
+  border-radius: 30px;
+}
+
+.bdrfull {
+  overflow: hidden;
+  border-radius: 50%;
+}
+
+.bdrfull {
+  overflow: hidden;
+  border-radius: 50%;
+}

+ 117 - 0
static/styles/modules/border.scss

@@ -0,0 +1,117 @@
+/**
+ * 边框相关快捷样式类
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+
+.bd {
+  border-width: 0.5px;
+  border-style: solid;
+}
+
+.bd-t {
+  position: relative;
+
+  &::after {
+    content: ' ';
+    position: absolute;
+    width: 100%;
+    height: 1.5px;
+    left: 0;
+    right: 0;
+    top: 0;
+    transform: scaleY(0.5);
+    background-color: #eee;
+  }
+}
+
+// 小程序无法呈现1px像素
+.bd-b {
+  position: relative;
+  //border-bottom-width: 0.5px;
+  //border-bottom-style: solid;
+
+  &::after {
+    content: ' ';
+    position: absolute;
+    width: 100%;
+    height: 1.5px;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    transform: scaleY(0.5);
+    background-color: #eee;
+  }
+}
+
+.bd-b-1 {
+  position: relative;
+
+  &::after {
+    content: '';
+    position: absolute;
+    width: 100%;
+    // height: 1px;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    transform: scaleY(0.3);
+    -webkit-transform: scaleY(0.3);
+    background-color: #e0e0e0;
+    border-bottom: 1px solid rgb(235, 237, 240);
+  }
+}
+
+.bd-l {
+  position: relative;
+
+  &::after {
+    content: '';
+    position: absolute;
+    width: 1px;
+    height: 100%;
+    left: 0;
+    top: 0;
+    bottom: 0;
+    transform: scaleX(0.5);
+    background-color: #e0e0e0;
+  }
+}
+
+.bd-r {
+  position: relative;
+
+  &::after {
+    content: '';
+    position: absolute;
+    width: 1px;
+    height: 100%;
+    right: 0;
+    top: 0;
+    bottom: 0;
+    transform: scaleX(0.5);
+    background-color: #e0e0e0;
+  }
+}
+
+/* ==========================================================================
+    圆角弧度相关
+========================================================================== */
+
+$ui-border-radius: namespace('bdr');
+
+$ui-bdr-map: (
+  '0': 0,
+  '4': 4px,
+  '8': 8px,
+  '10': 10px,
+  '20': 20px,
+  '30': 30px,
+);
+
+@each $key, $value in $ui-bdr-map {
+  .#{$ui-border-radius + $key} {
+    overflow: hidden;
+    border-radius: $value;
+  }
+}

+ 253 - 0
static/styles/modules/color.scss

@@ -0,0 +1,253 @@
+/**
+ * 颜色模块,对必要的颜色样值,提供单独的类名,用于强制覆盖原样式
+ * [注]各种前缀的颜色
+ * theme - 主题色调
+ * text - 文本颜色
+ * bg - 背景色
+ * bd - 边框色
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+
+/* ==========================================================================
+    零碎
+========================================================================== */
+.clr-bg-white {
+  background-color: #ffffff;
+}
+
+.clr-bg-white80 {
+  background-color: rgba(255, 255, 255, 0.8);
+}
+
+.clr-bg-white60 {
+  background-color: rgba(255, 255, 255, 0.6);
+}
+
+.clr-bg-transparent {
+  background-color: transparent;
+}
+
+.clr-bg-gray {
+  background-color: #f8f8f8;
+}
+
+.clr-text-white {
+  color: white;
+}
+
+.clr-text-purple {
+  color: #7468f2;
+}
+
+.white {
+  color: #ffffff;
+}
+
+.blue-bg {
+  background-color: rgba(42, 130, 228, 1) !important;
+}
+
+.blue-text {
+  color: rgba(42, 130, 228, 1) !important;
+}
+/* ==========================================================================
+    主题色
+========================================================================== */
+
+$ui-theme-background-color: namespace('clr'); // 背景色命名
+$ui-theme-text-color: namespace('clr-text'); // 文字色命名
+$ui-theme-border-color: namespace('clr-bd'); // 边框色命名
+
+$ui-clr-map: (
+  'pri': $ui-clr-pri,
+  'comp': $ui-clr-comp,
+  'cont': $ui-clr-cont,
+  'spec': $ui-clr-spec,
+);
+
+$ui-theme-background-color: namespace('clr'); // 背景色命名
+$ui-theme-text-color: namespace('clr-text'); // 文字色命名
+$ui-theme-border-color: namespace('clr-bd'); // 边框色命名
+
+$ui-clr-map: (
+  'pri': $ui-clr-pri,
+  'comp': $ui-clr-comp,
+  'cont': $ui-clr-cont,
+  'spec': $ui-clr-spec,
+);
+
+@each $key, $value in $ui-clr-map {
+  @if ($value) {
+    .#{$ui-theme-background-color + '-' + $key} {
+      background-color: $value;
+    }
+
+    .#{$ui-theme-text-color + '-' + $key} {
+      color: $value;
+    }
+
+    .#{$ui-theme-border-color + '-' + $key} {
+      border-color: $value;
+    }
+  }
+}
+
+/* ==========================================================================
+    状态色
+========================================================================== */
+
+$ui-state-background-color: namespace('clr'); // 背景色命名
+$ui-state-text-color: namespace('clr-text'); // 文字色命名
+$ui-state-border-color: namespace('clr-bd'); // 边框色命名
+
+$ui-state-clr-map: (
+  'safe-pri': $ui-clr-safe-pri,
+  'safe-comp': $ui-clr-safe-comp,
+  'safe-cont': $ui-clr-safe-cont,
+  'safe-spec': $ui-clr-safe-spec,
+  'succ-pri': $ui-clr-succ-pri,
+  'succ-comp': $ui-clr-succ-comp,
+  'succ-cont': $ui-clr-succ-cont,
+  'succ-spec': $ui-clr-succ-spec,
+  'warn-pri': $ui-clr-warn-pri,
+  'warn-comp': $ui-clr-warn-comp,
+  'warn-cont': $ui-clr-warn-cont,
+  'warn-spec': $ui-clr-warn-spec,
+  'dang-pri': $ui-clr-dang-pri,
+  'dang-comp': $ui-clr-dang-comp,
+  'dang-cont': $ui-clr-dang-cont,
+  'dang-spec': $ui-clr-dang-spec,
+);
+
+@each $key, $value in $ui-state-clr-map {
+  @if ($value) {
+    .#{$ui-state-background-color + '-' + $key} {
+      background-color: $value;
+    }
+
+    .#{$ui-state-text-color + '-' + $key} {
+      color: $value;
+    }
+
+    .#{$ui-state-border-color + '-' + $key} {
+      border-color: $value;
+    }
+  }
+}
+
+/* ==========================================================================
+    常规文本色
+========================================================================== */
+$ui-text-color: namespace('tclr'); // 背景色命名
+
+$ui-text-clr-map: (
+  'pri': $ui-clr-text-pri,
+  'comp': $ui-clr-text-comp,
+  'cont': $ui-clr-text-cont,
+  'spec': $ui-clr-text-spec,
+);
+
+@each $key, $value in $ui-text-clr-map {
+  @if ($value) {
+    .#{$ui-text-color + '-' + $key} {
+      color: $value;
+    }
+  }
+}
+
+/* ==========================================================================
+    常规背景色
+========================================================================== */
+$ui-bg-color: namespace('bclr'); // 背景色命名
+
+$ui-bg-clr-map: (
+  'pri': $ui-clr-bg-pri,
+  'comp': $ui-clr-bg-comp,
+  'cont': $ui-clr-bg-cont,
+  'spec': $ui-clr-bg-spec,
+);
+
+@each $key, $value in $ui-bg-clr-map {
+  @if ($value) {
+    .#{$ui-bg-color + '-' + $key} {
+      background-color: $value;
+    }
+  }
+}
+
+/* ==========================================================================
+    常规边框色
+========================================================================== */
+$ui-line-color: namespace('bdclr'); // 背景色命名
+
+$ui-line-clr-map: (
+  'pri': $ui-clr-line-pri,
+  'comp': $ui-clr-line-comp,
+  'cont': $ui-clr-line-cont,
+  'spec': $ui-clr-line-spec,
+);
+
+@each $key, $value in $ui-line-clr-map {
+  @if ($value) {
+    .#{$ui-line-color + '-' + $key} {
+      border-color: $value;
+    }
+  }
+}
+
+.clr-gray {
+  color: #ccc;
+}
+
+.clr-999 {
+  color: #999;
+}
+
+.clr-666 {
+  color: #666;
+}
+
+.clr-333 {
+  color: #333;
+}
+
+.clr-purple {
+  color: #7468f2;
+}
+
+.clr-orange {
+  color: #ff8c39;
+}
+
+.clr-count {
+  color: #ff4539;
+}
+
+.clr-red {
+  color: red;
+}
+
+.label-state {
+  width: 66px;
+  font-size: 14px;
+  border-radius: 4px;
+  text-align: center;
+  font-weight: 400;
+  &.success {
+    color: #46c35f;
+    background: #eaf8ed;
+  }
+  &.wait {
+    color: #ff8c39;
+    background: #fff3eb;
+  }
+  &.default {
+    color: #999999;
+    background: #e8e7e6;
+  }
+  &.failure {
+    color: #333333;
+    background: #e8e7e6;
+  }
+}

+ 16 - 0
static/styles/modules/currency.scss

@@ -0,0 +1,16 @@
+.tag-grey {
+  max-width: 2.133333rem;
+  height: 0.586667rem;
+  padding: 0 0.106667rem;
+  background: #f4f4f4;
+  border-radius: 0.106667rem;
+  font-size: 0.373333rem;
+  font-weight: 400;
+  color: #333333;
+  line-height: 0.586667rem;
+  text-align: center;
+}
+
+.shadow-top{
+  box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.05);
+}

+ 98 - 0
static/styles/modules/distance.scss

@@ -0,0 +1,98 @@
+/**
+ * 内外边距相关快捷样式类
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+
+$ui-margin: namespace('m');
+$ui-padding: namespace('p');
+
+$ui-distance-map: (
+  'auto': auto,
+  '0': 0,
+  '4': 4px,
+  '8': 8px,
+  '10': 10px,
+  '12': 12px,
+  '16': 16px,
+  '20': 20px,
+  '24': 24px,
+  '32': 32px,
+  '40': 40px,
+  '48': 48px,
+  '56': 56px,
+  '64': 64px,
+  '80': 80px,
+);
+
+/* ==========================================================================
+    外边距相关
+========================================================================== */
+
+@each $key, $value in $ui-distance-map {
+  .#{$ui-margin + $key} {
+    margin: $value;
+  }
+
+  .#{$ui-margin + 'tb' + $key} {
+    margin-top: $value;
+    margin-bottom: $value;
+  }
+
+  .#{$ui-margin + 'lr' + $key} {
+    margin-left: $value;
+    margin-right: $value;
+  }
+
+  .#{$ui-margin + 't' + $key} {
+    margin-top: $value;
+  }
+
+  .#{$ui-margin + 'b' + $key} {
+    margin-bottom: $value;
+  }
+
+  .#{$ui-margin + 'l' + $key} {
+    margin-left: $value;
+  }
+
+  .#{$ui-margin + 'r' + $key} {
+    margin-right: $value;
+  }
+}
+
+/* ==========================================================================
+    内边距相关
+========================================================================== */
+
+@each $key, $value in $ui-distance-map {
+  .#{$ui-padding + $key} {
+    padding: $value;
+  }
+
+  .#{$ui-padding + 'tb' + $key} {
+    padding-top: $value;
+    padding-bottom: $value;
+  }
+
+  .#{$ui-padding + 'lr' + $key} {
+    padding-left: $value;
+    padding-right: $value;
+  }
+
+  .#{$ui-padding + 't' + $key} {
+    padding-top: $value;
+  }
+
+  .#{$ui-padding + 'b' + $key} {
+    padding-bottom: $value;
+  }
+
+  .#{$ui-padding + 'l' + $key} {
+    padding-left: $value;
+  }
+
+  .#{$ui-padding + 'r' + $key} {
+    padding-right: $value;
+  }
+}

+ 9 - 0
static/styles/modules/feedback.scss

@@ -0,0 +1,9 @@
+/**
+ * 触摸反馈相关快捷样式类
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+
+.feedback-tap {
+  -webkit-tap-highlight-color: $ui-clr-feedback;
+}

+ 155 - 0
static/styles/modules/flexible.scss

@@ -0,0 +1,155 @@
+// flex极为常用,因此不使用命名空间前缀了
+
+.flex {
+  display: flex;
+  -webkit-flex-wrap: wrap;
+  flex-wrap: wrap;
+
+  &.nowrap {
+    -webkit-flex-wrap: nowrap;
+    flex-wrap: nowrap;
+  }
+
+  &.column {
+    -webkit-box-direction: normal;
+    -webkit-box-orient: vertical;
+    -webkit-flex-direction: column;
+    flex-direction: column;
+  }
+
+  &.row {
+    -webkit-box-direction: normal;
+    -webkit-box-orient: horizontal;
+    -webkit-flex-direction: row;
+    flex-direction: row;
+  }
+
+  &.center {
+    -webkit-align-items: center;
+    align-items: center;
+    -webkit-box-align: center;
+    -webkit-box-pack: center;
+    -webkit-justify-content: center;
+    justify-content: center;
+  }
+
+  &.justify-start {
+    -webkit-box-pack: start;
+    -webkit-justify-content: flex-start;
+    justify-content: flex-start;
+  }
+
+  &.justify-end {
+    -webkit-box-pack: end;
+    -webkit-justify-content: flex-end;
+    justify-content: flex-end;
+  }
+
+  &.justify-center {
+    -webkit-box-pack: center;
+    -webkit-justify-content: center;
+    justify-content: center;
+  }
+
+  &.justify-between {
+    -webkit-box-pack: justify;
+    -webkit-justify-content: space-between;
+    justify-content: space-between;
+  }
+
+  &.justify-around {
+    -webkit-justify-content: space-around;
+    justify-content: space-around;
+  }
+
+  &.align-start {
+    -webkit-align-content: flex-start;
+    align-content: flex-start;
+  }
+
+  &.align-end {
+    -webkit-align-content: flex-end;
+    align-content: flex-end;
+  }
+
+  &.align-center {
+    -webkit-align-content: center;
+    align-content: center;
+  }
+
+  &.align-between {
+    -webkit-align-content: space-between;
+    align-content: space-between;
+    -webkit-box-pack: justify;
+  }
+
+  &.align-around {
+    -webkit-align-content: space-around;
+    align-content: space-around;
+  }
+
+  &.items-start {
+    -webkit-align-items: flex-start;
+    align-items: flex-start;
+    -webkit-box-align: start;
+  }
+
+  &.items-end {
+    -webkit-align-items: flex-end;
+    align-items: flex-end;
+    -webkit-box-align: end;
+  }
+
+  &.items-stretch {
+    -webkit-align-items: stretch;
+    align-items: stretch;
+    -webkit-box-align: stretch;
+  }
+
+  &.items-stretch > &-item {
+    height: auto !important;
+  }
+
+  &.items-center {
+    -webkit-align-items: center;
+    align-items: center;
+    -webkit-box-align: center;
+  }
+
+  & > &-item {
+    -webkit-box-flex: 1;
+    -webkit-flex: 1;
+    flex: 1;
+    position: relative;
+    width: 100%;
+  }
+
+  & > &-item.align-self-start {
+    -webkit-align-self: flex-start;
+    align-self: flex-start;
+  }
+
+  & > &-item.align-self-end {
+    -webkit-align-self: flex-end;
+    align-self: flex-end;
+  }
+
+  & > &-item.align-self-center {
+    -webkit-align-self: center;
+    align-self: center;
+  }
+
+  & > &-item.align-self-stretch {
+    -webkit-align-items: stretch;
+    align-items: stretch;
+    -webkit-box-align: stretch;
+    height: auto !important;
+  }
+
+  &flex-1 {
+    flex: 1;
+  }
+}
+.flex-1 {
+  flex: 1;
+}

+ 88 - 0
static/styles/modules/font-size.scss

@@ -0,0 +1,88 @@
+$ui-font: namespace('font'); // font样式前缀
+
+$ui-g-fs: $global-font-size;
+
+/* 字体尺寸 xxxs=null xxs=null xs=20 sm=24 !base=28 lg=32 xl=36 xxl=48 xxxl=null */
+$ui-g-fs-map: (
+  '20': 20px,
+  '30': 30px,
+);
+
+$ui-g-lh-map: (
+  '20': 24px,
+  '30': 34px,
+);
+
+@each $key, $value in $ui-g-fs-map {
+  @if ($value) {
+    /* 定义背景颜色 */
+    .#{$ui-font + '-' + $key} {
+      font-size: 20px;
+      line-height: 20px;
+    }
+  }
+}
+
+.f0 {
+  font-size: 0;
+}
+
+.f12 {
+  font-size: 12px;
+}
+
+.f14 {
+  font-size: 14px;
+}
+
+.f16 {
+  font-size: 16px;
+}
+
+.f18 {
+  font-size: 18px;
+}
+
+.f20 {
+  font-size: 20px;
+}
+
+.f22 {
+  font-size: 22px;
+}
+
+.f24 {
+  font-size: 24px;
+}
+
+.f26 {
+  font-size: 26px;
+}
+
+.f28 {
+  font-size: 28px;
+}
+
+.f30 {
+  font-size: 30px;
+}
+
+.f32 {
+  font-size: 32px;
+}
+
+.f34 {
+  font-size: 34px;
+}
+
+.f36 {
+  font-size: 36px;
+}
+
+.f38 {
+  font-size: 38px;
+}
+
+.f40 {
+  font-size: 40px;
+}

+ 217 - 0
static/styles/modules/iconfont.scss

@@ -0,0 +1,217 @@
+/**
+ * TIP:需要替换为具体的字体库
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+
+@font-face {
+  font-family: 'iconfont'; /* project id 2017145 */
+  src: url('//at.alicdn.com/t/font_2017145_cbnq87ruraq.eot');
+  src: url('//at.alicdn.com/t/font_2017145_cbnq87ruraq.eot?#iefix') format('embedded-opentype'),
+    url('//at.alicdn.com/t/font_2017145_cbnq87ruraq.woff2') format('woff2'),
+    url('//at.alicdn.com/t/font_2017145_cbnq87ruraq.woff') format('woff'),
+    url('//at.alicdn.com/t/font_2017145_cbnq87ruraq.ttf') format('truetype'),
+    url('//at.alicdn.com/t/font_2017145_cbnq87ruraq.svg#iconfont') format('svg');
+}
+
+.mpm-icon {
+  font-family: 'iconfont' !important; /* stylelint-disable-line */
+  font-weight: 400;
+  font-size: 16px;
+  // line-height: 1; // 不需要设置为1,会导致不同浏览器显示有差异
+  color: inherit;
+  font-style: normal;
+  font-display: auto;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-menu::before {
+  content: '\e677';
+}
+
+.icon-store::before {
+  content: '\e6a9';
+}
+
+.icon-hand::before {
+  content: '\e6aa';
+}
+
+.icon-wechat::before {
+  content: '\e6ab';
+}
+
+.icon-location::before {
+  content: '\e6ac';
+}
+
+.icon-telphone::before {
+  content: '\e6ad';
+}
+
+.icon-bofang::before {
+  content: '\e618';
+}
+
+.icon-radio-dot-circle-checked::before {
+  content: '\e6a7';
+}
+
+.icon-radio-dot-circle::before {
+  content: '\e6a8';
+}
+
+.icon-add-circle-fill::before {
+  content: '\e6a3';
+}
+
+.icon-ashbin-circle-fill::before {
+  content: '\e6a5';
+}
+
+.icon-close-circle-fill::before {
+  content: '\e6a6';
+}
+
+.icon-radio-circle-fill::before {
+  content: '\e6a2';
+}
+
+.icon-tip::before {
+  content: '\e6a1';
+}
+
+.icon-arrow-left-bold::before {
+  content: '\e69e';
+}
+
+.icon-arrow-bottom-bold::before {
+  content: '\e69f';
+}
+
+.icon-arrow-top-bold::before {
+  content: '\e6a0';
+}
+
+.icon-add::before {
+  content: '\e67b';
+}
+
+.icon-close::before {
+  content: '\e67e';
+}
+
+.icon-checkbox-disabled::before {
+  content: '\e67f';
+}
+
+.icon-search::before {
+  content: '\e680';
+}
+
+.icon-checkbox-fill::before {
+  content: '\e683';
+}
+
+.icon-tips::before {
+  content: '\e688';
+}
+
+.icon-edit::before {
+  content: '\e68b';
+}
+
+.icon-purse::before {
+  content: '\e68c';
+}
+
+.icon-star::before {
+  content: '\e68d';
+}
+
+.icon-tuoyuan::before {
+  content: '\e68e';
+}
+
+.icon-tuoyuan-2::before {
+  content: '\e68f';
+}
+
+.icon-pull::before {
+  content: '\e6ae';
+}
+
+.icon-forbid::before {
+  content: '\e690';
+}
+
+.icon-mobile-phone::before {
+  content: '\e691';
+}
+
+.icon-lock::before {
+  content: '\e692';
+}
+
+.icon-arrow-right-bold::before {
+  content: '\e693';
+}
+
+.icon-player::before {
+  content: '\e694';
+}
+
+.icon-photo::before {
+  content: '\e695';
+}
+
+.icon-push::before {
+  content: '\e696';
+}
+
+.icon-share::before {
+  content: '\e697';
+}
+
+.icon-minus-ellipse-fill::before {
+  content: '\e698';
+}
+
+.icon-add-ellipse-fill::before {
+  content: '\e699';
+}
+
+.icon-order::before {
+  content: '\e69a';
+}
+
+.icon-add-circle::before {
+  content: '\e69b';
+}
+
+.icon-arrow-bottom-fill::before {
+  content: '\e69c';
+}
+
+.icon-arrow-top-fill::before {
+  content: '\e69d';
+}
+
+.icon-home::before {
+  content: '\e674';
+}
+
+.icon-ashbin::before {
+  content: '\e666';
+}
+
+.icon-bianji::before {
+  content: '\e8ac';
+}
+
+.icon-tukuan::before {
+  content: '\e6af';
+}
+

+ 30 - 0
static/styles/modules/image.scss

@@ -0,0 +1,30 @@
+/**
+ * 图片相关快捷样式类
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+
+.bg {
+  backface-visibility: hidden;
+  background-position: center center;
+  background-repeat: no-repeat;
+  display: inline-block;
+  line-height: 1;
+
+  &.size-cover {
+    background-size: cover;
+  }
+
+  &.size-contain {
+    background-size: contain;
+  }
+
+  &.position-top {
+    background-position: center top;
+  }
+
+  &.position-bottom {
+    background-position: center bottom;
+  }
+}

+ 25 - 0
static/styles/modules/index.scss

@@ -0,0 +1,25 @@
+/**
+ * 通用样式模块入口
+ * - 按钮样式
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+@import './color';
+@import './text';
+@import './border';
+@import './size';
+@import './distance';
+@import './image';
+@import './iconfont';
+@import './feedback';
+@import './animation';
+@import './utility';
+@import './flexible';
+@import './margin';
+@import './font-size';
+@import './padding';
+@import './border-radius';
+@import './vant-popup-bottom';
+@import './currency';
+

+ 98 - 0
static/styles/modules/margin.scss

@@ -0,0 +1,98 @@
+.m10 {
+  margin: 10px;
+}
+
+.mtb10 {
+  margin-top: 10px;
+  margin-bottom: 10px;
+}
+
+.mlr10 {
+  margin-left: 10px;
+  margin-right: 10px;
+}
+
+.mt10 {
+  margin-top: 10px;
+}
+
+.mb10 {
+  margin-bottom: 10px;
+}
+
+.mb100 {
+  margin-bottom: 100px;
+}
+
+.ml10 {
+  margin-left: 10px;
+}
+
+.mr10 {
+  margin-right: 10px;
+}
+
+.m20 {
+  margin: 20px;
+}
+
+.mtb20 {
+  margin-top: 20px;
+  margin-bottom: 20px;
+}
+
+.mlr20 {
+  margin-left: 20px;
+  margin-right: 20px;
+}
+
+.mt20 {
+  margin-top: 20px;
+}
+
+.mb20 {
+  margin-bottom: 20px;
+}
+
+.ml20 {
+  margin-left: 20px;
+}
+
+.mr20 {
+  margin-right: 20px;
+}
+
+.m30 {
+  margin: 30px;
+}
+
+.mtb30 {
+  margin-top: 30px;
+  margin-bottom: 30px;
+}
+
+.mlr30 {
+  margin-left: 30px;
+  margin-right: 30px;
+}
+
+.mt30 {
+  margin-top: 30px;
+}
+
+.mb30 {
+  margin-bottom: 30px;
+}
+
+.ml30 {
+  margin-left: 30px;
+}
+
+.mr30 {
+  margin-right: 30px;
+}
+
+.mlr2 {
+  margin-left: 2px;
+  margin-right: 2px;
+}

+ 89 - 0
static/styles/modules/padding.scss

@@ -0,0 +1,89 @@
+.p10 {
+  padding: 10px;
+}
+
+.ptb10 {
+  padding-top: 10px;
+  padding-bottom: 10px;
+}
+
+.plr10 {
+  padding-left: 10px;
+  padding-right: 10px;
+}
+
+.pt10 {
+  padding-top: 10px;
+}
+
+.pb10 {
+  padding-bottom: 10px;
+}
+
+.pl10 {
+  padding-left: 10px;
+}
+
+.pr10 {
+  padding-right: 10px;
+}
+
+.p20 {
+  padding: 20px;
+}
+
+.ptb20 {
+  padding-top: 20px;
+  padding-bottom: 20px;
+}
+
+.plr20 {
+  padding-left: 20px;
+  padding-right: 20px;
+}
+
+.pt20 {
+  padding-top: 20px;
+}
+
+.pb20 {
+  padding-bottom: 20px;
+}
+
+.pl20 {
+  padding-left: 20px;
+}
+
+.pr20 {
+  padding-right: 20px;
+}
+
+.p30 {
+  padding: 30px;
+}
+
+.ptb30 {
+  padding-top: 30px;
+  padding-bottom: 30px;
+}
+
+.plr30 {
+  padding-left: 30px;
+  padding-right: 30px;
+}
+
+.pt30 {
+  padding-top: 30px;
+}
+
+.pb30 {
+  padding-bottom: 30px;
+}
+
+.pl30 {
+  padding-left: 30px;
+}
+
+.pr30 {
+  padding-right: 30px;
+}

+ 56 - 0
static/styles/modules/size.scss

@@ -0,0 +1,56 @@
+/**
+ * 尺寸相关快捷样式类
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+
+$ui-width: namespace('w');
+$ui-height: namespace('h');
+
+$ui-size-map: (
+  '0': 0,
+  '10': 10%,
+  '20': 20%,
+  '25': 25%,
+  '30': 30%,
+  '40': 40%,
+  '50': 50%,
+  '60': 60%,
+  '70': 70%,
+  '75': 75%,
+  '80': 80%,
+  '90': 90%,
+  '100': 100%,
+  'auto': auto,
+);
+
+@each $key, $value in $ui-size-map {
+  .#{$ui-width + $key} {
+    width: $value;
+  }
+
+  .#{$ui-height + $key} {
+    height: $value;
+  }
+}
+
+/* ==========================================================================
+    常用的尺寸定义
+========================================================================== */
+
+.wfull {
+  width: 100vw;
+}
+
+.hfull {
+  height: 100vh;
+}
+
+.wmfull {
+  min-width: 100vw;
+}
+
+.hmfull {
+  min-height: 100vh;
+}

+ 116 - 0
static/styles/modules/text.scss

@@ -0,0 +1,116 @@
+/**
+ * 文本相关快捷样式类
+ *
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+
+/* ==========================================================================
+    文字大小相关
+========================================================================== */
+
+$ui-font: namespace('f');
+
+$ui-fs-map: (
+  '0': 0,
+  '20': 20px,
+  '24': 24px,
+  '26': 26px,
+  '28': 28px,
+  '30': 30px,
+  '32': 32px,
+  '34': 34px,
+  '36': 36px,
+  '38': 38px,
+  '40': 40px,
+  '54': 54px,
+);
+
+@each $key, $value in $ui-fs-map {
+  .#{$ui-font + $key} {
+    font-size: $value;
+  }
+}
+
+/* ==========================================================================
+    文字行高相关
+========================================================================== */
+
+$ui-line-height: namespace('lh');
+
+$ui-lh-map: (
+  '0': 0,
+  '1': 1,
+  '24': 24px,
+  '34': 34px,
+  '40': 40px,
+  '54': 54px,
+);
+
+@each $key, $value in $ui-lh-map {
+  .#{$ui-line-height + $key} {
+    line-height: $value;
+  }
+}
+
+/* ==========================================================================
+    其他相关
+========================================================================== */
+
+.weight-bold {
+  font-weight: bold;
+}
+
+.weight-normal {
+  font-weight: normal;
+}
+
+.align-justify {
+  text-align: justify;
+}
+
+.align-left {
+  text-align: left;
+}
+
+.align-center {
+  text-align: center;
+}
+
+.align-right {
+  text-align: right;
+}
+
+.nowrap {
+  white-space: nowrap;
+}
+
+.pre-wrap {
+  white-space: pre-wrap;
+}
+
+/* 单行文字溢出时出现省略号 */
+.text-overflow-1 {
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 1;
+  overflow: hidden;
+  word-break: break-all;
+}
+
+/* 2行文本场景比较多,所以特别抽出 */
+.text-overflow-2 {
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 2;
+  overflow: hidden;
+  word-break: break-all;
+}
+
+.text-overflow-4 {
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+  -webkit-line-clamp: 4;
+  overflow: hidden;
+  word-break: break-all;
+}

+ 75 - 0
static/styles/modules/utility.scss

@@ -0,0 +1,75 @@
+/**
+ * 一些暂未归类的快捷样式类
+ * @since 1.0.0
+ * @version 1.0.0
+ */
+//@import "../core/variable";
+
+.mpm{
+  &-relative {
+    position: relative;
+  }
+
+  &-absolute {
+    position: absolute;
+  }
+
+  &-sizing-border {
+    box-sizing: border-box;
+  }
+
+  &-inline-block {
+    display: inline-block;
+  }
+
+  &-block {
+    display: block;
+  }
+
+  &-none {
+    display: none;
+  }
+
+  &-visible {
+    visibility: hidden;
+  }
+
+  &-hidden {
+    visibility: hidden;
+  }
+
+  &-fl {
+    float: left;
+  }
+
+  &-fr {
+    float: right;
+  }
+
+  &-clear {
+    _zoom: 1;
+
+    &::after {
+      clear: both;
+      content: '';
+      display: block;
+      font-size: 0;
+      height: 0;
+      line-height: 0;
+      overflow: hidden;
+      visibility: hidden;
+    }
+  }
+
+  &-smooth {
+    scroll-behavior: smooth;
+  }
+
+  &-x-auto {
+    overflow-x: auto;
+  }
+
+  &-y-auto {
+    overflow-y: auto;
+  }
+}

+ 95 - 0
static/styles/modules/vant-popup-bottom.scss

@@ -0,0 +1,95 @@
+.popup-header {
+  height: 50px;
+  // background: #F7F8FB;
+  position: absolute;
+  top: 0;
+  width: 100%;
+
+  .popup-empty {
+    font-size: 14px;
+    color: #ff4539;
+    width: 50px;
+    height: 50px;
+    line-height: 50px;
+  }
+
+  .popup-title {
+    font-size: 16px;
+    font-weight: 600;
+    color: #333333;
+  }
+}
+
+#popup-box {
+  max-height: 570px;
+}
+
+.search {
+  position: fixed;
+  top: 0;
+  left: 0;
+  right: 0;
+  height: 52px;
+  border-radius: 0px 0px 24px 24px;
+  background: #ffffff;
+  z-index: 10;
+
+  .search-bar {
+    background: none;
+    padding: 10px;
+  }
+}
+
+.operation-dialog {
+  padding: 18px 0 26px;
+  .iconTips {
+    position: relative;
+
+    > :first-child::after {
+      content: "*";
+      position: absolute;
+      top: 10px;
+      left: 44px;
+      color: #ff4539;
+    }
+  }
+
+  .van-cell {
+    padding: 6px 6px 6px 8px;
+  }
+
+  .van-field {
+    .van-cell__title {
+      font-size: 16px;
+      color: #333333;
+      line-height: 40px;
+      margin-right: 0;
+    }
+  
+    .van-cell__value {
+      width: 235px;
+      height: 44px;
+      background: rgba(244, 244, 244, 0.5);
+      border-radius: 4px;
+      border: 1px solid #cccccc;
+      line-height: 44px;
+      padding-left: 10px;
+    }
+  }
+}
+
+.search-add {
+  width: 16px;
+  height: 16px;
+}
+
+.action-sheet-custom {
+  .van-action-sheet__header {
+    height: 44px;
+    background: #F7F8FB;
+  }
+}
+
+.badge-count {
+  transform: translate(0, 0);
+}

BIN
static/个人中心.png


BIN
static/喇叭.png


Dosya farkı çok büyük olduğundan ihmal edildi
+ 1 - 0
static/扬声器.svg


BIN
static/编辑.png


BIN
static/订单.png


BIN
static/资料.png


+ 22 - 0
uni_modules/uni-icons/changelog.md

@@ -0,0 +1,22 @@
+## 1.3.5(2022-01-24)
+- 优化 size 属性可以传入不带单位的字符串数值
+## 1.3.4(2022-01-24)
+- 优化 size 支持其他单位
+## 1.3.3(2022-01-17)
+- 修复 nvue 有些图标不显示的bug,兼容老版本图标
+## 1.3.2(2021-12-01)
+- 优化 示例可复制图标名称
+## 1.3.1(2021-11-23)
+- 优化 兼容旧组件 type 值
+## 1.3.0(2021-11-19)
+- 新增 更多图标
+- 优化 自定义图标使用方式
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons)
+## 1.1.7(2021-11-08)
+## 1.2.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.1.5(2021-05-12)
+- 新增 组件示例地址
+## 1.1.4(2021-02-05)
+- 调整为uni_modules目录规范

Dosya farkı çok büyük olduğundan ihmal edildi
+ 1169 - 0
uni_modules/uni-icons/components/uni-icons/icons.js


+ 96 - 0
uni_modules/uni-icons/components/uni-icons/uni-icons.vue

@@ -0,0 +1,96 @@
+<template>
+	<!-- #ifdef APP-NVUE -->
+	<text :style="{ color: color, 'font-size': iconSize }" class="uni-icons" @click="_onClick">{{unicode}}</text>
+	<!-- #endif -->
+	<!-- #ifndef APP-NVUE -->
+	<text :style="{ color: color, 'font-size': iconSize }" class="uni-icons" :class="['uniui-'+type,customPrefix,customPrefix?type:'']" @click="_onClick"></text>
+	<!-- #endif -->
+</template>
+
+<script>
+	import icons from './icons.js';
+	const getVal = (val) => {
+		const reg = /^[0-9]*$/g
+		return (typeof val === 'number' || reg.test(val) )? val + 'px' : val;
+	} 
+	// #ifdef APP-NVUE
+	var domModule = weex.requireModule('dom');
+	import iconUrl from './uniicons.ttf'
+	domModule.addRule('fontFace', {
+		'fontFamily': "uniicons",
+		'src': "url('"+iconUrl+"')"
+	});
+	// #endif
+
+	/**
+	 * Icons 图标
+	 * @description 用于展示 icons 图标
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=28
+	 * @property {Number} size 图标大小
+	 * @property {String} type 图标图案,参考示例
+	 * @property {String} color 图标颜色
+	 * @property {String} customPrefix 自定义图标
+	 * @event {Function} click 点击 Icon 触发事件
+	 */
+	export default {
+		name: 'UniIcons',
+		emits:['click'],
+		props: {
+			type: {
+				type: String,
+				default: ''
+			},
+			color: {
+				type: String,
+				default: '#333333'
+			},
+			size: {
+				type: [Number, String],
+				default: 16
+			},
+			customPrefix:{
+				type: String,
+				default: ''
+			}
+		},
+		data() {
+			return {
+				icons: icons.glyphs
+			}
+		},
+		computed:{
+			unicode(){
+				let code = this.icons.find(v=>v.font_class === this.type)
+				if(code){
+					return unescape(`%u${code.unicode}`)
+				}
+				return ''
+			},
+			iconSize(){
+				return getVal(this.size)
+			}
+		},
+		methods: {
+			_onClick() {
+				this.$emit('click')
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	/* #ifndef APP-NVUE */
+	@import './uniicons.css';
+	@font-face {
+		font-family: uniicons;
+		src: url('./uniicons.ttf') format('truetype');
+	}
+
+	/* #endif */
+	.uni-icons {
+		font-family: uniicons;
+		text-decoration: none;
+		text-align: center;
+	}
+
+</style>

+ 663 - 0
uni_modules/uni-icons/components/uni-icons/uniicons.css

@@ -0,0 +1,663 @@
+.uniui-color:before {
+  content: "\e6cf";
+}
+
+.uniui-wallet:before {
+  content: "\e6b1";
+}
+
+.uniui-settings-filled:before {
+  content: "\e6ce";
+}
+
+.uniui-auth-filled:before {
+  content: "\e6cc";
+}
+
+.uniui-shop-filled:before {
+  content: "\e6cd";
+}
+
+.uniui-staff-filled:before {
+  content: "\e6cb";
+}
+
+.uniui-vip-filled:before {
+  content: "\e6c6";
+}
+
+.uniui-plus-filled:before {
+  content: "\e6c7";
+}
+
+.uniui-folder-add-filled:before {
+  content: "\e6c8";
+}
+
+.uniui-color-filled:before {
+  content: "\e6c9";
+}
+
+.uniui-tune-filled:before {
+  content: "\e6ca";
+}
+
+.uniui-calendar-filled:before {
+  content: "\e6c0";
+}
+
+.uniui-notification-filled:before {
+  content: "\e6c1";
+}
+
+.uniui-wallet-filled:before {
+  content: "\e6c2";
+}
+
+.uniui-medal-filled:before {
+  content: "\e6c3";
+}
+
+.uniui-gift-filled:before {
+  content: "\e6c4";
+}
+
+.uniui-fire-filled:before {
+  content: "\e6c5";
+}
+
+.uniui-refreshempty:before {
+  content: "\e6bf";
+}
+
+.uniui-location-filled:before {
+  content: "\e6af";
+}
+
+.uniui-person-filled:before {
+  content: "\e69d";
+}
+
+.uniui-personadd-filled:before {
+  content: "\e698";
+}
+
+.uniui-back:before {
+  content: "\e6b9";
+}
+
+.uniui-forward:before {
+  content: "\e6ba";
+}
+
+.uniui-arrow-right:before {
+  content: "\e6bb";
+}
+
+.uniui-arrowthinright:before {
+  content: "\e6bb";
+}
+
+.uniui-arrow-left:before {
+  content: "\e6bc";
+}
+
+.uniui-arrowthinleft:before {
+  content: "\e6bc";
+}
+
+.uniui-arrow-up:before {
+  content: "\e6bd";
+}
+
+.uniui-arrowthinup:before {
+  content: "\e6bd";
+}
+
+.uniui-arrow-down:before {
+  content: "\e6be";
+}
+
+.uniui-arrowthindown:before {
+  content: "\e6be";
+}
+
+.uniui-bottom:before {
+  content: "\e6b8";
+}
+
+.uniui-arrowdown:before {
+  content: "\e6b8";
+}
+
+.uniui-right:before {
+  content: "\e6b5";
+}
+
+.uniui-arrowright:before {
+  content: "\e6b5";
+}
+
+.uniui-top:before {
+  content: "\e6b6";
+}
+
+.uniui-arrowup:before {
+  content: "\e6b6";
+}
+
+.uniui-left:before {
+  content: "\e6b7";
+}
+
+.uniui-arrowleft:before {
+  content: "\e6b7";
+}
+
+.uniui-eye:before {
+  content: "\e651";
+}
+
+.uniui-eye-filled:before {
+  content: "\e66a";
+}
+
+.uniui-eye-slash:before {
+  content: "\e6b3";
+}
+
+.uniui-eye-slash-filled:before {
+  content: "\e6b4";
+}
+
+.uniui-info-filled:before {
+  content: "\e649";
+}
+
+.uniui-reload:before {
+  content: "\e6b2";
+}
+
+.uniui-micoff-filled:before {
+  content: "\e6b0";
+}
+
+.uniui-map-pin-ellipse:before {
+  content: "\e6ac";
+}
+
+.uniui-map-pin:before {
+  content: "\e6ad";
+}
+
+.uniui-location:before {
+  content: "\e6ae";
+}
+
+.uniui-starhalf:before {
+  content: "\e683";
+}
+
+.uniui-star:before {
+  content: "\e688";
+}
+
+.uniui-star-filled:before {
+  content: "\e68f";
+}
+
+.uniui-calendar:before {
+  content: "\e6a0";
+}
+
+.uniui-fire:before {
+  content: "\e6a1";
+}
+
+.uniui-medal:before {
+  content: "\e6a2";
+}
+
+.uniui-font:before {
+  content: "\e6a3";
+}
+
+.uniui-gift:before {
+  content: "\e6a4";
+}
+
+.uniui-link:before {
+  content: "\e6a5";
+}
+
+.uniui-notification:before {
+  content: "\e6a6";
+}
+
+.uniui-staff:before {
+  content: "\e6a7";
+}
+
+.uniui-vip:before {
+  content: "\e6a8";
+}
+
+.uniui-folder-add:before {
+  content: "\e6a9";
+}
+
+.uniui-tune:before {
+  content: "\e6aa";
+}
+
+.uniui-auth:before {
+  content: "\e6ab";
+}
+
+.uniui-person:before {
+  content: "\e699";
+}
+
+.uniui-email-filled:before {
+  content: "\e69a";
+}
+
+.uniui-phone-filled:before {
+  content: "\e69b";
+}
+
+.uniui-phone:before {
+  content: "\e69c";
+}
+
+.uniui-email:before {
+  content: "\e69e";
+}
+
+.uniui-personadd:before {
+  content: "\e69f";
+}
+
+.uniui-chatboxes-filled:before {
+  content: "\e692";
+}
+
+.uniui-contact:before {
+  content: "\e693";
+}
+
+.uniui-chatbubble-filled:before {
+  content: "\e694";
+}
+
+.uniui-contact-filled:before {
+  content: "\e695";
+}
+
+.uniui-chatboxes:before {
+  content: "\e696";
+}
+
+.uniui-chatbubble:before {
+  content: "\e697";
+}
+
+.uniui-upload-filled:before {
+  content: "\e68e";
+}
+
+.uniui-upload:before {
+  content: "\e690";
+}
+
+.uniui-weixin:before {
+  content: "\e691";
+}
+
+.uniui-compose:before {
+  content: "\e67f";
+}
+
+.uniui-qq:before {
+  content: "\e680";
+}
+
+.uniui-download-filled:before {
+  content: "\e681";
+}
+
+.uniui-pyq:before {
+  content: "\e682";
+}
+
+.uniui-sound:before {
+  content: "\e684";
+}
+
+.uniui-trash-filled:before {
+  content: "\e685";
+}
+
+.uniui-sound-filled:before {
+  content: "\e686";
+}
+
+.uniui-trash:before {
+  content: "\e687";
+}
+
+.uniui-videocam-filled:before {
+  content: "\e689";
+}
+
+.uniui-spinner-cycle:before {
+  content: "\e68a";
+}
+
+.uniui-weibo:before {
+  content: "\e68b";
+}
+
+.uniui-videocam:before {
+  content: "\e68c";
+}
+
+.uniui-download:before {
+  content: "\e68d";
+}
+
+.uniui-help:before {
+  content: "\e679";
+}
+
+.uniui-navigate-filled:before {
+  content: "\e67a";
+}
+
+.uniui-plusempty:before {
+  content: "\e67b";
+}
+
+.uniui-smallcircle:before {
+  content: "\e67c";
+}
+
+.uniui-minus-filled:before {
+  content: "\e67d";
+}
+
+.uniui-micoff:before {
+  content: "\e67e";
+}
+
+.uniui-closeempty:before {
+  content: "\e66c";
+}
+
+.uniui-clear:before {
+  content: "\e66d";
+}
+
+.uniui-navigate:before {
+  content: "\e66e";
+}
+
+.uniui-minus:before {
+  content: "\e66f";
+}
+
+.uniui-image:before {
+  content: "\e670";
+}
+
+.uniui-mic:before {
+  content: "\e671";
+}
+
+.uniui-paperplane:before {
+  content: "\e672";
+}
+
+.uniui-close:before {
+  content: "\e673";
+}
+
+.uniui-help-filled:before {
+  content: "\e674";
+}
+
+.uniui-paperplane-filled:before {
+  content: "\e675";
+}
+
+.uniui-plus:before {
+  content: "\e676";
+}
+
+.uniui-mic-filled:before {
+  content: "\e677";
+}
+
+.uniui-image-filled:before {
+  content: "\e678";
+}
+
+.uniui-locked-filled:before {
+  content: "\e668";
+}
+
+.uniui-info:before {
+  content: "\e669";
+}
+
+.uniui-locked:before {
+  content: "\e66b";
+}
+
+.uniui-camera-filled:before {
+  content: "\e658";
+}
+
+.uniui-chat-filled:before {
+  content: "\e659";
+}
+
+.uniui-camera:before {
+  content: "\e65a";
+}
+
+.uniui-circle:before {
+  content: "\e65b";
+}
+
+.uniui-checkmarkempty:before {
+  content: "\e65c";
+}
+
+.uniui-chat:before {
+  content: "\e65d";
+}
+
+.uniui-circle-filled:before {
+  content: "\e65e";
+}
+
+.uniui-flag:before {
+  content: "\e65f";
+}
+
+.uniui-flag-filled:before {
+  content: "\e660";
+}
+
+.uniui-gear-filled:before {
+  content: "\e661";
+}
+
+.uniui-home:before {
+  content: "\e662";
+}
+
+.uniui-home-filled:before {
+  content: "\e663";
+}
+
+.uniui-gear:before {
+  content: "\e664";
+}
+
+.uniui-smallcircle-filled:before {
+  content: "\e665";
+}
+
+.uniui-map-filled:before {
+  content: "\e666";
+}
+
+.uniui-map:before {
+  content: "\e667";
+}
+
+.uniui-refresh-filled:before {
+  content: "\e656";
+}
+
+.uniui-refresh:before {
+  content: "\e657";
+}
+
+.uniui-cloud-upload:before {
+  content: "\e645";
+}
+
+.uniui-cloud-download-filled:before {
+  content: "\e646";
+}
+
+.uniui-cloud-download:before {
+  content: "\e647";
+}
+
+.uniui-cloud-upload-filled:before {
+  content: "\e648";
+}
+
+.uniui-redo:before {
+  content: "\e64a";
+}
+
+.uniui-images-filled:before {
+  content: "\e64b";
+}
+
+.uniui-undo-filled:before {
+  content: "\e64c";
+}
+
+.uniui-more:before {
+  content: "\e64d";
+}
+
+.uniui-more-filled:before {
+  content: "\e64e";
+}
+
+.uniui-undo:before {
+  content: "\e64f";
+}
+
+.uniui-images:before {
+  content: "\e650";
+}
+
+.uniui-paperclip:before {
+  content: "\e652";
+}
+
+.uniui-settings:before {
+  content: "\e653";
+}
+
+.uniui-search:before {
+  content: "\e654";
+}
+
+.uniui-redo-filled:before {
+  content: "\e655";
+}
+
+.uniui-list:before {
+  content: "\e644";
+}
+
+.uniui-mail-open-filled:before {
+  content: "\e63a";
+}
+
+.uniui-hand-down-filled:before {
+  content: "\e63c";
+}
+
+.uniui-hand-down:before {
+  content: "\e63d";
+}
+
+.uniui-hand-up-filled:before {
+  content: "\e63e";
+}
+
+.uniui-hand-up:before {
+  content: "\e63f";
+}
+
+.uniui-heart-filled:before {
+  content: "\e641";
+}
+
+.uniui-mail-open:before {
+  content: "\e643";
+}
+
+.uniui-heart:before {
+  content: "\e639";
+}
+
+.uniui-loop:before {
+  content: "\e633";
+}
+
+.uniui-pulldown:before {
+  content: "\e632";
+}
+
+.uniui-scan:before {
+  content: "\e62a";
+}
+
+.uniui-bars:before {
+  content: "\e627";
+}
+
+.uniui-cart-filled:before {
+  content: "\e629";
+}
+
+.uniui-checkbox:before {
+  content: "\e62b";
+}
+
+.uniui-checkbox-filled:before {
+  content: "\e62c";
+}
+
+.uniui-shop:before {
+  content: "\e62f";
+}
+
+.uniui-headphones:before {
+  content: "\e630";
+}
+
+.uniui-cart:before {
+  content: "\e631";
+}

BIN
uni_modules/uni-icons/components/uni-icons/uniicons.ttf


+ 86 - 0
uni_modules/uni-icons/package.json

@@ -0,0 +1,86 @@
+{
+  "id": "uni-icons",
+  "displayName": "uni-icons 图标",
+  "version": "1.3.5",
+  "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "icon",
+    "图标"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": "^3.2.14"
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+  "dcloudext": {
+    "category": [
+      "前端组件",
+      "通用组件"
+    ],
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui"
+  },
+  "uni_modules": {
+    "dependencies": ["uni-scss"],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 8 - 0
uni_modules/uni-icons/readme.md

@@ -0,0 +1,8 @@
+## Icons 图标
+> **组件名:uni-icons**
+> 代码块: `uIcons`
+
+用于展示 icons 图标 。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 

+ 18 - 0
uni_modules/uni-notice-bar/changelog.md

@@ -0,0 +1,18 @@
+## 1.2.1(2022-09-05)
+- 新增 属性 fontSize,可修改文字大小。
+## 1.2.0(2021-11-19)
+- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource)
+- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-notice-bar](https://uniapp.dcloud.io/component/uniui/uni-notice-bar)
+## 1.1.1(2021-11-09) 
+- 新增 提供组件设计资源,组件样式调整
+## 1.1.0(2021-07-30)
+- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834)
+## 1.0.9(2021-05-12)
+- 新增 组件示例地址
+## 1.0.8(2021-04-21)
+- 优化 添加依赖 uni-icons, 导入后自动下载依赖
+## 1.0.7(2021-02-05)
+- 优化 组件引用关系,通过uni_modules引用组件
+
+## 1.0.6(2021-02-05)
+- 调整为uni_modules目录规范

+ 426 - 0
uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue

@@ -0,0 +1,426 @@
+<template>
+	<view v-if="show" class="uni-noticebar" :style="{ backgroundColor }" @click="onClick">
+		<uni-icons v-if="showIcon === true || showIcon === 'true'" class="uni-noticebar-icon" type="sound"
+			:color="color" :size="fontSize * 1.5" />
+		<view ref="textBox" class="uni-noticebar__content-wrapper"
+			:class="{
+				'uni-noticebar__content-wrapper--scrollable': scrollable,
+				'uni-noticebar__content-wrapper--single': !scrollable && (single || moreText)
+			}"
+			:style="{ height: scrollable ? fontSize * 1.5 + 'px' : 'auto' }"
+		>
+			<view :id="elIdBox" class="uni-noticebar__content"
+				:class="{
+					'uni-noticebar__content--scrollable': scrollable,
+					'uni-noticebar__content--single': !scrollable && (single || moreText)
+				}"
+			>
+				<text :id="elId" ref="animationEle" class="uni-noticebar__content-text" 
+					:class="{
+						'uni-noticebar__content-text--scrollable': scrollable,
+						'uni-noticebar__content-text--single': !scrollable && (single || showGetMore)
+					}" 
+					:style="{
+						color: color,
+						fontSize: fontSize + 'px',
+						lineHeight: fontSize * 1.5 + 'px',
+						width: wrapWidth + 'px',
+						'animationDuration': animationDuration,
+						'-webkit-animationDuration': animationDuration,
+						animationPlayState: webviewHide ? 'paused' : animationPlayState,
+						'-webkit-animationPlayState': webviewHide ? 'paused' : animationPlayState,
+						animationDelay: animationDelay,
+						'-webkit-animationDelay': animationDelay
+					}"
+				>{{text}}</text>
+			</view>
+		</view>
+		<view v-if="isShowGetMore" class="uni-noticebar__more uni-cursor-point"
+			@click="clickMore">
+			<text v-if="moreText.length > 0" :style="{ color: moreColor, fontSize: fontSize + 'px' }">{{ moreText }}</text>
+			<uni-icons v-else type="right" :color="moreColor" :size="fontSize * 1.1" />
+		</view>
+		<view class="uni-noticebar-close uni-cursor-point" v-if="isShowClose">
+			<uni-icons type="closeempty" :color="color" :size="fontSize * 1.1" @click="close" />
+		</view>
+	</view>
+</template>
+
+<script>
+	// #ifdef APP-NVUE
+	const dom = weex.requireModule('dom');
+	const animation = weex.requireModule('animation');
+	// #endif
+
+	/**
+	 * NoticeBar 自定义导航栏
+	 * @description 通告栏组件
+	 * @tutorial https://ext.dcloud.net.cn/plugin?id=30
+	 * @property {Number} speed 文字滚动的速度,默认100px/秒
+	 * @property {String} text 显示文字
+	 * @property {String} backgroundColor 背景颜色
+	 * @property {String} color 文字颜色
+	 * @property {String} moreColor 查看更多文字的颜色
+	 * @property {String} moreText 设置“查看更多”的文本
+	 * @property {Boolean} single = [true|false] 是否单行
+	 * @property {Boolean} scrollable = [true|false] 是否滚动,为true时,NoticeBar为单行
+	 * @property {Boolean} showIcon = [true|false] 是否显示左侧喇叭图标
+	 * @property {Boolean} showClose = [true|false] 是否显示左侧关闭按钮
+	 * @property {Boolean} showGetMore = [true|false] 是否显示右侧查看更多图标,为true时,NoticeBar为单行
+	 * @event {Function} click 点击 NoticeBar 触发事件
+	 * @event {Function} close 关闭 NoticeBar 触发事件
+	 * @event {Function} getmore 点击”查看更多“时触发事件
+	 */
+
+	export default {
+		name: 'UniNoticeBar',
+		emits: ['click', 'getmore', 'close'],
+		props: {
+			text: {
+				type: String,
+				default: ''
+			},
+			moreText: {
+				type: String,
+				default: ''
+			},
+			backgroundColor: {
+				type: String,
+				default: '#FFF9EA'
+			},
+			speed: {
+				// 默认1s滚动100px
+				type: Number,
+				default: 100
+			},
+			color: {
+				type: String,
+				default: '#FF9A43'
+			},
+			fontSize: {
+				type: Number,
+				default: 14
+			},
+			moreColor: {
+				type: String,
+				default: '#FF9A43'
+			},
+			single: {
+				// 是否单行
+				type: [Boolean, String],
+				default: false
+			},
+			scrollable: {
+				// 是否滚动,添加后控制单行效果取消
+				type: [Boolean, String],
+				default: false
+			},
+			showIcon: {
+				// 是否显示左侧icon
+				type: [Boolean, String],
+				default: false
+			},
+			showGetMore: {
+				// 是否显示右侧查看更多
+				type: [Boolean, String],
+				default: false
+			},
+			showClose: {
+				// 是否显示左侧关闭按钮
+				type: [Boolean, String],
+				default: false
+			}
+		},
+		data() {
+			const elId = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`
+			const elIdBox = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}`
+			return {
+				textWidth: 0,
+				boxWidth: 0,
+				wrapWidth: '',
+				webviewHide: false,
+				// #ifdef APP-NVUE
+				stopAnimation: false,
+				// #endif
+				elId: elId,
+				elIdBox: elIdBox,
+				show: true,
+				animationDuration: 'none',
+				animationPlayState: 'paused',
+				animationDelay: '0s'
+			}
+		},
+		computed: {
+			isShowGetMore() {
+				return this.showGetMore === true || this.showGetMore === 'true'
+			},
+			isShowClose() {
+				return (this.showClose === true || this.showClose === 'true') 
+					&& (this.showGetMore === false || this.showGetMore === 'false')
+			}
+		},
+		mounted() {
+			// #ifdef APP-PLUS
+			var pages = getCurrentPages();
+			var page = pages[pages.length - 1];
+			var currentWebview = page.$getAppWebview();
+			currentWebview.addEventListener('hide', () => {
+				this.webviewHide = true
+			})
+			currentWebview.addEventListener('show', () => {
+				this.webviewHide = false
+			})
+			// #endif
+			this.$nextTick(() => {
+				this.initSize()
+			})
+		},
+		// #ifdef APP-NVUE
+		beforeDestroy() {
+			this.stopAnimation = true
+		},
+		// #endif
+		methods: {
+			initSize() {
+				if (this.scrollable) {
+					// #ifndef APP-NVUE
+					let query = [],
+						boxWidth = 0,
+						textWidth = 0;
+					let textQuery = new Promise((resolve, reject) => {
+						uni.createSelectorQuery()
+							// #ifndef MP-ALIPAY
+							.in(this)
+							// #endif
+							.select(`#${this.elId}`)
+							.boundingClientRect()
+							.exec(ret => {
+								this.textWidth = ret[0].width
+								resolve()
+							})
+					})
+					let boxQuery = new Promise((resolve, reject) => {
+						uni.createSelectorQuery()
+							// #ifndef MP-ALIPAY
+							.in(this)
+							// #endif
+							.select(`#${this.elIdBox}`)
+							.boundingClientRect()
+							.exec(ret => {
+								this.boxWidth = ret[0].width
+								resolve()
+							})
+					})
+					query.push(textQuery)
+					query.push(boxQuery)
+					Promise.all(query).then(() => {
+						this.animationDuration = `${this.textWidth / this.speed}s`
+						this.animationDelay = `-${this.boxWidth / this.speed}s`
+						setTimeout(() => {
+							this.animationPlayState = 'running'
+						}, 1000)
+					})
+					// #endif
+					// #ifdef APP-NVUE
+					dom.getComponentRect(this.$refs['animationEle'], (res) => {
+						let winWidth = uni.getSystemInfoSync().windowWidth
+						this.textWidth = res.size.width
+						animation.transition(this.$refs['animationEle'], {
+							styles: {
+								transform: `translateX(-${winWidth}px)`
+							},
+							duration: 0,
+							timingFunction: 'linear',
+							delay: 0
+						}, () => {
+							if (!this.stopAnimation) {
+								animation.transition(this.$refs['animationEle'], {
+									styles: {
+										transform: `translateX(-${this.textWidth}px)`
+									},
+									timingFunction: 'linear',
+									duration: (this.textWidth - winWidth) / this.speed * 1000,
+									delay: 1000
+								}, () => {
+									if (!this.stopAnimation) {
+										this.loopAnimation()
+									}
+								});
+							}
+						});
+					})
+					// #endif
+				}
+				// #ifdef APP-NVUE
+				if (!this.scrollable && (this.single || this.moreText)) {
+					dom.getComponentRect(this.$refs['textBox'], (res) => {
+						this.wrapWidth = res.size.width
+					})
+				}
+				// #endif
+			},
+			loopAnimation() {
+				// #ifdef APP-NVUE
+				animation.transition(this.$refs['animationEle'], {
+					styles: {
+						transform: `translateX(0px)`
+					},
+					duration: 0
+				}, () => {
+					if (!this.stopAnimation) {
+						animation.transition(this.$refs['animationEle'], {
+							styles: {
+								transform: `translateX(-${this.textWidth}px)`
+							},
+							duration: this.textWidth / this.speed * 1000,
+							timingFunction: 'linear',
+							delay: 0
+						}, () => {
+							if (!this.stopAnimation) {
+								this.loopAnimation()
+							}
+						});
+					}
+				});
+				// #endif
+			},
+			clickMore() {
+				this.$emit('getmore')
+			},
+			close() {
+				this.show = false;
+				this.$emit('close')
+			},
+			onClick() {
+				this.$emit('click')
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.uni-noticebar {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		width: 100%;
+		box-sizing: border-box;
+		/* #endif */
+		flex-direction: row;
+		align-items: center;
+		padding: 10px 12px;
+		margin-bottom: 10px;
+	}
+
+	.uni-cursor-point {
+		/* #ifdef H5 */
+		cursor: pointer;
+		/* #endif */
+	}
+
+	.uni-noticebar-close {
+		margin-left: 8px;
+		margin-right: 5px;
+	}
+
+	.uni-noticebar-icon {
+		margin-right: 5px;
+	}
+
+	.uni-noticebar__content-wrapper {
+		flex: 1;
+		flex-direction: column;
+		overflow: hidden;
+	}
+
+	.uni-noticebar__content-wrapper--single {
+		/* #ifndef APP-NVUE */
+		line-height: 18px;
+		/* #endif */
+	}
+
+	.uni-noticebar__content-wrapper--single,
+	.uni-noticebar__content-wrapper--scrollable {
+		flex-direction: row;
+	}
+
+	/* #ifndef APP-NVUE */
+	.uni-noticebar__content-wrapper--scrollable {
+		position: relative;
+	}
+
+	/* #endif */
+
+	.uni-noticebar__content--scrollable {
+		/* #ifdef APP-NVUE */
+		flex: 0;
+		/* #endif */
+		/* #ifndef APP-NVUE */
+		flex: 1;
+		display: block;
+		overflow: hidden;
+		/* #endif */
+	}
+
+	.uni-noticebar__content--single {
+		/* #ifndef APP-NVUE */
+		display: flex;
+		flex: none;
+		width: 100%;
+		justify-content: center;
+		/* #endif */
+	}
+
+	.uni-noticebar__content-text {
+		font-size: 14px;
+		line-height: 18px;
+		/* #ifndef APP-NVUE */
+		word-break: break-all;
+		/* #endif */
+	}
+
+	.uni-noticebar__content-text--single {
+		/* #ifdef APP-NVUE */
+		lines: 1;
+		/* #endif */
+		/* #ifndef APP-NVUE */
+		display: block;
+		width: 100%;
+		white-space: nowrap;
+		/* #endif */
+		overflow: hidden;
+		text-overflow: ellipsis;
+	}
+
+	.uni-noticebar__content-text--scrollable {
+		/* #ifdef APP-NVUE */
+		lines: 1;
+		padding-left: 750rpx;
+		/* #endif */
+		/* #ifndef APP-NVUE */
+		position: absolute;
+		display: block;
+		height: 18px;
+		line-height: 18px;
+		white-space: nowrap;
+		padding-left: 100%;
+		animation: notice 10s 0s linear infinite both;
+		animation-play-state: paused;
+		/* #endif */
+	}
+
+	.uni-noticebar__more {
+		/* #ifndef APP-NVUE */
+		display: inline-flex;
+		/* #endif */
+		flex-direction: row;
+		flex-wrap: nowrap;
+		align-items: center;
+		padding-left: 5px;
+	}
+
+	@keyframes notice {
+		100% {
+			transform: translate3d(-100%, 0, 0);
+		}
+	}
+</style>

+ 87 - 0
uni_modules/uni-notice-bar/package.json

@@ -0,0 +1,87 @@
+{
+  "id": "uni-notice-bar",
+  "displayName": "uni-notice-bar 通告栏",
+  "version": "1.2.1",
+  "description": "NoticeBar 通告栏组件,常用于展示公告信息,可设为滚动公告",
+  "keywords": [
+    "uni-ui",
+    "uniui",
+    "通告栏",
+    "公告",
+    "跑马灯"
+],
+  "repository": "https://github.com/dcloudio/uni-ui",
+  "engines": {
+    "HBuilderX": ""
+  },
+  "directories": {
+    "example": "../../temps/example_temps"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "无"
+    },
+    "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": [
+			"uni-scss",
+			"uni-icons"
+		],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "App": {
+          "app-vue": "y",
+          "app-nvue": "y"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "y",
+          "Edge": "y",
+          "Firefox": "y",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "y",
+          "百度": "y",
+          "字节跳动": "y",
+          "QQ": "y"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        },
+        "Vue": {
+            "vue2": "y",
+            "vue3": "y"
+        }
+      }
+    }
+  }
+}

+ 13 - 0
uni_modules/uni-notice-bar/readme.md

@@ -0,0 +1,13 @@
+
+
+## NoticeBar 通告栏
+> **组件名:uni-notice-bar**
+> 代码块: `uNoticeBar`
+
+
+通告栏组件 。
+
+### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-notice-bar)
+#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 
+
+

BIN
unpackage/dist/.DS_Store


BIN
unpackage/dist/build/.DS_Store


+ 0 - 0
unpackage/dist/build/.automator/mp-weixin/.automator.json


BIN
unpackage/dist/build/h5.zip


Dosya farkı çok büyük olduğundan ihmal edildi
+ 2 - 0
unpackage/dist/build/h5/index.html


BIN
unpackage/dist/build/h5/static/1.jpg


BIN
unpackage/dist/build/h5/static/2.jpg


BIN
unpackage/dist/build/h5/static/3.png


BIN
unpackage/dist/build/h5/static/4.png


unpackage/dist/build/mp-weixin/static/down.svg → unpackage/dist/build/h5/static/down.svg


BIN
unpackage/dist/build/h5/static/fonts/uniicons.b6d3756e.ttf


unpackage/dist/build/mp-weixin/static/horn.svg → unpackage/dist/build/h5/static/horn.svg


unpackage/dist/build/mp-weixin/static/htz-image-upload/play.png → unpackage/dist/build/h5/static/htz-image-upload/play.png


BIN
unpackage/dist/build/h5/static/img/4.afbcd06d.png


unpackage/dist/dev/mp-weixin/static/down.svg → unpackage/dist/build/h5/static/img/down.2844bc55.svg


BIN
unpackage/dist/build/h5/static/img/information.bf43c32a.png


unpackage/dist/build/mp-weixin/static/letter.svg → unpackage/dist/build/h5/static/img/letter.5a4aa0bf.svg


BIN
unpackage/dist/build/h5/static/img/list-img.37c80451.png


BIN
unpackage/dist/build/h5/static/img/put.b3f16c17.png


+ 0 - 0
unpackage/dist/build/mp-weixin/static/rep.svg


Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor