pengjing преди 1 година
родител
ревизия
eb7ef1c5c3

+ 12 - 0
h5app/src/assets/icon/avatar.svg

@@ -0,0 +1,12 @@
+<svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_1765_7055)">
+<path d="M0 0H512V512H0V0Z" fill="#222D3A"/>
+<path d="M330.085 110.955C311.299 90.672 285.059 79.5024 256.097 79.5024C226.981 79.5024 200.655 90.6044 181.955 110.762C163.053 131.141 153.843 158.838 156.005 188.746C160.292 247.751 205.192 295.75 256.097 295.75C307.003 295.75 351.826 247.76 356.18 188.765C358.371 159.128 349.103 131.489 330.085 110.955Z" fill="#B3BAC0"/>
+<path d="M53.9275 511.997H458.333C459 503 458.206 483.499 456.333 473.141C448.185 427.941 422.757 389.972 382.789 363.327C347.282 339.675 302.305 326.642 256.13 326.642C209.956 326.642 164.978 339.666 129.471 363.327C89.5038 389.982 64.0754 427.951 55.9275 473.15C54.0546 483.509 53.5001 504.5 53.9275 511.997Z" fill="#B3BAC0"/>
+</g>
+<defs>
+<clipPath id="clip0_1765_7055">
+<rect width="512" height="512" fill="white"/>
+</clipPath>
+</defs>
+</svg>

+ 32 - 0
h5app/src/router/index.ts

@@ -24,6 +24,38 @@ const routes: Array<RouteRecordRaw> = [
                 path: 'tabMain/practiceReport/daily/index',
                 path: 'tabMain/practiceReport/daily/index',
                 component: () => import('@/views/pages/practiceReport/daily/index.vue'),
                 component: () => import('@/views/pages/practiceReport/daily/index.vue'),
             },*/
             },*/
+            {
+                path: 'tabMain/jobuser/list',
+                component: () => import('@/views/pages/jobuser/list.vue')
+            },
+            {
+                path: 'tabMain/jobuser/edit',
+                component: () => import('@/views/pages/jobuser/edit.vue')
+            },
+            {
+                path: 'tabMain/company/list',
+                component: () => import('@/views/pages/company/list.vue')
+            },
+            {
+                path: 'tabMain/company/edit',
+                component: () => import('@/views/pages/company/edit.vue')
+            },
+            {
+                path: 'tabMain/post/recommend',
+                component: () => import('@/views/pages/post/recommend.vue')
+            },
+            {
+                path: 'tabMain/work/log/list',
+                component: () => import('@/views/pages/work/log/list.vue')
+            },
+            {
+                path: 'tabMain/work/task/list',
+                component: () => import('@/views/pages/work/task/list.vue')
+            },
+            {
+                path: 'tabMain/sitemap/index',
+                component: () => import('@/views/pages/sitemap/index.vue')
+            },
             {
             {
                 path: 'tabWork',
                 path: 'tabWork',
                 component: () => import('@/views/sapp/tabWork.vue'),
                 component: () => import('@/views/sapp/tabWork.vue'),

+ 36 - 13
h5app/src/views/login.vue

@@ -6,13 +6,15 @@
         <div class="login-item">
         <div class="login-item">
           <ion-item>
           <ion-item>
             <!--          <ion-icon :icon="personOutline" mode="md"></ion-icon>-->
             <!--          <ion-icon :icon="personOutline" mode="md"></ion-icon>-->
-            <ion-input v-model="state.formInline.username" type="text" placeholder="请输入用户名"></ion-input>
+            <!--          <ion-input v-model="state.formInline.username" type="text" placeholder="请输入用户名"></ion-input>-->
+            <input v-model="state.formInline.username" type="text" placeholder="请输入用户名"/>
           </ion-item>
           </ion-item>
         </div>
         </div>
         <div class="login-item">
         <div class="login-item">
           <ion-item>
           <ion-item>
             <!--          <ion-icon :icon="lockClosedOutline" mode="md"></ion-icon>-->
             <!--          <ion-icon :icon="lockClosedOutline" mode="md"></ion-icon>-->
-            <ion-input v-model="state.formInline.password" type="password" placeholder="请输入密码"></ion-input>
+            <!--            <ion-input v-model="state.formInline.password" type="password" placeholder="请输入密码"></ion-input>-->
+            <input v-model="state.formInline.password" type="password" placeholder="请输入密码"/>
           </ion-item>
           </ion-item>
         </div>
         </div>
         <div class="login-btn">
         <div class="login-btn">
@@ -23,7 +25,7 @@
           </ion-buttons>
           </ion-buttons>
         </div>
         </div>
         <ion-label class="error-label" v-show="state.errorShow || v$.username.$error || v$.password.$error">
         <ion-label class="error-label" v-show="state.errorShow || v$.username.$error || v$.password.$error">
-          <p v-if="v$.username.$error || v$.password.$error" >用户名或密码不能为空</p>
+          <p v-if="v$.username.$error || v$.password.$error">用户名或密码不能为空</p>
           <p v-if="state.errorShow && !(v$.username.$error || v$.password.$error)">
           <p v-if="state.errorShow && !(v$.username.$error || v$.password.$error)">
             {{ state.msg }}
             {{ state.msg }}
           </p>
           </p>
@@ -58,8 +60,8 @@ const state = reactive({
     verifyCode: '',
     verifyCode: '',
     captchaId: '',
     captchaId: '',
   },
   },
-  errorShow:false,
-  msg:''
+  errorShow: false,
+  msg: ''
 });
 });
 
 
 const rules = computed(() => {
 const rules = computed(() => {
@@ -92,8 +94,8 @@ const presentAlert = async (data: any) => {
 }
 }
 
 
 const handleSubmit = async () => {
 const handleSubmit = async () => {
-  state.errorShow=false;
-  state.msg="";
+  state.errorShow = false;
+  state.msg = "";
   globalProperties.$routeActive = true;
   globalProperties.$routeActive = true;
 
 
   const {username, password, verifyCode} = state.formInline;
   const {username, password, verifyCode} = state.formInline;
@@ -112,8 +114,8 @@ const handleSubmit = async () => {
     router.push('/tabs/tabMain');
     router.push('/tabs/tabMain');
   }, (err) => {
   }, (err) => {
     state.loading = false;
     state.loading = false;
-    state.errorShow=true;
-    state.msg=err.message;
+    state.errorShow = true;
+    state.msg = err.message;
   });
   });
 };
 };
 
 
@@ -166,8 +168,9 @@ ion-content {
     }
     }
   }
   }
 
 
-  .login-item{
+  .login-item {
     margin-bottom: 15px;
     margin-bottom: 15px;
+
     ion-item {
     ion-item {
       --inner-border-width: 0px;
       --inner-border-width: 0px;
       --background: #F3F3F3;
       --background: #F3F3F3;
@@ -181,6 +184,24 @@ ion-content {
         color: #7a7b80;
         color: #7a7b80;
       }
       }
 
 
+      input {
+        color: #7a7b80;
+        background-color: #F3F3F3;
+        height: 100%;
+        border: none;
+        width: 100%;
+      }
+
+      input:focus {
+        box-shadow: none;
+        border: none;
+        outline: none;
+      }
+
+      input::placeholder{
+        color: #b4b4b7;
+      }
+
     }
     }
   }
   }
 
 
@@ -189,7 +210,8 @@ ion-content {
   }
   }
 
 
   ion-item::part(native) {
   ion-item::part(native) {
-    padding: 0 30px 0 30px;
+    padding: 0 20px 0 20px;
+    border: none;
   }
   }
 
 
   ion-buttons {
   ion-buttons {
@@ -206,9 +228,10 @@ ion-content {
     }
     }
   }
   }
 
 
-  .error-label{
+  .error-label {
     text-align: center;
     text-align: center;
-    p{
+
+    p {
       color: red;
       color: red;
     }
     }
   }
   }

+ 280 - 0
h5app/src/views/pages/company/edit.vue

@@ -0,0 +1,280 @@
+<template>
+  <ion-page>
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="()=>router.push('./list')"></ion-icon>
+        </ion-buttons>
+        <ion-title>
+          企业信息录入
+        </ion-title>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <div class="stepFlex">
+        <div v-for="(record,key) in stepList" :key="key" class="stepFlex-item">
+          <div
+              :class="[(record.val < dataModel?.statusVal || dataModel?.statusVal==stepList[stepList.length-1].val) ? 'greenCircle' :record.val == dataModel?.statusVal ? 'now' : 'greyCircle']"></div>
+          <div v-if="key !== stepList.length - 1"
+               :class="[record.val < dataModel?.statusVal ? 'greenline' : 'greyline']"></div>
+          <div class="stepFlex-item-label">
+            <p class="stepFlex-item-label-title">{{ record.title }}</p>
+            <p class="stepFlex-item-label-desc">{{ record.desc }}</p>
+          </div>
+        </div>
+      </div>
+      <form autocomplete="off">
+        <ion-list>
+          <ion-item>
+            <ion-input label="企业名称" label-placement="stacked" :clear-input="true" placeholder="请填写企业名称">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="统一信用代码" label-placement="stacked" :clear-input="true"
+                       placeholder="请填写统一信用代码">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="所属驿站" label-placement="stacked" :clear-input="true" placeholder="请填写所属驿站">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="所属县区" label-placement="stacked" :clear-input="true" placeholder="请填写所属县区">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="所属街道" label-placement="stacked" :clear-input="true" placeholder="请填写所属街道">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="企业办公地址" label-placement="stacked" :clear-input="true" placeholder="请填写企业办公地址">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="用工情况" label-placement="stacked" :clear-input="true" placeholder="请填写用工情况">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="企业规模" label-placement="stacked" :clear-input="true" placeholder="请填写企业规模">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="企业归类" label-placement="stacked" :clear-input="true" placeholder="请填写企业归类">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="企业联系人" label-placement="stacked" :clear-input="true" placeholder="请填写企业联系人">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="企业联系电话" label-placement="stacked" :clear-input="true" placeholder="请填写企业联系电话">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="企业邮箱" label-placement="stacked" :clear-input="true" placeholder="请填写企业邮箱">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="法人代表" label-placement="stacked" :clear-input="true" placeholder="请填写法人代表">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="营业执照有效期" label-placement="stacked" :clear-input="true" placeholder="请填写营业执照有效期">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="企业状态" label-placement="stacked" :clear-input="true" placeholder="请填写企业状态">
+            </ion-input>
+          </ion-item>
+        </ion-list>
+        <ion-button class="next-btn">下一步
+        </ion-button>
+      </form>
+    </ion-content>
+    <!--    <ion-footer>
+          <div>
+            <ion-button @click="onSave">下一步</ion-button>
+          </div>
+        </ion-footer>-->
+  </ion-page>
+</template>
+<script lang="ts">
+import {defineComponent, ref, watch} from "vue";
+/*import {getPracticeBaseForStudentList,getSysAreaList} from "@/api/system/dictionary";
+import {get, save} from "@/api/practice/intention";*/
+import {useRoute, useRouter} from "vue-router";
+import {alertController, onIonViewDidEnter} from "@ionic/vue";
+import {arrowBackOutline} from 'ionicons/icons';
+
+interface DataModel {
+  name: string,
+  statusVal: number
+}
+
+export default defineComponent({
+  name: 'PracticeIntentionEdit',
+  setup() {
+    const router = useRouter();
+    const route = useRoute();
+    const dataModel = ref<DataModel>({
+      name: '',
+      statusVal: 1
+    });
+    const stepList = ref([{title: '基础信息', desc: '企业基础信息', val: 1}, {
+      title: '岗位信息',
+      desc: '企业岗位信息',
+      val: 2
+    }]);
+
+    const onSave = () => {
+      if (!dataModel.value.name) {
+        presentAlert("请填写姓名!");
+        return false;
+      }
+
+      /*save(dataModel.value as any).then(result => {
+        if (result) {
+          router.push({path: './index', query: {reload: 1}});
+        }
+      });*/
+    }
+
+    const onCancel = () => {
+      router.push("./index");
+    }
+
+    const loadData = (practiceTaskStudentID: any) => {
+      /*get(practiceTaskStudentID).then((result: any) => {
+        dataModel.value = result;
+
+        loadPracticeBaseList(dataModel.value.schoolYearID);
+        loadCityList();
+      });*/
+    };
+
+    const initData = (id: any) => {
+      dataModel.value = {name: '', statusVal: 1};
+      loadData(id);
+    };
+
+    onIonViewDidEnter(() => {
+      if (route.query.reload)
+        initData(route.query.id);
+    });
+
+    const presentAlert = async (message: string) => {
+      const alert = await alertController.create({
+        header: '错误!',
+        message: message,
+        buttons: [
+          '确定'
+        ],
+      });
+
+      await alert.present();
+    }
+
+    return {
+      dataModel,
+      stepList,
+      initData,
+      onSave,
+      onCancel,
+      route,
+      arrowBackOutline,
+      router,
+    }
+  }
+});
+</script>
+
+<style lang="less">
+.next-btn {
+  width: 100%;
+  --border-radius: 0px;
+  --background: #f2f2f5;
+  margin: 20px 0 0 0;
+  color: #363432;
+  font-size: 14px;
+}
+
+.stepFlex {
+  margin: 0;
+  display: flex;
+  width: 100%;
+
+  .stepFlex-item {
+    position: relative;
+    flex: 1;
+    text-align: center;
+    margin-top: -10px;
+
+    .stepFlex-item-label {
+      padding-top: 60px;
+      font-size: 14px;
+
+      .stepFlex-item-label-title {
+        margin-top: 30px;
+      }
+
+      .stepFlex-item-label-desc {
+        margin-top: 5px;
+        color: #b9b9bd;
+      }
+    }
+  }
+
+  .greenCircle {
+    top: calc(50% - 15px);
+    left: calc(50% - 4px);
+    position: absolute;
+    z-index: 2;
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    background-color: #31A2FE;
+  }
+
+  .now {
+    top: calc(50% - 18px);
+    left: calc(50% - 8px);
+    position: absolute;
+    z-index: 3;
+    width: 16px;
+    height: 16px;
+    border-radius: 50%;
+    background-color: #31A2FE;
+    border: 4px solid #c5e8f9;
+  }
+
+  .greyCircle {
+    top: calc(50% - 15px);
+    left: calc(50% - 4px);
+    position: absolute;
+    z-index: 2;
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    background-color: #ccc;
+  }
+
+  .greenline {
+    width: 100%;
+    top: calc(50% - 11px);
+    left: calc(50% - 2px);
+    height: 2px;
+    background-color: #31A2FE;
+    position: absolute;
+  }
+
+  .greyline {
+    height: 0;
+    border: 1px dashed #ccc;
+    width: 100%;
+    top: calc(50% - 11px);
+    left: calc(50% - 2px);
+    position: absolute;
+  }
+}
+
+</style>

+ 171 - 0
h5app/src/views/pages/company/list.vue

@@ -0,0 +1,171 @@
+<template>
+  <ion-page class="list-page company-list-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="()=>router.push('../')"></ion-icon>
+        </ion-buttons>
+        <ion-title>企业信息收集</ion-title>
+        <ion-buttons slot="end">
+          <ion-icon :icon="addCircleOutline" @click="onAdd()"></ion-icon>
+        </ion-buttons>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <ion-item style="margin: 10px 0;">
+        <ion-input style="border: 1px solid #f2f2f5;border-radius: 4px;--padding-start: 10px;height: 35px;"></ion-input>
+        <ion-button slot="end" style="height: 33px;width: 70px;margin-left: 10px;--box-shadow: none;">搜索</ion-button>
+      </ion-item>
+      <ion-list class="list-content">
+        <ion-item v-for="(record,key) in dataList" :key="key"  detail>
+          <ion-grid>
+            <ion-row>
+              <ion-col>
+                <ion-label style="display: flex;justify-content: space-between;">
+                  <ion-text>
+                    {{record.companyName}}
+                  </ion-text>
+                  <p>
+                    {{record.statusName}}
+                  </p>
+                </ion-label>
+              </ion-col>
+            </ion-row>
+            <ion-row>
+              <ion-col>
+                <ion-label>
+                  <p>
+                    最新跟进时间:{{record.updateTime}}
+
+                  </p>
+                </ion-label>
+              </ion-col>
+            </ion-row>
+            <ion-row>
+              <ion-col>
+                <ion-label style="display: flex;justify-content: space-between;">
+                  <p>
+                    参保人数:16人
+                  </p>
+                  <p>
+                    岗位数量:6
+                  </p>
+                </ion-label>
+              </ion-col>
+            </ion-row>
+          </ion-grid>
+        </ion-item>
+      </ion-list>
+      <b-empty v-if="dataList.length<=0" :loading="loading"/>
+      <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
+        <ion-infinite-scroll-content
+            :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
+            loadingSpinner="bubbles">
+        </ion-infinite-scroll-content>
+      </ion-infinite-scroll>
+    </ion-content>
+  </ion-page>
+</template>
+
+<script lang="ts">
+
+import {computed, defineComponent, reactive, ref} from 'vue';
+import dayjs from "dayjs";
+import {useRoute, useRouter} from "vue-router";
+import {arrowBackOutline, ellipse, addCircleOutline} from 'ionicons/icons';
+import {IonIcon, onIonViewDidEnter} from '@ionic/vue';
+import BEmpty from "@/components/empty.vue";
+
+export default defineComponent({
+  name: 'CompanyList',
+  components: {IonIcon, BEmpty},
+  setup() {
+    const loading = ref(true);
+    const pagination = computed(() => ({
+      total: total,
+      current: searchParamsState.page,
+      pageSize: searchParamsState.rows
+    }));
+    const dataList = ref<any>([]);
+    const router = useRouter();
+    const route = useRoute();
+    const total = ref(15);
+    const colors = ref(["secondary", "tertiary", "success", "warning"]);
+
+    const searchParamsState = reactive({page: 1, rows: 10, writeStatus: null})
+
+    const loadData = async function () {
+      loading.value = true;
+
+      /*const result: any = await getMyIntentionList(searchParamsState);
+      dataList.value = dataList.value.concat(result.list);
+      total.value = result.total;*/
+
+      dataList.value = [{companyName: '惠州市AA信息科技有限公司', statusName: "正在跟进",updateTime:'2023-12-11'},
+        {companyName: '惠州市BB信息科技有限公司', statusName: "正在跟进",updateTime:'2023-12-12'},{companyName: '惠州市CC信息科技有限公司', statusName: "正在跟进",updateTime:'2023-12-13'}];
+      loading.value = false;
+    }
+
+    const reload = () => {
+      dataList.value = [];
+      searchParamsState.page = 1;
+      loadData();
+    }
+
+    const onScroll = (e: any) => {
+      setTimeout(() => {
+        e.target.complete();
+        if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
+          pagination.value.current += 1;
+          loadData();
+        }
+      }, 500);
+    }
+
+    const onAdd = (item: any) => {
+      router.push({path: './edit', query: {reload: 1, id: ""}});
+    }
+
+    onIonViewDidEnter(() => {
+      reload();
+    });
+
+    return {
+      router,
+      pagination,
+      colors,
+      reload,
+      loading,
+      searchParamsState,
+      dataList,
+      total,
+      dayjs,
+      onScroll,
+      onAdd,
+      loadData,
+      ellipse,
+      arrowBackOutline,
+      addCircleOutline,
+    }
+  }
+});
+</script>
+
+<style lang="less">
+.company-list-page{
+  .list-content {
+    margin: 0px 15px !important;
+    background-color: white !important;
+    border-radius: 0 !important;
+    ion-item {
+      margin-top: 10px;
+      font-size: 14px;
+      border: 1px solid rgb(242, 242, 245);
+      p {
+        font-size: 12px;
+      }
+    }
+  }
+}
+
+</style>

+ 322 - 0
h5app/src/views/pages/jobuser/edit.vue

@@ -0,0 +1,322 @@
+<template>
+  <ion-page>
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="()=>router.push('./list')"></ion-icon>
+        </ion-buttons>
+        <ion-title>求职信息录入</ion-title>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <div class="stepFlex">
+        <div v-for="(record,key) in stepList" :key="key" class="stepFlex-item">
+          <div
+              :class="[(record.val < dataModel?.statusVal || dataModel?.statusVal==stepList[stepList.length-1].val) ? 'greenCircle' :record.val == dataModel?.statusVal ? 'now' : 'greyCircle']"></div>
+          <div v-if="key !== stepList.length - 1"
+               :class="[record.val < dataModel?.statusVal ? 'greenline' : 'greyline']"></div>
+          <div class="stepFlex-item-label">
+            <p class="stepFlex-item-label-title">{{ record.title }}</p>
+            <p class="stepFlex-item-label-desc">{{ record.desc }}</p>
+          </div>
+        </div>
+      </div>
+      <form autocomplete="off">
+        <ion-list>
+          <ion-item>
+            <ion-input label="姓名" label-placement="stacked" :clear-input="true" placeholder="请填写姓名">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="公民身份号码" label-placement="stacked" :clear-input="true"
+                       placeholder="请填写公民身份号码">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="性别" label-placement="stacked" :clear-input="true" placeholder="请填写性别">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="民族" label-placement="stacked" :clear-input="true" placeholder="请填写民族">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="政治面貌" label-placement="stacked" :clear-input="true" placeholder="请填写政治面貌">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="出生地" label-placement="stacked" :clear-input="true" placeholder="请填写出生地">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="出生日期" label-placement="stacked" :clear-input="true" placeholder="请填写出生日期">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="户口性质" label-placement="stacked" :clear-input="true" placeholder="请填写户口性质">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="文化程度" label-placement="stacked" :clear-input="true" placeholder="请填写文化程度">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="健康状况" label-placement="stacked" :clear-input="true" placeholder="请填写健康状况">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="血型" label-placement="stacked" :clear-input="true" placeholder="请填写血型">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="身高" label-placement="stacked" :clear-input="true" placeholder="请填写身高">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="视力" label-placement="stacked" :clear-input="true" placeholder="请填写视力">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="体重" label-placement="stacked" :clear-input="true" placeholder="请填写体重">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="婚姻状况" label-placement="stacked" :clear-input="true" placeholder="请填写婚姻状况">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="省份" label-placement="stacked" :clear-input="true" placeholder="请填写省份">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="市/县" label-placement="stacked" :clear-input="true" placeholder="请填写市/县">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="镇/街" label-placement="stacked" :clear-input="true" placeholder="请填写镇/街">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="联系人" label-placement="stacked" :clear-input="true" placeholder="请填写联系人">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="联系电话" label-placement="stacked" :clear-input="true" placeholder="请填写联系电话">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="地址" label-placement="stacked" :clear-input="true" placeholder="请填写地址">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="家庭住址" label-placement="stacked" :clear-input="true" placeholder="请填写家庭住址">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="电子邮箱" label-placement="stacked" :clear-input="true" placeholder="请填写电子邮箱">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="兴趣爱好" label-placement="stacked" :clear-input="true" placeholder="请填写兴趣爱好">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="就业状态" label-placement="stacked" :clear-input="true" placeholder="请填写就业状态">
+            </ion-input>
+          </ion-item>
+          <ion-item>
+            <ion-input label="重点人员类别" label-placement="stacked" :clear-input="true"
+                       placeholder="请填写重点人员类别">
+            </ion-input>
+          </ion-item>
+        </ion-list>
+        <ion-button class="next-btn">下一步
+        </ion-button>
+      </form>
+    </ion-content>
+    <!--    <ion-footer>
+          <div>
+            <ion-button @click="onSave">下一步</ion-button>
+          </div>
+        </ion-footer>-->
+  </ion-page>
+</template>
+<script lang="ts">
+import {defineComponent, ref, watch} from "vue";
+/*import {getPracticeBaseForStudentList,getSysAreaList} from "@/api/system/dictionary";
+import {get, save} from "@/api/practice/intention";*/
+import {useRoute, useRouter} from "vue-router";
+import {alertController, onIonViewDidEnter} from "@ionic/vue";
+import {arrowBackOutline} from 'ionicons/icons';
+
+interface DataModel {
+  name: string,
+  statusVal: number
+}
+
+export default defineComponent({
+  name: 'PracticeIntentionEdit',
+  setup() {
+    const router = useRouter();
+    const route = useRoute();
+    const dataModel = ref<DataModel>({
+      name: '',
+      statusVal: 1
+    });
+    const stepList = ref([{title: '基础信息', desc: '个人基础信息', val: 1}, {
+      title: '教育经历',
+      desc: '完事个人教育经历',
+      val: 2
+    }, {title: '求职意向', desc: '个人求职意向', val: 3}]);
+
+    const onSave = () => {
+      if (!dataModel.value.name) {
+        presentAlert("请填写姓名!");
+        return false;
+      }
+
+      /*save(dataModel.value as any).then(result => {
+        if (result) {
+          router.push({path: './index', query: {reload: 1}});
+        }
+      });*/
+    }
+
+    const onCancel = () => {
+      router.push("./index");
+    }
+
+    const loadData = (practiceTaskStudentID: any) => {
+      /*get(practiceTaskStudentID).then((result: any) => {
+        dataModel.value = result;
+
+        loadPracticeBaseList(dataModel.value.schoolYearID);
+        loadCityList();
+      });*/
+    };
+
+    const initData = (id: any) => {
+      dataModel.value = {name: '',statusVal:1};
+      loadData(id);
+    };
+
+    onIonViewDidEnter(() => {
+      if (route.query.reload)
+        initData(route.query.id);
+    });
+
+    const presentAlert = async (message: string) => {
+      const alert = await alertController.create({
+        header: '错误!',
+        message: message,
+        buttons: [
+          '确定'
+        ],
+      });
+
+      await alert.present();
+    }
+
+    return {
+      dataModel,
+      stepList,
+      initData,
+      onSave,
+      onCancel,
+      route,
+      arrowBackOutline,
+      router,
+    }
+  }
+});
+</script>
+
+<style lang="less">
+.next-btn {
+  width: 100%;
+  --border-radius: 0px;
+  --background: #f2f2f5;
+  margin: 20px 0 0 0;
+  color: #363432;
+  font-size: 14px;
+}
+
+.stepFlex {
+  margin: 0;
+  display: flex;
+  width: 100%;
+
+  .stepFlex-item {
+    position: relative;
+    flex: 1;
+    text-align: center;
+    margin-top: -10px;
+
+    .stepFlex-item-label {
+      padding-top: 60px;
+      font-size: 14px;
+
+      .stepFlex-item-label-title{
+        margin-top:30px;
+      }
+
+      .stepFlex-item-label-desc{
+        margin-top:5px;color: #b9b9bd;
+      }
+    }
+  }
+
+  .greenCircle {
+    top: calc(50% - 15px);
+    left: calc(50% - 4px);
+    position: absolute;
+    z-index: 2;
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    background-color: #31A2FE;
+  }
+
+  .now {
+    top: calc(50% - 18px);
+    left: calc(50% - 8px);
+    position: absolute;
+    z-index: 3;
+    width: 16px;
+    height: 16px;
+    border-radius: 50%;
+    background-color: #31A2FE;
+    border: 4px solid #c5e8f9;
+  }
+
+  .greyCircle {
+    top: calc(50% - 15px);
+    left: calc(50% - 4px);
+    position: absolute;
+    z-index: 2;
+    width: 10px;
+    height: 10px;
+    border-radius: 50%;
+    background-color: #ccc;
+  }
+
+  .greenline {
+    width: 100%;
+    top: calc(50% - 11px);
+    left: calc(50% - 2px);
+    height: 2px;
+    background-color: #31A2FE;
+    position: absolute;
+  }
+
+  .greyline {
+    height: 0;
+    border: 1px dashed #ccc;
+    width: 100%;
+    top: calc(50% - 11px);
+    left: calc(50% - 2px);
+    position: absolute;
+  }
+}
+
+</style>

+ 138 - 0
h5app/src/views/pages/jobuser/list.vue

@@ -0,0 +1,138 @@
+<template>
+  <ion-page class="list-page jobuser-list-page">
+    <ion-header  class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="()=>router.push('../')"></ion-icon>
+        </ion-buttons>
+        <ion-title>求职信息收集</ion-title>
+        <ion-buttons slot="end">
+          <ion-icon :icon="addCircleOutline" @click="onAdd()"></ion-icon>
+        </ion-buttons>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <ion-item style="margin: 10px 0;">
+        <ion-input style="border: 1px solid #f2f2f5;border-radius: 4px;--padding-start: 10px;height: 35px;"></ion-input>
+        <ion-button slot="end" style="height: 33px;width: 70px;margin-left: 10px;--box-shadow: none;">搜索</ion-button>
+      </ion-item>
+      <ion-list  class="list-content">
+        <ion-item v-for="(record,key) in dataList" :key="key"  detail>
+          <ion-avatar aria-hidden="true" slot="start">
+            <img alt="" src="@/assets/icon/avatar.svg" />
+          </ion-avatar>
+          <ion-label>
+            <h3>{{ record.userName }}</h3>
+            <p>已推荐岗位:{{record.postRecommendCount}}</p>
+          </ion-label>
+        </ion-item>
+      </ion-list>
+      <b-empty v-if="dataList.length<=0" :loading="loading"/>
+      <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
+        <ion-infinite-scroll-content
+            :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
+            loadingSpinner="bubbles">
+        </ion-infinite-scroll-content>
+      </ion-infinite-scroll>
+    </ion-content>
+  </ion-page>
+</template>
+
+<script lang="ts">
+
+import {computed, defineComponent, reactive, ref} from 'vue';
+import dayjs from "dayjs";
+import {useRoute, useRouter} from "vue-router";
+import {arrowBackOutline, ellipse,addCircleOutline} from 'ionicons/icons';
+import {IonIcon, onIonViewDidEnter} from '@ionic/vue';
+import BEmpty from "@/components/empty.vue";
+
+export default defineComponent({
+  name: 'JobuserList',
+  components: {IonIcon,BEmpty},
+  setup() {
+    const loading = ref(true);
+    const pagination = computed(() => ({
+      total: total,
+      current: searchParamsState.page,
+      pageSize: searchParamsState.rows
+    }));
+    const dataList = ref<any>([]);
+    const router = useRouter();
+    const route = useRoute();
+    const total = ref(15);
+    const colors = ref(["secondary", "tertiary", "success", "warning"]);
+
+    const searchParamsState = reactive({page: 1, rows: 10, writeStatus: null})
+
+    const loadData = async function () {
+      loading.value = true;
+
+      /*const result: any = await getMyIntentionList(searchParamsState);
+      dataList.value = dataList.value.concat(result.list);
+      total.value = result.total;*/
+
+      dataList.value = [{userName:'张小兰',postRecommendCount:1},{userName:'李佳佳',postRecommendCount:3},{userName:'王胜',postRecommendCount:3},{userName:'陈丽丽',postRecommendCount:3}];
+      loading.value = false;
+    }
+
+    const reload = () => {
+      dataList.value = [];
+      searchParamsState.page = 1;
+      loadData();
+    }
+
+    const onScroll = (e: any) => {
+      setTimeout(() => {
+        e.target.complete();
+        if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
+          pagination.value.current += 1;
+          loadData();
+        }
+      }, 500);
+    }
+
+    const onAdd = (item: any) => {
+      router.push({path: './edit', query: {reload: 1, id: ""}});
+    }
+
+    onIonViewDidEnter(() => {
+      reload();
+    });
+
+    return {
+      router,
+      pagination,
+      colors,
+      reload,
+      loading,
+      searchParamsState,
+      dataList,
+      total,
+      dayjs,
+      onScroll,
+      onAdd,
+      loadData,
+      ellipse,
+      arrowBackOutline,
+      addCircleOutline,
+    }
+  }
+});
+</script>
+
+<style lang="less">
+.jobuser-list-page{
+  .list-content{
+    background-color: white !important;
+    border-radius: 0 !important;
+    ion-item{
+      border: none !important;
+      p{
+        font-size: 12px;
+      }
+    }
+  }
+}
+
+</style>

+ 224 - 0
h5app/src/views/pages/post/recommend.vue

@@ -0,0 +1,224 @@
+<template>
+  <ion-page class="list-page post-recomment-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="()=>router.push('../')"></ion-icon>
+        </ion-buttons>
+        <ion-title>岗位推荐</ion-title>
+        <!--        <ion-buttons slot="end">
+                  <ion-icon :icon="addCircleOutline" @click="onAdd()"></ion-icon>
+                </ion-buttons>-->
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <ion-item style="margin: 10px 0;">
+        <ion-input style="border: 1px solid #f2f2f5;border-radius: 4px;--padding-start: 10px;height: 35px;"
+                   placeholder="人员姓名"></ion-input>
+        <ion-button slot="end" style="height: 33px;width: 70px;margin-left: 10px;--box-shadow: none;">查询</ion-button>
+      </ion-item>
+      <ion-item>
+        <ion-grid>
+          <ion-row>
+            <ion-col>
+              <ion-label style="display: flex;justify-content: space-between;">
+                <ion-text>
+                  王佳佳
+                </ion-text>
+                <p style="color: #0d0d0d">
+                  正在跟进
+                </p>
+              </ion-label>
+            </ion-col>
+          </ion-row>
+          <ion-row>
+            <ion-col>
+              <ion-label style="display: flex;justify-content: space-between;">
+                <p style="color: #0d0d0d">
+                  意向岗位:保安、仓管
+                </p>
+                <p style="color: #0d0d0d">
+                  已推荐数量:2
+                </p>
+              </ion-label>
+            </ion-col>
+          </ion-row>
+        </ion-grid>
+      </ion-item>
+      <ion-list class="list-content">
+        <ion-item v-for="(record,key) in dataList" :key="key" detail>
+          <ion-row style="width: 100%;">
+            <ion-col size="10">
+              <ion-grid>
+                <ion-row>
+                  <ion-col>
+                    <ion-label style="display: flex;justify-content: space-between;">
+                      <ion-text>
+                        {{ record.postName }}
+                      </ion-text>
+                    </ion-label>
+                  </ion-col>
+                </ion-row>
+                <ion-row>
+                  <ion-col>
+                    <ion-label>
+                      <p>
+                        {{ record.companyName }}
+                      </p>
+                    </ion-label>
+                  </ion-col>
+                </ion-row>
+                <ion-row>
+                  <ion-col>
+                    <ion-label style="display: flex;justify-content: space-between;">
+                      <p>
+                        参保人数:16人
+                      </p>
+                      <p>
+                        招聘人数:6
+                      </p>
+                    </ion-label>
+                  </ion-col>
+                </ion-row>
+              </ion-grid>
+            </ion-col>
+            <ion-col size="2" style="display: flex;align-items: center;justify-content: right;">
+              <a>推荐</a>
+            </ion-col>
+          </ion-row>
+        </ion-item>
+
+        <ion-button class="select-btn">
+          全部推荐
+        </ion-button>
+      </ion-list>
+      <b-empty v-if="dataList.length<=0" :loading="loading"/>
+      <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
+        <ion-infinite-scroll-content
+            :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
+            loadingSpinner="bubbles">
+        </ion-infinite-scroll-content>
+      </ion-infinite-scroll>
+    </ion-content>
+  </ion-page>
+</template>
+
+<script lang="ts">
+
+import {computed, defineComponent, reactive, ref} from 'vue';
+import dayjs from "dayjs";
+import {useRoute, useRouter} from "vue-router";
+import {arrowBackOutline, ellipse, addCircleOutline} from 'ionicons/icons';
+import {IonIcon, onIonViewDidEnter} from '@ionic/vue';
+import BEmpty from "@/components/empty.vue";
+
+export default defineComponent({
+  name: 'PostRecomment',
+  components: {IonIcon, BEmpty},
+  setup() {
+    const loading = ref(true);
+    const pagination = computed(() => ({
+      total: total,
+      current: searchParamsState.page,
+      pageSize: searchParamsState.rows
+    }));
+    const dataList = ref<any>([]);
+    const router = useRouter();
+    const route = useRoute();
+    const total = ref(15);
+    const colors = ref(["secondary", "tertiary", "success", "warning"]);
+
+    const searchParamsState = reactive({page: 1, rows: 10, writeStatus: null})
+
+    const loadData = async function () {
+      loading.value = true;
+
+      /*const result: any = await getMyIntentionList(searchParamsState);
+      dataList.value = dataList.value.concat(result.list);
+      total.value = result.total;*/
+
+      dataList.value = [{companyName: '惠州市AA信息科技有限公司', postName: "保安", updateTime: '2023-12-11'},
+        {
+          companyName: '惠州市BB信息科技有限公司',
+          postName: "保安",
+          updateTime: '2023-12-12'
+        }, {companyName: '惠州市CC信息科技有限公司', postName: "仓管", updateTime: '2023-12-13'}];
+      loading.value = false;
+    }
+
+    const reload = () => {
+      dataList.value = [];
+      searchParamsState.page = 1;
+      loadData();
+    }
+
+    const onScroll = (e: any) => {
+      setTimeout(() => {
+        e.target.complete();
+        if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
+          pagination.value.current += 1;
+          loadData();
+        }
+      }, 500);
+    }
+
+    const onAdd = (item: any) => {
+      router.push({path: './edit', query: {reload: 1, id: ""}});
+    }
+
+    onIonViewDidEnter(() => {
+      reload();
+    });
+
+    return {
+      router,
+      pagination,
+      colors,
+      reload,
+      loading,
+      searchParamsState,
+      dataList,
+      total,
+      dayjs,
+      onScroll,
+      onAdd,
+      loadData,
+      ellipse,
+      arrowBackOutline,
+      addCircleOutline,
+    }
+  }
+});
+</script>
+
+<style lang="less">
+.post-recomment-page {
+  .list-content {
+    margin: 0px 15px !important;
+    background-color: white !important;
+    border-radius: 0 !important;
+
+    ion-item {
+      margin-top: 10px;
+      font-size: 14px;
+      border: 1px solid rgb(242, 242, 245);
+
+      p {
+        font-size: 12px;
+      }
+    }
+  }
+
+  .select-btn {
+    width: 100%;
+    --border-radius: 0px;
+    --background: #f2f2f5;
+    margin: 20px 0 0 0;
+    color: #363432;
+    font-size: 14px;
+    --box-shadow: none !important;
+    --border-radius: 8px !important;
+  }
+}
+
+</style>

+ 168 - 0
h5app/src/views/pages/sitemap/index.vue

@@ -0,0 +1,168 @@
+<template>
+  <ion-page class="list-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="()=>router.push('../')"></ion-icon>
+        </ion-buttons>
+        <ion-title>企业信息收集</ion-title>
+        <ion-buttons slot="end">
+          <ion-icon :icon="addCircleOutline" @click="onAdd()"></ion-icon>
+        </ion-buttons>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <ion-item style="margin: 10px 0;">
+        <ion-input style="border: 1px solid #f2f2f5;border-radius: 8px;--padding-start: 10px;"></ion-input>
+        <ion-button slot="end" style="height: 40px;width: 70px;margin-left: 10px;">搜索</ion-button>
+      </ion-item>
+      <ion-list class="list-content">
+        <ion-item v-for="(record,key) in dataList" :key="key"  detail>
+          <ion-grid>
+            <ion-row>
+              <ion-col>
+                <ion-label style="display: flex;justify-content: space-between;">
+                  <ion-text>
+                    {{record.companyName}}
+                  </ion-text>
+                  <p>
+                    {{record.statusName}}
+                  </p>
+                </ion-label>
+              </ion-col>
+            </ion-row>
+            <ion-row>
+              <ion-col>
+                <ion-label>
+                  <p>
+                    最新跟进时间:{{record.updateTime}}
+
+                  </p>
+                </ion-label>
+              </ion-col>
+            </ion-row>
+            <ion-row>
+              <ion-col>
+                <ion-label style="display: flex;justify-content: space-between;">
+                  <p>
+                    参保人数:16人
+                  </p>
+                  <p>
+                    岗位数量:6
+                  </p>
+                </ion-label>
+              </ion-col>
+            </ion-row>
+          </ion-grid>
+        </ion-item>
+      </ion-list>
+      <b-empty v-if="dataList.length<=0" :loading="loading"/>
+      <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
+        <ion-infinite-scroll-content
+            :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
+            loadingSpinner="bubbles">
+        </ion-infinite-scroll-content>
+      </ion-infinite-scroll>
+    </ion-content>
+  </ion-page>
+</template>
+
+<script lang="ts">
+
+import {computed, defineComponent, reactive, ref} from 'vue';
+import dayjs from "dayjs";
+import {useRoute, useRouter} from "vue-router";
+import {arrowBackOutline, ellipse, addCircleOutline} from 'ionicons/icons';
+import {IonIcon, onIonViewDidEnter} from '@ionic/vue';
+import BEmpty from "@/components/empty.vue";
+
+export default defineComponent({
+  name: 'PracticeIntention',
+  components: {IonIcon, BEmpty},
+  setup() {
+    const loading = ref(true);
+    const pagination = computed(() => ({
+      total: total,
+      current: searchParamsState.page,
+      pageSize: searchParamsState.rows
+    }));
+    const dataList = ref<any>([]);
+    const router = useRouter();
+    const route = useRoute();
+    const total = ref(15);
+    const colors = ref(["secondary", "tertiary", "success", "warning"]);
+
+    const searchParamsState = reactive({page: 1, rows: 10, writeStatus: null})
+
+    const loadData = async function () {
+      loading.value = true;
+
+      /*const result: any = await getMyIntentionList(searchParamsState);
+      dataList.value = dataList.value.concat(result.list);
+      total.value = result.total;*/
+
+      dataList.value = [{companyName: '惠州市AA信息科技有限公司', statusName: "正在跟进",updateTime:'2023-12-11'},
+        {companyName: '惠州市BB信息科技有限公司', statusName: "正在跟进",updateTime:'2023-12-12'},{companyName: '惠州市CC信息科技有限公司', statusName: "正在跟进",updateTime:'2023-12-13'}];
+      loading.value = false;
+    }
+
+    const reload = () => {
+      dataList.value = [];
+      searchParamsState.page = 1;
+      loadData();
+    }
+
+    const onScroll = (e: any) => {
+      setTimeout(() => {
+        e.target.complete();
+        if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
+          pagination.value.current += 1;
+          loadData();
+        }
+      }, 500);
+    }
+
+    const onAdd = (item: any) => {
+      router.push({path: './edit', query: {reload: 1, id: ""}});
+    }
+
+    onIonViewDidEnter(() => {
+      reload();
+    });
+
+    return {
+      router,
+      pagination,
+      colors,
+      reload,
+      loading,
+      searchParamsState,
+      dataList,
+      total,
+      dayjs,
+      onScroll,
+      onAdd,
+      loadData,
+      ellipse,
+      arrowBackOutline,
+      addCircleOutline,
+    }
+  }
+});
+</script>
+
+<style lang="less">
+.list-content {
+  margin: 0px 15px !important;
+  background-color: white !important;
+  border-radius: 0 !important;
+  ion-item {
+    margin-top: 10px;
+    font-size: 14px;
+    border: 1px solid rgb(242, 242, 245);
+    p {
+      font-size: 12px;
+    }
+  }
+}
+</style>

+ 168 - 0
h5app/src/views/pages/work/log/list.vue

@@ -0,0 +1,168 @@
+<template>
+  <ion-page class="list-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="()=>router.push('../')"></ion-icon>
+        </ion-buttons>
+        <ion-title>企业信息收集</ion-title>
+        <ion-buttons slot="end">
+          <ion-icon :icon="addCircleOutline" @click="onAdd()"></ion-icon>
+        </ion-buttons>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <ion-item style="margin: 10px 0;">
+        <ion-input style="border: 1px solid #f2f2f5;border-radius: 8px;--padding-start: 10px;"></ion-input>
+        <ion-button slot="end" style="height: 40px;width: 70px;margin-left: 10px;">搜索</ion-button>
+      </ion-item>
+      <ion-list class="list-content">
+        <ion-item v-for="(record,key) in dataList" :key="key"  detail>
+          <ion-grid>
+            <ion-row>
+              <ion-col>
+                <ion-label style="display: flex;justify-content: space-between;">
+                  <ion-text>
+                    {{record.companyName}}
+                  </ion-text>
+                  <p>
+                    {{record.statusName}}
+                  </p>
+                </ion-label>
+              </ion-col>
+            </ion-row>
+            <ion-row>
+              <ion-col>
+                <ion-label>
+                  <p>
+                    最新跟进时间:{{record.updateTime}}
+
+                  </p>
+                </ion-label>
+              </ion-col>
+            </ion-row>
+            <ion-row>
+              <ion-col>
+                <ion-label style="display: flex;justify-content: space-between;">
+                  <p>
+                    参保人数:16人
+                  </p>
+                  <p>
+                    岗位数量:6
+                  </p>
+                </ion-label>
+              </ion-col>
+            </ion-row>
+          </ion-grid>
+        </ion-item>
+      </ion-list>
+      <b-empty v-if="dataList.length<=0" :loading="loading"/>
+      <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
+        <ion-infinite-scroll-content
+            :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
+            loadingSpinner="bubbles">
+        </ion-infinite-scroll-content>
+      </ion-infinite-scroll>
+    </ion-content>
+  </ion-page>
+</template>
+
+<script lang="ts">
+
+import {computed, defineComponent, reactive, ref} from 'vue';
+import dayjs from "dayjs";
+import {useRoute, useRouter} from "vue-router";
+import {arrowBackOutline, ellipse, addCircleOutline} from 'ionicons/icons';
+import {IonIcon, onIonViewDidEnter} from '@ionic/vue';
+import BEmpty from "@/components/empty.vue";
+
+export default defineComponent({
+  name: 'PracticeIntention',
+  components: {IonIcon, BEmpty},
+  setup() {
+    const loading = ref(true);
+    const pagination = computed(() => ({
+      total: total,
+      current: searchParamsState.page,
+      pageSize: searchParamsState.rows
+    }));
+    const dataList = ref<any>([]);
+    const router = useRouter();
+    const route = useRoute();
+    const total = ref(15);
+    const colors = ref(["secondary", "tertiary", "success", "warning"]);
+
+    const searchParamsState = reactive({page: 1, rows: 10, writeStatus: null})
+
+    const loadData = async function () {
+      loading.value = true;
+
+      /*const result: any = await getMyIntentionList(searchParamsState);
+      dataList.value = dataList.value.concat(result.list);
+      total.value = result.total;*/
+
+      dataList.value = [{companyName: '惠州市AA信息科技有限公司', statusName: "正在跟进",updateTime:'2023-12-11'},
+        {companyName: '惠州市BB信息科技有限公司', statusName: "正在跟进",updateTime:'2023-12-12'},{companyName: '惠州市CC信息科技有限公司', statusName: "正在跟进",updateTime:'2023-12-13'}];
+      loading.value = false;
+    }
+
+    const reload = () => {
+      dataList.value = [];
+      searchParamsState.page = 1;
+      loadData();
+    }
+
+    const onScroll = (e: any) => {
+      setTimeout(() => {
+        e.target.complete();
+        if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
+          pagination.value.current += 1;
+          loadData();
+        }
+      }, 500);
+    }
+
+    const onAdd = (item: any) => {
+      router.push({path: './edit', query: {reload: 1, id: ""}});
+    }
+
+    onIonViewDidEnter(() => {
+      reload();
+    });
+
+    return {
+      router,
+      pagination,
+      colors,
+      reload,
+      loading,
+      searchParamsState,
+      dataList,
+      total,
+      dayjs,
+      onScroll,
+      onAdd,
+      loadData,
+      ellipse,
+      arrowBackOutline,
+      addCircleOutline,
+    }
+  }
+});
+</script>
+
+<style lang="less">
+.list-content {
+  margin: 0px 15px !important;
+  background-color: white !important;
+  border-radius: 0 !important;
+  ion-item {
+    margin-top: 10px;
+    font-size: 14px;
+    border: 1px solid rgb(242, 242, 245);
+    p {
+      font-size: 12px;
+    }
+  }
+}
+</style>

+ 168 - 0
h5app/src/views/pages/work/task/list.vue

@@ -0,0 +1,168 @@
+<template>
+  <ion-page class="list-page">
+    <ion-header class="header-theme2">
+      <ion-toolbar>
+        <ion-buttons slot="start">
+          <ion-icon :icon="arrowBackOutline" @click="()=>router.push('../')"></ion-icon>
+        </ion-buttons>
+        <ion-title>企业信息收集</ion-title>
+        <ion-buttons slot="end">
+          <ion-icon :icon="addCircleOutline" @click="onAdd()"></ion-icon>
+        </ion-buttons>
+      </ion-toolbar>
+    </ion-header>
+    <ion-content>
+      <ion-item style="margin: 10px 0;">
+        <ion-input style="border: 1px solid #f2f2f5;border-radius: 8px;--padding-start: 10px;"></ion-input>
+        <ion-button slot="end" style="height: 40px;width: 70px;margin-left: 10px;">搜索</ion-button>
+      </ion-item>
+      <ion-list class="list-content">
+        <ion-item v-for="(record,key) in dataList" :key="key"  detail>
+          <ion-grid>
+            <ion-row>
+              <ion-col>
+                <ion-label style="display: flex;justify-content: space-between;">
+                  <ion-text>
+                    {{record.companyName}}
+                  </ion-text>
+                  <p>
+                    {{record.statusName}}
+                  </p>
+                </ion-label>
+              </ion-col>
+            </ion-row>
+            <ion-row>
+              <ion-col>
+                <ion-label>
+                  <p>
+                    最新跟进时间:{{record.updateTime}}
+
+                  </p>
+                </ion-label>
+              </ion-col>
+            </ion-row>
+            <ion-row>
+              <ion-col>
+                <ion-label style="display: flex;justify-content: space-between;">
+                  <p>
+                    参保人数:16人
+                  </p>
+                  <p>
+                    岗位数量:6
+                  </p>
+                </ion-label>
+              </ion-col>
+            </ion-row>
+          </ion-grid>
+        </ion-item>
+      </ion-list>
+      <b-empty v-if="dataList.length<=0" :loading="loading"/>
+      <ion-infinite-scroll threshold="100px" @ionInfinite="onScroll($event)">
+        <ion-infinite-scroll-content
+            :loadingText="pagination.total>pagination.current*pagination.pageSize?'正在加载...':'暂无更多'"
+            loadingSpinner="bubbles">
+        </ion-infinite-scroll-content>
+      </ion-infinite-scroll>
+    </ion-content>
+  </ion-page>
+</template>
+
+<script lang="ts">
+
+import {computed, defineComponent, reactive, ref} from 'vue';
+import dayjs from "dayjs";
+import {useRoute, useRouter} from "vue-router";
+import {arrowBackOutline, ellipse, addCircleOutline} from 'ionicons/icons';
+import {IonIcon, onIonViewDidEnter} from '@ionic/vue';
+import BEmpty from "@/components/empty.vue";
+
+export default defineComponent({
+  name: 'PracticeIntention',
+  components: {IonIcon, BEmpty},
+  setup() {
+    const loading = ref(true);
+    const pagination = computed(() => ({
+      total: total,
+      current: searchParamsState.page,
+      pageSize: searchParamsState.rows
+    }));
+    const dataList = ref<any>([]);
+    const router = useRouter();
+    const route = useRoute();
+    const total = ref(15);
+    const colors = ref(["secondary", "tertiary", "success", "warning"]);
+
+    const searchParamsState = reactive({page: 1, rows: 10, writeStatus: null})
+
+    const loadData = async function () {
+      loading.value = true;
+
+      /*const result: any = await getMyIntentionList(searchParamsState);
+      dataList.value = dataList.value.concat(result.list);
+      total.value = result.total;*/
+
+      dataList.value = [{companyName: '惠州市AA信息科技有限公司', statusName: "正在跟进",updateTime:'2023-12-11'},
+        {companyName: '惠州市BB信息科技有限公司', statusName: "正在跟进",updateTime:'2023-12-12'},{companyName: '惠州市CC信息科技有限公司', statusName: "正在跟进",updateTime:'2023-12-13'}];
+      loading.value = false;
+    }
+
+    const reload = () => {
+      dataList.value = [];
+      searchParamsState.page = 1;
+      loadData();
+    }
+
+    const onScroll = (e: any) => {
+      setTimeout(() => {
+        e.target.complete();
+        if (pagination.value.total.value > pagination.value.current * pagination.value.pageSize) {
+          pagination.value.current += 1;
+          loadData();
+        }
+      }, 500);
+    }
+
+    const onAdd = (item: any) => {
+      router.push({path: './edit', query: {reload: 1, id: ""}});
+    }
+
+    onIonViewDidEnter(() => {
+      reload();
+    });
+
+    return {
+      router,
+      pagination,
+      colors,
+      reload,
+      loading,
+      searchParamsState,
+      dataList,
+      total,
+      dayjs,
+      onScroll,
+      onAdd,
+      loadData,
+      ellipse,
+      arrowBackOutline,
+      addCircleOutline,
+    }
+  }
+});
+</script>
+
+<style lang="less">
+.list-content {
+  margin: 0px 15px !important;
+  background-color: white !important;
+  border-radius: 0 !important;
+  ion-item {
+    margin-top: 10px;
+    font-size: 14px;
+    border: 1px solid rgb(242, 242, 245);
+    p {
+      font-size: 12px;
+    }
+  }
+}
+</style>

+ 6 - 6
h5app/src/views/sapp/tabMain.vue

@@ -7,37 +7,37 @@
             我的应用
             我的应用
           </div>
           </div>
           <div class="tool-box">
           <div class="tool-box">
-            <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/attendanceSign')">
+            <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/jobuser/list')">
               <div class="tool-img">
               <div class="tool-img">
                 <img src="@/assets/icon/qzxx.png">
                 <img src="@/assets/icon/qzxx.png">
               </div>
               </div>
               <div class="tool-title">求职信息收集</div>
               <div class="tool-title">求职信息收集</div>
             </a>
             </a>
-            <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/attendanceSign')">
+            <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/company/list')">
               <div class="tool-img">
               <div class="tool-img">
                 <img src="@/assets/icon/qyxx.png">
                 <img src="@/assets/icon/qyxx.png">
               </div>
               </div>
               <div class="tool-title">企业信息收集</div>
               <div class="tool-title">企业信息收集</div>
             </a>
             </a>
-            <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/attendanceSign')">
+            <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/post/recommend')">
               <div class="tool-img">
               <div class="tool-img">
                 <img src="@/assets/icon/gwtj.png">
                 <img src="@/assets/icon/gwtj.png">
               </div>
               </div>
               <div class="tool-title">岗位推荐</div>
               <div class="tool-title">岗位推荐</div>
             </a>
             </a>
-            <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/attendanceSign')">
+            <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/work/log/list')">
               <div class="tool-img">
               <div class="tool-img">
                 <img src="@/assets/icon/gzrz.png">
                 <img src="@/assets/icon/gzrz.png">
               </div>
               </div>
               <div class="tool-title">工作日志</div>
               <div class="tool-title">工作日志</div>
             </a>
             </a>
-            <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/attendanceSign')">
+            <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/work/task/list')">
               <div class="tool-img">
               <div class="tool-img">
                 <img src="@/assets/icon/gzrw.png">
                 <img src="@/assets/icon/gzrw.png">
               </div>
               </div>
               <div class="tool-title">工作任务</div>
               <div class="tool-title">工作任务</div>
             </a>
             </a>
-            <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/attendanceSign')">
+            <a class="tool-item box-line"  @click="router.push('/tabs/tabMain/sitemap/index')">
               <div class="tool-img">
               <div class="tool-img">
                 <img src="@/assets/icon/map.png">
                 <img src="@/assets/icon/map.png">
               </div>
               </div>