Quellcode durchsuchen

feat:加入数据权限类型

lizhi vor 3 Monaten
Ursprung
Commit
02bf48dbfd

+ 41 - 8
protected/components/Controller.php

@@ -14,6 +14,7 @@ class Controller extends CController
     public array $authIds = [];
     public array $companyIds = [];
     public array $schoolIds = [];
+    public int $authType = AUTH_TYPE_COMPANY_SCHOOL;
     private int $_userId = 0;
 
     /**
@@ -126,18 +127,36 @@ class Controller extends CController
         $key = 'user_auth_' . $this->_userId;
         $data = RedisInstance::getInstance()->get($key);
         if (!$data) {
-            $model = Useradmin::model()->findByPk($this->_userId);
-            $authIds = DB::getScalerWithCriteria(
-                'role',
-                DbCriteria::simpleCompare(['id' => $model->role_id])->setSelect('auth_ids')
-            );
-            $this->authIds = $authIds ? explode(',', $authIds) : [];
-            $this->companyIds = $model->company_ids ? explode(',', $model->company_ids) : [];
-            $this->schoolIds = $model->school_ids ? explode(',', $model->school_ids) : [];
+            $user = DB::getInfoWithCriteria('useradmin', DbCriteria::simpleCompare(['u.id' => $this->_userId])
+                ->setAlias('u')
+                ->setSelect('company_ids, school_ids, date_auth_type, auth_ids,cities')
+                ->setJoin('left join wx_role r ON r.id = u.role_id'));
+            if (!$user) {
+                throw new CHttpException(401, '用户不存在');
+            }
+            $this->authIds = $user['auth_ids'] ? explode(',', $user['auth_ids']) : [];
+            $this->authType = $user['date_auth_type'];
+            if ($this->authType == AUTH_TYPE_COMPANY_SCHOOL) {
+                $this->companyIds = $user['company_ids'] ? explode(',', $user['company_ids']) : [];
+                $this->schoolIds = $user['school_ids'] ? explode(',', $user['school_ids']) : [];
+            } elseif ($this->authType == AUTH_TYPE_CITY) {
+                $cities = array_filter(explode(',', $user['cities']));
+                if ($cities) {
+                    $this->companyIds = Helper::arrayColumn(DB::getListWithCriteria('company', DbCriteria::simpleCompare(['is_del' => 0, 'city' => $cities])->setSelect('id')), 'id') ?: [-9999];
+                    $this->schoolIds = Helper::arrayColumn(DB::getListWithCriteria('school', DbCriteria::simpleCompare(['is_del' => 0, 'city' => $cities])->setSelect('id')), 'id') ?: [-9999];
+                } else {
+                    $this->companyIds = [-9999];
+                    $this->schoolIds = [-9999];
+                }
+            } else {
+                $this->companyIds = [-1];
+                $this->schoolIds = [-1];
+            }
             $json = json_encode([
                 'authIds' => $this->authIds,
                 'companyIds' => $this->companyIds,
                 'schoolIds' => $this->schoolIds,
+                'authType' => $this->authType,
             ]);
             RedisInstance::getInstance()->set($key, $json, 86400);
         } else {
@@ -145,6 +164,7 @@ class Controller extends CController
             $this->authIds = $data['authIds'];
             $this->companyIds = $data['companyIds'];
             $this->schoolIds = $data['schoolIds'];
+            $this->authType = $data['authType']?? AUTH_TYPE_COMPANY_SCHOOL;
         }
         LewaimaiAdminPingtaiAuth::$authIds = $this->authIds;
     }
@@ -155,6 +175,19 @@ class Controller extends CController
         RedisInstance::getInstance()->delete('user_auth_' . $id);
     }
 
+    public function clearAuthByCity(string $city): void
+    {
+        // 清除缓存
+        $cri = DbCriteria::simpleCompare(['status' => 1])
+            ->setSelect('id')
+            ->addCondition("find_in_set('{$city}', cities)");
+        $users = DB::getListWithCriteria('useradmin', $cri)?:[];
+        Logger::errorMult('auth_change', $users);
+        foreach ($users['records'] as $user) {
+            $this->clearAuth($user['id']);
+        }
+    }
+
     public function getUserId()
     {
         return $this->_userId;

+ 5 - 2
protected/controllers/CompanyController.php

@@ -160,13 +160,14 @@ class CompanyController extends Controller
         if ($id > 0) {
             $cri->addCondition('id!=' . $id);
         }
+        $isEdit = $id > 0;
         if ($fid = DB::getScalerWithCriteria(self::$table, $cri)) {
             Helper::error('公司名称已存在 ' . $fid);
         }
         $this->dobuleCheck();
         $trans = \Yii::app()->db->beginTransaction();
         try {
-            if ($id) {
+            if ($isEdit) {
                 DB::updateById(self::$table, $data, $id);
                 DB::deleteByCondition('company_canteen_relation', ['company_id' => $id]);
             } else {
@@ -183,7 +184,6 @@ class CompanyController extends Controller
                         $this->getUserId()
                     );
                 }
-                $this->clearAuth();
             }
             $batchArr = [];
             foreach ($canteens as $canteen) {
@@ -199,6 +199,9 @@ class CompanyController extends Controller
             $trans->rollback();
             Helper::error($e->getMessage());
         }
+        if (!$isEdit && $data['city']) {
+            $this->clearAuthByCity($data['city']);
+        }
         Helper::ok();
     }
 

+ 6 - 1
protected/controllers/SchoolController.php

@@ -149,6 +149,7 @@ class SchoolController extends Controller
         if ($id > 0) {
             $cri->addCondition('id!=' . $id);
         }
+        $isEdit = $id > 0;
         if ($fid = DB::getScalerWithCriteria(self::$table, $cri)) {
             Helper::error('学校名称已存在 ' . $fid);
         }
@@ -167,7 +168,6 @@ class SchoolController extends Controller
                         ['school_ids' => trim($user['school_ids'].','.$id, ',')],
                         $this->getUserId()
                     );
-                    $this->clearAuth();
                 }
             }
             $trans->commit();
@@ -175,6 +175,11 @@ class SchoolController extends Controller
             $trans->rollback();
             Helper::error($e->getMessage());
         }
+
+        if (!$isEdit && $data['city']) {
+            $this->clearAuthByCity($data['city']);
+        }
+
         Helper::ok();
     }
 

+ 4 - 3
protected/controllers/SiteController.php

@@ -118,11 +118,12 @@ class SiteController extends Controller
         $newData = [];
         $data = file_get_contents(PROJECT_PATH . '/protected/runtime/city.json');
         foreach (json_decode($data, true) as $province) {
-            $newData[] = ['label' => $province['province'], 'value' => $province['province'], 'children' => array_map(function($city) {
-                return ['label' => $city['city'], 'value' => $city['city']];
-            }, $province['citys'])];
+            foreach ($province['citys'] as $city) {
+                $newData[] = $city['city'];
+            }
         }
         echo json_encode($newData, JSON_UNESCAPED_UNICODE);
+        \CVarDumper::dump(count($newData), 6, 1);die;
     }
 
     public function actionDefault()

+ 54 - 17
protected/controllers/UseradminController.php

@@ -37,7 +37,7 @@ class UseradminController extends Controller
         $name = Helper::getPostString('name');
         $name = $name ? '%' . $name : null;
         $cri = DbCriteria::simpleCompareWithPage(['name' => $name])
-            ->setSelect('id, name, auth_ids, descr, create_date, show_ids')
+            ->setSelect('id, name, auth_ids, descr, create_date, show_ids, date_auth_type')
             ->setOrder('id desc');
         $data = DB::getListWithCriteria('role', $cri);
         if (!empty($data['records'])) {
@@ -70,33 +70,49 @@ class UseradminController extends Controller
         $cri = DbCriteria::simpleCompareWithPage($filters)
             ->setAlias('u')
             ->setDebugUntil('234', '-1')
-            ->setSelect('u.id, u.username, r.name as role_name, u.status, u.role_id, u.sex, u.phone, u.create_date, u.avatar, u.update_date, u.company_ids, u.school_ids')
+            ->setSelect('u.id, u.username, r.date_auth_type, u.cities, r.name as role_name, u.status, u.role_id, u.sex, u.phone, u.create_date, u.avatar, u.update_date, u.company_ids, u.school_ids')
             ->setJoin('left join wx_role r on u.role_id = r.id')
             ->setOrder('id desc');
         $data = DB::getListWithCriteria('useradmin', $cri);
-        if (!empty($data['records'])) {
-            $schools = Helper::arrayColumn(
-                DB::getListWithCriteria('school', DbCriteria::simpleCompare([])->setSelect('id, name')),
-                'name',
-                'id'
-            );
-            $companys = Helper::arrayColumn(
-                DB::getListWithCriteria('company', DbCriteria::simpleCompare([])->setSelect('id, name')),
-                'name',
-                'id'
-            );
-            $data['records'] = array_map(function ($item) use ($schools, $companys) {
-                $item['avatar'] = Helper::getImageUrl($item['avatar']);
+        if (empty($data['records'])) {
+            Helper::ok([]);
+        }
+        $schools = Helper::arrayColumn(
+            DB::getListWithCriteria('school', DbCriteria::simpleCompare([])->setSelect('id, name')),
+            'name',
+            'id'
+        );
+        $companys = Helper::arrayColumn(
+            DB::getListWithCriteria('company', DbCriteria::simpleCompare([])->setSelect('id, name')),
+            'name',
+            'id'
+        );
+
+        foreach ($data['records'] as &$item) {
+            $item['avatar'] = Helper::getImageUrl($item['avatar']);
+            if ($item['date_auth_type'] == AUTH_TYPE_CITY) {
+                $item['company_ids'] = [];
+                $item['school_ids'] = [];
+                $item['company_names'] = [];
+                $item['school_names'] = [];
+                $item['cities'] = array_filter(explode(',', $item['cities']));
+            } elseif ($item['date_auth_type'] == AUTH_TYPE_ALL) {
+                $item['company_ids'] = [];
+                $item['school_ids'] = [];
+                $item['cities'] = ['全部'];
+                $item['company_names'] = ['全部'];
+                $item['school_names'] = ['全部'];
+            } else {
                 $item['company_ids'] = $item['company_ids'] ? array_map(function ($item) {return (int)$item;}, explode(',', $item['company_ids'])) : [];
                 $item['school_ids'] = $item['school_ids'] ? array_map(function ($item) {return (int)$item;}, explode(',', $item['school_ids'])) : [];
+                $item['cities'] = [];
                 $item['company_names'] = array_map(function ($item) use ($companys) {
                     if (isset($companys[$item])) return $companys[$item];
                 }, $item['company_ids']);
                 $item['school_names'] = array_map(function ($item) use ($schools) {
                     if (isset($schools[$item])) return $schools[$item];
                 }, $item['school_ids']);
-                return $item;
-            }, $data['records']);
+            }
         }
         Helper::ok($data);
     }
@@ -122,6 +138,25 @@ class UseradminController extends Controller
         Helper::ok();
     }
 
+    public function actionSaveDataAuth()
+    {
+        $id = Helper::getPostInt('id');
+        $authType = Helper::getPostInt('auth_type');
+        if ($id < 0 || !in_array($authType, [0, 1, 2])) {
+            Helper::error('参数错误');
+        }
+        $info = [
+            'date_auth_type' => $authType,
+        ];
+        DB::updateById('role', $info, $id);
+        $users = DB::getListWithCriteria('useradmin', DbCriteria::simpleCompare(['role_id' => $id])->setSelect('id'))?:[];
+        Logger::errorMult('auth_change', $users);
+        foreach ($users['records'] as $user) {
+            $this->clearAuth($user['id']);
+        }
+        Helper::ok();
+    }
+
     public function actionEditUser()
     {
         $id = Helper::getPostInt('id');
@@ -132,6 +167,7 @@ class UseradminController extends Controller
         $role_id = Helper::getPostInt('role_id');
         $company_ids = Helper::getArrParam($_POST, 'company_ids', 'array_int', []);
         $school_ids = Helper::getArrParam($_POST, 'school_ids', 'array_int', []);
+        $cities = Helper::getArrParam($_POST, 'cities', 'array_string', []);
         // username不能为空和重复
         if (!$username) {
             Helper::error('用户名不能为空');
@@ -151,6 +187,7 @@ class UseradminController extends Controller
             'role_id' => $role_id,
             'company_ids' => $company_ids ? implode(',', $company_ids) : '',
             'school_ids' => $school_ids ? implode(',', $school_ids) : '',
+            'cities' => $cities ? implode(',', $cities) : '',
         ];
         if (!$id) {
             // 新增用户

+ 1 - 0
protected/include/LewaimaiAdminPingtaiAuth.php

@@ -66,6 +66,7 @@ class LewaimaiAdminPingtaiAuth
             // ===================   用户及角色管理  =======================
             'useradmin/rolelist' => 110200, // 角色列表
             'useradmin/saveroleauth' => 110201, // 菜单权限
+            'useradmin/savedataauth' => 110201, // 数据权限
             'useradmin/editrole' => 110202, // 编辑角色
             'useradmin/deleterole' => 110203, // 删除角色
             'useradmin/userlist' => 110100, // 用户列表

Datei-Diff unterdrückt, da er zu groß ist
+ 4 - 1376
protected/include/define.php


+ 6 - 2
script/upgrade/1.0.0.sql

@@ -12,6 +12,7 @@ CREATE TABLE `wx_useradmin` (
   `email` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '员工邮箱地址',
   `school_ids` text COMMENT '分配的学校(用逗号隔开 -1表示全部)',
   `company_ids` text COMMENT '分配的公司(用逗号隔开 -1表示全部)',
+  `cities` text COMMENT '分配的城市(用逗号隔开 -1表示全部)',
   `create_date` datetime NOT NULL DEFAULT now() COMMENT '创建时间',
   `update_date` datetime  NOT NULL DEFAULT now() COMMENT '更新时间',
   PRIMARY KEY (`id`)
@@ -22,6 +23,7 @@ CREATE TABLE `wx_role` (
   `name` VARCHAR(20) NOT NULL COMMENT '角色名',
   `auth_ids` text COMMENT '权限ID(用逗号隔开)',
   `show_ids` text COMMENT '权限ID(用逗号隔开) 用于前端展示',
+  `date_auth_type` TINYINT(4) NOT NULL default 1 COMMENT '数据权限 0-全部学校和餐饮公司 1-指定学校和餐饮公司 2-按城市指定学校',
   `status` TINYINT(1) NOT NULL DEFAULT '1' COMMENT '是否可用,默认1表示可用,0表示已经删除',
   `descr` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '简介',
   `create_date` datetime NOT NULL DEFAULT now() COMMENT '创建时间',
@@ -55,7 +57,8 @@ CREATE TABLE `wx_school` (
   `last_date` datetime COMMENT '最后一次跟进时间',
   `create_date` datetime NOT NULL DEFAULT now() COMMENT '创建时间',
   `update_date` datetime  NOT NULL DEFAULT now() COMMENT '更新时间',
-  PRIMARY KEY (`id`)
+  PRIMARY KEY (`id`),
+  key `idx_city` (`city`) using btree
 ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci comment='学校表';
 
 CREATE TABLE `wx_school_contact` (
@@ -139,7 +142,8 @@ CREATE TABLE `wx_company` (
   `last_date` datetime COMMENT '最后一次跟进时间',
   `create_date` datetime NOT NULL DEFAULT now() COMMENT '创建时间',
   `update_date` datetime  NOT NULL DEFAULT now() COMMENT '更新时间',
-  PRIMARY KEY (`id`)
+  PRIMARY KEY (`id`),
+  key `idx_city` (`city`) using btree
 ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci comment='餐饮公司表';
 
 CREATE TABLE `wx_company_contact` (

+ 10 - 0
web/src/api/roleApi.ts

@@ -21,6 +21,16 @@ export class roleService {
     })
   }
 
+  // 数据权限设置
+  static saveDataAuth(id: number, auth_type:number) {
+    const params = { id, auth_type }
+    return request.post<any>({
+      url: 'useradmin/saveDataAuth',
+      params
+      // showErrorMessage: false // 不显示错误消息
+    })
+  }
+
   // 编辑角色
   static editRole(params: Form.RoleInfo) {
     return request.post<any>({

+ 2 - 2
web/src/components/custom/FollowDrawer.vue

@@ -19,11 +19,11 @@
             <el-col :sm="0" :xs="24">
               <span style="background-color: #f59a23;color: white; padding: 2px 5px">{{ follow.create_date.split(' ')[1] }}</span>
             </el-col>
-            <el-avatar :src="follow.avatar"/> <span style="top: 13px; left:10px; position: relative;" >{{ follow.user_name }}</span>
+            <el-avatar :src="follow.avatar || '/src/assets/img/user/avatar.webp'"/> <span style="top: 13px; left:10px; position: relative;" >{{ follow.user_name }}</span>
             <el-col :span="24">
               <label>关系人:</label> <span>{{ follow.second_name }}</span>
             </el-col>
-            <el-col :span="24">
+            <el-col :span="24" v-if="follow.chat_imgs.length">
               <label style="position: relative;top: -10px;">聊天记录:</label>
               <el-image
                   v-if="follow.chat_imgs.length"

+ 6 - 0
web/src/enums/appEnum.ts

@@ -55,3 +55,9 @@ export enum BgColorEnum {
   DANGER = 'bg-danger',
   INFO = 'bg-info'
 }
+
+export enum AuthTypeEnum {
+  AUTH_TYPE_ALL = 0,
+  AUTH_TYPE_COMPANY_SCHOOL = 1,
+  AUTH_TYPE_CITY = 2,
+}

Datei-Diff unterdrückt, da er zu groß ist
+ 3 - 1
web/src/router/utils/city.ts


+ 4 - 1
web/src/typings/api.d.ts

@@ -59,7 +59,6 @@ declare namespace Api {
       phone: string // 手机号
       weixin: string // 微信号
       position?: string // 职位
-      position?: string // 职位
     }
 
     interface Stat {
@@ -143,6 +142,7 @@ declare namespace Api {
       create_date: string
       auth_ids: number[]
       show_ids?: number[]
+      date_auth_type:number
     }
 
     /** 列表返回 */
@@ -166,6 +166,7 @@ declare namespace Api {
       buttons?: string[]
       roles?: string[]
       sex: number
+      date_auth_type:number
       role_name?: string
       status?: 0 | 1
       avatar?: string
@@ -198,6 +199,8 @@ declare namespace Api {
       company_ids: number[]
       school_names: string[]
       company_names: string[]
+      date_auth_type:number
+      cities: string[]
     }
   }
 

+ 1 - 0
web/src/typings/form.d.ts

@@ -30,6 +30,7 @@ declare namespace Form {
     role_id: number
     company_ids: number[]
     school_ids: number[]
+    cities: string[]
   }
 
   interface FindPassword {

+ 1 - 6
web/src/views/canteen/edit.vue

@@ -136,12 +136,7 @@
       { max: 20, message: '长度最多20个字符', trigger: 'blur' }
     ],
     phone: [
-      { required: true, message: '请输入手机号', trigger: 'blur' },
-      {
-        pattern: /^1[3456789]\d{9}$/,
-        message: '请输入正确的手机号码',
-        trigger: 'blur'
-      }
+      { required: true, message: '请输入手机号', trigger: 'blur' }
     ],
     weixin: [
       { max: 20, message: '长度最多20个字符', trigger: 'blur' }

+ 1 - 2
web/src/views/company/relation/modules/user-dialog.vue

@@ -90,8 +90,7 @@
     ],
     company_id: [{ required: true, message: '请输入餐饮公司', trigger: 'blur' }],
     phone: [
-      { required: true, message: '请输入手机号', trigger: 'blur' },
-      { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号码', trigger: 'blur' }
+      { required: true, message: '请输入手机号', trigger: 'blur' }
     ],
     weixin: [
       { max: 20, message: '长度最多20个字符', trigger: 'blur' }

+ 1 - 2
web/src/views/school/relation/modules/user-dialog.vue

@@ -90,8 +90,7 @@
     ],
     school_id: [{ required: true, message: '请输入学校', trigger: 'blur' }],
     phone: [
-      { required: true, message: '请输入手机号', trigger: 'blur' },
-      { pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号码', trigger: 'blur' }
+      { required: true, message: '请输入手机号', trigger: 'blur' }
     ],
     weixin: [
       { max: 20, message: '长度最多20个字符', trigger: 'blur' }

+ 35 - 3
web/src/views/system/role/index.vue

@@ -38,6 +38,7 @@
               <ArtButtonMore
                 :list="[
                   { key: 'permission', label: '菜单权限', authId: 110201 },
+                  { key: 'dataAuth', label: '数据权限', authId: 110201 },
                   { key: 'edit', label: '编辑角色', authId: 110202 },
                   { key: 'delete', label: '删除角色', authId: 110203 }
                 ]"
@@ -71,6 +72,24 @@
       </template>
     </ElDialog>
 
+    <el-dialog
+        v-model="dataDialogVisible"
+        title="数据权限"
+        width="500"
+    >
+      <ElSelect v-model="nowRoleInfo.date_auth_type" placeholder="请选择">
+        <ElOption v-for="(item, key) in ['全部学校和餐饮公司', '指定学校和餐饮公司', '按城市指定学校']" :key="key" :value="key" :label="item"></ElOption>
+      </ElSelect>
+      <template #footer>
+        <div class="dialog-footer">
+          <el-button @click="dataDialogVisible = false">取消</el-button>
+          <el-button type="primary" @click="dateAuthChange">
+            确定
+          </el-button>
+        </div>
+      </template>
+    </el-dialog>
+
     <ElDialog
       v-model="permissionDialog"
       title="菜单权限"
@@ -119,6 +138,7 @@
   import { formatMenuTitle } from '@/router/utils/utils'
   import { ButtonMoreItem } from '@/components/core/forms/art-button-more/index.vue'
   import { roleService } from '@/api/roleApi'
+  import {AuthTypeEnum} from "@/enums/appEnum";
 
   defineOptions({ name: 'Role' })
 
@@ -129,6 +149,7 @@
     name: '',
     descr: '',
     create_date: '',
+    date_auth_type: AuthTypeEnum.AUTH_TYPE_COMPANY_SCHOOL,
     auth_ids: [],
     show_ids: []
   })
@@ -233,9 +254,21 @@
     }
   }
 
+  const dataDialogVisible = ref(false)
+
+  const dateAuthChange = async () => {
+    dataDialogVisible.value = false
+    await roleService.saveDataAuth(nowRoleInfo.id, nowRoleInfo.date_auth_type).then(() => {
+      getTableData()
+    })
+  }
+
   const buttonMoreClick = (item: ButtonMoreItem, row: any) => {
+    Object.assign(nowRoleInfo, row)
     if (item.key === 'permission') {
       showPermissionDialog(row)
+    } else if (item.key === 'dataAuth') {
+      dataDialogVisible.value = true
     } else if (item.key === 'edit') {
       showDialog('edit', row)
     } else if (item.key === 'delete') {
@@ -267,10 +300,9 @@
       cancelButtonText: '取消',
       type: 'error'
     }).then(() => {
-      roleService.deleteRole({ id })
-      setTimeout(() => {
+      roleService.deleteRole({ id }).then(() => {
         getTableData()
-      }, 1000)
+      })
     })
   }
 

+ 19 - 4
web/src/views/system/user/index.vue

@@ -32,23 +32,36 @@
       >
 
         <template #school_names="scope">
-          <ElTag
+          <ElText
               v-for="item in scope.row.school_names"
               type="primary"
+              size="small"
               style="margin: 5px"
           >
             {{item}}
-          </ElTag>
+          </ElText>
         </template>
 
         <template #company_names="scope">
-          <ElTag
+          <ElText
               v-for="item in scope.row.company_names"
               type="primary"
+              size="small"
               style="margin: 5px"
           >
             {{item}}
-          </ElTag>
+          </ElText>
+        </template>
+
+        <template #cities="scope">
+          <ElText
+              v-for="item in scope.row.cities"
+              type="primary"
+              size="small"
+              style="margin: 5px"
+          >
+            {{item}}
+          </ElText>
         </template>
 
 
@@ -81,6 +94,7 @@
   import {companyApi} from "@/api/companyApi";
   import {commonApi} from "@/api/commonApi";
   import { detectDeviceType } from '@/utils'
+  import {AuthTypeEnum} from "@/enums/appEnum";
 
   defineOptions({ name: 'User' })
 
@@ -170,6 +184,7 @@
         },
         {prop: 'school_names', label: '分管学校(校区)', useSlot: true},
         {prop: 'company_names', label: '分管餐饮公司', useSlot: true},
+        {prop: 'cities', label: '分管地区', useSlot: true},
         {
           prop: 'create_date',
           label: '创建日期',

+ 14 - 4
web/src/views/system/user/modules/user-dialog.vue

@@ -3,7 +3,7 @@
   <ElDialog
     v-model="dialogVisible"
     :title="dialogType === 'add' ? '添加用户' : '编辑用户'"
-    width="30%"
+    width="50%"
     align-center
   >
     <ElForm ref="formRef" :model="formData" :rules="rules" label-width="80px">
@@ -27,16 +27,21 @@
           <ElOption v-for="role in roleList" :key="role.id" :value="role.id" :label="role.name" />
         </ElSelect>
       </ElFormItem>
-      <ElFormItem label="分管学校" prop="school_ids">
+      <ElFormItem label="分管学校" prop="school_ids" v-if="userData.date_auth_type == AuthTypeEnum.AUTH_TYPE_COMPANY_SCHOOL">
         <ElSelect v-model="formData.school_ids" multiple>
           <ElOption v-for="role in schoolList" :key="role.id" :value="role.id" :label="role.name" />
         </ElSelect>
       </ElFormItem>
-      <ElFormItem label="分管餐饮公司" prop="school_ids">
+      <ElFormItem label="分管餐饮公司" prop="school_ids" v-if="userData.date_auth_type == AuthTypeEnum.AUTH_TYPE_COMPANY_SCHOOL">
         <ElSelect v-model="formData.company_ids" multiple>
           <ElOption v-for="role in companyList" :key="role.id" :value="role.id" :label="role.name" />
         </ElSelect>
       </ElFormItem>
+      <ElFormItem label="分管地区" prop="cities" v-if="userData.date_auth_type == AuthTypeEnum.AUTH_TYPE_CITY">
+        <ElSelect v-model="formData.cities" multiple filterable>
+          <ElOption v-for="item in cities" :key="item" :value="item" :label="item" />
+        </ElSelect>
+      </ElFormItem>
     </ElForm>
     <template #footer>
       <div class="dialog-footer">
@@ -50,6 +55,8 @@
 <script setup lang="ts">
   import type { FormInstance, FormRules } from 'element-plus'
   import { UserService } from '@/api/usersApi'
+  import {AuthTypeEnum} from "@/enums/appEnum";
+  import {cities} from "@/router/utils/city";
 
   interface Props {
     visible: boolean
@@ -88,7 +95,8 @@
     sex: 0,
     role_id: 0,
     school_ids: [],
-    company_ids: []
+    company_ids: [],
+    cities:[]
   })
 
   // 表单验证规则
@@ -119,6 +127,7 @@
       role_id: isEdit.value ? row.role_id : 0,
       school_ids: isEdit.value ? row.school_ids || [] : [],
       company_ids: isEdit.value ? row.company_ids || [] : [],
+      cities: isEdit.value ? row.cities || [] : [],
     })
   }
 
@@ -128,6 +137,7 @@
     ([visible]) => {
       if (visible) {
         initFormData()
+        console.log(`%c userData == `, 'background:#41b883 ; padding:1px; color:#fff', props.userData);
         nextTick(() => {
           formRef.value?.clearValidate()
         })