From 98bc9c89f7ef814b13bec06fa7b2737a3b51a44e Mon Sep 17 00:00:00 2001
From: zhengyiming <540361168@qq.com>
Date: 星期四, 13 二月 2025 13:57:15 +0800
Subject: [PATCH] fix: task
---
apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/mineJobIntention.vue | 2
packages/components/src/AreaTreeSelect/PositionSelectView.vue | 78 +++++++++++++
apps/cMiniApp/src/subpackages/curriculum/expectPosition/expectPosition.vue | 2
packages/components/src/Menu/QueryMenuView.vue | 13 +
apps/cMiniApp/src/pages/home/index.vue | 7 +
apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue | 24 +++
apps/cMiniApp/src/hooks/task.ts | 7 +
apps/cMiniApp/project.private.config.json | 14 ++
apps/cMiniApp/src/styles/nut.scss | 4
packages/components/src/Tag/JobTagList.vue | 21 +++
apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue | 27 ----
apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue | 2
packages/components/src/Input/CommonInputField.vue | 39 ++++++
packages/components/src/index.ts | 3
apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue | 81 +++++++++++++
apps/bMiniApp/src/styles/nut.scss | 4
apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue | 7 +
17 files changed, 296 insertions(+), 39 deletions(-)
diff --git a/apps/bMiniApp/src/styles/nut.scss b/apps/bMiniApp/src/styles/nut.scss
index 0c1480f..ee5295d 100644
--- a/apps/bMiniApp/src/styles/nut.scss
+++ b/apps/bMiniApp/src/styles/nut.scss
@@ -104,6 +104,10 @@
.nut-form-item__label {
margin-right: 0;
}
+
+ .nut-form-item__body {
+ width: 100%;
+ }
}
}
diff --git a/apps/cMiniApp/project.private.config.json b/apps/cMiniApp/project.private.config.json
index 181a6fd..53ae87f 100644
--- a/apps/cMiniApp/project.private.config.json
+++ b/apps/cMiniApp/project.private.config.json
@@ -9,6 +9,20 @@
"miniprogram": {
"list": [
{
+ "name": "鏈熸湜宀椾綅",
+ "pathName": "subpackages/curriculum/expectPosition/expectPosition",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
+ "name": "鎴戠殑绠�鍘�",
+ "pathName": "subpackages/curriculum/mineCurriculumVitae/mineCurriculumVitae",
+ "query": "",
+ "launchMode": "default",
+ "scene": null
+ },
+ {
"name": "姹傝亴鎰忓悜",
"pathName": "subpackages/curriculum/mineJobIntention/mineJobIntention",
"query": "",
diff --git a/apps/cMiniApp/src/hooks/task.ts b/apps/cMiniApp/src/hooks/task.ts
index 9591376..38b1733 100644
--- a/apps/cMiniApp/src/hooks/task.ts
+++ b/apps/cMiniApp/src/hooks/task.ts
@@ -12,11 +12,15 @@
export function useTaskList() {
const searchValue = ref('');
+ const DefaultQueryState = {
+ gender: '' as any as Gender,
+ };
+
const queryState = reactive({
searchValueTrim: '',
orderType: HomeOrderType.Recommend,
- gender: '' as any as Gender,
companyId: '',
+ ...DefaultQueryState,
});
const handleSearch = _.debounce(function () {
@@ -49,6 +53,7 @@
return {
searchValue,
queryState,
+ DefaultQueryState,
handleSearch,
infiniteLoadingProps,
};
diff --git a/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue b/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue
index a6e9304..3a181c1 100644
--- a/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue
+++ b/apps/cMiniApp/src/pages/home/HomeQueryMenuView.vue
@@ -1,5 +1,5 @@
<template>
- <QueryMenuView @close="emit('close')">
+ <QueryMenuView @close="handleReset" @confirm="emit('close')" cancelText="閲嶇疆">
<div class="home-query-menu-view">
<QueryMenuItem title="缁撶畻鏂瑰紡">
<ProRadio v-model="gender" :value-enum="GenderText" show-all-btn></ProRadio>
@@ -27,10 +27,15 @@
// const props = withDefaults(defineProps<Props>(), {});
const emit = defineEmits<{
+ (e: 'reset'): void;
(e: 'close'): void;
}>();
const gender = defineModel<number | string>('gender');
+
+function handleReset() {
+ emit('reset');
+}
</script>
<style lang="scss">
diff --git a/apps/cMiniApp/src/pages/home/index.vue b/apps/cMiniApp/src/pages/home/index.vue
index e8739cf..a627853 100644
--- a/apps/cMiniApp/src/pages/home/index.vue
+++ b/apps/cMiniApp/src/pages/home/index.vue
@@ -46,6 +46,7 @@
<HomeQueryMenuView
v-model:gender="queryState.gender"
@close="handleMenuSelectClose"
+ @reset="handleMenuSelectReset"
></HomeQueryMenuView>
</MenuItem>
</Menu>
@@ -79,7 +80,8 @@
const userStore = useUserStore();
-const { searchValue, queryState, handleSearch, infiniteLoadingProps } = useTaskList();
+const { searchValue, queryState, handleSearch, infiniteLoadingProps, DefaultQueryState } =
+ useTaskList();
function goCitySelect() {
Taro.navigateTo({
@@ -99,6 +101,9 @@
function handleMenuSelectClose() {
selectItem.value?.toggle?.();
}
+function handleMenuSelectReset() {
+ Object.assign(queryState, { ...DefaultQueryState });
+}
function goTaskDetail(item: API.FrontOrderList) {
Taro.navigateTo({
diff --git a/apps/cMiniApp/src/styles/nut.scss b/apps/cMiniApp/src/styles/nut.scss
index 0c1480f..ee5295d 100644
--- a/apps/cMiniApp/src/styles/nut.scss
+++ b/apps/cMiniApp/src/styles/nut.scss
@@ -104,6 +104,10 @@
.nut-form-item__label {
margin-right: 0;
}
+
+ .nut-form-item__body {
+ width: 100%;
+ }
}
}
diff --git a/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue
index 77f18e3..ca2afc3 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/expectPosition/InnerPage.vue
@@ -1,13 +1,92 @@
<template>
- <div>InnerPage</div>
+ <ContentView :paddingH="false" class="expect-position-view">
+ <PositionSelectView v-model="positionList" />
+ </ContentView>
+ <PageFooter>
+ <div class="expect-position-page-footer">
+ <div class="expect-position-select-wrapper" v-if="positionList.length > 0">
+ <div class="expect-position-select-item" v-for="(item, index) in positionList" :key="index">
+ <div class="expect-position-select-item-text">{{ item }}</div>
+ <div class="expect-position-select-item-icon-wrapper">
+ <Close :size="8" class="expect-position-select-item-icon" />
+ </div>
+ </div>
+ </div>
+ <PageFooterBtn type="primary">淇濆瓨</PageFooterBtn>
+ </div>
+ </PageFooter>
</template>
<script setup lang="ts">
+import { PositionSelectView } from '@12333/components';
+import { Close } from '@nutui/icons-vue-taro';
+import { size } from 'lodash';
+
defineOptions({
name: 'InnerPage',
});
+
+const positionList = ref([]);
</script>
<style lang="scss">
@import '@/styles/common.scss';
+
+.expectPosition-page-wrapper {
+ .expect-position-view {
+ flex: 1;
+ min-height: 0;
+
+ .nut-category {
+ height: 100%;
+ }
+ }
+
+ .expect-position-page-footer {
+ width: 100%;
+ padding: 0 boleGetCssVar('size', 'body-padding-h');
+
+ .page-footer-btn {
+ margin: 0;
+ width: 100%;
+ }
+
+ .expect-position-select-wrapper {
+ display: flex;
+ flex-wrap: wrap;
+ margin-bottom: 40px;
+ column-gap: 16px;
+ row-gap: 24px;
+ padding-top: 24px;
+
+ .expect-position-select-item {
+ display: flex;
+ align-items: center;
+ padding: 0 28px;
+ height: 64px;
+ border-radius: 32px;
+ background-color: #f6faff;
+
+ .expect-position-select-item-text {
+ font-weight: 400;
+ font-size: 24px;
+ color: #536077;
+ line-height: 24px;
+ }
+
+ .expect-position-select-item-icon-wrapper {
+ padding: 8px;
+ padding-right: 0;
+ padding-left: 30px;
+ display: flex;
+ align-items: center;
+ }
+
+ .expect-position-select-item-icon {
+ color: boleGetCssVar('text-color', 'secondary');
+ }
+ }
+ }
+ }
+}
</style>
diff --git a/apps/cMiniApp/src/subpackages/curriculum/expectPosition/expectPosition.vue b/apps/cMiniApp/src/subpackages/curriculum/expectPosition/expectPosition.vue
index 872be0a..154b29d 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/expectPosition/expectPosition.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/expectPosition/expectPosition.vue
@@ -1,5 +1,5 @@
<template>
- <PageLayout class="expectPosition-page-wrapper" :title="'鏈熸湜宀椾綅'">
+ <PageLayout class="expectPosition-page-wrapper" :title="'鏈熸湜宀椾綅'" has-border>
<InnerPage></InnerPage>
</PageLayout>
</template>
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue
index 9d00f77..9ac70ee 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineCurriculumVitae/InnerPage.vue
@@ -46,12 +46,7 @@
</div>
<MineAgreementSignDetailItem label="鏈熸湜宀椾綅" class="mine-curriculum-intention-job">
<template #detail>
- <div class="mine-curriculum-intention-job-content">
- <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
- <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
- <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
- <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
- </div>
+ <JobTagList />
</template>
</MineAgreementSignDetailItem>
<MineAgreementSignDetailItem label="绌洪棽鏃堕棿">
@@ -93,7 +88,7 @@
import { useUserStore } from '@/stores/modules/user';
import { useIsLogin } from '@/hooks';
import MineAgreementSignDetailItem from '../../mine/mineAgreementSignDetail/MineAgreementSignDetailItem.vue';
-import { List, ListItem } from '@12333/components';
+import { List, ListItem, JobTagList } from '@12333/components';
import { RouterPath } from '@/constants';
import IconArrow from '@/assets/setting/icon-arrow.png';
import IconAuth from '@/assets/mine/icon-auth.png';
@@ -241,24 +236,6 @@
.mine-curriculum-intention-job {
align-items: flex-start;
-
- .mine-curriculum-intention-job-content {
- display: inline-flex;
- flex-wrap: wrap;
-
- .mine-curriculum-intention-job-item {
- font-size: 20px;
- color: boleGetCssVar('color', 'primary');
- padding: 6px 16px;
- background-color: #edf2ff;
- border-radius: 4px;
- display: inline-flex;
- align-items: center;
- justify-content: center;
- margin-right: 16px;
- margin-bottom: 14px;
- }
- }
}
.mine-curriculum-intention-bold {
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue
index 2420203..d123c03 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/InnerPage.vue
@@ -2,11 +2,14 @@
<ContentScrollView :paddingH="false">
<nut-form :model-value="form" ref="formRef" :rules="rules">
<nut-form-item label="鏈熸湜宀椾綅:" class="bole-form-item" prop="job" label-position="top">
- <ChooseInputWithPicker
+ <!-- <ChooseInputWithPicker
v-model="form.job"
placeholder="璇烽�夋嫨鏈熸湜宀椾綅"
:value-enum="TaskStatusText"
- />
+ /> -->
+ <CommonInputField class="job-common-input-field" @click="goExpectPosition">
+ <JobTagList />
+ </CommonInputField>
</nut-form-item>
<nut-form-item label="绌洪棽鏃堕棿:" class="bole-form-item" prop="job">
<ChooseInputWithPicker
@@ -31,9 +34,10 @@
<script setup lang="ts">
import { FormRules } from '@nutui/nutui-taro/dist/types/__VUE/form/types';
-import { ChooseInputWithPicker } from '@12333/components';
+import { ChooseInputWithPicker, JobTagList, CommonInputField } from '@12333/components';
import { TaskStatusText, TaskStatus } from '@/constants';
import { useUser } from '@/hooks';
+import Taro from '@tarojs/taro';
defineOptions({
name: 'InnerPage',
@@ -59,8 +63,22 @@
}
function confirm() {}
+
+function goExpectPosition() {
+ Taro.navigateTo({
+ url: `${RouterPath.expectPosition}`,
+ });
+}
</script>
<style lang="scss">
@import '@/styles/common.scss';
+
+.mineJobIntention-page-wrapper {
+ .job-common-input-field {
+ .common-input-field-icon {
+ margin-top: 13px;
+ }
+ }
+}
</style>
diff --git a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/mineJobIntention.vue b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/mineJobIntention.vue
index 4e3feed..6c488c8 100644
--- a/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/mineJobIntention.vue
+++ b/apps/cMiniApp/src/subpackages/curriculum/mineJobIntention/mineJobIntention.vue
@@ -1,5 +1,5 @@
<template>
- <PageLayout class="index-page-wrapper" :title="'姹傝亴鎰忓悜'" has-border>
+ <PageLayout class="mineJobIntention-page-wrapper" :title="'姹傝亴鎰忓悜'" has-border>
<InnerPage></InnerPage>
</PageLayout>
</template>
diff --git a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
index 2226d4f..7b64f7d 100644
--- a/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
+++ b/apps/cMiniApp/src/subpackages/task/taskDetail/InnerPage.vue
@@ -76,7 +76,7 @@
openType="share"
></PageFooterAction>
<PageFooterAction :icon="IconPhone" text="鎵嬫満" :isFlex="false"></PageFooterAction>
- <PageFooterBtn type="primary">鎶ュ悕</PageFooterBtn>
+ <PageFooterBtn type="primary">鎶ュ悕锛�5浜哄凡鎶ュ悕锛�</PageFooterBtn>
</PageFooter>
</LoadingLayout>
</template>
diff --git a/packages/components/src/AreaTreeSelect/PositionSelectView.vue b/packages/components/src/AreaTreeSelect/PositionSelectView.vue
new file mode 100644
index 0000000..048754e
--- /dev/null
+++ b/packages/components/src/AreaTreeSelect/PositionSelectView.vue
@@ -0,0 +1,78 @@
+<template>
+ <Category :category="provinceList" @change="change" class="position-select-view">
+ <CategoryPane :max="max" :categoryChild="categoryChild" :multiple="multiple" v-model="model">
+ </CategoryPane>
+ </Category>
+</template>
+
+<script setup lang="ts">
+import { useAllAreaList } from '@12333/hooks';
+import Category from './Category.vue';
+import CategoryPane from './CategoryPane.vue';
+import { reactive, computed, watch } from 'vue';
+
+defineOptions({
+ name: 'PositionSelectView',
+});
+
+type Props = {
+ multiple?: boolean;
+ max?: number;
+};
+
+const props = withDefaults(defineProps<Props>(), {
+ multiple: true,
+});
+
+const model = defineModel<number[]>();
+
+const state = reactive({
+ provinceIndex: 0,
+});
+
+const { areaTreeList } = useAllAreaList();
+
+const provinceList = computed(() => areaTreeList.value.map((x) => ({ ...x, name: x.areaName })));
+
+const categoryChild = computed(() => {
+ if (!provinceList.value.length) {
+ return [];
+ }
+ return provinceList.value[state.provinceIndex].children.map((x) => ({
+ ...x,
+ name: x.areaName,
+ value: x.areaCode,
+ }));
+});
+
+const change = (index: number) => {
+ state.provinceIndex = index;
+};
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.position-select-view {
+ .nut-category__cateList {
+ height: 100%;
+
+ & > .h5-div {
+ height: 100%;
+ overflow-y: auto;
+ }
+
+ .nut-category__cateList-scroll {
+ height: 100%;
+ width: auto;
+ }
+ }
+
+ .nut-category-pane {
+ height: 100%;
+ overflow-y: auto;
+ flex: 1;
+ min-width: 0;
+ }
+}
+</style>
diff --git a/packages/components/src/Input/CommonInputField.vue b/packages/components/src/Input/CommonInputField.vue
new file mode 100644
index 0000000..9b77dd2
--- /dev/null
+++ b/packages/components/src/Input/CommonInputField.vue
@@ -0,0 +1,39 @@
+<template>
+ <div class="common-input-field-wrapper">
+ <div class="common-input-field">
+ <slot></slot>
+ </div>
+ <RectRight :size="12" class="common-input-field-icon" />
+ </div>
+</template>
+
+<script setup lang="ts">
+import { RectRight } from '@nutui/icons-vue-taro';
+
+defineOptions({
+ name: 'CommonInputField',
+});
+
+// type Props = {};
+
+// const props = withDefaults(defineProps<Props>(), {});
+</script>
+
+<style lang="scss">
+@import '@/styles/common.scss';
+
+.common-input-field-wrapper {
+ display: flex;
+ width: 100%;
+
+ .common-input-field {
+ flex: 1;
+ min-width: 0;
+ }
+
+ .common-input-field-icon {
+ margin-left: 18px;
+ color: boleGetCssVar('text-color', 'primary');
+ }
+}
+</style>
diff --git a/packages/components/src/Menu/QueryMenuView.vue b/packages/components/src/Menu/QueryMenuView.vue
index 1d34000..8f161e3 100644
--- a/packages/components/src/Menu/QueryMenuView.vue
+++ b/packages/components/src/Menu/QueryMenuView.vue
@@ -10,7 +10,7 @@
:color="Colors.Info"
@click="handleCancel"
>
- 鍙栨秷
+ {{ cancelText }}
</nut-button>
<nut-button shape="square" type="primary" @click="handleConfirm">纭</nut-button>
</div>
@@ -25,12 +25,17 @@
name: 'QueryMenuView',
});
-// type Props = {};
+type Props = {
+ cancelText?: string;
+};
-// const props = withDefaults(defineProps<Props>(), {});
+const props = withDefaults(defineProps<Props>(), {
+ cancelText: '鍙栨秷',
+});
const emit = defineEmits<{
(e: 'close'): void;
+ (e: 'confirm'): void;
}>();
function handleCancel() {
@@ -38,7 +43,7 @@
}
function handleConfirm() {
- emit('close');
+ emit('confirm');
}
</script>
diff --git a/packages/components/src/Tag/JobTagList.vue b/packages/components/src/Tag/JobTagList.vue
index a438ebd..c962b4c 100644
--- a/packages/components/src/Tag/JobTagList.vue
+++ b/packages/components/src/Tag/JobTagList.vue
@@ -4,6 +4,10 @@
<div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
<div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
<div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
+ <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
+ <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
+ <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
+ <div class="mine-curriculum-intention-job-item">瀹㈡埧鏈嶅姟鍛�</div>
</div>
</template>
@@ -19,4 +23,21 @@
<style lang="scss">
@import '@/styles/common.scss';
+
+.mine-curriculum-intention-job-content {
+ display: inline-flex;
+ flex-wrap: wrap;
+ gap: 16px;
+
+ .mine-curriculum-intention-job-item {
+ font-size: 20px;
+ color: boleGetCssVar('color', 'primary');
+ padding: 6px 16px;
+ background-color: #edf2ff;
+ border-radius: 4px;
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ }
+}
</style>
diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts
index 1de1c75..5d66333 100644
--- a/packages/components/src/index.ts
+++ b/packages/components/src/index.ts
@@ -26,3 +26,6 @@
export { default as QueryMenuItem } from './Menu/QueryMenuItem.vue';
export { default as ProRadio } from './Form/ProRadio.vue';
export { default as Calendar } from './Calendar/Calendar.vue';
+export { default as JobTagList } from './Tag/JobTagList.vue';
+export { default as CommonInputField } from './Input/CommonInputField.vue';
+export { default as PositionSelectView } from './AreaTreeSelect/PositionSelectView.vue';
--
Gitblit v1.9.1