Просмотр исходного кода

评论管理页面修改;
技师管理页面修改;

郭鹏飞 8 месяцев назад
Родитель
Сommit
2947a95015
2 измененных файлов с 299 добавлено и 198 удалено
  1. 118 10
      src/views/comment/index.vue
  2. 181 188
      src/views/technician/technician/index.vue

+ 118 - 10
src/views/comment/index.vue

@@ -15,8 +15,8 @@
         </el-form-item>
       </el-form>
   
-      <!-- <el-row :gutter="10" class="mb8">
-        <el-col :span="1.5">
+      <el-row :gutter="10" class="mb8">
+        <!-- <el-col :span="1.5">
           <el-button
             type="primary"
             plain
@@ -57,25 +57,52 @@
             @click="handleExport"
             v-hasPermi="['system:comment:export']"
           >导出</el-button>
+        </el-col> -->
+        <el-col :span="1.5">
+          <el-button
+            type="warning"
+            plain
+            icon="el-icon-bell"
+            size="mini"
+            :disabled="multiple"
+            @click="handleExport"
+            v-hasPermi="['system:comment:export']"
+          >审核</el-button>
+        </el-col>
+        <el-col :span="1.5">
+          <el-button
+            type="primary"
+            plain
+            icon="el-icon-download"
+            size="mini"
+            @click="handleImport"
+            v-hasPermi="['system:comment:export']"
+          >敏感词库维护</el-button>
         </el-col>
         <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
-      </el-row> -->
+      </el-row>
   
       <el-table v-loading="loading" :data="commentList" @selection-change="handleSelectionChange">
-        <!-- <el-table-column type="selection" width="55" align="center" /> -->
+        <el-table-column type="selection" width="55" align="center" />
         <!-- <el-table-column label="主键" align="center" prop="cId" />
         <el-table-column label="评论人头像" align="center" prop="cIcon" /> -->
-        <el-table-column label="评论人昵称" align="center" prop="cNickName" />
-        <el-table-column label="评论内容" align="center" prop="cText" />
+        <el-table-column label="评论人昵称" align="left" prop="cNickName" />
+        <el-table-column label="评论内容" align="left" prop="cText" />
         <!-- <el-table-column label="技师id" align="center" prop="cJsid" />
         <el-table-column label="评论人openid" align="center" prop="cOpenId" /> -->
         <el-table-column label="评论分数" align="center" prop="nStar" />
         <el-table-column label="评论时间" align="center" prop="dTime" width="180">
           <template slot-scope="scope">
-            <span>{{ parseTime(scope.row.dTime, '{y}-{m}-{d}') }}</span>
+            <span>{{ parseTime(scope.row.dTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
           </template>
         </el-table-column>
         <el-table-column label="技师姓名" align="center" prop="name" />
+        <el-table-column label="敏感词" align="center" prop="mg" />
+        <el-table-column label="审核状态" align="center" prop="isDelete">
+          <template slot-scope="scope">
+            <dict-tag :options="dict.type.sys_job_status" :value="scope.row.isDelete"/>
+          </template>
+        </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template slot-scope="scope">
               <!-- <el-button
@@ -86,10 +113,18 @@
               v-hasPermi="['system:comment:edit']"
             >修改</el-button>
             -->
+            <el-button
+              size="mini"
+              type="text"
+              icon="el-icon-bell"
+              @click="handleUpdate(scope.row)"
+              v-hasPermi="['system:comment:edit']"
+            >审核</el-button>
             <el-button
               size="mini"
               type="text"
               icon="el-icon-delete"
+              style="color: #F56C6C"
               @click="handleDelete(scope.row)"
               v-hasPermi="['system:comment:remove']"
             >删除</el-button>
@@ -145,14 +180,46 @@
           <el-button @click="cancel">取 消</el-button>
         </div>
       </el-dialog>
+
+      <!-- 导入对话框 -->
+      <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
+        <el-upload
+          ref="upload"
+          :limit="1"
+          accept=".xlsx, .xls"
+          :headers="upload.headers"
+          :action="upload.url + '?updateSupport=' + upload.updateSupport"
+          :disabled="upload.isUploading"
+          :on-progress="handleFileUploadProgress"
+          :on-success="handleFileSuccess"
+          :auto-upload="false"
+          drag
+        >
+          <i class="el-icon-upload"></i>
+          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+          <div class="el-upload__tip text-center" slot="tip">
+            <div class="el-upload__tip" slot="tip">
+              <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据
+            </div>
+            <span>仅允许导入xls、xlsx格式文件。</span>
+            <el-link type="primary" :underline="false" style="font-size:12px;vertical-align: baseline;" @click="importTemplate">下载模板</el-link>
+          </div>
+        </el-upload>
+        <div slot="footer" class="dialog-footer">
+          <el-button type="primary" @click="submitFileForm">确 定</el-button>
+          <el-button @click="upload.open = false">取 消</el-button>
+        </div>
+      </el-dialog>
     </div>
   </template>
   
   <script>
+  import { getToken } from "@/utils/auth";
   import { listComment, getComment, delComment, addComment, updateComment } from "@/api/system/comment";
   
   export default {
     name: "Comment",
+    dicts: ['sys_job_status'],
     data() {
       return {
         // 遮罩层
@@ -189,8 +256,23 @@
         // 表单参数
         form: {},
         // 表单校验
-        rules: {
-        }
+        rules: {},
+        
+        // 用户导入参数
+        upload: {
+          // 是否显示弹出层(用户导入)
+          open: false,
+          // 弹出层标题(用户导入)
+          title: "",
+          // 是否禁用上传
+          isUploading: false,
+          // 是否更新已经存在的用户数据
+          updateSupport: 0,
+          // 设置上传的请求头部
+          headers: { Authorization: "Bearer " + getToken() },
+          // 上传的地址
+          url: process.env.VUE_APP_BASE_API + "/system/user/importData"
+        },
       };
     },
     created() {
@@ -304,10 +386,36 @@
         this.download('system/comment/export', {
           ...this.queryParams
         }, `comment_${new Date().getTime()}.xlsx`)
+      },
+      /** 导入按钮操作 */
+      handleImport() {
+        this.upload.title = "用户导入";
+        this.upload.open = true;
+      },
+      /** 下载模板操作 */
+      importTemplate() {
+        this.download('system/user/importTemplate', {
+        }, `user_template_${new Date().getTime()}.xlsx`)
+      },
+      // 文件上传中处理
+      handleFileUploadProgress(event, file, fileList) {
+        this.upload.isUploading = true;
+      },
+      // 文件上传成功处理
+      handleFileSuccess(response, file, fileList) {
+        this.upload.open = false;
+        this.upload.isUploading = false;
+        this.$refs.upload.clearFiles();
+        this.$alert("<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" + response.msg + "</div>", "导入结果", { dangerouslyUseHTMLString: true });
+        this.getList();
+      },
+      // 提交上传文件
+      submitFileForm() {
+        this.$refs.upload.submit();
       }
     }
   };
-  </script>
+</script>
 <style scoped>
     .el-pagination{
         float: right;

+ 181 - 188
src/views/technician/technician/index.vue

@@ -175,17 +175,15 @@
                 </div>
             </template>
         </el-table-column> -->
-      <!-- <el-table-column label="昵称" align="center" prop="cNickName" /> -->
-      <!-- <el-table-column label="头像" align="center" prop="cPortrait" /> -->
       <el-table-column label="头像" align="center">
         <template slot-scope="scope">
-          <div style="width: 100%">
-            <img
-              :src="scope.row.cPortrait"
-              style="width: 100%; height: 100px"
-              alt=""
-            />
-          </div>
+          <el-image
+            fit="contain"
+            :src="scope.row.cPortrait"
+            lazy
+            :preview-src-list="scope.row.cPortrait.split(',')"
+            style="width: 100px; height: 100px"
+          ></el-image>
         </template>
       </el-table-column>
 
@@ -279,130 +277,150 @@
       :total="total"
     >
     </el-pagination>
+
     <!-- 添加或修改技师对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="700px" append-to-body>
-      <el-form ref="form" :model="form" :rules="rules" label-width="100px">
-        <!-- <el-form-item label="可预约项目编号 JsonArray" prop="cBhList">
+    <el-dialog custom-class="myModal" :title="title" :visible.sync="open" width="700px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" 
+        label-width="100px" label-position="top">
+        <el-row :gutter="20">
+          <!-- <el-form-item label="可预约项目编号 JsonArray" prop="cBhList">
             <el-input v-model="form.cBhList" type="textarea" placeholder="请输入内容" />
           </el-form-item> -->
-        <el-form-item label="姓名" prop="cName">
-          <el-input v-model="form.cName" placeholder="请输入姓名" />
-        </el-form-item>
-        <el-form-item label="昵称" prop="cNickName">
-          <el-input v-model="form.cNickName" placeholder="请输入昵称" />
-        </el-form-item>
-        <el-form-item label="头像" prop="cPortrait">
-          <el-upload
-            action="#"
-            class="avatar-uploader"
-            :http-request="handleAvatarSuccess"
-            :before-upload="beforeAvatarUpload"
-            :show-file-list="false"
-          >
-            <img
-              v-if="form.cPortrait !== ''"
-              :src="baseUrl + form.cPortrait"
-              class="avatar"
-            />
-            <i v-else class="el-icon-plus avatar-uploader-icon"></i>
-          </el-upload>
-        </el-form-item>
-        <el-form-item label="电话" prop="cPhone">
-          <el-input v-model="form.cPhone" placeholder="请输入电话" />
-        </el-form-item>
-        <el-form-item label="生活照" prop="cImgList">
-          <div class="allbox">
-            <div class="imgslist">
-              <div
-                class="imgs"
-                v-for="(item, index) in updataImg1"
-                :key="index"
-              >
-                <img :src="item" alt="" />
-                <div class="ifnone" @click="removeImgs(index)">删除</div>
-              </div>
-              <el-upload
-                class="images_box"
-                action="#"
-                :http-request="handleImagesSuccess"
-                :before-upload="beforeImagesUpload"
-                :show-file-list="false"
-              >
-                <i class="el-icon-plus avatar-uploader-icon"></i>
-              </el-upload>
-            </div>
-          </div>
-        </el-form-item>
+          <el-alert title="基础信息" type="info" :closable="false"></el-alert>
+          <el-col :span="12">
+            <el-form-item label="姓名" prop="cName">
+              <el-input v-model="form.cName" placeholder="请输入姓名" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="昵称" prop="cNickName">
+              <el-input v-model="form.cNickName" placeholder="请输入昵称" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="电话" prop="cPhone">
+              <el-input v-model="form.cPhone" placeholder="请输入电话" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="个人简介" prop="cJianjie">
+              <el-input
+                v-model="form.cJianjie"
+                type="textarea"
+                placeholder="请输入内容"
+              />
+            </el-form-item>
+          </el-col>
 
-        <el-form-item label="身份证图片" prop="cSfzImg">
-          <!-- <el-input v-model="form.cSfzImg" type="textarea" placeholder="请输入内容" /> -->
-          <div class="allbox">
-            <div class="imgslist">
-              <div
-                class="imgs"
-                v-for="(item, index) in updataImg2"
-                :key="index"
-              >
-                <img :src="item" alt="" />
-                <div class="ifnone" @click="removesfzImgs(index)">删除</div>
-              </div>
-              <el-upload
-                class="images_box"
-                action="#"
-                :http-request="handlesfzSuccess"
-                :before-upload="beforesfzImagesUpload"
-                :show-file-list="false"
-              >
-                <i class="el-icon-plus avatar-uploader-icon"></i>
-              </el-upload>
-            </div>
-          </div>
-        </el-form-item>
-        <el-form-item label="个人简介" prop="cJianjie">
-          <el-input
-            v-model="form.cJianjie"
-            type="textarea"
-            placeholder="请输入内容"
-          />
-        </el-form-item>
-        <el-form-item label="评分" prop="nStar">
-          <el-input v-model="form.nStar" placeholder="请输入评分" />
-        </el-form-item>
-        <el-form-item label="佣金比例" prop="nBili">
-          <el-input v-model="form.nBili" placeholder="请输入佣金比例" />
-        </el-form-item>
-        <el-form-item label="已服务数量" prop="nNum">
-          <el-input v-model="form.nNum" placeholder="请输入已服务数量" />
-        </el-form-item>
-        <el-form-item label="是否带头像框" prop="nB1">
-          <el-radio-group v-model="form.nB1">
-            <el-radio :label="0">否</el-radio>
-            <el-radio :label="1">是</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="是否是新技师" prop="nB2">
-          <el-radio-group v-model="form.nB2">
-            <el-radio :label="0">否</el-radio>
-            <el-radio :label="1">是</el-radio>
-          </el-radio-group>
-        </el-form-item>
-        <el-form-item label="是否有热度" prop="nB3">
-          <el-radio-group v-model="form.nB3">
-            <el-radio :label="0">否</el-radio>
-            <el-radio :label="1">是</el-radio>
-          </el-radio-group>
-        </el-form-item>
+          <el-alert title="文件上传" type="info" :closable="false"></el-alert>
+          <el-col :span="24">
+            <el-form-item label="头像" prop="cPortrait">
+              <ImageUpload 
+                :limit="1"
+                @input="onUpload($event, 'cPortrait')"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="生活照" prop="cImgList">
+              <ImageUpload 
+                @input="onUpload($event, 'cImgList')"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="身份证图片" prop="cSfzImg">
+              <ImageUpload 
+                @input="onUpload($event, 'cSfzImg')"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="承诺书" prop="commitment">
+              <FileUpload 
+                :fileSize="10"
+                :fileType="['pdf', 'jpg', 'jpeg', 'png']"
+                @input="onUpload($event, 'commitment')"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="承诺录音" prop="recording">
+              <FileUpload 
+                :fileSize="10"
+                :fileType="['mp3', 'wav', 'wma']"
+                @input="onUpload($event, 'recording')"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="承诺录像" prop="videoRecording">
+              <FileUpload 
+                :fileSize="50"
+                :fileType="['mp4', 'mov', 'mkv', 'wmv']"
+                @input="onUpload($event, 'videoRecording')"
+              />
+            </el-form-item>
+          </el-col>
+
+          <el-alert title="其它信息" type="info" :closable="false"></el-alert>
+          <el-col :span="12">
+            <el-form-item label="佣金比例" prop="nBili">
+              <el-input v-model="form.nBili" placeholder="请输入佣金比例" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="评分" prop="nStar">
+              <el-input v-model="form.nStar" placeholder="请输入评分" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="已服务数量" prop="nNum">
+              <el-input v-model="form.nNum" placeholder="请输入已服务数量" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="虑拟订单数" prop="virtualOrderNumber">
+              <el-input type="number" v-model="form.virtualOrderNumber" placeholder="请输入虑拟订单数" />
+              <!-- <el-input-number v-model="form.virtualOrderNumber" controls-position="right" :min="0" style="width: 100%" /> -->
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="是否带头像框" prop="nB1">
+              <el-radio-group v-model="form.nB1">
+                <el-radio :label="0">否</el-radio>
+                <el-radio :label="1">是</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="是否是新技师" prop="nB2">
+              <el-radio-group v-model="form.nB2">
+                <el-radio :label="0">否</el-radio>
+                <el-radio :label="1">是</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="是否有热度" prop="nB3">
+              <el-radio-group v-model="form.nB3">
+                <el-radio :label="0">否</el-radio>
+                <el-radio :label="1">是</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
       </el-form>
       <div slot="footer" class="dialog-footer">
         <el-button type="primary" @click="submitForm">确 定</el-button>
         <el-button @click="cancel">取 消</el-button>
       </div>
     </el-dialog>
+
     <!-- 查看身份证/生活照图片 -->
     <el-dialog title="图片" :visible.sync="dialogVisible" width="30%">
       <el-carousel indicator-position="outside">
         <el-carousel-item v-for="(item, index) in imgsList" :key="index">
-          <!-- <h3>{{ item }}</h3> -->
           <div class="imgbox">
             <img :src="item" alt="" style="max-width: 100%; max-height: 100%" />
           </div>
@@ -416,6 +434,7 @@
         >
       </span>
     </el-dialog>
+
     <el-drawer
       title="技师详情"
       :visible.sync="drawer"
@@ -517,6 +536,7 @@
         <el-button type="primary" @click="returnJs(jsInfos.id)">退回</el-button>
       </div>
     </el-drawer>
+
     <!-- 绑定微信 -->
     <el-dialog :visible.sync="isBindWchart" style="height: 500px;">
       <div style="width: 200px; height: 200px; margin: 0 auto">
@@ -526,7 +546,7 @@
   </div>
 </template>
   
-  <script>
+<script>
 import {
   listJs,
   getJs,
@@ -539,8 +559,7 @@ import {
   unbind
 } from "@/api/system/js";
 import { upload } from "@/api/public";
-import Details from "../details/details.vue";
-import axios from "axios";
+
 export default {
   name: "Js",
   data() {
@@ -598,7 +617,28 @@ export default {
       // 表单参数
       form: {},
       // 表单校验
-      rules: {},
+      rules: {
+        cName: [
+          { required: true, message: '请输入技师姓名', trigger: ['blur', 'change'] },
+        ],
+        cNickName: [
+          { required: true, message: '请输入技师昵称', trigger: ['blur', 'change'] }
+        ],
+        cPhone: [
+          { required: true, message: '请输入技师电话', trigger: ['blur', 'change'] },
+          {
+            pattern: /^1([3589]\d|4[01456879]|6[0-9]|7[0-8])\d{8}$/, 
+            message: '请输入正确的手机号', 
+            trigger: ['blur', 'change']
+					}
+        ],
+        cJianjie: [
+          { required: true, message: '请输入技师简介', trigger: ['blur', 'change'] }
+        ],
+        nBili: [
+          { required: true, message: '请输入技师佣金比例', trigger: ['blur', 'change'] }
+        ],
+      },
       imgsList: [],
       imagesUrl: "",
       // imgList: [],
@@ -763,6 +803,7 @@ export default {
       this.updataImg2.splice(index, 1);
       this.updataImg22.splice(index, 1);
     },
+
     // 生活照图片
     handleImagesSuccess(file) {
       const formData = new FormData();
@@ -773,7 +814,6 @@ export default {
         this.updataImg11.push(response.fileName);
       });
     },
-
     beforeImagesUpload(file) {
       if (file.type.indexOf("image/") == -1) {
         proxy.$modal.msgError(
@@ -793,7 +833,6 @@ export default {
         this.updataImg22.push(response.fileName);
       });
     },
-
     beforesfzImagesUpload(file) {
       if (file.type.indexOf("image/") == -1) {
         proxy.$modal.msgError(
@@ -803,28 +842,12 @@ export default {
       }
       return true;
     },
-
-    // 头像上传
-    handleAvatarSuccess(file) {
-      // console.log(file,"file")
-      const formData = new FormData();
-      formData.append("file", file.file);
-      upload(formData).then((response) => {
-        // console.log(response);
-
-        this.form.cPortrait = response.fileName;
-        this.queryParams.cPortrait = response.fileName;
-        // this.form.cPortrait = process.env.VUE_APP_BASE_API + response.fileName;
-        console.log(this.form.cPortrait);
-      });
-    },
-    beforeAvatarUpload(file) {
-      if (file.type.indexOf("image/") == -1) {
-        this.$modal.msgError(
-          "文件格式错误,请上传图片类型,如:JPG,PNG后缀的文件。"
-        );
-      }
+    // 上传事件
+    onUpload(e, k) {
+      console.log(e, k);
+      this.form[k] = e;
     },
+
     handleSizeChange(val) {
       // console.log(val,"handleSizeChange")
       this.queryParams.size = val;
@@ -849,17 +872,16 @@ export default {
     getList() {
       this.loading = true;
       listJs(this.queryParams).then((response) => {
-        var cimg = [];
-        response.records.forEach((element) => {
-          element.cPortrait = process.env.VUE_APP_BASE_API + element.cPortrait;
-          element.cImgList.forEach((ele) => {
+        response.records.forEach((item) => {
+          item.cPortrait = process.env.VUE_APP_BASE_API + item.cPortrait;
+          item.cImgList.forEach((ele) => {
             ele = process.env.VUE_APP_BASE_API + ele;
           });
         });
 
         this.jsList = response.records;
-
         this.total = response.total;
+      }).finally(() => {
         this.loading = false;
       });
     },
@@ -959,39 +981,16 @@ export default {
       this.$refs["form"].validate((valid) => {
         if (valid) {
           if (this.form.cOpenId != null) {
-            this.form.cPortrait = this.queryParams.cPortrait;
-            this.form.cImgList = this.updataImg11;
-            this.form.cSfzImg = this.updataImg22;
-            if (this.form.cName == "") {
-              this.$message.error("技师姓名不能为空");
-              return;
-            } else if (this.form.cNickName == "") {
-              this.$message.error("技师昵称不能为空");
-              return;
-            } else if (this.form.cJianjie == "") {
-              this.$message.error("技师简介不能为空");
-              return;
-            } else if (this.form.nBili == "") {
-              this.$message.error("技师佣金比例不能为空");
-              return;
-            }
-            updateJs(this.form).then((response) => {
+            updateJs(this.form).then((res) => {
               this.$modal.msgSuccess("修改成功");
               this.open = false;
-              // this.imgList = [];
-              this.imgList2 = [];
               this.getList();
             });
           } else {
-            this.form.cPortrait = this.queryParams.cPortrait;
-            this.form.cImgList = this.updataImg11;
-            this.form.cSfzImg = this.updataImg22;
-            addJs(this.form).then((response) => {
+            addJs(this.form).then((res) => {
               this.$modal.msgSuccess("新增成功");
               this.open = false;
               this.form = {};
-              this.updataImg11 = [];
-              this.updataImg22 = [];
               this.getList();
             });
           }
@@ -1018,10 +1017,12 @@ export default {
 };
 </script>
 <style lang="scss" scoped>
-::v-deep .el-dialog {
-  height: 90% !important;
-  overflow-y: auto;
-  border-radius: 10px;
+::v-deep .myModal {
+  .el-dialog__body {
+    max-height: 70vh;
+    overflow-y: auto;
+    padding: 10px 20px;
+  }
 }
 
 .jsInfo {
@@ -1151,12 +1152,4 @@ export default {
   justify-content: center;
   height: 300px;
 }
-::v-deep .el-dialog{
-  width: 300px;
-  height: auto !important;
-  // margin-top: 500px ;
-}
-::v-deep .el-dialog:not(.is-fullscreen){
-  margin-top: 20vh !important;
-}
 </style>