Ver Fonte

添加上传图片,调整上传文件逻辑等

sgc há 3 semanas atrás
pai
commit
4e0f7d43d5

+ 1 - 1
src/api/config/servicePort.ts

@@ -1,4 +1,4 @@
 // 后端微服务模块前缀
 export const PORT1 = "/sys";
 export const PORT2 = "/hooks";
-export const PORT_NONE = "";
+export const PORT_NONE = "/alienStore";

+ 12 - 4
src/views/lawyerManagement/lawFirm/components/ImportDialog.vue

@@ -15,7 +15,7 @@
             :auto-upload="false"
             :limit="1"
             :show-file-list="true"
-            :before-upload="beforeUpload"
+            :on-change="handleFileChange"
             :on-exceed="handleFileExceed"
             :on-remove="handleFileRemove"
             accept=".xls,.xlsx"
@@ -83,7 +83,7 @@ const handleDownload = async () => {
   }
 };
 
-const beforeUpload: UploadProps["beforeUpload"] = file => {
+const validateAndSetFile = (file: UploadRawFile) => {
   const isExcel =
     file.type === "application/vnd.ms-excel" || file.type === "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
   const isLimit = file.size / 1024 / 1024 <= fileLimitMB.value;
@@ -96,13 +96,21 @@ const beforeUpload: UploadProps["beforeUpload"] = file => {
     return false;
   }
   selectedFile.value = file;
-  return false;
+  return true;
+};
+
+const handleFileChange: UploadProps["onChange"] = uploadFile => {
+  const file = uploadFile.raw as UploadRawFile | undefined;
+  if (!file) return;
+  if (!validateAndSetFile(file)) {
+    uploadRef.value?.clearFiles();
+  }
 };
 
 const handleFileExceed: UploadProps["onExceed"] = files => {
   uploadRef.value?.clearFiles();
   const file = files[0] as UploadRawFile;
-  selectedFile.value = file;
+  if (!validateAndSetFile(file)) return;
   uploadRef.value?.handleStart(file);
 };
 

+ 32 - 6
src/views/lawyerManagement/lawyer/components/LawyerDialog.vue

@@ -36,14 +36,14 @@
         <el-form-item label="接单状态" prop="status">
           <el-switch v-model="form.status" :active-value="1" :inactive-value="0" />
         </el-form-item>
-        <el-form-item label="收款账号" prop="paymentNum">
-          <el-input v-model="form.paymentNum" placeholder="请输入收款账号" clearable />
-        </el-form-item>
         <el-form-item label="所属律所" prop="lawFirmId">
           <el-select v-model="form.lawFirmId" placeholder="请选择所属律所" filterable>
             <el-option v-for="item in lawFirmOptions" :key="item.value" :label="item.label" :value="item.value" />
           </el-select>
         </el-form-item>
+        <el-form-item label="收款账号" prop="paymentNum">
+          <el-input v-model="form.paymentNum" placeholder="请选择所属律所后自动带出" disabled />
+        </el-form-item>
       </el-form>
     </div>
     <template #footer>
@@ -54,7 +54,7 @@
 </template>
 
 <script setup lang="ts">
-import { ref, reactive, computed, nextTick } from "vue";
+import { ref, reactive, computed, nextTick, watch } from "vue";
 import type { FormInstance } from "element-plus";
 
 interface DialogOptions {
@@ -64,7 +64,7 @@ interface DialogOptions {
 }
 
 const props = defineProps<{
-  lawFirmOptions: { label: string; value: string | number }[];
+  lawFirmOptions: { label: string; value: string | number; paymentAccount?: string }[];
   sceneOptions: any[];
   professionalOptions: { label: string | number; value: string | number }[];
 }>();
@@ -99,7 +99,7 @@ const rules = reactive({
   practiceStartDate: [{ required: true, message: "请输入从业时间", trigger: "blur" }],
   // expertiseAreaInfo: [{ required: true, message: "请输入专业领域", trigger: "blur" }],
   firstLevelScenario: [{ required: true, message: "请选择法律场景", trigger: "change" }],
-  paymentNum: [{ required: true, message: "请输入收款账号", trigger: "blur" }],
+  paymentNum: [{ required: true, message: "请先选择所属律所获取收款账号", trigger: "change" }],
   lawFirmId: [{ required: true, message: "请选择所属律所", trigger: "change" }]
 });
 
@@ -132,6 +132,32 @@ const open = (payload: DialogOptions) => {
   nextTick(() => formRef.value?.clearValidate());
 };
 
+const syncPaymentAccount = () => {
+  if (!form.lawFirmId) {
+    form.paymentNum = "";
+    formRef.value?.validateField("paymentNum").catch(() => {});
+    return;
+  }
+  const target = props.lawFirmOptions.find(option => option.value === form.lawFirmId);
+  form.paymentNum = (target?.paymentAccount || "").trim();
+  formRef.value?.validateField("paymentNum").catch(() => {});
+};
+
+watch(
+  () => form.lawFirmId,
+  () => {
+    syncPaymentAccount();
+  }
+);
+
+watch(
+  () => props.lawFirmOptions,
+  () => {
+    if (form.lawFirmId) syncPaymentAccount();
+  },
+  { deep: true }
+);
+
 const emits = defineEmits<{
   success: [];
 }>();

+ 24 - 4
src/views/lawyerManagement/lawyer/index.vue

@@ -39,7 +39,7 @@ import { useUserStore } from "@/stores/modules/user";
 
 const proTable = ref<ProTableInstance>();
 const lawyerDialogRef = ref<InstanceType<typeof LawyerDialog>>();
-const lawFirmOptions = ref<{ label: string; value: string | number }[]>([]);
+const lawFirmOptions = ref<{ label: string; value: string | number; paymentAccount?: string }[]>([]);
 const sceneOptions = ref<any[]>([]);
 const professionalOptions = ref<{ label: string; value: string | number }[]>([]);
 
@@ -112,7 +112,16 @@ const handleCreate = () => {
   lawyerDialogRef.value?.open({
     title: "新增律师",
     onSubmit: async payload => {
-      await addLawyerUser(payload);
+      let params = {
+        name: payload.name,
+        phone: payload.phone,
+        practiceStartDate: payload.practiceStartDate,
+        firstLevelScenario: payload.firstLevelScenario,
+        status: payload.status,
+        paymentNum: payload.paymentNum,
+        lawFirmId: payload.lawFirmId
+      };
+      await addLawyerUser(params);
       ElMessage.success("新增成功");
       refreshTable();
     }
@@ -125,7 +134,17 @@ const handleEdit = (row: any) => {
     title: "编辑律师",
     row,
     onSubmit: async payload => {
-      await editLawyerUser(payload);
+      let params = {
+        id: payload.id,
+        name: payload.name,
+        phone: payload.phone,
+        practiceStartDate: payload.practiceStartDate,
+        firstLevelScenario: payload.firstLevelScenario,
+        status: payload.status,
+        paymentNum: payload.paymentNum,
+        lawFirmId: payload.lawFirmId
+      };
+      await editLawyerUser(params);
       ElMessage.success("编辑成功");
       refreshTable();
     }
@@ -151,7 +170,8 @@ const fetchLawFirmOptions = async () => {
     const listSource = res.data.records || [];
     lawFirmOptions.value = listSource.map((item: any) => ({
       label: item.firmName,
-      value: item.id
+      value: item.id,
+      paymentAccount: item.paymentAccount
     }));
   } catch (error) {
     console.error("获取律所列表失败", error);

+ 3 - 2
src/views/lawyerManagement/legalScene/index.vue

@@ -168,6 +168,7 @@ const handleCreate = () => {
       let params = {
         name: payload.name,
         status: payload.status,
+        imgUrl: payload.imgUrl,
         level: 1
       };
       await addScene(params);
@@ -204,12 +205,12 @@ const handleEdit = (row: any) => {
     title: "编辑场景",
     row,
     onSubmit: async payload => {
-      console.log("payload edit", payload);
       let params = {
         name: payload.name,
         id: payload.id,
         status: payload.status,
-        level: payload.level
+        level: payload.level,
+        imgUrl: payload.imgUrl
       };
       await editScene(params);
       ElMessage.success("编辑成功");