Browse Source

Merge branch 'ch/jinrui1.0' of eta_mini/eta_mini_crm_front into debug_jr

leichen 2 weeks ago
parent
commit
f92b2f5086

+ 0 - 12
src/api/customer/modules/statistic.js

@@ -1,21 +1,9 @@
 import { get, post } from "@/api/index";
 
 export default {
-  //用户阅读统计列表数据
-  readRecordList: params => {
-    return get("/read/list", params);
-  },
   // 用户阅读统计详情数据
   readRecordInfo: params => {
     return get("/report/read_record", params);
   },
-  // 用户阅读量统计图数据
-  readTimesChartData:params=>{
-    return get('/read/readCntChart',params)
-  },
-  // 用户阅读品种分布图数据
-  readPermissionChartData:params=>{
-    return get('/read/readPermissionChart',params)
-  },
   
 };

+ 0 - 4
src/api/customer/modules/user.js

@@ -56,10 +56,6 @@ export default {
   sellerDepartmentList:params=>{
     return get('/seller/list',params)
   },
-  // 导出营业部门列表
-  potentialExportExcel:params=>{
-    return get('/user/potential/export/excel',params)
-  },
   // 机构详情
   companyInfo: params => {
     return get("/company/detail", params);

+ 2 - 6
src/api/index.js

@@ -25,11 +25,7 @@ _axios.interceptors.request.use(
       config.headers.Authorization = auth;
     }
     // config.headers.Authorization=localStorage.getItem('token')||''
-    
-    // 检查请求路径并设置responseType
-    if (config.url.endsWith('/user/potential/export/excel')) {
-      config.responseType = 'blob'; // 如果是导出excel的请求,则设置responseType为blob
-    }
+
     return config;
   },
   function (error) {
@@ -44,7 +40,7 @@ _axios.interceptors.response.use(
     // Do something with response data
     let data
     // 如果是是导出excel的请求,则不进行解密操作
-    if(import.meta.env.MODE==='production' && !response.config.url.endsWith('/user/potential/export/excel')){
+    if(import.meta.env.MODE==='production'){
       data=JSON.parse(CryptoJS.Des3Decrypt(response.data,import.meta.env.VITE_APP_RESPONSE_DES_KEY));//解密
     }else{
       data=response.data

+ 1 - 3
src/api/system/index.js

@@ -2,13 +2,11 @@ import apiSystemCommon from './common'
 import apiSystemDepart from './depart'
 import apiSystemUser from './user'
 import apiSystemRole from './role'
-import apiSystemMessage from './message'
 
 export {
     apiSystemCommon,
     apiSystemDepart,
     apiSystemUser,
-    apiSystemRole,
-    apiSystemMessage
+    apiSystemRole
 }
 

+ 0 - 12
src/api/system/message.js

@@ -1,12 +0,0 @@
-import { get, post } from "@/api/index";
-
-export default {
-  //系统消息
-  list: () => {
-    return get("/sys_message/list", {});
-  },
-  // 消息已读
-  msgRead: (params) => {
-    return post("/sys_message/read", params);
-  },
-};

+ 59 - 41
src/components/AllUserForDepart.vue

@@ -1,61 +1,79 @@
 <script setup>
-import {apiSystemUser} from '@/api/system'
+import { apiSystemUser } from '@/api/system';
+import { ref } from 'vue';
 
 const model=defineModel()
-const props=defineProps({
-  props:{},
-  clearable:{
-    type:Boolean,
-    default:false
+// 定义组件的 props
+const props = defineProps({
+  props: Object,
+  clearable: {
+    type: Boolean,
+    default: false
   },
-  filterable:{
-    type:Boolean,
-    default:true
+  filterable: {
+    type: Boolean,
+    default: true
   },
-  placeholder:{
-    type:String,
-    default:'营业部/销售'
+  placeholder: {
+    type: String,
+    default: '营业部/销售'
   },
-  size:{
-    type:String,
-    default:'default'
+  size: {
+    type: String,
+    default: 'default'
   },
-  onlySelectUser:{//是否只能选择销售用户
-    type:Boolean,
-    default:false
+  onlySelectUser: {
+    type: Boolean,
+    default: false
   }
-})
-const emits=defineEmits(['change'])
+});
 
-const options=ref([])
-function formatData(arr){
+// 定义组件的 emits
+const emits = defineEmits(['change']);
+
+// 定义选项数据
+const options = ref([]);
+
+// 格式化数据函数
+function formatData(arr) {
   arr.forEach(item => {
-    item.label=item.SysUserId?item.SysRealName:item.SysDepartmentName
-    item.value=item.SysUserId?item.SysUserId:item.SysDepartmentId
-    if(props.onlySelectUser){//如果只能选择销售用户则将最后一级为部门的禁用
-      item.disabled=!item.SysUserId&&!item.ChildrenList?true:false
+    // 如果只能选择销售用户且当前项没有子项,则禁用部门节点
+    if (props.onlySelectUser && !item.Children.length) {
+      item.disabled = item.NodeType === 1;
     }
-    
-    if(item.Children){
-      formatData(item.Children)
+    if (item.Children) {
+      formatData(item.Children);
     }
   });
-  return arr
+  return arr;
 }
 
-async function getData(){
-  const res=await apiSystemUser.sellerUserTree()//true显示所有销售(包含被禁用的)false表示仅显示启用的用户,默认false
-  if(res.Ret!=200) return
-  const arr=res.Data||[]
-  options.value = arr
+// 获取数据函数
+async function fetchData() {
+  try {
+    const res = await apiSystemUser.sellerUserTree(); // true显示所有销售(包含被禁用的)false表示仅显示启用的用户,默认false
+    if (res.Ret === 200) {
+      const data = res.Data || [];
+      options.value = formatData(data);
+    } else {
+      // 处理错误情况,例如显示错误消息或进行其他操作
+      console.error('Failed to fetch data:', res);
+    }
+  } catch (error) {
+    // 处理异步调用中的错误
+    console.error('Error fetching data:', error);
+  }
 }
-getData()
 
-function handleChange(){
-  emits('change')
-}
+// 在组件加载时获取数据
+fetchData();
 
+// 处理选择变化
+function handleChange() {
+  emits('change');
+}
 </script>
+
 <template>
   <el-cascader
     :options="options"
@@ -71,8 +89,8 @@ function handleChange(){
     :max-collapse-tags="1"
     :size="props.size"
     :show-all-levels="false"
-    :clearable="clearable"
-    :filterable="filterable"
+    :clearable="props.clearable"
+    :filterable="props.filterable"
     @change="handleChange"
   />
 </template>

+ 31 - 18
src/components/ProvinceCitySelect.vue

@@ -92,19 +92,32 @@ watch(
     },
     {immediate:true})
 
-function handleSelectChange(type){
-    if(type==='province'){
-        city.value = {cityKey:'',cityName:''}
-        area.value = {areaKey:'',areaName:''}
+function handleSelectChange(type) {
+    if (type === 'province') {
+        city.value = { cityKey: '', cityName: '' };
+        area.value = { areaKey: '', areaName: '' };
+    } else if (type === 'city' && props.showArea) {
+        area.value = { areaKey: '', areaName: '' };
     }
-    if(type==='city'&&props.showArea){
-        area.value = {areaKey:'',areaName:''}
+
+    // 根据选择的键更新对应的名称(如果需要)
+    if (type === 'province') {
+        const selectedProvince = provinceSource.value.find(p => p.provinceKey === province.value.provinceKey);
+        if (selectedProvince) {
+            province.value = selectedProvince;
+        }
+    } else if (type === 'city') {
+        const selectedCity = citySource.value.find(c => c.cityKey === city.value.cityKey);
+        if (selectedCity) {
+            city.value = selectedCity;
+        }
     }
-    emit('selected',{
-        province:{value:province.value.provinceName,provinceKey:province.value.provinceKey},
-        city:{value:city.value.cityName, cityKey:city.value.cityKey},
-        area:{value:area.value.areaName,}
-    })
+
+    emit('selected', {
+        province: { value: province.value.provinceName, provinceKey: province.value.provinceKey },
+        city: { value: city.value.cityName, cityKey: city.value.cityKey },
+        area: { value: area.value.areaName, areaKey: area.value.areaKey }
+    });
 }
 
 </script>
@@ -115,7 +128,7 @@ function handleSelectChange(type){
         <el-select
             placeholder="请选择省"
             filterable
-            v-model="province"
+            v-model="province.provinceKey"
             value-key="provinceKey"
             :disabled="props.disabled"
             @change="handleSelectChange('province')"
@@ -124,14 +137,14 @@ function handleSelectChange(type){
                 v-for="province in provinceSource"
                 :key="province.provinceKey"
                 :label="province.provinceName"
-                :value="province"
+                :value="province.provinceKey"
             />
         </el-select>
         <!-- 市选择器 -->
         <el-select
             placeholder="请选择市"
             filterable
-            v-model="city"
+            v-model="city.cityKey"
             value-key="cityKey"
             :disabled="props.disabled"
             @change="handleSelectChange('city')"
@@ -140,14 +153,14 @@ function handleSelectChange(type){
                 v-for="city in citySource"
                 :key="city.cityKey"
                 :label="city.cityName"
-                :value="city"
+                :value="city.cityKey"
             />
         </el-select>
         <!-- 区选择器 -->
-        <el-select v-if="showArea"
+        <el-select v-if="props.showArea"
             placeholder="请选择区"
             filterable
-            v-model="area"
+            v-model="area.areaKey"
             value-key="areaKey"
             :disabled="props.disabled"
             @change="handleSelectChange"
@@ -156,7 +169,7 @@ function handleSelectChange(type){
                 v-for="area in areaSource"
                 :key="area.areaKey"
                 :label="area.areaName"
-                :value="area"
+                :value="area.areaKey"
             />
         </el-select>
     </div>

+ 0 - 8
src/router/modules/customer.js

@@ -93,14 +93,6 @@ export default[
           fromPath:'/customer/customer_list'
         },
       },
-      {
-        path:'userReportStatistic',
-        component:()=>import('@/views/customer/reportStatistic/Index.vue'),
-        name:"CustomerUserReportStatistic",
-        meta:{
-          title:'阅读统计'
-        },
-      },
       {
         path:'userTransform',
         component:()=>import('@/views/customer/UserEdit.vue'),

+ 0 - 95
src/views/customer/reportStatistic/Chart.vue

@@ -1,95 +0,0 @@
-<script setup>
-import { Switch } from '@element-plus/icons-vue'
-import { apiCustomerUser } from '@/api/customer'
-import LineChart from './components/LineChart.vue'
-import PieChart from './components/PieChart.vue'
-
-
-const emits = defineEmits(['change'])
-
-const filterState = reactive({
-  type: '',
-  keyword: ''
-})
-
-const userId = ref('')
-const options = ref([])
-const searchLoading = ref(false)
-async function handleSearch(query) {
-  if (query) {
-    searchLoading.value = true
-    const res = await apiCustomerUser.userList({
-      PageSize: 100,
-      CurrentIndex: 1,
-      KeyWord: query
-    })
-    searchLoading.value = false
-    if (res.Ret === 200) {
-      const arr = res.Data.List || []
-      options.value = arr
-    } else {
-      options.value = []
-    }
-  }
-}
-
-
-
-</script>
-
-<template>
-  <div class="user-report-statistic-chart-page">
-    <div class="flex filter-wrap">
-      <el-button
-        type="primary"
-        :icon="Switch"
-        link
-        @click="emits('change', 'chart')"
-        >数据表</el-button
-      >
-      <el-select
-        v-model="userId"
-        filterable
-        remote
-        placeholder="姓名/手机号/邮箱"
-        :remote-method="handleSearch"
-        :loading="searchLoading"
-        style="max-width: 359px; margin-left: auto"
-        clearable
-      >
-        <template #prefix>
-          <el-icon><i-ep-Search /></el-icon>
-        </template>
-
-        <el-option
-          v-for="item in options"
-          :key="item.UserId"
-          :label="item.RealName"
-          :value="item.UserId"
-        />
-      </el-select>
-    </div>
-    <div class="content-wrap">
-      <div class="bg-white item-wrap">
-        <LineChart :userId="userId"/>
-      </div>
-      <div class="bg-white item-wrap">
-        <PieChart :userId="userId"/>
-      </div>
-    </div>
-  </div>
-</template>
-
-<style lang="scss" scoped>
-.filter-wrap {
-  gap: 10px;
-}
-.content-wrap {
-  display: flex;
-  gap: 0 30px;
-  .item-wrap {
-    margin-top: 20px;
-    flex: 1;
-  }
-}
-</style>

+ 0 - 15
src/views/customer/reportStatistic/Index.vue

@@ -1,15 +0,0 @@
-<script setup>
-import List from './List.vue'
-import Chart from './Chart.vue'
-
-const activeComp=shallowRef(List)
-
-function changeComp(type){
-  activeComp.value=type==='list'?Chart:List
-}
-
-</script>
-
-<template>
-  <component :is="activeComp" @change="changeComp"></component>
-</template>

+ 0 - 258
src/views/customer/reportStatistic/List.vue

@@ -1,258 +0,0 @@
-<script setup>
-import { Search,Switch } from '@element-plus/icons-vue'
-import { apiCustomerStatistic } from '@/api/customer'
-import UserStatisticDetail from './components/UserStatisticDetail.vue'
-import { useRouter } from 'vue-router'
-import { apiCustomerUser } from '@/api/customer'
-
-const router=useRouter()
-
-const emits=defineEmits(['change'])
-
-const filterState=reactive({
-  keyword: '',
-  SellerDepartmentId: '',
-  status: '',
-  register: '',
-  subscribe: '',
-  regsiterTime: [],
-  createTime: []
-})
-
-const tableColOpt = [
-  {
-    label: '姓名',
-    key: 'RealName'
-  },
-  {
-    label: '手机号',
-    key: 'Phone'
-  },
-  {
-    label: '邮箱',
-    key: 'Email'
-  },
-  {
-    label: '营业部',
-    key: 'SellerDepartmentName'
-  },
-  {
-    label: '用户状态',
-    key: 'Status'
-  },
-  {
-    label: '最近一次阅读时间',
-    key: 'LastUpdateTime',
-    sort: true
-  },
-  {
-    label: '累计阅读次数',
-    key: 'ReadCnt',
-    sort: true
-  }
-]
-const userList = ref([])
-const departmentList = ref([]) // 营业部列表
-const page = ref(1)
-const pageSize = ref(10)
-const tableLoading = ref(false)
-const totals = ref(0)
-async function getUserList() {
-  tableLoading.value = true
-  const res = await apiCustomerStatistic.readRecordList({
-    PageSize: pageSize.value,
-    CurrentIndex: page.value,
-    KeyWord: filterState.keyword,
-    SellerDepartmentId: filterState.SellerDepartmentId,
-    Status: filterState.status,
-    IsRegistered: filterState.register,
-    IsSubscribed: filterState.subscribe,
-    RegisterStartDate: filterState.regsiterTime ? filterState.regsiterTime[0] : '',
-    RegisterEndDate: filterState.regsiterTime ? filterState.regsiterTime[1] : '',
-    CreateStartDate: filterState.createTime ? filterState.createTime[0] : '',
-    CreateEndDate: filterState.createTime ? filterState.createTime[1] : '',
-    SortParam:filterState.sortType,
-    SortType:filterState.sortVal
-  })
-  tableLoading.value = false
-  if (res.Ret === 200) {
-    userList.value = res.Data.List || []
-    totals.value = res.Data.Paging.Totals
-  }
-}
-getUserList()
-getSellerDepartment()
-function handlePageChange(e) {
-  page.value = e
-  getUserList()
-}
-async function getSellerDepartment() {
-  tableLoading.value = true
-  const res = await apiCustomerUser.sellerDepartmentList()
-  tableLoading.value = false
-  if (res.Ret === 200) {
-    departmentList.value = res.Data || []
-  }
-}
-
-function handleTableSort(e) {
-  // console.log(e);
-  const { order, prop } = e//order:"descending",prop: "RegisterTime"
-  filterState.sortType=prop
-  if(!order){
-    filterState.sortVal=''
-  }else{
-    filterState.sortVal=order==='descending'?'desc':'asc'
-  }
-  handleFilterList()
-}
-function handleFilterList() {
-  page.value = 1
-  getUserList()
-}
-
-
-const showDetail=ref(false)
-const activeUserId=ref(0)
-const activeUserName=ref('')
-function handleShowDetail(e){
-  activeUserId.value=e.UserId
-  activeUserName.value=e.RealName
-  showDetail.value=true
-}
-
-// 跳转详情
-function handleGoDetail(e){
-  const link=router.resolve({
-    path:'/customer/userDetail',
-    query:{
-      id:e.UserId
-    }
-  }).href
-  window.open(link,'__blank')
-}
-
-</script>
-
-<template>
-  <div class="user-report-statistic-page">
-    <div class="flex filter-wrap">
-      <el-button type="primary" :icon="Switch" link @click="emits('change','list')">统计图</el-button>
-      <el-select
-        placeholder="请选择营业部"
-        v-model="filterState.SellerDepartmentId"
-        style="width: 165px"
-        clearable
-        @change="handleFilterList"
-      >
-        <el-option v-for="(item, index) in departmentList" :key="index" :label="item.SysDepartmentName" :value="item.SysDepartmentId"></el-option>
-      </el-select>
-      <el-select
-        placeholder="用户状态"
-        v-model="filterState.status"
-        style="width: 165px"
-        @change="handleFilterList"
-      >
-        <el-option label="启用" :value="1"></el-option>
-        <el-option label="禁用" :value="0"></el-option>
-      </el-select>
-      <el-select
-        placeholder="注册状态"
-        v-model="filterState.register"
-        style="width: 165px"
-        @change="handleFilterList"
-      >
-        <el-option label="是" value="是"></el-option>
-        <el-option label="否" value="否"></el-option>
-      </el-select>
-      <el-select
-        placeholder="是否关注公众号"
-        v-model="filterState.register"
-        style="width: 165px"
-        @change="handleFilterList"
-      >
-        <el-option label="是" value="是"></el-option>
-        <el-option label="否" value="否"></el-option>
-      </el-select>
-      <span style="width: 235px">
-        <el-date-picker
-          style="width: 235px"
-          v-model="filterState.regsiterTime"
-          type="daterange"
-          range-separator="至"
-          start-placeholder="注册时间"
-          end-placeholder="注册时间"
-          value-format="YYYY-MM-DD"
-          @change="handleFilterList"
-        />
-      </span>
-      <span style="width: 235px">
-        <el-date-picker
-          style="width: 235px"
-          v-model="filterState.createTime"
-          type="daterange"
-          range-separator="至"
-          start-placeholder="创建时间"
-          end-placeholder="创建时间"
-          value-format="YYYY-MM-DD"
-          @change="handleFilterList"
-        />
-      </span>
-      <el-input
-        placeholder="姓名/手机号/邮箱"
-        v-model="filterState.keyword"
-        :prefix-icon="Search"
-        clearable
-        style="max-width: 359px;margin-left:auto"
-        @input="handleFilterList"
-      />
-    </div>
-    <div class="userlist-wrap" style="margin-top: 20px">
-      <el-table
-        :data="userList"
-        border
-        stripe
-        highlight-current-row
-        element-loading-text="数据加载中..."
-        v-loading="tableLoading"
-        @sort-change="handleTableSort"
-        @row-click="handleGoDetail"
-      >
-        <el-table-column
-          v-for="column in tableColOpt"
-          :key="column.key"
-          :prop="column.key"
-          :label="column.label"
-          :sortable="column.sort ? 'custom' : false"
-        >
-          <template #default="{ row }">
-            <span
-              v-if="column.key === 'Status'"
-              :style="{ color: !row.Status ? '#f00' : '' }"
-              >{{ row.Status ? "启用" : "禁用" }}</span
-            >
-            <el-button v-else-if="column.key === 'ReadCnt'&&row.ReadCnt>0" link type="primary" @click.stop="handleShowDetail(row)">{{row.ReadCnt}}</el-button>
-            <span v-else>{{ row[column.key] }}</span>
-          </template>
-        </el-table-column>
-      </el-table>
-      <el-pagination
-        background
-        layout="total,prev,pager,next"
-        :current-page="page"
-        :page-size="pageSize"
-        :total="totals"
-        @current-change="handlePageChange"
-        style="margin-top: 30px;justify-content: flex-end;"
-      />
-    </div>
-  </div>
-  <UserStatisticDetail v-model:show="showDetail" :userId="activeUserId" :userName="activeUserName"/>
-</template>
-
-<style lang="scss" scoped>
-.filter-wrap{
-  gap: 10px;
-  flex-wrap: wrap;
-}
-</style>

+ 0 - 103
src/views/customer/reportStatistic/components/LineChart.vue

@@ -1,103 +0,0 @@
-<script setup>
-import { dayjs } from "element-plus"
-import { apiCustomerStatistic } from '@/api/customer'
-import { lineChartRender } from '../utils/chartRender'
-
-const props = defineProps({
-  userId: ''
-})
-
-const permission = ref('')
-const classify = ref('')
-const time = ref([dayjs().subtract(1, 'year').format('YYYY-MM-DD'), dayjs().format('YYYY-MM-DD')])
-
-
-function getChartData() {
-  apiCustomerStatistic.readTimesChartData({
-    UserId: props.userId || 0,
-    ChartPermissionIds: permission.value ? permission.value.join(',') : '',
-    ClassifyIds: classify.value ? classify.value.join(',') : '',
-    StartDate: time.value ? time.value[0] : '',
-    EndDate: time.value ? time.value[1] : '',
-  }).then(res => {
-    if (res.Ret === 200) {
-      const arr = res.Data || []
-      let data = {
-        time: [],
-        value: []
-      }
-      arr.forEach(item => {
-        data.time.push(item.CreateDate)
-        data.value.push(item.Count)
-      })
-      lineChartRender(data)
-    }
-  })
-}
-getChartData()
-
-watch(
-  () => props.userId,
-  (n) => {
-    getChartData()
-  }
-)
-
-
-
-</script>
-
-<template>
-  <div class="read-times-wrap">
-    <div class="flex filter-wrap">
-      <select-permission
-        v-model="permission"
-        :props="{
-          emitPath: false,
-          multiple: true,
-        }"
-        clearable
-        @change="getChartData"
-      />
-      <select-report-classify
-        v-model="classify"
-        :props="{
-          emitPath: false,
-          multiple: true,
-        }"
-        clearable
-        @change="getChartData"
-      />
-      <span style="width: 235px">
-        <el-date-picker
-          style="width: 235px"
-          v-model="time"
-          type="daterange"
-          range-separator="至"
-          start-placeholder="开始时间"
-          end-placeholder="结束时间"
-          value-format="YYYY-MM-DD"
-          @change="getChartData"
-        />
-      </span>
-    </div>
-    <h3 style="text-align: center">用户阅读量统计图</h3>
-    <div class="chart-box" id="chartBox1"></div>
-  </div>
-</template>
-
-<style lang="scss" scoped>
-.filter-wrap {
-  gap: 10px;
-}
-.read-times-wrap {
-  height: calc(100vh - 200px);
-  padding-top: 30px;
-  padding-left: 30px;
-  padding-right: 30px;
-  .chart-box {
-    margin-top: 80px;
-    height: 400px;
-  }
-}
-</style>

+ 0 - 55
src/views/customer/reportStatistic/components/PieChart.vue

@@ -1,55 +0,0 @@
-<script setup>
-import { apiCustomerStatistic } from '@/api/customer'
-import { pieChartRender } from '../utils/chartRender'
-
-const props = defineProps({
-  userId: ''
-})
-
-function getChartData() {
-  apiCustomerStatistic.readPermissionChartData({
-    UserId: props.userId || 0,
-  }).then(res => {
-    if (res.Ret === 200) {
-      const arr = res.Data || []
-      let data = arr.map(item => {
-        return {
-          ...item,
-          name: item.PermissionName,
-          y: item.Count,
-        }
-      })
-      pieChartRender(data)
-    }
-  })
-}
-getChartData()
-
-watch(
-  () => props.userId,
-  (n) => {
-    getChartData()
-  }
-)
-
-</script>
-
-<template>
-  <div class="read-permission-wrap">
-    <h3 style="text-align: center">用户阅读品种分布图</h3>
-    <div class="chart-box" id="chartBox2"></div>
-  </div>
-</template>
-
-<style lang="scss" scoped>
-.read-permission-wrap {
-  height: calc(100vh - 200px);
-  padding-top: 30px;
-  padding-left: 30px;
-  padding-right: 30px;
-  .chart-box {
-    margin-top: 80px;
-    height: 400px;
-  }
-}
-</style>

+ 0 - 140
src/views/customer/reportStatistic/utils/chartRender.js

@@ -1,140 +0,0 @@
-import Highcharts from "highcharts/highstock";
-
-const chartBaseConfig = {
-  title: {
-    text: "",
-  },
-  accessibility: {
-    enabled: false,
-  },
-  chart: {
-    style: {
-      fontSize: 16,
-    },
-  },
-  credits: {
-    enabled: false,
-  },
-  legend: {
-    align: "center",
-    verticalAlign: "top",
-  },
-};
-
-export function lineChartRender(data) {
-  let options = {
-    // colors: ["#436DFF", "#25DEDB"],
-    plotOptions: {
-      series: {
-        marker: {
-          fillColor: "#FFFFFF",
-          lineWidth: 2,
-          lineColor: null,
-        },
-      },
-    },
-    xAxis: {
-      categories: data.time,
-      labels: {
-        style: {
-          color: "#999",
-        },
-      },
-      tickWidth: 1,
-      tickLength: 5,
-      lineColor:'#bfbfbf',
-      tickColor:'#bfbfbf',
-    },
-    yAxis: [
-      {
-        gridLineWidth: 0,
-        lineWidth: 1,
-        lineColor:'#bfbfbf',
-        tickColor:'#bfbfbf',
-        tickWidth: 1,
-        tickLength: 5,
-        labels: {
-          style: {
-            color: "#999",
-          },
-        },
-        title: {
-          text: "次",
-          align: "high",
-          style: {
-            color: "#999",
-          },
-          y: -10,
-          offset: 0,
-          rotation: 0,
-        },
-      },
-    ],
-    tooltip: {
-      format: '<span style="font-size: 0.8em">{key}</span><br/>'+
-      '<span style="color:{color}">\u25CF</span> ' +
-      '{series.name}: <b>{y}</b><br/>',
-    },
-    series: [
-      {
-        data: data.value,
-        type: "line",
-        name: "阅读量",
-        yAxis: 0,
-      },
-    ],
-    ...chartBaseConfig,
-  };
-  Highcharts.chart("chartBox1", options);
-}
-
-export function pieChartRender(data) {
-  let options = {
-    ...chartBaseConfig,
-    // colors: ["#59F7CA", "#62F2F8", "#F2B949", "#FF8838", "#FDFDFD", "#4A7CE9"],
-    credits: {
-      enabled: false,
-    },
-    chart: {
-      ...chartBaseConfig.chart,
-    },
-    title: {
-      text: "",
-    },
-    legend: {
-      ...chartBaseConfig.legend,
-      align: "right",
-      verticalAlign: "top",
-      layout: "vertical",
-      x: 0,
-      y: 0,
-    },
-    tooltip: {
-      shared: false,
-      pointFormat: '<span>{point.y}次:{point.Percent}%<br/>'
-    },
-    plotOptions: {
-      pie: {
-        allowPointSelect: true,
-        cursor: "pointer",
-        dataLabels: {
-          enabled: true,
-          distance: -10,
-          format: "",
-        },
-        showInLegend: true,
-      },
-    },
-    series: [
-      {
-        type: "pie",
-        innerSize: "80%",
-        name: "",
-        colorByPoint: true,
-        borderRadius: 0,
-        data: data,
-      },
-    ],
-  };
-  Highcharts.chart("chartBox2", options);
-}

+ 3 - 1
src/views/system/userList/components/DepartWrap.vue

@@ -43,6 +43,8 @@ function allowDrag() {
 }
 function allowDrop(draggingNode, dropNode, type) {
   // 仅支持同部门下,同级节点相互排序
+  console.log(draggingNode, dropNode, type);
+  
   let canDrop = false
   if (draggingNode.level === dropNode.level && draggingNode.data.ParentId === dropNode.data.ParentId && type !== 'inner') {
     canDrop = true
@@ -256,7 +258,7 @@ function getFormTitle(e) {
           :data="departOpts"
           :props="departTreeKeys"
           :current-node-key="departActive"
-          :draggable="hasPermission('department:move')"
+          :draggable="hasPermission(permissionBtn.systemManageBtn.user_moveDept)"
           check-on-click-node
           :expand-on-click-node="false"
           node-key="SysDepartmentId"

+ 2 - 2
src/views/system/userList/components/EditUser.vue

@@ -181,10 +181,10 @@ async function handleSave() {
       ref="formRef"
       label-width="80px"
     >
-      <el-form-item label="登账号" prop="account">
+      <el-form-item label="登账号" prop="account">
         <el-input
           v-model="formState.account"
-          placeholder="请输入登账号"
+          placeholder="请输入登账号"
           clearable 
           :disabled="isEditAdmin"
         />