Эх сурвалжийг харах

Merge branch 'master' of http://git.qmth.com.cn/ExamCloud-3/examcloud-web-admin

nikang 6 жил өмнө
parent
commit
56ee506d36

+ 26 - 5
src/modules/basic/view/campus.vue

@@ -173,7 +173,7 @@
         </el-dialog>
         </el-dialog>
 
 
         <!-- 导入弹窗 -->
         <!-- 导入弹窗 -->
-        <el-dialog title="导入窗口" width="460px" :visible.sync="impDialog">
+        <el-dialog title="导入窗口" width="520px" :visible.sync="impDialog">
           <el-form>
           <el-form>
             <el-row>
             <el-row>
               <el-form-item style="margin-left:20px">
               <el-form-item style="margin-left:20px">
@@ -192,17 +192,37 @@
                   :auto-upload="false"
                   :auto-upload="false"
                   :multiple="false"
                   :multiple="false"
                 >
                 >
-                  <el-button size="small" slot="trigger" type="primary">
+                  <el-button
+                    icon="el-icon-search"
+                    size="small"
+                    slot="trigger"
+                    type="primary"
+                  >
                     选择文件
                     选择文件
                   </el-button>
                   </el-button>
                   &nbsp;
                   &nbsp;
-                  <el-button size="small" type="primary" @click="submitUpload">
+                  <el-button
+                    icon="el-icon-check"
+                    size="small"
+                    type="primary"
+                    @click="submitUpload"
+                  >
                     确认上传
                     确认上传
                   </el-button>
                   </el-button>
-                  <el-button size="small" type="danger" @click="removeFile">
+                  <el-button
+                    icon="el-icon-refresh"
+                    size="small"
+                    type="primary"
+                    @click="removeFile"
+                  >
                     清空文件
                     清空文件
                   </el-button>
                   </el-button>
-                  <el-button size="small" type="info" @click="exportFile">
+                  <el-button
+                    icon="el-icon-download"
+                    size="small"
+                    type="primary"
+                    @click="exportFile"
+                  >
                     下载模板
                     下载模板
                   </el-button>
                   </el-button>
                   <div slot="tip" class="el-upload__tip">只能上传xlsx文件</div>
                   <div slot="tip" class="el-upload__tip">只能上传xlsx文件</div>
@@ -329,6 +349,7 @@ export default {
   data() {
   data() {
     return {
     return {
       isSuperAdmin: false,
       isSuperAdmin: false,
+      paginationShow: false,
       rootOrgList: [],
       rootOrgList: [],
       formSearch: {
       formSearch: {
         parentId: null,
         parentId: null,

+ 28 - 8
src/modules/basic/view/course.vue

@@ -210,7 +210,7 @@
         </el-dialog>
         </el-dialog>
 
 
         <!-- 导入弹窗 -->
         <!-- 导入弹窗 -->
-        <el-dialog title="导入窗口" width="420px" :visible.sync="impDialog">
+        <el-dialog title="导入窗口" width="520px" :visible.sync="impDialog">
           <el-form>
           <el-form>
             <el-row>
             <el-row>
               <el-form-item style="margin-left:20px">
               <el-form-item style="margin-left:20px">
@@ -229,17 +229,37 @@
                   :auto-upload="false"
                   :auto-upload="false"
                   :multiple="false"
                   :multiple="false"
                 >
                 >
-                  <el-button size="small" slot="trigger" type="primary">
+                  <el-button
+                    size="small"
+                    slot="trigger"
+                    type="primary"
+                    icon="el-icon-search"
+                  >
                     选择文件
                     选择文件
                   </el-button>
                   </el-button>
                   &nbsp;
                   &nbsp;
-                  <el-button size="small" type="success" @click="submitUpload">
+                  <el-button
+                    size="small"
+                    type="primary"
+                    @click="submitUpload"
+                    icon="el-icon-check"
+                  >
                     确认上传
                     确认上传
                   </el-button>
                   </el-button>
-                  <el-button size="small" type="danger" @click="removeFile">
+                  <el-button
+                    size="small"
+                    type="primary"
+                    @click="removeFile"
+                    icon="el-icon-refresh"
+                  >
                     清空文件
                     清空文件
                   </el-button>
                   </el-button>
-                  <el-button size="small" type="info" @click="exportFile">
+                  <el-button
+                    size="small"
+                    type="primary"
+                    @click="exportFile"
+                    icon="el-icon-download"
+                  >
                     下载模板
                     下载模板
                   </el-button>
                   </el-button>
                   <div slot="tip" class="el-upload__tip">只能上传xlsx文件</div>
                   <div slot="tip" class="el-upload__tip">只能上传xlsx文件</div>
@@ -347,18 +367,18 @@
         <el-dialog
         <el-dialog
           title="添加关联专业"
           title="添加关联专业"
           :visible.sync="addRelationDialog"
           :visible.sync="addRelationDialog"
-          width="420px"
+          width="380px"
+          @close="() => this.$refs.addRelationForm.clearValidate()"
         >
         >
           <el-form
           <el-form
             :inline="true"
             :inline="true"
             inline-message
             inline-message
             :model="addRelationForm"
             :model="addRelationForm"
             ref="addRelationForm"
             ref="addRelationForm"
-            label-width="100px"
             :rules="addRelationRules"
             :rules="addRelationRules"
           >
           >
             <el-row>
             <el-row>
-              <el-form-item label="专业" class="pull-left" prop="specialtyId">
+              <el-form-item label="专业" prop="specialtyId">
                 <el-select
                 <el-select
                   class="input"
                   class="input"
                   remote
                   remote

+ 3 - 3
src/modules/basic/view/exam_site.vue

@@ -53,7 +53,7 @@
                   icon="el-icon-arrow-left"
                   icon="el-icon-arrow-left"
                   @click="back"
                   @click="back"
                 >
                 >
-                  退
+                  
                 </el-button>
                 </el-button>
               </el-form-item>
               </el-form-item>
             </el-row>
             </el-row>
@@ -64,7 +64,7 @@
             title="考点信息"
             title="考点信息"
             width="450px"
             width="450px"
             :visible.sync="examSiteDialog"
             :visible.sync="examSiteDialog"
-            @before-close="dialogBeforeClose"
+            @close="dialogBeforeClose"
           >
           >
             <el-form
             <el-form
               :inline="true"
               :inline="true"
@@ -76,7 +76,7 @@
               label-width="90px"
               label-width="90px"
             >
             >
               <el-row>
               <el-row>
-                <el-form-item label="学习中心" label-width="120px" prop="code">
+                <el-form-item label="学习中心" label-width="120px">
                   <el-input
                   <el-input
                     class="pull_length"
                     class="pull_length"
                     v-model="orgName"
                     v-model="orgName"

+ 30 - 6
src/modules/basic/view/specially.vue

@@ -227,11 +227,13 @@
       <!-- 添加关联 -->
       <!-- 添加关联 -->
       <el-dialog
       <el-dialog
         title="添加关联课程"
         title="添加关联课程"
-        width="500px"
+        width="380px"
         :visible.sync="addRelationDialog"
         :visible.sync="addRelationDialog"
+        @close="() => this.$refs.addRelationForm.clearValidate()"
       >
       >
         <el-form
         <el-form
           :inline="true"
           :inline="true"
+          inline-message
           :model="addRelationForm"
           :model="addRelationForm"
           ref="addRelationForm"
           ref="addRelationForm"
           :rules="addRelationRules"
           :rules="addRelationRules"
@@ -257,6 +259,8 @@
                 />
                 />
               </el-select>
               </el-select>
             </el-form-item>
             </el-form-item>
+          </el-row>
+          <el-row class="d-flex justify-content-center">
             <el-button type="primary" @click="submitAddRelationForm">
             <el-button type="primary" @click="submitAddRelationForm">
               保 存
               保 存
             </el-button>
             </el-button>
@@ -328,7 +332,7 @@
       </div>
       </div>
 
 
       <!-- 导入弹窗 -->
       <!-- 导入弹窗 -->
-      <el-dialog title="导入窗口" width="420px" :visible.sync="impDialog">
+      <el-dialog title="导入窗口" width="520px" :visible.sync="impDialog">
         <el-form>
         <el-form>
           <el-row>
           <el-row>
             <el-form-item style="margin-left:20px">
             <el-form-item style="margin-left:20px">
@@ -347,17 +351,37 @@
                 :auto-upload="false"
                 :auto-upload="false"
                 :multiple="false"
                 :multiple="false"
               >
               >
-                <el-button size="small" slot="trigger" type="primary">
+                <el-button
+                  size="small"
+                  slot="trigger"
+                  type="primary"
+                  icon="el-icon-search"
+                >
                   选择文件
                   选择文件
                 </el-button>
                 </el-button>
                 &nbsp;
                 &nbsp;
-                <el-button size="small" type="success" @click="submitUpload">
+                <el-button
+                  size="small"
+                  type="primary"
+                  @click="submitUpload"
+                  icon="el-icon-check"
+                >
                   确认上传
                   确认上传
                 </el-button>
                 </el-button>
-                <el-button size="small" type="danger" @click="removeFile">
+                <el-button
+                  size="small"
+                  type="primary"
+                  @click="removeFile"
+                  icon="el-icon-refresh"
+                >
                   清空文件
                   清空文件
                 </el-button>
                 </el-button>
-                <el-button size="small" type="info" @click="exportFile">
+                <el-button
+                  size="small"
+                  type="primary"
+                  @click="exportFile"
+                  icon="el-icon-download"
+                >
                   下载模板
                   下载模板
                 </el-button>
                 </el-button>
                 <div slot="tip" class="el-upload__tip">只能上传xlsx文件</div>
                 <div slot="tip" class="el-upload__tip">只能上传xlsx文件</div>

+ 7 - 5
src/modules/basic/view/user.vue

@@ -214,6 +214,7 @@
         <el-dialog title="编辑用户" width="450px" :visible.sync="updateDialog">
         <el-dialog title="编辑用户" width="450px" :visible.sync="updateDialog">
           <el-form
           <el-form
             :inline="true"
             :inline="true"
+            inline-message
             :model="userForm"
             :model="userForm"
             ref="updateForm"
             ref="updateForm"
             :rules="rules"
             :rules="rules"
@@ -551,20 +552,21 @@ export default {
           }
           }
         ],
         ],
         mobile: [
         mobile: [
-          {
-            message: "请输入联系方式",
-            trigger: "blur"
-          }
+          // {
+          //   message: "请输入联系方式",
+          //   trigger: "blur"
+          // }
         ],
         ],
         rootOrgId: [
         rootOrgId: [
           {
           {
             validator: validateRootOrg,
             validator: validateRootOrg,
-            trigger: "blur,change"
+            trigger: "blur"
           }
           }
         ],
         ],
         orgId: [],
         orgId: [],
         roleIds: [
         roleIds: [
           {
           {
+            required: true,
             validator: validateRoles,
             validator: validateRoles,
             trigger: "blur,change"
             trigger: "blur,change"
           }
           }

+ 2 - 0
src/modules/examwork/view/offlineExam.vue

@@ -258,6 +258,8 @@ export default {
                 type: "success",
                 type: "success",
                 message: "新增成功"
                 message: "新增成功"
               });
               });
+              this.examId = response.data.id;
+              this.form.id = this.examId;
               this.$router.push({
               this.$router.push({
                 path: "/examwork/offlineExam/" + response.data.id
                 path: "/examwork/offlineExam/" + response.data.id
               });
               });

+ 2 - 0
src/modules/examwork/view/onlineExam.vue

@@ -955,6 +955,8 @@ export default {
                 type: "success",
                 type: "success",
                 message: "新增成功"
                 message: "新增成功"
               });
               });
+              this.examId = response.data.id;
+              this.form.id = this.examId;
               this.$router.push({
               this.$router.push({
                 path: "/examwork/onlineExam/" + response.data.id
                 path: "/examwork/onlineExam/" + response.data.id
               });
               });

+ 6 - 7
src/modules/examwork/view/onlineExamOrgSettings.vue

@@ -582,7 +582,7 @@ export default {
       );
       );
     },
     },
     importOrgSettings() {
     importOrgSettings() {
-      this.fileList = [];
+      this.removeFile();
       this.orgSettingsImportDialog = true;
       this.orgSettingsImportDialog = true;
     },
     },
 
 
@@ -595,8 +595,7 @@ export default {
         message: "上传成功",
         message: "上传成功",
         type: "success"
         type: "success"
       });
       });
-      this.fileLoading = false;
-      this.studentImportDialog = false;
+      this.orgSettingsImportDialog = false;
       this.resetPageAndSearch();
       this.resetPageAndSearch();
     },
     },
     uploadError(response, file, fileList) {
     uploadError(response, file, fileList) {
@@ -611,12 +610,13 @@ export default {
           type: "error"
           type: "error"
         });
         });
       }
       }
-      this.fileLoading = false;
     },
     },
     //清空文件
     //清空文件
     removeFile() {
     removeFile() {
-      // this.fileList = [];
-      this.$refs.upload.clearFiles();
+      this.fileList = [];
+      if (this.$refs.upload) {
+        this.$refs.upload.clearFiles();
+      }
     },
     },
     //确定上传
     //确定上传
     submitUpload() {
     submitUpload() {
@@ -648,7 +648,6 @@ export default {
             message: "上传文件必须为xlsx格式",
             message: "上传文件必须为xlsx格式",
             type: "error"
             type: "error"
           });
           });
-          this.fileList = [];
           return false;
           return false;
         }
         }
       }
       }

+ 2 - 0
src/modules/examwork/view/practiceExam.vue

@@ -457,6 +457,8 @@ export default {
                 type: "success",
                 type: "success",
                 message: "新增成功"
                 message: "新增成功"
               });
               });
+              this.examId = response.data.id;
+              this.form.id = this.examId;
               this.$router.push({
               this.$router.push({
                 path: "/examwork/practiceExam/" + response.data.id
                 path: "/examwork/practiceExam/" + response.data.id
               });
               });

+ 2 - 0
src/modules/examwork/view/printExam.vue

@@ -218,6 +218,8 @@ export default {
                 type: "success",
                 type: "success",
                 message: "新增成功"
                 message: "新增成功"
               });
               });
+              this.examId = response.data.id;
+              this.form.id = this.examId;
               this.$router.push({
               this.$router.push({
                 path: "/examwork/printExam/" + response.data.id
                 path: "/examwork/printExam/" + response.data.id
               });
               });

+ 3 - 1
src/modules/examwork/view/traditionExam.vue

@@ -211,6 +211,8 @@ export default {
                 type: "success",
                 type: "success",
                 message: "新增成功"
                 message: "新增成功"
               });
               });
+              this.examId = response.data.id;
+              this.form.id = this.examId;
               this.$router.push({
               this.$router.push({
                 path: "/examwork/traditionExam/" + response.data.id
                 path: "/examwork/traditionExam/" + response.data.id
               });
               });
@@ -239,4 +241,4 @@ export default {
 .input >>> .el-input__inner {
 .input >>> .el-input__inner {
   -webkit-appearance: button;
   -webkit-appearance: button;
 }
 }
-</style>
+</style>

+ 1 - 1
src/modules/marking/views/Marking.vue

@@ -203,7 +203,7 @@
           <small class="marktitle titlefont marksign">
           <small class="marktitle titlefont marksign">
             <el-button type="success" @click="backIndex" size="small">
             <el-button type="success" @click="backIndex" size="small">
               <!-- <v-icon name="sign-out-alt" scale="0.5"/> -->
               <!-- <v-icon name="sign-out-alt" scale="0.5"/> -->
-              <span class="titlefont">退回</span>
+              <span class="titlefont">回</span>
             </el-button>
             </el-button>
           </small>
           </small>
         </span>
         </span>

+ 12 - 10
src/modules/portal/views/home/Home.vue

@@ -51,7 +51,12 @@
     </el-container>
     </el-container>
 
 
     <!-- 添加用户信息弹出框 -->
     <!-- 添加用户信息弹出框 -->
-    <el-dialog title="个人信息" width="400px" :visible.sync="userDialog">
+    <el-dialog
+      title="个人信息"
+      width="400px"
+      :visible.sync="userDialog"
+      @close="() => this.$refs.passForm.clearValidate()"
+    >
       <el-tabs value="first">
       <el-tabs value="first">
         <el-tab-pane label="用户权限" name="first">
         <el-tab-pane label="用户权限" name="first">
           <el-form :inline="true" label-position="right" label-width="90px">
           <el-form :inline="true" label-position="right" label-width="90px">
@@ -72,17 +77,18 @@
         <el-tab-pane label="修改密码" name="second">
         <el-tab-pane label="修改密码" name="second">
           <el-form
           <el-form
             :inline="true"
             :inline="true"
+            inline-message
             :model="passForm"
             :model="passForm"
             ref="passForm"
             ref="passForm"
             :rules="passRules"
             :rules="passRules"
             label-position="right"
             label-position="right"
-            label-width="90px"
+            label-width="80px"
           >
           >
             <el-row>
             <el-row>
-              <el-form-item label="密码" label-width="120px" prop="pass">
+              <el-form-item label="密码" prop="pass">
                 <el-input
                 <el-input
                   type="password"
                   type="password"
-                  class="pull_length"
+                  style="width: 150px"
                   v-model="passForm.pass"
                   v-model="passForm.pass"
                   auto-complete="off"
                   auto-complete="off"
                   placeholder="请输入密码"
                   placeholder="请输入密码"
@@ -90,14 +96,10 @@
               </el-form-item>
               </el-form-item>
             </el-row>
             </el-row>
             <el-row>
             <el-row>
-              <el-form-item
-                label="确认密码"
-                label-width="120px"
-                prop="checkPass"
-              >
+              <el-form-item label="确认密码" prop="checkPass">
                 <el-input
                 <el-input
                   type="password"
                   type="password"
-                  class="pull_length"
+                  style="width: 150px"
                   v-model="passForm.checkPass"
                   v-model="passForm.checkPass"
                   auto-complete="off"
                   auto-complete="off"
                   placeholder="请输入确认密码"
                   placeholder="请输入确认密码"

+ 0 - 1
src/modules/print/view/ExamStructure.vue

@@ -99,7 +99,6 @@
                 icon="el-icon-delete"
                 icon="el-icon-delete"
                 @click="removeStructure(scope.row)"
                 @click="removeStructure(scope.row)"
                 :disabled="!hasPermit"
                 :disabled="!hasPermit"
-                plain
                 >删除
                 >删除
               </el-button>
               </el-button>
             </template>
             </template>

+ 0 - 1
src/modules/print/view/ProjectStatistic.vue

@@ -139,7 +139,6 @@
                 v-if="scope.row.btnType == 'OTHER'"
                 v-if="scope.row.btnType == 'OTHER'"
                 @click="removeOtherSetting(scope.row)"
                 @click="removeOtherSetting(scope.row)"
                 :disabled="!hasPermit"
                 :disabled="!hasPermit"
-                plain
                 >删除
                 >删除
               </el-button>
               </el-button>
             </template>
             </template>

+ 62 - 1
src/plugins/axios.js

@@ -82,6 +82,15 @@ _axiosWithoutResponseInterceptors.interceptors.request.use(
     if (config.url.includes("/login") === false) {
     if (config.url.includes("/login") === false) {
       if (!wk_token) {
       if (!wk_token) {
         const user = JSON.parse(window.sessionStorage.getItem("user"));
         const user = JSON.parse(window.sessionStorage.getItem("user"));
+        if (!user) {
+          Vue.prototype.$alert("登录失效,请重新登录!", "提示", {
+            confirmButtonText: "确定",
+            callback: () => {
+              router.push("/login/" + "?orgId=" + wk_orgId);
+            }
+          });
+          return;
+        }
         wk_token = user.token;
         wk_token = user.token;
         wk_key = user.key;
         wk_key = user.key;
         wk_orgId = user.rootOrgId;
         wk_orgId = user.rootOrgId;
@@ -128,7 +137,7 @@ _axios.interceptors.response.use(
 
 
     // 登录失效 跳转登录页面
     // 登录失效 跳转登录页面
     if (status == 403 || status == 401) {
     if (status == 403 || status == 401) {
-      Vue.prototype.$alert("登录失效,请重新登录!", "提示", {
+      Vue.prototype.$alert("登录失效请重新登录!", "提示", {
         confirmButtonText: "确定",
         confirmButtonText: "确定",
         callback: () => {
         callback: () => {
           router.push("/login/" + "?orgId=" + wk_orgId);
           router.push("/login/" + "?orgId=" + wk_orgId);
@@ -143,6 +152,11 @@ _axios.interceptors.response.use(
         }
         }
       });
       });
       return Promise.reject(error);
       return Promise.reject(error);
+    } else if (status == 502) {
+      Vue.prototype.$alert("服务器异常!", "提示", {
+        confirmButtonText: "确定"
+      });
+      return Promise.reject(error);
     }
     }
 
 
     if (status != 200) {
     if (status != 200) {
@@ -176,6 +190,53 @@ _axios.interceptors.response.use(
   }
   }
 );
 );
 
 
+// Add a response interceptor
+_axiosWithoutResponseInterceptors.interceptors.response.use(
+  response => {
+    return response;
+  },
+  error => {
+    if (!error.response) {
+      Vue.prototype.$notify({
+        showClose: true,
+        message: "网络连接异常,请检查网络设置。",
+        type: "error"
+      });
+      return Promise.reject(error);
+    }
+    // 这里是返回状态码不为200时候的错误处理
+    let status = error.response.status;
+
+    // 登录失效 跳转登录页面
+    if (status == 403 || status == 401) {
+      Vue.prototype.$alert("登录失效,请重新登录!", "提示", {
+        confirmButtonText: "确定",
+        callback: () => {
+          router.push("/login/" + "?orgId=" + wk_orgId);
+        }
+      });
+      return Promise.reject(error);
+    } else if (status == 405) {
+      Vue.prototype.$alert("没有权限!", "提示", {
+        confirmButtonText: "确定",
+        callback: () => {
+          router.push("/login/" + "?orgId=" + wk_orgId);
+        }
+      });
+      return Promise.reject(error);
+    } else if (status == 502) {
+      Vue.prototype.$alert("服务器异常!", "提示", {
+        confirmButtonText: "确定"
+      });
+      return Promise.reject(error);
+    }
+
+    if (status != 200) {
+      return Promise.reject(error);
+    }
+  }
+);
+
 Plugin.install = function(Vue) {
 Plugin.install = function(Vue) {
   Vue.$http = _axiosWithoutResponseInterceptors;
   Vue.$http = _axiosWithoutResponseInterceptors;
   Object.defineProperties(Vue.prototype, {
   Object.defineProperties(Vue.prototype, {

+ 8 - 2
src/plugins/vueLifecylceLogs.js

@@ -45,7 +45,7 @@ const injectMethods = [
   { name: "destroyed", style: "color: red; font-weight: bold" }
   { name: "destroyed", style: "color: red; font-weight: bold" }
 ];
 ];
 
 
-const injecRoutertMethods = [
+const injectRouterMethods = [
   { name: "beforeRouteEnter", style: ["background: #aaa", "color: #0000aa;"] },
   { name: "beforeRouteEnter", style: ["background: #aaa", "color: #0000aa;"] },
   { name: "beforeRouteUpdate", style: ["background: #aaa", "color: #0000aa;"] },
   { name: "beforeRouteUpdate", style: ["background: #aaa", "color: #0000aa;"] },
   { name: "beforeRouteLeave", style: ["background: #aaa", "color: #0000aa;"] }
   { name: "beforeRouteLeave", style: ["background: #aaa", "color: #0000aa;"] }
@@ -63,6 +63,12 @@ for (const m of injectMethods) {
     if (!componentNameMatch(this.$options.name)) {
     if (!componentNameMatch(this.$options.name)) {
       if (!startLogging) {
       if (!startLogging) {
         startLogging = true;
         startLogging = true;
+        if (groupCollapsed) {
+          console.groupCollapsed("Vue lifecyle logs");
+        } else {
+          console.group("Vue lifecyle logs");
+        }
+
         loggingTime = Date.now();
         loggingTime = Date.now();
       }
       }
       console.log(
       console.log(
@@ -73,7 +79,7 @@ for (const m of injectMethods) {
   };
   };
 }
 }
 
 
-for (const m of injecRoutertMethods) {
+for (const m of injectRouterMethods) {
   lifeCycleMixins[m.name] = function(to, from, next) {
   lifeCycleMixins[m.name] = function(to, from, next) {
     if (!startLogging) {
     if (!startLogging) {
       startLogging = true;
       startLogging = true;

+ 1 - 0
vue.config.js

@@ -51,6 +51,7 @@ module.exports = {
     proxy
     proxy
   },
   },
   configureWebpack: {
   configureWebpack: {
+    devtool: "source-map",
     plugins: [
     plugins: [
       // Ignore all locale files of moment.js
       // Ignore all locale files of moment.js
       new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)
       new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/)