zhengyiming
2025-02-17 ae1b411fcb54f794646b32b29c47cb380163f95e
Merge branch 'master' of http://120.26.58.240:8888/r/flexJobMiniApp
5个文件已修改
4个文件已添加
211 ■■■■■ 已修改文件
apps/bMiniApp/project.private.config.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/app.config.ts 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/constants/router.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/flexJobManage/flexJobManage/InnerPage.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/flexJobSign.config.ts 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/flexJobSign.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/Card/SignCard.vue 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
packages/components/src/index.ts 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
apps/bMiniApp/project.private.config.json
@@ -77,13 +77,6 @@
                    "query": "",
                    "launchMode": "default",
                    "scene": null
                },
                {
                    "name": "",
                    "pathName": "subpackages/flexJobManage/flexJobManage/flexJobManage",
                    "query": "",
                    "launchMode": "default",
                    "scene": null
                }
            ]
        }
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: {
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',
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">
apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/InnerPage.vue
New file
@@ -0,0 +1,93 @@
<template>
  <div class="searchbar-container">
    <BlSearchbar
      v-model.trim="searchValue"
      placeholder="搜索合同名/编号"
      @search="handleSearch"
      @change="handleSearch"
    ></BlSearchbar>
    <ChunkTitle title="合同列表" />
  </div>
  <InfiniteLoading
    scrollViewClassName="common-infinite-scroll-list flexJobSign-list"
    v-bind="infiniteLoadingProps"
  >
    <template #renderItem="{ item }">
      <SignCard @click="handleCheck(item)" v-model:checked-id="checkedId" :id="item.id"></SignCard>
    </template>
  </InfiniteLoading>
  <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 60px;
  }
  .chunk-title-wrapper {
    padding: 30px 10px 0;
  }
  .flexJobSign-list {
    .infinite-list-inner {
      background-color: #ffffff;
      padding: 0 30px;
      border-radius: 12px;
    }
  }
}
</style>
apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/flexJobSign.config.ts
New file
@@ -0,0 +1,3 @@
export default definePageConfig({
  disableScroll: true,
});
apps/bMiniApp/src/subpackages/flexJobManage/flexJobSign/flexJobSign.vue
New file
@@ -0,0 +1,17 @@
<template>
  <PageLayoutWithBg class="flexJobSign-page-wrapper" :title="'签约'">
    <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>
packages/components/src/Card/SignCard.vue
New file
@@ -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>
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';