From 65c7175a1d7d448f91ee61a8a9aa935263939d37 Mon Sep 17 00:00:00 2001
From: wupengfei <834520024@qq.com>
Date: 星期四, 17 四月 2025 10:10:22 +0800
Subject: [PATCH] feat: 接口对接
---
src/views/EnterpriseManage/components/AddOrEditEnterpriseView.vue | 45 +
src/views/CPersonManage/CPersonManageList.vue | 228 ++++++++++
src/views/CPersonManage/components/CPersonDetailDialog.vue | 197 +++++++++
src/views/EnterpriseManage/components/ConfigureDialog.vue | 15
src/views/OperationManage/components/AddOrEditAdvertisementDialog.vue | 181 ++++++++
src/constants/enum.ts | 16
src/constants/cPerson.ts | 51 ++
src/views/OperationManage/OperationManageList.vue | 209 +++++++++
src/views/TaskManage/components/TaskDetailView.vue | 75 +++
src/constants/index.ts | 1
src/views/TaskManage/TaskManageDetail.vue | 32 +
src/views/EnterpriseManage/EnterpriseManageList.vue | 30
src/views/TaskManage/TaskManageList.vue | 163 +++++++
13 files changed, 1,204 insertions(+), 39 deletions(-)
diff --git a/src/constants/cPerson.ts b/src/constants/cPerson.ts
new file mode 100644
index 0000000..f2ebe7e
--- /dev/null
+++ b/src/constants/cPerson.ts
@@ -0,0 +1,51 @@
+export enum FlexWorkerEleSignEnum {
+ /**
+ * 鏈绾�
+ */
+ WaitSign = 10,
+ /**
+ * 宸茬绾�
+ */
+ HasSign = 20,
+ /**
+ * 宸茶В绾�
+ */
+ CancelSign = 30,
+}
+
+export const FlexWorkerEleSignEnumText = {
+ [FlexWorkerEleSignEnum.WaitSign]: '鏈绾�',
+ [FlexWorkerEleSignEnum.HasSign]: '宸茬绾�',
+ [FlexWorkerEleSignEnum.CancelSign]: '宸茶В绾�',
+};
+
+export enum FlexTaskWorkerHireEnum {
+ /**
+ * 寰呯绾�
+ */
+ WaitForSign = 1,
+ /**
+ * 寰呭鐞�
+ */
+ Wait = 10,
+ /**
+ * 宸插綍鐢�
+ */
+ Hired = 20,
+ /**
+ * 宸茶阿缁�
+ */
+ Refused = 30,
+ /**
+ * 宸茶В绾�
+ */
+ CancelSign = 40,
+}
+
+export const FlexTaskWorkerHireEnumText = {
+ [FlexTaskWorkerHireEnum.WaitForSign]: '寰呯绾�',
+ [FlexTaskWorkerHireEnum.Wait]: '寰呭鐞�',
+ [FlexTaskWorkerHireEnum.Hired]: '宸插綍鐢�',
+ [FlexTaskWorkerHireEnum.Refused]: '宸茶阿缁�',
+ [FlexTaskWorkerHireEnum.CancelSign]: '宸茶В绾�',
+};
diff --git a/src/constants/enum.ts b/src/constants/enum.ts
index e403f0e..6cc4c11 100644
--- a/src/constants/enum.ts
+++ b/src/constants/enum.ts
@@ -43,3 +43,19 @@
{ label: '鏄�', value: true },
{ label: '鍚�', value: false },
];
+
+export enum Gender {
+ /**
+ * 鐢�
+ */
+ Male = 1,
+ /**
+ * 濂�
+ */
+ Female = 2,
+}
+
+export const GenderText = {
+ [Gender.Male]: '鐢�',
+ [Gender.Female]: '濂�',
+};
diff --git a/src/constants/index.ts b/src/constants/index.ts
index 8f98d65..5dd6368 100644
--- a/src/constants/index.ts
+++ b/src/constants/index.ts
@@ -11,3 +11,4 @@
export * from './app';
export * from './dic';
export * from './enterprise';
+export * from './cPerson';
diff --git a/src/views/CPersonManage/CPersonManageList.vue b/src/views/CPersonManage/CPersonManageList.vue
new file mode 100644
index 0000000..6a801c6
--- /dev/null
+++ b/src/views/CPersonManage/CPersonManageList.vue
@@ -0,0 +1,228 @@
+<template>
+ <LoadingLayout :loading="state.loading">
+ <AppContainer>
+ <ProTableQueryFilterBar @on-reset="reset">
+ <template #query>
+ <QueryFilterItem tip-content="瀹炲悕鐘舵��">
+ <FieldRadio
+ v-model="extraParamState.realVerifyStatus"
+ :value-enum="[
+ {
+ value: false,
+ label: '鏈疄鍚�',
+ },
+ {
+ value: true,
+ label: '宸插疄鍚�',
+ },
+ ]"
+ buttonStyle
+ showAllBtn
+ @change="getList()"
+ />
+ </QueryFilterItem>
+ <QueryFilterItem tip-content="鏈�杩戝綍鐢ㄦ椂闂�">
+ <FieldDatePicker
+ v-model="extraParamState.nearlyHireDateTime"
+ type="daterange"
+ range-separator="~"
+ start-placeholder="寮�濮嬫椂闂�"
+ end-placeholder="缁撴潫鏃堕棿"
+ clearable
+ @change="getList()"
+ ></FieldDatePicker>
+ </QueryFilterItem>
+ <QueryFilterItem tip-content="鏈�杩戠绾︽椂闂�">
+ <FieldDatePicker
+ v-model="extraParamState.nearlySignDateTime"
+ type="daterange"
+ range-separator="~"
+ start-placeholder="寮�濮嬫椂闂�"
+ end-placeholder="缁撴潫鏃堕棿"
+ clearable
+ @change="getList()"
+ ></FieldDatePicker>
+ </QueryFilterItem>
+ <QueryFilterItem>
+ <SearchInput
+ v-model="extraParamState.searchKeys"
+ style="width: 300px"
+ placeholder="濮撳悕/鎵嬫満/韬唤璇佸彿/瀹㈡埛"
+ @on-click-search="getList"
+ @keyup.enter="getList()"
+ >
+ </SearchInput>
+ </QueryFilterItem>
+ </template>
+ </ProTableQueryFilterBar>
+ <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+ </ProTableV2>
+ </AppContainer>
+ <CPersonDetailDialog v-bind="dialogProps"></CPersonDetailDialog>
+ </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+ ProTableQueryFilterBar,
+ OperationBtnType,
+ ProTableV2,
+ SearchInput,
+ LoadingLayout,
+ AppContainer,
+ QueryFilterItem,
+ useTable,
+ useFormDialog,
+ FieldRadio,
+ FieldDatePicker,
+ UploadUserFile,
+} from '@bole-core/components';
+import { useAccess, useGlobalEventContext } from '@/hooks';
+import * as flexEnterpriseWokerServices from '@/services/api/FlexEnterpriseWoker';
+import { Gender } from '@/constants';
+import CPersonDetailDialog from './components/CPersonDetailDialog.vue';
+import { OrderInputType } from '@bole-core/core';
+import { convertApi2FormUrlOnlyOne, format } from '@/utils';
+import { ModelValueType } from 'element-plus';
+
+defineOptions({
+ name: 'CPersonManageList',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+ detailBtn: { emits: { onClick: (role) => openDialog(role) } },
+};
+
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
+ operationBtnMap,
+});
+
+const eventContext = useGlobalEventContext();
+
+eventContext.addEvent('enterprise:add', () => {
+ getList();
+});
+
+eventContext.addEvent('enterprise:edit', () => {
+ getList(paginationState.pageIndex);
+});
+
+const router = useRouter();
+
+const BaseState = {
+ loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+onMounted(async () => {
+ await getList();
+ state.loading = false;
+});
+
+const {
+ getDataSource: getList,
+ proTableProps,
+ paginationState,
+ extraParamState,
+ reset,
+} = useTable(
+ async ({ pageIndex, pageSize }, extraParamState) => {
+ try {
+ let params: API.GetUserClientForBackInput = {
+ pageModel: {
+ rows: pageSize,
+ page: pageIndex,
+ orderInput: extraParamState.orderInput,
+ },
+ searchKeys: extraParamState.searchKeys,
+ nearlyHireDateTimeBegin: format(
+ extraParamState.nearlyHireDateTime?.[0] ?? '',
+ 'YYYY-MM-DD 00:00:00'
+ ),
+ nearlyHireDateTimeEnd: format(
+ extraParamState.nearlyHireDateTime?.[1] ?? '',
+ 'YYYY-MM-DD 23:59:59'
+ ),
+ nearlySignDateTimeBegin: format(
+ extraParamState.nearlySignDateTime?.[0] ?? '',
+ 'YYYY-MM-DD 00:00:00'
+ ),
+ nearlySignDateTimeEnd: format(
+ extraParamState.nearlySignDateTime?.[1] ?? '',
+ 'YYYY-MM-DD 23:59:59'
+ ),
+ realVerifyStatus: extraParamState.realVerifyStatus,
+ };
+
+ let res = await flexEnterpriseWokerServices.getUserClientList(params, {
+ showLoading: !state.loading,
+ });
+ return res;
+ } catch (error) {
+ console.log('error: ', error);
+ }
+ },
+ {
+ defaultExtraParams: {
+ searchKeys: '',
+ realVerifyStatus: '' as any as boolean,
+ nearlyHireDateTime: [] as unknown as ModelValueType,
+ nearlySignDateTime: [] as unknown as ModelValueType,
+ orderInput: [{ property: 'userId', order: OrderInputType.Desc }],
+ },
+ queryKey: ['flexEnterpriseWokerServices/getUserClientList'],
+ columnsRenderProps: {
+ realVerifyStatus: {
+ type: 'enum',
+ valueEnum: [
+ { label: '宸插疄鍚�', value: true },
+ { label: '鏈疄鍚�', value: false },
+ ],
+ },
+ realVerifyTime: { type: 'date' },
+ },
+ }
+);
+
+async function openDialog(row?: API.GetUserClientForBackOutput) {
+ const res = await getUserDetailForBack('98ac4c01-3598-ebf3-fa7d-3a189bb6b587');
+ handleEdit({
+ userId: row.userId ?? '98ac4c01-3598-ebf3-fa7d-3a189bb6b587',
+ name: res.name,
+ idNumber: res.idNumber,
+ contactPhone: res.contactPhone,
+ age: res.age,
+ certificateFrontImgUrl: res.certificateFrontImgUrl
+ ? convertApi2FormUrlOnlyOne(res.certificateFrontImgUrl)
+ : [],
+ certificateBackImgUrl: res.certificateBackImgUrl
+ ? convertApi2FormUrlOnlyOne(res.certificateBackImgUrl)
+ : [],
+
+ genderType: Gender.Female,
+ tabType: 'user',
+ });
+}
+
+const { dialogProps, handleEdit } = useFormDialog({
+ defaultFormParams: {
+ userId: '',
+ name: '',
+ idNumber: '',
+ contactPhone: '',
+ age: 0,
+ genderType: '' as any as Gender,
+ certificateFrontImgUrl: [] as UploadUserFile[],
+ certificateBackImgUrl: [] as UploadUserFile[],
+
+ tabType: '',
+ },
+});
+
+async function getUserDetailForBack(userId: string) {
+ try {
+ return await flexEnterpriseWokerServices.getUserDetailForBack({ userId: userId });
+ } catch (error) {}
+}
+</script>
diff --git a/src/views/CPersonManage/components/CPersonDetailDialog.vue b/src/views/CPersonManage/components/CPersonDetailDialog.vue
new file mode 100644
index 0000000..e6d9e99
--- /dev/null
+++ b/src/views/CPersonManage/components/CPersonDetailDialog.vue
@@ -0,0 +1,197 @@
+<template>
+ <ProDialog title="鐢宠璇︽儏" v-model="innerVisible" width="1200px" destroy-on-close>
+ <ProTabs v-model="innerForm.tabType" hasBorder>
+ <ProTabPane lazy label="浜哄憳璇︽儏" name="user">
+ <ProForm :model="form" ref="dialogForm" label-width="120px" is-read>
+ <ProFormItemV2 label="濮撳悕:" prop="name">
+ <ProFormText v-model.trim="innerForm.name" />
+ </ProFormItemV2>
+ <ProFormItemV2 label="韬唤璇佸彿:" prop="idNumber">
+ <ProFormText v-model.trim="innerForm.idNumber" />
+ </ProFormItemV2>
+ <ProFormItemV2 label="鎵嬫満鍙�:" prop="contactPhone">
+ <ProFormText v-model.trim="innerForm.contactPhone" />
+ </ProFormItemV2>
+ <ProFormItemV2 label="鎬у埆:" prop="age">
+ <ProFormRadio v-model="innerForm.genderType" :value-enum="GenderText"></ProFormRadio>
+ </ProFormItemV2>
+ <ProFormItemV2 label="骞撮緞:" prop="age">
+ <ProFormInputNumber v-model="innerForm.age" unit="宀�"></ProFormInputNumber>
+ </ProFormItemV2>
+ <ProFormItemV2 label="韬唤璇佹闈�:" prop="certificateFrontImgUrl">
+ <ProFormImageUpload v-model:file-url="innerForm.certificateFrontImgUrl" />
+ </ProFormItemV2>
+ <ProFormItemV2 label="韬唤璇佸弽闈�:" prop="certificateBackImgUrl">
+ <ProFormImageUpload v-model:file-url="innerForm.certificateBackImgUrl" />
+ </ProFormItemV2>
+ </ProForm>
+ </ProTabPane>
+ <ProTabPane lazy label="绛剧害璇︽儏" name="sign">
+ <ProDialogTableWrapper :height="400">
+ <ProTableV2 v-bind="proTableProps" :columns="column" :show-operation-column="false">
+ </ProTableV2>
+ </ProDialogTableWrapper>
+ </ProTabPane>
+ </ProTabs>
+ </ProDialog>
+</template>
+
+<script setup lang="ts">
+import {
+ ProDialog,
+ ProTableV2,
+ ProDialogTableWrapper,
+ ProTabs,
+ ProTabPane,
+ useTable,
+ ProForm,
+ ProFormItemV2,
+ ProFormText,
+ UploadUserFile,
+ ProFormImageUpload,
+ ProFormRadio,
+ ProFormInputNumber,
+} from '@bole-core/components';
+import { OrderInputType } from '@bole-core/core';
+import _ from 'lodash';
+import * as flexEnterpriseWokerServices from '@/services/api/FlexEnterpriseWoker';
+import { setOSSLink } from '@/utils';
+import { FlexTaskWorkerHireEnumText, FlexWorkerEleSignEnumText, Gender, GenderText } from '@/constants';
+
+defineOptions({
+ name: 'CPersonDetailDialog',
+});
+
+type Props = {
+ modelValue: boolean;
+ form: {
+ tabType: string;
+ userId: string;
+ name: string;
+ idNumber: string;
+ contactPhone: string;
+ age: number;
+ genderType:Gender;
+ certificateFrontImgUrl: UploadUserFile[];
+ certificateBackImgUrl: UploadUserFile[];
+ };
+};
+
+const props = withDefaults(defineProps<Props>(), {
+ modelValue: false,
+});
+
+const emit = defineEmits<{
+ (e: 'update:modelValue', value: boolean): void;
+ (e: 'update:form', value: Props['form']): void;
+ (e: 'onCancel'): void;
+}>();
+
+const column: API.CustomModuleColumnDto[] = [
+ {
+ id: '1',
+ enCode: 'enterpirseName',
+ name: '鎵�灞炲鎴�',
+ },
+ {
+ id: '2',
+ enCode: 'applyTime',
+ name: '鎶ュ悕鏃堕棿',
+ },
+ {
+ id: '3',
+ enCode: 'hireStatus',
+ name: '褰曠敤鐘舵��',
+ },
+ {
+ id: '4',
+ enCode: 'hireDateTime',
+ name: '褰曠敤鏃堕棿',
+ },
+ {
+ id: '5',
+ enCode: 'userSignStatus',
+ name: '绛剧害鐘舵��',
+ },
+ {
+ id: '6',
+ enCode: 'enterSignStatus',
+ name: '浼佷笟绛剧害鐘舵��',
+ },
+ {
+ id: '7',
+ enCode: 'enterSignTime',
+ name: '浼佷笟绛剧害鏃堕棿',
+ },
+ {
+ id: '8',
+ enCode: 'contractUrl',
+ name: '鐢靛瓙鍚堝悓',
+ },
+];
+
+const innerVisible = computed({
+ get() {
+ return props.modelValue;
+ },
+ set(val) {
+ emit('update:modelValue', val);
+ },
+});
+const innerForm = computed({
+ get() {
+ return props.form;
+ },
+ set(val) {
+ emit('update:form', val);
+ },
+});
+
+watch(
+ () => innerVisible.value,
+ (val) => {
+ if (val) {
+ getList();
+ }
+ }
+);
+
+const {
+ getDataSource: getList,
+ proTableProps,
+ paginationState,
+ extraParamState,
+} = useTable(
+ async ({ pageIndex, pageSize }, extraParamState) => {
+ try {
+ let params: API.GetUserClientSignListInput = {
+ pageModel: {
+ rows: pageSize,
+ page: pageIndex,
+ orderInput: extraParamState.orderInput,
+ },
+ userId: props.form.userId,
+ };
+ let res = await flexEnterpriseWokerServices.getUserClientSignList(params);
+ return res;
+ } catch (error) {}
+ },
+ {
+ defaultExtraParams: {
+ orderInput: [{ property: 'applyTime', order: OrderInputType.Desc }],
+ },
+ columnsRenderProps: {
+ applyTime: { type: 'date' },
+ hireDateTime: { type: 'date' },
+ userSignTime: { type: 'date' },
+ hireStatus: { type: 'enum', valueEnum: FlexTaskWorkerHireEnumText },
+ userSignStatus: { type: 'enum', valueEnum: FlexWorkerEleSignEnumText },
+ enterSignStatus: { type: 'enum', valueEnum: FlexWorkerEleSignEnumText },
+ },
+ }
+);
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+</style>
diff --git a/src/views/EnterpriseManage/EnterpriseManageList.vue b/src/views/EnterpriseManage/EnterpriseManageList.vue
index 28e00da..2df6ee6 100644
--- a/src/views/EnterpriseManage/EnterpriseManageList.vue
+++ b/src/views/EnterpriseManage/EnterpriseManageList.vue
@@ -144,7 +144,7 @@
{
defaultExtraParams: {
searchWord: '',
- orderInput: [{ property: 'id', order: OrderInputType.Asc }],
+ orderInput: [{ property: 'id', order: OrderInputType.Desc }],
flexEnterpriseSettingStatus: '' as any as FlexEnterpriseSettingStatus,
},
queryKey: ['flexEnterpriseServices/getFlexEnterpriseList'],
@@ -159,21 +159,24 @@
if (row) {
handleEdit({
id: row.id,
+ enterpriseConfigureType: EnterpriseConfigureType.Bank,
flexEnterpirseId: row.id,
- openBank: row.cityName,
- openBranchBank: row.cityName,
- bankAccount: row.cityName,
- verifyStatus: VerifyStatus.NotVerify,
- signChannel: SignChannelEnum.Alipay,
- chargeType: ChargeTypeEnum.Group,
- realVerifyCost: 0,
- signCost: 0,
- mergeSignCost: 0,
- messageCost: 0,
- messageChannel: MessageChannelEnum.Alipay,
+ openBank: row.flexEnterpriseBankDto?.openBank,
+ openBranchBank: row.flexEnterpriseBankDto?.openBranchBank,
+ bankAccount: row.flexEnterpriseBankDto?.bankAccount,
+ verifyStatus: row.flexEnterpriseBankDto?.verifyStatus,
+ signChannel: row.enterpriseSignSettingDto?.signChannel,
+ chargeType: row.enterpriseSignSettingDto?.chargeType,
+ realVerifyCost: row.enterpriseSignSettingDto?.realVerifyCost ?? 0,
+ signCost: row.enterpriseSignSettingDto?.signCost ?? 0,
+ mergeSignCost: row.enterpriseSignSettingDto?.mergeSignCost ?? 0,
+ messageCost: row.flexEnterpriseMessageSettingDto?.messageCost ?? 0,
+ messageChannel: row.flexEnterpriseMessageSettingDto?.messageChannel,
});
} else {
- handleAdd({});
+ handleAdd({
+ enterpriseConfigureType: EnterpriseConfigureType.Bank,
+ });
}
}
@@ -182,6 +185,7 @@
defaultFormParams: {
id: '',
flexEnterpirseId: '',
+ enterpriseConfigureType: '' as any as EnterpriseConfigureType,
openBank: '',
openBranchBank: '',
bankAccount: '',
diff --git a/src/views/EnterpriseManage/components/AddOrEditEnterpriseView.vue b/src/views/EnterpriseManage/components/AddOrEditEnterpriseView.vue
index bdc92b9..b5a01b5 100644
--- a/src/views/EnterpriseManage/components/AddOrEditEnterpriseView.vue
+++ b/src/views/EnterpriseManage/components/AddOrEditEnterpriseView.vue
@@ -2,14 +2,18 @@
<LoadingLayout :loading="isEdit && isLoading">
<AppScrollContainer>
<ChunkCell title="浼佷笟鍩烘湰淇℃伅">
- <ProForm :model="form" :rules="rules" ref="formRef" label-width="120px" :is-read="isDetail">
+ <ProForm :model="form" ref="formRef" label-width="140px" :is-read="isDetail">
<ProFormCol>
<ProFormColItem :span="12">
- <ProFormItemV2 label="浼佷笟鍚嶇О:" prop="enterpriseName">
+ <ProFormItemV2
+ label="浼佷笟鍚嶇О:"
+ prop="enterpriseName"
+ :check-rules="[{ message: '璇疯緭鍏ヤ紒涓氬悕绉�' }]"
+ >
<ProFormText
v-model.trim="form.enterpriseName"
:maxlength="30"
- placeholder="璇疯緭鍏ヤ緵搴斿晢鍚嶇О"
+ placeholder="璇疯緭鍏ヤ紒涓氬悕绉�"
/>
</ProFormItemV2>
</ProFormColItem>
@@ -38,7 +42,11 @@
</ProFormCol>
<ProFormCol>
<ProFormColItem :span="12">
- <ProFormItemV2 label="缁熶竴绀句細淇$敤浠g爜:" prop="societyCreditCode">
+ <ProFormItemV2
+ label="缁熶竴绀句細淇$敤浠g爜:"
+ prop="societyCreditCode"
+ :check-rules="[{ message: '璇疯緭鍏ョ粺涓�绀句細淇$敤浠g爜', type: 'societyCreditCode' }]"
+ >
<ProFormText
v-model.trim="form.societyCreditCode"
placeholder="璇疯緭鍏ョ粺涓�绀句細淇$敤浠g爜"
@@ -100,7 +108,6 @@
<ChunkCell title="鑱旂郴淇℃伅">
<ProForm
:model="form"
- :rules="rules"
ref="settingFormRef"
label-width="140px"
:scroll-to-error="false"
@@ -108,7 +115,11 @@
>
<ProFormCol>
<ProFormColItem :span="12">
- <ProFormItemV2 label="鑱旂郴浜�:" prop="contact">
+ <ProFormItemV2
+ label="鑱旂郴浜�:"
+ prop="contact"
+ :check-rules="[{ message: '璇疯緭鍏ヨ仈绯讳汉' }]"
+ >
<ProFormText
v-model.trim="form.contact"
:maxlength="30"
@@ -119,7 +130,11 @@
</ProFormCol>
<ProFormCol>
<ProFormColItem :span="12">
- <ProFormItemV2 label="鑱旂郴鐢佃瘽:" prop="contactPhone">
+ <ProFormItemV2
+ label="鑱旂郴鐢佃瘽:"
+ prop="contactPhone"
+ :check-rules="[{ message: '璇疯緭鍏ヨ仈绯荤數璇�', type: 'phone' }]"
+ >
<ProFormText v-model.trim="form.contactPhone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" />
</ProFormItemV2>
</ProFormColItem>
@@ -141,7 +156,6 @@
<ChunkCell title="璐﹀彿淇℃伅">
<ProForm
:model="form"
- :rules="rules"
ref="accountFormRef"
label-width="140px"
:scroll-to-error="false"
@@ -149,7 +163,11 @@
>
<ProFormCol>
<ProFormColItem :span="12">
- <ProFormItemV2 label="璐﹀彿:" prop="contact">
+ <ProFormItemV2
+ label="璐﹀彿:"
+ prop="contact"
+ :check-rules="[{ message: '璇疯緭鍏ヨ处鍙�' }]"
+ >
<ProFormText v-model.trim="form.contact" :maxlength="30" placeholder="璇疯緭鍏ヨ处鍙�" />
</ProFormItemV2>
</ProFormColItem>
@@ -244,15 +262,6 @@
const formRef = ref<FormInstance>();
const settingFormRef = ref<FormInstance>();
const accountFormRef = ref<FormInstance>();
-
-const rules = reactive<FormRules>({
- enterpriseName: [{ required: true, message: '璇疯緭鍏ヤ紒涓氬悕绉�', trigger: 'blur' }],
- contact: [{ required: true, message: '璇疯緭鍏ヨ仈绯讳汉', trigger: 'blur' }],
- contactPhone: [
- { required: true, message: '璇疯緭鍏ヨ仈绯荤數璇�', trigger: 'blur' },
- { message: '璇疯緭鍏ユ纭殑鑱旂郴鐢佃瘽', trigger: 'blur', pattern: BoleRegExp.RegPhoneNumber },
- ],
-});
async function handleSubmit() {
try {
diff --git a/src/views/EnterpriseManage/components/ConfigureDialog.vue b/src/views/EnterpriseManage/components/ConfigureDialog.vue
index c91035b..0224cb3 100644
--- a/src/views/EnterpriseManage/components/ConfigureDialog.vue
+++ b/src/views/EnterpriseManage/components/ConfigureDialog.vue
@@ -3,12 +3,12 @@
<ProForm :model="innerForm" ref="dialogForm" label-width="100px">
<ProFormItemV2 label="" prop="enterpriseConfigureType" label-width="0">
<ProFormRadio
- v-model="enterpriseConfigureType"
+ v-model="innerForm.enterpriseConfigureType"
:value-enum="EnterpriseConfigureTypeText"
buttonStyle
/>
</ProFormItemV2>
- <template v-if="enterpriseConfigureType === EnterpriseConfigureType.Bank">
+ <template v-if="innerForm.enterpriseConfigureType === EnterpriseConfigureType.Bank">
<ProFormItemV2 label="寮�鎴锋�昏:" prop="openBank">
<ProFormText
v-model.trim="innerForm.openBank"
@@ -40,7 +40,7 @@
>
</ProFormItemV2>
</template>
- <template v-if="enterpriseConfigureType === EnterpriseConfigureType.Electronic">
+ <template v-if="innerForm.enterpriseConfigureType === EnterpriseConfigureType.Electronic">
<div class="configure-dialog-form-title">閫氶亾閰嶇疆</div>
<ProFormItemV2
label="鍚嶇О:"
@@ -95,7 +95,7 @@
</ProFormItemV2>
</template>
</template>
- <template v-if="enterpriseConfigureType === EnterpriseConfigureType.ShortMessage">
+ <template v-if="innerForm.enterpriseConfigureType === EnterpriseConfigureType.ShortMessage">
<div class="configure-dialog-form-title">閫氶亾閰嶇疆</div>
<ProFormItemV2
label="鍚嶇О:"
@@ -162,6 +162,7 @@
type Props = {
modelValue: boolean;
form?: {
+ enterpriseConfigureType: EnterpriseConfigureType;
openBank: string;
openBranchBank: string;
bankAccount: string;
@@ -180,12 +181,10 @@
modelValue: false,
});
-const enterpriseConfigureType = ref<EnterpriseConfigureType>(EnterpriseConfigureType.Bank);
-
const emit = defineEmits<{
(e: 'update:modelValue', value: boolean): void;
(e: 'update:form', value: Props['form']): void;
- (e: 'onConfirm', value: EnterpriseConfigureType): void;
+ (e: 'onConfirm'): void;
(e: 'onCancel'): void;
}>();
@@ -220,7 +219,7 @@
if (!dialogForm.value) return;
dialogForm.value.validate((valid) => {
if (valid) {
- emit('onConfirm', enterpriseConfigureType.value);
+ emit('onConfirm');
} else {
return;
}
diff --git a/src/views/OperationManage/OperationManageList.vue b/src/views/OperationManage/OperationManageList.vue
new file mode 100644
index 0000000..4771789
--- /dev/null
+++ b/src/views/OperationManage/OperationManageList.vue
@@ -0,0 +1,209 @@
+<template>
+ <LoadingLayout :loading="state.loading">
+ <AppContainer>
+ <ProTableQueryFilterBar @on-reset="reset">
+ <template #query>
+ <QueryFilterItem>
+ <FieldSelect
+ v-model="extraParamState.pageType"
+ placeholder="骞垮憡椤甸潰"
+ :value-enum="FlexWorkerEleSignEnumText"
+ clearable
+ @change="getAdvertiseOnShowList()"
+ />
+ </QueryFilterItem>
+ <QueryFilterItem tip-content="鐘舵��">
+ <FieldRadio
+ v-model="extraParamState.status"
+ :value-enum="FlexWorkerEleSignEnumText"
+ buttonStyle
+ showAllBtn
+ @change="getAdvertiseOnShowList()"
+ />
+ </QueryFilterItem>
+ <QueryFilterItem tip-content="骞垮憡寮�濮嬫椂闂�">
+ <FieldDatePicker
+ v-model="extraParamState.beginDate"
+ type="daterange"
+ range-separator="~"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ clearable
+ @change="getAdvertiseOnShowList()"
+ ></FieldDatePicker>
+ </QueryFilterItem>
+ <QueryFilterItem tip-content="骞垮憡缁撴潫鏃堕棿">
+ <FieldDatePicker
+ v-model="extraParamState.endDate"
+ type="daterange"
+ range-separator="~"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ clearable
+ @change="getAdvertiseOnShowList()"
+ ></FieldDatePicker>
+ </QueryFilterItem>
+ <QueryFilterItem>
+ <SearchInput
+ v-model="extraParamState.keyword"
+ style="width: 260px"
+ placeholder="骞垮憡鍚嶇О"
+ @on-click-search="getAdvertiseOnShowList"
+ >
+ </SearchInput>
+ </QueryFilterItem>
+ </template>
+ <template #btn>
+ <el-button
+ v-if="checkSubModuleItemShow('pageButton', 'addBtn')"
+ @click="openDialog()"
+ icon="Plus"
+ type="primary"
+ >鏂板</el-button
+ >
+ </template>
+ </ProTableQueryFilterBar>
+ <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+ </ProTableV2>
+ </AppContainer>
+ </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+ ProTableQueryFilterBar,
+ OperationBtnType,
+ ProTableV2,
+ SearchInput,
+ LoadingLayout,
+ AppContainer,
+ QueryFilterItem,
+ useTable,
+ useFormDialog,
+ FieldDatePicker,
+ FieldSelect,
+ FieldRadio,
+ UploadUserFile,
+} from '@bole-core/components';
+import { useAccess } from '@/hooks';
+import { FlexWorkerEleSignEnumText } from '@/constants';
+import { ModelValueType } from 'element-plus';
+import * as flexEnterpriseWokerServices from '@/services/api/FlexEnterpriseWoker';
+import { format, setOSSLink, convertApi2FormUrl, convertFormUrl2Api } from '@/utils';
+import { OrderInputType, Message } from '@bole-core/core';
+
+defineOptions({
+ name: 'OperationManageList',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+ editBtn: { emits: { onClick: (role) => openDialog(role) } },
+ takeOnBtn: {
+ emits: { onClick: (role) => setAdvertiseOnShowStatus(role) },
+ extraProps: {
+ hide: (row) => row.status,
+ },
+ },
+ takeDownBtn: {
+ emits: { onClick: (role) => setAdvertiseOnShowStatus(role) },
+ props: { type: 'danger' },
+ extraProps: {
+ hide: (row) => !row.status,
+ },
+ },
+ logBtn: { emits: { onClick: (role) => openDialog(role) } },
+};
+
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
+ operationBtnMap,
+});
+
+const BaseState = {
+ loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+onMounted(async () => {
+ await getAdvertiseOnShowList();
+ state.loading = false;
+});
+
+const {
+ getDataSource: getAdvertiseOnShowList,
+ proTableProps,
+ paginationState,
+ extraParamState,
+ reset,
+} = useTable(
+ async ({ pageIndex, pageSize }, extraParamState) => {
+ try {
+ let params: API.GetUserClientForBackInput = {
+ pageModel: {
+ rows: pageSize,
+ page: pageIndex,
+ orderInput: extraParamState.orderInput,
+ },
+ searchKeys: extraParamState.keyword,
+ };
+ let res = await flexEnterpriseWokerServices.getUserClientList(params, {
+ showLoading: !state.loading,
+ });
+ return res;
+ } catch (error) {}
+ },
+ {
+ defaultExtraParams: {
+ keyword: '',
+ pageType: '' as any as number,
+ status: '' as any as boolean,
+ beginDate: [] as unknown as ModelValueType,
+ endDate: [] as unknown as ModelValueType,
+ orderInput: [{ property: 'sort', order: OrderInputType.Asc }],
+ },
+ columnsRenderProps: {},
+ columnPropsMap: ['advertiseBeginDate', 'advertiseEndDate'],
+ }
+);
+
+function openDialog(row?) {
+ if (row) {
+ handleEdit({
+ id: row.id,
+ pageType: row.pageType,
+ advertiseName: row.advertiseName,
+ advertiseLink: row.advertiseLink,
+ imgInfo: row.imgInfo.map((x) => convertApi2FormUrl(x.imgUrl)),
+ date: [format(row.advertiseBeginDate), format(row.advertiseEndDate)],
+ sort: row.sort,
+ });
+ } else {
+ handleAdd();
+ }
+}
+
+const { dialogProps, handleAdd, handleEdit, editForm, dialogState } = useFormDialog({
+ onConfirm: handleAddOrEdit,
+ defaultFormParams: {
+ title: '鏂板骞垮憡',
+ id: '',
+ pageType: '' as any as number,
+ advertiseName: '',
+ advertiseLink: '',
+ imgInfo: [] as UploadUserFile[],
+ date: [] as unknown as ModelValueType,
+ sort: 0,
+ },
+ editTitle: '缂栬緫骞垮憡',
+});
+
+async function handleAddOrEdit() {
+ try {
+ } catch (error) {}
+}
+
+async function setAdvertiseOnShowStatus(row) {
+ try {
+ } catch (error) {}
+}
+</script>
diff --git a/src/views/OperationManage/components/AddOrEditAdvertisementDialog.vue b/src/views/OperationManage/components/AddOrEditAdvertisementDialog.vue
new file mode 100644
index 0000000..8983528
--- /dev/null
+++ b/src/views/OperationManage/components/AddOrEditAdvertisementDialog.vue
@@ -0,0 +1,181 @@
+<template>
+ <ProDialog
+ :title="innerForm.title"
+ v-model="innerVisible"
+ @close="onDialogClose"
+ destroy-on-close
+ >
+ <ProForm :rules="rules" :model="innerForm" ref="dialogForm" label-width="120px">
+ <ProFormItemV2
+ label="骞垮憡椤甸潰:"
+ prop="pageType"
+ :check-rules="[{ message: '璇烽�夋嫨骞垮憡椤甸潰' }]"
+ >
+ <ProFormSelect
+ placeholder="璇烽�夋嫨骞垮憡椤甸潰"
+ :value-enum="FlexWorkerEleSignEnumText"
+ clearable
+ v-model="innerForm.pageType"
+ ></ProFormSelect>
+ </ProFormItemV2>
+ <ProFormItemV2
+ label="骞垮憡鍚嶇О:"
+ prop="advertiseName"
+ :check-rules="[{ message: '璇疯緭鍏ュ箍鍛婂悕绉�' }, { max: 20, message: '涓嶈兘瓒呰繃20涓瓧绗�' }]"
+ >
+ <ProFormText
+ placeholder="璇疯緭鍏ュ箍鍛婂悕绉�"
+ v-model.trim="innerForm.advertiseName"
+ :maxlength="20"
+ ></ProFormText>
+ </ProFormItemV2>
+ <ProFormItemV2
+ label="骞垮憡浜у搧閾炬帴:"
+ prop="advertiseLink"
+ :check-rules="[
+ { type: 'urlWithParams', message: '璇疯緭鍏ュ箍鍛婁骇鍝侀摼鎺�' },
+ { message: '璇疯緭鍏ユ纭殑骞垮憡浜у搧閾炬帴' },
+ ]"
+ >
+ <ProFormText
+ placeholder="璇疯緭鍏ュ箍鍛婁骇鍝侀摼鎺�"
+ v-model.trim="innerForm.advertiseLink"
+ :maxlength="150"
+ ></ProFormText>
+ </ProFormItemV2>
+ <ProFormItemV2
+ label="骞垮憡鍥剧墖:"
+ prop="imgInfo"
+ :check-rules="[{ type: 'array', message: '璇烽�夋嫨骞垮憡鍥剧墖' }]"
+ >
+ <ProFormImageUpload
+ :fileDirectory="OssAdvertise"
+ v-model:file-url="innerForm.imgInfo"
+ :limitFileCount="1"
+ ></ProFormImageUpload>
+ </ProFormItemV2>
+ <ProFormItemV2
+ label="骞垮憡鏃ユ湡:"
+ prop="date"
+ :check-rules="[{ type: 'array', message: '璇烽�夋嫨骞垮憡鏃ユ湡' }]"
+ >
+ <ProFormDatePicker
+ v-model="innerForm.date"
+ type="daterange"
+ range-separator="~"
+ start-placeholder="骞垮憡璧峰鏃ユ湡"
+ end-placeholder="骞垮憡鍒版湡鏃ユ湡"
+ clearable
+ ></ProFormDatePicker>
+ </ProFormItemV2>
+ <ProFormItemV2
+ label="骞垮憡浣嶆帓搴�:"
+ prop="sort"
+ required
+ :check-rules="[{ message: '璇疯緭鍏ユ帓搴�' }]"
+ >
+ <ProFormInputNumber
+ v-model="innerForm.sort"
+ :controls="false"
+ :min="0"
+ :max="99"
+ ></ProFormInputNumber>
+ </ProFormItemV2>
+ </ProForm>
+ <template #footer>
+ <span class="dialog-footer">
+ <el-button @click="emit('onCancel')">鍙� 娑�</el-button>
+ <el-button type="primary" @click="handleConfirm">纭� 瀹�</el-button>
+ </span>
+ </template>
+ </ProDialog>
+</template>
+
+<script setup lang="ts">
+import { FormRules, FormInstance } from 'element-plus';
+import {
+ ProDialog,
+ ProForm,
+ ProFormItemV2,
+ UploadUserFile,
+ ProFormText,
+ ProFormDatePicker,
+ ProFormInputNumber,
+ ProFormSelect,
+ ProFormImageUpload,
+} from '@bole-core/components';
+import { ModelValueType } from 'element-plus';
+import { OssAdvertise, FlexWorkerEleSignEnumText } from '@/constants';
+import { BoleRegExp } from '@bole-core/core';
+
+defineOptions({
+ name: 'AddOrEditAdvertisementDialog',
+});
+
+type Props = {
+ modelValue: boolean;
+ form?: {
+ title?: string;
+ id: string;
+ pageType: number;
+ advertiseName: string;
+ advertiseLink: string;
+ imgInfo: UploadUserFile[];
+ date: ModelValueType;
+ sort: number;
+ };
+};
+
+const props = withDefaults(defineProps<Props>(), {
+ modelValue: false,
+});
+
+const emit = defineEmits<{
+ (e: 'update:modelValue', value: boolean): void;
+ (e: 'update:form', value: Props['form']): void;
+ (e: 'onConfirm'): void;
+ (e: 'onCancel'): void;
+}>();
+
+const dialogForm = ref<FormInstance>();
+
+const innerVisible = computed({
+ get() {
+ return props.modelValue;
+ },
+ set(val) {
+ emit('update:modelValue', val);
+ },
+});
+
+const innerForm = computed({
+ get() {
+ return props.form;
+ },
+ set(val) {
+ emit('update:form', val);
+ },
+});
+
+const rules = reactive<FormRules>({
+ contacterPhone: [
+ { message: '璇疯緭鍏ユ纭殑鑱旂郴鐢佃瘽', trigger: 'blur', pattern: BoleRegExp.RegTelNumber },
+ ],
+});
+
+function onDialogClose() {
+ if (!dialogForm.value) return;
+ dialogForm.value.resetFields();
+}
+
+function handleConfirm() {
+ if (!dialogForm.value) return;
+ dialogForm.value.validate((valid) => {
+ if (valid) {
+ emit('onConfirm');
+ } else {
+ return;
+ }
+ });
+}
+</script>
diff --git a/src/views/TaskManage/TaskManageDetail.vue b/src/views/TaskManage/TaskManageDetail.vue
new file mode 100644
index 0000000..f664309
--- /dev/null
+++ b/src/views/TaskManage/TaskManageDetail.vue
@@ -0,0 +1,32 @@
+<template>
+ <LoadingLayout>
+ <AppContainer>
+ <ProTabs v-model="state.tabType" hasBorder>
+ <ProTabPane lazy label="浠诲姟璇︽儏" name="task">
+ <TaskDetailView></TaskDetailView>
+ </ProTabPane>
+ <ProTabPane lazy label="鎶ュ悕璇︽儏" name="sign">
+ <SignDetailView></SignDetailView>
+ </ProTabPane>
+ </ProTabs>
+ </AppContainer>
+ </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import { AppContainer, ProTabs, ProTabPane } from '@bole-core/components';
+import TaskDetailView from './components/TaskDetailView.vue';
+import SignDetailView from './components/SignDetailView.vue';
+
+defineOptions({
+ name: 'TaskManageDetail',
+});
+
+const state = reactive({
+ tabType: 'task',
+});
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+</style>
diff --git a/src/views/TaskManage/TaskManageList.vue b/src/views/TaskManage/TaskManageList.vue
new file mode 100644
index 0000000..c0ee5aa
--- /dev/null
+++ b/src/views/TaskManage/TaskManageList.vue
@@ -0,0 +1,163 @@
+<template>
+ <LoadingLayout :loading="state.loading">
+ <AppContainer>
+ <ProTableQueryFilterBar @on-reset="reset">
+ <template #query>
+ <QueryFilterItem>
+ <FieldSelect
+ v-model="extraParamState.pageType"
+ placeholder="骞垮憡椤甸潰"
+ :value-enum="FlexWorkerEleSignEnumText"
+ clearable
+ @change="getList()"
+ />
+ </QueryFilterItem>
+ <QueryFilterItem tip-content="鍙戝竷鐘舵��">
+ <FieldRadio
+ v-model="extraParamState.status"
+ :value-enum="FlexWorkerEleSignEnumText"
+ buttonStyle
+ showAllBtn
+ @change="getList()"
+ />
+ </QueryFilterItem>
+ <QueryFilterItem tip-content="鎺ㄨ崘鐘舵��">
+ <FieldRadio
+ v-model="extraParamState.status"
+ :value-enum="FlexWorkerEleSignEnumText"
+ buttonStyle
+ showAllBtn
+ @change="getList()"
+ />
+ </QueryFilterItem>
+ <QueryFilterItem tip-content="鍙戝竷鏃堕棿">
+ <FieldDatePicker
+ v-model="extraParamState.beginDate"
+ type="daterange"
+ range-separator="~"
+ start-placeholder="寮�濮嬫棩鏈�"
+ end-placeholder="缁撴潫鏃ユ湡"
+ clearable
+ @change="getList()"
+ ></FieldDatePicker>
+ </QueryFilterItem>
+ <QueryFilterItem>
+ <SearchInput
+ v-model="extraParamState.keyword"
+ style="width: 260px"
+ placeholder="浠诲姟鍚嶇О"
+ @on-click-search="getList"
+ >
+ </SearchInput>
+ </QueryFilterItem>
+ </template>
+ </ProTableQueryFilterBar>
+ <ProTableV2 v-bind="proTableProps" :columns="column" :operationBtns="operationBtns">
+ </ProTableV2>
+ </AppContainer>
+ </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+ ProTableQueryFilterBar,
+ OperationBtnType,
+ ProTableV2,
+ SearchInput,
+ LoadingLayout,
+ AppContainer,
+ QueryFilterItem,
+ useTable,
+ FieldDatePicker,
+ FieldSelect,
+ FieldRadio,
+} from '@bole-core/components';
+import { useAccess } from '@/hooks';
+import { FlexWorkerEleSignEnumText } from '@/constants';
+import { ModelValueType } from 'element-plus';
+import * as flexEnterpriseWokerServices from '@/services/api/FlexEnterpriseWoker';
+import { OrderInputType } from '@bole-core/core';
+
+defineOptions({
+ name: 'OperationManageList',
+});
+
+const operationBtnMap: Record<string, OperationBtnType> = {
+ detailBtn: { emits: { onClick: (role) => goDetail(role) } },
+ takeOnBtn: {
+ emits: { onClick: (role) => setAdvertiseOnShowStatus(role) },
+ extraProps: {
+ hide: (row) => row.status,
+ },
+ },
+ takeDownBtn: {
+ emits: { onClick: (role) => setAdvertiseOnShowStatus(role) },
+ props: { type: 'danger' },
+ extraProps: {
+ hide: (row) => !row.status,
+ },
+ },
+};
+
+const { checkSubModuleItemShow, column, operationBtns } = useAccess({
+ operationBtnMap,
+});
+
+const router = useRouter();
+const BaseState = {
+ loading: true,
+};
+
+const state = reactive({ ...BaseState });
+
+onMounted(async () => {
+ await getList();
+ state.loading = false;
+});
+
+const {
+ getDataSource: getList,
+ proTableProps,
+ paginationState,
+ extraParamState,
+ reset,
+} = useTable(
+ async ({ pageIndex, pageSize }, extraParamState) => {
+ try {
+ let params: API.GetUserClientForBackInput = {
+ pageModel: {
+ rows: pageSize,
+ page: pageIndex,
+ orderInput: extraParamState.orderInput,
+ },
+ searchKeys: extraParamState.keyword,
+ };
+ let res = await flexEnterpriseWokerServices.getUserClientList(params, {
+ showLoading: !state.loading,
+ });
+ return res;
+ } catch (error) {}
+ },
+ {
+ defaultExtraParams: {
+ keyword: '',
+ pageType: '' as any as number,
+ status: '' as any as boolean,
+ beginDate: [] as unknown as ModelValueType,
+ endDate: [] as unknown as ModelValueType,
+ orderInput: [{ property: 'sort', order: OrderInputType.Asc }],
+ },
+ columnsRenderProps: {},
+ columnPropsMap: ['advertiseBeginDate', 'advertiseEndDate'],
+ }
+);
+
+async function setAdvertiseOnShowStatus(row) {
+ try {
+ } catch (error) {}
+}
+
+function goDetail(row) {
+ router.push({ name: 'TaskDetail', params: { id: row?.id ?? '' } });
+}
+</script>
diff --git a/src/views/TaskManage/components/TaskDetailView.vue b/src/views/TaskManage/components/TaskDetailView.vue
new file mode 100644
index 0000000..fe82639
--- /dev/null
+++ b/src/views/TaskManage/components/TaskDetailView.vue
@@ -0,0 +1,75 @@
+<template>
+ <LoadingLayout :loading="isLoading">
+ <AppContainer>
+ <PageFormLayout>
+ <ProForm :model="detail" ref="formRef" label-width="140px" is-read>
+ <ProFormCol>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="浠诲姟鍚嶇О:" prop="name">
+ <ProFormText v-model.trim="detail.name" />
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ <ProFormCol>
+ <ProFormColItem :span="12">
+ <ProFormItemV2 label="浠诲姟鍚嶇О:" prop="name">
+ <RadioWithExtra
+ v-model="detail"
+ :value-enum="TrainSalaryTypeTextList"
+ enumLabelKey="text"
+ enum-value-key="value"
+ :showExtra="state.consultForm.salaryType === ConsultSalaryType.Input"
+ >
+ <template #extra>
+ <ProFormInputNumber
+ :controls="false"
+ :min="0"
+ :max="999"
+ v-model="state.consultForm.startMonthlySalary"
+ placeholder="璇疯緭鍏�"
+ ></ProFormInputNumber>
+ </template>
+ </RadioWithExtra>
+ </ProFormItemV2>
+ </ProFormColItem>
+ </ProFormCol>
+ </ProForm>
+ </PageFormLayout>
+ </AppContainer>
+ </LoadingLayout>
+</template>
+
+<script setup lang="ts">
+import {
+ LoadingLayout,
+ AppContainer,
+ PageFormLayout,
+ ProForm,
+ ProFormCol,
+ ProFormColItem,
+ ProFormItemV2,
+ ProFormText,
+ ProFormInputNumber,
+} from '@bole-core/components';
+import { useQuery } from '@tanstack/vue-query';
+
+defineOptions({
+ name: 'TaskDetailView',
+});
+
+const route = useRoute();
+const id = route.params?.id as string;
+
+const { data: detail, isLoading } = useQuery({
+ // queryKey: ['customerServices/getParkCustomerManageBaseDetail', id],
+ // queryFn: async () => {
+ // return await customerServices.getParkCustomerManageBaseDetail({ id: id });
+ // },
+ placeholderData: () => ({} as API.GetUserClientForBackOutput),
+ // enabled: !!id,
+});
+</script>
+
+<style lang="scss" scoped>
+@use '@/style/common.scss' as *;
+</style>
--
Gitblit v1.9.1