gemercheung 1 年間 前
コミット
d41376c850

+ 1 - 1
src/request/URL.ts

@@ -35,7 +35,7 @@ export const alterOrganization = `/relics/relics/org/update`;
 // users
 export const addUser = `/relics/relics-scene/addUser`;
 export const changeUserStatus= `/relics/relics-scene/changeStatus`;
-export const delUser= `/relics/relics-scene/del/{id}`;
+export const delUser= `/relics/relics-scene/del/:userId`;
 export const alterUser= `/relics/relics-scene/edit`;
 export const getUserSceneInfo= `/relics/relics-scene/getUserInfo`;
 export const getUserInfoById= `/relics/relics-scene/info/{id}`;

+ 3 - 3
src/request/organization.ts

@@ -9,7 +9,7 @@ export type OrganizationType = {
     ancestors: string
     contact: string
     orderNum: number
-    orgId: number
+    orgId: number 
     parentId: number
     orgName: string
     password: string
@@ -23,12 +23,12 @@ export const addOrgFetch = (params: Partial<OrganizationType>) =>
         method: "post",
         body: JSON.stringify(params),
     });
-export const alterOrgFetch = (params: PageProps<Partial<OrganizationType>>) =>
+export const alterOrgFetch = (params: Partial<OrganizationType>) =>
     sendFetch<PageProps<OrganizationType>>(URL.alterOrganization, {
         method: "post",
         body: JSON.stringify(params),
     });
-export const delOrgFetch = (params: PageProps<Partial<OrganizationType>>) =>
+export const delOrgFetch = (params:Partial<OrganizationType>) =>
     sendFetch<PageProps<OrganizationType>>(URL.delOrganization, {
         method: "post",
         body: JSON.stringify(params),

+ 12 - 0
src/request/users.ts

@@ -32,6 +32,18 @@ export const addUserFetch = (params: any) =>
         method: "post",
         body: JSON.stringify(params),
     });
+export const editUserFetch = (params: Partial<UserType>) =>
+    sendFetch<ResPage<PageProps<UserType>>>(URL.alterUser, {
+        method: "post",
+        body: JSON.stringify(params),
+    });
+
+export const delUserFetch = (params: Pick<UserType, 'userId'>) =>
+    sendFetch<ResPage<PageProps<UserType>>>(
+        URL.delUser,
+        { method: "post", body: JSON.stringify({}) },
+        { paths: { userId: params.userId } }
+    );
 export const updateUserStatusFetch = (params: Pick<UserType, 'userId' | 'status'>) =>
     sendFetch<ResPage<PageProps<UserType>>>(URL.changeUserStatus, {
         method: "post",

+ 1 - 1
src/view/organization-edit.vue

@@ -79,7 +79,7 @@ defineExpose<QuiskExpose>({
       setParentId();
       const res = await unref(baseFormRef)?.validate();
       if (res) {
-        await props.submit(data.value as any as AddOrgParamType);
+        await props.submit(data.value as any as OrganizationType);
       }
     } else {
       throw "";

+ 5 - 9
src/view/organization.vue

@@ -64,7 +64,7 @@ import {
   addOrgFetch,
   delOrgFetch,
   alterOrgFetch,
-  PageProps
+  PageProps,
 } from "@/request";
 import type { OrganizationType } from "@/request/organization";
 import { OrganizationTypeDesc } from '@/store/organization'
@@ -72,16 +72,12 @@ import { organizationAdd, organizationEdit } from "./quisk";
 import { debounce } from "@/util";
 import { ElMessageBox } from "element-plus";
 
-const initProps: PageProps<{
-  orgName: string
-  orgId: number | null
-  type: number | null
-}> = {
+const initProps: PageProps<Partial<OrganizationType>> = {
   pageNum: 1,
   pageSize: 10,
   orgName: '',
-  orgId: null,
-  type: null,
+  orgId: undefined,
+  type: undefined,
 };
 const pageProps = ref({ ...initProps });
 const total = ref<number>(0);
@@ -117,7 +113,7 @@ const delOrganization = async (org: OrganizationType) => {
     await delOrgFetch({
       orgId: org.orgId,
       orgName: org.orgName,
-      type: org.type
+      type: org.type,
     });
     await refresh();
   }

+ 5 - 0
src/view/quisk.ts

@@ -5,6 +5,7 @@ import SceneSelect from "./scene-select.vue";
 import OrganizationAdd from "./organization-add.vue";
 import OrganizationEdit from "./organization-edit.vue";
 import UsersAdd from "./users-add.vue";
+import UsersEdit from "./users-edit.vue";
 
 export const relicsEdit = quiskMountFactory(RelicsEdit, {
   title: "创建文物",
@@ -33,4 +34,8 @@ export const organizationEdit = quiskMountFactory(OrganizationEdit, {
 export const usersAdd = quiskMountFactory(UsersAdd, {
   title: "创建用户",
   width: 520,
+});
+export const usersEdit = quiskMountFactory(UsersEdit, {
+  title: "编辑用户",
+  width: 520,
 });

+ 11 - 17
src/view/users-add.vue

@@ -1,17 +1,12 @@
 <template>
-  <!-- 
-    "nickName": "",
-  "orgId": 0,
-  "password": "",
-  "status": 0,
-  "userId": "",
-  "userName": "" 
-  -->
+
   <el-form label-width="100px" :model="data" :rules="rules" ref="baseFormRef">
-    <el-form-item label="单位名称" prop="orgName" required>
-      <!-- <el-input v-model="data.orgName" style="width: 300px" :maxlength="500" placeholder="请输入" /> -->
-      <el-autocomplete style="width: 300px" v-model="data.orgName" :fetch-suggestions="querySearch" clearable
-        class="inline-input w-50" placeholder="请输入" @select="handleSelect" />
+    <el-form-item label="单位名称" prop="orgId" required>
+      <!-- <el-autocomplete style="width: 300px" v-model="data.orgName" :fetch-suggestions="querySearch" clearable
+        class="inline-input w-50" placeholder="请输入" @select="handleSelect" /> -->
+      <el-select style="width: 300px" v-model="data.orgId" clearable>
+        <el-option :value="Number(id)" :label="value" v-for="{ value, id } in allOrgs" />
+      </el-select>
     </el-form-item>
 
     <el-form-item label="姓名" prop="nickName" required>
@@ -66,9 +61,8 @@ type SelectType = {
 const allOrgs = ref<SelectType[]>([]);
 
 const rules = reactive<FormRules>({
-
-  orgName: [
-    { required: true, message: "请输入单位名称", trigger: "select" },
+  orgId: [
+    { required: true, message: "请选择单位名称", trigger: "select" },
   ],
   nickName: [
     { required: true, message: "请输入姓名", trigger: "blur" },
@@ -89,10 +83,10 @@ const props = defineProps<{
 }>();
 const data = ref<Partial<OrganizationType> & Partial<UserType>>({
   nickName: "",
-  orgId: 0,
+  orgId: undefined,
   password: "",
   status: 0,
-  userId: 0,
+  // userId: 0,
   userName: ""
 });
 

+ 109 - 0
src/view/users-edit.vue

@@ -0,0 +1,109 @@
+<template>
+
+  <el-form label-width="100px" :model="data" :rules="rules" ref="baseFormRef">
+    <el-form-item label="单位名称" prop="orgId" required>
+      <!-- <el-autocomplete style="width: 300px" v-model="data.orgName" :fetch-suggestions="querySearch" clearable
+        class="inline-input w-50" placeholder="请输入" @select="handleSelect" /> -->
+      <el-select style="width: 300px" v-model="data.orgId" clearable>
+        <el-option :value="Number(id)" :label="value" v-for="{ value, id } in allOrgs" />
+      </el-select>
+    </el-form-item>
+
+    <el-form-item label="姓名" prop="nickName" required>
+      <el-input v-model="data.nickName" style="width: 300px" :maxlength="500" placeholder="请输入" />
+    </el-form-item>
+  </el-form>
+</template>
+
+<script setup lang="ts">
+import { QuiskExpose } from "@/helper/mount";
+import type { FormInstance, FormRules } from "element-plus";
+// import { ElMessage } from "element-plus";
+import type { OrganizationType } from '@/request/organization'
+import {
+  getOrgListFetch,
+
+  UserType
+} from "@/request";
+
+import { ref, reactive, unref, onMounted, watchEffect } from "vue";
+
+
+const baseFormRef = ref<FormInstance>();
+
+type SelectType = {
+  value: string, id: number
+}
+
+const allOrgs = ref<SelectType[]>([]);
+
+const rules = reactive<FormRules>({
+  orgId: [
+    { required: true, message: "请选择单位名称", trigger: "select" },
+  ],
+  nickName: [
+    { required: true, message: "请输入姓名", trigger: "blur" },
+    // { required: true, pattern: /^1[3456789]\d{9}$/, message: "请输入正确手机号", trigger: "blur" },
+  ],
+  // userName: [
+  //   { required: true, message: "请输入账号", trigger: "blur" },
+  //   // { required: true, pattern: /^1[3456789]\d{9}$/, message: "请输入正确手机号", trigger: "blur" },
+  // ],
+  // password: [
+  //   { required: true, pattern: /^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,16}$/, message: "请输入8-16位数字、字母大小写组合", trigger: "blur" },
+  //   { required: true, min: 8, message: '密码太短!', trigger: "blur" },
+  // ],
+},)
+
+const props = defineProps<{
+  user: UserType,
+  submit: (data: UserType) => Promise<any>;
+}>();
+const data = ref<Partial<OrganizationType> & Partial<UserType>>({
+  nickName: "",
+  orgId: undefined,
+  password: "",
+  status: 0,
+  // userId: 0,
+  userName: ""
+});
+
+onMounted(async () => {
+  const data = await getOrgListFetch({
+    pageNum: 1,
+    pageSize: 10000,
+  })
+  console.log('allOrgs', data.records);
+  allOrgs.value = Array.from(data.records).map((item: OrganizationType) => {
+    const i: SelectType = { value: item['orgName'], id: item['orgId'] }
+    return i
+  });
+
+})
+
+// const setParentId = () => {
+//   if (user.value) {
+//     const isSuper = user.value.roles.filter(item => item.roleKey === "super_admin").length > 0;
+//     data.value.parentId = isSuper ? 0 : Number(user.value.orgId)
+//   }
+// }
+watchEffect(() => {
+  if (props.user) {
+    data.value = { ...props.user }
+  }
+})
+
+defineExpose<QuiskExpose>({
+  async submit() {
+    if (unref(baseFormRef)) {
+
+      const res = await unref(baseFormRef)?.validate();
+      if (res) {
+        await props.submit(data.value as any as UserType);
+      }
+    } else {
+      throw "";
+    }
+  },
+});
+</script>

+ 18 - 6
src/view/users.vue

@@ -65,13 +65,15 @@ import { onActivated, ref, watch } from "vue";
 import {
   getUserpageFetch,
   addUserFetch,
+  delUserFetch,
   updateUserStatusFetch,
+  editUserFetch,
   PageProps,
   UserType
 } from "@/request";
-import { usersAdd } from "./quisk";
+import { usersAdd, usersEdit } from "./quisk";
 import { openLoading, closeLoading } from "@/helper/loading";
-
+import { ElMessageBox } from "element-plus";
 import { debounce } from "@/util";
 
 const initProps: PageProps<Partial<Pick<UserType, "userName" | "orgName">>> = {
@@ -95,12 +97,22 @@ const addHandler = async () => {
   await usersAdd({ submit: addUserFetch });
   await refresh();
 }
-const editHandler = (row: UserType) => {
-
+const editHandler = async(row: UserType) => {
+  await usersEdit({ user: row, submit: editUserFetch });
+  await refresh();
 }
-const delHandler = (row: UserType) => {
-
+const delHandler = async (row: UserType) => {
+  const ok = await ElMessageBox.confirm("确定要删除吗", {
+    type: "warning",
+  });
+  if (ok) {
+    await delUserFetch({
+      userId: row.userId
+    });
+    await refresh();
+  }
 }
+
 const beforeChangeStatus = (row: UserType): Promise<boolean> => {
   openLoading()
   return new Promise(async (resolve, reject) => {