Browse Source

问题修改

chenlei 4 weeks ago
parent
commit
633b490a0e

+ 1 - 1
src/api/customer/modules/statistic.js

@@ -7,7 +7,7 @@ export default {
   },
   // 用户阅读统计详情数据
   readRecordInfo: params => {
-    return get("/read/detail", params);
+    return get("/report/read_record", params);
   },
   // 用户阅读量统计图数据
   readTimesChartData:params=>{

+ 15 - 7
src/api/customer/modules/user.js

@@ -7,34 +7,34 @@ export default {
   },
   // 用户详情
   userInfo: params => {
-    return get("/user/detail", params);
+    return get("/users/detail", params);
   },
   // 新增用户进行校验
   userAddCheck:params=>{
-    return post("/user/check", params);
+    return post("/users/add/check", params);
   },
   // 新增用户
   userAdd:params=>{
-    return post("/user/add", params);
+    return post("/users/add", params);
   },
   // 编辑用户
   userEdit:params=>{
-    return post("/user/edit", params);
+    return post("/users/edit", params);
   },
   userPermissionData:params=>{
     return get('/chart_permission/list',params)
   },
   // 用户操作记录
   userOperationRecord:params=>{
-    return get('/user/change_list',params)
+    return get('/users/operate_records',params)
   },
   // 启用\禁用用户
   setUserStatus:params=>{
-    return post('/user/editEnabled',params)
+    return post('/users/trans_auth',params)
   },
   //删除用户
   userDelete:params=>{
-    return post('/user/delete',params)
+    return post('/users/remove',params)
   },
   //潜在用户转客户
   potentialUserEdit:params=>{
@@ -72,4 +72,12 @@ export default {
   companyPageList:params=>{
     return get('/company/page_list',params)
   },
+  // 机构列表数据
+  companyTransAuth:params=>{
+    return post('/company/trans_auth',params)
+  },
+  // 机构列表数据
+  companyRemove:params=>{
+    return post('/company/remove',params)
+  },
 };

+ 3 - 3
src/components/ProvinceCitySelect.vue

@@ -101,9 +101,9 @@ function handleSelectChange(type){
         area.value = {areaKey:'',areaName:''}
     }
     emit('selected',{
-        province:{value:province.value.provinceName},
-        city:{value:city.value.cityName},
-        area:{value:area.value.areaName}
+        province:{value:province.value.provinceName,provinceKey:province.value.provinceKey},
+        city:{value:city.value.cityName, cityKey:city.value.cityKey},
+        area:{value:area.value.areaName,}
     })
 }
 

+ 3 - 3
src/router/modules/customer.js

@@ -66,7 +66,7 @@ export default[
       {
         path:'companyAdd',
         component:()=>import('@/views/customer/CompanyEdit.vue'),
-        name:"CustomerUserAdd",
+        name:"CustomerCompanyAdd",
         meta:{
           title:'新增机构投资者',
           from:'客户列表',
@@ -76,7 +76,7 @@ export default[
       {
         path:'companyEdit',
         component:()=>import('@/views/customer/CompanyEdit.vue'),
-        name:"CustomerUserEdit",
+        name:"CustomerCompanyEdit",
         meta:{
           title:'编辑机构投资者',
           from:'客户列表',
@@ -86,7 +86,7 @@ export default[
       {
         path:'companyDetail',
         component:()=>import('@/views/customer/CompanyEdit.vue'),
-        name:"CustomerUserDetail",
+        name:"CustomerCompanyDetail",
         meta:{
           title:'机构投资者详情',
           from:'客户列表',

+ 27 - 25
src/views/customer/CompanyEdit.vue

@@ -20,13 +20,13 @@ const formRules = {
   CompanyName: [{ required: true, message: '机构投资者名称不能为空', trigger: 'blur' }],
   CreditCode: [{ required: true, message: '社会信用码不能为空', trigger: 'blur' }],
   Industry: [{ required: true, message: '所属行业不能为空', trigger: 'blur' }],
-  SellerName: [{ required: true, message: '营业部不能为空', trigger: 'blur' }],
+  sellerId: [{ required: true, message: '营业部不能为空', trigger: 'blur' }],
 }
 const formState = reactive({
   CompanyName: '',
   CreditCode: '',
   Industry:'',
-  SellerName:'',
+  sellerId:'',
   province: '',
   city: '',
 })
@@ -44,7 +44,9 @@ function getUserInfo() {
       formState.CompanyName = Detail.CompanyName
       formState.CreditCode = Detail.CreditCode
       formState.Industry = Detail.Industry
-      formState.SellerName = Detail.SellerName
+      formState.sellerId = Detail.SellerId
+      formState.province = Detail.Province
+      formState.city = Detail.City
     }
   })
 }
@@ -62,7 +64,6 @@ async function getSellerDepartment() {
 
 function handleToEdit() {
   // 关闭提示
-  formState.isEnabled=true
   ElMessageBox.close()
   router.replace({
     path: '/customer/userEdit',
@@ -86,17 +87,19 @@ function checkAddContent(msg) {
 
 async function handleSave(type) {
   await formRef.value.validate()
-  const {CompanyName, CreditCode, Industry, SellerName} = formState
-
+  const {CompanyName, CreditCode, Industry, sellerId, province, city, ProvinceId, CityId} = formState
   let params = {
     CompanyName,
     CreditCode,
     Industry,
-    SellerName,
+    SellerId: sellerId,
+    Province: province,
+    City: city,
+    ProvinceId: parseInt(ProvinceId),
+    CityId: parseInt(CityId),
   }
   if (CompanyId.value) {
-    params.UserId = Number(CompanyId.value)
-    params.IsEnabled = formState.isEnabled
+    params.CompanyId = Number(CompanyId.value)
   }
   let res
   if(route.name==='CustomerUserTransform'){
@@ -106,13 +109,17 @@ async function handleSave(type) {
   }
   if (res.Ret !== 200) return
   ElMessage.success(CompanyId.value ? '编辑成功' : '新增成功')
-  router.replace('/customer/userList')
+  router.replace('/customer/customer_list')
 }
 
 
 function selectRegion(data) {
+  console.log(data);
+  
   formState.province = data.province.value;
+  formState.ProvinceId = data.province.provinceKey;
   formState.city = data.city.value == '市' ? '' : data.city.value;
+  formState.CityId = data.city.value == '市' ? '' : data.city.cityKey;
 }
 </script>
 
@@ -154,24 +161,19 @@ function selectRegion(data) {
                   @selected="selectRegion"
                 />
               </div>
-              <!-- <el-select
-                placeholder="请选择省份"
-                v-model="formState.SellerName"
-                clearable
-              >
-                <el-option v-for="(item, index) in province_sorce" :key="index" :label="item.SysDepartmentName" :value="item.SysDepartmentId"></el-option>
-              </el-select> -->
             </el-form-item>
           </div>
           <div class="flex form-tr-box">
-            <el-form-item label="营业部" prop="CompanyId">
-              <el-select
+            <el-form-item label="营业部" prop="sellerId">
+              <all-user-for-depart
+                style="width: 100%"
+                :props="{
+                  emitPath: false,
+                }"
+                onlySelectUser
+                v-model="formState.sellerId"
                 placeholder="请选择营业部"
-                v-model="formState.Province"
-                clearable
-              >
-                <el-option v-for="(item, index) in departmentList" :key="index" :label="item.SysDepartmentName" :value="item.SysDepartmentId"></el-option>
-              </el-select>
+              />
             </el-form-item>
           </div>
           <div class="flex form-tr-box" v-if="route.path !== '/customer/companyDetail'">
@@ -192,7 +194,7 @@ function selectRegion(data) {
           <el-button
             type="primary"
             plain
-            @click="router.replace('/customer/userList')"
+            @click="router.replace('/customer/customer_list')"
             style="width: 120px"
             >取消</el-button
           >

+ 23 - 84
src/views/customer/UserEdit.vue

@@ -34,9 +34,7 @@ const formRules = {
   phone: [{
     required: true,
     validator: (rule, value, callback) => {
-      if (value === '' && !formState.email) {
-        callback(new Error('手机号码和邮箱至少填一个'));
-      } else if (value && formState.areaCode === '86' && !isMobileNo(value || '')) {
+      if (value && formState.areaCode === '86' && !isMobileNo(value || '')) {
         callback(new Error('请输入正确的手机号格式'));
       } else if (formState.areaCode !== '86' && isNaN(value?.trim())) {
         callback(new Error('请输入正确的手机号格式'));
@@ -45,19 +43,6 @@ const formRules = {
       }
     }, trigger: 'blur'
   }],
-  email: [{
-    validator: (rule, value, callback) => {
-      if (value === '' && !formState.phone) {
-        callback(new Error('手机号码和邮箱至少填一个'));
-      } else if (value && !patternEmail.test(value)) {
-        callback(new Error('请输入正确的邮箱格式'));
-      } else {
-        callback();
-      }
-    }, trigger: 'blur'
-  }],
-  validTime: [{ required: true, message: '请选择有效期', trigger: 'change' }],
-  company: [{ required: true, message: '所属公司不能为空', trigger: 'blur' }],
   sellerId: [{ required: true, message: '请选择销售', trigger: 'change' }],
 }
 const showPhoneVal=computed({
@@ -73,35 +58,23 @@ const formState = reactive({
   realName: '',
   areaCode: '86',
   phone: '',
-  email: '',
   sellerId: '',
-  validTime: '',
-  company: '',
   isEnabled: false
 
 })
 
-
-const checkedIds = ref([])
-
 function getUserInfo() {
   if (!userId.value) return
   apiCustomerUser.userInfo({
     UserId: userId.value
   }).then(res => {
     if (res.Ret === 200) {
-      const { Detail } = res.Data
+      const Detail = res.Data
       formState.realName = Detail.RealName
       formState.areaCode = Detail.AreaCode
-      formState.phone = Detail.Phone
-      formState.email = Detail.Email
+      formState.phone = Detail.Mobile
       formState.sellerId = Detail.SellerDepartmentId||''
-      formState.validTime = Detail.ValidStartTime?[dayjs(Detail.ValidStartTime).format('YYYY-MM-DD'), dayjs(Detail.ValidEndTime).format('YYYY-MM-DD')]:''
-      formState.company = Detail.Company
       formState.isEnabled = Detail.Status ? true : false
-      if(route.query.startTime){
-        formState.validTime=[route.query.startTime,route.query.endTime]
-      }
     }
   })
 }
@@ -112,7 +85,7 @@ const departmentList = ref([])
 async function getSellerDepartment() {
   const res = await apiCustomerUser.sellerDepartmentList()
   if (res.Ret === 200) {
-    departmentList.value = res.Data || []
+    departmentList.value = res.Data.List || []
   }
 }
 
@@ -146,13 +119,8 @@ async function handleSave(type) {
   let params = {
     RealName: formState.realName,
     AreaCode: formState.areaCode,
-    Phone: formState.phone,
-    Email: formState.email,
-    SellerDepartmentId: formState.sellerId,
-    ValidStartTime: formState.validTime?.[0],
-    ValidEndTime: formState.validTime?.[1],
-    Company: formState.company,
-    ChartPermission: checkedIds.value
+    Mobile: formState.phone,
+    SellerId: formState.sellerId,
   }
   if (userId.value) {
     params.UserId = Number(userId.value)
@@ -161,12 +129,11 @@ async function handleSave(type) {
     // 新增用户时进行校验
     const checkRes = await apiCustomerUser.userAddCheck({
       AreaCode: formState.areaCode,
-      Phone: formState.phone,
-      Email: formState.email,
+      Mobile: formState.phone,
     })
     if (checkRes.Ret !== 200) return
-    if (checkRes.Data) {
-      userId.value = checkRes.Data.UserId
+    if (checkRes.Data.CheckResult !== 0) {
+      // userId.value = checkRes.Data.UserId
       ElMessageBox.confirm(checkAddContent(checkRes.Msg),'操作提示',{
         autofocus:false,
       }).then(()=>{
@@ -185,7 +152,7 @@ async function handleSave(type) {
   }
   if (res.Ret !== 200) return
   ElMessage.success(userId.value ? '编辑成功' : '新增成功')
-  router.replace('/customer/userList')
+  router.replace('/customer/customer_list')
 
 }
 
@@ -205,9 +172,11 @@ async function handleSave(type) {
           <el-form-item label="姓名" prop="realName">
             <el-input v-model="formState.realName" placeholder="请输入姓名" />
           </el-form-item>
+        </div>
+        <div class="flex form-tr-box">
           <el-form-item label="手机号" prop="phone">
             <el-select
-              v-model="formState.areaCode"
+              v-model="formState.areaCode" 
               placeholder="请选择"
               style="width: 35%"
             >
@@ -226,11 +195,8 @@ async function handleSave(type) {
           </el-form-item>
         </div>
         <div class="flex form-tr-box">
-          <el-form-item label="邮箱" prop="email">
-            <el-input v-model="formState.email" placeholder="请输入邮箱" />
-          </el-form-item>
           <el-form-item label="营业部" prop="sellerId">
-            <!-- <all-user-for-depart
+            <all-user-for-depart
               style="width: 100%"
               :props="{
                 emitPath: false,
@@ -238,49 +204,22 @@ async function handleSave(type) {
               onlySelectUser
               v-model="formState.sellerId"
               placeholder="请选择营业部"
-            /> -->
+            />
             <!-- handleFilterList -->
-            <el-select
+            <!-- <el-select
               placeholder="请选择营业部"
               v-model="formState.sellerId"
               clearable
             >
               <el-option v-for="(item, index) in departmentList" :key="index" :label="item.SysDepartmentName" :value="item.SysDepartmentId"></el-option>
-            </el-select>
+            </el-select> -->
           </el-form-item>
         </div>
         <div class="flex form-tr-box">
-          <el-form-item label="有效期" prop="validTime">
-            <el-date-picker
-              style="width: 235px"
-              v-model="formState.validTime"
-              type="daterange"
-              range-separator="至"
-              start-placeholder="选择日期"
-              end-placeholder="选择日期"
-              value-format="YYYY-MM-DD"
-            />
-          </el-form-item>
-          <el-form-item label="所属公司" prop="company">
-            <el-input
-              v-model="formState.company"
-              placeholder="请输入所属公司"
-            />
-          </el-form-item>
-        </div>
-        <div class="form-tr-box auth-box">
-          <div class="auth-box-label">
-            <span class="text">权限</span>
-            <span v-if="$route.path !== '/customer/userAdd'">
-              <span style="color: var(--el-color-danger)">*</span>
-              <span>用户状态</span>
-              <el-switch
-                v-model="formState.isEnabled"
-                style="margin-left: 5px"
-              />
-            </span>
+            <el-form-item label="权限">
+              可查看所有报告
+            </el-form-item>
           </div>
-        </div>
       </el-form>
     </div>
     <div class="right-box">
@@ -291,13 +230,13 @@ async function handleSave(type) {
         <el-button
           type="primary"
           plain
-          @click="router.replace('/customer/userList')"
+          @click="router.replace('/customer/customer_list')"
           style="width: 120px"
           >取消</el-button
         >
       </div>
       <!-- 操作记录 -->
-      <OperationRecord />
+      <OperationRecord v-else/>
     </div>
   </div>
 </template>
@@ -315,7 +254,7 @@ async function handleSave(type) {
     gap: 0 50px;
     margin-bottom: 20px;
     .el-form-item {
-      width: 45%;
+      width: 100%;
       max-width: 400px;
     }
   }

+ 94 - 39
src/views/customer/UserList.vue

@@ -4,6 +4,7 @@ import { apiCustomerUser } from '@/api/customer'
 import { useRouter } from 'vue-router'
 import { ElMessage, ElMessageBox,dayjs } from 'element-plus'
 import EnableUser from './components/EnableUser.vue'
+import UserStatisticDetail from './reportStatistic/components/UserStatisticDetail.vue'
 import { computed } from 'vue'
 
 const router = useRouter()
@@ -163,6 +164,37 @@ function handleFilterList() {
   getUserList()
 }
 
+// 提示弹窗
+function handleOpenAndClose(row, type) {
+  ElMessageBox.confirm(
+    type === 'close' ? '关闭后将影响客户查看报告权限,是否确认关闭?' : '开启后客户可查看所有报告,是否确认开启?',
+    '提示',
+    {
+      confirmButtonText: '确认',
+      cancelButtonText: '取消',
+      type: 'warning',
+    }
+  )
+    .then(() => {
+      if (radio.value === 2) {
+        type === 'close' ? handleDisabledUser(row) : handleEnableUser(row)
+      } else {
+        type === 'close' ? handleChangecompany(row) : handleChangecompany(row)
+      }
+    })
+    .catch(() => {
+    })
+}
+
+// 机构权限切换
+async function handleChangecompany(row) {
+  const res = await apiCustomerUser.companyTransAuth({
+    CompanyId: row.CompanyId,
+  })
+  if (res.Ret !== 200) return
+  ElMessage.success('禁用成功')
+  getUserList()
+}
 
 // 禁用用户
 async function handleDisabledUser(row) {
@@ -176,30 +208,56 @@ async function handleDisabledUser(row) {
 }
 
 // 启用用户
-const showEnableUserPop = ref(false)
-const enableUserId = ref(0)
 function handleEnableUser(row) {
-  enableUserId.value = row.UserId
-  showEnableUserPop.value = true
+  const params={
+    UserId:row.UserId,
+    IsEnabled:true,
+  }
+  apiCustomerUser.setUserStatus(params).then(res=>{
+    if(res.Ret===200){
+      ElMessage.success('启用成功')
+      emits('success')
+      show.value=false
+    }
+  })
 }
 
-// 删除用户
-function handleDelUser(row) {
+// 删除机构或者用户
+function handleDelUserAndCompany(row) {
   ElMessageBox.confirm(
     '该操作会删除该用户所有相关信息,不可恢复,确认删除吗?',
     '提示'
   ).then(() => {
-    apiCustomerUser.userDelete({
-      UserId: row.UserId
-    }).then(res => {
-      if (res.Ret === 200) {
-        ElMessage.success('删除成功')
-        getUserList()
-      }
-
-    })
+    if (radio.value === 2) {
+      handleDelUser(row)
+    } else {
+      handleDelCompany(row)
+    }
   }).catch(() => { })
 }
+// 删除用户
+function handleDelUser(row) {
+  apiCustomerUser.userDelete({
+    UserId: row.UserId
+  }).then(res => {
+    if (res.Ret === 200) {
+      ElMessage.success('删除成功')
+      getUserList()
+    }
+  })
+}
+
+// 删除机构
+function handleDelCompany(row) {
+  apiCustomerUser.companyRemove({
+    CompanyId: row.CompanyId
+  }).then(res => {
+    if (res.Ret === 200) {
+      ElMessage.success('删除成功')
+      getUserList()
+    }
+  })
+}
 
 
 function handleEditUser(e) {
@@ -251,6 +309,15 @@ function goAddUserPage() {
     router.push('/customer/companyAdd')
   }
 }
+
+const showDetail=ref(false)
+const activeUserId=ref(0)
+const activeUserName=ref('')
+function handleGoReadTimes(e){
+  activeUserId.value=e.UserId
+  activeUserName.value=e.RealName
+  showDetail.value=true
+}
 </script>
 
 <template>
@@ -316,12 +383,9 @@ function goAddUserPage() {
       <el-table
         :data="userList"
         border
-        
-        highlight-current-row
         element-loading-text="数据加载中..."
         v-loading="tableLoading"
         @sort-change="handleTableSort"
-        @row-click="handleGoDetail"
       >
         <el-table-column
           v-for="column in tableColOpt"
@@ -346,24 +410,21 @@ function goAddUserPage() {
             </el-tooltip>
           </template>
           <template #default="{ row }">
-            <span v-if="column.key === 'IsRegistered'">{{
-              row.IsRegistered ? "是" : "否"
+            <span v-if="column.key === 'RealName' || column.key === 'CompanyName'" style="color: #075EEE;" @click="handleGoDetail(row)">{{row.RealName || row.CompanyName}}</span>
+            <span v-else-if="column.key === 'ReadTimes'" :style="row.ReadTimes > 0 ?'color: #075EEE;' : ''" @click="handleGoReadTimes(row)">{{ row.ReadTimes}}</span>
+            <span v-else-if="column.key === 'IsRegistered'">{{
+              row.IsRegistered ? "是" : "否" || '-'
             }}</span>
             <span v-else-if="column.key === 'IsSubscribed'">{{
-              row.IsSubscribed ? "是" : "否"
+              row.IsSubscribed ? "是" : "否" || '-'
             }}</span>
-            <span v-else-if="column.key === 'ValidStartTime'"
-              >{{ formatTime(row.ValidStartTime, "YYYY-MM-DD") }}~{{
-                formatTime(row.ValidEndTime, "YYYY-MM-DD")
-              }}</span
-            >
             <span v-else-if="column.key === 'RegisterTime'">{{
-              formatTime(row.RegisterTime)
+              formatTime(row.RegisterTime) || '-'
             }}</span>
             <span v-else-if="column.key === 'CreateTime'">{{
-              formatTime(row.CreateTime)
+              formatTime(row.CreateTime) || '-'
             }}</span>
-            <span v-else>{{ row[column.key] }}</span>
+            <span v-else>{{ row[column.key] || '-' }}</span>
           </template>
         </el-table-column>
         <el-table-column label="操作" width="200" align="center">
@@ -380,7 +441,7 @@ function goAddUserPage() {
               type="danger"
               link
               v-if="row.Status === 2"
-              @click.stop="handleDisabledUser(row)"
+              @click.stop="handleOpenAndClose(row,'close')"
               >关闭权限</el-button
             >
             <el-button
@@ -388,14 +449,14 @@ function goAddUserPage() {
               type="primary"
               link
               v-else
-              @click.stop="handleEnableUser(row)"
+              @click.stop="handleOpenAndClose(row,'open')"
               >开启权限</el-button
             >
             <el-button
               v-permission="permissionBtn.customerManageBtn.customer_delete"
               type="danger"
               link
-              @click.stop="handleDelUser(row)"
+              @click.stop="handleDelUserAndCompany(row)"
               >删除</el-button
             >
           </template>
@@ -412,13 +473,7 @@ function goAddUserPage() {
       />
     </div>
   </div>
-
-  <!-- 开启用户 -->
-  <EnableUser
-    v-model:show="showEnableUserPop"
-    :userId="enableUserId"
-    @success="getUserList()"
-  />
+  <UserStatisticDetail v-model:show="showDetail" :userId="activeUserId" :userName="activeUserName"/>
 </template>
 
 <style lang="scss" scoped>

+ 2 - 18
src/views/customer/reportStatistic/components/UserStatisticDetail.vue

@@ -21,13 +21,9 @@ const tableColOpt = [
     label: '标题',
     key: 'ReportTitle'
   },
-  {
-    label: '品种',
-    key: 'ChartPermissionName'
-  },
   {
     label: '报告类型',
-    key: 'ClassifyName1'
+    key: 'ClassifyNameThird'
   },
   {
     label: '阅读时间',
@@ -35,7 +31,7 @@ const tableColOpt = [
   },
   {
     label: '停留时间',
-    key: 'StayTime'
+    key: 'ReadDuration'
   },
 ]
 const list = ref([])
@@ -43,7 +39,6 @@ const page = ref(1)
 const pageSize = ref(10)
 const tableLoading = ref(false)
 const totals = ref(0)
-const permissionIds = ref('')
 const classifyIds = ref('')
 async function getList() {
   tableLoading.value = true
@@ -51,7 +46,6 @@ async function getList() {
     UserId: props.userId,
     PageSize: pageSize.value,
     CurrentIndex: page.value,
-    ChartPermissionIds: permissionIds.value ? permissionIds.value.join(',') : '',
     ClassifyIds: classifyIds.value ? classifyIds.value.join(',') : '',
   })
   tableLoading.value = false
@@ -73,7 +67,6 @@ function handleRefreshList() {
 
 watch(() => show.value, (n) => {
   if (n) {
-    permissionIds.value = ''
     classifyIds.value=''
     handleRefreshList()
   }
@@ -95,15 +88,6 @@ function formatClassifyName(e){
   <el-dialog v-model="show" width="850" :title="props.userName+'研报统计'" draggable>
     <div class="user-statistic-detail-wrap">
       <div>
-        <select-permission
-          v-model="permissionIds"
-          :props="{
-            emitPath: false,
-            multiple: true,
-          }"
-          clearable
-          @change="handleRefreshList"
-        />
         <select-report-classify
           style="margin-left: 5px"
           v-model="classifyIds"