From 3fbfdefe98e5d35e32d74138ce73a1b4e2fe5465 Mon Sep 17 00:00:00 2001
From: Mr.Zhang <710666463@qq.com>
Date: 星期四, 21 九月 2023 13:57:56 +0800
Subject: [PATCH] 平台端

---
 platform/src/api/business/fileRecord.js                     |    8 +
 platform/src/views/business/fileRecord.vue                  |  119 +++++++++++++++++
 platform/src/components/business/OperaCompanyWindow.vue     |   46 +++++-
 platform/src/views/system/user.vue                          |    5 
 platform/src/views/business/company.vue                     |   18 +-
 platform/src/assets/logo.png                                |    0 
 platform/package.json                                       |    2 
 platform/src/components/system/user/OperaUserWindow.vue     |    6 
 platform/src/utils/request.js                               |    4 
 platform/public/favicon.ico                                 |    0 
 platform/public/template/goods_import_modle.xlsx            |    0 
 platform/src/components/business/OperaCompanyUserWindow.vue |   10 
 platform/src/utils/form.js                                  |   83 +++++++++++
 platform/src/components/business/OperaGoodsWindow.vue       |    8 
 platform/.env.production                                    |   11 
 platform/.env.development                                   |    6 
 platform/src/components/common/GlobalAlertWindow.vue        |    1 
 platform/src/views/business/goods.vue                       |   43 +++--
 platform/src/views/business/category.vue                    |    9 
 19 files changed, 315 insertions(+), 64 deletions(-)

diff --git a/platform/.env.development b/platform/.env.development
index 360f8b7..c53b589 100644
--- a/platform/.env.development
+++ b/platform/.env.development
@@ -7,9 +7,9 @@
 # 浠诲悍
 # VUE_APP_API = 'http://192.168.0.15:10017/'
 # 鐒︽澗
-VUE_APP_API = 'http://192.168.0.36:10011'
+VUE_APP_API = 'http://192.168.0.36:10023'
 # 姹熻悕
-VUE_APP_API = 'http://192.168.0.35:10011'
+# VUE_APP_API = 'http://192.168.0.35:10023'
 
-#娴嬭瘯鏈嶅姟鍣�
+# #娴嬭瘯鏈嶅姟鍣�
 # VUE_APP_API = 'https://dmtest.ahapp.net/preselect_admin_interface'
diff --git a/platform/.env.production b/platform/.env.production
index eb6b15b..5c2b951 100644
--- a/platform/.env.production
+++ b/platform/.env.production
@@ -1,12 +1,11 @@
 # 鐢熶骇鐜閰嶇疆
 NODE_ENV = 'production'
 
-# VUE_APP_API = 'https://dmtest.ahapp.net/preselect_interface/'
 
-VUE_APP_API = 'http://127.0.0.1/'
+VUE_APP_CONTEXT_PATH = '/admin'
+VUE_APP_API_PREFIX = '/admin_interface'
 
-# VUE_APP_API = 'https://dm.ahapp.net/preselect_interface/'
 
-# VUE_APP_API = 'http://yx.doumee.com/preselect_interface/'
-
-# VUE_APP_API = 'http://mjyx.doumee.com/preselect_interface/'
\ No newline at end of file
+# http://yx.ahapp.net/admin_interface/doc.html
+# VUE_APP_API = 'https://yx.ahapp.net/admin_interface'
+VUE_APP_API = 'http://127.0.0.1:10023/
\ No newline at end of file
diff --git a/platform/package.json b/platform/package.json
index bc7b751..14effa1 100644
--- a/platform/package.json
+++ b/platform/package.json
@@ -4,7 +4,7 @@
   "private": true,
   "scripts": {
     "serve": "vue-cli-service serve",
-    "build": "vue-cli-service build",
+    "build:pro": "vue-cli-service build",
     "build:dev": "vue-cli-service build --mode staging",
     "lint": "vue-cli-service lint",
     "fix": "eslint --ext .js,.vue src --fix"
diff --git a/platform/public/favicon.ico b/platform/public/favicon.ico
index c6ff5db..64ccd74 100644
--- a/platform/public/favicon.ico
+++ b/platform/public/favicon.ico
Binary files differ
diff --git a/platform/public/template/goods_import_modle.xlsx b/platform/public/template/goods_import_modle.xlsx
index 84a9c9a..87678a5 100644
--- a/platform/public/template/goods_import_modle.xlsx
+++ b/platform/public/template/goods_import_modle.xlsx
Binary files differ
diff --git a/platform/src/api/business/fileRecord.js b/platform/src/api/business/fileRecord.js
new file mode 100644
index 0000000..5e34b26
--- /dev/null
+++ b/platform/src/api/business/fileRecord.js
@@ -0,0 +1,8 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/fileRecord/page', data, {
+    trim: true
+  })
+}
diff --git a/platform/src/assets/logo.png b/platform/src/assets/logo.png
index 3c0b233..5d8fd16 100644
--- a/platform/src/assets/logo.png
+++ b/platform/src/assets/logo.png
Binary files differ
diff --git a/platform/src/components/business/OperaCompanyUserWindow.vue b/platform/src/components/business/OperaCompanyUserWindow.vue
index 6613a25..45942e7 100644
--- a/platform/src/components/business/OperaCompanyUserWindow.vue
+++ b/platform/src/components/business/OperaCompanyUserWindow.vue
@@ -11,11 +11,11 @@
         <el-input v-model="form.name" placeholder="璇疯緭鍏ュ鎴蜂紒涓氬叏绉帮紝涓嶈秴杩�30瀛�" v-trim/>
         浼佷笟鍚嶇О闇�涓庡伐鍟嗛儴闂ㄧ櫥璁颁俊鎭竴鑷�
       </el-form-item>
-      <el-form-item label="浼佷笟绠�绉�" prop="shortName">
+      <el-form-item label="瀹㈡埛绠�绉�" prop="shortName">
         <el-input v-model="form.shortName" placeholder="璇疯緭鍏ヤ紒涓氱畝绉�" v-trim/>
       </el-form-item>
-      <el-form-item label="缁熶竴绀句細淇$敤浠g爜" prop="creditCode">
-        <el-input v-model="form.creditCode" placeholder="璇疯緭鍏ョ粺涓�绀句細淇$敤浠g爜" v-trim/>
+      <el-form-item label="缁熶竴淇$敤浠g爜" prop="creditCode">
+        <el-input v-model="form.creditCode" placeholder="璇疯緭鍏ョ粺涓�淇$敤浠g爜" v-trim/>
         缁熶竴淇$敤浠g爜闇�涓庡伐鍟嗛儴闂ㄧ櫥璁颁俊鎭竴鑷�
       </el-form-item>
       <el-form-item label="鐧诲綍璐﹀彿" prop="managerUserName">
@@ -26,6 +26,7 @@
       </el-form-item>
       <el-form-item label="涓绘挱鏁伴噺闄愬埗" prop="userNum">
         <el-input v-model="form.userNum" :disabled="!!this.form.id" placeholder="璇疯緭鍏ヤ富鎾暟閲忛檺鍒�" v-trim/>
+        
       </el-form-item>
       <el-form-item label="閿�鍞汉鍛�" prop="salesmanId">
         <!-- <el-input v-model="form.salesmanId" placeholder="璇疯緭鍏ラ攢鍞汉鍛樼紪鐮�" v-trim/> -->
@@ -71,7 +72,7 @@
         linkname: '',
         linkephone: '',
         creditCode: '',
-        userNum: '',
+        userNum: 5,
         oepnValidDate: '',
         salesmanId: ''
       },
@@ -106,6 +107,7 @@
 <style lang="scss" scoped>
 .more {
   margin-top: 40px;
+  margin-bottom: 10px;
   .more-title {
     font-weight: 600;
     font-size: 18px;
diff --git a/platform/src/components/business/OperaCompanyWindow.vue b/platform/src/components/business/OperaCompanyWindow.vue
index 4c91ee7..0739250 100644
--- a/platform/src/components/business/OperaCompanyWindow.vue
+++ b/platform/src/components/business/OperaCompanyWindow.vue
@@ -11,11 +11,11 @@
         <el-input v-model="form.name" placeholder="璇疯緭鍏ュ鎴蜂紒涓氬叏绉帮紝涓嶈秴杩�30瀛�" v-trim/>
         浼佷笟鍚嶇О闇�涓庡伐鍟嗛儴闂ㄧ櫥璁颁俊鎭竴鑷�
       </el-form-item>
-      <el-form-item label="浼佷笟绠�绉�" prop="shortName">
-        <el-input v-model="form.shortName" placeholder="璇疯緭鍏ヤ紒涓氱畝绉�" v-trim/>
+      <el-form-item label="瀹㈡埛绠�绉�" prop="shortName">
+        <el-input v-model="form.shortName" placeholder="璇疯緭鍏ュ鎴风畝绉�" v-trim/>
       </el-form-item>
-      <el-form-item label="缁熶竴绀句細淇$敤浠g爜" prop="creditCode">
-        <el-input v-model="form.creditCode" placeholder="璇疯緭鍏ョ粺涓�绀句細淇$敤浠g爜" v-trim/>
+      <el-form-item label="缁熶竴淇$敤浠g爜" prop="creditCode">
+        <el-input v-model="form.creditCode" placeholder="璇疯緭鍏ョ粺涓�淇$敤浠g爜" v-trim/>
         缁熶竴淇$敤浠g爜闇�涓庡伐鍟嗛儴闂ㄧ櫥璁颁俊鎭竴鑷�
       </el-form-item>
       <el-form-item label="鐧诲綍璐﹀彿" prop="managerUserName">
@@ -26,6 +26,7 @@
       </el-form-item>
       <el-form-item label="涓绘挱鏁伴噺闄愬埗" prop="userNum">
         <el-input v-model="form.userNum" :disabled="!!this.form.id" placeholder="璇疯緭鍏ヤ富鎾暟閲忛檺鍒�" v-trim/>
+        杈撳叆0琛ㄧず涓嶉檺鍒�
       </el-form-item>
       <el-form-item label="閿�鍞汉鍛�" prop="salesmanId">
         <!-- <el-input v-model="form.salesmanId" placeholder="璇疯緭鍏ラ攢鍞汉鍛樼紪鐮�" v-trim/> -->
@@ -54,6 +55,7 @@
 import BaseOpera from '@/components/base/BaseOpera'
 import GlobalAlertWindow from '@/components/common/GlobalAlertWindow'
 import { findAllList } from '@/api/system/user'
+import { loginNameRule, creditCode } from '@/utils/form'
 export default {
   name: 'OperaCompanyWindow',
   extends: BaseOpera,
@@ -71,7 +73,7 @@
         linkname: '',
         linkephone: '',
         creditCode: '',
-        userNum: '',
+        userNum: '5',
         oepnValidDate: '',
         salesmanId: ''
       },
@@ -82,7 +84,10 @@
           { required: true, message: '璇疯緭鍏ュ鎴蜂紒涓氬叏绉�', tigger: 'blur'}
         ],
         managerUserName: [
-          { required: true, message: '璇疯緭鍏ョ櫥褰曡处鍙�', tigger: 'blur'}
+          { required: true, validator: loginNameRule, message: '璇疯緭鍏ョ櫥褰曡处鍙�', tigger: 'blur'}
+        ],
+        creditCode: [
+          { validator: creditCode, trigger: 'blur' }
         ],
         openUserNum: [
           { pattern: /^[0-9]+$/, message: '鍙彲浠ヨ緭鍏ユ暟瀛�', trigger: 'change' }
@@ -99,16 +104,43 @@
       .then(res => {
         this.sales = res
       })
-  }
+  },
+  methods: {
+    open(title, target) {
+      this.title = title
+      this.visible = true
+      // 鏂板缓
+      if (target == null) {
+        this.$nextTick(() => {
+          this.$refs.form.resetFields()
+          let data = new Date(new Date().getTime() + 31536000000)
+          this.form.oepnValidDate = `${data.getFullYear()}-${data.getMonth() +1}-${data.getDate()}`
+          this.form[this.configData['field.id']] = null
+        })
+        return
+      }
+      // 缂栬緫
+      this.$nextTick(() => {
+        for (const key in this.form) {
+          this.form[key] = target[key]
+        }
+        this.form.multifileList.forEach(item => {
+          item.url = item.filefullurl
+        })
+      })
+    },
+  },
 }
 </script>
 
 <style lang="scss" scoped>
 .more {
   margin-top: 40px;
+  
   .more-title {
     font-weight: 600;
     font-size: 18px;
+    margin-bottom: 10px;
   }
 }
 ::v-deep .el-input {
diff --git a/platform/src/components/business/OperaGoodsWindow.vue b/platform/src/components/business/OperaGoodsWindow.vue
index 4bbcc37..b4d0072 100644
--- a/platform/src/components/business/OperaGoodsWindow.vue
+++ b/platform/src/components/business/OperaGoodsWindow.vue
@@ -2,18 +2,18 @@
   <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm" width="800px"
     v-loading="isUploading">
     <el-form :model="form" ref="form" label-width="120px" :rules="rules">
-      <div style="font-size: 18px;font-weight: bold;">鍩烘湰淇℃伅</div>
+      <div style="font-size: 18px;font-weight: bold; margin-bottom: 10px;">鍩烘湰淇℃伅</div>
       <el-form-item label="鍟嗗搧鍚嶇О" prop="name">
         <el-input v-model="form.name" maxlength="50" placeholder="璇疯緭鍏ュ晢鍝佸悕绉帮紝涓嶈秴杩�50涓瓧" v-trim />
       </el-form-item>
       <el-form-item label="鍟嗗搧鍝佺墝" prop="brandId">
-        <el-select v-model="form.brandId" placeholder="璇烽�夋嫨锛屽崟閫�">
+        <el-select v-model="form.brandId" filterable placeholder="璇烽�夋嫨锛屽崟閫�">
           <el-option v-for="item in brandList()" :key="item.id" :label="item.name" :value="item.id">
           </el-option>
         </el-select>
       </el-form-item>
       <el-form-item label="鍟嗗搧绫诲埆" prop="categoryId">
-        <el-select v-model="form.categoryId" placeholder="璇烽�夋嫨锛屽崟閫�" @change="categorySelect">
+        <el-select v-model="form.categoryId" filterable placeholder="璇烽�夋嫨锛屽崟閫�" @change="categorySelect">
           <el-option v-for="item in categoryList()" :key="item.id" :label="item.name" :value="item.id">
           </el-option>
         </el-select>
@@ -37,7 +37,7 @@
         鍙兘涓婁紶鍥剧墖鏍煎紡锛宲ng鏍煎紡锛屽缓璁昂瀵�600*600px
       </el-form-item>
       <template v-if="form.baseGoodsParamList && form.baseGoodsParamList.length > 0">
-        <div style="font-size: 18px;font-weight: bold;">鍙傛暟灞炴�у�奸厤缃� <span
+        <div style="font-size: 18px;font-weight: bold; margin-bottom: 10px;">鍙傛暟灞炴�у�奸厤缃� <span
             style="font-size: 13px; font-weight: 500;">鎸夐渶閰嶇疆褰撳墠鍟嗗搧鐨勪骇鍝佸弬鏁板�硷紝鍗曚釜鍙傛暟鍊间笉瓒呰繃30涓瓧</span></div>
         <el-form-item :label="item.name" v-for="(item, index) in form.baseGoodsParamList" :key="index">
           <el-input v-model="item.val" maxlength="30" type="text" placeholder="璇疯緭鍏�" v-trim />
diff --git a/platform/src/components/common/GlobalAlertWindow.vue b/platform/src/components/common/GlobalAlertWindow.vue
index f1d4255..74d06aa 100644
--- a/platform/src/components/common/GlobalAlertWindow.vue
+++ b/platform/src/components/common/GlobalAlertWindow.vue
@@ -1,6 +1,7 @@
 
 <template>
   <el-dialog
+    top="10vh"
     class="global-window"
     title="title"
     :visible="visible"
diff --git a/platform/src/components/system/user/OperaUserWindow.vue b/platform/src/components/system/user/OperaUserWindow.vue
index 240a739..c3ac6e7 100644
--- a/platform/src/components/system/user/OperaUserWindow.vue
+++ b/platform/src/components/system/user/OperaUserWindow.vue
@@ -19,12 +19,12 @@
           <el-radio label="0">濂�</el-radio>
         </el-radio-group>
       </el-form-item>
-      <el-form-item label="澶村儚" prop="avatar" required>
+      <!-- <el-form-item label="澶村儚" prop="avatar" required>
         <el-radio-group v-model="form.avatar" class="form-item-avatar">
           <el-radio label="https://dmtest.ahapp.net/preselectfile/man.png" border><img src="https://dmtest.ahapp.net/preselectfile/man.png" alt=""></el-radio>
           <el-radio label="https://dmtest.ahapp.net/preselectfile/woman.png" border><img src="https://dmtest.ahapp.net/preselectfile/woman.png" alt=""></el-radio>
         </el-radio-group>
-      </el-form-item>
+      </el-form-item> -->
       <el-form-item v-if="form.id == null" label="鍒濆瀵嗙爜" prop="password" required>
         <el-input v-model="form.password" type="password" placeholder="璇疯緭鍏ュ垵濮嬪瘑鐮�" maxlength="30" show-password/>
       </el-form-item>
@@ -71,7 +71,7 @@
         empNo: '', // 宸ュ彿
         departmentId: null, //  鎵�灞為儴闂↖D
         positionIds: [], //  鎵�灞炲矖浣岻D闆�
-        avatar: '/avatar/man.png', // 澶村儚
+        // avatar: '/avatar/man.png', // 澶村儚
         password: '', // 瀵嗙爜
         mobile: '', // 鎵嬫満鍙风爜
         email: '', // 閭
diff --git a/platform/src/utils/form.js b/platform/src/utils/form.js
index cf60c6f..e625827 100644
--- a/platform/src/utils/form.js
+++ b/platform/src/utils/form.js
@@ -1,15 +1,88 @@
-// 楠岃瘉鎵嬫満鍙风爜
-export function checkMobile (rule, value, callback) {
+
+export function checkMobile(rule, value, callback) {
   if (value == null || value.trim() === '') {
-    callback(new Error('鎵嬫満鍙风爜涓嶈兘涓虹┖'))
+    if (rule.required) {
+      callback(new Error('璇疯緭鍏ユ墜鏈哄彿'))
+    } else {
+      callback()
+    }
     return
   }
-  if (!/^1\d{10}$/.test(value)) {
-    callback(new Error('鎵嬫満鍙风爜鏍煎紡涓嶆纭�'))
+  let re = /^[0-9]{11}$/;
+  var result = re.test(value); 
+  if(!result) {
+    callback(new Error('璇疯緭鍏ユ纭殑鎵嬫満鍙�'))
+  } else {
+    callback()
+  }
+}
+
+export function checkPhone(rule, value, callback) {
+  //鎵嬫満鍙凤細13锛�14锛�15锛�17锛�18锛�19鍙锋
+  const phoneReg = /^1[3|4|5|7|8][0-9]{9}$/
+  //鍥鸿瘽锛氬尯鍙�(3-4浣�)-鍙风爜(7-9浣�)
+  const mobReg =  /(^[0-9]{3,4}-[0-9]{7,9}$)/
+  //婢抽棬鐢佃瘽鍙风爜: 28寮�澶达紝鍚庨潰璺�6浣嶆暟瀛楋紝鍖哄彿涓�853
+  const macaoMobReg = /^(853)?28\d{6}$/
+  //婢抽棬鎵嬫満鍙风爜锛�6寮�澶达紝鍚庨潰璺�7浣嶆暟瀛楋紝鍖哄彿涓�853
+  const macaoPhoneReg = /^(853)?6\d{7}$/
+  //鍚屾椂鏀寔鎵嬫満鍙风爜鍜岀數璇濆彿鐮�
+  const macaoReg = /^(853)?(?:28\d{6}|6\d{7})$/  
+  if (!value) {
+      callback(new Error('鐢佃瘽鍙风爜涓嶈兘涓虹┖'))
+  } else if (phoneReg.test(value)||mobReg.test(value)||macaoReg.test(value)) {
+      callback()
+  } else {
+      callback(new Error('璇疯緭鍏ユ纭數璇濆彿鐮�'))
+  }
+}
+
+export function loginNameRule (rule, value, callback) {
+  if (value == null || value.trim() === '') {
+    if (rule.required) {
+      callback(new Error('璇疯緭鍏ヨ处鍙�'))
+    } else {
+      callback()
+    }
+    return
+  }
+  let re =/^[\u4e00-\u9fa5a-zA-Z0-9]+$/
+  var result = re.test(value)
+  if(!result) {
+    callback(new Error('璇疯緭鍏ユ纭殑璐﹀彿'))
+  } else {
+    callback()
+  }
+}
+
+export function nameRule (rule, value, callback) {
+  if (value == null || value.trim() === '') {
+    if (rule.required) {
+      callback(new Error('璇疯緭鍏ュ悕瀛�'))
+    } else {
+      callback()
+    }
     return
   }
   callback()
 }
+export function creditCode (rule, value, callback) {
+  if (value == null || value.trim() === '') {
+    if (rule.required) {
+      callback(new Error('璇疯緭鍏ョぞ浼氫俊鐢ㄤ唬鐮�'))
+    } else {
+      callback()
+    }
+    return
+  }
+  let re = /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/
+  var result = re.test(value)
+  if(!result) {
+    callback(new Error('璇疯緭鍏ユ纭殑绀句細淇$敤浠g爜'))
+  } else {
+    callback()
+  }
+}
 
 // 楠岃瘉閭
 export function checkEmail (rule, value, callback) {
diff --git a/platform/src/utils/request.js b/platform/src/utils/request.js
index bb715e1..703ba15 100644
--- a/platform/src/utils/request.js
+++ b/platform/src/utils/request.js
@@ -29,9 +29,9 @@
   // 璁剧疆鎿嶄綔骞冲彴
   config.headers['eva-platform'] = `pc-${pkg.version}`
   // 璁剧疆璁よ瘉澶�
-  const authToken = Cookies.get('eva-auth-token')
+  const authToken = Cookies.get('doumee-auth-token')
   if (authToken != null) {
-    config.headers['eva-auth-token'] = authToken
+    config.headers['doumee-auth-token'] = authToken
   }
   return config
 }, function (error) {
diff --git a/platform/src/views/business/category.vue b/platform/src/views/business/category.vue
index 659971b..f937c4c 100644
--- a/platform/src/views/business/category.vue
+++ b/platform/src/views/business/category.vue
@@ -29,7 +29,7 @@
         <el-table-column prop="priceRate" label="鍔犱环绯绘暟" min-width="100px"></el-table-column>
         <el-table-column prop="sortnum" label="鎺掑簭鐮�(鍗囧簭)" min-width="100px"></el-table-column>
         <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column prop="status" label="鐘舵��" min-width="100px">
+        <el-table-column v-if="containPermissions(['business:category:update'])" prop="status" label="鐘舵��" min-width="100px">
           <template slot-scope="{row}">
             <el-switch v-model="row.status" @change="changeStatus(row)" :active-value="0" :inactive-value="1">
             </el-switch>
@@ -88,8 +88,11 @@
         status: item.status
       }).then(res => {
         this.$tip.apiSuccess('鏇存柊鎴愬姛')
-      }).finally(() => {
-        // this.search()
+      }).catch (err => {
+          this.$message.error(err)
+        })
+        .finally(() => {
+        this.handlePageChange()
       })
     },
     edit(id) {
diff --git a/platform/src/views/business/company.vue b/platform/src/views/business/company.vue
index 8ae8e33..ce296b3 100644
--- a/platform/src/views/business/company.vue
+++ b/platform/src/views/business/company.vue
@@ -2,14 +2,14 @@
   <TableLayout :permissions="['business:company:query']">
     <!-- 鎼滅储琛ㄥ崟 -->
     <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
-      <el-form-item label="鍚嶇О" prop="name">
-        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+      <el-form-item label="浼佷笟鍚嶇О" prop="name">
+        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ヤ紒涓氬悕绉�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <!-- <el-form-item label="浼佷笟绠�绉�" prop="shortName">
         <el-input v-model="searchForm.shortName" placeholder="璇疯緭鍏ヤ紒涓氱畝绉�" @keypress.enter.native="search"></el-input>
       </el-form-item> -->
-      <el-form-item label="绠$悊鍛樿处鍙�" prop="managerUserName">
-        <el-input v-model="searchForm.managerUserName" placeholder="璇疯緭鍏ョ鐞嗗憳璐﹀彿" @keypress.enter.native="search"></el-input>
+      <el-form-item label="鐧诲綍璐﹀彿" prop="managerUserName">
+        <el-input v-model="searchForm.managerUserName" placeholder="璇疯緭鍏ョ櫥褰曡处鍙�" @keypress.enter.native="search"></el-input>
       </el-form-item>
       <el-form-item label="鏈夋晥鏈�" prop="oepnValidDate">
         <el-date-picker type="daterange" v-model="oepnValidDate" value-format="yyyy-MM-dd" start-placeholder="寮�濮嬫棩鏈�"
@@ -37,11 +37,15 @@
         <!-- <el-table-column type="selection" width="55" align="center"></el-table-column> -->
         <el-table-column prop="id" label="浼佷笟缂栧彿" min-width="80px" align="center"></el-table-column>
         <el-table-column prop="name" label="浼佷笟鍚嶇О" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="managerUserName" label="绠$悊鍛樿处鍙�" min-width="100px" align="center"></el-table-column>
+        <el-table-column prop="managerUserName" label="鐧诲綍璐﹀彿" min-width="100px" align="center"></el-table-column>
         <el-table-column prop="linkname" label="鑱旂郴浜�" min-width="100px" align="center"></el-table-column>
         <el-table-column prop="linkephone" label="鑱旂郴浜虹數璇�" min-width="100px" align="center"></el-table-column>
-        <el-table-column prop="oepnValidDate" label="鐢ㄦ湁鏁堟湡" min-width="140px" align="center"></el-table-column>
-        <el-table-column prop="userNum" label="涓绘挱鏁伴噺闄愬埗" min-width="100px" align="center"></el-table-column>
+        <el-table-column prop="oepnValidDate" label="鏈夋晥鏈�" min-width="140px" align="center"></el-table-column>
+        <el-table-column prop="userNum" label="涓绘挱璐﹀彿闄愬埗" min-width="100px" align="center">
+          <template slot-scope="{row}">
+            {{ row.userNum || '涓嶉檺' }}
+          </template>
+        </el-table-column>
         <el-table-column prop="empUserNum" label="鍛樺伐鏁�" min-width="100px" align="center"></el-table-column>
         <el-table-column prop="salesmanRealName" label="閿�鍞汉鍛�" min-width="100px" align="center"></el-table-column>
         <el-table-column prop="status" label="鐘舵��" min-width="100px" align="center">
diff --git a/platform/src/views/business/fileRecord.vue b/platform/src/views/business/fileRecord.vue
new file mode 100644
index 0000000..f2160c6
--- /dev/null
+++ b/platform/src/views/business/fileRecord.vue
@@ -0,0 +1,119 @@
+<template>
+  <TableLayout :permissions="['business:filerecord:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      
+      <!-- <el-form-item label="鏂囦欢鍚�" prop="name">
+        <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ユ枃浠跺悕" @keypress.enter.native="search"></el-input>
+      </el-form-item> -->
+      
+      <el-form-item label="鏂囦欢澶瑰悕绉�" prop="folder">
+        <el-input v-model="searchForm.folder" placeholder="璇疯緭鍏ユ枃浠跺す鍚嶇О" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+     
+      <el-form-item label="OSS鏂囦欢key" prop="keyval">
+        <el-input v-model="searchForm.keyval" placeholder="璇疯緭鍏SS鏂囦欢key" @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="鐘舵��" prop="status">
+        <el-select v-model="searchForm.status" clearable placeholder="璇烽�夋嫨鐘舵��">
+          <el-option v-for="item in statusList" :key="item.id" :label="item.name" :value="item.id">
+          </el-option>
+        </el-select>
+      </el-form-item> 
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        border
+        stripe
+      >
+       <el-table-column type="index" :index="newIndex" label="搴忓彿" width="80px" align="center"></el-table-column>
+       <el-table-column prop="name" label="鏂囦欢" width="100px" align="center">
+        <template slot-scope="{row}">
+          <el-image v-if="row.url" style="width: 70px; height: 70px" :src="row.url"
+                  :preview-src-list="[row.url]" fit="cover"></el-image>
+        </template>
+       </el-table-column>
+        <el-table-column prop="folder" label="鏂囦欢澶瑰悕绉�" width="140px" align="center"></el-table-column>
+        <el-table-column prop="keyval" label="OSS鏂囦欢key" min-width="120px" align="center"></el-table-column>
+        <el-table-column prop="status" label="鐘舵��" width="100px" align="center">
+          <template slot-scope="{row}">
+            <!--  0鏈笂浼� 1宸蹭笂浼� 2涓婁紶澶辫触 -->
+            {{ row.status == 0 ? '鏈笂浼�' : row.status == 1 ? '宸蹭笂浼�' : '涓婁紶澶辫触' }}
+          </template>
+        </el-table-column>
+        <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" width="150px" align="center"></el-table-column>
+        <el-table-column prop="editDate" label="鏇存柊鏃堕棿" width="150px" align="center"></el-table-column>
+<!--      
+        <el-table-column prop="editor" label="鏇存柊浜虹紪鐮�" min-width="100px"></el-table-column>
+        <el-table-column prop="isdeleted" label="鏄惁鍒犻櫎0鍚� 1鏄�" min-width="100px"></el-table-column>
+        <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
+        <el-table-column prop="objId" label="鍏宠仈瀵硅薄缂栫爜" min-width="100px"></el-table-column>
+        <el-table-column prop="type" label="绫诲瀷0鍥剧墖 1瑙嗛 2鍏朵粬" min-width="100px"></el-table-column> -->
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+export default {
+  name: 'FileRecord',
+  extends: BaseTable,
+  components: { TableLayout, Pagination },
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        id: '',
+        creator: '',
+        createDate: '',
+        editor: '',
+        editDate: '',
+        isdeleted: '',
+        name: '',
+        info: '',
+        objId: '',
+        type: '',
+        folder: '',
+        status: '',
+        keyval: ''
+      },
+      statusList: [
+        // 0鏈笂浼� 1宸蹭笂浼� 2涓婁紶澶辫触
+        { name: '鏈笂浼�', id: 0 },
+        { name: '宸蹭笂浼�', id: 1 },
+        { name: '涓婁紶澶辫触', id: 2 }
+      ]
+    }
+  },
+  created () {
+    this.config({
+      module: '闄勪欢涓婁紶杩涘害琛�',
+      api: '/business/fileRecord',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  },
+  methods: {
+    newIndex(index) {
+      return (this.tableData.pagination.pageIndex - 1) * 10 + index + 1
+    }
+  },
+}
+</script>
diff --git a/platform/src/views/business/goods.vue b/platform/src/views/business/goods.vue
index b7f8046..98ebff2 100644
--- a/platform/src/views/business/goods.vue
+++ b/platform/src/views/business/goods.vue
@@ -43,14 +43,18 @@
         </li>
         <!-- <el-button type="primary" :loading="isWorking.export"
           @click="$refs.selectProduct.open('閫夋嫨骞冲彴鍟嗗搧')">閫夋嫨骞冲彴鍟嗗搧</el-button> -->
-        <li v-permissions="['business:basegoods:exportExcel']">
+        <li v-permissions="['business:basegoods:exportExcel', 'business:goods:delete']">
           <ImportButton text="瀵煎叆" template-name="goods_import_modle.xlsx"
             template-path="/template/goods_import_modle.xlsx" action="/business/baseGoods/importExcel"
             @success="search" />
         </li>
-        <el-button type="primary" :loading="isWorking.export" @click="bulkOperation(0)">鎵归噺涓婃灦</el-button>
-        <el-button type="primary" :loading="isWorking.export" @click="bulkOperation(1)">鎵归噺涓嬫灦</el-button>
-        <!-- <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:goods:delete']">鍒犻櫎</el-button></li> -->
+        <li>
+          <el-button type="primary" :loading="isWorking.export" @click="bulkOperation(0)">鎵归噺涓婃灦</el-button>
+        </li>
+        <li>
+          <el-button type="primary" :loading="isWorking.export" @click="bulkOperation(1)">鎵归噺涓嬫灦</el-button>
+        </li>
+        <li v-permissions="['business:goods:delete']"><el-button @click="deleteByIdInBatch" style="color: red;">鎵归噺鍒犻櫎</el-button></li>
       </ul>
       <el-table v-loading="isWorking.search" :data="tableData.list" stripe border :header-cell-style="rowStyle"
         :cell-style="rowStyle" @selection-change="handleSelectionChange">
@@ -72,7 +76,7 @@
         <el-table-column prop="zdPrice" label="鎸囧浠凤紙鍏冿級" min-width="100px"></el-table-column>
         <el-table-column prop="price" label="閲囪喘浠�(鍏�)" min-width="100px"></el-table-column>
         <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
-        <el-table-column prop="status" label="鐘舵��" min-width="100px">
+        <el-table-column prop="status" v-if="containPermissions(['business:basegoods:update'])" label="鐘舵��" min-width="100px">
           <template slot-scope="{row}">
             <el-switch v-model="row.status" @change="changeStatus(row)" active-color="#13ce66" inactive-color="#ff4949"
               :active-value="0" :inactive-value="1">
@@ -106,7 +110,7 @@
 import OperaGoodsWindow from '@/components/business/OperaGoodsWindow'
 import selectProduct from '@/components/business/selectProduct'
 import ImportButton from '@/components/common/ImportButton'
-import { brand, baseCategory, importExcel } from '@/api/system/common.js'
+import { brand, baseCategory } from '@/api/system/common.js'
 import { updateStatus, queryById, exportDoc } from '@/api/business/goods.js'
 export default {
   name: 'Goods',
@@ -150,24 +154,25 @@
     this.getcategory()
   },
   methods: {
-    handleSelectionChange(e) {
-      let arr = e.map(item => item.id)
-      this.ids = arr.join(',')
-      this.idList = arr;
-    },
+    // handleSelectionChange(e) {
+    //   let arr = e.map(item => item.id)
+    //   this.ids = arr.join(',')
+    //   this.idList = arr;
+    // },
     // 鎵归噺涓婁笅鏋�
     bulkOperation(type) {
-      if (!this.ids) {
-        this.$message.warning({ message: '鑷冲皯閫夋嫨涓�椤瑰唴瀹�' })
+      if (this.tableData.selectedRows.length === 0) {
+        this.$tip.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�')
         return
       }
+      let idList = this.tableData.selectedRows.map(item => item.id)
       updateStatus({
-        idList: this.idList,
+        idList,
         status: type
       }).then(res => {
         this.$tip.apiSuccess('鎿嶄綔鎴愬姛');
         // this.$message.success({ message:res.message })
-        this.search()
+        this.handlePageChange()
       })
     },
     downloadFile() {
@@ -194,8 +199,12 @@
         status: item.status
       }).then(res => {
         this.$tip.apiSuccess('鏇存柊鎴愬姛')
-      }).finally(() => {
-        // this.search()
+      })
+        .catch (err => {
+          this.$message.error(err)
+        } )
+      .finally(() => {
+        this.handlePageChange()
       })
     },
     getbrand() {
diff --git a/platform/src/views/system/user.vue b/platform/src/views/system/user.vue
index 7a2711d..532e469 100644
--- a/platform/src/views/system/user.vue
+++ b/platform/src/views/system/user.vue
@@ -33,15 +33,16 @@
         :data="tableData.list"
         :default-sort = "{prop: 'createTime', order: 'descending'}"
         stripe
+        border
         @selection-change="handleSelectionChange"
         @sort-change="handleSortChange"
       >
         <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column prop="avatar" label="澶村儚" width="80px" class-name="table-column-avatar" fixed="left">
+        <!-- <el-table-column prop="avatar" label="澶村儚" width="80px" class-name="table-column-avatar" fixed="left">
           <template slot-scope="{row}">
             <img :src="row.avatar == null ? '/static/avatar/man.png' : row.avatar">
           </template>
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column prop="realname" label="濮撳悕" min-width="100px" fixed="left"></el-table-column>
         <el-table-column prop="username" label="鐢ㄦ埛鍚�" min-width="120px"></el-table-column>
         <el-table-column prop="empNo" label="宸ュ彿" sortable="custom" sort-by="EMP_NO" min-width="80px"></el-table-column>

--
Gitblit v1.9.3