sunshibo 1 неделя назад
Родитель
Сommit
eb8e057a6b

+ 10 - 10
src/api/modules/login.ts

@@ -19,17 +19,17 @@ export const loginApi = (params: Login.ReqLoginForm): Promise<{ data: Login.ResL
 
 // 获取菜单列表
 export const getAuthMenuListApi = (params: any = {}) => {
-  // const userStore = useUserStore();
-  // const requestParams = { ...params };
-  // const loginAccount = userStore.userInfo?.name?.trim();
-  // if (loginAccount && loginAccount.toLowerCase() === "admin") {
-  //   requestParams.type = 1;
-  // } else {
-  //   requestParams.type = 0;
-  // }
-  // return http.get<Menu.MenuOptions[]>(PORT1 + `/routingInfo`, requestParams, { loading: false });
+  const userStore = useUserStore();
+  const requestParams = { ...params };
+  const loginAccount = userStore.userInfo?.name?.trim();
+  if (loginAccount && loginAccount.toLowerCase() === "admin") {
+    requestParams.type = 1;
+  } else {
+    requestParams.type = 0;
+  }
+  return http.get<Menu.MenuOptions[]>(PORT1 + `/routingInfo`, requestParams, { loading: false });
   // 如果想让菜单变为本地数据,注释上一行代码,并引入本地 authMenuList.json 数据
-  return authMenuList;
+  // return authMenuList;
 };
 
 // 获取按钮权限

+ 1 - 1
src/assets/json/authMenuList.json

@@ -123,7 +123,7 @@
         "icon": "UserFilled",
         "title": "用户管理",
         "isLink": "",
-        "isHide": true,
+        "isHide": false,
         "isFull": false,
         "isAffix": false,
         "isKeepAlive": false

+ 1 - 1
src/layouts/components/Header/components/Avatar.vue

@@ -44,7 +44,7 @@ const logout = () => {
     type: "warning"
   }).then(async () => {
     // 1.执行退出登录接口(需携带登录名)
-    const loginName = userStore.userInfo?.name || "";
+    const loginName = userStore.userInfo?.name || "admin";
     await logoutApi({ userName: loginName });
 
     // 2.清除 Token

+ 15 - 20
src/views/lawyerManagement/lawFirm/components/LawFirmDialog.vue

@@ -14,9 +14,8 @@
         <el-form-item label="社会统一信用代码" prop="creditCode">
           <el-input v-model="form.creditCode" placeholder="请输入社会统一信用代码" clearable />
         </el-form-item>
-        <el-form-item label="信息服务费" prop="platformCommissionRatio">
-          <el-input-number v-model="form.platformCommissionRatio" :min="1" :max="99" :step="1" controls-position="right" />
-          <span class="form-tip">仅支持 1 - 99 的整数</span>
+        <el-form-item label="电话号码" prop="phone">
+          <el-input v-model="form.phone" placeholder="请输入电话号码" clearable maxlength="11" />
         </el-form-item>
         <el-form-item label="收款账号" prop="paymentAccount">
           <div class="bank-card-input">
@@ -57,23 +56,19 @@ const form = reactive({
   address: "",
   creditCode: "",
   paymentAccount: "",
-  platformCommissionRatio: 3
+  phone: ""
 });
 const bankCardInput = ref("");
 const bankCardReg = /^([1-9]\d{15}|\d{17}|\d{18}|\d{19})$/;
 
-const validateServiceFee = (_rule: any, value: number | string, callback: (err?: Error) => void) => {
-  if (value === undefined || value === null || value === "") {
-    callback(new Error("请输入信息服务费"));
+const validatePhoneNumber = (_rule: any, value: string, callback: (err?: Error) => void) => {
+  if (!value || value.trim() === "") {
+    callback(new Error("请输入电话号码"));
     return;
   }
-  const numericValue = Number(value);
-  if (!Number.isFinite(numericValue) || !Number.isInteger(numericValue)) {
-    callback(new Error("信息服务费需为整数"));
-    return;
-  }
-  if (numericValue < 1 || numericValue > 99) {
-    callback(new Error("信息服务费范围为 1-99"));
+  const phoneReg = /^1[3-9]\d{9}$/;
+  if (!phoneReg.test(value)) {
+    callback(new Error("请输入正确的手机号码"));
     return;
   }
   callback();
@@ -100,9 +95,9 @@ const rules = reactive({
       trigger: "change"
     }
   ],
-  platformCommissionRatio: [
-    { required: true, message: "请输入信息服务费", trigger: "change" },
-    { validator: validateServiceFee, trigger: "change" }
+  phone: [
+    { required: true, message: "请输入电话号码", trigger: "blur" },
+    { validator: validatePhoneNumber, trigger: "blur" }
   ]
 });
 
@@ -115,7 +110,7 @@ const resetForm = () => {
   form.address = "";
   form.creditCode = "";
   form.paymentAccount = "";
-  form.platformCommissionRatio = 3;
+  form.phone = "";
   bankCardInput.value = "";
 };
 
@@ -125,10 +120,10 @@ const open = (payload: DialogOptions) => {
   if (payload.row) {
     Object.assign(form, payload.row);
     bankCardInput.value = (form.paymentAccount || "").replace(/\s+/g, "");
-    form.platformCommissionRatio = Number(payload.row.platformCommissionRatio ?? 3);
+    form.phone = payload.row.phone || "";
     form.creditCode = payload.row.creditCode || "";
   } else {
-    form.platformCommissionRatio = 3;
+    form.phone = "";
     form.creditCode = "";
     bankCardInput.value = "";
     form.paymentAccount = "";

+ 7 - 10
src/views/lawyerManagement/lawFirm/index.vue

@@ -4,7 +4,7 @@
       <template #tableHeader>
         <el-button type="primary" :icon="CirclePlus" :disabled="!isAdmin" @click="handleCreate"> 新增律所 </el-button>
         <el-button type="primary" :icon="Upload" :disabled="!isAdmin" @click="handleImport"> 导入 </el-button>
-        <el-button
+        <!-- <el-button
           type="primary"
           :icon="Download"
           :loading="exportLoading"
@@ -12,7 +12,7 @@
           @click="handleExport"
         >
           导出
-        </el-button>
+        </el-button> -->
         <el-button
           type="primary"
           :icon="Download"
@@ -95,13 +95,10 @@ const columns = reactive<ColumnProps<any>[]>([
   { label: "位置", prop: "address" },
   { label: "统一社会信用代码", prop: "creditCode", width: 220 },
   {
-    label: "信息服务费",
-    prop: "platformCommissionRatio",
+    label: "电话号码",
+    prop: "phone",
     width: 160,
-    align: "center",
-    render: scope => {
-      return `${scope.row.platformCommissionRatio ?? "0"}%`;
-    }
+    align: "center"
   },
   { label: "收款账号", prop: "paymentAccount", align: "center" },
   { label: "操作", prop: "operation", width: 200, fixed: "right" }
@@ -156,7 +153,7 @@ const handleCreate = () => {
         creditCode: payload.creditCode,
         directorName: payload.directorName,
         firmName: payload.firmName,
-        platformCommissionRatio: payload.platformCommissionRatio,
+        phone: payload.phone,
         paymentList: [
           {
             address: payload.address,
@@ -186,7 +183,7 @@ const handleEdit = (row: any) => {
         creditCode: payload.creditCode,
         directorName: payload.directorName,
         firmName: payload.firmName,
-        platformCommissionRatio: payload.platformCommissionRatio,
+        phone: payload.phone,
         paymentList: [
           {
             id: row.id,

+ 9 - 9
src/views/lawyerManagement/reconciliation/index.vue

@@ -65,13 +65,13 @@ const columns = reactive<ColumnProps[]>([
   { label: "律所名称", prop: "firmName", minWidth: 280, search: { el: "input", props: { placeholder: "请输入律所名称" } } },
   { label: "订单数量(元)", prop: "totalOrderCount", width: 260, align: "center" },
   { label: "订单金额(元)", prop: "totalOrderAmountYuan", width: 260, align: "center" },
-  {
-    label: "平台信息服务费",
-    prop: "platformServiceFeeYuan",
-    width: 260,
-    align: "center",
-    render: scope => scope.row.platformServiceFeeYuan * 100 + "%"
-  },
+  // {
+  //   label: "平台信息服务费",
+  //   prop: "platformServiceFeeYuan",
+  //   width: 260,
+  //   align: "center",
+  //   render: scope => scope.row.platformServiceFeeYuan * 100 + "%"
+  // },
   {
     label: "订单日期",
     prop: "orderTime",
@@ -146,8 +146,8 @@ const filters = reactive({
 
 const summaryCards = computed(() => [
   { label: "总订单数量", value: summaryData.value.totalOrderCount },
-  { label: "总订单金额", value: formatCurrency(summaryData.value.totalOrderAmountYuan) },
-  { label: "平台信息服务费", value: formatCurrency(summaryData.value.platformServiceFeeYuan) }
+  { label: "总订单金额", value: formatCurrency(summaryData.value.totalOrderAmountYuan) }
+  // { label: "平台信息服务费", value: formatCurrency(summaryData.value.platformServiceFeeYuan) }
 ]);
 
 const refreshTable = () => {

+ 9 - 9
src/views/lawyerManagement/reconciliation/lawyerDetail.vue

@@ -91,13 +91,13 @@ const columns = reactive<ColumnProps[]>([
   { label: "律师信息", prop: "lawyerName", minWidth: 280, search: { el: "input", props: { placeholder: "请输入律师姓名" } } },
   { label: "订单数量", prop: "totalOrderCount", width: 260, align: "center" },
   { label: "订单金额", prop: "totalOrderAmountYuan", width: 260, align: "center" },
-  {
-    label: "平台信息服务费",
-    prop: "platformServiceFeeYuan",
-    width: 260,
-    align: "center",
-    render: scope => scope.row.platformServiceFeeYuan * 100 + "%"
-  },
+  // {
+  //   label: "平台信息服务费",
+  //   prop: "platformServiceFeeYuan",
+  //   width: 260,
+  //   align: "center",
+  //   render: scope => scope.row.platformServiceFeeYuan * 100 + "%"
+  // },
   {
     label: "订单日期",
     prop: "orderTime",
@@ -175,8 +175,8 @@ const filters = reactive({
 
 const summaryCards = computed(() => [
   { label: "总订单数量", value: summaryData.value.totalOrderCount },
-  { label: "总订单金额", value: formatCurrency(summaryData.value.totalOrderAmountYuan) },
-  { label: "平台信息服务费", value: formatCurrency(summaryData.value.platformServiceFeeYuan) }
+  { label: "总订单金额", value: formatCurrency(summaryData.value.totalOrderAmountYuan) }
+  // { label: "平台信息服务费", value: formatCurrency(summaryData.value.platformServiceFeeYuan) }
 ]);
 
 const refreshTable = () => {

+ 18 - 5
src/views/userManagement/components/UserDialog.vue

@@ -1,9 +1,6 @@
 <template>
   <el-dialog v-model="visible" :title="dialogTitle" width="640px" destroy-on-close>
     <el-form ref="formRef" class="dialog-form" :model="form" :rules="rules" label-width="100px" label-suffix=":">
-      <el-form-item label="登录账号" prop="userName">
-        <el-input v-model="form.userName" placeholder="请输入登录账号" clearable />
-      </el-form-item>
       <el-form-item label="关联律所" prop="roleId">
         <el-select
           v-model="form.roleId"
@@ -13,11 +10,15 @@
           reserve-keyword
           :remote-method="handleFirmRemote"
           :loading="props.lawFirmLoading"
+          :disabled="options.mode === 'edit'"
           @visible-change="handleFirmDropdown"
         >
-          <el-option v-for="item in lawFirmOptions" :key="item.value" :label="item.label" :value="item.value" />
+          <el-option v-for="item in props.lawFirmOptions" :key="item.value" :label="item.label" :value="item.value" />
         </el-select>
       </el-form-item>
+      <el-form-item label="登录账号" prop="userName">
+        <el-input v-model="form.userName" placeholder="请先选择关联律所" disabled />
+      </el-form-item>
       <el-form-item label="登录密码" prop="userPassword">
         <el-input v-model="form.userPassword" placeholder="请输入登录密码" type="userPassword" show-user-password />
       </el-form-item>
@@ -48,7 +49,7 @@ interface DialogOptions {
 }
 
 const props = defineProps<{
-  lawFirmOptions: { label: string; value: string | number }[];
+  lawFirmOptions: { label: string; value: string | number; phone?: string }[];
   lawFirmLoading?: boolean;
   fetchLawFirms?: (keyword?: string) => Promise<void>;
 }>();
@@ -123,6 +124,18 @@ watch(
   { immediate: true }
 );
 
+// 监听关联律所变化,自动填充电话号码到登录账号
+watch(
+  () => form.roleId,
+  newRoleId => {
+    if (!newRoleId) return;
+    const target = props.lawFirmOptions.find(item => item.value === newRoleId);
+    if (target && target.phone) {
+      form.userName = target.phone;
+    }
+  }
+);
+
 const emits = defineEmits<{
   success: [];
 }>();

+ 3 - 2
src/views/userManagement/index.vue

@@ -33,7 +33,7 @@ import UserDialog from "./components/UserDialog.vue";
 
 const proTable = ref<ProTableInstance>();
 const userDialogRef = ref<InstanceType<typeof UserDialog>>();
-const lawFirmOptions = ref<{ label: string; value: string | number }[]>([]);
+const lawFirmOptions = ref<{ label: string; value: string | number; phone?: string }[]>([]);
 const lawFirmLoading = ref(false);
 const lawFirmMap = ref<Record<string, string>>({});
 type UserRow = Partial<User.ResUserList> & { userName?: string };
@@ -144,7 +144,8 @@ const fetchLawFirmOptions = async (keyword = "") => {
     const list = res?.data || [];
     lawFirmOptions.value = list.map((item: any) => ({
       label: item.firmName,
-      value: item.id
+      value: item.id,
+      phone: item.phone || ""
     }));
     if (list.length) {
       const map = { ...lawFirmMap.value };