From 7ab49073679e738a11c33d0b094fe7308e83fd51 Mon Sep 17 00:00:00 2001 From: wupengfei <834520024@qq.com> Date: 星期一, 17 二月 2025 10:50:05 +0800 Subject: [PATCH] feat: 签约 --- apps/bMiniApp/src/app.config.ts | 6 + packages/components/src/index.ts | 1 apps/bMiniApp/src/constants/router.ts | 1 apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue | 8 + apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/flexJobSign.vue | 17 ++++ packages/components/src/Card/SignCard.vue | 75 ++++++++++++++++++ apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/flexJobSign.config.ts | 3 apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue | 97 ++++++++++++++++++++++++ apps/bMiniApp/project.private.config.json | 2 9 files changed, 206 insertions(+), 4 deletions(-) diff --git a/apps/bMiniApp/project.private.config.json b/apps/bMiniApp/project.private.config.json index ccb2035..d0bebf8 100644 --- a/apps/bMiniApp/project.private.config.json +++ b/apps/bMiniApp/project.private.config.json @@ -80,7 +80,7 @@ }, { "name": "", - "pathName": "subpackages/flexJobManage/flexJobManage/flexJobManage", + "pathName": "subpackages/flexJobManage/flexJobSign/flexJobSign", "query": "", "launchMode": "default", "scene": null diff --git a/apps/bMiniApp/src/app.config.ts b/apps/bMiniApp/src/app.config.ts index 54ee05b..65805de 100644 --- a/apps/bMiniApp/src/app.config.ts +++ b/apps/bMiniApp/src/app.config.ts @@ -102,7 +102,11 @@ }, { root: 'subpackages/flexJobManage', - pages: ['flexJobManage/flexJobManage', 'flexJobDetailFromManage/flexJobDetailFromManage'], + pages: [ + 'flexJobManage/flexJobManage', + 'flexJobDetailFromManage/flexJobDetailFromManage', + 'flexJobSign/flexJobSign', + ], }, ], // preloadRule: { diff --git a/apps/bMiniApp/src/constants/router.ts b/apps/bMiniApp/src/constants/router.ts index 1d664e3..51db33e 100644 --- a/apps/bMiniApp/src/constants/router.ts +++ b/apps/bMiniApp/src/constants/router.ts @@ -15,6 +15,7 @@ flexJobManage = '/subpackages/flexJobManage/flexJobManage/flexJobManage', flexJobDetailFromManage = '/subpackages/flexJobManage/flexJobDetailFromManage/flexJobDetailFromManage', + flexJobSign = '/subpackages/flexJobManage/flexJobSign/flexJobSign', // userInfo = '/subpackages/setting/userInfo/userInfo', // setting = '/subpackages/setting/setting/setting', diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue index 34e4490..6bc6b6b 100644 --- a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue +++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue @@ -29,7 +29,7 @@ > <nut-button type="primary" @click.stop="checkContract">鏌ョ湅鍚堢害</nut-button> </template> - <nut-button v-else type="primary" @click.stop="goSignContract">绛剧害</nut-button> + <nut-button v-else type="primary" @click.stop="goSignContract(item)">绛剧害</nut-button> </template> </FlexJobCard> </template> @@ -80,7 +80,11 @@ function checkContract() {} function handleUnContract() {} -function goSignContract() {} +function goSignContract(item: API.FrontOrderList) { + Taro.navigateTo({ + url: `${RouterPath.flexJobSign}`, + }); +} </script> <style lang="scss"> diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue new file mode 100644 index 0000000..a61173f --- /dev/null +++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue @@ -0,0 +1,97 @@ +<template> + <ContentScrollView style="background-color: transparent"> + <div class="flexJobSign-page-wrapper"> + <div class="searchbar-container"> + <BlSearchbar + v-model.trim="searchValue" + placeholder="鎼滅储鍚堝悓鍚�/缂栧彿" + @search="handleSearch" + @change="handleSearch" + ></BlSearchbar> + <ChunkTitle title="鍚堝悓鍒楄〃" /> + </div> + + <InfiniteLoading + scrollViewClassName="common-infinite-scroll-list home-list" + v-bind="infiniteLoadingProps" + > + <template #renderItem="{ item }"> + <SignCard + @click="handleCheck(item)" + v-model:checked-id="checkedId" + :id="item.id" + ></SignCard> + </template> + </InfiniteLoading> + </div> + </ContentScrollView> + + <PageFooter> + <PageFooterBtn type="primary">閭�璇风绾�</PageFooterBtn> + </PageFooter> +</template> + +<script setup lang="ts"> +import { useInfiniteLoading } from '@12333/hooks'; +import { OrderInputType } from '@12333/constants'; +import * as orderServices from '@12333/services/api/Order'; +import _ from 'lodash'; +import { trim } from '@12333/utils'; +import { SignCard } from '@12333/components'; + +defineOptions({ + name: 'InnerPage', +}); + +const searchValue = ref(''); +const queryState = reactive({ + searchValueTrim: '', +}); + +const checkedId = ref(''); + +const handleSearch = _.debounce(function () { + queryState.searchValueTrim = trim(searchValue.value); +}, 300); + +const { infiniteLoadingProps } = useInfiniteLoading( + ({ pageParam }) => { + let params: API.FrontOrderListInput = { + pageModel: { + rows: 20, + page: pageParam, + orderInput: [{ property: 'isRecommend', order: OrderInputType.Desc }], + }, + }; + + return orderServices.getFrontOrderList(params, { + showLoading: false, + }); + }, + { + queryKey: ['orderServices/getFrontOrderList'], + } +); + +function handleCheck(item: API.OrderInfoDto) { + checkedId.value = item.id; +} +</script> + +<style lang="scss"> +@import '@/styles/common.scss'; + +.flexJobSign-page-wrapper { + .searchbar-container { + padding: 30px; + } + + .chunk-title-wrapper { + padding: 30px 0 0; + } + + .home-list { + background-color: #ffffff; + } +} +</style> diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/flexJobSign.config.ts b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/flexJobSign.config.ts new file mode 100644 index 0000000..305fdb1 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/flexJobSign.config.ts @@ -0,0 +1,3 @@ +export default definePageConfig({ + disableScroll: true, +}); diff --git a/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/flexJobSign.vue b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/flexJobSign.vue new file mode 100644 index 0000000..20644f2 --- /dev/null +++ b/apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/flexJobSign.vue @@ -0,0 +1,17 @@ +<template> + <PageLayoutWithBg class="flexJobSign-page-wrapper" :title="'绛剧害'" :need-auth="false"> + <InnerPage></InnerPage> + </PageLayoutWithBg> +</template> + +<script setup lang="ts"> +import InnerPage from './InnerPage.vue'; + +defineOptions({ + name: 'flexJobSign', +}); +</script> + +<style lang="scss"> +@import '@/styles/common.scss'; +</style> diff --git a/packages/components/src/Card/SignCard.vue b/packages/components/src/Card/SignCard.vue new file mode 100644 index 0000000..a0e38fb --- /dev/null +++ b/packages/components/src/Card/SignCard.vue @@ -0,0 +1,75 @@ +<template> + <div class="sign-card-wrapper"> + <div class="sign-card-title">{{ '鍚堝悓缂栧彿锛�0293848340' }}</div> + <div class="sign-card-content"> + <div class="sign-card-content-name">{{ 'xxxx鍔冲姟鍏徃鍚堝悓' }}</div> + <div class="sign-card-content-icon"> + <IconFont v-if="selected" name="check-checked" color="#3A71FF" size="16"></IconFont> + <IconFont v-else name="check-normal" size="16"></IconFont> + </div> + </div> + </div> +</template> + +<script setup lang="ts"> +import { IconFont } from '@nutui/icons-vue-taro'; +import { computed } from 'vue'; + +defineOptions({ + name: 'SignCard', +}); + +type Props = { + checkedId?: string; + id: string; +}; + +const props = withDefaults(defineProps<Props>(), {}); + +const emit = defineEmits<{ + (e: 'update:checkedId', value: string): void; +}>(); + +const innerCheckedId = computed({ + get() { + return props.checkedId; + }, + set(val) { + emit('update:checkedId', val); + }, +}); + +const selected = computed(() => innerCheckedId.value === props.id); +</script> + +<style lang="scss"> +@import '@/styles/common.scss'; + +.sign-card-wrapper { + padding: 24px 24px 20px 10px; + border-bottom: 2px solid #f6f6f6; + + .sign-card-title { + font-size: 20px; + color: boleGetCssVar('text-color', 'secondary'); + margin-bottom: 14px; + } + + .sign-card-content { + display: flex; + align-items: center; + justify-content: space-between; + + .sign-card-content-name { + font-size: 24px; + line-height: 32px; + color: boleGetCssVar('text-color', 'primary'); + } + + .sign-card-content-icon { + width: 32px; + height: 32px; + } + } +} +</style> diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts index 2e4af05..eff99ae 100644 --- a/packages/components/src/index.ts +++ b/packages/components/src/index.ts @@ -23,6 +23,7 @@ export { default as MineAgreementSignCard } from './Card/MineAgreementSignCard.vue'; export { default as JobApplicationCard } from './Card/JobApplicationCard.vue'; export { default as MyTaskCard } from './Card/MyTaskCard.vue'; +export { default as SignCard } from './Card/SignCard.vue'; export { default as FlexJobCard } from './Card/FlexJobCard.vue'; export { default as TaskPrice } from './Card/TaskPrice.vue'; export { default as TaskDetailWelfareItem } from './Card/TaskDetailWelfareItem.vue'; -- Gitblit v1.9.1