Ver código fonte

2022-9-15 15:00

codeMan 2 anos atrás
pai
commit
451846d698

+ 10 - 1
src/HManagement/clueManage/clue_import/detailPage/modules/switchData.vue

@@ -33,6 +33,7 @@ export default {
       this.switchOrderclueuploadbillMain(this.rowindex)
     },
     next () {
+      
       this.rowindex = Number(this.$route.query.rowindex) + 1
       this.switchOrderclueuploadbillMain(this.rowindex)
     },
@@ -48,7 +49,15 @@ export default {
           "rowindex": rowindex
         }
       })
-      this.$router.replace({path:'/importClueDetail',query:{id:res.data.sat_orderclueuploadbillid,rowindex:rowindex}})
+      if (res.code === 1) {
+        this.$router.replace({path:'/importClueDetail',query:{id:res.data.sat_orderclueuploadbillid,rowindex:rowindex}})
+      } else {
+        this.rowindex = Number(this.$route.query.rowindex)
+        this.$message({
+          message:'没有了!',
+          type:'error'
+        })
+      }
     },
   }
 }

+ 22 - 9
src/HManagement/clueManage/clue_import/modules/importClue.vue

@@ -20,15 +20,28 @@ export default {
     }
   },
   methods:{
-    async uploadOrderclueuploadbillByExcel (data,type) {
-      const res = await this.$api.requested({
-        "classname": "webmanage.saletool.orderclue.orderclue",
-        "method": "uploadOrderclueuploadbillByExcel",
-        "content": {
-            "cluetype":type,
-            "attachmentid":data.data.attachmentids[0]
-        }
-      })
+    async uploadOrderclueuploadbillByExcel (data,type,moduleType) {
+      let res
+      if(moduleType == 'module1') {
+        res = await this.$api.requested({
+          "classname": "webmanage.saletool.orderclue.orderclue",
+          "method": "uploadOrderclueuploadbillByExcel",
+          "content": {
+              "cluetype":type,
+              "attachmentid":data.data.attachmentids[0]
+          }
+        })
+      } else {
+        res = await this.$api.requested({
+          "classname": "webmanage.saletool.orderclue.orderclue",
+          "method": "uploadOrderclueuploadbillByExcelAndPlatform",
+          "content": {
+              "cluetype":type,
+              "attachmentid":data.data.attachmentids[0]
+          }
+        })
+      }
+      
       if (res.msg !== '成功') {
         this.errorurl = res.msg
       } else {

+ 116 - 59
src/components/import/importFile.vue

@@ -2,57 +2,89 @@
   <div>
     <!-- 按钮类型 -->
     <el-button type="success" size="small" @click="dialogUploadVisible = true" icon="el-icon-upload">导 入</el-button>
-    <el-dialog title="文件上传" class="import-panel" :visible.sync="dialogUploadVisible" width="500px" append-to-body :close-on-click-modal="false" :show-close="false" :before-close="clearFiles">
+    <el-dialog title="文件上传" class="import-panel" :visible.sync="dialogUploadVisible" width="500px" append-to-body
+      :close-on-click-modal="false" :show-close="false" :before-close="clearFiles">
       <div slot="title"></div>
-      <div style="background:#f1f2f3" class="my-tabs" >
+      <div style="background:#f1f2f3" class="my-tabs">
         <el-tabs v-model="activeName" type="card">
-          <el-tab-pane label="导入经销商线索" name="first"></el-tab-pane>
+          <!--标准模板-->
+          <el-tab-pane label="Excel标准模板" name="first">
+            <div style="padding:20px;background:#ffffff">
+              <el-upload style="width:100%" ref="my-upload" class="upload-demo normal-margin" :accept="accept"
+                action="#" :auto-upload="false" :show-file-list="false" :on-change="handleChange" drag multiple>
+                <i class="el-icon-upload"></i>
+                <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+              </el-upload>
+              <div class="progress_panel" v-for="file in filelist" :key="file.uid">
+                <img v-if="file.type === 'DOC' || file.type === 'DOCX'" width="30"
+                  src="../../assets/file_icons/word.png" alt="">
+                <img v-else-if="file.type === 'PDF'" width="30" src="../../assets/file_icons/PDF.png" alt="">
+                <img v-else-if="file.type === 'MP4' || file.type === 'AVI'" width="30"
+                  src="../../assets/file_icons/video.png" alt="">
+                <img v-else-if="file.type === 'XLS' || file.type === 'XLSX'" width="30"
+                  src="../../assets/file_icons/excel.png" alt="">
+                <img v-else-if="file.type === 'PNG' || file.type === 'JPG'|| file.type === 'JPEG'" width="30"
+                  src="../../assets/file_icons/image.png" alt="">
+                <img v-else-if="file.type === 'PPT' || file.type === 'PPTX'" width="30"
+                  src="../../assets/file_icons/PPT.png" alt="">
+                <img v-else width="30" src="../../assets/file_icons/unknow.png" alt="">
+                <div>
+                  <p v-if="file.progress === 100" style="float:right"><span style="color:#67C23A">●</span>上传成功</p>
+                  <p>{{file.raw?file.raw.name:'暂无上传文件'}}</p>
+                  <el-progress :percentage="file.progress" :show-text="false"></el-progress>
+                </div>
+              </div>
+              <slot name="errorFile"></slot>
+              <p class="tips">• 请下载并使用<a :href="modelurl">《Excel标准模板》</a></p>
+              <p class="tips">• 文件中数据不能超过5000行</p>
+              <div class="dialog-footer">
+                <el-button size="small" @click="dialogUploadVisible = false" class="normal-btn-width">取 消</el-button>
+                <el-button size="small" type="warning" @click="dialogUploadVisible = false"
+                  class="normal-btn-width btn-warning">确 定</el-button>
+              </div>
+            </div>
+          </el-tab-pane>
+          <el-tab-pane label="Excel专用模板" name="last">
+          <!--专用模板-->
+            <div style="padding:20px;background:#ffffff">
+              <el-upload style="width:100%" ref="my-upload" class="upload-demo normal-margin" :accept="accept"
+                action="#" :auto-upload="false" :show-file-list="false" :on-change="handleChange2" drag multiple>
+                <i class="el-icon-upload"></i>
+                <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
+              </el-upload>
+              <div class="progress_panel" v-for="file in filelist" :key="file.uid">
+                <img v-if="file.type === 'DOC' || file.type === 'DOCX'" width="30"
+                  src="../../assets/file_icons/word.png" alt="">
+                <img v-else-if="file.type === 'PDF'" width="30" src="../../assets/file_icons/PDF.png" alt="">
+                <img v-else-if="file.type === 'MP4' || file.type === 'AVI'" width="30"
+                  src="../../assets/file_icons/video.png" alt="">
+                <img v-else-if="file.type === 'XLS' || file.type === 'XLSX'" width="30"
+                  src="../../assets/file_icons/excel.png" alt="">
+                <img v-else-if="file.type === 'PNG' || file.type === 'JPG'|| file.type === 'JPEG'" width="30"
+                  src="../../assets/file_icons/image.png" alt="">
+                <img v-else-if="file.type === 'PPT' || file.type === 'PPTX'" width="30"
+                  src="../../assets/file_icons/PPT.png" alt="">
+                <img v-else width="30" src="../../assets/file_icons/unknow.png" alt="">
+                <div>
+                  <p v-if="file.progress === 100" style="float:right"><span style="color:#67C23A">●</span>上传成功</p>
+                  <p>{{file.raw?file.raw.name:'暂无上传文件'}}</p>
+                  <el-progress :percentage="file.progress" :show-text="false"></el-progress>
+                </div>
+              </div>
+              <slot name="errorFile"></slot>
+              <p class="tips">• 请下载并使用快手与抖音模板<a :href="modelurl2">《Excel专用模板》</a></p>
+              <p class="tips">• 文件中数据不能超过5000行</p>
+              <div class="dialog-footer">
+                <el-button size="small" @click="dialogUploadVisible = false" class="normal-btn-width">取 消</el-button>
+                <el-button size="small" type="warning" @click="dialogUploadVisible = false"
+                  class="normal-btn-width btn-warning">确 定</el-button>
+              </div>
+            </div>
+          </el-tab-pane>
           <!-- <el-tab-pane label="导入业务员线索" name="second"></el-tab-pane> -->
         </el-tabs>
       </div>
-      <div style="padding:20px">
-        <el-upload
-          style="width:100%"
-          ref="my-upload"
-          class="upload-demo normal-margin"
-          :accept="accept"
-          action="#"
-          :auto-upload="false"
-          :show-file-list="false"
-          :on-change="handleChange"
-          drag
-          multiple>
-          <i class="el-icon-upload"></i>
-          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
-        </el-upload>
-        <div class="progress_panel" v-for="file in filelist" :key="file.uid">
-          <img v-if="file.type === 'DOC' || file.type === 'DOCX'" width="30" src="../../assets/file_icons/word.png"
-            alt="">
-          <img v-else-if="file.type === 'PDF'" width="30" src="../../assets/file_icons/PDF.png" alt="">
-          <img v-else-if="file.type === 'MP4' || file.type === 'AVI'" width="30" src="../../assets/file_icons/video.png"
-            alt="">
-          <img v-else-if="file.type === 'XLS' || file.type === 'XLSX'" width="30" src="../../assets/file_icons/excel.png"
-            alt="">
-          <img v-else-if="file.type === 'PNG' || file.type === 'JPG'|| file.type === 'JPEG'" width="30"
-            src="../../assets/file_icons/image.png" alt="">
-          <img v-else-if="file.type === 'PPT' || file.type === 'PPTX'" width="30" src="../../assets/file_icons/PPT.png"
-            alt="">
-          <img v-else width="30" src="../../assets/file_icons/unknow.png" alt="">
-          <div>
-            <p v-if="file.progress === 100" style="float:right"><span style="color:#67C23A">●</span>上传成功</p>
-            <p>{{file.raw?file.raw.name:'暂无上传文件'}}</p>
-            <el-progress :percentage="file.progress" :show-text="false"></el-progress>
-          </div>
-        </div>
-        <slot name="errorFile"></slot>
-        <p class="tips">• 为保证数据导入顺利,推荐您下载并使用<a :href="modelurl">《Excel标准模板》</a></p>
-        <p class="tips">• 文件中数据不能超过5000行</p>
-        <div class="dialog-footer">
-          <el-button size="small" @click="dialogUploadVisible = false" class="normal-btn-width">取 消</el-button>
-          <el-button size="small" type="warning" @click="dialogUploadVisible = false" class="normal-btn-width btn-warning">确 定</el-button>
-        </div>
-      </div>
-      
+
     </el-dialog>
   </div>
 </template>
@@ -66,7 +98,7 @@ export default {
     accept:限制上传文件类型;
     bindData:附件上传成功后对应需要绑定的数据信息
   */
-  props:['folderid','btntype','accept','bindData'],
+  props: ['folderid', 'btntype', 'accept', 'bindData'],
   data () {
     return {
       dialogUploadVisible: false,
@@ -81,14 +113,18 @@ export default {
       },
       file: {},
       filelist: [],
-      activeName:'first',
-      modelurl:''
+      activeName: 'first',
+      modelurl: '',
+      modelurl2: '',/* 快手与抖音模板 */
+      /* 上传模板类型 */
+      type:''
     }
   },
   mounted () {
     this.getModelUrl()
   },
   methods: {
+    /* 模板1 */
     handleChange (file, filelist) {
       this.filelist = filelist
       var index = file.raw.name.lastIndexOf(".");
@@ -96,16 +132,36 @@ export default {
       this.params.content.filename = file.raw.name
       this.params.content.filetype = ext
       this.getUploadUrl(file, ext)
+      this.type = 'module1'
+    },
+    /* 模板2 */
+    handleChange2 (file, filelist) {
+      this.filelist = filelist
+      var index = file.raw.name.lastIndexOf(".");
+      var ext = file.name.substr(index + 1);
+      this.params.content.filename = file.raw.name
+      this.params.content.filetype = ext
+      this.getUploadUrl(file, ext)
+      this.type = 'module2'
     },
     // 获取导入模板
     async getModelUrl () {
       const res = await this.$api.requested({
-        "classname":"webmanage.saletool.orderclue.orderclue",
+        "classname": "webmanage.saletool.orderclue.orderclue",
         "method": "downloadOrderclueuploadbillExcel",
-        "content": { 
+        "content": {
+        }
+      })
+      const res2 = await this.$api.requested({
+        "classname": "webmanage.saletool.orderclue.orderclue",
+        "method": "downloadOrderclueuploadbillExcelByPlatform",
+        "content": {
         }
       })
       this.modelurl = res.msg
+      this.modelurl2 = res2.msg
+      console.log(this.modelurl, this.modelurl2);
+
     },
     // 获取华为云上传地址
     async getUploadUrl (file, ext) {
@@ -117,7 +173,7 @@ export default {
       this.upoladFileToServer(url, file, ext, obsfilename)
     },
     // 上传到华为云
-    async upoladFileToServer (url, file, ext, obsfilename) {      
+    async upoladFileToServer (url, file, ext, obsfilename) {
       let THIS = this
       let config = {
         headers: ext === 'pdf' ? { 'Content-Type': 'application/pdf' } : { 'Content-Type': 'application/octet-stream' },
@@ -138,17 +194,17 @@ export default {
     // 上传成功以后生成附件记录
     async createFileRecord (obsfilename) {
       let obj = {
-         "serialfilename": obsfilename
+        "serialfilename": obsfilename
       }
-      obj = Object.assign({},obj,this.bindData)
+      obj = Object.assign({}, obj, this.bindData)
       let param = {
         "classname": "system.attachment.huawei.OBS",
         "method": "uploadSuccess",
-        "content":obj
+        "content": obj
       }
-      
+
       const res = await this.$api.requested(param)
-      this.$emit('onSuccess',res,this.activeName === 'first'?'经销商':'业务员')
+      this.$emit('onSuccess', res, this.activeName === 'first' ? '经销商' : '业务员',this.type)
     },
 
     clearFiles () {
@@ -161,7 +217,8 @@ export default {
 
 </script>
 <style>
-.import-panel .el-dialog__header,.import-panel .el-dialog__body{
+.import-panel .el-dialog__header,
+.import-panel .el-dialog__body {
   padding: 0 !important;
 }
 .upload-demo > div {
@@ -190,7 +247,7 @@ export default {
 .progress_panel > div > p {
   line-height: 30px;
 }
-.tips{
+.tips {
   line-height: 30px;
 }
 </style>

+ 76 - 84
src/views/login/login.vue

@@ -8,54 +8,48 @@
         </div>
         <div class="login-form">
           <h4 class="title">登录</h4>
-          <el-tabs v-model="activeName">
-            <el-tab-pane label="短信登录" name="first">
-              <el-form :rules="rules" ref="loginForm"  :model="loginForm">
-                <el-form-item prop="phonenumber">
-                  <el-input v-model="loginForm.phonenumber" placeholder="账号"></el-input>
-                </el-form-item> 
-                <el-form-item prop="password">
-                  <el-input v-model="loginForm.password" placeholder="验证码">
-                    <template slot="append">
-                      <span v-if="count > 0">{{count === 0?'获取验证码':count+ 's'}}</span>
-                      <el-button v-else @click="countDown" type="primary">{{count === 0?'获取验证码':count+ 's'}}</el-button>
-                    </template>
-                  </el-input>
-                </el-form-item>
-                <el-form-item>
-                  <div class="flex-between">
-                    <el-checkbox v-model="checked">记住账号</el-checkbox>
-                    <!-- <el-button type="text">忘记密码</el-button> -->
-                  </div>
-                </el-form-item>
-                <el-form-item>
-                  <el-button type="primary" style="width:100%" @click="login">登 录</el-button>
-                </el-form-item>
-              </el-form>
-            </el-tab-pane>
-            <el-tab-pane label="账号登录" name="second">
-              <el-form :rules="rules2" ref="loginForm"  :model="loginForm">
-                <el-form-item prop="phonenumber">
-                  <el-input v-model="loginForm.phonenumber" placeholder="账号"></el-input>
-                </el-form-item> 
-                <el-form-item prop="password">
-                  <el-input v-model="loginForm.password" type="password" placeholder="密码">
-                  </el-input>
-                </el-form-item>
-                <el-form-item>
-                  <div class="flex-between">
-                    <el-checkbox v-model="checked">记住账号</el-checkbox>
-                  </div>
-                </el-form-item>
-                <el-form-item>
-                  <el-button type="primary" style="width:100%" @click="loginbyaccount">登 录</el-button>
-                </el-form-item>
-              </el-form>
-            </el-tab-pane>
-          </el-tabs>
+          <el-form :rules="rules" ref="loginForm" :model="loginForm" v-if="typeof $route.query.admin != 'object'">
+            <el-form-item prop="phonenumber">
+              <el-input v-model="loginForm.phonenumber" placeholder="手机号"></el-input>
+            </el-form-item>
+            <el-form-item prop="password">
+              <el-input v-model="loginForm.password" placeholder="验证码">
+                <template slot="append">
+                  <span v-if="count > 0">{{count === 0?'获取验证码':count+ 's'}}</span>
+                  <el-button v-else @click="countDown" type="primary">{{count === 0?'获取验证码':count+ 's'}}</el-button>
+                </template>
+              </el-input>
+            </el-form-item>
+            <el-form-item>
+              <div class="flex-between">
+                <el-checkbox v-model="checked">记住账号</el-checkbox>
+                <!-- <el-button type="text">忘记密码</el-button> -->
+              </div>
+            </el-form-item>
+            <el-form-item>
+              <el-button type="primary" style="width:100%" @click="login">登 录</el-button>
+            </el-form-item>
+          </el-form>
+          <el-form :rules="rules2" ref="loginForm" :model="loginForm" v-else>
+            <el-form-item prop="phonenumber">
+              <el-input v-model="loginForm.phonenumber" placeholder="账号"></el-input>
+            </el-form-item>
+            <el-form-item prop="password">
+              <el-input v-model="loginForm.password" type="password" placeholder="密码">
+              </el-input>
+            </el-form-item>
+            <el-form-item>
+              <div class="flex-between">
+                <el-checkbox v-model="checked">记住账号</el-checkbox>
+              </div>
+            </el-form-item>
+            <el-form-item>
+              <el-button type="primary" style="width:100%" @click="loginbyaccount">登 录</el-button>
+            </el-form-item>
+          </el-form>
         </div>
       </div>
-      
+
     </div>
   </div>
 </template>
@@ -68,13 +62,13 @@ export default {
     return {
       rules: {
         phonenumber: [
-          { required: true, message: '请输入号', trigger: 'blur' },
+          { required: true, message: '请输入手机号', trigger: 'blur' },
         ],
         password: [
           { required: true, message: '请输入验证码', trigger: 'blur' }
         ],
       },
-      rules2:{
+      rules2: {
         phonenumber: [
           { required: true, message: '请输入账号', trigger: 'blur' },
         ],
@@ -82,12 +76,12 @@ export default {
           { required: true, message: '请输入密码', trigger: 'blur' }
         ],
       },
-      loginForm:{
-        phonenumber:''
+      loginForm: {
+        phonenumber: ''
       },
-      activeName:'first',
-      checked:false,
-      count:0
+      activeName: 'first',
+      checked: false,
+      count: 0,
     }
   },
   mounted () {
@@ -97,19 +91,19 @@ export default {
     }
     console.log(this.HTTP_DEFALUT_ERROR)
   },
-  methods:{
+  methods: {
     //验证码请求
     loginCode () {
       this.$api.loginCode({
-        "phonenumber":this.loginForm.phonenumber,
+        "phonenumber": this.loginForm.phonenumber,
         "systemclient": "web"
       }).then(res => {
         console.log(res)
         const h = this.$createElement;
-        res.code === 1?this.$notify({
+        res.code === 1 ? this.$notify({
           title: '获取验证码成功!',
-          message: h('i', { style: 'color: teal'}, res.msg)
-        }):this.$notify({
+          message: h('i', { style: 'color: teal' }, res.msg)
+        }) : this.$notify({
           title: '失败',
           message: res.msg,
           type: 'error'
@@ -120,27 +114,27 @@ export default {
     async countDown () {
       await this.loginCode()
       this.count = 5
-      var down = setInterval(()=>{
-        this.count --
-        this.count === 0? clearInterval(down):''
-      },1000)
+      var down = setInterval(() => {
+        this.count--
+        this.count === 0 ? clearInterval(down) : ''
+      }, 1000)
     },
     // 登录请求
     async login () {
       const res = await this.$api.login({
-        "phonenumber":this.loginForm.phonenumber,
-        "password":md5(this.loginForm.password),  
+        "phonenumber": this.loginForm.phonenumber,
+        "password": md5(this.loginForm.password),
         "systemclient": "web"
       })
       let that = this
       if (res.code === 1) {
-        this.checked?localStorage.setItem('phonenumber',this.loginForm.phonenumber):localStorage.clear('phonenumber')
+        this.checked ? localStorage.setItem('phonenumber', this.loginForm.phonenumber) : localStorage.clear('phonenumber')
         this.$router.push('/accounts')
-        sessionStorage.setItem('account_list',JSON.stringify(res.account_list))
+        sessionStorage.setItem('account_list', JSON.stringify(res.account_list))
       } else {
         this.$notify({
           title: '失败',
-          message:res.msg,
+          message: res.msg,
           type: 'error'
         })
       }
@@ -150,12 +144,12 @@ export default {
       const res = await this.$api.loginbyaccount({
         "accountno": this.loginForm.phonenumber,
         "password": md5(this.loginForm.password),
-        "systemclient":"web"
+        "systemclient": "web"
       })
       if (res.code === 1) {
-        this.checked?localStorage.setItem('phonenumber',this.loginForm.phonenumber):localStorage.clear('phonenumber')
+        this.checked ? localStorage.setItem('phonenumber', this.loginForm.phonenumber) : localStorage.clear('phonenumber')
         this.$router.push('/accounts')
-        sessionStorage.setItem('account_list',JSON.stringify(res.account_list))
+        sessionStorage.setItem('account_list', JSON.stringify(res.account_list))
       } else {
         this.$notify({
           title: '失败',
@@ -169,23 +163,21 @@ export default {
 
 </script>
 <style>
-
 </style>
 <style scoped>
-.logo{
+.logo {
   text-align: center;
   margin-bottom: 30px;
 }
-.logo span{
+.logo span {
   display: block;
   font-size: 24px;
   line-height: 15px;
-
 }
-.logo small{
-  color:#999
+.logo small {
+  color: #999;
 }
-.title{
+.title {
   display: flex;
   align-items: center;
   justify-content: space-between;
@@ -195,7 +187,7 @@ export default {
   font-size: 24px;
   font-weight: 600;
 }
-.login-wrap{
+.login-wrap {
   display: flex;
   align-items: center;
   justify-content: space-around;
@@ -205,24 +197,24 @@ export default {
   background: #f1f2f3;
   background-size: 2560px 1490px;
 }
-.login-form{
+.login-form {
   /* min-height: 500px; */
   width: 400px;
   padding: 30px;
   background: #fff;
   border-radius: 10px;
 }
-.form-input-group{
-  margin-bottom: 16px
+.form-input-group {
+  margin-bottom: 16px;
 }
-.input-wrap{
+.input-wrap {
   width: 100%;
 }
-.d-input{
+.d-input {
   height: 40px;
   width: 100%;
 }
-.flex-between{
+.flex-between {
   display: flex;
   align-items: center;
   justify-content: space-between;