13个文件已修改
13个文件已添加
1个文件已删除
| | |
| | | "miniprogram": { |
| | | "list": [ |
| | | { |
| | | "name": "任务", |
| | | "pathName": "pages/task/task", |
| | | "query": "", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "公司详情", |
| | | "pathName": "subpackages/task/companyDetail/companyDetail", |
| | | "query": "id=c4cfe028-23e7-0be8-ee56-3a11e3743b9d", |
| | | "launchMode": "default", |
| | | "scene": null |
| | | }, |
| | | { |
| | | "name": "任务详情", |
| | | "pathName": "subpackages/task/taskDetail/taskDetail", |
| | | "query": "id=c4cfe028-23e7-0be8-ee56-3a11e3743b9d", |
| | |
| | | }, |
| | | { |
| | | root: 'subpackages/task', |
| | | pages: ['taskDetail/taskDetail'], |
| | | pages: ['taskDetail/taskDetail', 'companyDetail/companyDetail'], |
| | | }, |
| | | { |
| | | root: 'subpackages/user', |
| | | pages: ['complaint/complaint'], |
| | | }, |
| | | ], |
| | | // preloadRule: { |
| | |
| | | <template> |
| | | <div class="bole-cell-wrapper"> |
| | | <div class="cell-title-wrapper"> |
| | | <div class="cell-title-wrapper" v-if="showTitle"> |
| | | <slot name="title"> |
| | | <div :class="titleSize === 'normal' ? 'cell-title' : 'cell-title-large'">{{ title }}</div> |
| | | <slot name="title-right"></slot> |
| | |
| | | type Props = { |
| | | title?: string; |
| | | titleSize?: 'large' | 'normal'; |
| | | showTitle?: boolean; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | titleSize: 'normal', |
| | | showTitle: true, |
| | | }); |
| | | </script> |
| | | |
New file |
| | |
| | | <template> |
| | | <div class="cell-chunk-wrapper"> |
| | | <div class="cell-title-wrapper"> |
| | | <slot name="title"> |
| | | <div :class="titleSize === 'normal' ? 'cell-title' : 'cell-title-large'">{{ title }}</div> |
| | | <slot name="title-right"></slot> |
| | | </slot> |
| | | </div> |
| | | <slot></slot> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | defineOptions({ |
| | | name: 'CellChunk', |
| | | }); |
| | | |
| | | type Props = { |
| | | title?: string; |
| | | titleSize?: 'large' | 'normal'; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | titleSize: 'normal', |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .cell-chunk-wrapper { |
| | | margin-bottom: 20px; |
| | | |
| | | &:last-child { |
| | | margin-bottom: 0; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | editRichContent = '/subpackages/editRichContent/editRichContent', |
| | | |
| | | taskDetail = '/subpackages/task/taskDetail/taskDetail', |
| | | companyDetail = '/subpackages/task/companyDetail/companyDetail', |
| | | |
| | | // userInfo = '/subpackages/setting/userInfo/userInfo', |
| | | // setting = '/subpackages/setting/setting/setting', |
| | |
| | | ></TarBarItem> |
| | | |
| | | <TarBarItem |
| | | text="消息" |
| | | text="任务" |
| | | icon="../assets/tabbar/icon-task.png" |
| | | activeIcon="../assets/tabbar/icon-task-active.png" |
| | | pagePath={TabBarPageRouter.Task} |
| | |
| | | export * from './access'; |
| | | export * from './login'; |
| | | export * from './authentication'; |
| | | export * from './task'; |
New file |
| | |
| | | import { useInfiniteLoading } from '@12333/hooks'; |
| | | import { OrderInputType, Gender } from '@12333/constants'; |
| | | import * as orderServices from '@12333/services/api/Order'; |
| | | import _ from 'lodash'; |
| | | import { trim } from '@12333/utils'; |
| | | |
| | | export enum HomeOrderType { |
| | | Recommend = 'Recommend', |
| | | LastShelfTime = 'LastShelfTime', |
| | | } |
| | | |
| | | export function useTaskList() { |
| | | const searchValue = ref(''); |
| | | |
| | | const queryState = reactive({ |
| | | searchValueTrim: '', |
| | | orderType: HomeOrderType.Recommend, |
| | | gender: '' as any as Gender, |
| | | companyId: '', |
| | | }); |
| | | |
| | | const handleSearch = _.debounce(function () { |
| | | queryState.searchValueTrim = trim(searchValue.value); |
| | | }, 300); |
| | | |
| | | const { infiniteLoadingProps } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.FrontOrderListInput = { |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | orderInput: [ |
| | | queryState.orderType === HomeOrderType.Recommend |
| | | ? { property: 'isRecommend', order: OrderInputType.Desc } |
| | | : { property: 'lastShelfTime', order: OrderInputType.Desc }, |
| | | ], |
| | | }, |
| | | }; |
| | | |
| | | return orderServices.getFrontOrderList(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | { |
| | | queryKey: ['orderServices/getFrontOrderList', queryState], |
| | | } |
| | | ); |
| | | |
| | | return { |
| | | searchValue, |
| | | queryState, |
| | | handleSearch, |
| | | infiniteLoadingProps, |
| | | }; |
| | | } |
| | |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { useUser } from '@/hooks'; |
| | | import { useUser, useTaskList, HomeOrderType } from '@/hooks'; |
| | | import { useUserStore } from '@/stores/modules/user'; |
| | | import { RectDown, Location2 } from '@nutui/icons-vue-taro'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { LocationUtils, trim } from '@12333/utils'; |
| | | import _ from 'lodash'; |
| | | import IconLogo from '@/assets/home/icon-logo.png'; |
| | | import { useInfiniteLoading } from '@12333/hooks'; |
| | | import { OrderInputType, Gender } from '@12333/constants'; |
| | | import * as orderServices from '@12333/services/api/Order'; |
| | | import { TaskCard, ProTabs, ProTabPane } from '@12333/components'; |
| | | import { HomeOrderType } from './constants'; |
| | | import HomeQueryMenuView from './HomeQueryMenuView.vue'; |
| | | |
| | | const { locationCity } = useUser(); |
| | | |
| | | const searchValue = ref(''); |
| | | |
| | | const queryState = reactive({ |
| | | searchValueTrim: '', |
| | | orderType: HomeOrderType.Recommend, |
| | | gender: '' as any as Gender, |
| | | }); |
| | | |
| | | const handleSearch = _.debounce(function () { |
| | | queryState.searchValueTrim = trim(searchValue.value); |
| | | }, 300); |
| | | |
| | | const userStore = useUserStore(); |
| | | |
| | | const { searchValue, queryState, handleSearch, infiniteLoadingProps } = useTaskList(); |
| | | |
| | | function goCitySelect() { |
| | | Taro.navigateTo({ |
| | |
| | | 'https://storage.360buyimg.com/jdc-article/welcomenutui.jpg', |
| | | 'https://storage.360buyimg.com/jdc-article/fristfabu.jpg', |
| | | ]); |
| | | |
| | | const { infiniteLoadingProps } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.FrontOrderListInput = { |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | orderInput: [ |
| | | queryState.orderType === HomeOrderType.Recommend |
| | | ? { property: 'isRecommend', order: OrderInputType.Desc } |
| | | : { property: 'lastShelfTime', order: OrderInputType.Desc }, |
| | | ], |
| | | }, |
| | | }; |
| | | |
| | | return orderServices.getFrontOrderList(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | { |
| | | queryKey: ['orderServices/getFrontOrderList', queryState], |
| | | } |
| | | ); |
| | | |
| | | const selectItem = ref(); |
| | | |
New file |
| | |
| | | <template> |
| | | <Calendar v-model="queryState.date"></Calendar> |
| | | <ProTabs |
| | | v-model="queryState.status" |
| | | name="task-tab" |
| | | :showPaneContent="false" |
| | | class="task-tabs" |
| | | isTransparent |
| | | title-gutter="8" |
| | | title-scroll |
| | | > |
| | | <ProTabPane :title="`待提交`" :pane-key="10"></ProTabPane> |
| | | <ProTabPane :title="`待验收`" :pane-key="20"></ProTabPane> |
| | | </ProTabs> |
| | | <InfiniteLoading |
| | | scrollViewClassName="common-infinite-scroll-list task-list" |
| | | v-bind="infiniteLoadingProps" |
| | | :key="queryState.status" |
| | | > |
| | | <template #renderItem="{ item }"> |
| | | <MyTaskCard @click="goSubmitTaskDetail(item)" /> |
| | | </template> |
| | | </InfiniteLoading> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { MyTaskCard, ProTabs, ProTabPane, Calendar } from '@12333/components'; |
| | | import Taro from '@tarojs/taro'; |
| | | import { useInfiniteLoading } from '@12333/hooks'; |
| | | import { OrderInputType } from '@12333/constants'; |
| | | import * as orderServices from '@12333/services/api/Order'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | | }); |
| | | |
| | | const queryState = reactive({ |
| | | status: 10, |
| | | date: new Date(), |
| | | }); |
| | | |
| | | const { infiniteLoadingProps } = useInfiniteLoading( |
| | | ({ pageParam }) => { |
| | | let params: API.FrontOrderListInput = { |
| | | pageModel: { |
| | | rows: 20, |
| | | page: pageParam, |
| | | orderInput: [{ property: 'lastShelfTime', order: OrderInputType.Desc }], |
| | | }, |
| | | }; |
| | | |
| | | return orderServices.getFrontOrderList(params, { |
| | | showLoading: false, |
| | | }); |
| | | }, |
| | | { |
| | | queryKey: ['orderServices/getFrontOrderList', queryState], |
| | | } |
| | | ); |
| | | |
| | | function goSubmitTaskDetail(item: API.FrontOrderList) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.taskDetail}?id=${item.id}`, |
| | | }); |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .task-list { |
| | | @include infiniteLoadingInTabBarPage; |
| | | } |
| | | </style> |
| | |
| | | <template> |
| | | <div>task</div> |
| | | <PageLayoutWithBg class="task-page-wrapper" title="任务"> |
| | | <InnerPage /> |
| | | </PageLayoutWithBg> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import InnerPage from './InnerPage.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'task', |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | </style> |
New file |
| | |
| | | export default definePageConfig({ |
| | | disableScroll: true, |
| | | }); |
New file |
| | |
| | | <template> |
| | | <PageLayoutWithBg class="companyDetail-page-wrapper" title="公司详情" :need-auth="false"> |
| | | <LoadingLayout :loading="isLoading" :error="isError" :loadError="refetch"> |
| | | <ContentView> |
| | | <CompanyDesc style="background-color: #fff" :showArrow="false"></CompanyDesc> |
| | | </ContentView> |
| | | <ProTabs |
| | | v-model="tab" |
| | | name="companyDetail-tab" |
| | | :showSmile="false" |
| | | class="companyDetail-tabs" |
| | | isTransparent |
| | | title-gutter="8" |
| | | fullHeight |
| | | > |
| | | <ProTabPane :title="`任务`" pane-key="1"> |
| | | <CompanyTaskList /> |
| | | </ProTabPane> |
| | | <ProTabPane :title="`企业信息`" pane-key="2"> |
| | | <CompanyInfo /> |
| | | </ProTabPane> |
| | | </ProTabs> |
| | | </LoadingLayout> |
| | | </PageLayoutWithBg> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import Taro from '@tarojs/taro'; |
| | | import { useQuery } from '@tanstack/vue-query'; |
| | | import * as orderServices from '@12333/services/api/Order'; |
| | | import CompanyDesc from '../components/CompanyDesc.vue'; |
| | | import CompanyTaskList from '../components/CompanyTaskList.vue'; |
| | | import CompanyInfo from '../components/CompanyInfo.vue'; |
| | | import { ProTabs, ProTabPane } from '@12333/components'; |
| | | |
| | | defineOptions({ |
| | | name: 'companyDetail', |
| | | }); |
| | | |
| | | const router = Taro.useRouter(); |
| | | const companyId = router.params?.id ?? ''; |
| | | |
| | | const tab = ref('1'); |
| | | |
| | | const { |
| | | isLoading, |
| | | isError, |
| | | data: detail, |
| | | refetch, |
| | | } = useQuery({ |
| | | queryKey: ['orderServices/getOrdeForDetail', companyId], |
| | | queryFn: async () => { |
| | | return await orderServices.getOrdeForDetail( |
| | | { id: companyId }, |
| | | { |
| | | showLoading: false, |
| | | } |
| | | ); |
| | | }, |
| | | placeholderData: () => ({} as API.OrderInfoDto), |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div class="taskDetail-company-wrapper"> |
| | | <div class="taskDetail-company-title-wrapper"> |
| | | <div class="taskDetail-company-title">宁波人力无忧</div> |
| | | <RectRight v-if="showArrow" :size="8" class="taskDetail-company-arrow" /> |
| | | </div> |
| | | <div class="taskDetail-company-info"> |
| | | <img :src="IconSafe" class="safe-company-info-icon" /> |
| | | <div class="taskDetail-company-info-text">已认证 | 4个岗位在招</div> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import IconSafe from '@/assets/task/icon-safe.png'; |
| | | import { RectRight } from '@nutui/icons-vue-taro'; |
| | | |
| | | defineOptions({ |
| | | name: 'CompanyDesc', |
| | | }); |
| | | |
| | | type Props = { |
| | | showArrow?: boolean; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | showArrow: true, |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .taskDetail-company-wrapper { |
| | | padding: 28px 20px; |
| | | background: #f9fbff; |
| | | border-radius: 8px; |
| | | |
| | | .taskDetail-company-title-wrapper { |
| | | display: flex; |
| | | align-items: center; |
| | | margin-bottom: 24px; |
| | | |
| | | .taskDetail-company-title { |
| | | font-weight: 500; |
| | | font-size: 28px; |
| | | color: boleGetCssVar('text-color', 'primary'); |
| | | line-height: 42px; |
| | | flex: 1; |
| | | min-width: 0; |
| | | @include ellipsis; |
| | | } |
| | | |
| | | .taskDetail-company-arrow { |
| | | color: boleGetCssVar('text-color', 'secondary'); |
| | | margin-left: 10px; |
| | | } |
| | | } |
| | | |
| | | .taskDetail-company-info { |
| | | display: flex; |
| | | align-items: center; |
| | | |
| | | .safe-company-info-icon { |
| | | width: 24px; |
| | | height: 24px; |
| | | margin-right: 6px; |
| | | } |
| | | |
| | | .taskDetail-company-info-text { |
| | | font-size: 24px; |
| | | color: boleGetCssVar('text-color', 'regular'); |
| | | line-height: 36px; |
| | | flex: 1; |
| | | min-width: 0; |
| | | @include ellipsis; |
| | | } |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <ContentScrollView style="background-color: transparent"> |
| | | <div v-if="isCertified" class="companyInfo-info-wrapper"> |
| | | <div class="companyInfo-info-item"> |
| | | <div class="companyInfo-info-item-label">企业名称</div> |
| | | <div class="companyInfo-info-item-content">江西君润商务服务有限公司</div> |
| | | </div> |
| | | <div class="companyInfo-info-item"> |
| | | <div class="companyInfo-info-item-label">统一社会信用代码</div> |
| | | <div class="companyInfo-info-item-content">420902197910211010</div> |
| | | </div> |
| | | <div class="companyInfo-info-item"> |
| | | <div class="companyInfo-info-item-label">注册资本</div> |
| | | <div class="companyInfo-info-item-content">捌佰万元整</div> |
| | | </div> |
| | | <div class="companyInfo-info-item"> |
| | | <div class="companyInfo-info-item-label">企业类型</div> |
| | | <div class="companyInfo-info-item-content">有限责任公司(自然人投资或控股 的法人独资)</div> |
| | | </div> |
| | | <div class="companyInfo-info-item"> |
| | | <div class="companyInfo-info-item-label">成立日期</div> |
| | | <div class="companyInfo-info-item-content">2024年11月11日</div> |
| | | </div> |
| | | <div class="companyInfo-info-item"> |
| | | <div class="companyInfo-info-item-label">企业地址</div> |
| | | <div class="companyInfo-info-item-content">江西省九江市共青城市xx路xx号xx xxxx</div> |
| | | </div> |
| | | <div class="companyInfo-info-item"> |
| | | <div class="companyInfo-info-item-label">经营范围</div> |
| | | <div class="companyInfo-info-item-content"> |
| | | 我是营业执照上的经营范围信息我 是营业执照上的经营范围信息我是 |
| | | 营业执照上的经营范围信息我是营 业执照上的经营范围信息我是营业 执照上的经营范围信息 |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <div v-else class="company-info-unCertified-wrapper"> |
| | | <img :src="IconNoCertified" class="company-info-unCertified-icon" /> |
| | | <div class="company-info-unCertified-text">该企业尚未认证</div> |
| | | <div class="company-info-unCertified-text">请谨慎核实招聘信息</div> |
| | | </div> |
| | | </ContentScrollView> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import IconNoCertified from '@/assets/task/icon-no-certified.png'; |
| | | |
| | | defineOptions({ |
| | | name: 'CompanyInfo', |
| | | }); |
| | | |
| | | const isCertified = ref(true); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .companyInfo-info-wrapper { |
| | | background: #ffffff; |
| | | border-radius: 12px; |
| | | padding: 72px 28px 108px; |
| | | |
| | | .companyInfo-info-item { |
| | | display: flex; |
| | | font-weight: 400; |
| | | font-size: 24px; |
| | | line-height: 36px; |
| | | margin-bottom: 24px; |
| | | |
| | | &:last-child { |
| | | margin-bottom: 0; |
| | | } |
| | | |
| | | .companyInfo-info-item-label { |
| | | color: boleGetCssVar('text-color', 'secondary'); |
| | | margin-right: 54px; |
| | | width: 200px; |
| | | text-align: right; |
| | | } |
| | | |
| | | .companyInfo-info-item-content { |
| | | flex: 1; |
| | | min-width: 0; |
| | | color: boleGetCssVar('text-color', 'primary'); |
| | | } |
| | | } |
| | | } |
| | | |
| | | .company-info-unCertified-wrapper { |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | padding-top: 140px; |
| | | |
| | | .company-info-unCertified-icon { |
| | | width: 320px; |
| | | height: 180px; |
| | | margin-bottom: 8px; |
| | | } |
| | | |
| | | .company-info-unCertified-text { |
| | | font-weight: 400; |
| | | font-size: 32px; |
| | | color: boleGetCssVar('text-color', 'primary'); |
| | | line-height: 48px; |
| | | } |
| | | } |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <InfiniteLoading scrollViewClassName="common-infinite-scroll-list" v-bind="infiniteLoadingProps"> |
| | | <template #renderItem="{ item }"> |
| | | <TaskCard @click="goTaskDetail(item)" /> |
| | | </template> |
| | | </InfiniteLoading> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { useTaskList } from '@/hooks'; |
| | | import { TaskCard } from '@12333/components'; |
| | | import Taro from '@tarojs/taro'; |
| | | |
| | | defineOptions({ |
| | | name: 'CompanyTaskList', |
| | | }); |
| | | |
| | | const { queryState, infiniteLoadingProps } = useTaskList(); |
| | | |
| | | function goTaskDetail(item: API.FrontOrderList) { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.taskDetail}?id=${item.id}`, |
| | | }); |
| | | } |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | </style> |
New file |
| | |
| | | <template> |
| | | <div class="taskDetail-welfare-list-item"> |
| | | <img :src="IconAttentioActive" class="taskDetail-welfare-list-item-icon" /> |
| | | <div class="taskDetail-welfare-list-item-text">高温补贴</div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import IconAttentioActive from '@/assets/task/icon-attention-active.png'; |
| | | |
| | | defineOptions({ |
| | | name: 'TaskDetailWelfareItem', |
| | | }); |
| | | |
| | | // type Props = {}; |
| | | |
| | | // const props = withDefaults(defineProps<Props>(), {}); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .taskDetail-welfare-list-item { |
| | | display: flex; |
| | | align-items: center; |
| | | flex-direction: column; |
| | | width: 25%; |
| | | |
| | | .taskDetail-welfare-list-item-icon { |
| | | width: 72px; |
| | | height: 72px; |
| | | margin-bottom: 24px; |
| | | } |
| | | |
| | | .taskDetail-welfare-list-item-text { |
| | | font-weight: 400; |
| | | font-size: 24px; |
| | | color: boleGetCssVar('text-color', 'regular'); |
| | | line-height: 36px; |
| | | text-align: center; |
| | | /* @include ellipsis; */ |
| | | } |
| | | } |
| | | </style> |
| | |
| | | </div> |
| | | <div class="taskDetail-address-info-wrapper"> |
| | | <div class="taskDetail-address-info">宁波市鄞州区东钱湖大堰路188号宁波柏悦酒店</div> |
| | | <RectRight :size="6" class="taskDetail-address-info-icon" /> |
| | | <RectRight :size="8" class="taskDetail-address-info-icon" /> |
| | | </div> |
| | | </div> |
| | | </Cell> |
| | | <Cell :show-title="false"> |
| | | <CellChunk title="福利信息"> |
| | | <div class="taskDetail-welfare-list"> |
| | | <TaskDetailWelfareItem /> |
| | | <TaskDetailWelfareItem /> |
| | | <TaskDetailWelfareItem /> |
| | | <TaskDetailWelfareItem /> |
| | | <TaskDetailWelfareItem /> |
| | | </div> |
| | | </CellChunk> |
| | | <CellChunk title="报名条件"> |
| | | <div class="taskDetail-limit-list"> |
| | | <div class="taskDetail-limit-list-item"> |
| | | <div class="taskDetail-limit-list-item-label">年龄:</div> |
| | | <div class="taskDetail-limit-list-item-text">18-45岁</div> |
| | | </div> |
| | | <div class="taskDetail-limit-list-item"> |
| | | <div class="taskDetail-limit-list-item-label">性别:</div> |
| | | <div class="taskDetail-limit-list-item-text">不限</div> |
| | | </div> |
| | | <div class="taskDetail-limit-list-item"> |
| | | <div class="taskDetail-limit-list-item-label">资格证书:</div> |
| | | <div class="taskDetail-limit-list-item-text">健康证</div> |
| | | </div> |
| | | </div> |
| | | </CellChunk> |
| | | <CellChunk title="发布者信息"> |
| | | <CompanyDesc @click="goCompanyDetail"></CompanyDesc> |
| | | </CellChunk> |
| | | </Cell> |
| | | <Cell> |
| | | <template #title> |
| | |
| | | :isFlex="false" |
| | | openType="share" |
| | | ></PageFooterAction> |
| | | <PageFooterAction :icon="IconShare" text="手机" :isFlex="false"></PageFooterAction> |
| | | <PageFooterBtn type="primary">报名</PageFooterBtn> |
| | | </PageFooter> |
| | | </LoadingLayout> |
| | |
| | | import IconShare from '@/assets/task/icon-share.png'; |
| | | import IconSafe from '@/assets/task/icon-safe.png'; |
| | | import './taskDetail.scss'; |
| | | import TaskDetailWelfareItem from '../components/TaskDetailWelfareItem.vue'; |
| | | import CompanyDesc from '../components/CompanyDesc.vue'; |
| | | |
| | | defineOptions({ |
| | | name: 'InnerPage', |
| | |
| | | url: `${RouterPath.complaint}?id=${taskId}`, |
| | | }); |
| | | } |
| | | |
| | | function goCompanyDetail() { |
| | | Taro.navigateTo({ |
| | | url: `${RouterPath.companyDetail}?id=${taskId}`, |
| | | }); |
| | | } |
| | | </script> |
| | |
| | | display: inline; |
| | | } |
| | | } |
| | | |
| | | .taskDetail-welfare-list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | row-gap: 24px; |
| | | } |
| | | |
| | | .taskDetail-limit-list { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | padding: 0 14px; |
| | | |
| | | .taskDetail-limit-list-item { |
| | | display: flex; |
| | | align-items: center; |
| | | font-size: 24px; |
| | | line-height: 28px; |
| | | |
| | | .taskDetail-limit-list-item-label { |
| | | color: boleGetCssVar('text-color', 'regular'); |
| | | } |
| | | .taskDetail-limit-list-item-text { |
| | | color: boleGetCssVar('text-color', 'primary'); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | <template> |
| | | <div class="bole-calendar-wrapper"> |
| | | <div class="bole-calendar-inner"> |
| | | <nut-calendar-card v-model="model" class="bole-calendar"></nut-calendar-card> |
| | | </div> |
| | | <div class="bole-calendar-arrow"> |
| | | <DownArrow :size="12" /> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { DownArrow } from '@nutui/icons-vue-taro'; |
| | | |
| | | defineOptions({ |
| | | name: 'Calendar', |
| | | }); |
| | | |
| | | // type Props = {}; |
| | | |
| | | // const props = withDefaults(defineProps<Props>(), {}); |
| | | const model = defineModel<Date | Date[]>(); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .bole-calendar-wrapper { |
| | | .bole-calendar { |
| | | background-color: transparent; |
| | | } |
| | | |
| | | .bole-calendar-inner { |
| | | height: 500px; |
| | | overflow: hidden; |
| | | } |
| | | |
| | | .bole-calendar-arrow { |
| | | display: flex; |
| | | justify-content: center; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import { CommonTaskCardProps } from './card'; |
| | | |
| | | defineOptions({ |
| | | name: 'MineAgreementSignCard', |
| | | }); |
| | | |
| | | type Props = { |
| | | title?: string; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), {}); |
| | | const props = withDefaults(defineProps<CommonTaskCardProps>(), {}); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
New file |
| | |
| | | <template> |
| | | <TaskCard v-bind="props" :show-actions="false" class="my-task-card-wrapper"> |
| | | <template #title-right> |
| | | <RectRight :size="12" class="my-task-card-arrow" /> |
| | | </template> |
| | | <div class="my-task-card-time">2025年2月5日 至 2025年3月5日</div> |
| | | </TaskCard> |
| | | </template> |
| | | |
| | | <script setup lang="ts"> |
| | | import TaskCard from './TaskCard.vue'; |
| | | import { CommonTaskCardProps } from './card'; |
| | | import { RectRight } from '@nutui/icons-vue-taro'; |
| | | |
| | | defineOptions({ |
| | | name: 'MyTaskCard', |
| | | }); |
| | | |
| | | const props = withDefaults(defineProps<CommonTaskCardProps>(), {}); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
| | | @import '@/styles/common.scss'; |
| | | |
| | | .my-task-card-wrapper { |
| | | .my-task-card-arrow { |
| | | color: boleGetCssVar('text-color', 'primary'); |
| | | } |
| | | |
| | | .my-task-card-time { |
| | | font-weight: 400; |
| | | @include ellipsis; |
| | | font-size: 24px; |
| | | color: boleGetCssVar('text-color', 'primary'); |
| | | line-height: 36px; |
| | | margin-bottom: 14px; |
| | | } |
| | | } |
| | | </style> |
| | |
| | | <div class="task-card-wrapper"> |
| | | <div class="task-card-title-wrapper"> |
| | | <div class="task-card-title">客房服务员</div> |
| | | <TaskPrice :value="212" /> |
| | | <slot name="title-right"> |
| | | <TaskPrice :value="212" /> |
| | | </slot> |
| | | </div> |
| | | <div class="task-card-welfare-list"> |
| | | <div class="task-card-welfare-list-item">日结</div> |
| | | <div class="task-card-welfare-list-item">男女不限</div> |
| | | <div class="task-card-welfare-list-item">包三餐</div> |
| | | </div> |
| | | <div class="task-card-time">上班时间:07:00-15:30</div> |
| | | <slot> |
| | | <div class="task-card-welfare-list"> |
| | | <div class="task-card-welfare-list-item">日结</div> |
| | | <div class="task-card-welfare-list-item">男女不限</div> |
| | | <div class="task-card-welfare-list-item">包三餐</div> |
| | | </div> |
| | | <div class="task-card-time">上班时间:07:00-15:30</div> |
| | | </slot> |
| | | <div class="task-card-footer"> |
| | | <div class="task-card-left"> |
| | | <div class="task-card-footer-tag">H</div> |
| | | <div class="task-card-footer-address">宁波雷迪森酒店</div> |
| | | </div> |
| | | <div class="task-card-actions"> |
| | | <div class="task-card-actions" v-if="showActions"> |
| | | <slot name="actions"> |
| | | <nut-button type="primary">报名</nut-button> |
| | | </slot> |
| | |
| | | |
| | | <script setup lang="ts"> |
| | | import TaskPrice from './TaskPrice.vue'; |
| | | import { CommonTaskCardProps } from './card'; |
| | | |
| | | defineOptions({ |
| | | name: 'TaskCard', |
| | | }); |
| | | |
| | | type Props = { |
| | | title?: string; |
| | | type Props = CommonTaskCardProps & { |
| | | showActions?: boolean; |
| | | }; |
| | | |
| | | const props = withDefaults(defineProps<Props>(), {}); |
| | | const props = withDefaults(defineProps<Props>(), { |
| | | showActions: true, |
| | | }); |
| | | </script> |
| | | |
| | | <style lang="scss"> |
New file |
| | |
| | | export type CommonTaskCardProps = { |
| | | title?: string; |
| | | }; |
| | |
| | | export { default as Elevator } from './Elevator/Elevator.vue'; |
| | | export { default as TaskCard } from './Card/TaskCard.vue'; |
| | | export { default as MineAgreementSignCard } from './Card/MineAgreementSignCard.vue'; |
| | | export { default as MyTaskCard } from './Card/MyTaskCard.vue'; |
| | | export { default as TaskPrice } from './Card/TaskPrice.vue'; |
| | | export { default as QueryMenuView } from './Menu/QueryMenuView.vue'; |
| | | export { default as QueryMenuItem } from './Menu/QueryMenuItem.vue'; |
| | | export { default as ProRadio } from './Form/ProRadio.vue'; |
| | | export { default as Calendar } from './Calendar/Calendar.vue'; |