喻文俊 %!s(int64=3) %!d(string=hai) anos
pai
achega
f5fca7eed6

+ 6 - 1
src/utils/open-window.js

@@ -20,10 +20,12 @@ export default function openWindow(url, strWindowName, title, w, h) {
   const left = (screen.availWidth - width) / 2
   const top = (screen.availHeight - height) / 2
 
+  console.log(width, height)
+
   const newWindow = window.open(
     url,
     strWindowName,
-    title,
+    // title,
     'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' +
       width +
       ', height=' +
@@ -37,6 +39,9 @@ export default function openWindow(url, strWindowName, title, w, h) {
   if (window.focus) {
     newWindow.focus()
   }
+
+  console.log(url)
+
   // 修改窗口标题
   newWindow.onload = function() {
     newWindow.document.title = title

+ 9 - 0
src/utils/validate.js

@@ -112,3 +112,12 @@ export function isPoint(arg) {
   const reg = /^[0-9|\.]{1,},[0-9|\.]{1,}$/
   return reg.test(arg)
 }
+
+/**
+ * @param {String} arg
+ * @returns {Boolean}
+ */
+export function isNumber(arg) {
+  const reg = /\d+$/
+  return reg.test(arg)
+}

+ 16 - 3
src/views/authentic/auth/add.vue

@@ -75,7 +75,7 @@ import UploadImage from '@/components/UploadImage'
 import { mapGetters } from 'vuex'
 import { saveBrandAuth } from '@/api/auth'
 import { getAddress } from '@/api/common'
-import { isPoint } from '@/utils/validate'
+import { isNumber, isPoint } from '@/utils/validate'
 export default {
   components: {
     // Location
@@ -96,6 +96,19 @@ export default {
       }
     }
 
+    var validateMobile = (rule, value, callback) => {
+      if (value === '') {
+        callback(new Error('联系方式不能为空'))
+      } else {
+        if (isNumber(value)) {
+          this.$refs.ruleForm.validateField('point')
+        } else {
+          callback('联系方式格式不正确')
+        }
+        callback()
+      }
+    }
+
     return {
       dialogMapVisible: false,
       point: {},
@@ -116,8 +129,8 @@ export default {
         name: [{ required: true, message: '机构名称不能为空', trigger: ['blur', 'change'] }],
         address: [{ required: true, message: '地址不能为空', trigger: 'change', type: 'array' }],
         fullAddress: [{ required: true, message: '详细不能为空', trigger: ['blur', 'change'] }],
-        point: [{ validator: validatePoint, trigger: ['blur', 'change'] }],
-        mobile: [{ required: true, message: '联系方式不能为空', trigger: ['blur', 'change'] }],
+        point: [{ required: true, validator: validatePoint, trigger: ['blur', 'change'] }],
+        mobile: [{ required: true, validator: validateMobile, trigger: ['blur', 'change'] }],
         logoImage: [{ required: true, message: '请上传机构logo', trigger: 'change' }],
         banner: [{ required: true, message: '请至少上传一张banner图片', trigger: 'change' }]
       },

+ 15 - 2
src/views/authentic/auth/edit.vue

@@ -76,7 +76,7 @@ import UploadImage from '@/components/UploadImage'
 import { mapGetters } from 'vuex'
 import { saveBrandAuth, getAuthFormData } from '@/api/auth'
 import { getAddress } from '@/api/common'
-import { isPoint } from '@/utils/validate'
+import { isPoint, isNumber } from '@/utils/validate'
 
 export default {
   components: {
@@ -98,6 +98,19 @@ export default {
       }
     }
 
+    var validateMobile = (rule, value, callback) => {
+      if (value === '') {
+        callback(new Error('联系方式不能为空'))
+      } else {
+        if (isNumber(value)) {
+          this.$refs.ruleForm.validateField('point')
+        } else {
+          callback('联系方式格式不正确')
+        }
+        callback()
+      }
+    }
+
     return {
       dialogMapVisible: false,
       point: {},
@@ -122,7 +135,7 @@ export default {
         address: [{ required: true, message: '地址不能为空', trigger: 'change', type: 'array' }],
         fullAddress: [{ required: true, message: '详细不能为空', trigger: ['blur', 'change'] }],
         point: [{ validator: validatePoint, trigger: ['blur', 'change'] }],
-        mobile: [{ required: true, message: '联系方式不能为空', trigger: ['blur', 'change'] }],
+        mobile: [{ validator: validateMobile, trigger: ['blur', 'change'] }],
         logoImage: [{ required: true, message: '请上传机构logo', trigger: 'change' }],
         banner: [{ required: true, message: '请至少上传一张banner图片', trigger: 'change' }]
       },

+ 1 - 1
src/views/authentic/components/deviceSection.vue

@@ -4,7 +4,7 @@
       <i v-if="formDataList.length > 1" class="el-icon-close remove" title="移除该项" @click="removeOne(formData)" />
       <el-form :ref="'form' + formData.uuid" label-width="90px" :model="formData" :rules="rules">
         <el-form-item label="设备名称:" prop="equipmentName">
-          <el-input v-model="formData.equipmentName" placeholder="设备名称" />
+          <el-input v-model="formData.equipmentName" placeholder="设备名称" :maxlength="50" type="text" />
         </el-form-item>
         <el-form-item label="所属品牌:" prop="brand">
           <el-input v-model="formData.brand" placeholder="所属品牌" />

+ 16 - 1
src/views/authentic/doc/fileList.vue

@@ -111,8 +111,15 @@
           {{ row.createTime | formatTime }}
         </template>
       </el-table-column>
-      <el-table-column label="操作" width="240px" align="center">
+      <el-table-column label="操作" width="280px" align="center">
         <template slot-scope="{ row }">
+          <el-button
+            type="primary"
+            size="mini"
+            style="margin-right:5px"
+            icon="el-icon-view"
+            @click="handlePreviewFile(row)"
+          >预览</el-button>
           <el-button
             type="primary"
             size="mini"
@@ -189,6 +196,7 @@ import { formatDate } from '@/utils'
 import { mapGetters } from 'vuex'
 import { getToken } from '@/utils/auth'
 import { changeFileStatus, getFileList, removeFile, saveFile } from '@/api/doc'
+import openWindow from '@/utils/open-window'
 export default {
   components: { Pagination },
   filters: {
@@ -253,6 +261,13 @@ export default {
     this.getList()
   },
   methods: {
+
+    // 小窗口浏览pdf文件
+    handlePreviewFile(row) {
+      console.log(row)
+      openWindow(row.filePreviewUrl, row.fileTitle, row.fileTitle, 1200, 600)
+    },
+
     // 获取列表数据
     getList() {
       this.listLoading = true

+ 33 - 2
src/views/authentic/doc/videoList.vue

@@ -101,8 +101,9 @@
           {{ row.createTime | formatTime }}
         </template>
       </el-table-column>
-      <el-table-column label="操作" width="240px" align="center">
+      <el-table-column label="操作" width="280px" align="center">
         <template slot-scope="{row}">
+          <el-button type="primary" size="mini" style="margin-right:5px" icon="el-icon-video-play" @click="handlePlayer(row)">播放</el-button>
           <el-button type="primary" size="mini" style="margin-right:5px" icon="el-icon-edit" @click="handleShowDialog('edit',row)">编辑</el-button>
           <el-button type="danger" size="mini" style="margin-right:5px" icon="el-icon-s-check" @click="handleRemoveVideo(row)">删除</el-button>
         </template>
@@ -154,6 +155,23 @@
       </div>
     </el-dialog>
     <!-- 视频预览对话框END -->
+
+    <!-- 视频预览对话框 -->
+    <el-dialog
+      title="视频预览"
+      :visible.sync="dialogPreviewVisible"
+      width="60%"
+      @closed="dialogPreviewColosed"
+    >
+      <video :src="videoPreviewUrl" controls="controls" width="100%">
+        您的浏览器不支持播放该视频
+      </video>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="dialogPreviewVisible = false">关闭</el-button>
+      </div>
+    </el-dialog>
+    <!-- 视频预览对话框END -->
+
   </div>
 </template>
 
@@ -175,6 +193,7 @@ export default {
   },
   data() {
     return {
+      dialogPreviewVisible: false,
       listLoading: false, // 列表加载
       submitLoading: false, // 按钮加载
       dialogVisible: false, // 是否显示dialog
@@ -209,7 +228,8 @@ export default {
         videoTitle: [{ required: true, message: '标题不能为空', trigger: 'blur' }],
         videoPreviewUrl: [{ required: true, message: '链接不能为空', trigger: ['change', 'blur'] }]
       },
-      list: []
+      list: [],
+      videoPreviewUrl: ''
     }
   },
   computed: {
@@ -227,6 +247,17 @@ export default {
     this.getList()
   },
   methods: {
+
+    // 播放视频
+    handlePlayer(row) {
+      this.currentVideoUrl = row.videoPreviewUrl
+      this.dialogPreviewVisible = true
+    },
+
+    dialogPreviewColosed() {
+      this.currentVideoUrl = ''
+    },
+
     // 获取列表数据
     getList() {
       this.listLoading = true

+ 16 - 3
src/views/authentic/doctor/add.vue

@@ -2,7 +2,7 @@
   <div class="doctor-edit">
     <el-form ref="submitForm" class="doctor-edit-form" label-width="140px" :model="formData" :rules="rules">
       <el-form-item label="医师姓名:" prop="doctorName">
-        <el-input v-model="formData.doctorName" placeholder="请输入医师姓名" />
+        <el-input v-model="formData.doctorName" type="text" placeholder="请输入医师姓名" :maxlength="30" />
       </el-form-item>
       <el-form-item label="从业资格证编号:" prop="certificateNo">
         <el-input v-model="formData.certificateNo" placeholder="请输入从业资格证编号" />
@@ -13,7 +13,7 @@
       <el-form-item label="医师照片:" prop="doctorImage">
         <el-input v-show="false" v-model="formData.doctorImage" />
         <upload-image
-          tip="建议尺寸:200px * 200px"
+          tip="提示:上传医师个人照片,建议尺寸:200px * 200px"
           :image-list="doctorImageList"
           :before-upload="beforeDoctorImageUpload"
           @success="uploadDoctorImageSuccess"
@@ -55,6 +55,19 @@ import { doctorSave } from '@/api/doctor'
 export default {
   components: { DeviceSection, UploadImage },
   data() {
+    var validateCertificateNo = (rule, value, callback) => {
+      if (value === '') {
+        callback(new Error('从业资格证编号不能为空'))
+      } else {
+        if (/^[a-z|A-Z|0-9]{1,}$/.test(value)) {
+          this.$refs.ruleForm.validateField('point')
+        } else {
+          callback('从业资格证编号格式不正确')
+        }
+        callback()
+      }
+    }
+
     return {
       point: {},
       disabled: false,
@@ -68,7 +81,7 @@ export default {
       },
       rules: {
         doctorName: [{ required: true, message: '医师姓名不能为空', trigger: ['blur', 'change'] }],
-        certificateNo: [{ required: true, message: '从业资格证编号不能为空', trigger: ['blur', 'change'] }],
+        certificateNo: [{ required: true, validator: validateCertificateNo, trigger: ['blur', 'change'] }],
         clubName: [{ required: true, message: '所在机构不能为空', trigger: ['blur', 'change'] }],
         doctorImage: [{ required: true, message: '请上传医师照片', trigger: 'change' }],
         banner: [{ required: true, message: '请上传至少一张轮播图', trigger: 'change' }],

+ 20 - 4
src/views/authentic/doctor/edit.vue

@@ -2,7 +2,7 @@
   <div class="doctor-edit">
     <el-form ref="submitForm" class="doctor-edit-form" label-width="140px" :model="formData" :rules="rules">
       <el-form-item label="医师姓名:" prop="doctorName">
-        <el-input v-model="formData.doctorName" placeholder="请输入医师姓名" />
+        <el-input v-model="formData.doctorName" type="text" placeholder="请输入医师姓名" :maxlength="30" />
       </el-form-item>
       <el-form-item label="从业资格证编号:" prop="certificateNo">
         <el-input v-model="formData.certificateNo" placeholder="请输入从业资格证编号" />
@@ -13,7 +13,7 @@
       <el-form-item label="医师照片:" prop="doctorImage">
         <el-input v-show="false" v-model="formData.doctorImage" />
         <upload-image
-          tip="建议尺寸:200px * 200px"
+          tip="提示:上传医师个人照片,建议尺寸:200px * 200px"
           :image-list="doctorImageList"
           :before-upload="beforeDoctorImageUpload"
           @success="uploadDoctorImageSuccess"
@@ -55,6 +55,19 @@ import { doctorSave, doctorFormData } from '@/api/doctor'
 export default {
   components: { DeviceSection, UploadImage },
   data() {
+    var validateCertificateNo = (rule, value, callback) => {
+      if (value === '') {
+        callback(new Error('从业资格证编号不能为空'))
+      } else {
+        if (/^[a-z|A-Z|0-9]{1,}$/.test(value)) {
+          this.$refs.ruleForm.validateField('point')
+        } else {
+          callback('从业资格证编号格式不正确')
+        }
+        callback()
+      }
+    }
+
     return {
       isRequest: true,
       doctorId: '',
@@ -69,8 +82,11 @@ export default {
         equipment: ''
       },
       rules: {
-        doctorName: [{ required: true, message: '医师姓名不能为空', trigger: ['blur', 'change'] }],
-        certificateNo: [{ required: true, message: '从业资格证编号不能为空', trigger: ['blur', 'change'] }],
+        doctorName: [
+          { required: true, message: '医师姓名不能为空', trigger: ['blur', 'change'] },
+          { maxlength: 30, message: '最大长度为30个字符', trigger: ['blur', 'change'] }
+        ],
+        certificateNo: [{ required: true, validator: validateCertificateNo, trigger: ['blur', 'change'] }],
         clubName: [{ required: true, message: '所在机构不能为空', trigger: ['blur', 'change'] }],
         doctorImage: [{ required: true, message: '请上传医师照片', trigger: 'change' }],
         banner: [{ required: true, message: '请上传至少一张轮播图', trigger: 'change' }],

+ 5 - 1
src/views/authentic/doctor/index.vue

@@ -86,10 +86,14 @@
               <el-button v-if="isProxy" type="info" size="mini" @click="handleChangeStatus(row)">下线</el-button>
             </template>
           </template>
-          <template v-else>
+          <template v-else-if="row.auditStatus === 2">
             <!-- <el-tag type="warning">待上线</el-tag> -->
             <span style="margin-right:10px;" class="status warning">待上线</span>
           </template>
+          <template v-else>
+            <!-- <el-tag type="warning">待上线</el-tag> -->
+            <span style="margin-right:10px;" class="status danger">已下线</span>
+          </template>
         </template>
       </el-table-column>
       <el-table-column label="创建时间" class-name="status-col" width="300px" align="center">

+ 6 - 6
src/views/authentic/product/index.vue

@@ -1,10 +1,10 @@
 <template>
   <div class="app-container">
     <div class="filter-container">
-      <span>商品名称:</span>
-      <el-input v-model="listQuery.productName" placeholder="商品名称" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
-      <span>商品SN码:</span>
-      <el-input v-model="listQuery.snCode" placeholder="商品SN码" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
+      <span>设备名称:</span>
+      <el-input v-model="listQuery.productName" placeholder="设备名称" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
+      <span>设备SN码:</span>
+      <el-input v-model="listQuery.snCode" placeholder="设备SN码" style="width: 200px;" class="filter-item" @keyup.enter.native="handleFilter" />
       <span>审核状态:</span>
       <el-select
         v-model="listQuery.auditStatus"
@@ -48,8 +48,8 @@
       header-row-class-name="tableHeader"
     >
       <el-table-column label="序号" :index="indexMethod" type="index" align="center" width="80" />
-      <el-table-column label="商品名称" align="center" prop="productName" />
-      <el-table-column label="商品SN码" align="center" prop="snCode" />
+      <el-table-column label="设备名称" align="center" prop="productName" />
+      <el-table-column label="设备SN码" align="center" prop="snCode" />
 
       <el-table-column label="审核状态" width="220px" align="center">
         <template slot-scope="{ row }">

+ 1 - 1
src/views/authentic/review/doc/fileList.vue

@@ -236,7 +236,7 @@ export default {
     },
     // 小窗口浏览pdf文件
     handlePreviewFile() {
-      openWindow(this.current.currentfileUrl, this.current.fileTitle, 1200, 600)
+      openWindow(this.current.currentfileUrl, this.current.fileTitle, this.current.fileTitle, 1200, 600)
     },
     indexMethod(index) {
       return index + this.listQuery.pageSize * (this.listQuery.pageNum - 1) + 1