1
0

2 Коммиты 5c40379505 ... 797ff3a477

Автор SHA1 Сообщение Дата
  lm 797ff3a477 添加客户跟进静态页面 5 дней назад
  lm ea3730b62b 完善用户权限的页面交互 5 дней назад

+ 1 - 0
src/baseComponents/Dialog.vue

@@ -87,6 +87,7 @@ const handleConfirm = ()=>{
 
 
 .page_dialog{
+  flex-grow: 0 !important;
   :deep(.el-dialog){
     .el-dialog__body{
       min-height: calc(120px);

+ 1 - 0
src/baseComponents/FormDialog.vue

@@ -1146,6 +1146,7 @@ const HandleFilePreview = (params)=>{
 }
 
 .page_dialog{
+  flex-grow: 0 !important;
   :deep(.el-dialog) {
     // margin: calc(min(50px,5vh)) auto calc(min(50px,5vh));
     margin:0 !important;

+ 3 - 0
src/baseComponents/SearchBlock.vue

@@ -18,6 +18,8 @@
                                 <!-- && categoryItem.value == buttonSearchData[item.key] -->
                                 <span v-if="categoryItem?.bubbleVal" class="bubble">{{ categoryItem?.bubbleVal }}</span>
                             </span>
+                            
+                            <slot :name="'rowItem-'+item.key"></slot>
                         </div>
                         <div>   
                             <slot :name="item.key"></slot>
@@ -148,6 +150,7 @@ watch(()=>props.searchList,(newVal)=>{
             display: flex;
             gap: 8px;
             flex-wrap: wrap;
+            align-items: center;
             flex:1 1;
             span{
                 position: relative;

+ 2 - 0
src/baseComponents/formTableEdit/index.vue

@@ -72,6 +72,7 @@
 
      <!-- 删除弹窗 -->
     <Dialog 
+        style="flex-grow: 0;"
         v-if="dialogVisible"
         :submitLoading="dialogSubmitLoading"
         :visible="dialogVisible"
@@ -351,6 +352,7 @@ watch(()=>props.defaultTableData,(val)=>{
 }
 
 .parameter_setting_form_dialog{
+    flex-grow: 0 !important;
     :deep(.el-dialog__body){
         min-height: 500px !important;
         max-height: 500px !important;

+ 2 - 2
src/components/settingCard/SettingCard.vue

@@ -31,7 +31,7 @@
         <template v-slot:[middleColumnItm?.name]="{row}">
             <!-- 地区管理的下拉为省份 -->
             <template v-if="middleColumnItm?.label == '省份'">
-                <el-select v-model="row[middleColumnItm.name]" v-if="row.tmpId">
+                <el-select filterable v-model="row[middleColumnItm.name]" v-if="row.tmpId">
                     <el-option
                         label="输入框"
                         :value="1"
@@ -106,7 +106,7 @@ const disabledEditRowScene = (row,currentIndex,newTableData)=>{
 }
 const disabledDeleteRowScene = (row,currentIndex,newTableData)=>{
     return props.middleColumnItm?.label == '跟进状态' && 
-            [1,newTableData.length, newTableData.length-1, newTableData.length-2].includes(currentIndex)
+            ([1,newTableData.length, newTableData.length-1, newTableData.length-2].includes(currentIndex) || row[props.middleColumnItm.name] == '方案演示') 
 }
 
 // 表格行 编辑确认

+ 133 - 2
src/views/customerFollowUp/index.vue

@@ -1,15 +1,146 @@
 <template>
-    <div>
-        客户跟进
+    <div class="main_container">
+        <div class="page_item end_item">
+            <div class="page_search">
+                <div class="search_content">
+                    <div class="content_left">
+                        <SearchBlock :searchList="searchList" >
+                            <template #rowItem-time>
+                                <el-date-picker
+                                    style="height: 28px;flex-grow: 0;"
+                                    v-model="startAndEndTime"
+                                    type="daterange"
+                                    range-separator="至"
+                                    start-placeholder="开始日期"
+                                    end-placeholder="结束日期"
+                                    size="default"
+                                />
+                            </template>
+                        </SearchBlock>
+                    </div>
+                    <div class="content_right">
+                        <el-button class="delete_button_border_no_bg">赢单申请</el-button>
+                        <el-button class="button_border">操作日志</el-button>
+                    </div>
+                </div>
+            </div>
+            <FormSearchGroup :searchList="[
+                {
+                    key:'queryStr',
+                    type:'input',
+                    placeholder:'请输入关键字搜索',
+                    hidden:false,
+                    defaultValue:'',
+                    disabled:false
+                }
+            ]"/>
+            <Table :currentPage="currentPage" :pageSize="pageSize" :totalNum="totalNum" 
+                :tableColumns="tableColumns" :tableData="tableData">
+                <template #num="{currentIndex}">
+                    {{ (currentPage - 1) * pageSize + currentIndex }}
+                </template>
+                
+                <template #followUpContent="{row}">
+                    <span class="two_line_ellipsis">{{ row.followUpContent }}</span>
+                </template>
+
+                <template #operation="{row}">
+                    <div class="table_row_option">
+                        <span class="option_button_editor">详情</span>
+                    </div>
+                </template>
+            </Table>
+
+        </div>
     </div>
 </template>
 
 
 <script setup lang="ts">
+import { ref } from 'vue';
+import SearchBlock from '@/baseComponents/SearchBlock.vue';
+import {searchList} from './searchBlock'
+import Table from '@/baseComponents/Table.vue';
+import FormSearchGroup from '@/baseComponents/FormSearchGroup.vue';
+
+import {tableColumns} from './table'
+
+
+// 表格数据有关内容
+const tableData = ref([
+    {
+        id: 1,
+        customerType: '首单客户',
+        schoolName: '流星花园学校',
+        contactPerson: '张三',
+        jobTitle: '校长',
+        educationStage: '中学',
+        province: '北京市', // 新增列数据
+        region: '西城区',   // 新增列数据
+        groupName: '1小组', // 新增列数据
+        followUpUser: '张三',
+        followUpProduct: '大数据精准教学',
+        followUpStatus: '试用测试',
+        followUpContent: '跟进文案跟进文案跟进文案跟进文案跟进文案跟进文案跟进文案跟进文案',
+        followUpTime: '2026-03-11 9:00',
+    },
+    {
+        id: 2,
+        customerType: '首单客户',
+        schoolName: '北京师达',
+        contactPerson: '张三',
+        jobTitle: '校长',
+        educationStage: '中学',
+        province: '北京市',
+        region: '西城区',
+        groupName: '1小组',
+        followUpUser: '张三',
+        followUpProduct: '大数据精准教学',
+        followUpStatus: '试用测试',
+        followUpContent: '跟进文案跟进文案跟进文案跟进文案...',
+        followUpTime: '2026-03-11 9:00',
+    },
+    {
+        id: 3,
+        customerType: '首单客户',
+        schoolName: '北京五十七中学',
+        contactPerson: '张三',
+        jobTitle: '校长',
+        educationStage: '中学',
+        province: '北京市',
+        region: '西城区',
+        groupName: '1小组',
+        followUpUser: '张三',
+        followUpProduct: '大数据精准教学',
+        followUpStatus: '试用测试',
+        followUpContent: '跟进文案跟进文案跟进文案',
+        followUpTime: '2026-03-11 9:00',
+    }
+]);
+
+const currentPage = ref(1)
+const pageSize = ref(20)
+const totalNum = ref(0)
+
+
+
+// 筛选项有关数据
+const startAndEndTime = ref()
+const searchParams = ref({})
+
 
 </script>
 
 
 <style lang="scss" scoped>
+.end_item{
+    gap:16px;
+}
+
+.content_right{
+    align-self: flex-start;
+    flex-wrap: wrap;
+
+}
 
 </style>

+ 124 - 0
src/views/customerFollowUp/searchBlock.ts

@@ -0,0 +1,124 @@
+import { ref } from "vue";
+
+export const searchList = ref<SearchBlockItem[]>([
+    {
+        label: '时间',
+        key: 'time',
+        type: 'single',
+        options: [
+            { label: '全部', value: 'all' },
+            { label: '今天', value: 'today' },
+            { label: '本周', value: 'thisWeek' },
+            { label: '最近1月', value: 'last1Month' },
+            { label: '最近3月', value: 'last3Month' },
+            { label: '半年内', value: 'halfYear' },
+            { label: '自定义', value: 'custom' },
+        ],
+        defaultValue: 'all'
+    },
+    {
+        label: '分组',
+        key: 'group',
+        type: 'single',
+        options: [
+            { label: '全部', value: 'all' },
+            { label: '分组1', value: 'group1' },
+            { label: '分组2', value: 'group2' },
+            { label: '分组3', value: 'group3' },
+            { label: '分组4', value: 'group4' },
+            { label: '分组5', value: 'group5' },
+            { label: '分组6', value: 'group6' },
+        ],
+        defaultValue: 'all'
+    },
+    {
+        label: '人员',
+        key: 'personnel',
+        type: 'single',
+        options: [
+            { label: '全部', value: 'all' },
+            { label: '马丁', value: 'martin' },
+            { label: '王诗雅', value: 'wangshiya' },
+            { label: '王梓木', value: 'wangzimu' },
+            { label: '殷思源', value: 'yinsiyuan' },
+            { label: '付文杰', value: 'fuwenjie' },
+            { label: '李润曦', value: 'lirunxi' },
+        ],
+        defaultValue: 'all'
+    },
+    {
+        label: '产品',
+        key: 'product',
+        type: 'single',
+        options: [
+            { label: '全部', value: 'all' },
+            { label: '大数据教学诊断', value: 'big_data_diagnosis' },
+            { label: '智能判分', value: 'smart_grading' },
+            { label: '材料采集', value: 'material_collection' },
+            { label: '校内通知', value: 'school_notification' },
+            { label: '校本研修', value: 'school_research' },
+            { label: '协同备课', value: 'collaborative_prep_1' },
+            { label: '协同备课', value: 'collaborative_prep_2' }, // 图片中此项有重复
+            { label: '协同备课', value: 'collaborative_prep_3' }, // 图片中此项有重复
+        ],
+        defaultValue: 'all'
+    },
+    {
+        label: '省份',
+        key: 'province',
+        type: 'single',
+        options: [
+            { label: '全部', value: 'all' },
+            { label: '北京', value: 'beijing' },
+            { label: '上海', value: 'shanghai' },
+            { label: '天津', value: 'tianjin' },
+            { label: '广东', value: 'guangdong' },
+            { label: '广西', value: 'guangxi' },
+        ],
+        defaultValue: 'all'
+    },
+    {
+        label: '地区',
+        key: 'region',
+        type: 'single',
+        options: [
+            { label: '全部', value: 'all' },
+            { label: '东城区', value: 'dongcheng' },
+            { label: '西城区', value: 'xicheng' },
+            { label: '海淀区', value: 'haidian' },
+            { label: '朝阳区', value: 'chaoyang' },
+            { label: '丰台区', value: 'fengtai' },
+            { label: '石景山区', value: 'shijingshan' },
+        ],
+        defaultValue: 'all'
+    },
+    {
+        label: '学段',
+        key: 'education_stage',
+        type: 'single',
+        options: [
+            { label: '全部', value: 'all' },
+            { label: '幼儿园', value: 'kindergarten' },
+            { label: '小学', value: 'primary_school' },
+            { label: '初中', value: 'junior_high' },
+            { label: '高中', value: 'senior_high' },
+            { label: '完全中学', value: 'complete_middle' },
+            { label: '九年一贯', value: 'nine_year' },
+            { label: '十二年一贯', value: 'twelve_year' },
+            { label: '职高', value: 'vocational_high' },
+            { label: '大学', value: 'university' },
+        ],
+        defaultValue: 'all'
+    },
+    {
+        label: '类型',
+        key: 'type',
+        type: 'single',
+        options: [
+            { label: '全部', value: 'all' },
+            { label: '首单客户', value: 'first_order' },
+            { label: '存量客户', value: 'existing_customer' },
+        ],
+        defaultValue: 'all'
+    }
+]);

+ 141 - 0
src/views/customerFollowUp/table.ts

@@ -0,0 +1,141 @@
+import { ref } from "vue";
+
+
+export const tableColumns = ref([
+    {
+        name: 'num',
+        label: '序号',
+        width: '60',
+        fixed: '',
+        align: 'center',
+        minWidth: '',
+        custom: true,
+       
+    },
+    {
+        name: 'customerType',
+        label: '客户类型',
+        width: '100',
+        fixed: '',
+        align: 'center',
+        minWidth: '',
+        custom: false,
+    },
+    {
+        name: 'schoolName',
+        label: '学校名称',
+        width: '150',
+        fixed: '',
+        align: 'center',
+        minWidth: '',
+        custom: false,
+    },
+    {
+        name: 'contactPerson',
+        label: '联系人',
+        width: '100',
+        fixed: '',
+        align: 'center',
+        minWidth: '',
+        custom: false,
+    },
+    {
+        name: 'jobTitle',
+        label: '职务',
+        width: '80',
+        fixed: '',
+        align: 'center',
+        minWidth: '',
+        custom: false,
+    },
+    {
+        name: 'educationStage',
+        label: '学段',
+        width: '80',
+        fixed: '',
+        align: 'center',
+        minWidth: '',
+        custom: false,
+    },
+    {
+        name: 'province',
+        label: '省份',
+        width: '100', 
+        fixed: '',
+        align: 'center',
+        minWidth: '',
+        custom: false,
+    },
+    {
+        name: 'region',
+        label: '地区',
+        width: '100',
+        fixed: '',
+        align: 'center',
+        minWidth: '',
+        custom: false,
+    },
+    {
+        name: 'groupName',
+        label: '分组',
+        width: '100',
+        fixed: '',
+        align: 'center',
+        minWidth: '',
+        custom: false,
+    },
+    {
+        name: 'followUpUser',
+        label: '跟进人员',
+        width: '100',
+        fixed: '',
+        align: 'center',
+        minWidth: '',
+        custom: false,
+    },
+    {
+        name: 'followUpProduct',
+        label: '跟进产品',
+        width: '120',
+        fixed: '',
+        align: 'center',
+        minWidth: '',
+        custom: false,
+    },
+    {
+        name: 'followUpStatus',
+        label: '跟进状态',
+        width: '100',
+        fixed: '',
+        align: 'center',
+        minWidth: '',
+        custom: false,
+    },
+    {
+        name: 'followUpContent',
+        label: '跟进内容',
+        width: '200',
+        fixed: '',
+        align: 'left',
+        minWidth: '', 
+        custom: true,
+    },
+    {
+        name: 'followUpTime',
+        label: '跟进时间',
+        width: '160',
+        fixed: '',
+        align: 'center',
+        minWidth: '',
+        custom: false,
+    },
+    {
+        name: 'operation',
+        label: '操作',
+        width: '80',
+        fixed: 'right', 
+        align: 'center',
+        minWidth: '',
+        custom: true,
+    }
+]);

+ 76 - 51
src/views/userPrivilegeManagement/groupManage/index.vue

@@ -41,7 +41,7 @@
                             >
                             <div v-if="isConfigMode" class="teacher_tag">
                                 <span :title="row?.[column.name].name">{{ row?.[column.name].name }}</span>
-                                <el-icon class="delete_icon" @click.stop="HandleRemoveUser(row, column.name, idx,'administrative')"><Close /></el-icon>
+                                <el-icon class="delete_icon" @click.stop="OpenDeleteDialog(row, column,)"><Close /></el-icon>
                             </div>
                             <div v-else class="disabled_teacher">
                                 <span :title="row?.[column.name].name">{{ row?.[column.name].name}}</span>
@@ -58,7 +58,9 @@
         </div>
     </div>
 
+    <!-- 分组管理弹窗 -->
     <FormTableEdit 
+        style="flex-grow: 0;"
         addOperationName="增加分组" 
         :startDragIndex="startDragIndex" 
         :endDragIndex="endDragIndex" 
@@ -80,6 +82,19 @@
             <span v-else>{{ row.groupName }}</span>
         </template>
     </FormTableEdit>
+
+
+     <!-- 地区 组内用户 删除弹窗 -->
+    <Dialog 
+        style="flex-grow: 0;"
+        v-if="dialogVisible"
+        :submitLoading="dialogSubmitLoading"
+        :visible="dialogVisible"
+        @confirm="HandleDialogConfirm"
+        @close="HandleDialogClose">
+        请确认是否确认删除{{ currentDeleteColumn.label }}  {{currentDeleteRow[currentDeleteColumn.name].name}}   {{provinceTablist.find(item=>item.key == defaultProvince)?.label}}{{currentDeleteRow.region}}  的权限?
+    </Dialog>
+
 </template>
 
 
@@ -91,10 +106,15 @@ import Table from '@/baseComponents/Table.vue';
 import TabSearch from '@/baseComponents/TabSearch.vue';
 import FormTableEdit from '@/baseComponents/formTableEdit/index.vue'
 
+import Dialog from '@/baseComponents/Dialog.vue';
+
 import {tableColumns,userTableColumns} from './table'
 import {provinceTablist} from './tabSearch'
 
 
+/**
+ * 1. 左侧 员工相关信息及操作
+ */
 // 员工账号信息
 const userAccountData = ref([
     {
@@ -108,14 +128,35 @@ const userAccountData = ref([
         id:'2',
     },
 ])
+// 当前选中的用户
+const selectedUser = ref()
+// 设置表行选中 样式
+const tableRowClassName = ({row,rowIndex})=>{
+  if(row.id == selectedUser.value?.id){
+    return 'active_row'
+  }
+}
+// 行选中 选择员工
+const HandleSelectUser = (user) => {
+  selectedUser.value = {
+    id:user.id,
+    name:user.name,
+    account:user.account,
+  };
+};
+
+
 
+/**
+ * 2. 右侧分组展示信息 及操作
+ */
 // 分组信息
 const isConfigMode = ref(false)
 const defaultProvince = ref('beijing')
 const groupPeopleTableData = ref([
      {
         id:'1',
-        region:'xxx',
+        region:'东城区',
         project1:{id:'1',name:'xxx'},
         project2:{id:'1',name:'xxx'},
         project3:{id:'1',name:'xxx'},
@@ -126,7 +167,7 @@ const groupPeopleTableData = ref([
     },
     {
         id:'2',
-        region:'xxx',
+        region:'西城区',
         project1:{id:'1',name:'xxx'},
         project2:{id:'1',name:'xxx'},
         project3:{id:'1',name:'xxx'},
@@ -137,23 +178,6 @@ const groupPeopleTableData = ref([
     },
 ])
 
-const selectedUser = ref()
-
-// 设置表行选中 样式
-const tableRowClassName = ({row,rowIndex})=>{
-  if(row.id == selectedUser.value?.id){
-    return 'active_row'
-  }
-}
-// 行选中 选择员工
-const HandleSelectUser = (user) => {
-  selectedUser.value = {
-    id:user.id,
-    name:user.name,
-    account:user.account,
-  };
-};
-
 // 添加员工
 const HandleAddUser = async (row, cell) => {
     if (!isConfigMode.value) return;
@@ -171,70 +195,68 @@ const HandleAddUser = async (row, cell) => {
     }
     row[cell] = teacherMsg;
 
-    // let res = await saveTeachingRelationshipApi({
-    //     ...teacherMsg,
-    //     evaluationId:route.query.id,
-    //     evaluationGradeId:searchParmams.value.gradeId,
-    //     evaluationSubjectId:cell,
-    //     evaluationClassId:row.className.evaluationClassId,
-    //     classType:searchParmams.value.classType == 'teach' ? 1 : 0  //班级类型,0-行政班,1-教学班
-    // })
-    // if(res?.code == 200){
-        // ElMessage.success(res?.msg)
-        // row[cell].push({...teacherMsg,id:res?.data});
-    // }
 };
 
 
+/**
+ * 3. 删除员工的弹窗 及操作
+ */
+const dialogVisible = ref(false)
+const dialogSubmitLoading = ref(false)
+const currentDeleteCell = ref()  //当前准备删除的(员工)单元格数据
+const currentDeleteRow = ref()  //当前准备删除的(员工)所在行数据
+const currentDeleteColumn = ref()  //当前准备删除的(员工)所在列信息
 // 移除员工
-const HandleRemoveUser = async (row, cell, index,type) => {
-    if (!isConfigMode.value) return;
+const HandleDialogConfirm = ()=>{
     let id = null
     let res = undefined
-    row[cell] = '';
-
-    // id = row[cell][index].id
-    // res = await deleteTeachingRelationshipApi(id)
-    // if(res?.code == 200){
-    //     ElMessage.success(res?.msg)
-    //     row[cell].splice(index, 1);
-    // }
-};
+    currentDeleteRow.value[currentDeleteColumn.value.name] = ''
+    // id = currentDeleteCell.value.id
+    HandleDialogClose()
+}
 
+const HandleDialogClose = ()=>{
+    currentDeleteCell.value = null
+    currentDeleteRow.value = null
+    currentDeleteColumn.value = null
+    dialogVisible.value = false
+}
+const OpenDeleteDialog = (row, cellObj)=>{
+    if (!isConfigMode.value) return;
+    dialogVisible.value = true
+    currentDeleteCell.value = row[cellObj.name]
+    currentDeleteRow.value = row
+    currentDeleteColumn.value = cellObj
+}
 
 
-// 分组管理相关配置
+/**
+ * 4. 分组管理 弹窗相关配置
+ */
 const formVisible = ref(false)
-
 const formDialogConfirmFlag = ref('')
 const deleteFlag = ref('')
-
 const gorupTableData = ref([
     {
         id:'xxx',
         groupName:'xxxx'
     }
 ])
-
 const HandleOpenGroup = ()=>{
     formVisible.value = true
-
 }
-
 const startDragIndex = ()=>{
     return 0
 }
 const endDragIndex = (tableData)=>{
     return tableData.length
 }
-
 const HandleEditGroup = (row,params)=>{
     row.editFlag = ''
 }
 const HandleAddGroup = (row,params)=>{
     row.tmpId = ''
 }
-
 const HandleDeleteGroup = (row)=>{
     gorupTableData.value = gorupTableData.value.filter(item=>{
         return item.id !== row.id
@@ -247,6 +269,9 @@ const HandleConfirmEntiretyGroup = ()=>{
         formDialogConfirmFlag.value = 'fail'
     },1000)
 }
+
+
+
 </script>
 
 

+ 48 - 11
src/views/userPrivilegeManagement/userManage/index.vue

@@ -16,7 +16,7 @@
         <Table :tableColumns="tableColumns" :tableData="userTableData" 
             :pageNum = "pageNum" :pageSize = "pageSize" :totalNum = "totalNum">
             <template #num="{row,currentIndex}">
-                {{ (currentIndex - 1 ) * pageSize + pageNum }}
+                {{ (pageNum - 1 ) * pageSize + currentIndex }}
             </template>
 
             <template #gender="{row}">
@@ -46,8 +46,8 @@
                 <div class="table_row_option">
                     <span class="option_button_editor" @click="OpenUserFormDialog(row)">编辑</span>
                     <span class="option_button_editor" @click="OpenresetPasswordFormDialog(row)">重置密码</span>
-                    <span class="option_button_editor">禁用</span>
-                    <span class="el_button_delete">删除</span>
+                    <span class="option_button_editor" @click="OpenForbiddenDialog(row,'forbidden')">禁用</span>
+                    <span class="el_button_delete" @click="OpenForbiddenDialog(row,'delete')">删除</span>
                 </div>
             </template>
         </Table>
@@ -56,9 +56,10 @@
     <!-- 新增用户 弹窗 -->
     <FormDialog  
         class="user_form_dialog"
-        style="flex-grow: 0;" width="482px"
+        width="482px"
         v-if="userFormDialogVisible"
-        :formItemList="userFormItemList" :defaultFormData="defaultUserFormData" 
+        :formItemList="userFormItemList" 
+        :defaultFormData="defaultUserFormData" 
         :title="userFormDialogTitle" 
         :submitLoading="userFormDialogSubmiting" 
         :visible="userFormDialogVisible"
@@ -69,7 +70,7 @@
     <!-- 重置密码弹窗 -->
     <FormDialog  
         class="reset_password_form_dialog"
-        style="flex-grow: 0;" width="500px"
+         width="500px"
         v-if="resetPasswordFormDialogVisible"
         :formItemList="resetPasswordFormItemList" :defaultFormData="defaultResetPasswordFormData" 
         title="重置密码" 
@@ -79,6 +80,16 @@
         @confirm="HandleresetPasswordFormDialogConfirm">
     </FormDialog>
 
+    <!-- 禁用/删除 弹窗 -->
+    <Dialog 
+        :visible="forbiddenDialogVisible" 
+        :submitLoading="forbiddenDialogLoading" 
+        @close="HandleForbiddenDialogClose"
+        @confirm="HandleForbiddenDialogConfirm">
+        请确认是否{{currentOperationType == 'delete' ? '删除' : '禁用'}} 【{{currentEditRow?.name}}】 {{ currentEditRow?.account }}
+    </Dialog>
+
+
 </template>
 
 
@@ -93,6 +104,7 @@ import TabSearch from '@/baseComponents/TabSearch.vue';
 import {tabList} from './tabSearch'
 import FormDialog from '@/baseComponents/FormDialog.vue';
 import {userFormItemList, resetPasswordFormItemList} from './formDialog'
+import Dialog from '@/baseComponents/Dialog.vue';
 
 /**
  * 1. 表格 有关数据
@@ -104,8 +116,8 @@ const totalNum = ref(0)
 const userTableData = ref([
     {
         id:'1',
-        account:'xxx',
-        name:'xxx',
+        account:'43434',
+        name:'xx1',
         gender:'1',
         phone:'xxx',
         status:0,
@@ -118,15 +130,14 @@ const userTableData = ref([
     },
     {
         id:'2',
-        account:'xxx',
-        name:'xxx',
+        account:'545',
+        name:'xx2',
         gender:'0',
         phone:'xxx',
         status:1,
         publicSeaFollowRecord:false,
         historyFollowRecord:true,
 
-
         customerHoldLimit:50,
         dailyManualReturnLimit:20,
         noFollowAutoReturnDays:30,
@@ -155,6 +166,8 @@ const userFormDialogVisible = ref(false)
 const userFormDialogSubmiting = ref(false)
 const userFormDialogTitle = ref('')
 const defaultUserFormData = ref({
+    publicSeaFollowRecord:true,
+    historyFollowRecord:true,
     customerHoldLimit:100,
     dailyManualReturnLimit:15,
     noFollowAutoReturnDays:15,
@@ -174,6 +187,8 @@ const OpenUserFormDialog = (row?:any)=>{
 const CloseUserFormDialog = ()=>{
     userFormDialogVisible.value = false
     defaultUserFormData.value = {
+        publicSeaFollowRecord:true,
+        historyFollowRecord:true,
         customerHoldLimit:100,
         dailyManualReturnLimit:15,
         noFollowAutoReturnDays:15,
@@ -205,6 +220,28 @@ const HandleresetPasswordFormDialogConfirm = ()=>{
     CloseResetPasswordFormDialog()
 }
 
+/**
+ * 4. 禁用/删除 弹窗有关数据
+ */
+const forbiddenDialogVisible = ref(false)
+const forbiddenDialogLoading = ref(false)
+const currentEditRow = ref()
+const currentOperationType = ref('')
+const HandleForbiddenDialogClose = ()=>{
+    currentEditRow.value = undefined
+    forbiddenDialogVisible.value = false
+}
+const HandleForbiddenDialogConfirm = ()=>{
+    // 区分 禁用和删除
+    // currentOperationType.value
+    HandleForbiddenDialogClose()
+}
+// type: delete | forbidden
+const OpenForbiddenDialog = (row,type)=>{
+    currentOperationType.value = type
+    currentEditRow.value = row
+    forbiddenDialogVisible.value = true
+}
 
 </script>