Explorar el Código

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	h5app/src/views/pages/jobhunt/jobHuntEdit.vue
#	src/main/java/com/hz/employmentsite/controller/companyService/CompanyController.java
liao-sea hace 1 año
padre
commit
7f9883fb2e
Se han modificado 25 ficheros con 478 adiciones y 342 borrados
  1. 17 0
      h5app/src/App.vue
  2. 1 0
      h5app/src/api/account/model.d.ts
  3. 13 0
      h5app/src/api/company/index.ts
  4. 4 0
      h5app/src/router/index.ts
  5. 200 259
      h5app/src/views/pages/post/edit.vue
  6. 11 0
      src/main/java/com/hz/employmentsite/controller/baseSettings/SiteInfoController.java
  7. 5 3
      src/main/java/com/hz/employmentsite/controller/baseSettings/SiteUserController.java
  8. 7 0
      src/main/java/com/hz/employmentsite/controller/companyService/CompanyController.java
  9. 5 1
      src/main/java/com/hz/employmentsite/mapper/cquery/UserInfoCQuery.java
  10. 19 0
      src/main/java/com/hz/employmentsite/services/impl/baseSettings/SiteInfoImpl.java
  11. 4 4
      src/main/java/com/hz/employmentsite/services/impl/baseSettings/SiteUserImpl.java
  12. 7 0
      src/main/java/com/hz/employmentsite/services/impl/companyService/CompanyServiceImpl.java
  13. 7 0
      src/main/java/com/hz/employmentsite/services/service/baseSettings/SiteInfoService.java
  14. 1 1
      src/main/java/com/hz/employmentsite/services/service/baseSettings/SiteUserService.java
  15. 3 0
      src/main/java/com/hz/employmentsite/services/service/companyService/CompanyService.java
  16. 6 0
      src/main/java/com/hz/employmentsite/vo/taskAndLog/DoTaskUserVo.java
  17. 1 0
      src/main/java/com/hz/employmentsite/vo/user/UserInfoModel.java
  18. 9 1
      src/main/resources/mapping/cquery/DoTaskCQuery.xml
  19. 6 0
      src/main/resources/mapping/cquery/SiteUserCQuery.xml
  20. 1 1
      src/main/resources/mapping/cquery/SysUserCQuery.xml
  21. 19 0
      vue/src/api/baseSettings/siteInfo.ts
  22. 7 1
      vue/src/views/taskAndLog/dotask/detail.vue
  23. 60 51
      vue/src/views/taskAndLog/dotask/edit.vue
  24. 14 14
      vue/src/views/taskAndLog/dotask/index.vue
  25. 51 6
      vue/src/views/taskAndLog/dotask/siteUser.vue

+ 17 - 0
h5app/src/App.vue

@@ -300,6 +300,23 @@ ion-grid {
       content: "选择";
       color: #02a6f1;
     }
+
+    ion-item{
+      ion-select{
+        border-bottom: 1px solid #f1f5f7;
+        color: #8c8f93;
+        --padding-start: 0px;
+      }
+
+      ion-select::part(icon){
+        display: none;
+      }
+
+      ion-select::after{
+        content: "选择";
+        color: #02a6f1;
+      }
+    }
   }
 
   .form-detail{

+ 1 - 0
h5app/src/api/account/model.d.ts

@@ -28,6 +28,7 @@ declare namespace API {
     userTypeName: string,
     loginID: string,
     name:string,
+    siteID:string,
     siteUserName:string,
     gender: 1,
     genderName: string,

+ 13 - 0
h5app/src/api/company/index.ts

@@ -1,5 +1,18 @@
 import {request} from "@/utils/request";
 
+//根据驿站查询公司
+export function getCompanyBySiteID(siteID: any) {
+    return request<any>(
+        {
+            url: "companyService/company/getCompanyBySiteIDList",
+            method: 'get',
+            params: {siteID:siteID},
+        },
+        {
+            isNew: true,
+        },
+    );
+}
 //获取所属驿站
 export function getSiteList(params: any) {
     return request<any>(

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

@@ -72,6 +72,10 @@ const routes: Array<RouteRecordRaw> = [
                 path: 'tabMain/post/list',
                 component: () => import('@/views/pages/post/list.vue')
             },
+            {
+                path: 'tabMain/post/edit',
+                component: () => import('@/views/pages/post/edit.vue')
+            },
             {
                 path: 'tabMain/post/recommendJob',
                 component: () => import('@/views/pages/post/recommendJob.vue')

+ 200 - 259
h5app/src/views/pages/post/edit.vue

@@ -1,5 +1,5 @@
 <template>
-  <ion-page  class="list-page">
+  <ion-page class="list-page">
     <ion-header class="header-theme2">
       <ion-toolbar>
         <ion-buttons slot="start">
@@ -12,139 +12,168 @@
     </ion-header>
     <ion-content>
       <form autocomplete="off">
-        <ion-list>
-          <ion-item>
-            <div class="panel-title2">
-              <div class="item-flag"></div>
-              基础信息
-            </div>
-          </ion-item>
-          <ion-label class="title-item">岗位名称<span class="danger">*</span></ion-label>
-          <ion-item mode="md" :class="[v$.dataModel.postName.$error?'ion-invalid':'ion-valid']">
-            <ion-input placeholder="请输入岗位名称" label-placement="stacked" :clear-input="true"
-                       v-model="dataModel.postName" class="custom">
-            </ion-input>
-            <ion-note slot="error">请输入岗位名称</ion-note>
-          </ion-item>
-          <ion-label class="title-item">招聘数量(人)<span class="danger">*</span></ion-label>
-          <ion-item mode="md" :class="[v$.dataModel.recruitCount.$error?'ion-invalid':'ion-valid']">
-            <ion-input type="number" placeholder="请输入招聘数量" label-placement="stacked" :clear-input="true"
-                       v-model="dataModel.recruitCount" class="custom">
-            </ion-input>
-            <ion-note slot="error">请输入招聘数量</ion-note>
-          </ion-item>
-          <ion-label class="title-item">招聘日期<span class="danger">*</span></ion-label>
-          <ion-item mode="md" :class="[v$.dataModel.startTime.$error||v$.dataModel.endTime.$error?'ion-invalid':'ion-valid']">
-            <ion-datetime-button datetime="startTime"></ion-datetime-button>
-            <ion-modal :keep-contents-mounted="true">
-              <ion-datetime placeholder="招聘日期" id="startTime"
-                            v-model="dataModel.startTime"  :prefer-wheel="true"
-                            dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
-                            :show-default-buttons="true" style="text-align: left;width: 100%;">
-              </ion-datetime>
-            </ion-modal>
-            至
-            <ion-datetime-button datetime="endTime"></ion-datetime-button>
-            <ion-modal :keep-contents-mounted="true">
-              <ion-datetime placeholder="招聘日期" id="endTime"
-                            v-model="dataModel.endTime"  :prefer-wheel="true"
-                            dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
-                            :show-default-buttons="true" style="text-align: left;width: 100%;">
-              </ion-datetime>
-            </ion-modal>
-            <ion-note slot="error">招聘开始日期与结束日期不能为空</ion-note>
-          </ion-item>
-          <ion-label class="title-item">招聘地点<span class="danger">*</span></ion-label>
-          <ion-item mode="md" :class="[v$.dataModel.jobPlace.$error?'ion-invalid':'ion-valid']">
-            <ion-textarea placeholder="请输入招聘地点" :rows="3" label-placement="stacked" :clear-input="true"
-                       v-model="dataModel.jobPlace" class="custom">
-            </ion-textarea>
-            <ion-note slot="error">请输入招聘地点</ion-note>
-          </ion-item>
-
-          <ion-item mode="md" >
-            <div class="panel-title2" style="width: 25%;">
-              <div class="item-flag"></div>
-              其他信息
-            </div>
-            <div style="width: 75%;text-align: right;">
-              <ion-icon :icon="chevronDownOutline" @click="isShow=!isShow" v-show="!isShow"
-                        style="font-size: 24px;"></ion-icon>
-              <ion-icon :icon="chevronUpOutline" @click="isShow=!isShow" v-show="isShow"
-                        style="font-size: 24px;"></ion-icon>
-            </div>
-          </ion-item>
-          <ion-list v-show="isShow" >
-            <ion-label class="title-item">岗位月薪(元)</ion-label>
-            <ion-item mode="md" >
-              <ion-input placeholder="请输入金额" label-placement="stacked"
-                         v-model="dataModel.minSalary" class="custom">
-              </ion-input>
-              <ion-label style="text-align:left;width:70px;">至</ion-label>
-              <ion-input placeholder="请输入金额" label-placement="stacked"
-                         v-model="dataModel.maxSalary" class="custom">
-              </ion-input>
-            </ion-item>
-            <ion-label class="title-item">是否有试用期</ion-label>
-            <ion-item mode="md" >
-              <ion-select interface="action-sheet" placeholder="请选择是否有试用期" cancel-text="取消"
-                          id="isTrail" v-model="dataModel.isTrail" style="width: 100%;text-align: left;">
-                <ion-select-option v-for="(record,key) in isTrailList" :key="key"
-                                   v-model:value="record.value">
-                  {{ record.name }}
+        <div class="bw-vue-form">
+          <div class="form-title">基础信息</div>
+          <div class="form-select">
+            <ion-label>企业</ion-label>
+            <ion-item>
+              <ion-select interface="action-sheet" placeholder="请选择企业" cancel-text="取消"
+                          id="companyID" v-model="dataModel.companyID" style="width: 100%;text-align: left;">
+                <ion-select-option v-for="(record,key) in companyList" :key="key"
+                                   v-model:value="record.companyID">
+                  {{ record.companyName }}
                 </ion-select-option>
               </ion-select>
             </ion-item>
-            <ion-label class="title-item">试用期(月)</ion-label>
-            <ion-item mode="md" >
-              <ion-input type="number" placeholder="请输入试用期月数" label-placement="stacked"
-                         v-model="dataModel.trailMonths" class="custom">
+          </div>
+          <div class="form-input">
+            <ion-label>岗位名称<span class="danger">*</span></ion-label>
+            <ion-item :class="[v$.dataModel.postName.$error?'ion-invalid':'ion-valid']">
+              <ion-input placeholder="请输入岗位名称" label-placement="stacked" :clear-input="true"
+                         v-model="dataModel.postName" class="custom">
               </ion-input>
+              <ion-note slot="error">请输入岗位名称</ion-note>
             </ion-item>
-            <ion-label class="title-item">试用期月薪(元)</ion-label>
-            <ion-item mode="md" >
-              <ion-input type="number" placeholder="请输入金额" label-placement="stacked"
-                         v-model="dataModel.trailMinSalary" class="custom">
-              </ion-input>
-              <ion-label style="text-align:left;width:70px;">至</ion-label>
-              <ion-input type="number" placeholder="请输入金额" label-placement="stacked"
-                         v-model="dataModel.trailMaxSalary" class="custom">
+          </div>
+          <div class="form-input">
+            <ion-label>招聘人数<span class="danger">*</span></ion-label>
+            <ion-item :class="[v$.dataModel.recruitCount.$error?'ion-invalid':'ion-valid']">
+              <ion-input type="number" placeholder="请输入招聘数量" label-placement="stacked" :clear-input="true"
+                         v-model="dataModel.recruitCount" class="custom">
               </ion-input>
+              <ion-note slot="error">请输入招聘人数</ion-note>
             </ion-item>
-            <ion-label class="title-item">工作年限要求</ion-label>
-            <ion-item mode="md" >
-              <ion-select interface="action-sheet" placeholder="请选择工作年限" cancel-text="取消"
-                          id="workYear" v-model="dataModel.workYear" style="width: 100%;text-align: left;">
-                <ion-select-option v-for="(record,key) in workYearList" :key="key"
-                                   v-model:value="record.value">
-                  {{ record.name }}
-                </ion-select-option>
-              </ion-select>
-            </ion-item>
-            <ion-label class="title-item">学历要求</ion-label>
-            <ion-item mode="md" >
-              <ion-select interface="action-sheet" placeholder="请选择学历" cancel-text="取消"
-                          id="cultureRank" v-model="dataModel.cultureRank" style="width: 100%;text-align: left;">
-                <ion-select-option v-for="(record,key) in cultureRankList" :key="key"
-                                   v-model:value="record.value">
-                  {{ record.name }}
-                </ion-select-option>
-              </ion-select>
+          </div>
+          <div class="form-input">
+            <ion-label>招聘日期<span class="danger">*</span></ion-label>
+            <ion-item
+                      :class="[v$.dataModel.startTime.$error||v$.dataModel.endTime.$error?'ion-invalid':'ion-valid']">
+              <ion-datetime-button datetime="startTime"></ion-datetime-button>
+              <ion-modal :keep-contents-mounted="true">
+                <ion-datetime placeholder="招聘日期" id="startTime"
+                              v-model="dataModel.startTime" :prefer-wheel="true"
+                              dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
+                              :show-default-buttons="true" style="text-align: left;width: 100%;">
+                </ion-datetime>
+              </ion-modal>
+              至
+              <ion-datetime-button datetime="endTime"></ion-datetime-button>
+              <ion-modal :keep-contents-mounted="true">
+                <ion-datetime placeholder="招聘日期" id="endTime"
+                              v-model="dataModel.endTime" :prefer-wheel="true"
+                              dataformatas="YYYY-MM-DD" presentation="date" cancel-text="取消" done-text="确定"
+                              :show-default-buttons="true" style="text-align: left;width: 100%;">
+                </ion-datetime>
+              </ion-modal>
+              <ion-note slot="error">招聘开始日期与结束日期不能为空</ion-note>
             </ion-item>
-            <ion-label class="title-item">福利待遇</ion-label>
-            <ion-item mode="md" >
-              <ion-textarea placeholder="请输入福利待遇" :rows="3" label-placement="stacked"
-                            v-model="dataModel.welfare" class="custom">
+          </div>
+          <div class="form-input">
+            <ion-label>招聘地点<span class="danger">*</span></ion-label>
+            <ion-item :class="[v$.dataModel.jobPlace.$error?'ion-invalid':'ion-valid']">
+              <ion-textarea placeholder="请输入招聘地点" :rows="3" label-placement="stacked" :clear-input="true"
+                            v-model="dataModel.jobPlace" class="custom">
               </ion-textarea>
+              <ion-note slot="error">请输入招聘地点</ion-note>
             </ion-item>
-            <ion-label class="title-item">其他要求</ion-label>
-            <ion-item mode="md" >
-              <ion-textarea placeholder="请输入其他要求" :rows="3" label-placement="stacked"
-                            v-model="dataModel.postDesc" class="custom">
-              </ion-textarea>
-            </ion-item>
-          </ion-list>
-        </ion-list>
+          </div>
+        </div>
+        <div class="bw-vue-form">
+          <div class="form-title" style="display: flex;justify-content: space-between;">
+            <div style="width: 25%;">
+              其他信息
+            </div>
+            <div style="width: 75%;text-align: right;">
+              <ion-label style="color: red;font-size: 14px;" @click="isShow=!isShow">{{isShow?"收起":"展开"}}</ion-label>
+            </div>
+          </div>
+          <div v-show="isShow">
+            <div class="form-input">
+              <ion-label>岗位月薪(元)</ion-label>
+              <ion-item>
+                <ion-input placeholder="请输入金额" label-placement="stacked"
+                           v-model="dataModel.minSalary" class="custom">
+                </ion-input>
+                <ion-label style="text-align:left;width:70px;">至</ion-label>
+                <ion-input placeholder="请输入金额" label-placement="stacked"
+                           v-model="dataModel.maxSalary" class="custom">
+                </ion-input>
+              </ion-item>
+            </div>
+            <div class="form-select">
+              <ion-label>是否有试用期</ion-label>
+              <ion-item>
+                <ion-select interface="action-sheet" placeholder="请选择是否有试用期" cancel-text="取消"
+                            id="isTrail" v-model="dataModel.isTrail" style="width: 100%;text-align: left;">
+                  <ion-select-option v-for="(record,key) in isTrailList" :key="key"
+                                     v-model:value="record.value">
+                    {{ record.name }}
+                  </ion-select-option>
+                </ion-select>
+              </ion-item>
+            </div>
+            <div class="form-input">
+              <ion-label>试用期(月)</ion-label>
+              <ion-item>
+                <ion-input type="number" placeholder="请输入试用期月数" label-placement="stacked"
+                           v-model="dataModel.trailMonths" class="custom">
+                </ion-input>
+              </ion-item>
+            </div>
+            <div class="form-input">
+              <ion-label>试用期月薪(元)</ion-label>
+              <ion-item>
+                <ion-input type="number" placeholder="请输入金额" label-placement="stacked"
+                           v-model="dataModel.trailMinSalary" class="custom">
+                </ion-input>
+                <ion-label style="text-align:left;width:70px;">至</ion-label>
+                <ion-input type="number" placeholder="请输入金额" label-placement="stacked"
+                           v-model="dataModel.trailMaxSalary" class="custom">
+                </ion-input>
+              </ion-item>
+            </div>
+            <div class="form-input">
+              <ion-label>工作年限要求</ion-label>
+              <ion-item>
+                <ion-select interface="action-sheet" placeholder="请选择工作年限" cancel-text="取消"
+                            id="workYear" v-model="dataModel.workYear" style="width: 100%;text-align: left;">
+                  <ion-select-option v-for="(record,key) in workYearList" :key="key"
+                                     v-model:value="record.value">
+                    {{ record.name }}
+                  </ion-select-option>
+                </ion-select>
+              </ion-item>
+            </div>
+            <div class="form-select">
+              <ion-label>学历要求</ion-label>
+              <ion-item>
+                <ion-select interface="action-sheet" placeholder="请选择学历" cancel-text="取消"
+                            id="cultureRank" v-model="dataModel.cultureRank" style="width: 100%;text-align: left;">
+                  <ion-select-option v-for="(record,key) in cultureRankList" :key="key"
+                                     v-model:value="record.value">
+                    {{ record.name }}
+                  </ion-select-option>
+                </ion-select>
+              </ion-item>
+            </div>
+            <div class="form-input">
+              <ion-label>福利待遇</ion-label>
+              <ion-item>
+                <ion-textarea placeholder="请输入福利待遇" :rows="3" label-placement="stacked"
+                              v-model="dataModel.welfare" class="custom">
+                </ion-textarea>
+              </ion-item>
+            </div>
+            <div class="form-input">
+              <ion-label>其他要求</ion-label>
+              <ion-item>
+                <ion-textarea placeholder="请输入其他要求" :rows="3" label-placement="stacked"
+                              v-model="dataModel.postDesc" class="custom">
+                </ion-textarea>
+              </ion-item>
+            </div>
+          </div>
+        </div>
       </form>
     </ion-content>
     <ion-footer>
@@ -162,9 +191,11 @@ import {chevronDownOutline, chevronUpOutline, arrowBackOutline} from 'ionicons/i
 import {useRoute, useRouter} from "vue-router";
 import {alertController, onIonViewDidEnter} from "@ionic/vue";
 import {useVuelidate} from "@vuelidate/core";
-import {getPostByID,savePost} from "@/api/post";
+import {getPostByID, savePost} from "@/api/post";
 import {minLength, required} from "@vuelidate/validators";
 import {getSysDictionaryList} from "@/api/system/dictionary";
+import {getCompanyBySiteID} from "@/api/company";
+import {useUserStore} from '@/store/modules/user';
 import dayjs from "dayjs";
 
 export default defineComponent({
@@ -172,28 +203,30 @@ export default defineComponent({
   setup() {
     const router = useRouter();
     const route = useRoute();
+    const userStore = useUserStore();
     const isShow = ref<any>(false);
     const isEdit = ref<any>(false);
     const formState = reactive({
       dataModel: {
-        companyID:null,
-        postID:null,
-        postName:null,
-        recruitCount:null,
-        startTime:dayjs().format("YYYY-MM-DD"),
-        endTime:dayjs().format("YYYY-MM-DD"),
-        jobPlace:null,
-        minSalary:null,
-        maxSalary:null,
-        isTrail:null,
-        trailMonths:null,
-        trailMinSalary:null,
-        trailMaxSalary:null,
-        workYear:null,
-        cultureRank:null,
-        welfare:null,
-        postDesc:null
-      }});
+        companyID: null,
+        postID: null,
+        postName: null,
+        recruitCount: null,
+        startTime: dayjs().format("YYYY-MM-DD"),
+        endTime: dayjs().format("YYYY-MM-DD"),
+        jobPlace: null,
+        minSalary: null,
+        maxSalary: null,
+        isTrail: null,
+        trailMonths: null,
+        trailMinSalary: null,
+        trailMaxSalary: null,
+        workYear: null,
+        cultureRank: null,
+        welfare: null,
+        postDesc: null
+      }
+    });
     const rules = computed(() => {
       return {
         dataModel: {
@@ -201,7 +234,7 @@ export default defineComponent({
           recruitCount: {required},
           startTime: {required},
           endTime: {required},
-          jobPlace:{required}
+          jobPlace: {required}
         }
       }
     });
@@ -212,6 +245,7 @@ export default defineComponent({
     ]);
     const workYearList = ref([]);
     const cultureRankList = ref([]);
+    const companyList = ref([]);
 
     const presentAlert = async (message: string) => {
       const alert = await alertController.create({
@@ -224,52 +258,58 @@ export default defineComponent({
       await alert.present();
     }
 
-    const onSave = async function (){
+    const onSave = async function () {
       const isFormCorrect = await v$.value.$validate();
       if (!isFormCorrect) {
-        console.log("当前岗位信息",formState.dataModel);
+        console.log("当前岗位信息", formState.dataModel);
         await presentAlert('请输入完整信息!');
         return null;
       }
-      savePost(formState.dataModel).then(result=>{
-        if(result){
-           router.push({path: "./postList", query: {reload:1,id:formState.dataModel.companyID,status: 3}});
+      savePost(formState.dataModel).then(result => {
+        if (result) {
+          router.push({path: "./list", query: {reload: 1}});
         }
       })
     }
 
     const back = () => {
-      router.push({path: "./postList", query: {reload:1,id:formState.dataModel.companyID,status: 3}});
+      router.push({path: "./list", query: {reload: 1}});
     }
 
-    const getWorkYearList = async function(){
-      const data :any = await getSysDictionaryList("WorkYearType");
+    const getCompanyBySiteIDList = async function () {
+      const siteID = userStore.getUserInfo.siteID;
+      const data: any = await getCompanyBySiteID(siteID);
+      companyList.value = data;
+    }
+    const getWorkYearList = async function () {
+      const data: any = await getSysDictionaryList("WorkYearType");
       workYearList.value = data;
       console.log(workYearList.value);
     }
-    const getCultureRankList = async function(){
-      const data:any = await getSysDictionaryList("CultureLevel");
+    const getCultureRankList = async function () {
+      const data: any = await getSysDictionaryList("CultureLevel");
       cultureRankList.value = data;
       console.log(cultureRankList.value);
     }
 
-    const loadData = async (postID: any,companyID:any) => {
+    const loadData = async (postID: any, companyID: any) => {
+      await getCompanyBySiteIDList();
       await getWorkYearList();
       await getCultureRankList();
       const reqData = await getPostByID(postID);
       formState.dataModel = reqData;
       formState.dataModel.companyID = companyID;
-      console.log("初始化岗位信息",formState.dataModel);
+      console.log("初始化岗位信息", formState.dataModel);
     };
 
-    const reload = (postID: any,companyID:any) => {
+    const reload = (postID: any, companyID: any) => {
       formState.dataModel.recruitCount = null;
-      loadData(postID,companyID);
+      loadData(postID, companyID);
     }
 
     onIonViewDidEnter(() => {
       if (route.query.reload)
-        reload(route.query.id,route.query.companyID);
+        reload(route.query.id, route.query.companyID);
     });
 
     return {
@@ -281,6 +321,7 @@ export default defineComponent({
       router,
       isShow,
       isEdit,
+      companyList,
       isTrailList,
       workYearList,
       cultureRankList,
@@ -294,105 +335,5 @@ export default defineComponent({
 
 <style lang="less">
 
-.custom{
-  --placeholder-color: gray;
-  --placeholder-font-style:italic;
-  --placeholder-opacity: 1;
-}
-
-.title-item{
-  margin-left: 15px;
-  color:#1c3d70 !important;
-  font-size: 14px !important;
-  font-weight: bold;
-}
-
-ion-item {
-  --border-width: 0;
-  --border-style: none;
-
-  ion-label, input, ion-select, ion-datetime {
-    font-size: 14px !important;
-  }
-}
-
-.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;
-  }
-
-  .grayCircle {
-    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;
-  }
-
-  .grayLine {
-    height: 0;
-    border: 1px dashed #ccc;
-    width: 100%;
-    top: calc(50% - 11px);
-    left: calc(50% - 2px);
-    position: absolute;
-  }
 
-}
 </style>

+ 11 - 0
src/main/java/com/hz/employmentsite/controller/baseSettings/SiteInfoController.java

@@ -47,6 +47,17 @@ public class SiteInfoController {
         return RespGenerstor.success(siteInfoService.getDataList());
     }
 
+    /**
+     * 按县区查询选择参数列表
+     * @param regionCode 县区代码
+     * @return 接口封装返回值
+     */
+    @ResponseBody
+    @GetMapping("/getDataListByRegionCode")
+    public BaseResponse<List<SelectProps>> getDataListByRegionCode(@RequestParam("regionCode") String regionCode) {
+        return RespGenerstor.success(siteInfoService.getDataListByRegionCode(regionCode));
+    }
+
     @PostMapping("getListByInstitutionID")
     public BaseResponse<Integer> getListByInstitutionID(@RequestParam("pageIndex") int pageIndex, @RequestParam("pageSize") int pageSize,@RequestParam(required = false) String institutionID) {
         return RespGenerstor.success(siteInfoService.getListByInstitutionID(pageIndex,pageSize, institutionID));

+ 5 - 3
src/main/java/com/hz/employmentsite/controller/baseSettings/SiteUserController.java

@@ -34,9 +34,11 @@ public class SiteUserController {
     public BaseResponse<PageInfo<SiteUserVo>> getList(@RequestParam("pageIndex") int pageIndex, @RequestParam("pageSize") int pageSize,
                                                       @RequestParam(required = false) List<String> siteUserIDList,
                                                       @RequestParam(required = false) String siteUserName,
-                                                      @RequestParam(required = false) String siteID) {
+                                                      @RequestParam(required = false) String siteID,
+                                                      @RequestParam(required = false) String roleName,
+                                                      @RequestParam(required = false) String regionCode) {
 
-        PageInfo<SiteUserVo> result = userInfoService.getList(pageIndex,pageSize,siteUserIDList,siteUserName,siteID);
+        PageInfo<SiteUserVo> result = userInfoService.getList(pageIndex,pageSize,siteUserIDList,siteUserName,siteID,roleName,regionCode);
 
         return RespGenerstor.success(result);
     }
@@ -73,7 +75,7 @@ public class SiteUserController {
                                @RequestParam(required = false) List<String> siteUserIDList,
                                @RequestParam(required = false) String siteUserName,
                                @RequestParam(required = false) String siteID) throws Exception{
-        PageInfo<SiteUserVo> result = userInfoService.getList(pageIndex,pageSize,siteUserIDList,siteUserName,siteID);
+        PageInfo<SiteUserVo> result = userInfoService.getList(pageIndex,pageSize,siteUserIDList,siteUserName,siteID, null, null);
         ExcelHelper.ExcelData data = excelHelper.new ExcelData();
         data.setTitles(Arrays.asList(new String[]{"序号","人员名称","角色", "性别", "联系电话","所属驿站"}));
         int i = 0;

+ 7 - 0
src/main/java/com/hz/employmentsite/controller/companyService/CompanyController.java

@@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo;
 import com.hz.employmentsite.filter.exception.BaseErrorEnum;
 import com.hz.employmentsite.filter.exception.BaseResponse;
 import com.hz.employmentsite.filter.exception.RespGenerstor;
+import com.hz.employmentsite.model.PcCompany;
 import com.hz.employmentsite.mapper.PcSiteMapper;
 import com.hz.employmentsite.mapper.PcSiteUserMapper;
 import com.hz.employmentsite.model.PcSite;
@@ -50,6 +51,12 @@ public class CompanyController {
         return RespGenerstor.success(result);
     }
 
+    @ResponseBody
+    @GetMapping("/getCompanyBySiteIDList")
+    public BaseResponse<List<PcCompany>> getCompanyBySiteIDList(@RequestParam(required = false) String siteID) {
+        return RespGenerstor.success(companyService.getCompanyBySiteIDList(siteID));
+    }
+
     @GetMapping("/getCompanyByID")
     public BaseResponse<CompanyVo> getCompanyById(String id) {
         var data = companyService.getDataById(id);

+ 5 - 1
src/main/java/com/hz/employmentsite/mapper/cquery/UserInfoCQuery.java

@@ -7,7 +7,11 @@ import java.util.List;
 
 public interface UserInfoCQuery {
 
-    List<SiteUserVo> getList(@Param("siteUserIDList") String siteUserIDList, @Param("siteUserName") String siteUserName,@Param("siteID") String siteID);
+    List<SiteUserVo> getList(@Param("siteUserIDList") String siteUserIDList,
+                             @Param("siteUserName") String siteUserName,
+                             @Param("siteID") String siteID,
+                             @Param("roleName") String roleName,
+                             @Param("regionCode") String regionCode);
 
     List<SiteUserVo> getListBySiteID(@Param("siteID") String siteID);
 }

+ 19 - 0
src/main/java/com/hz/employmentsite/services/impl/baseSettings/SiteInfoImpl.java

@@ -63,6 +63,25 @@ public class SiteInfoImpl implements SiteInfoService {
         return dataResult;
     }
 
+    /**
+     * 按县区查询选择参数列表
+     *
+     * @param regionCode 县区代码
+     * @return 选择器参数VO
+     */
+    @Override
+    public List<SelectProps> getDataListByRegionCode(String regionCode) {
+        List<SiteInfoVo> list = getList(1, 99999, null, null, null, null, regionCode, null).getList();
+        List<SelectProps> dataResult = new ArrayList<>();
+        for (var item: list) {
+            SelectProps  itemResult = new SelectProps();
+            itemResult.setText(item.siteName);
+            itemResult.setValue(item.siteID);
+            dataResult.add(itemResult);
+        }
+        return dataResult;
+    }
+
     @Override
     public PageInfo<SiteInfoVo> getListByInstitutionID(int pageIndex, int pageSize, String institutionID) {
         PageHelper.startPage(pageIndex, pageSize);

+ 4 - 4
src/main/java/com/hz/employmentsite/services/impl/baseSettings/SiteUserImpl.java

@@ -47,9 +47,9 @@ public class SiteUserImpl implements SiteUserService {
     private SysUserSysRoleMapper sysUserSysRoleMapper;
 
     @Override
-    public PageInfo<SiteUserVo> getList(int pageIndex, int pageSize, List<String> siteUserIDList, String siteUserName,String siteID) {
+    public PageInfo<SiteUserVo> getList(int pageIndex, int pageSize, List<String> siteUserIDList, String siteUserName,String siteID, String roleName, String regionCode) {
         PageHelper.startPage(pageIndex, pageSize);
-        List<SiteUserVo> dataList = userInfoCQuery.getList(stringUtils.ListToInSql(siteUserIDList),siteUserName,siteID);
+        List<SiteUserVo> dataList = userInfoCQuery.getList(stringUtils.ListToInSql(siteUserIDList),siteUserName,siteID, roleName, regionCode);
         PageInfo<SiteUserVo> result = new PageInfo(dataList);
         return result;
     }
@@ -70,13 +70,13 @@ public class SiteUserImpl implements SiteUserService {
         }else{
             ids.add(siteUserID);
         }
-        SiteUserVo model = userInfoCQuery.getList(stringUtils.ListToInSql(ids),null,null).stream().findFirst().orElse(null);
+        SiteUserVo model = userInfoCQuery.getList(stringUtils.ListToInSql(ids),null,null, null, null).stream().findFirst().orElse(null);
         return model;
     }
 
     @Override
     public List<SelectProps> getDataList() {
-        var dataList = getList(1,99999,null,null,null).getList();
+        var dataList = getList(1,99999,null,null,null, null, null).getList();
         List<SelectProps> dataResult = new ArrayList<>();
         for (var item: dataList) {
             SelectProps  itemResult = new SelectProps();

+ 7 - 0
src/main/java/com/hz/employmentsite/services/impl/companyService/CompanyServiceImpl.java

@@ -58,6 +58,13 @@ public class CompanyServiceImpl implements CompanyService {
         return result;
     }
 
+    @Override
+    public List<PcCompany> getCompanyBySiteIDList(String siteID) {
+        PcCompanyExample exp = new PcCompanyExample();
+        exp.or().andSiteIDEqualTo(siteID);
+        return pcCompanyMapper.selectByExample(exp);
+    }
+
     @Override
     public Integer save(CompanyVo data, String userId) {
         Integer result = 0;

+ 7 - 0
src/main/java/com/hz/employmentsite/services/service/baseSettings/SiteInfoService.java

@@ -12,6 +12,13 @@ public interface SiteInfoService {
 
     List<SelectProps> getDataList();
 
+    /**
+     * 按县区查询选择参数列表
+     * @param regionCode 县区代码
+     * @return 选择器参数VO
+     */
+    List<SelectProps> getDataListByRegionCode(String regionCode);
+
     PageInfo<SiteInfoVo> getListByInstitutionID(int pageIndex, int pageSize, String institutionID);
 
     SiteInfoVo get(String siteID);

+ 1 - 1
src/main/java/com/hz/employmentsite/services/service/baseSettings/SiteUserService.java

@@ -8,7 +8,7 @@ import java.util.List;
 
 public interface SiteUserService {
 
-    PageInfo<SiteUserVo> getList(int pageIndex, int pageSize, List<String> siteUserIDList, String siteUserName,String siteID);
+    PageInfo<SiteUserVo> getList(int pageIndex, int pageSize, List<String> siteUserIDList, String siteUserName,String siteID, String roleName, String regionCode);
 
     PageInfo<SiteUserVo> getListBySiteID(int pageIndex, int pageSize, String siteID);
 

+ 3 - 0
src/main/java/com/hz/employmentsite/services/service/companyService/CompanyService.java

@@ -1,6 +1,7 @@
 package com.hz.employmentsite.services.service.companyService;
 
 import com.github.pagehelper.PageInfo;
+import com.hz.employmentsite.model.PcCompany;
 import com.hz.employmentsite.model.PcSite;
 import com.hz.employmentsite.vo.companyService.AppCompanyPostVo;
 import com.hz.employmentsite.vo.companyService.CompanyVo;
@@ -11,6 +12,8 @@ public interface CompanyService {
 
     PageInfo<CompanyVo> getList(Integer pageIndex, Integer pageSize, List<String> companyIDList, String companyName, String companyCode, String recordStatus, String regionCode, String streetCode);
 
+    List<PcCompany> getCompanyBySiteIDList(String siteID);
+
     Integer save(CompanyVo data, String userId);
 
     Integer delete(String id);

+ 6 - 0
src/main/java/com/hz/employmentsite/vo/taskAndLog/DoTaskUserVo.java

@@ -7,6 +7,12 @@ public class DoTaskUserVo {
     public  String siteUserName;
     public  String genderName;
     public  String mobile;
+
+    public String siteName;
+
+    // PC端任务执行状态
+    public String taskStatusName;
+
     //勿删,手机端用到,表示某人员执行该任务的状态
     public  Integer userTaskStatus;
     public  String  userTaskStatusName;

+ 1 - 0
src/main/java/com/hz/employmentsite/vo/user/UserInfoModel.java

@@ -15,6 +15,7 @@ public class UserInfoModel {
     public String userTypeName;
     public Integer recordStatus;
 
+    public String siteID;
     public String siteUserName;
     public Integer gender;
     public String genderName;

+ 9 - 1
src/main/resources/mapping/cquery/DoTaskCQuery.xml

@@ -66,9 +66,17 @@
         </if>
     </select>
     <select id="getWorkUserList" resultType="com.hz.employmentsite.vo.taskAndLog.DoTaskUserVo">
-        select task.*,taskUser.DoTaskUserID,taskUser.UserTaskStatus,dic_taskStatus.Name as UserTaskStatusName,siteUser.SiteUserID, siteUser.SiteUserName,dic_gender.Name as GenderName,siteUser.Mobile  from  pc_dotask_user taskUser
+        select task.*,
+               taskUser.DoTaskUserID,
+               taskUser.UserTaskStatus,
+               dic_taskStatus.Name as UserTaskStatusName,
+               dic_taskStatus.Name as taskStatusName,
+               siteUser.SiteUserID, siteUser.SiteUserName,dic_gender.Name as GenderName,siteUser.Mobile,
+               site.SiteName as siteName
+        from  pc_dotask_user taskUser
         left join pc_dotask task on taskUser.DotaskID = task.DotaskID
         left join pc_site_user siteUser on taskUser.SiteUserID = siteUser.SiteUserID
+        LEFT JOIN pc_site site ON siteUser.SiteID = site.SiteID
         left join (select * from sys_dictionary_item where DictionaryCode ='TaskStatusType') dic_taskStatus on taskUser.UserTaskStatus = dic_taskStatus.Value
         left join (select * from sys_dictionary_item where DictionaryCode ='Gender') dic_gender on siteUser.Gender = dic_gender.Value
         where 1 = 1

+ 6 - 0
src/main/resources/mapping/cquery/SiteUserCQuery.xml

@@ -20,6 +20,12 @@
         <if test="siteID!='' and siteID!=null">
             and siteUser.siteID = #{siteID}
         </if>
+        <if test="roleName!='' and roleName!=null">
+            and dic_userRole.Name = #{roleName}
+        </if>
+        <if test="regionCode!='' and regionCode!=null">
+            and site.regionCode = #{regionCode}
+        </if>
     </select>
 
     <select id="getListBySiteID" resultType="com.hz.employmentsite.vo.baseSettings.SiteUserVo">

+ 1 - 1
src/main/resources/mapping/cquery/SysUserCQuery.xml

@@ -83,7 +83,7 @@
     </select>
 
     <select id="selectUserInfo" resultType="com.hz.employmentsite.vo.user.UserInfoModel">
-        select theUser.*,dic_userType.Name as UserTypeName,siteUser.SiteUserName,siteUser.Mobile as UserMobile,
+        select theUser.*,dic_userType.Name as UserTypeName,siteUser.SiteID,siteUser.SiteUserName,siteUser.Mobile as UserMobile,
                siteUser.Gender,dic_genderType.Name as GenderName from sys_user theUser
         left join pc_site_user siteUser on theUser.UserID = siteUser.UserID
         left join (select * from sys_dictionary_item where DictionaryCode ='UserType') dic_userType

+ 19 - 0
vue/src/api/baseSettings/siteInfo.ts

@@ -26,6 +26,25 @@ export function getSiteDataList(){
   );
 }
 
+/**
+ * 按县区查询选择参数列表
+ * @param regionCode 县区代码
+ */
+export function getDataListByRegionCode(regionCode: string){
+  return request<any>(
+    {
+      url: 'siteInfo/getDataListByRegionCode',
+      method: 'get',
+      params: {
+        regionCode
+      },
+    },
+    {
+      isNew: true,
+    },
+  );
+}
+
 export function getListByInstitutionID(params: any) {
   return request<object>(
     {

+ 7 - 1
vue/src/views/taskAndLog/dotask/detail.vue

@@ -9,7 +9,7 @@
         }}
       </a-descriptions-item>
       <a-descriptions-item label="所属县区">{{ taskInfo.regionName }}</a-descriptions-item>
-      <a-descriptions-item :span="2" label="所属街道">{{ taskInfo.streetName }}</a-descriptions-item>
+      <!--      <a-descriptions-item :span="2" label="所属街道">{{ taskInfo.streetName }}</a-descriptions-item>-->
       <a-descriptions-item label="任务内容">{{ taskInfo.workContent }}</a-descriptions-item>
     </a-descriptions>
     <a-divider orientation="left">任务执行人员 共计:{{ userData.length }}</a-divider>
@@ -27,6 +27,9 @@
         <template v-if="column.key === 'mobile'">
           {{ userData[index][column.key] }}
         </template>
+        <template v-if="column.key === 'siteName'">
+          {{ userData[index][column.key] }}
+        </template>
         <template v-if="column.key === 'taskStatusName'">
           {{ userData[index][column.key] }}
         </template>
@@ -78,6 +81,9 @@ const columns: TableColumnsType = [
   {
     title: '联系电话', dataIndex: 'mobile', key: 'mobile', align: "center", width: 120
   },
+  {
+    title: '所属驿站', dataIndex: 'siteName', key: 'siteName', align: "center", width: 120
+  },
   {
     title: '执行情况', dataIndex: 'taskStatusName', key: 'taskStatusName', align: "center", width: 120
   },

+ 60 - 51
vue/src/views/taskAndLog/dotask/edit.vue

@@ -5,33 +5,33 @@
       <a-row :gutter="24">
         <a-col :span="8">
           <a-form-item
-            label="任务名称"
             :label-col="{ span: 6 }"
-            name="doTaskName"
             :rules="[{ required: true, message: '请输入任务名称!' }]"
+            label="任务名称"
+            name="doTaskName"
           >
             <a-input v-model:value="dataModel.doTaskName" placeholder=""/>
           </a-form-item>
         </a-col>
         <a-col :span="8">
-          <a-form-item label="任务类型" :label-col="{span:6}" name="workTypeID"
-                       :rules="[{ required: true, message: '请选择任务类型!' }]">
+          <a-form-item :label-col="{span:6}" :rules="[{ required: true, message: '请选择任务类型!' }]" label="任务类型"
+                       name="workTypeID">
             <a-select
               ref="select"
               v-model:value="dataModel.workTypeID"
-              :options="taskTypeList"
-              :field-names="{ label: 'name', value: 'value' }"
               :allow-clear="true"
+              :field-names="{ label: 'name', value: 'value' }"
+              :options="taskTypeList"
             >
             </a-select>
           </a-form-item>
         </a-col>
         <a-col :span="8">
           <a-form-item
-            label="任务完成时间"
             :label-col="{ span: 6 }"
-            name="finishTime"
             :rules="[{ required: true, message: '请输入任务完成时间!' }]"
+            label="任务完成时间"
+            name="finishTime"
           >
             <a-date-picker
               v-model:value="dataModel.finishTime"
@@ -43,37 +43,37 @@
       </a-row>
       <a-row :gutter="24">
         <a-col :span="8">
-          <a-form-item label="所属县区" :label-col="{span:6}" name="regionCode"
-                       :rules="[{ required: true, message: '请选择所属县区!' }]">
+          <a-form-item :label-col="{span:6}" :rules="[{ required: true, message: '请选择所属县区!' }]" label="所属县区"
+                       name="regionCode">
             <a-select
               ref="select"
               v-model:value="dataModel.regionCode"
-              :options="regionList"
-              :field-names="{ label: 'name', value: 'code' }"
               :allow-clear="true"
+              :field-names="{ label: 'name', value: 'code' }"
+              :options="regionList"
               @change="regionChange"
             >
             </a-select>
           </a-form-item>
         </a-col>
-        <a-col :span="8">
-          <a-form-item label="所属街道" :label-col="{span:6}" name="streetCode"
-                       :rules="[{ required: true, message: '请选择所属街道!' }]">
-            <a-select
-              ref="select"
-              v-model:value="dataModel.streetCode"
-              :options="streetList"
-              :field-names="{ label: 'name', value: 'code' }"
-              :allow-clear="true" >
-            </a-select>
-          </a-form-item>
-        </a-col>
+        <!--        <a-col :span="8">-->
+        <!--          <a-form-item label="所属街道" :label-col="{span:6}" name="streetCode"-->
+        <!--                       :rules="[{ required: true, message: '请选择所属街道!' }]">-->
+        <!--            <a-select-->
+        <!--              ref="select"-->
+        <!--              v-model:value="dataModel.streetCode"-->
+        <!--              :options="streetList"-->
+        <!--              :field-names="{ label: 'name', value: 'code' }"-->
+        <!--              :allow-clear="true" >-->
+        <!--            </a-select>-->
+        <!--          </a-form-item>-->
+        <!--        </a-col>-->
       </a-row>
       <a-row>
         <a-col class="table-bottom-a1">
-          <a-form-item :label-col="{span:6}" label="" name="content"
-                       :rules="[{ required: true, message: '请输入任务内容!' }]" >
-            <a-textarea v-model:value="dataModel.content" placeholder="任务内容" :rows="4"/>
+          <a-form-item :label-col="{span:6}" :rules="[{ required: true, message: '请输入任务内容!' }]" label=""
+                       name="content">
+            <a-textarea v-model:value="dataModel.content" :rows="4" placeholder="任务内容"/>
           </a-form-item>
         </a-col>
       </a-row>
@@ -89,19 +89,19 @@
           </Space>
         </a-col>
       </a-row>
-      <a-divider orientation="left">任务执行人员  共计:{{userData.length}}</a-divider>
+      <a-divider orientation="left">任务执行人员 共计:{{ userData.length }}</a-divider>
       <a-row>
         <a-col style="margin-bottom: 20px;">
-          <a-table :columns="columns" :data-source="userData" :pagination="pagination"
-                   :loading="formState.loading"
-                   @change="handleTableChange"
-                   :row-selection="{ selectedRowKeys: formState.selectedRowKeys, onChange: onSelectChange}"
+          <a-table :columns="columns" :data-source="userData" :loading="formState.loading"
+                   :pagination="pagination"
                    :row-key="record=>record.doTaskUserID"
-                   bordered>
+                   :row-selection="{ selectedRowKeys: formState.selectedRowKeys, onChange: onSelectChange}"
+                   bordered
+                   @change="handleTableChange">
             <template #bodyCell="{ column ,index}">
               <template v-if="column.key === 'siteUserName'">
                 <div>
-                  <label>{{userData[index][column.key]}}</label>
+                  <label>{{ userData[index][column.key] }}</label>
                   <!--<a-select ref="select" v-model:value="userData[index][column.key]"
                     :options="siteUserList"  :field-names="{ label: 'siteUserName', value: 'siteUserID' }"
                     :allow-clear="true" style="width: 200px" >
@@ -109,16 +109,19 @@
                 </div>
               </template>
               <template v-if="column.key === 'genderName'">
-                {{userData[index][column.key]}}
+                {{ userData[index][column.key] }}
               </template>
               <template v-if="column.key === 'mobile'">
-                {{userData[index][column.key]}}
+                {{ userData[index][column.key] }}
+              </template>
+              <template v-if="column.key === 'siteName'">
+                {{ userData[index][column.key] }}
               </template>
               <template v-if="column.key === 'taskStatusName'">
-                {{userData[index][column.key]}}
+                {{ userData[index][column.key] }}
               </template>
               <template v-if="column.key === 'operation'">
-                <a-button type="link" size="small" @click="deleteUser(index)">删除</a-button>
+                <a-button size="small" type="link" @click="deleteUser(index)">删除</a-button>
               </template>
             </template>
           </a-table>
@@ -127,29 +130,29 @@
 
       <a-divider orientation="left">其他信息</a-divider>
       <b-upload-file
+        :accept="'.pdf,.png,.jpg,.jpeg,.xls,.xlsx,.doc,.docx,.txt,.ppt,.pptx'"
         :file-ref-id="dataModel.doTaskID"
-        :readonly="false"
         :multiple="true"
+        :readonly="false"
         :set-file-list="setFileList"
-        :accept="'.pdf,.png,.jpg,.jpeg,.xls,.xlsx,.doc,.docx,.txt,.ppt,.pptx'"
       ></b-upload-file>
       <a-form-item class="buttom-btns">
         <a-button @click="onClose">取消</a-button>
-        <a-button type="primary" html-type="submit">提交</a-button>
+        <a-button html-type="submit" type="primary">提交</a-button>
       </a-form-item>
     </a-form>
-    <SiteUserModel ref="modalSiteUserRef"></SiteUserModel>
+    <SiteUserModel ref="modalSiteUserRef" :region-code="dataModel.regionCode"></SiteUserModel>
   </div>
 </template>
 
 <script lang="ts">
 import {computed, defineComponent, reactive, ref, toRefs} from 'vue';
-import type {SelectProps, TableColumnsType, TableProps} from 'ant-design-vue';
+import {message as $message, type SelectProps, type TableColumnsType, type TableProps} from 'ant-design-vue';
 import {useTabsViewStore} from '@/store/modules/tabsView';
 import BUploadFile from '@/components/file/uploadFile.vue';
 import SiteUserModel from "./siteUser.vue"
 import {get} from "@/api/common";
-import {getUserList, getWorkUserList, getDataById, save} from '@/api/taskAndLog/dotask'
+import {getDataById, getUserList, getWorkUserList, save} from '@/api/taskAndLog/dotask'
 import {getPaginationTotalTitle} from "@/utils/common";
 
 interface taskModel {
@@ -158,7 +161,7 @@ interface taskModel {
 
 export default defineComponent(
   {
-    components: {BUploadFile,SiteUserModel},
+    components: {BUploadFile, SiteUserModel},
     setup() {
       const isEdit = true;
       const modalSiteUserRef = ref();
@@ -199,10 +202,13 @@ export default defineComponent(
           title: '性别', dataIndex: 'genderName', key: 'genderName', align: "center", width: 120
         },
         {
-          title: '联系电话',dataIndex: 'mobile',key: 'mobile', align: "center", width: 120
+          title: '联系电话', dataIndex: 'mobile', key: 'mobile', align: "center", width: 120
+        },
+        {
+          title: '所属驿站', dataIndex: 'siteName', key: 'siteName', align: "center", width: 120
         },
         {
-          title: '执行情况',dataIndex: 'taskStatusName',key: 'taskStatusName',align: "center",width: 120
+          title: '执行情况', dataIndex: 'taskStatusName', key: 'taskStatusName', align: "center", width: 120
         },
         {title: '操作', key: 'operation', fixed: 'right', width: 120, align: "center"},
       ]
@@ -223,7 +229,7 @@ export default defineComponent(
         taskTypeList.value = data;
       });
 
-      const regionChange =async function(){
+      const regionChange = async function () {
         formData.dataModel.streetCode = null;
         changeCity();
       }
@@ -236,7 +242,7 @@ export default defineComponent(
       }
 
       const changeCity = () => {
-        if(formData.dataModel.regionCode){
+        if (formData.dataModel.regionCode) {
           get('system/area/getAreaList', {code: formData.dataModel.regionCode}).then(data => {
             streetList.value = data;
           })
@@ -249,7 +255,7 @@ export default defineComponent(
         getWorkUserList(id).then(data => {
           if (data)
             userData.value = data;
-            console.log("任务执行人员",userData.value);
+          console.log("任务执行人员", userData.value);
         });
       }
 
@@ -259,7 +265,10 @@ export default defineComponent(
           console.log("hhh",defaultSiteUser);
           (userData.value as any[]).push({siteUserID: defaultSiteUser.siteUserID,siteUserName:defaultSiteUser.siteUserName,genderName:defaultSiteUser.genderName,mobile:defaultSiteUser.mobile,taskStatusName:"待完成"});
         }*/
-        modalSiteUserRef.value.show(formData.dataModel.doTaskID,userData.value);
+        if (!formData.dataModel.regionCode) {
+          return $message.error("请先选择县区");
+        }
+        modalSiteUserRef.value.show(formData.dataModel.doTaskID, userData.value);
         // console.log("userData",userData.value);
       }
       const deleteUser = (record) => {

+ 14 - 14
vue/src/views/taskAndLog/dotask/index.vue

@@ -47,19 +47,19 @@
             </a-select>
           </a-form-item>
         </a-col>
-        <a-col :span="6">
-          <a-form-item :label-col="{span:6}" label="所属街道" name="streetCode">
-            <a-select
-              ref="select"
-              v-model:value="searchParams.streetCode"
-              :allow-clear="true"
-              :field-names="{ label: 'name', value: 'code' }"
-              :options="streetList"
-              @change="loadData"
-            >
-            </a-select>
-          </a-form-item>
-        </a-col>
+        <!--        <a-col :span="6">-->
+        <!--          <a-form-item :label-col="{span:6}" label="所属街道" name="streetCode">-->
+        <!--            <a-select-->
+        <!--              ref="select"-->
+        <!--              v-model:value="searchParams.streetCode"-->
+        <!--              :allow-clear="true"-->
+        <!--              :field-names="{ label: 'name', value: 'code' }"-->
+        <!--              :options="streetList"-->
+        <!--              @change="loadData"-->
+        <!--            >-->
+        <!--            </a-select>-->
+        <!--          </a-form-item>-->
+        <!--        </a-col>-->
         <a-col :span="6">
           <a-form-item :label-col="{span:6}" label="任务类型" name="workTypeId">
             <a-select
@@ -155,7 +155,7 @@ export default defineComponent({
         }
       },
       {title: '所属县区', dataIndex: 'regionName', key: 'regionName', align: "center"},
-      {title: '所属街道', dataIndex: 'streetName', key: 'streetName', align: "center"},
+      // {title: '所属街道', dataIndex: 'streetName', key: 'streetName', align: "center"},
       {title: '执行用户数', dataIndex: 'userCount', key: 'userCount', align: "center"},
       {
         title: '下达时间', dataIndex: 'createTime', key: 'createTime', align: "center", customRender: (item) => {

+ 51 - 6
vue/src/views/taskAndLog/dotask/siteUser.vue

@@ -21,13 +21,22 @@
         :model="searchParamsState"
       >
         <a-row :gutter="24">
-          <a-col :span="10">
+          <a-col :span="9">
             <a-form-item label="姓名" :label-col="{span:8}" name="name">
               <a-input v-model:value="searchParamsState.siteUserName" placeholder=""/>
             </a-form-item>
           </a-col>
-          <a-col :span="10">
-
+          <a-col :span="9">
+            <a-form-item label="所属驿站" :label-col="{span:8}" name="name">
+              <a-select
+                ref="select"
+                v-model:value="searchParamsState.siteID"
+                :allow-clear="true"
+                :field-names="{ label: 'text', value: 'value' }"
+                :options="siteList"
+              >
+              </a-select>
+            </a-form-item>
           </a-col>
           <a-col :span="4" style="text-align: left;">
             <a-button type="primary" html-type="submit" @click="loadSiteUserList">查询</a-button>
@@ -47,10 +56,11 @@
   </a-modal>
 </template>
 <script lang="ts">
-import {computed, defineComponent, reactive, ref} from "vue";
+import {computed, defineComponent, reactive, ref, toRefs} from "vue";
 import type {TableColumnsType, TableProps} from 'ant-design-vue';
 import type {FormInstance} from 'ant-design-vue';
 import {getSiteUserList} from '@/api/baseSettings/userInfo';
+import {getDataListByRegionCode} from "@/api/baseSettings/siteInfo";
 
 interface siteUserModel{
   siteUserID:string
@@ -61,9 +71,15 @@ export default defineComponent({
     loadData: {
       type: Function,
       default: null
+    },
+    regionCode: {
+      type: String,
+      default: null
     }
   },
-  setup() {
+  setup(props:any) {
+    const {regionCode} = toRefs(props)
+
     const visible = ref<boolean>(false);
     const allSiteUserList = ref([]);
     const curDoTaskID = ref("");
@@ -73,6 +89,9 @@ export default defineComponent({
       pageSize: 10,
       siteUserIDList: [],
       siteUserName: '',
+      siteID:"",
+      roleName: "驿站工作者",
+      regionCode: "",
     });
     const modalFormRef = ref<FormInstance>();
     const columns: TableColumnsType = [
@@ -83,12 +102,15 @@ export default defineComponent({
       {title: '姓名', dataIndex: 'siteUserName', key: 'siteUserName', width: 150},
       {title: '性别', dataIndex: 'genderName', key: 'genderName', width: 150},
       {title: '联系电话', dataIndex: 'mobile', key: 'mobile', width: 150},
+      {title: '所属驿站', dataIndex: 'siteName', key: 'siteName', width: 150},
     ];
     const formState = reactive({
       total: 0,
       selectedRowKeys: [],
       loading: false
     });
+    // 驿站数据
+    const siteList = ref([])
     const pagination = computed(() => ({
       total: formState.total,
       current: searchParamsState.pageIndex,
@@ -112,6 +134,7 @@ export default defineComponent({
     };
 
     const loadSiteUserList = async function () {
+      searchParamsState.regionCode = regionCode.value;
       const allSiteUsers: any = await getSiteUserList(searchParamsState);
       allSiteUserList.value = allSiteUsers.list;
       if(curSelectedUsers.value.length>0 && allSiteUserList.value.length>0){
@@ -126,15 +149,28 @@ export default defineComponent({
       // console.log("所有站点人员",allSiteUserList.value);
     }
 
+    // 查询驿站
+    function getSiteDataListByRegionCode(regionCode: string) {
+      getDataListByRegionCode(regionCode).then((result: any) => {
+        siteList.value = result;
+      })
+    }
+
     const show = async function (curTaskID:any,selectedUsers:any) {
       formState.loading = true;
       /*数据重置*/
       curSelectedUsers.value = [];
+      siteList.value = [];
       formState.selectedRowKeys = [];
       searchParamsState.pageIndex = 1;
+      searchParamsState.siteUserName = ''
+      searchParamsState.siteID = ''
 
       curDoTaskID.value = curTaskID;
       curSelectedUsers.value = selectedUsers;
+      if (regionCode.value){
+        getSiteDataListByRegionCode(regionCode.value);
+      }
       await loadSiteUserList();
       formState.loading = false;
       visible.value = true;
@@ -150,7 +186,15 @@ export default defineComponent({
       console.log("newSelectSiteUserIDList",newSelectSiteUserIDList);
       const allSelectSiteUser: any = await getSiteUserList({pageIndex:1,pageSize:9999,siteUserIDList:newSelectSiteUserIDList.join(',')});
       allSelectSiteUser.list.map(x=>{
-        (curSelectedUsers.value as any[]).push({doTaskID:curDoTaskID.value,siteUserID: x.siteUserID,siteUserName:x.siteUserName,genderName:x.genderName,mobile:x.mobile,taskStatusName:"待完成"});
+        (curSelectedUsers.value as any[]).push({
+          doTaskID:curDoTaskID.value,
+          siteUserID: x.siteUserID,
+          siteUserName:x.siteUserName,
+          genderName:x.genderName,
+          mobile:x.mobile,
+          siteName: x.siteName,
+          taskStatusName:"待完成"
+        });
       });
       visible.value = false;
     };
@@ -170,6 +214,7 @@ export default defineComponent({
       onSelectChange,
       formState,
       targetKeys,
+      siteList,
     };
   },
   created() {