From 48b04d85a2c548399bcb4ed72d8c00bd45f2e808 Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期二, 28 十月 2025 13:13:48 +0800
Subject: [PATCH] feat: init

---
 .vscode/extensions.json                                       |    3 
 src/views/CustomerManage/constants/customerManage.ts          |   54 +++++++
 src/views/CustomerManage/CustomerManage.vue                   |  144 ++++++++++++++++++++
 src/views/CustomerManage/components/AddOrEditCustomerView.vue |   47 ++++++
 src/hooks/useEvent.ts                                         |    2 
 .vscode/settings.json                                         |   39 +++++
 src/views/CustomerManage/AddOrEditCustomer.vue                |   19 ++
 src/router/index.ts                                           |   52 +++++++
 src/views/CustomerManage/CustomerDetail.vue                   |   11 +
 src/views/CustomerManage/constants/index.ts                   |    1 
 10 files changed, 371 insertions(+), 1 deletions(-)

diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..a7cea0b
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,3 @@
+{
+  "recommendations": ["Vue.volar"]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..6577781
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,39 @@
+{
+  "[json]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[typescript]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[jsonc]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[javascript]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[vue]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+  "[scss]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+
+  "[html]": {
+    "editor.defaultFormatter": "esbenp.prettier-vscode"
+  },
+
+  "editor.codeActionsOnSave": {
+    "source.fixAll": "explicit",
+    "source.fixAll.eslint": "explicit",
+    "source.fixAll.stylelint": "explicit"
+  },
+
+  "editor.formatOnSave": true,
+  "editor.defaultFormatter": "esbenp.prettier-vscode",
+
+  "eslint.enable": true,
+  "eslint.validate": ["vue", "ts", "tsx"],
+
+  "stylelint.enable": true,
+  "stylelint.validate": ["css", "less", "postcss", "scss", "vue", "sass"]
+}
diff --git a/src/hooks/useEvent.ts b/src/hooks/useEvent.ts
index 3d01572..7c89841 100644
--- a/src/hooks/useEvent.ts
+++ b/src/hooks/useEvent.ts
@@ -7,6 +7,8 @@
   'taskManage:edit': any;
   sureTaskSettlementOrder: any;
   checkReceiveTask: any;
+  'customerManage:add': any;
+  'customerManage:edit': any;
 };
 
 export type GlobalEventListener<T extends keyof GlobalEvent> = (payload: GlobalEvent[T]) => any;
diff --git a/src/router/index.ts b/src/router/index.ts
index 51af27c..ca65353 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -96,6 +96,56 @@
     },
   },
   {
+    path: '/CustomerManage',
+    redirect: 'noRedirect',
+    component: Layout,
+    hidden: false,
+    alwaysShow: true,
+    meta: {
+      rank: 10010,
+      title: '瀹㈡埛绠$悊',
+      rootMenu: true,
+      icon: 'home',
+    },
+    children: [
+      {
+        path: '/CustomerManage',
+        name: 'CustomerManage',
+        hidden: false,
+        alwaysShow: true,
+        component: () => import('@/views/CustomerManage/CustomerManage.vue'),
+        meta: {
+          rank: 10011,
+          title: '瀹㈡埛绠$悊',
+          // rootMenu: true,
+          icon: 'home',
+        },
+      },
+      {
+        path: '/AddOrEditCustomer/:id?',
+        name: 'AddOrEditCustomer',
+        hidden: false,
+        alwaysShow: true,
+        component: () => import('@/views/CustomerManage/AddOrEditCustomer.vue'),
+        meta: {
+          rank: 10011,
+          title: '鏂板瀹㈡埛',
+        },
+      },
+      {
+        path: '/CustomerDetail/:id',
+        name: 'CustomerDetail',
+        hidden: false,
+        alwaysShow: true,
+        component: () => import('@/views/CustomerManage/CustomerDetail.vue'),
+        meta: {
+          rank: 10011,
+          title: '瀹㈡埛璇︽儏',
+        },
+      },
+    ],
+  },
+  {
     path: '/FlexJobManage',
     redirect: 'noRedirect',
     component: Layout,
@@ -361,7 +411,7 @@
         component: () => import('@/views/FinanceManage/FinanceManage.vue'),
         meta: {
           rank: 10071,
-          title: '璐㈠姟绠$悊',
+          title: '鍙戞斁鏄庣粏',
           // rootMenu: true,
           icon: 'home',
         },
diff --git a/src/views/CustomerManage/AddOrEditCustomer.vue b/src/views/CustomerManage/AddOrEditCustomer.vue
new file mode 100644
index 0000000..219c8f0
--- /dev/null
+++ b/src/views/CustomerManage/AddOrEditCustomer.vue
@@ -0,0 +1,19 @@
+<template>
+  <AddOrEditCustomerView :isDetail="false"/>
+</template>
+
+<script lang="ts">
+import { setPageTitle } from '@/utils';
+
+export default defineComponent({
+  name: 'AddOrEditCustomer',
+  beforeRouteEnter(to) {
+    to.meta.title = to.params.id ? '缂栬緫瀹㈡埛' : '鏂板瀹㈡埛';
+    setPageTitle(to.meta.title as string);
+  },
+});
+</script>
+
+<script setup lang="ts">
+import AddOrEditCustomerView from './components/AddOrEditCustomerView.vue';
+</script>
diff --git a/src/views/CustomerManage/CustomerDetail.vue b/src/views/CustomerManage/CustomerDetail.vue
new file mode 100644
index 0000000..10fc45d
--- /dev/null
+++ b/src/views/CustomerManage/CustomerDetail.vue
@@ -0,0 +1,11 @@
+<template>
+  <AddOrEditCustomerView isDetail />
+</template>
+
+<script setup lang="ts">
+import AddOrEditCustomerView from './components/AddOrEditCustomerView.vue';
+
+defineOptions({
+  name: 'CustomerDetail',
+});
+</script>
diff --git a/src/views/CustomerManage/CustomerManage.vue b/src/views/CustomerManage/CustomerManage.vue
new file mode 100644
index 0000000..b255d5c
--- /dev/null
+++ b/src/views/CustomerManage/CustomerManage.vue
@@ -0,0 +1,144 @@
+<template>
+  <LoadingLayout :loading="state.loading">
+    <AppContainer>
+      <ProTableQueryFilterBar @on-reset="reset">
+        <template #query>
+          <QueryFilterItem>
+            <SearchInput
+              v-model="extraParamState.keywords"
+              style="width: 300px"
+              placeholder="浼佷笟鍚嶇О/淇$敤浠g爜/濮撳悕/鐢佃瘽"
+              @on-click-search="getList"
+            >
+            </SearchInput>
+          </QueryFilterItem>
+        </template>
+        <template #btn>
+          <el-button
+            @click="goAddOrEdit()"
+            icon="Plus"
+            type="primary"
+            >鏂板瀹㈡埛</el-button
+          >
+        </template>
+      </ProTableQueryFilterBar>
+      <ProTableV2 v-bind="proTableProps" :columns="CustomerManageColumns" :operationBtns="operationBtns">
+      </ProTableV2>
+    </AppContainer>
+  </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+  ProTableQueryFilterBar,
+  OperationBtnType,
+  ProTableV2,
+  SearchInput,
+  LoadingLayout,
+  AppContainer,
+  QueryFilterItem,
+  useTable,
+  useFormDialog,
+  defineOperationBtns
+} from '@bole-core/components';
+import * as taskServices from '@/services/api/task';
+import {CustomerManageColumns} from './constants';
+
+defineOptions({
+  name: 'CustomerManage',
+});
+
+const operationBtns=defineOperationBtns([
+  {
+    data: {
+      enCode: 'detailBtn',
+      name: '鏌ョ湅',
+    },
+    emits: {
+      onClick: (role) => goDetail(role),
+    },
+  },
+  {
+    data: {
+      enCode: 'editBtn',
+      name: '缂栬緫',
+    },
+    emits: {
+      onClick: (role) => goAddOrEdit(role),
+    },
+  },
+])
+
+const BaseState = {
+  loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+const eventContext = useGlobalEventContext();
+
+eventContext.addEvent('customerManage:add', () => {
+  getList();
+});
+
+eventContext.addEvent('customerManage:edit', () => {
+  getList(paginationState.pageIndex);
+});
+
+onMounted(async () => {
+  await getList();
+  state.loading = false;
+});
+
+const {
+  getDataSource: getList,
+  proTableProps,
+  paginationState,
+  extraParamState,
+  reset,
+} = useTable(
+  async ({ pageIndex, pageSize }, extraParamState) => {
+    try {
+      let params: API.GetTaskInfosQuery = {
+        pageModel: {
+          rows: pageSize,
+          page: pageIndex,
+          orderInput: extraParamState.orderInput,
+        },
+        keywords: extraParamState.keywords,
+      };
+
+      let res = await taskServices.getTaskInfos(params, {
+        showLoading: !state.loading,
+      });
+      return res;
+    } catch (error) {}
+  },
+  {
+    defaultExtraParams: {
+      keywords: '',
+        orderInput: [{ property: 'id', order: EnumPagedListOrder.Desc }],
+    },
+  }
+);
+
+const router=useRouter();
+
+function goAddOrEdit(row?: API.GetTaskInfosQueryResultItem) {
+  router.push({
+    name: 'AddOrEditCustomer',
+    params: {
+      id: row?.id ?? '',
+    },
+  });
+}
+
+function goDetail(row: API.GetTaskInfosQueryResultItem) {
+  router.push({
+    name: 'CustomerDetail',
+    params: {
+      id: row?.id ?? '',
+    },
+  });
+}
+</script>
diff --git a/src/views/CustomerManage/components/AddOrEditCustomerView.vue b/src/views/CustomerManage/components/AddOrEditCustomerView.vue
new file mode 100644
index 0000000..76fbab5
--- /dev/null
+++ b/src/views/CustomerManage/components/AddOrEditCustomerView.vue
@@ -0,0 +1,47 @@
+<template>
+  <div></div>
+</template>
+
+<script setup lang="ts">
+import { Message, BoleRegExp } from '@bole-core/core';
+import { useQuery } from '@tanstack/vue-query';
+import {
+  LoadingLayout,
+  AppScrollContainer,
+  ProForm,
+  ProFormItemV2,
+  ChunkCell,
+  ProFormText,
+  ProFormSelect,
+  ProFormTextArea,
+  ProFormCol,
+  ProFormColItem,
+} from '@bole-core/components';
+import { FormRules, FormInstance } from 'element-plus';
+
+defineOptions({
+  name: 'AddOrEditCustomerView',
+})
+
+type Props = {
+  isDetail: boolean;
+}
+
+const props = withDefaults(defineProps<Props>(), {
+
+})
+
+const route = useRoute();
+const id = route.params.id as string;
+const isEdit =  !!id;
+
+const { closeViewPush } = useRouteView();
+const eventContext = useGlobalEventContext();
+
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+
+</style>
+
diff --git a/src/views/CustomerManage/constants/customerManage.ts b/src/views/CustomerManage/constants/customerManage.ts
new file mode 100644
index 0000000..94ab1ea
--- /dev/null
+++ b/src/views/CustomerManage/constants/customerManage.ts
@@ -0,0 +1,54 @@
+  import {defineColumns} from '@bole-core/components'
+
+  export const CustomerManageColumns = defineColumns([
+    {
+      id: '1',
+      enCode: 'name',
+      name: '浼佷笟鍚嶇О',
+    },
+    {
+      id: '2',
+      enCode: 'phoneNumber',
+      name: '缁熶竴淇$敤浠g爜',
+    },
+    {
+      id: '3',
+      enCode: 'status',
+      name: '瀹㈡埛ID',
+    },
+    {
+      id: '4',
+      enCode: 'createdTime',
+      name: '娉曚汉濮撳悕',
+    },
+    {
+      id: '5',
+      enCode: 'createdTime',
+      name: '鑱旂郴浜哄悕绉�',
+    },
+    {
+      id: '6',
+      enCode: 'createdTime',
+      name: '鑱旂郴鐢佃瘽',
+    },
+    {
+      id: '7',
+      enCode: 'createdTime',
+      name: '鐪佷唤',
+    },
+    {
+      id: '8',
+      enCode: 'createdTime',
+      name: '鍩庡競',
+    },
+    {
+      id: '9',
+      enCode: 'createdTime',
+      name: '鍚堜綔鐘舵��',
+    },
+    {
+      id: '10',
+      enCode: 'createdTime',
+      name: '绛剧害鐘舵��',
+    },
+  ])
diff --git a/src/views/CustomerManage/constants/index.ts b/src/views/CustomerManage/constants/index.ts
new file mode 100644
index 0000000..c9d7805
--- /dev/null
+++ b/src/views/CustomerManage/constants/index.ts
@@ -0,0 +1 @@
+export * from './customerManage'

--
Gitblit v1.9.1