yujinwen 3 月之前
父节点
当前提交
ceefd85e98

+ 6 - 0
src/api/customer/index.js

@@ -0,0 +1,6 @@
+import apiCustomerUser from './user'
+
+export {
+  apiCustomerUser
+}
+

+ 24 - 0
src/api/customer/user.js

@@ -0,0 +1,24 @@
+import {get,post} from '@/api/index'
+
+export default{
+	// 用户列表
+  userList:params=>{
+    return get('/eta_business/user/list',params)
+  },
+  // 新增用户
+  addUser:params=>{
+    return post('/eta_business/user/add',params)
+  },
+  // 编辑用户
+  editUser:params=>{
+    return post('/eta_business/user/edit ',params)
+  },
+  // 删除用户
+  deleteUser:params=>{
+    return post('/eta_business/user/delete ',params)
+  },
+  // 启用\禁用用户
+  enableChange:params=>{
+    return post('/eta_business/user/editEnabled',params)
+  }
+}

+ 4 - 0
src/api/system/common.js

@@ -8,5 +8,9 @@ export default{
 	// 系统菜单
 	menuList:()=>{
 		return get('/system/menu/list',{})
+	},
+	// 手机号区号
+	mobileAreaCode:()=>{
+		return get('/eta_business/area_code/list',{})
 	}
 }

+ 81 - 26
src/views/customer/user/Index.vue

@@ -1,25 +1,27 @@
 <script setup>
 import { SearchIcon } from 'tdesign-icons-vue-next';
 import EditUser from './components/EditUser.vue'
+import MoveUser from './components/MoveUser.vue'
+import {apiCustomerUser} from '@/api/customer'
 
 const jobOpts = [
   {
     label: '在职',
-    value: '在职'
+    value: 1
   },
   {
     label: '离职',
-    value: '离职'
+    value: 0
   }
 ]
 const accountStatusOpts = [
   {
     label: '启用',
-    value: '启用'
+    value: 1
   },
   {
     label: '禁用',
-    value: '禁用'
+    value: 0
   }
 ]
 
@@ -31,29 +33,59 @@ const filterState = reactive({
 })
 const tableData = ref([])
 const columns = [
-  { align: 'center', colKey: '', title: '姓名' },
-  { align: 'center', colKey: '', title: '手机号' },
-  { align: 'center', colKey: '', title: '岗位-部门' },
-  { align: 'center', colKey: '', title: '最近登录时间', sorter: true, },
-  { align: 'center', colKey: '', title: '在职状态' },
-  { align: 'center', colKey: '', title: '账号状态' },
-  { align: 'center', colKey: '', title: '客户名称' },
+  { align: 'center', colKey: 'RealName', title: '姓名' },
+  { align: 'center', colKey: 'Mobile', title: '手机号',width:'150px' },
+  { align: 'center', colKey: 'DepartmentName', title: '岗位-部门',width:'150px' },
+  { align: 'center', colKey: 'LastLoginTime', title: '最近登录时间',width:'180px', sorter: true, },
+  { align: 'center', colKey: 'PositionStatus', title: '在职状态',width:'100px' },
+  { align: 'center', colKey: 'Enabled', title: '账号状态',width:'100px' },
+  { align: 'center', colKey: 'BusinessName', title: '客户名称' },
   {
     align: 'center',
     colKey: 'opt',
     title: '操作',
   },
 ]
-const tablePagination = {
-  defaultCurrent: 1,
-  defaultPageSize: 20,
+const tablePagination = ref({
+  current: 1,
+  pageSize: 20,
   total: 0,
   showPageSize:false
+})
+async function getUserList(){
+  const res=await apiCustomerUser.userList({
+    PageSize:tablePagination.pageSize,
+    CurrentIndex:tablePagination.current,
+    PositionStatus:filterState.jobStatus===''?-1:filterState.jobStatus,
+    Enabled:filterState.accountStatus===''?-1:filterState.accountStatus,
+    Keyword:filterState.keyword
+  })
+  if(res.Ret!==200) return
+  const arr=res.Data.List||[]
+  tableData.value=arr
+  tablePagination.value.total=res.Data.Paging.Totals
+}
+getUserList()
+
+function handleRefreshList(){
+  tablePagination.value.current=1
+  tableData.value=[]
+  getUserList()
 }
 
+const editUserData=ref(null)
 
 const showEditUser=ref(false)
+function handleEditUser(data){
+  editUserData.value=data
+  showEditUser.value=true
+}
 
+const showMoveUser=ref(false)
+function handleMoveUser(data){
+  editUserData.value=data
+  showMoveUser.value=true
+}
 
 
 </script>
@@ -61,12 +93,15 @@ const showEditUser=ref(false)
 <template>
   <div class="customer-userlist-page">
     <div class="bg-white flex top-wrap">
-      <t-button style="width: 120px" @click="showEditUser=true">新增用户</t-button>
+      <t-button style="width: 120px" @click="showEditUser=true;editUserData=null">新增用户</t-button>
       <t-button style="width: 120px; margin-left: 10px">批量导入用户</t-button>
       <t-button style="width: 120px; margin-left: 10px" theme="primary" variant="text">下载导入模板</t-button>
       <t-input
         style="width: 310px; margin-left: auto"
         placeholder="姓名/手机号"
+        v-model="filterState.keyword"
+        clearable
+        @change="handleRefreshList"
       >
         <template #prefixIcon><SearchIcon /></template>
       </t-input>
@@ -78,11 +113,12 @@ const showEditUser=ref(false)
           v-model:value="filterState.jobStatus"
           clearable
           style="width: 240px"
+          @change="handleRefreshList"
         >
           <t-option
             v-for="item in jobOpts"
             :key="item.value"
-            :label="item.value"
+            :label="item.label"
             :value="item.value"
           />
         </t-select>
@@ -91,11 +127,12 @@ const showEditUser=ref(false)
           v-model:value="filterState.accountStatus"
           clearable
           style="width: 240px"
+          @change="handleRefreshList"
         >
           <t-option
             v-for="item in accountStatusOpts"
             :key="item.value"
-            :label="item.value"
+            :label="item.label"
             :value="item.value"
           />
         </t-select>
@@ -122,20 +159,38 @@ const showEditUser=ref(false)
         show-header
         resizable
       >
-        <template #cellEmptyContent="{ col }">
-          <div v-if="col.colKey === 'opt'">
-            <t-button size="small" variant="text" theme="primary">编辑</t-button>
-            <t-button size="small" variant="text" theme="primary">启用</t-button>
-            <t-button size="small" variant="text" theme="danger">禁用</t-button>
-            <t-button size="small" variant="text" theme="primary">移动</t-button>
-            <t-button size="small" variant="text" theme="danger">删除</t-button>
-          </div>
+        <template #Mobile="{ row }">
+          <span>{{row.CountryCode}}-{{row.Mobile}}</span>
+        </template>
+        <template #DepartmentName="{ row }">
+          <span>{{row.Position}}-{{row.DepartmentName}}</span>
+        </template>
+        <template #PositionStatus="{ row }">
+          <t-tag 
+            :theme="row.PositionStatus?'success':'danger'"
+            variant="light"
+          >{{row.PositionStatus?'在职':'离职'}}</t-tag>
+        </template>
+        <template #Enabled="{ row }">
+          <t-tag 
+            :theme="row.Enabled?'success':'danger'"
+            variant="light"
+          >{{row.PositionStatus?'已启用':'已禁用'}}</t-tag>
+        </template>
+        <template #opt="{ row }">
+          <t-button size="small" variant="text" theme="primary" @click="handleEditUser(row)">编辑</t-button>
+          <t-button size="small" variant="text" theme="danger" v-if="row.Enabled">禁用</t-button>
+          <t-button size="small" variant="text" theme="primary" v-else>启用</t-button>
+          <t-button size="small" variant="text" theme="primary" @click="handleMoveUser(row)">移动</t-button>
+          <t-button size="small" variant="text" theme="danger">删除</t-button>
         </template>
       </t-table>
     </div>
   </div>
   <!-- 新增\编辑用户 -->
-  <EditUser v-model:show="showEditUser"/>
+  <EditUser v-model:show="showEditUser" :data="editUserData"/>
+  <!-- 移动用户 -->
+  <MoveUser v-model:show="showMoveUser" :data="editUserData"/>
 </template>
 
 <style lang="scss" scoped>

+ 26 - 10
src/views/customer/user/components/EditUser.vue

@@ -1,5 +1,6 @@
 <script setup>
 import { useTemplateRef, watch } from "vue";
+import {apiSystemCommon} from '@/api/system'
 
 
 const show = defineModel('show', { type: Boolean, default: false })
@@ -10,16 +11,22 @@ const props=defineProps({
   }
 })
 
-const telCodeOpts=['86']
+const telCodeOpts=ref([])
+async function getMobileAreaCode(){
+  const res=await apiSystemCommon.mobileAreaCode()
+  if(res.Ret!=200) return
+  telCodeOpts.value=res.Data||[]
+  formData.telCode=telCodeOpts.value[0]?.Value
+}
 
 const jobStatusOpts=[
   {
     label:'在职',
-    value:'在职'
+    value:1
   },
   {
     label:'离职',
-    value:'离职'
+    value:0
   }
 ]
 
@@ -32,7 +39,7 @@ const FORM_RULES = {
 const formIns=useTemplateRef('formIns')
 const formData=reactive({
   name:'',
-  telCode:'86',
+  telCode:'',
   tel:'',
   customer:'',
   post:'',
@@ -54,8 +61,17 @@ watch(
       formIns.value.reset()
       return
     }
-    if(n&&props.data){
-
+    if(n){
+      getMobileAreaCode()
+      if(props.data){
+        formData.name=props.data.RealName
+        formData.telCode=props.data.CountryCode
+        formData.tel=props.data.Mobile
+        formData.customer=props.data.BusinessCode
+        formData.post=props.data.Position
+        formData.depart=props.data.DepartmentName
+        formData.jobStatus=props.data.PositionStatus
+      }
     }
   }
 )
@@ -85,12 +101,12 @@ watch(
         <t-input v-model="formData.name" placeholder="请输入姓名"></t-input>
       </t-form-item>
       <t-form-item label="手机号" name="tel">
-        <t-select v-model:value="formData.telCode" style="width:80px">
+        <t-select v-model:value="formData.telCode" style="width:80px;margin-right:10px">
           <t-option
             v-for="item in telCodeOpts"
-            :key="item"
-            :label="item"
-            :value="item"
+            :key="item.Value"
+            :label="item.Name"
+            :value="item.Value"
           />
         </t-select>
         <t-input v-model="formData.tel" placeholder="请输入手机号"></t-input>

+ 1 - 1
vite.config.js

@@ -92,7 +92,7 @@ export default defineConfig(({ mode }) => {
       port:8900,
       proxy:{
         '/v1': {
-          target: 'http://8.136.199.33:8900/v1',
+          target: 'http://192.168.20.10:8912/v1',
           changeOrigin: true,
           rewrite: (path) => path.replace(/^\/v1/, ''),
         }