xiaoxin %!s(int64=3) %!d(string=hai) anos
pai
achega
76da31ebab

+ 9 - 0
.gitignore

@@ -14,3 +14,12 @@ tests/**/coverage/
 *.ntvs*
 *.njsproj
 *.sln
+node_modules
+node_modules
+node_modules
+node_modules
+node_modules
+node_modules
+node_modules
+node_modules
+node_modules

+ 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 .

+ 78 - 0
node_modules/.package-lock.json

@@ -9327,6 +9327,20 @@
       "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
       "dev": true
     },
+    "node_modules/fsevents": {
+      "version": "2.3.2",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+      "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+      "dev": true,
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "engines": {
+        "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+      }
+    },
     "node_modules/function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
@@ -11704,6 +11718,25 @@
         "normalize-path": "^2.1.1"
       }
     },
+    "node_modules/jest-haste-map/node_modules/fsevents": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+      "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+      "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
+      "dev": true,
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "dependencies": {
+        "bindings": "^1.5.0",
+        "nan": "^2.12.1"
+      },
+      "engines": {
+        "node": ">= 4.0"
+      }
+    },
     "node_modules/jest-haste-map/node_modules/normalize-path": {
       "version": "2.1.1",
       "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
@@ -13267,6 +13300,13 @@
         "thenify-all": "^1.0.0"
       }
     },
+    "node_modules/nan": {
+      "version": "2.17.0",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
+      "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
+      "dev": true,
+      "optional": true
+    },
     "node_modules/nanomatch": {
       "version": "1.2.13",
       "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@@ -19560,6 +19600,25 @@
         "fsevents": "^1.2.7"
       }
     },
+    "node_modules/watchpack-chokidar2/node_modules/fsevents": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+      "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+      "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
+      "dev": true,
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "dependencies": {
+        "bindings": "^1.5.0",
+        "nan": "^2.12.1"
+      },
+      "engines": {
+        "node": ">= 4.0"
+      }
+    },
     "node_modules/watchpack-chokidar2/node_modules/glob-parent": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
@@ -19909,6 +19968,25 @@
         }
       }
     },
+    "node_modules/webpack-dev-server/node_modules/fsevents": {
+      "version": "1.2.13",
+      "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
+      "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
+      "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
+      "dev": true,
+      "hasInstallScript": true,
+      "optional": true,
+      "os": [
+        "darwin"
+      ],
+      "dependencies": {
+        "bindings": "^1.5.0",
+        "nan": "^2.12.1"
+      },
+      "engines": {
+        "node": ">= 4.0"
+      }
+    },
     "node_modules/webpack-dev-server/node_modules/glob-parent": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",

+ 14 - 0
package-lock.json

@@ -13350,6 +13350,13 @@
         "thenify-all": "^1.0.0"
       }
     },
+    "node_modules/nan": {
+      "version": "2.17.0",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
+      "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
+      "dev": true,
+      "optional": true
+    },
     "node_modules/nanomatch": {
       "version": "1.2.13",
       "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
@@ -31190,6 +31197,13 @@
         "thenify-all": "^1.0.0"
       }
     },
+    "nan": {
+      "version": "2.17.0",
+      "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
+      "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
+      "dev": true,
+      "optional": true
+    },
     "nanomatch": {
       "version": "1.2.13",
       "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",

+ 1 - 1
src/components/Breadcrumb/index.vue

@@ -47,7 +47,7 @@ export default {
       const first = matched[0];
 
       if (!this.isDashboard(first)) {
-        matched = [{ path: "/dashboard", meta: { title: "首页" } }].concat(
+        matched = [{ path: "/workers", meta: { title: "首页" } }].concat(
           matched
         );
       }

+ 82 - 116
src/views/center/inquire.vue

@@ -20,24 +20,13 @@
           placeholder="选择日期"
           value-format="yyyy-MM-dd"
           @change="changeTime"
-        >
-        </el-date-picker>
+        ></el-date-picker>
       </el-col>
 
       <el-col :span="6">
         选择订单状态:
-        <el-select
-          clearable
-          v-model="searStatus"
-          placeholder="订单筛选"
-          @change="changeStatus"
-        >
-          <el-option
-            v-for="(item, index) in order_sta"
-            :label="item"
-            :value="index + 1"
-            :key="index"
-          ></el-option>
+        <el-select clearable v-model="searStatus" placeholder="订单筛选" @change="changeStatus">
+          <el-option v-for="(item, index) in order_sta" :label="item" :value="index + 1" :key="index"></el-option>
         </el-select>
       </el-col>
     </el-row>
@@ -54,43 +43,24 @@
       element-loading-text="拼命加载中"
       element-loading-spinner="el-icon-loading"
     >
-      <el-table-column prop="orderId" label="订单号" align="center">
-      </el-table-column>
-      <el-table-column
-        prop="repairsFault.faultName"
-        label="故障类型"
-        align="center"
-      >
-      </el-table-column>
-      <el-table-column
-        prop="repairsStudent.dormNumber"
-        label="宿舍楼栋"
-        align="center"
-      >
-      </el-table-column>
-      <el-table-column prop="orderCompleteTime" label="时间" align="center">
-      </el-table-column>
-      <el-table-column
-        prop="repairsWork.workName"
-        label="维修人员"
-        align="center"
-      >
-      </el-table-column>
+      <el-table-column prop="orderId" label="订单号" align="center"></el-table-column>
+      <el-table-column prop="repairsFault.faultName" label="故障类型" align="center"></el-table-column>
+      <el-table-column prop="repairsStudent.dormNumber" label="宿舍楼栋" align="center"></el-table-column>
+      <el-table-column prop="orderCompleteTime" label="时间" align="center"></el-table-column>
+      <el-table-column prop="repairsWork.workName" label="维修人员" align="center"></el-table-column>
       <el-table-column label="状态" align="center">
         <template slot-scope="{ row }">
           <span :style="order_sty[row.orderStatus]">
-            {{ order_sta_w[row.orderStatus] }}</span
-          >
+            {{ order_sta_w[row.orderStatus] }}
+          </span>
+          <span v-if="row.orderStatus === '3'">
+            {{ compareTime(row.orderExpectedTime, row.orderCompleteTime) ? '(按时维修)' : '(延迟维修)' }}
+          </span>
         </template>
       </el-table-column>
       <el-table-column label="操作" align="center">
         <template slot-scope="{ row }">
-          <el-button
-            @click="getOrderDetail(row.orderId)"
-            type="primary"
-            size="small"
-            >查看详情</el-button
-          >
+          <el-button @click="getOrderDetail(row.orderId)" type="primary" size="small">查看详情</el-button>
         </template>
       </el-table-column>
     </el-table>
@@ -107,41 +77,36 @@
           :page-size="pageSize"
           :current-page.sync="pageNum"
           @current-change="changeCurPage"
-        >
-        </el-pagination>
+        ></el-pagination>
       </div>
     </el-row>
 
     <!-- 订单详情弹窗 -->
-    <el-dialog
-      title="订单信息"
-      :visible.sync="detailObj.detailVisible"
-      width="30%"
-      append-to-body
-      v-if="detailObj"
-    >
+    <el-dialog title="订单信息" :visible.sync="detailObj.detailVisible" width="30%" append-to-body v-if="detailObj">
       <div class="dialog_form">
         <div class="form_itm">
-          <span>订单号:</span><span>{{ detailObj.orderId }}</span>
+          <span>订单号:</span>
+          <span>{{ detailObj.orderId }}</span>
         </div>
         <div class="form_itm">
-          <span>报修类型:</span
-          ><span>{{ detailObj.repairsFault.faultName }}</span>
+          <span>报修类型:</span>
+          <span>{{ detailObj.repairsFault.faultName }}</span>
         </div>
         <div class="form_itm">
-          <span>宿舍楼栋:</span
-          ><span>{{ detailObj.repairsStudent.dormNumber }}</span>
+          <span>宿舍楼栋:</span>
+          <span>{{ detailObj.repairsStudent.dormNumber }}</span>
         </div>
         <div class="form_itm">
-          <span>预期时间:</span><span>{{ detailObj.orderExpectedTime }}</span>
+          <span>预期时间:</span>
+          <span>{{ detailObj.orderExpectedTime }}</span>
         </div>
         <div class="form_itm">
-          <span>联系电话:</span
-          ><span>{{ detailObj.repairsStudent.studentPhone }}</span>
+          <span>联系电话:</span>
+          <span>{{ detailObj.repairsStudent.studentPhone }}</span>
         </div>
         <div class="form_itm">
-          <span>备选电话:</span
-          ><span>{{ detailObj.repairsStudent.studentOtherPhone }}</span>
+          <span>备选电话:</span>
+          <span>{{ detailObj.repairsStudent.studentOtherPhone }}</span>
         </div>
         <div class="form_itm">
           <span>故障图片:</span>
@@ -153,24 +118,15 @@
                 alt=""
                 style="max-width: 55px; max-height: 55px; margin-right: 20px"
               />
-              <el-dialog
-                width="30%"
-                title="故障图片"
-                :visible.sync="item.innerVisible"
-                append-to-body
-              >
-                <img
-                  :src="item.img"
-                  alt="故障图片"
-                  style="width: 100%; max-height: 100%"
-                />
+              <el-dialog width="30%" title="故障图片" :visible.sync="item.innerVisible" append-to-body>
+                <img :src="item.img" alt="故障图片" style="width: 100%; max-height: 100%" />
               </el-dialog>
             </div>
           </template>
+          <span v-else>--</span>
         </div>
       </div>
     </el-dialog>
-
   </div>
 </template>
 
@@ -178,95 +134,105 @@
 export default {
   data() {
     return {
-      order_sta: ["待接单", "已接单", "已维修"],
-      order_sta_w: ["新订单", "待接单", "已接单", "已维修"],
-      order_sty: ["color:green", "color:red", "color:orange", "color:green"],
+      order_sta: ['待接单', '已接单', '已维修'],
+      order_sta_w: ['新订单', '待接单', '已接单', '已维修'],
+      order_sty: ['color:green', 'color:red', 'color:orange', 'color:green'],
       loading: false,
       time: null,
       tableData: [],
-      totalCount: null, //总条数
-      pageSize: 10, //每页多少条
-      pageNum: 1, //当前页
-      searStatus: "",
+      totalCount: null, // 总条数
+      pageSize: 10, // 每页多少条
+      pageNum: 1, // 当前页
+      searStatus: '',
       orderStatus: 123,
       imgArr: [],
-      detailObj: "",
-    };
+      detailObj: '',
+    }
   },
   created() {
-    this.getAllOrderList();
+    this.getAllOrderList()
   },
   methods: {
     async getAllOrderList() {
-      this.loading = true;
+      this.loading = true
       let params = {
         pageNum: this.pageNum,
         pageSize: this.pageSize,
         time: this.time,
         orderStatus: this.orderStatus,
-      };
-      let res = await this.$API.repair.reqGetOrder(params);
+      }
+      let res = await this.$API.repair.reqGetOrder(params)
       // console.log(res);
       if (res.status == 200) {
-        this.tableData = res.data.list;
-        this.totalCount = res.data.total;
+        this.tableData = res.data.list
+        this.totalCount = res.data.total
       } else {
-        console.log("获取列表数据失败");
-        this.$message.error(res.errmsg);
+        console.log('获取列表数据失败')
+        this.$message.error(res.errmsg)
       }
-      this.loading = false;
+      this.loading = false
     },
 
     async getOrderDetail(orderId) {
       let params = {
         orderId: orderId,
-      };
-      let res = await this.$API.repair.reqGetRepairListDetail(params);
+      }
+      let res = await this.$API.repair.reqGetRepairListDetail(params)
       // console.log(res);
       if (res.status == 200) {
-        this.imgArr = null;
-        this.detailObj = res.data;
-        this.$set(this.detailObj, "detailVisible", true);
+        this.imgArr = null
+        this.detailObj = res.data
+        this.$set(this.detailObj, 'detailVisible', true)
         if (this.detailObj.orderImages) {
-          this.imgArr = this.detailObj.orderImages.match(/[^\;]+/g);
+          this.imgArr = this.detailObj.orderImages.match(/[^\;]+/g)
           this.imgArr = this.imgArr.map((item) => {
-            return { innerVisible: false, img: item };
-          });
+            return { innerVisible: false, img: item }
+          })
         }
       } else {
-        console.log("获取详情数据失败");
-        this.$message.error(res.errmsg);
+        console.log('获取详情数据失败')
+        this.$message.error(res.errmsg)
       }
     },
 
     deriveExcel() {
       this.time == null
         ? (window.location.href = `/baoxiu/repairApi/order/queryOrderExecl?orderType=${this.orderStatus}`)
-        : (window.location.href = `/baoxiu/repairApi/order/queryOrderExecl?time=${this.time}&orderType=${this.orderStatus}`);
-      this.$message.success("导出成功");
+        : (window.location.href = `/baoxiu/repairApi/order/queryOrderExecl?time=${this.time}&orderType=${this.orderStatus}`)
+      this.$message.success('导出成功')
     },
 
     changeTime() {
-      this.pageNum = 1;
-      this.getAllOrderList();
+      this.pageNum = 1
+      this.getAllOrderList()
     },
 
     changeStatus() {
-      if (this.searStatus == "") {
-        this.orderStatus = 123;
+      if (this.searStatus == '') {
+        this.orderStatus = 123
       } else {
-        this.orderStatus = this.searStatus;
+        this.orderStatus = this.searStatus
       }
-      this.pageNum = 1;
-      this.getAllOrderList();
+      this.pageNum = 1
+      this.getAllOrderList()
     },
 
     changeCurPage(val) {
-      this.pageNum = val;
-      this.getAllOrderList();
+      this.pageNum = val
+      this.getAllOrderList()
+    },
+    compareTime(startTime, endTime) {
+      console.log('duibi对比')
+      var start_time = startTime.replace(/-|\s|:|\//g, '')
+      var end_time = endTime.replace(/-|\s|:|\//g, '')
+      if (start_time < end_time) {
+        return true
+      } else {
+        return false
+      }
     },
   },
-};
+}
 </script>
 
 <style scoped>
@@ -290,4 +256,4 @@ export default {
   margin-bottom: 15px;
   font-size: 20px;
 }
-</style>
+</style>

+ 56 - 58
src/views/center/sendBack.vue

@@ -98,65 +98,63 @@
 
     <!-- 订单详情弹窗 -->
     <el-dialog
-        title="订单信息"
-        :visible.sync="detailObj.detailVisible"
-        width="30%"
-        append-to-body
-        v-if="detailObj"
-      >
-        <div class="dialog_form">
-          <div class="form_itm">
-            <span>订单号:</span><span>{{ detailObj.orderId }}</span>
-          </div>
-          <div class="form_itm">
-            <span>报修类型:</span
-            ><span>{{ detailObj.repairsFault.faultName }}</span>
-          </div>
-          <div class="form_itm">
-            <span>宿舍楼栋:</span
-            ><span>{{ detailObj.repairsStudent.dormNumber }}</span>
-          </div>
-          <div class="form_itm">
-            <span>预期时间:</span
-            ><span>{{ detailObj.orderExpectedTime }}</span>
-          </div>
-          <div class="form_itm">
-            <span>联系电话:</span
-            ><span>{{ detailObj.repairsStudent.studentPhone }}</span>
-          </div>
-          <div class="form_itm">
-            <span>备选电话:</span
-            ><span>{{ detailObj.repairsStudent.studentOtherPhone }}</span>
-          </div>
-          <div class="form_itm">
-            <span>故障图片:</span>
-            <template v-if="imgArr != null">
-              <div class="img_field" v-for="(item, i) in imgArr" :key="i">
+      title="订单信息"
+      :visible.sync="detailObj.detailVisible"
+      width="30%"
+      append-to-body
+      v-if="detailObj"
+    >
+      <div class="dialog_form">
+        <div class="form_itm">
+          <span>订单号:</span><span>{{ detailObj.orderId }}</span>
+        </div>
+        <div class="form_itm">
+          <span>报修类型:</span
+          ><span>{{ detailObj.repairsFault.faultName }}</span>
+        </div>
+        <div class="form_itm">
+          <span>宿舍楼栋:</span
+          ><span>{{ detailObj.repairsStudent.dormNumber }}</span>
+        </div>
+        <div class="form_itm">
+          <span>预期时间:</span><span>{{ detailObj.orderExpectedTime }}</span>
+        </div>
+        <div class="form_itm">
+          <span>联系电话:</span
+          ><span>{{ detailObj.repairsStudent.studentPhone }}</span>
+        </div>
+        <div class="form_itm">
+          <span>备选电话:</span
+          ><span>{{ detailObj.repairsStudent.studentOtherPhone }}</span>
+        </div>
+        <div class="form_itm">
+          <span>故障图片:</span>
+          <template v-if="imgArr != null">
+            <div class="img_field" v-for="(item, i) in imgArr" :key="i">
+              <img
+                @click="item.innerVisible = true"
+                :src="item.img"
+                alt=""
+                style="max-width: 55px; max-height: 55px; margin-right: 20px"
+              />
+              <el-dialog
+                width="30%"
+                title="故障图片"
+                :visible.sync="item.innerVisible"
+                append-to-body
+                top="2vh"
+              >
                 <img
-                  @click="item.innerVisible = true"
                   :src="item.img"
-                  alt=""
-                  style="max-width: 55px; max-height: 55px; margin-right: 20px"
+                  alt="故障图片"
+                  style="width: 100%; max-height: 100%"
                 />
-                <el-dialog
-                  width="30%"
-                  title="故障图片"
-                  :visible.sync="item.innerVisible"
-                  append-to-body
-                  top="2vh"
-                >
-                  <img
-                    :src="item.img"
-                    alt="故障图片"
-                    style="width: 100%; max-height: 100%"
-                  />
-                </el-dialog>
-              </div>
-            </template>
-          </div>
+              </el-dialog>
+            </div>
+          </template>
         </div>
-      </el-dialog>
-
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -178,8 +176,8 @@ export default {
       totalCount: null, //总条数
       pageSize: 10, //每页多少条
       pageNum: 1, //当前页
-      imgArr:[],
-      detailObj:""
+      imgArr: [],
+      detailObj: "",
     };
   },
   created() {
@@ -269,4 +267,4 @@ export default {
   margin-bottom: 15px;
   font-size: 20px;
 }
-</style>
+</style>

+ 4 - 4
vue.config.js

@@ -8,9 +8,9 @@ function resolve(dir) {
 
 const name = defaultSettings.title || 'vue Admin Template' // 页面标题
 
-//如果端口设置为80,使用管理员权限执行命令行
-//例如,Mac: sudo npm run  
-//可以通过以下方式修改端口:  
+// 如果端口设置为80,使用管理员权限执行命令行
+// 例如,Mac: sudo npm run  
+// 可以通过以下方式修改端口:  
 // port = 9528 npm run dev 或者 npm run dev——port = 9528  
 const port = process.env.port || process.env.npm_config_port || 9528 // dev端口
 
@@ -27,7 +27,7 @@ module.exports = {
   outputDir: 'dist',
   assetsDir: 'static',
   // lintOnSave: process.env.NODE_ENV === 'development',
-  lintOnSave: false,  //关闭eslint校验
+  lintOnSave: false,  // 关闭eslint校验
   productionSourceMap: false,
   devServer: {
     port: port,