浏览代码

fix:测试bug处理及需求变更

lizhi 3 月之前
父节点
当前提交
e9712692f1
共有 35 个文件被更改,包括 138 次插入74 次删除
  1. 15 1
      protected/components/Controller.php
  2. 8 3
      protected/controllers/CanteenController.php
  3. 4 3
      protected/controllers/CommonController.php
  4. 4 4
      protected/controllers/CompanyController.php
  5. 2 2
      protected/controllers/CompanyRelationController.php
  6. 7 3
      protected/controllers/FollowController.php
  7. 1 1
      protected/controllers/SchoolController.php
  8. 5 2
      protected/controllers/SchoolRelationController.php
  9. 13 1
      protected/controllers/SiteController.php
  10. 5 2
      protected/controllers/UseradminController.php
  11. 0 1
      protected/include/LewaimaiAdminPingtaiAuth.php
  12. 6 6
      web/src/api/followApi.ts
  13. 2 2
      web/src/components/core/layouts/art-header-bar/index.vue
  14. 2 2
      web/src/components/core/layouts/art-screen-lock/index.vue
  15. 1 2
      web/src/components/custom/FollowDrawer.vue
  16. 1 1
      web/src/locales/langs/zh.json
  17. 11 11
      web/src/router/routes/asyncRoutes.ts
  18. 1 1
      web/src/router/routesAlias.ts
  19. 14 1
      web/src/router/utils/city.ts
  20. 1 2
      web/src/views/canteen/edit.vue
  21. 1 0
      web/src/views/canteen/list/index.vue
  22. 1 1
      web/src/views/company/follow/index.vue
  23. 12 1
      web/src/views/company/info.vue
  24. 3 4
      web/src/views/company/list/index.vue
  25. 1 1
      web/src/views/company/list/user-search.vue
  26. 0 1
      web/src/views/company/relation/modules/user-dialog.vue
  27. 2 2
      web/src/views/school/edit.vue
  28. 2 2
      web/src/views/school/info.vue
  29. 3 4
      web/src/views/school/list/index.vue
  30. 2 2
      web/src/views/school/list/user-search.vue
  31. 1 0
      web/src/views/school/relation/index.vue
  32. 0 1
      web/src/views/school/relation/modules/user-dialog.vue
  33. 3 1
      web/src/views/system/user/index.vue
  34. 3 2
      web/src/views/system/user/modules/user-dialog.vue
  35. 1 1
      web/src/views/system/user-center/index.vue

+ 15 - 1
protected/components/Controller.php

@@ -70,6 +70,20 @@ class Controller extends CController
     }
 
     /**
+     * 限制操作频率
+     * @param $second
+     * @return void|null
+     * @throws RedisException
+     */
+    public function dobuleCheck($second = 3)
+    {
+        $key = 'dobule_' . $this->_userId;
+        if (!RedisInstance::getInstance()->setNx($key, 1, $second)) {
+            return Helper::error('操作过于频繁');
+        }
+    }
+
+    /**
      * @throws CHttpException
      */
     public function beforeAction($action): bool
@@ -99,7 +113,7 @@ class Controller extends CController
         $this->_formatAuth();
 
 		if (!LewaimaiAdminPingtaiAuth::adminAuth($controller, $action)
-            && (!$this->_userId && $this->_userId != 1)
+            && ($this->_userId && $this->_userId != 1)
         ) {
             Helper::error('您没有相应的权限');
 		}

+ 8 - 3
protected/controllers/CanteenController.php

@@ -136,15 +136,15 @@ class CanteenController extends Controller
             'weixin' => Helper::getPostString('weixin'),
             'memo' => Helper::getPostString('memo'),
         ];
+        $company_id = Helper::getPostInt('company_id');
 
         $notNullField = ["school_id","name","stall_num","is_direct","username","phone","weixin"];
-        $allowEmptyField = ["stall_num","is_direct"];
+        $allowEmptyField = ["stall_num","is_direct",'weixin'];
 
         // 空字段检测
         if (!Helper::checkEmptyKey($data, $notNullField, $allowEmptyField)) {
             Helper::error('参数错误');
         }
-
         $name = $data['name'];
         // 检测名称重复
         $cri = DbCriteria::simpleCompare(['name' => $name])->setSelect('id');
@@ -154,6 +154,9 @@ class CanteenController extends Controller
         if ($fid = DB::getScalerWithCriteria(self::$table, $cri)) {
             Helper::error('食堂名称已存在 ' . $fid);
         }
+
+        $this->dobuleCheck();
+
         $data['stall_imgs'] = $data['stall_imgs'] ? implode(',', $data['stall_imgs']) : '';
 
         $trans = \Yii::app()->db->beginTransaction();
@@ -164,7 +167,9 @@ class CanteenController extends Controller
                 DB::addData(self::$table, $data);
             }
             Db::deleteByCondition('company_canteen_relation', ['canteen_id' => $id]);
-            Db::addData('company_canteen_relation', ['canteen_id' => $id, 'company_id' => $data['school_id'], 'school_id' => $data['school_id']]);
+            if ($company_id) {
+                Db::addData('company_canteen_relation', ['canteen_id' => $id, 'company_id' => $company_id, 'school_id' => $data['school_id']]);
+            }
             $trans->commit();
         } catch (\Exception $e) {
             $trans->rollback();

+ 4 - 3
protected/controllers/CommonController.php

@@ -33,11 +33,12 @@ class CommonController extends Controller
             'des' => '今日新增餐饮公司跟进记录',
             'detail_path' => '/company/follow'
         ];
+        $cri->addCondition('is_del = 0');
         // 今日新增校方关系
         $ret[] = [
             'num' => DB::getScalerWithCriteria('school_contact', $cri),
             'des' => '今日新增校方关系',
-            'detail_path' => '/company/relation'
+            'detail_path' => '/school/relation'
         ];
         // 今日新增餐饮公司关系
         $ret[] = [
@@ -252,8 +253,8 @@ class CommonController extends Controller
             'descr' => Helper::getPostString('descr'),
             'sex' => Helper::getPostInt('sex'),
         ];
-        if (!Helper::checkEmptyKey($info, ['username', 'phone', 'email'])) {
-            Helper::error('参数错误');
+        if (!Helper::checkEmptyKey($info, ['username', 'phone'])) {
+            Helper::error('用户名称和手机号不能为空');
         }
         DB::updateById('useradmin', $info, $this->getUserId());
         Helper::ok();

+ 4 - 4
protected/controllers/CompanyController.php

@@ -23,7 +23,7 @@ class CompanyController extends Controller
         $data['distinct'] = [
             $data['province'],
             $data['city'],
-            $data['area'],
+            // $data['area'],
         ];
 
         // 关联食堂
@@ -136,12 +136,12 @@ class CompanyController extends Controller
         // 处理地区
         $district = Helper::getArrParam($_POST, 'distinct', Helper::PARAM_KEY_TYPE['array_string']);
         $district = array_filter($district);
-        if (count($district) != 3) {
+        if (count($district) != 2) {
             Helper::error('地区参数错误');
         }
         $data['province'] = $district[0];
         $data['city'] = $district[1];
-        $data['area'] = $district[2];
+        $data['area'] = '';
 
         // 关联食堂
         $canteens = $_POST['canteens']?? [];
@@ -163,7 +163,7 @@ class CompanyController extends Controller
         if ($fid = DB::getScalerWithCriteria(self::$table, $cri)) {
             Helper::error('公司名称已存在 ' . $fid);
         }
-
+        $this->dobuleCheck();
         $trans = \Yii::app()->db->beginTransaction();
         try {
             if ($id) {

+ 2 - 2
protected/controllers/CompanyRelationController.php

@@ -106,13 +106,13 @@ class CompanyRelationController extends Controller
         ];
 
         $notNullField = ["name", "company_id", "phone", "weixin", "position"];
-        $allowEmptyField = [];
+        $allowEmptyField = ['weixin'];
 
         // 空字段检测
         if (!Helper::checkEmptyKey($data, $notNullField, $allowEmptyField)) {
             Helper::error('参数错误');
         }
-
+        $this->dobuleCheck();
         if ($id) {
             DB::updateById($this->table, $data, $id);
         } else {

+ 7 - 3
protected/controllers/FollowController.php

@@ -52,11 +52,15 @@ class FollowController extends Controller
         $this->tableArr = self::TYPE_TABLE_MAP[$this->type];
         $firstId = Helper::getPostInt('first_id');
         $secondId = Helper::getPostInt('second_id');
-        $chatImgs = Helper::getArrParam($_POST, 'chat_imgs', Helper::PARAM_KEY_TYPE['array_string']);
+        $chatImgs = Helper::getArrParam($_POST, 'chat_imgs', Helper::PARAM_KEY_TYPE['array_string'], []);
         $detail = $_POST['detail']?? '';
-        if (empty($firstId) || empty($secondId) || empty($detail) || empty($chatImgs)) {
-            Helper::error('参数错误');
+        if (empty($firstId) || empty($secondId)) {
+            Helper::error('请选择跟进对象');
+        }
+        if (empty($detail)) {
+            Helper::error('请填写跟进内容');
         }
+        $this->dobuleCheck();
         $this->checkAuth($firstId);
         $trans = \Yii::app()->db->beginTransaction();
         try {

+ 1 - 1
protected/controllers/SchoolController.php

@@ -152,7 +152,7 @@ class SchoolController extends Controller
         if ($fid = DB::getScalerWithCriteria(self::$table, $cri)) {
             Helper::error('学校名称已存在 ' . $fid);
         }
-
+        $this->dobuleCheck();
         $trans = \Yii::app()->db->beginTransaction();
         try {
             if ($id) {

+ 5 - 2
protected/controllers/SchoolRelationController.php

@@ -44,6 +44,9 @@ class SchoolRelationController extends Controller
             ->setSelect('r.*, s.name as school_name')
             ->setJoin('LEFT JOIN wx_school s ON s.id=r.school_id')
             ->setOrder('r.id desc');
+        if ($date = Helper::getPostDate('date')) {
+            $cri->addBetweenCondition('r.create_date', $date, $date . ' 23:59:59');
+        }
         $data = DB::getListWithCriteria($this->table, $cri);
         if (!empty($data['records'])) {
             $users = Helper::arrayColumn(
@@ -103,13 +106,13 @@ class SchoolRelationController extends Controller
         ];
 
         $notNullField = ["name", "school_id", "phone", "weixin", "position"];
-        $allowEmptyField = [];
+        $allowEmptyField = ['weixin'];
 
         // 空字段检测
         if (!Helper::checkEmptyKey($data, $notNullField, $allowEmptyField)) {
             Helper::error('参数错误');
         }
-
+        $this->dobuleCheck();
         if ($id) {
             DB::updateById($this->table, $data, $id);
         } else {

+ 13 - 1
protected/controllers/SiteController.php

@@ -29,7 +29,7 @@ class SiteController extends Controller
 		if (!($userName && $password)) {
             Helper::error('参数错误');
         }
-        $user = DB::getInfoWithCriteria('useradmin', DbCriteria::simpleCompare(['username' => $userName])->setSelect('id, password'));
+        $user = DB::getInfoWithCriteria('useradmin', DbCriteria::simpleCompare(['username' => $userName, 'status' => 1])->setSelect('id, password'));
         if (!$user || $user['password'] != md5($password)) {
             Helper::error('登入失败');
         }
@@ -113,6 +113,18 @@ class SiteController extends Controller
         echo (new DBTable(Helper::getGetString('t1')))->getDetailHtml();
     }
 
+    public function actionJson()
+    {
+        $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'])];
+        }
+        echo json_encode($newData, JSON_UNESCAPED_UNICODE);
+    }
+
     public function actionDefault()
     {
         $data = 'id: number

+ 5 - 2
protected/controllers/UseradminController.php

@@ -115,7 +115,8 @@ class UseradminController extends Controller
         ];
         DB::updateById('role', $info, $id);
         $users = DB::getListWithCriteria('useradmin', DbCriteria::simpleCompare(['role_id' => $id])->setSelect('id'))?:[];
-        foreach ($users as $user) {
+        Logger::errorMult('auth_change', $users);
+        foreach ($users['records'] as $user) {
             $this->clearAuth($user['id']);
         }
         Helper::ok();
@@ -142,6 +143,7 @@ class UseradminController extends Controller
         if ($fid = DB::getScalerWithCriteria('useradmin', $cri)) {
             Helper::error('用户名已存在 ' . $fid);
         }
+        $this->dobuleCheck(1);
         $info = [
             'username' => $username,
             'phone' => $phone,
@@ -183,7 +185,7 @@ class UseradminController extends Controller
         if ($id < 1) {
             Helper::error('参数错误');
         }
-        if (DB::getScalerWithCriteria('useradmin', DbCriteria::simpleCompare(['role_id' => $id])->setselect('id'))) {
+        if (DB::getScalerWithCriteria('useradmin', DbCriteria::simpleCompare(['role_id' => $id, 'status' => 1])->setselect('id'))) {
             Helper::error('该角色下有用户,请先删除用户');
         }
         DB::deleteById('role', $id);
@@ -198,6 +200,7 @@ class UseradminController extends Controller
         if (!$name) {
             Helper::error('角色名称不能为空');
         }
+        $this->dobuleCheck();
         if ($id) {
             DB::updateById('role', ['name' => $name, 'descr' => $descr], $id);
         } else {

+ 0 - 1
protected/include/LewaimaiAdminPingtaiAuth.php

@@ -133,7 +133,6 @@ class LewaimaiAdminPingtaiAuth
 
 
         ];
-
         return !empty($pageAuth[$page]) && self::getAuth($pageAuth[$page]);
     }
 }

+ 6 - 6
web/src/api/followApi.ts

@@ -33,8 +33,8 @@ export class followApi {
   static schoolAll(first_id:number,  second_id?:number) {
     return request.post<Api.Follow.FollowInfo[]>({
       url: 'follow/schoolAll',
-      params:{first_id, second_id}
-      // showErrorMessage: false // 不显示错误消息
+      params:{first_id, second_id},
+      showErrorMessage: false // 不显示错误消息
     })
   }
 
@@ -69,8 +69,8 @@ export class followApi {
   static canteenAll(first_id:number,  second_id?:number) {
     return request.post<Api.Follow.FollowInfo[]>({
       url: 'follow/canteenAll',
-      params:{first_id, second_id}
-      // showErrorMessage: false // 不显示错误消息
+      params:{first_id, second_id},
+      showErrorMessage: false // 不显示错误消息
     })
   }
 
@@ -105,8 +105,8 @@ export class followApi {
   static companyAll(first_id:number,  second_id?:number) {
     return request.post<Api.Follow.FollowInfo[]>({
       url: 'follow/companyAll',
-      params:{first_id, second_id}
-      // showErrorMessage: false // 不显示错误消息
+      params:{first_id, second_id},
+      showErrorMessage: false // 不显示错误消息
     })
   }
 }

+ 2 - 2
web/src/components/core/layouts/art-header-bar/index.vue

@@ -135,14 +135,14 @@
             popper-style="border: 1px solid var(--art-border-dashed-color); border-radius: calc(var(--custom-radius) / 2 + 4px); padding: 5px 16px; 5px 16px;"
           >
             <template #reference>
-              <img class="cover" :src="userInfo.avatar || '@imgs/user/avatar.webp'" alt="avatar" />
+              <img class="cover" :src="userInfo.avatar || '/src/assets/img/user/avatar.webp'" alt="avatar" />
             </template>
             <template #default>
               <div class="user-menu-box">
                 <div class="user-head">
                   <img
                     class="cover"
-                    :src="userInfo.avatar || '@imgs/user/avatar.webp'"
+                    :src="userInfo.avatar || '/src/assets/img/user/avatar.webp'"
                     style="float: left"
                   />
                   <div class="user-wrap">

+ 2 - 2
web/src/components/core/layouts/art-screen-lock/index.vue

@@ -18,7 +18,7 @@
     <div v-if="!isLock">
       <ElDialog v-model="visible" :width="370" :show-close="false" @open="handleDialogOpen">
         <div class="lock-content">
-          <img class="cover" src="@imgs/user/avatar.webp" alt="用户头像" />
+          <img class="cover" :src="userInfo.avatar || '/src/assets/img/user/avatar.webp'" alt="用户头像" />
           <div class="username">{{ userInfo.username }}</div>
           <ElForm ref="formRef" :model="formData" :rules="rules" @submit.prevent="handleLock">
             <ElFormItem prop="password">
@@ -48,7 +48,7 @@
     <!-- 解锁界面 -->
     <div v-else class="unlock-content">
       <div class="box">
-        <img class="cover" src="@imgs/user/avatar.webp" alt="用户头像" />
+        <img class="cover" :src="userInfo.avatar || '/src/assets/img/user/avatar.webp'" alt="用户头像" />
         <div class="username">{{ userInfo.username }}</div>
         <ElForm
           ref="unlockFormRef"

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

@@ -53,7 +53,7 @@
   <ElCard
       v-else
   >
-    <template #header><span style="font-weight: 400; color: #f59a23;">暂无数据</span> </template>
+    <template #header><span style="font-weight: 400; color: #f59a23;">暂无数据或权限</span> </template>
   </ElCard>
 </template>
 
@@ -96,7 +96,6 @@
       timelineData.splice(0, timelineData.length)
       let func = {"school":followApi.schoolAll, "canteen":followApi.canteenAll, "company":followApi.companyAll}[props.type]
       func(props.first_id, props.second_id).then((res:any) => delRes(res)).catch((e: any) => {
-        ElMessage.error('获取数据失败')
         console.error(`%c e == `, 'background:#41b883 ; padding:1px; color:#fff', e);
       })
     },

+ 1 - 1
web/src/locales/langs/zh.json

@@ -253,7 +253,7 @@
     },
     "company": {
       "list": "餐饮公司信息",
-      "relation": "餐饮公司关系",
+      "relation": "餐饮公司关系",
       "follow": "餐饮公司跟进记录",
       "followInfo": "餐饮公司跟进详情",
       "info": "餐饮公司详情",

+ 11 - 11
web/src/router/routes/asyncRoutes.ts

@@ -389,17 +389,6 @@ export const asyncRoutes: AppRouteRecord[] = [
                 }
             },
             {
-                path: 'user-center',
-                name: 'userCenter',
-                component: RoutesAlias.UserCenter,
-                meta: {
-                    title: 'menus.system.userCenter',
-                    isHide: true,
-                    keepAlive: false,
-                    activePath: '/system/user' // 激活菜单路径
-                }
-            },
-            {
                 id: 1102,
                 path: 'role',
                 name: 'Role',
@@ -429,4 +418,15 @@ export const asyncRoutes: AppRouteRecord[] = [
             }
         ]
     },
+    {
+        path: 'user-center',
+        name: 'userCenter',
+        component: RoutesAlias.UserCenter,
+        meta: {
+            title: 'menus.system.userCenter',
+            isHide: true,
+            keepAlive: false,
+            activePath: '/system/user' // 激活菜单路径
+        }
+    },
 ]

+ 1 - 1
web/src/router/routesAlias.ts

@@ -12,7 +12,7 @@ export enum RoutesAlias {
   Exception404 = '/index/404',
   User = '/system/user', // 账户
   Role = '/system/role', // 角色
-  UserCenter = '/system/user-center', // 用户中心
+  UserCenter = '/user-center', // 用户中心
   SchoolList = '/school/list', // 学校列表
   SchoolInfo = '/school/info', // 学校详情
   SchoolEdit = '/school/edit', // 编辑学校

+ 14 - 1
web/src/router/utils/city.ts

@@ -1,4 +1,4 @@
-export const cityJson: any[] = [
+export const areaJson: any[] = [
   {
     label: '北京市',
     value: '北京市',
@@ -5360,3 +5360,16 @@ export const cityJson: any[] = [
     ]
   }
 ]
+
+export const cityJson = areaJson.map(item => {
+  return {
+    label: item.label,
+    value: item.value,
+    children: item.children.map((child:any) => {
+      return {
+        label: child.label,
+        value: child.value
+      }
+    })
+  }
+})

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

@@ -125,7 +125,7 @@
   // 表单验证规则
   const rules: FormRules = {
     school_id: [{ required: true, message: '请选择学校', trigger: 'blur' }],
-    company_id: [{ required: true, message: '请选择餐饮公司', trigger: 'blur' }],
+    // company_id: [{ required: true, message: '请选择餐饮公司', trigger: 'blur' }],
     name: [
       { required: true, message: '请输入名称', trigger: 'blur' },
       { max: 20, message: '长度最多20个字符', trigger: 'blur' }
@@ -144,7 +144,6 @@
       }
     ],
     weixin: [
-      { required: true, message: '请输入微信号', trigger: 'blur' },
       { max: 20, message: '长度最多20个字符', trigger: 'blur' }
     ],
     memo: [{ max: 255, message: '长度最多255个字符', trigger: 'blur' }]

+ 1 - 0
web/src/views/canteen/list/index.vue

@@ -249,6 +249,7 @@ const {
       { prop:'is_direct', label:'是否直营', formatter: (row) => {
         return h(ElTag, { type: row.is_direct ? 'success' : 'danger' }, () => row.is_direct ? '直营' : '非直营')
       } },
+      { prop:'company_name', label:'餐饮公司' },
       { prop:'stall_imgs', label:'档口照片', formatter: (row) => {
         if (row.stall_imgs.length > 0) {
           return h(ElImage, {

+ 1 - 1
web/src/views/company/follow/index.vue

@@ -106,7 +106,7 @@
       // 排除 apiParams 中的属性
       excludeParams: ['daterange'],
       columnsFactory: () => [
-        { prop:'first_name', label:'校园(园区)' },
+        { prop:'first_name', label:'餐饮公司' },
         { prop:'second_name', label:'关系人' },
         { prop:'position', label:'职位' },
         { prop:'phone', label:'手机号' },

+ 12 - 1
web/src/views/company/info.vue

@@ -66,6 +66,16 @@
         <label>备注:</label> <span>{{ info.memo }}</span>
       </el-col>
 
+      <el-col v-auth="140200">
+        <label>关系人:</label>
+        <el-table border :data="info.relations || []" style="width: 100%; margin-top: 10px">
+          <el-table-column prop="name" label="姓名" />
+          <el-table-column prop="position" label="职位"  />
+          <el-table-column prop="phone" label="手机号" />
+          <el-table-column prop="weixin" label="微信号" />
+        </el-table>
+      </el-col>
+
     </el-row>
   </div>
 </template>
@@ -74,6 +84,7 @@
 // 初始化表单数据
 import {schoolApi} from "@/api/schoolApi";
 import {onMounted} from "vue";
+import {companyApi} from "@/api/companyApi";
 
 const DefaultData = <Api.School.SchoolInfo>{
   id:0,
@@ -104,7 +115,7 @@ const DefaultData = <Api.School.SchoolInfo>{
 }
 const info = reactive<Api.School.SchoolInfo>({ ...DefaultData })
 onMounted(() => {
-  schoolApi.info(parseInt(useRoute().query.id as string)).then((res) => {
+  companyApi.info(parseInt(useRoute().query.id as string)).then((res) => {
     Object.assign(info, res)
   })
 })

+ 3 - 4
web/src/views/company/list/index.vue

@@ -60,7 +60,7 @@
 
             <el-col>
               <label>地区:</label> <span>{{
-                [currentRow.province, currentRow.city, currentRow.area].join(' / ')
+                [currentRow.province, currentRow.city].join(' / ')
               }}</span>
             </el-col>
 
@@ -83,7 +83,7 @@
               <label>备注:</label> <span>{{ currentRow.memo }}</span>
             </el-col>
 
-            <el-col>
+            <el-col v-auth="140200">
               <label>关系人:</label>
               <el-table border :data="companyInfo?.relations || []" style="width: 100%; margin-top: 10px">
                 <el-table-column prop="name" label="姓名" />
@@ -245,13 +245,12 @@ const {
         width: detectDeviceType() == 'Mobile' ? 60 : 120,
         fixed: 'right', // 固定列
         formatter: (row) =>
-            useUserStore().checkAuth(110202) &&
             h('div', [
               h(ArtButtonTable, {
                 type: 'view',
                 onClick: () => view(row.id)
               }),
-              h(ArtButtonTable, {
+              useUserStore().checkAuth(110202) && h(ArtButtonTable, {
                 type: 'edit',
                 onClick: () => edit(row.id)
               }),

+ 1 - 1
web/src/views/company/list/user-search.vue

@@ -12,7 +12,7 @@
 
 <script setup lang="ts">
   import { ref, computed, onMounted, h } from 'vue'
-  import { cityJson } from '@/router/utils/city'
+  import {cityJson} from '@/router/utils/city'
 
   interface Props {
     modelValue: Record<string, any>

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

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

+ 2 - 2
web/src/views/school/edit.vue

@@ -11,7 +11,7 @@
         <ElFormItem label="地区" prop="distinct">
           <el-cascader
               v-model="formData.distinct"
-              :options="cityJson"
+              :options="areaJson"
               filterable
               placeholder="可搜索"
               clearable
@@ -191,7 +191,7 @@
   import { schoolApi as Api } from '@/api/schoolApi'
   import { onMounted } from 'vue'
   import { router } from '@/router'
-  import { cityJson } from '@/router/utils/city'
+  import { areaJson } from '@/router/utils/city'
   import { ElMessageBox } from 'element-plus'
   import { RoutesAlias } from '@/router/routesAlias'
   import {commonApi} from "@/api/commonApi";

+ 2 - 2
web/src/views/school/info.vue

@@ -66,7 +66,7 @@
         <label>备注:</label> <span>{{ info.memo }}</span>
       </el-col>
 
-      <el-col>
+      <el-col v-auth="120200">
         <label>校方关系人:</label>
         <el-table border :data="info.canteens || []" style="width: 100%; margin-top: 10px">
           <el-table-column prop="name" label="食堂" />
@@ -76,7 +76,7 @@
         </el-table>
       </el-col>
 
-      <el-col>
+      <el-col v-auth="130100">
         <label>食堂信息:</label>
         <el-table border :data="info.relations || []" style="width: 100%; margin-top: 10px">
           <el-table-column prop="name" label="姓名" />

+ 3 - 4
web/src/views/school/list/index.vue

@@ -149,7 +149,7 @@
               <label>负责人:</label> <span>{{ currentRow.bind_user_name }}</span>
             </el-col>
 
-            <el-col>
+            <el-col v-auth="120200">
               <label>校方关系人:</label>
               <el-table border :data="schoolInfo?.canteens || []" style="width: 100%; margin-top: 10px">
                 <el-table-column prop="name" label="食堂" />
@@ -159,7 +159,7 @@
               </el-table>
             </el-col>
 
-            <el-col>
+            <el-col v-auth="130100">
               <label>食堂信息:</label>
               <el-table border :data="schoolInfo?.relations || []" style="width: 100%; margin-top: 10px">
                 <el-table-column prop="name" label="姓名" />
@@ -381,13 +381,12 @@ const {
         width: detectDeviceType() == 'Mobile' ? 60 : 120,
         fixed: 'right', // 固定列
         formatter: (row) =>
-            useUserStore().checkAuth(110202) &&
             h('div', [
               h(ArtButtonTable, {
                 type: 'view',
                 onClick: () => view(row.id)
               }),
-              h(ArtButtonTable, {
+              useUserStore().checkAuth(110202) && h(ArtButtonTable, {
                 type: 'edit',
                 onClick: () => edit(row.id)
               }),

+ 2 - 2
web/src/views/school/list/user-search.vue

@@ -12,7 +12,7 @@
 
 <script setup lang="ts">
   import { ref, computed, onMounted, h } from 'vue'
-  import { cityJson } from '@/router/utils/city'
+  import { areaJson } from '@/router/utils/city'
 
   interface Props {
     modelValue: Record<string, any>
@@ -55,7 +55,7 @@
       key: 'address',
       type: 'cascader',
       props: {
-        options: cityJson,
+        options: areaJson,
         style: { width: '280px' },
         filterable: true,
         placeholder: '可搜索',

+ 1 - 0
web/src/views/school/relation/index.vue

@@ -131,6 +131,7 @@
     name: '',
     phone: '',
     school_id: parseInt(<string>useRoute().query.school_id)  || '',
+    date: useRoute().query.date || '',
   })
 
   const selectList = ref<Api.Common.SelectRelationInfo[]>([])

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

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

+ 3 - 1
web/src/views/system/user/index.vue

@@ -246,7 +246,9 @@
       cancelButtonText: '取消',
       type: 'error'
     }).then(() => {
-      UserService.deleteUser({ id: row.id })
+      UserService.deleteUser({ id: row.id }).then(() => {
+        getData()
+      })
     })
   }
 

+ 3 - 2
web/src/views/system/user/modules/user-dialog.vue

@@ -22,8 +22,8 @@
           <ElOption label="女" :value="1" />
         </ElSelect>
       </ElFormItem>
-      <ElFormItem label="角色" prop="role">
-        <ElSelect v-model="formData.role_id">
+      <ElFormItem label="角色" prop="role_id">
+        <ElSelect v-model="formData.role_id" :empty-values="[0]" :value-on-clear="0">
           <ElOption v-for="role in roleList" :key="role.id" :value="role.id" :label="role.name" />
         </ElSelect>
       </ElFormItem>
@@ -113,6 +113,7 @@
     Object.assign(formData, {
       id: isEdit.value ? row.id : 0,
       username: isEdit.value ? row.username || '' : '',
+      password: '',
       phone: isEdit.value ? row.phone || '' : '',
       sex: isEdit.value ? row.sex : 0,
       role_id: isEdit.value ? row.role_id : 0,

+ 1 - 1
web/src/views/system/user-center/index.vue

@@ -14,7 +14,7 @@
               :headers="{Authorization: useUserStore().accessToken}"
               :on-success="handleSuccess"
           >
-            <img class="avatar" :src="userInfo.avatar || '@imgs/user/avatar.webp'" title="点击上传"/>
+            <img class="avatar" :src="userInfo.avatar || '/src/assets/img/user/avatar.webp'" title="点击上传"/>
             <template #tip>
               <div class="el-upload__tip">
                 点击头像上传