ll
liukangdong
2024-10-18 0ed2002103cfe3d0892ee2468d98b7d3fad8e7b9
ll
已添加7个文件
已修改12个文件
1132 ■■■■■ 文件已修改
admin/src/components/business/OperaPlatformApproveTemplWindow.vue 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/CommonHeader.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/common/GlobalAlertWindow.vue 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/approvalConfiguration.vue 195 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/approvalReport.vue 197 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/login.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/operation/serviceCar/apprConfig.vue 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pda/api/index.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pda/manifest.json 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pda/pages.json 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pda/pages/index/SubDetail.vue 466 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pda/pages/index/center.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pda/pages/index/queueup.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pda/static/ic_passed@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
pda/static/ic_refused@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
pda/static/staff/ic_chaosong@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
pda/static/staff/ic_shenpiren@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
pda/static/staff/liucheng_fail@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
pda/static/staff/liucheng_success@2x.png 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaPlatformApproveTemplWindow.vue
@@ -163,7 +163,7 @@
            ">
              ä¼ä¸šç»„织架构
            </div>
            <div style="width: 100%; height: 100%; overflow-y: scroll">
            <div style="width: 100%; max-height: 560px; overflow-y: scroll">
              <Tree :list="companyTree" :defaultProps="{
                name: 'name',
                status: 'fsStatus',
@@ -338,11 +338,11 @@
          erpOrgId: '',
          hasFace: '',
          hkStatus: '',
          includeChild: false,
          includeChild: true,
          type: 2
        },
        page: 1,
        capacity: 30
        capacity: 300
      }).then(res => {
        this.memberList = res.records || []
        this.memberList.forEach(item => {
@@ -658,10 +658,12 @@
    display: flex;
    justify-content: center;
    align-items: center;
    ::v-deep .el-transfer-panel{
      flex: 1;
      height: 100%;
    }
    ::v-deep .el-transfer-panel__body {
      height: 500px;
    }
admin/src/components/common/CommonHeader.vue
@@ -40,6 +40,8 @@
    <GlobalAlertWindow
      title="修改密码"
      :visible.sync="visible.changePwd"
      :showClose="!userInfo.needChangePwd || userInfo.needChangePwd == '1'"
      :showCancel="userInfo.needChangePwd && userInfo.needChangePwd == '0'"
      @confirm="confirmChangePwd"
      @close="visible.changePwd = false"
    >
@@ -62,7 +64,7 @@
            v-model="changePwdData.form.newPwd"
            type="password"
            placeholder="请输入新密码"
            maxlength="30"
            maxlength="20"
            show-password
          ></el-input>
        </el-form-item>
@@ -71,7 +73,7 @@
            v-model="changePwdData.form.confirmPwd"
            type="password"
            placeholder="请再次输入新密码"
            maxlength="30"
            maxlength="20"
            show-password
          ></el-input>
        </el-form-item>
@@ -136,7 +138,10 @@
    // }
  },
  mounted() {
    console.log('userInfo',this.userInfo);
    // console.log('userInfo',this.userInfo);
    if(!this.userInfo.needChangePwd || this.userInfo.needChangePwd == '0'){
      this.visible.changePwd = true
    }
    
  },
  filters: {
admin/src/components/common/GlobalAlertWindow.vue
@@ -9,6 +9,7 @@
    :close-on-click-modal="false"
    :wrapper-closable="false"
    :append-to-body="true"
    :show-close="!showClose"
    @close="close"
  >
    <div slot="title" class="window__header">
@@ -20,7 +21,7 @@
    <div v-if="withFooter" class="window__footer">
      <slot name="footer">
        <el-button @click="confirm" :loading="confirmWorking" type="primary">确定</el-button>
        <el-button @click="close">取消</el-button>
        <el-button v-if="showCancel" @click="close">取消</el-button>
      </slot>
    </div>
  </el-dialog>
@@ -34,6 +35,14 @@
      type: String,
      default: '50%'
    },
    showClose: {
      type: Boolean,
      default: false
    },
    showCancel: {
      type: Boolean,
      default: true
    },
    // æ˜¯å¦åŒ…含底部操作
    withFooter: {
      type: Boolean,
admin/src/views/business/approvalConfiguration.vue
@@ -20,14 +20,10 @@
              <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
            </div>
            <div v-for="(item, index) in apprList" :key="index">
              <div
                class="item yellow"
                :class="{
              <div class="item yellow" :class="{
                  active: activeIndex == index,
                  blue: item.type == '1',
                }"
                @click="flowClick(index)"
              >
              }" @click="flowClick(index)">
                <div class="head">{{ item.remark }}</div>
                <div class="content">
                  <!-- å®¡æ‰¹ -->
@@ -40,25 +36,19 @@
                    </template>
                    <template v-if="item.memberType == '1'">
                      <div v-if="item.objIds && item.objIds.length === 1">
                        <span
                          >{{ item.objIds[0].name }}
                          {{ item.objIds[0].companyName }}</span
                        >
                        <span>{{ item.objIds[0].name }}
                          {{ item.objIds[0].companyName }}</span>
                        <span v-if="item.approveType == 0 && item.type == '0'">
                          æˆ–ç­¾</span
                        >
                          æˆ–ç­¾</span>
                        <span v-if="item.approveType == 1 && item.type == '0'">
                          ä¼šç­¾</span
                        >
                          ä¼šç­¾</span>
                      </div>
                      <div v-else-if="item.objIds && item.objIds.length > 1">
                        <span>{{ item.objIds[0].name }} ç­‰</span>
                        <span v-if="item.approveType == 0 && item.type == '0'">
                          æˆ–ç­¾</span
                        >
                          æˆ–ç­¾</span>
                        <span v-if="item.approveType == 1 && item.type == '0'">
                          ä¼šç­¾</span
                        >
                          ä¼šç­¾</span>
                      </div>
                      <div v-else>请选择</div>
                      <i class="el-icon-arrow-right"></i>
@@ -67,19 +57,14 @@
                  <!-- æŠ„送 -->
                  <template v-if="item.type == 1">
                    <div v-if="item.objIds && item.objIds.length === 1">
                        <span
                          >{{ item.objIds[0].name }}
                          {{ item.objIds[0].companyName }}</span
                        >
                      <span>{{ item.objIds[0].name }}
                        {{ item.objIds[0].companyName }}</span>
                      </div>
                      <div v-else-if="item.objIds && item.objIds.length > 1">
                        <span>{{ item.objIds[0].name }} ç­‰</span>
                      </div>
                      <div v-else>请选择</div>
                    <i
                      v-if="item.memberType == '1'"
                      class="el-icon-arrow-right"
                    ></i>
                    <i v-if="item.memberType == '1'" class="el-icon-arrow-right"></i>
                  </template>
                </div>
              </div>
@@ -88,11 +73,7 @@
                  <div class="line"></div>
                  <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
                </template>
                <i
                  v-if="apprList.length - 2 === index"
                  @click="handleAddAppr()"
                  class="el-icon-circle-plus add"
                ></i>
                <i v-if="apprList.length - 2 === index" @click="handleAddAppr()" class="el-icon-circle-plus add"></i>
              </div>
            </div>
          </div>
@@ -102,118 +83,74 @@
            <div class="config_data_item_label">选择该节点的审批人</div>
            <div class="df_ac mb10">
              <div>审批节点名称</div>
              <el-input
                class="w200 ml10"
                v-model="apprList[activeIndex].remark"
              ></el-input>
              <el-input class="w200 ml10" v-model="apprList[activeIndex].remark"></el-input>
            </div>
            <!-- æŠ„送人 -->
            <template v-if="apprList[activeIndex].type == '1'">
              <div class="config_data_item_reviewed_content">
                <div
                  v-for="mem, memIndex in apprList[activeIndex].objIds"
                  :key="mem.id"
                  class="config_data_item_reviewed_content_item"
                >
                <div v-for="mem, memIndex in apprList[activeIndex].objIds" :key="mem.id"
                  class="config_data_item_reviewed_content_item">
                  <span>{{ mem.name }}</span>
                  <i @click="memDel(memIndex)" class="el-icon-close"></i>
                </div>
                <span class="add" @click="selStaff">+添加</span>
              </div>
            </template>
            <el-radio-group
              v-if="apprList[activeIndex].type == '0'"
              v-model="apprList[activeIndex].memberType"
            >
            <el-radio-group v-if="apprList[activeIndex].type == '0'" v-model="apprList[activeIndex].memberType">
              <el-radio :label="0">被访人</el-radio>
              <el-radio :label="1">指定人员</el-radio>
              <el-radio :label="2">部门主管</el-radio>
            </el-radio-group>
            <div
              class="config_data_item_reviewed"
              v-if="apprList[activeIndex].memberType == 1"
            >
            <div class="config_data_item_reviewed" v-if="apprList[activeIndex].memberType == 1">
              <div class="config_data_item_reviewed_label">
                <span>指定审核人</span>
                <span>不超过20人</span>
              </div>
              <div class="config_data_item_reviewed_content">
                <div
                  v-for="mem,memIndex in apprList[activeIndex].objIds"
                  :key="mem.id"
                  class="config_data_item_reviewed_content_item"
                >
                <div v-for="mem, memIndex in apprList[activeIndex].objIds" :key="mem.id"
                  class="config_data_item_reviewed_content_item">
                  <span>{{ mem.name }}</span>
                  <i class="el-icon-close" @click="memDel(memIndex)"></i>
                </div>
                <span class="add" @click="selStaff">+添加</span>
              </div>
            </div>
            <div
              class="config_data_item_reviewed"
              v-if="apprList[activeIndex].memberType == 2"
            >
            <div class="config_data_item_reviewed" v-if="apprList[activeIndex].memberType == 2">
              <div class="config_data_item_reviewed_label">
                <span>部门主管</span>
              </div>
              <div class="config_data_item_reviewed_r">
                <span>被访人的</span>
                <el-select
                  v-model="apprList[activeIndex].objLevel"
                  placeholder="请选择"
                  style="margin: 0 20px 0 10px"
                >
                <el-select v-model="apprList[activeIndex].objLevel" placeholder="请选择" style="margin: 0 20px 0 10px">
                  <el-option label="直接主管" :value="0" />
                  <el-option label="二级主管" :value="1" />
                  <el-option label="三级主管" :value="2" />
                  <el-option label="四级主管" :value="4" />
                </el-select>
                <el-checkbox
                  v-model="apprList[activeIndex].noleaderOpt"
                  :true-label="1"
                  :false-label="0"
                  >找不到主管时,由上级主管代审核</el-checkbox
                >
                <el-checkbox v-model="apprList[activeIndex].noleaderOpt" :true-label="1"
                  :false-label="0">找不到主管时,由上级主管代审核</el-checkbox>
              </div>
            </div>
          </div>
          <div
            class="config_data_item"
            v-if="
          <div class="config_data_item" v-if="
              (apprList[activeIndex].memberType == 1 ||
                apprList[activeIndex].memberType == 2) &&
              apprList[activeIndex].type == '0'
            "
          >
          ">
            <div class="config_data_item_label">
              å®¡æ‰¹æ–¹å¼
              <span>审批人为多个时,采用的审批方式</span>
            </div>
            <el-radio-group
              v-model="apprList[activeIndex].approveType"
              style="display: flex; flex-direction: column"
            >
              <el-radio :label="0" style="margin-bottom: 20px"
                >或签(其中一名审批人同意或拒绝即可)</el-radio
              >
            <el-radio-group v-model="apprList[activeIndex].approveType" style="display: flex; flex-direction: column">
              <el-radio :label="0" style="margin-bottom: 20px">或签(其中一名审批人同意或拒绝即可)</el-radio>
              <el-radio :label="1">会签(所有审批人都同意才可通过)</el-radio>
            </el-radio-group>
          </div>
          <div class="config_data_submit">
            <el-button
              @click="onSubmit"
              :loading="subLoading"
              style="background: #435ebe"
              type="primary"
              >保存配置项</el-button
            >
            <el-button
              v-if="activeIndex !== 0 && activeIndex !== apprList.length - 1"
              type="danger"
              plain
              @click="handleDel"
              >删除节点</el-button
            >
            <el-button @click="onSubmit" :loading="subLoading" style="background: #435ebe"
              type="primary">保存配置项</el-button>
            <el-button v-if="activeIndex !== 0 && activeIndex !== apprList.length - 1" type="danger" plain
              @click="handleDel">删除节点</el-button>
          </div>
        </div>
      </div>
@@ -222,41 +159,27 @@
    <el-dialog title="选择员工" :visible.sync="isShowTransfer" width="1000px">
      <div class="staff_modal">
        <div class="left">
          <div
            style="
          <div style="
              width: 100%;
              height: 50px;
              background: rgba(242, 242, 242, 1);
              line-height: 50px;
              text-align: center;
              font-size: 14px;
            "
          >
            ">
            ä¼ä¸šç»„织架构
          </div>
          <div style="width: 100%; height: 100%; overflow-y: scroll">
            <Tree
              :list="companyTree"
              :defaultProps="{
          <div style="width: 100%; max-height: 560px; overflow-y: scroll">
            <Tree :list="companyTree" :defaultProps="{
                name: 'name',
                status: 'fsStatus',
                children: 'childList',
                id: 'id',
              }"
              @callback="callback"
            />
            }" @callback="callback" />
          </div>
        </div>
        <el-transfer
          filterable
          :title="['未选', '已选']"
          openAll
          :props="{ label: 'name', key: 'keyTemp' }"
          filter-placeholder="搜索员工"
          v-model="searchForm.objIds"
          :data="memberList"
          class="transfer"
        >
        <el-transfer filterable :title="['未选', '已选']" openAll :props="{ label: 'name', key: 'keyTemp' }"
          filter-placeholder="搜索员工" v-model="searchForm.objIds" :data="memberList" class="transfer">
        </el-transfer>
      </div>
      <span slot="footer" class="dialog-footer">
@@ -410,11 +333,11 @@
          erpOrgId: '',
          hasFace: '',
          hkStatus: '',
          includeChild: false,
          includeChild: true,
          type: 2
        },
        page: 1,
        capacity: 30
        capacity: 300
      }).then(res => {
        this.memberList = res.records || []
        this.memberList.forEach(item => {
@@ -484,6 +407,7 @@
  display: flex;
  align-items: center;
  justify-content: space-between;
  .config_list {
    width: 543px;
    height: 100%;
@@ -493,18 +417,21 @@
    box-sizing: border-box;
    border: 1px solid #eeeeee;
    background: #f7f7f7;
    .config_list_head {
      width: 100%;
      height: 40px;
      display: flex;
      align-items: center;
      justify-content: space-between;
      span {
        font-size: 18px;
        font-weight: 500;
        color: #222222;
      }
    }
    .config_content {
      width: 100%;
      height: calc(100% - 40px);
@@ -514,28 +441,35 @@
      display: flex;
      align-items: center;
      flex-direction: column;
      &::-webkit-scrollbar {
        width: 0;
      }
      .active {
        border: 2px solid #4456ac !important;
      }
      .yellow {
        background: #e89e42 !important;
      }
      .blue {
        background: #5094f3 !important;
      }
      .arrows {
        display: flex;
        flex-direction: column;
        align-items: center;
        position: relative;
        .line {
          width: 1px;
          height: 60px;
          background-color: #ccc;
        }
        .add {
          font-size: 40px;
          color: #2080f7;
@@ -544,10 +478,12 @@
          z-index: 999;
          top: 10px;
        }
        img {
          width: 12px;
        }
      }
      .item {
        width: 200px;
        cursor: pointer;
@@ -558,12 +494,14 @@
        position: relative;
        display: flex;
        flex-direction: column;
        .head {
          height: 32px;
          line-height: 32px;
          padding: 2px 12px;
          color: #fff;
        }
        .content {
          flex: 1;
          background-color: #fff;
@@ -572,32 +510,39 @@
          padding: 0 12px;
          justify-content: space-between;
        }
        &:last-child {
          margin: 0 !important;
        }
      }
    }
  }
  .config_data {
    flex: 1;
    height: 100%;
    margin-left: 20px;
    .config_data_submit {
      margin-top: 50px;
    }
    .config_data_item {
      width: 100%;
      display: flex;
      flex-direction: column;
      margin-bottom: 30px;
      &:last-child {
        margin: 0 !important;
      }
      .config_data_item_label {
        font-size: 16px;
        font-weight: 500;
        color: #222222;
        margin-bottom: 20px;
        span {
          font-size: 12px;
          font-weight: 400;
@@ -605,14 +550,17 @@
          margin-left: 10px;
        }
      }
      .config_data_item_reviewed {
        width: 100%;
        margin-top: 20px;
        .config_data_item_reviewed_r {
          margin-top: 10px;
          width: 100%;
          display: flex;
          align-items: center;
          span {
            flex-shrink: 0;
            font-size: 14px;
@@ -620,15 +568,18 @@
            color: #666666;
          }
        }
        .config_data_item_reviewed_label {
          display: flex;
          align-items: center;
          span {
            &:nth-child(1) {
              font-size: 14px;
              font-weight: 400;
              color: #222222;
            }
            &:nth-child(2) {
              font-size: 12px;
              font-weight: 400;
@@ -641,6 +592,7 @@
    }
  }
}
.config_data_item_reviewed_content {
  width: 400px;
  margin-top: 10px;
@@ -652,6 +604,7 @@
  display: flex;
  align-items: flex-start;
  flex-wrap: wrap;
  .add {
    font-size: 12px;
    font-weight: 400;
@@ -659,6 +612,7 @@
    cursor: pointer;
    margin-top: 3px;
  }
  .config_data_item_reviewed_content_item {
    padding: 3px 5px;
    background: #f4f7fc;
@@ -666,11 +620,13 @@
    box-sizing: border-box;
    margin-right: 10px;
    margin-bottom: 10px;
    span {
      font-size: 12px;
      font-weight: 400;
      color: #333333;
    }
    i {
      color: #949ba2;
      margin-left: 10px;
@@ -678,22 +634,27 @@
    }
  }
}
.staff_modal {
  display: flex;
  .left {
    width: 300px;
    margin-right: 20px;
  }
  .transfer {
    height: 600px;
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    ::v-deep .el-transfer-panel{
      flex: 1;
      height: 100%;
    }
    ::v-deep .el-transfer-panel__body {
      height: 500px;
    }
admin/src/views/business/approvalReport.vue
@@ -9,21 +9,17 @@
          <div class="config_content">
            <div class="item">
              <div class="head">发起人</div>
              <div class="content">访客</div>
              <div class="content">被访人</div>
            </div>
            <div class="arrows">
              <div class="line"></div>
              <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
            </div>
            <div v-for="(item, index) in apprList" :key="index">
              <div
                class="item yellow"
                :class="{
              <div class="item yellow" :class="{
                  active: activeIndex == index,
                  blue: item.type == '1',
                }"
                @click="flowClick(index)"
              >
              }" @click="flowClick(index)">
                <div class="head">{{ item.remark }}</div>
                <div class="content">
                  <!-- å®¡æ‰¹ -->
@@ -36,25 +32,19 @@
                    </template>
                    <template v-if="item.memberType == '1'">
                      <div v-if="item.objIds && item.objIds.length === 1">
                        <span
                          >{{ item.objIds[0].name }}
                          {{ item.objIds[0].companyName }}</span
                        >
                        <span>{{ item.objIds[0].name }}
                          {{ item.objIds[0].companyName }}</span>
                        <span v-if="item.approveType == 0 && item.type == '0'">
                          æˆ–ç­¾</span
                        >
                          æˆ–ç­¾</span>
                        <span v-if="item.approveType == 1 && item.type == '0'">
                          ä¼šç­¾</span
                        >
                          ä¼šç­¾</span>
                      </div>
                      <div v-else-if="item.objIds && item.objIds.length > 1">
                        <span>{{ item.objIds[0].name }} ç­‰</span>
                        <span v-if="item.approveType == 0 && item.type == '0'">
                          æˆ–ç­¾</span
                        >
                          æˆ–ç­¾</span>
                        <span v-if="item.approveType == 1 && item.type == '0'">
                          ä¼šç­¾</span
                        >
                          ä¼šç­¾</span>
                      </div>
                      <div v-else>请选择</div>
                      <i class="el-icon-arrow-right"></i>
@@ -63,19 +53,14 @@
                  <!-- æŠ„送 -->
                  <template v-if="item.type == 1">
                    <div v-if="item.objIds && item.objIds.length === 1">
                        <span
                          >{{ item.objIds[0].name }}
                          {{ item.objIds[0].companyName }}</span
                        >
                      <span>{{ item.objIds[0].name }}
                        {{ item.objIds[0].companyName }}</span>
                      </div>
                      <div v-else-if="item.objIds && item.objIds.length > 1">
                        <span>{{ item.objIds[0].name }} ç­‰</span>
                      </div>
                      <div v-else>请选择</div>
                    <i
                      v-if="item.memberType == '1'"
                      class="el-icon-arrow-right"
                    ></i>
                    <i v-if="item.memberType == '1'" class="el-icon-arrow-right"></i>
                  </template>
                </div>
              </div>
@@ -84,11 +69,7 @@
                  <div class="line"></div>
                  <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
                </template>
                <i
                  v-if="apprList.length - 2 === index"
                  @click="handleAddAppr()"
                  class="el-icon-circle-plus add"
                ></i>
                <i v-if="apprList.length - 2 === index" @click="handleAddAppr()" class="el-icon-circle-plus add"></i>
              </div>
            </div>
          </div>
@@ -98,118 +79,74 @@
            <div class="config_data_item_label">选择该节点的审批人</div>
            <div class="df_ac mb10">
              <div>审批节点名称</div>
              <el-input
                class="w200 ml10"
                v-model="apprList[activeIndex].remark"
              ></el-input>
              <el-input class="w200 ml10" v-model="apprList[activeIndex].remark"></el-input>
            </div>
            <!-- æŠ„送人 -->
            <template v-if="apprList[activeIndex].type == '1'">
              <div class="config_data_item_reviewed_content">
                <div
                  v-for="mem,memIndex in apprList[activeIndex].objIds"
                  :key="mem.id"
                  class="config_data_item_reviewed_content_item"
                >
                <div v-for="mem, memIndex in apprList[activeIndex].objIds" :key="mem.id"
                  class="config_data_item_reviewed_content_item">
                  <span>{{ mem.name }}</span>
                  <i @click="memDel(memIndex)" class="el-icon-close"></i>
                </div>
                <span class="add" @click="selStaff">+添加</span>
              </div>
            </template>
            <el-radio-group
              v-if="apprList[activeIndex].type == '0'"
              v-model="apprList[activeIndex].memberType"
            >
            <el-radio-group v-if="apprList[activeIndex].type == '0'" v-model="apprList[activeIndex].memberType">
              <el-radio :label="0">被访人</el-radio>
              <el-radio :label="1">指定人员</el-radio>
              <el-radio :label="2">部门主管</el-radio>
            </el-radio-group>
            <div
              class="config_data_item_reviewed"
              v-if="apprList[activeIndex].memberType == 1"
            >
            <div class="config_data_item_reviewed" v-if="apprList[activeIndex].memberType == 1">
              <div class="config_data_item_reviewed_label">
                <span>指定审核人</span>
                <span>不超过20人</span>
              </div>
              <div class="config_data_item_reviewed_content">
                <div
                  v-for="(mem, memIndex) in apprList[activeIndex].objIds"
                  :key="mem.id"
                  class="config_data_item_reviewed_content_item"
                >
                <div v-for="(mem, memIndex) in apprList[activeIndex].objIds" :key="mem.id"
                  class="config_data_item_reviewed_content_item">
                  <span>{{ mem.name }}</span>
                  <i class="el-icon-close" @click="memDel(memIndex)"></i>
                </div>
                <span class="add" @click="selStaff">+添加</span>
              </div>
            </div>
            <div
              class="config_data_item_reviewed"
              v-if="apprList[activeIndex].memberType == 2"
            >
            <div class="config_data_item_reviewed" v-if="apprList[activeIndex].memberType == 2">
              <div class="config_data_item_reviewed_label">
                <span>部门主管</span>
              </div>
              <div class="config_data_item_reviewed_r">
                <span>被访人的</span>
                <el-select
                  v-model="apprList[activeIndex].objLevel"
                  placeholder="请选择"
                  style="margin: 0 20px 0 10px"
                >
                <el-select v-model="apprList[activeIndex].objLevel" placeholder="请选择" style="margin: 0 20px 0 10px">
                  <el-option label="直接主管" :value="0" />
                  <el-option label="二级主管" :value="1" />
                  <el-option label="三级主管" :value="2" />
                  <el-option label="四级主管" :value="4" />
                </el-select>
                <el-checkbox
                  v-model="apprList[activeIndex].noleaderOpt"
                  :true-label="1"
                  :false-label="0"
                  >找不到主管时,由上级主管代审核</el-checkbox
                >
                <el-checkbox v-model="apprList[activeIndex].noleaderOpt" :true-label="1"
                  :false-label="0">找不到主管时,由上级主管代审核</el-checkbox>
              </div>
            </div>
          </div>
          <div
            class="config_data_item"
            v-if="
          <div class="config_data_item" v-if="
              (apprList[activeIndex].memberType == 1 ||
                apprList[activeIndex].memberType == 2) &&
              apprList[activeIndex].type == '0'
            "
          >
          ">
            <div class="config_data_item_label">
              å®¡æ‰¹æ–¹å¼
              <span>审批人为多个时,采用的审批方式</span>
            </div>
            <el-radio-group
              v-model="apprList[activeIndex].approveType"
              style="display: flex; flex-direction: column"
            >
              <el-radio :label="0" style="margin-bottom: 20px"
                >或签(其中一名审批人同意或拒绝即可)</el-radio
              >
            <el-radio-group v-model="apprList[activeIndex].approveType" style="display: flex; flex-direction: column">
              <el-radio :label="0" style="margin-bottom: 20px">或签(其中一名审批人同意或拒绝即可)</el-radio>
              <el-radio :label="1">会签(所有审批人都同意才可通过)</el-radio>
            </el-radio-group>
          </div>
          <div class="config_data_submit">
            <el-button
              @click="onSubmit"
              :loading="subLoading"
              style="background: #435ebe"
              type="primary"
              >保存配置项</el-button
            >
            <el-button
              v-if="activeIndex !== 0 && activeIndex !== apprList.length - 1"
              type="danger"
              plain
              @click="handleDel"
              >删除节点</el-button
            >
            <el-button @click="onSubmit" :loading="subLoading" style="background: #435ebe"
              type="primary">保存配置项</el-button>
            <el-button v-if="activeIndex !== 0 && activeIndex !== apprList.length - 1" type="danger" plain
              @click="handleDel">删除节点</el-button>
          </div>
        </div>
      </div>
@@ -218,41 +155,27 @@
    <el-dialog title="选择员工" :visible.sync="isShowTransfer" width="1000px">
      <div class="staff_modal">
        <div class="left">
          <div
            style="
          <div style="
              width: 100%;
              height: 50px;
              background: rgba(242, 242, 242, 1);
              line-height: 50px;
              text-align: center;
              font-size: 14px;
            "
          >
            ">
            ä¼ä¸šç»„织架构
          </div>
          <div style="width: 100%; height: 100%; overflow-y: scroll">
            <Tree
              :list="companyTree"
              :defaultProps="{
          <div style="width: 100%; max-height: 560px; overflow-y: scroll">
            <Tree :list="companyTree" :defaultProps="{
                name: 'name',
                status: 'fsStatus',
                children: 'childList',
                id: 'id',
              }"
              @callback="callback"
            />
            }" @callback="callback" />
          </div>
        </div>
        <el-transfer
          filterable
          :title="['未选', '已选']"
          openAll
          :props="{ label: 'name', key: 'keyTemp' }"
          filter-placeholder="搜索员工"
          v-model="searchForm.objIds"
          :data="memberList"
          class="transfer"
        >
        <el-transfer filterable :title="['未选', '已选']" openAll :props="{ label: 'name', key: 'keyTemp' }"
          filter-placeholder="搜索员工" v-model="searchForm.objIds" :data="memberList" class="transfer">
        </el-transfer>
      </div>
      <span slot="footer" class="dialog-footer">
@@ -396,11 +319,11 @@
          erpOrgId: '',
          hasFace: '',
          hkStatus: '',
          includeChild: false,
          includeChild: true,
          type: 2
        },
        page: 1,
        capacity: 30
        capacity: 300
      }).then(res => {
        this.memberList = res.records || []
        this.memberList.forEach(item => {
@@ -470,6 +393,7 @@
  display: flex;
  align-items: center;
  justify-content: space-between;
  .config_list {
    width: 543px;
    height: 100%;
@@ -479,18 +403,21 @@
    box-sizing: border-box;
    border: 1px solid #eeeeee;
    background: #f7f7f7;
    .config_list_head {
      width: 100%;
      height: 40px;
      display: flex;
      align-items: center;
      justify-content: space-between;
      span {
        font-size: 18px;
        font-weight: 500;
        color: #222222;
      }
    }
    .config_content {
      width: 100%;
      height: calc(100% - 40px);
@@ -500,28 +427,35 @@
      display: flex;
      align-items: center;
      flex-direction: column;
      &::-webkit-scrollbar {
        width: 0;
      }
      .active {
        border: 2px solid #4456ac !important;
      }
      .yellow {
        background: #e89e42 !important;
      }
      .blue {
        background: #5094f3 !important;
      }
      .arrows {
        display: flex;
        flex-direction: column;
        align-items: center;
        position: relative;
        .line {
          width: 1px;
          height: 60px;
          background-color: #ccc;
        }
        .add {
          font-size: 40px;
          color: #2080f7;
@@ -530,10 +464,12 @@
          z-index: 999;
          top: 10px;
        }
        img {
          width: 12px;
        }
      }
      .item {
        width: 200px;
        cursor: pointer;
@@ -544,12 +480,14 @@
        position: relative;
        display: flex;
        flex-direction: column;
        .head {
          height: 32px;
          line-height: 32px;
          padding: 2px 12px;
          color: #fff;
        }
        .content {
          flex: 1;
          background-color: #fff;
@@ -558,32 +496,39 @@
          padding: 0 12px;
          justify-content: space-between;
        }
        &:last-child {
          margin: 0 !important;
        }
      }
    }
  }
  .config_data {
    flex: 1;
    height: 100%;
    margin-left: 20px;
    .config_data_submit {
      margin-top: 50px;
    }
    .config_data_item {
      width: 100%;
      display: flex;
      flex-direction: column;
      margin-bottom: 30px;
      &:last-child {
        margin: 0 !important;
      }
      .config_data_item_label {
        font-size: 16px;
        font-weight: 500;
        color: #222222;
        margin-bottom: 20px;
        span {
          font-size: 12px;
          font-weight: 400;
@@ -591,14 +536,17 @@
          margin-left: 10px;
        }
      }
      .config_data_item_reviewed {
        width: 100%;
        margin-top: 20px;
        .config_data_item_reviewed_r {
          margin-top: 10px;
          width: 100%;
          display: flex;
          align-items: center;
          span {
            flex-shrink: 0;
            font-size: 14px;
@@ -606,15 +554,18 @@
            color: #666666;
          }
        }
        .config_data_item_reviewed_label {
          display: flex;
          align-items: center;
          span {
            &:nth-child(1) {
              font-size: 14px;
              font-weight: 400;
              color: #222222;
            }
            &:nth-child(2) {
              font-size: 12px;
              font-weight: 400;
@@ -627,6 +578,7 @@
    }
  }
}
.config_data_item_reviewed_content {
  width: 400px;
  margin-top: 10px;
@@ -638,6 +590,7 @@
  display: flex;
  align-items: flex-start;
  flex-wrap: wrap;
  .add {
    font-size: 12px;
    font-weight: 400;
@@ -645,6 +598,7 @@
    cursor: pointer;
    margin-top: 3px;
  }
  .config_data_item_reviewed_content_item {
    padding: 3px 5px;
    background: #f4f7fc;
@@ -652,11 +606,13 @@
    box-sizing: border-box;
    margin-right: 10px;
    margin-bottom: 10px;
    span {
      font-size: 12px;
      font-weight: 400;
      color: #333333;
    }
    i {
      color: #949ba2;
      margin-left: 10px;
@@ -664,22 +620,27 @@
    }
  }
}
.staff_modal {
  display: flex;
  .left {
    width: 300px;
    margin-right: 20px;
  }
  .transfer {
    height: 600px;
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    ::v-deep .el-transfer-panel{
      flex: 1;
      height: 100%;
    }
    ::v-deep .el-transfer-panel__body {
      height: 500px;
    }
admin/src/views/login.vue
@@ -82,7 +82,7 @@
      isRemPsd: false,
      username: '',
      password: '',
      activeTab: '1',
      activeTab: '0',
      // éªŒè¯ç 
      captcha: {
        loading: false,
admin/src/views/operation/serviceCar/apprConfig.vue
@@ -20,14 +20,10 @@
              <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
            </div>
            <div v-for="(item, index) in apprList" :key="index">
              <div
                class="item yellow"
                :class="{
              <div class="item yellow" :class="{
                  active: activeIndex == index,
                  blue: item.type == '1',
                }"
                @click="flowClick(index)"
              >
              }" @click="flowClick(index)">
                <div class="head">{{ item.remark }}</div>
                <div class="content">
                  <!-- å®¡æ‰¹ -->
@@ -37,25 +33,19 @@
                    </template>
                    <template v-if="item.memberType == '1'">
                      <div v-if="item.objIds && item.objIds.length === 1">
                        <span
                          >{{ item.objIds[0].name }}
                          {{ item.objIds[0].companyName }}</span
                        >
                        <span>{{ item.objIds[0].name }}
                          {{ item.objIds[0].companyName }}</span>
                        <span v-if="item.approveType == 0 && item.type == '0'">
                          æˆ–ç­¾</span
                        >
                          æˆ–ç­¾</span>
                        <span v-if="item.approveType == 1 && item.type == '0'">
                          ä¼šç­¾</span
                        >
                          ä¼šç­¾</span>
                      </div>
                      <div v-else-if="item.objIds && item.objIds.length > 1">
                        <span>{{ item.objIds[0].name }} ç­‰</span>
                        <span v-if="item.approveType == 0 && item.type == '0'">
                          æˆ–ç­¾</span
                        >
                          æˆ–ç­¾</span>
                        <span v-if="item.approveType == 1 && item.type == '0'">
                          ä¼šç­¾</span
                        >
                          ä¼šç­¾</span>
                      </div>
                      <div v-else>请选择</div>
                      <i class="el-icon-arrow-right"></i>
@@ -64,19 +54,14 @@
                  <!-- æŠ„送 -->
                  <template v-if="item.type == 1">
                    <div v-if="item.objIds && item.objIds.length === 1">
                        <span
                          >{{ item.objIds[0].name }}
                          {{ item.objIds[0].companyName }}</span
                        >
                      <span>{{ item.objIds[0].name }}
                        {{ item.objIds[0].companyName }}</span>
                      </div>
                      <div v-else-if="item.objIds && item.objIds.length > 1">
                        <span>{{ item.objIds[0].name }} ç­‰</span>
                      </div>
                      <div v-else>请选择</div>
                    <i
                      v-if="item.memberType == '1'"
                      class="el-icon-arrow-right"
                    ></i>
                    <i v-if="item.memberType == '1'" class="el-icon-arrow-right"></i>
                  </template>
                </div>
              </div>
@@ -85,11 +70,7 @@
                  <div class="line"></div>
                  <img src="@/assets/images/peizhi_ar@2x.png" alt="" />
                </template>
                <i
                  v-if="apprList.length - 2 === index"
                  @click="handleAddAppr()"
                  class="el-icon-circle-plus add"
                ></i>
                <i v-if="apprList.length - 2 === index" @click="handleAddAppr()" class="el-icon-circle-plus add"></i>
              </div>
            </div>
          </div>
@@ -99,127 +80,79 @@
            <div class="config_data_item_label">选择该节点的审批人</div>
            <div class="df_ac mb10">
              <div>审批节点名称</div>
              <el-input
                class="w200 ml10"
                v-model="apprList[activeIndex].remark"
              ></el-input>
              <el-input class="w200 ml10" v-model="apprList[activeIndex].remark"></el-input>
            </div>
            <!-- æŠ„送人 -->
            <template v-if="apprList[activeIndex].type == '1'">
              <div class="config_data_item_reviewed_content">
                <div
                  v-for="mem, memIndex in apprList[activeIndex].objIds"
                  :key="mem.id"
                  class="config_data_item_reviewed_content_item"
                >
                <div v-for="mem, memIndex in apprList[activeIndex].objIds" :key="mem.id"
                  class="config_data_item_reviewed_content_item">
                  <span>{{ mem.name }}</span>
                  <i @click="memDel(memIndex)" class="el-icon-close"></i>
                </div>
                <span class="add" @click="selStaff">+添加</span>
              </div>
            </template>
            <el-radio-group
              v-if="apprList[activeIndex].type == '0'"
              v-model="apprList[activeIndex].memberType"
            >
            <el-radio-group v-if="apprList[activeIndex].type == '0'" v-model="apprList[activeIndex].memberType">
              <!-- <el-radio :label="0">被访人</el-radio> -->
              <el-radio :label="1">指定人员</el-radio>
              <el-radio :label="2">部门主管</el-radio>
            </el-radio-group>
            <div
              class="config_data_item_reviewed"
              v-if="apprList[activeIndex].memberType == 1"
            >
            <div class="config_data_item_reviewed" v-if="apprList[activeIndex].memberType == 1">
              <div class="config_data_item_reviewed_label">
                <span>指定审核人</span>
                <span>不超过20人</span>
              </div>
              <div class="config_data_item_reviewed_content">
                <div
                  v-for="(mem, memIndex) in apprList[activeIndex].objIds"
                  :key="mem.id"
                  class="config_data_item_reviewed_content_item"
                >
                <div v-for="(mem, memIndex) in apprList[activeIndex].objIds" :key="mem.id"
                  class="config_data_item_reviewed_content_item">
                  <span>{{ mem.name }}</span>
                  <i class="el-icon-close" @click="memDel(memIndex)"></i>
                </div>
                <span class="add" @click="selStaff">+添加</span>
              </div>
            </div>
            <div
              class="config_data_item_reviewed"
              v-if="apprList[activeIndex].memberType == 2"
            >
            <div class="config_data_item_reviewed" v-if="apprList[activeIndex].memberType == 2">
              <div class="config_data_item_reviewed_label">
                <span>部门主管</span>
              </div>
              <div class="config_data_item_reviewed_r">
                <span>申请人的</span>
                <el-select
                  v-model="apprList[activeIndex].objLevel"
                  placeholder="请选择"
                  style="margin: 0 20px 0 10px"
                >
                <el-select v-model="apprList[activeIndex].objLevel" placeholder="请选择" style="margin: 0 20px 0 10px">
                  <el-option label="直接主管" :value="0" />
                  <el-option label="二级主管" :value="1" />
                  <el-option label="三级主管" :value="2" />
                  <el-option label="四级主管" :value="4" />
                </el-select>
                <el-checkbox
                  v-model="apprList[activeIndex].noleaderOpt"
                  :true-label="1"
                  :false-label="0"
                  >找不到主管时,由上级主管代审核</el-checkbox
                >
                <el-checkbox v-model="apprList[activeIndex].noleaderOpt" :true-label="1"
                  :false-label="0">找不到主管时,由上级主管代审核</el-checkbox>
              </div>
            </div>
          </div>
          <div
            class="config_data_item"
            v-if="
          <div class="config_data_item" v-if="
              (apprList[activeIndex].memberType == 1 ||
                apprList[activeIndex].memberType == 2) &&
              apprList[activeIndex].type == '0'
            "
          >
          ">
            <div class="config_data_item_label">
              å®¡æ‰¹æ–¹å¼
              <span>审批人为多个时,采用的审批方式</span>
            </div>
            <el-radio-group
              v-model="apprList[activeIndex].approveType"
              style="display: flex; flex-direction: column"
            >
              <el-radio :label="0" style="margin-bottom: 20px"
                >或签(其中一名审批人同意或拒绝即可)</el-radio
              >
            <el-radio-group v-model="apprList[activeIndex].approveType" style="display: flex; flex-direction: column">
              <el-radio :label="0" style="margin-bottom: 20px">或签(其中一名审批人同意或拒绝即可)</el-radio>
              <el-radio :label="1">会签(所有审批人都同意才可通过)</el-radio>
            </el-radio-group>
          </div>
          <div v-if="apprList[activeIndex].type == '0'" class="df_ac mb10">
            <div>允许修改"驾驶员"</div>
            <el-switch
              class="ml10"
              :active-value="1"
              :inactive-value="0"
              v-model="apprList[activeIndex].driverParam"
            ></el-switch>
            <el-switch class="ml10" :active-value="1" :inactive-value="0"
              v-model="apprList[activeIndex].driverParam"></el-switch>
          </div>
          <div class="config_data_submit">
            <el-button
              @click="onSubmit"
              :loading="subLoading"
              style="background: #435ebe"
              type="primary"
              >保存配置项</el-button
            >
            <el-button
              v-if="activeIndex !== 0 && activeIndex !== apprList.length - 1"
              type="danger"
              plain
              @click="handleDel"
              >删除节点</el-button
            >
            <el-button @click="onSubmit" :loading="subLoading" style="background: #435ebe"
              type="primary">保存配置项</el-button>
            <el-button v-if="activeIndex !== 0 && activeIndex !== apprList.length - 1" type="danger" plain
              @click="handleDel">删除节点</el-button>
          </div>
        </div>
      </div>
@@ -228,41 +161,27 @@
    <el-dialog title="选择员工" :visible.sync="isShowTransfer" width="1000px">
      <div class="staff_modal">
        <div class="left">
          <div
            style="
          <div style="
              width: 100%;
              height: 50px;
              background: rgba(242, 242, 242, 1);
              line-height: 50px;
              text-align: center;
              font-size: 14px;
            "
          >
            ">
            ä¼ä¸šç»„织架构
          </div>
          <div style="width: 100%; height: 100%; overflow-y: scroll">
            <Tree
              :list="companyTree"
              :defaultProps="{
          <div style="width: 100%; max-height: 560px; overflow-y: scroll">
            <Tree :list="companyTree" :defaultProps="{
                name: 'name',
                status: 'fsStatus',
                children: 'childList',
                id: 'id',
              }"
              @callback="callback"
            />
            }" @callback="callback" />
          </div>
        </div>
        <el-transfer
          filterable
          :title="['未选', '已选']"
          openAll
          :props="{ label: 'name', key: 'keyTemp' }"
          filter-placeholder="搜索员工"
          v-model="searchForm.objIds"
          :data="memberList"
          class="transfer"
        >
        <el-transfer filterable :title="['未选', '已选']" openAll :props="{ label: 'name', key: 'keyTemp' }"
          filter-placeholder="搜索员工" v-model="searchForm.objIds" :data="memberList" class="transfer">
        </el-transfer>
      </div>
      <span slot="footer" class="dialog-footer">
@@ -415,11 +334,11 @@
          erpOrgId: '',
          hasFace: '',
          hkStatus: '',
          includeChild: false,
          includeChild: true,
          type: 2
        },
        page: 1,
        capacity: 30
        capacity: 300
      }).then(res => {
        this.memberList = res.records || []
        this.memberList.forEach(item => {
@@ -489,6 +408,7 @@
  display: flex;
  align-items: center;
  justify-content: space-between;
  .config_list {
    width: 543px;
    height: 100%;
@@ -498,18 +418,21 @@
    box-sizing: border-box;
    border: 1px solid #eeeeee;
    background: #f7f7f7;
    .config_list_head {
      width: 100%;
      height: 40px;
      display: flex;
      align-items: center;
      justify-content: space-between;
      span {
        font-size: 18px;
        font-weight: 500;
        color: #222222;
      }
    }
    .config_content {
      width: 100%;
      height: calc(100% - 40px);
@@ -519,28 +442,35 @@
      display: flex;
      align-items: center;
      flex-direction: column;
      &::-webkit-scrollbar {
        width: 0;
      }
      .active {
        border: 2px solid #4456ac !important;
      }
      .yellow {
        background: #e89e42 !important;
      }
      .blue {
        background: #5094f3 !important;
      }
      .arrows {
        display: flex;
        flex-direction: column;
        align-items: center;
        position: relative;
        .line {
          width: 1px;
          height: 60px;
          background-color: #ccc;
        }
        .add {
          font-size: 40px;
          color: #2080f7;
@@ -549,10 +479,12 @@
          z-index: 999;
          top: 10px;
        }
        img {
          width: 12px;
        }
      }
      .item {
        width: 200px;
        cursor: pointer;
@@ -563,12 +495,14 @@
        position: relative;
        display: flex;
        flex-direction: column;
        .head {
          height: 32px;
          line-height: 32px;
          padding: 2px 12px;
          color: #fff;
        }
        .content {
          flex: 1;
          background-color: #fff;
@@ -577,32 +511,39 @@
          padding: 0 12px;
          justify-content: space-between;
        }
        &:last-child {
          margin: 0 !important;
        }
      }
    }
  }
  .config_data {
    flex: 1;
    height: 100%;
    margin-left: 20px;
    .config_data_submit {
      margin-top: 50px;
    }
    .config_data_item {
      width: 100%;
      display: flex;
      flex-direction: column;
      margin-bottom: 30px;
      &:last-child {
        margin: 0 !important;
      }
      .config_data_item_label {
        font-size: 16px;
        font-weight: 500;
        color: #222222;
        margin-bottom: 20px;
        span {
          font-size: 12px;
          font-weight: 400;
@@ -610,14 +551,17 @@
          margin-left: 10px;
        }
      }
      .config_data_item_reviewed {
        width: 100%;
        margin-top: 20px;
        .config_data_item_reviewed_r {
          margin-top: 10px;
          width: 100%;
          display: flex;
          align-items: center;
          span {
            flex-shrink: 0;
            font-size: 14px;
@@ -625,15 +569,18 @@
            color: #666666;
          }
        }
        .config_data_item_reviewed_label {
          display: flex;
          align-items: center;
          span {
            &:nth-child(1) {
              font-size: 14px;
              font-weight: 400;
              color: #222222;
            }
            &:nth-child(2) {
              font-size: 12px;
              font-weight: 400;
@@ -646,6 +593,7 @@
    }
  }
}
.config_data_item_reviewed_content {
  width: 400px;
  margin-top: 10px;
@@ -657,6 +605,7 @@
  display: flex;
  align-items: flex-start;
  flex-wrap: wrap;
  .add {
    font-size: 12px;
    font-weight: 400;
@@ -664,6 +613,7 @@
    cursor: pointer;
    margin-top: 3px;
  }
  .config_data_item_reviewed_content_item {
    padding: 3px 5px;
    background: #f4f7fc;
@@ -671,11 +621,13 @@
    box-sizing: border-box;
    margin-right: 10px;
    margin-bottom: 10px;
    span {
      font-size: 12px;
      font-weight: 400;
      color: #333333;
    }
    i {
      color: #949ba2;
      margin-left: 10px;
@@ -683,22 +635,27 @@
    }
  }
}
.staff_modal {
  display: flex;
  .left {
    width: 300px;
    margin-right: 20px;
  }
  .transfer {
    height: 600px;
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    ::v-deep .el-transfer-panel{
      flex: 1;
      height: 100%;
    }
    ::v-deep .el-transfer-panel__body {
      height: 500px;
    }
pda/api/index.js
@@ -158,3 +158,11 @@
    data
  })
}
// é¢„约     è¯¦æƒ…
export const driverApplyDetail = (data) => {
  return http({
    url: 'visitsAdmin/cloudService/web/driverPlatform/getDetail',
    method: 'get',
    data
  })
}
pda/manifest.json
@@ -1,5 +1,5 @@
{
    "name": "pda",
    "name" : "月台调度",
    "appid": "__UNI__8789FB4",
    "description": "",
    "versionName": "1.0.0",
@@ -19,6 +19,7 @@
                "/gateway_interface": {
                    // è¿™ä¸ªå­—段名需与你配置的basePrefixUrl一致,系统识别到带有/dev-api请求的地址时,会在前面拼接上代理服务器地址
                    "target" : "http://10.50.250.253:8088/gateway_interface", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    // "target": "http://192.168.0.100:10010", // ä»£ç†æœåŠ¡å™¨åŸŸåæˆ–IP地址
                    "changeOrigin": true, // å…è®¸è·¨åŸŸ 
                    "pathRewrite": {
@@ -65,9 +66,13 @@
                ]
            },
            /* ios打包配置 */
            "ios": {},
            "ios" : {
                "dSYMs" : false
            },
            /* SDK配置 */
            "sdkConfigs": {}
            "sdkConfigs" : {
                "ad" : {}
            }
        }
    },
    /* å¿«åº”用特有相关 */
pda/pages.json
@@ -44,6 +44,13 @@
                "navigationBarTitleText": "配置显示月台",
                "enablePullDownRefresh": false
            }
        },
        {
            "path": "pages/index/SubDetail",
            "style": {
                "navigationBarTitleText": "预约详情",
                "enablePullDownRefresh": false
            }
        }
    ],
    "globalStyle": {
pda/pages/index/SubDetail.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,466 @@
<template>
  <view class="main_app">
    <view class="status_wrap">
      <view class="name">{{info.driverName}}的入园预约</view>
      <view class="gray">{{info.carCodeFront}}</view>
<!--             <view class="desc" :class="{
                gray: info.businessStatus == '2' || info.businessStatus == '3' || info.businessStatus == '4',
              }">{{ infoStatus }}</view> -->
      <view class="status" v-if="info.status != 2 && info.status != 3">{{ statusMap[info.status] }}</view>
            <image v-if="info.status == 2" class="icon" src="@/static/ic_passed@2x.png" mode=""></image>
            <image v-if="info.status == 3" class="icon" src="@/static/ic_refused@2x.png" mode=""></image>
    </view>
    <!--  -->
    <view class="emyty"></view>
    <view class="module_list">
      <view class="item">
        <view class="label">入园原因</view>
        <view class="value">{{info.inReason}}</view>
      </view>
      <view class="item">
        <view class="label">合同编号</view>
        <view class="value">{{info.contractNum}}</view>
      </view>
            <view class="item">
              <view class="label">到场时间</view>
              <view v-if="info.arriveDate" class="value">{{info.arriveDate.slice(0,16)}}</view>
            </view>
            <view class="item">
              <view class="label">准运证照片</view>
              <view class="value">
                    <image
                        v-if="info.transportImg"
                      class="avatar_wrap"
                      :src="info.prefixUrl + info.transportImg"
                    ></image>
                </view>
            </view>
            <view class="item">
              <view class="label">入库类型</view>
              <view class="value">{{info.inType == 0 ? '整托盘' : '件烟'}}</view>
            </view>
            <view class="item">
              <view class="label">总运数量</view>
              <view class="value">{{info.totalNum}}万支</view>
            </view>
      <view class="emyty"></view>
      <view class="item">
        <view class="label">司机姓名</view>
        <view class="value">{{info.driverName}}
        </view>
      </view>
      <view class="item">
        <view class="label">手机号</view>
        <view class="value">{{info.driverPhone}}</view>
      </view>
            <view class="item">
              <view class="label">车牌照</view>
              <view class="value">前 {{info.carCodeFront}},后 {{info.carCodeBack}}</view>
            </view>
    </view>
    <!-- æµç¨‹ -->
    <view class="flow_wrap">
      <view class="flow_title">流程</view>
      <view class="list" v-if="
          info.approveDateVO != null && info.approveDateVO.approveList != null
        ">
          <view class="item" v-for="(item, index) in info.approveDateVO.approveList" :key="item.id">
              <view class="separate"></view>
              <view class="avatar">
                  <image v-if="item.type == 1" class="img" src="@/static/staff/ic_chaosong@2x.png" />
                  <image v-else-if="item.approveType == 1 || item.approveType == 0" class="img"
                      src="@/static/staff/ic_shenpiren@2x.png" />
                        <image v-else-if="item.faceImg" :src="item.faceImg" class="img"></image>
                  <span v-else class="img_name">{{item.memberName && item.memberName.slice(0,1)}}</span>
                  <image v-if="item.status == 2" class="status" src="@/static/staff/liucheng_success@2x.png"
                      mode="widthFix" />
                  <image v-if="item.status == 3" class="status" src="@/static/staff/liucheng_fail@2x.png" mode="widthFix" />
              </view>
              <view class="content">
                  <view class="head">
                      <view class="event">{{ item.title }}</view>
                      <view class="time">{{ item.checkDate }}</view>
                  </view>
                  <view class="name_wrap">
                      <text>{{ item.memberName
                }}<text :class="{ status: item.statusInfo == '处理中' || item.status == '1'  }"
                              v-if="item.statusInfo">({{ item.statusInfo }})</text></text>
                  </view>
                  <view v-if="item.checkInfo" class="remark">{{
              item.checkInfo
            }}</view>
                  <!-- æŠ„送人 -->
                  <view v-if="item.approveType == 0 || item.type == 1 || item.approveType == 1" class="children">
                      <view class="child" v-for="child in item.approveList" :key="child.id">
                          <image v-if="child.faceImg" class="child_img" :src="child.faceImg" />
                          <view v-else class="child_name">{{ child.memberName && child.memberName.slice(0,1) }}</view>
                          <view>{{ child.memberName }}</view>
                      </view>
                  </view>
              </view>
          </view>
      </view>
    </view>
    <view class="emyty"></view>
  </view>
</template>
<script>
    import { driverApplyDetail } from '@/api'
export default {
  data() {
    return {
      showApprModal: false,
            checkInfo: '',
            infoStatus: '',
            flag: '1',
      info: {},
            type: 0,
            statusMap: {
                0: '待审批',
                1: '审批中',
                2: '已通过',
                3: '已拒绝',
                4: '已取消',
            },
    }
  },
    onLoad(option) {
        // this.type = option.objType
        // this.infoStatus = option.info
        this.getDetail(option.id)
    },
  methods: {
        getDetail(id) {
            driverApplyDetail({id}).then(res => {
                this.info = res.data
                if(this.info.approveDateVO && this.info.approveDateVO.approveList.length > 0 ){
                    this.info.approveDateVO.approveList.forEach(item => {
                        if(item.approveList && item.approveList.length == 1 && item.type !== 1){
                            item.title = item.approveList[0].title
                            item.faceImg = item.approveList[0].faceImg
                            item.memberName = item.approveList[0].memberName
                            item.statusInfo = item.approveList[0].statusInfo
                            item.approveList = []
                        }
                    })
                }
                console.log('this.info.approveDateVO', this.info.approveDateVO.approveList);
            })
        },
  },
}
</script>
<style>
page {
  background-color: #f7f7f7;
}
</style>
<style lang="scss">
.main_app {
  background-color: #fff;
  padding-bottom: 0;
  .flow_wrap {
      padding: 30rpx 0;
      .flow_title {
          font-weight: 600;
          font-size: 32rpx;
          color: #222222;
          margin-bottom: 24rpx;
      }
      .list {
          .item {
              display: flex;
              margin-bottom: 48rpx;
              position: relative;
              .separate {
                  position: absolute;
                  width: 4rpx;
                  height: 100%;
                  background-color: #eeeeee;
                  left: 40rpx;
                  transform: translate(-50%, 0);
                  top: 80rpx;
              }
              .avatar {
                  width: 80rpx;
                  height: 80rpx;
                  position: relative;
                  margin-right: 20rpx;
                  display: flex;
                  align-items: center;
                  justify-content: center;
                  .img {
                      width: 80rpx;
                      height: 80rpx;
                      border-radius: 50%;
                  }
                  .img_name {
                      font-size: 32rpx;
                      color: #FFFFFF;
                  }
                  .status {
                      width: 28rpx;
                      height: 28rpx;
                      border-radius: 50%;
                      position: absolute;
                      right: 0;
                      bottom: 0;
                  }
              }
              .content {
                  flex: 1;
                  .head {
                      display: flex;
                      justify-content: space-between;
                      margin-bottom: 4rpx;
                      .event {
                          font-size: 30rpx;
                      }
                      .time {
                          font-size: 26rpx;
                          color: #999999;
                      }
                  }
                  .name_wrap {
                      font-size: 26rpx;
                      color: #777777;
                      .status {
                          color: $uni-color-primary;
                      }
                  }
                  .children {
                      display: flex;
                      flex-wrap: wrap;
                      margin-top: 12rpx;
                      .child {
                          display: flex;
                          flex-direction: column;
                          justify-content: center;
                          align-items: center;
                          margin-right: 12rpx;
                          font-size: 26rpx;
                          color: #777777;
                          .child_img {
                              width: 48rpx;
                              height: 48rpx;
                              border-radius: 50%;
                              margin-bottom: 2rpx;
                          }
                          .child_name {
                              margin-bottom: 2rpx;
                              width: 48rpx;
                              height: 48rpx;
                              text-align: center;
                              justify-content: center;
                              padding-top: 4rpx;
                              font-size: 28rpx;
                              border-radius: 50%;
                              color: #FFFFFF;
                              background-color: $uni-color-primary;
                          }
                      }
                  }
                  .remark {
                      margin-top: 12rpx;
                      background-color: #f7f7f7;
                      padding: 14rpx 20rpx;
                      border-radius: 8rpx;
                      font-size: 26rpx;
                      color: #666666;
                      line-height: 36rpx;
                  }
              }
              .carbon {
                  display: flex;
                  width: 590rpx;
                  overflow-x: auto;
                  margin-top: 12rpx;
                  .carbon_item {
                      text-align: center;
                      flex-shrink: 0;
                      width: 100rpx;
                      image {
                          width: 60rpx;
                          height: 60rpx;
                          margin: 0 auto;
                      }
                      view {
                          font-size: 26rpx;
                          color: #777777;
                      }
                  }
              }
              &:nth-last-child(1) {
                  .separate {
                      height: 0;
                  }
              }
          }
      }
  }
  .module_list {
    .item {
      padding: 30rpx 0;
      border-bottom: 1rpx solid #e5e5e5;
      .label {
        font-size: 26rpx;
        color: #666666;
        margin-bottom: 20rpx;
      }
      .value {
        font-size: 30rpx;
        display: flex;
        align-items: center;
        .avatar_wrap {
          margin-right: 20rpx;
          width: 120rpx;
          height: 120rpx;
          border-radius: 8rpx;
          border: 2rpx solid #e5e5e5;
        }
        .info {
          flex: 1;
          display: flex;
          flex-direction: column;
          justify-content: space-between;
          font-size: 26rpx;
          color: #666666;
          .name {
            font-size: 30rpx;
            color: #333333;
          }
        }
      }
    }
  }
  .status_wrap {
    position: relative;
    padding: 30rpx 0;
    .name {
      font-weight: 600;
      font-size: 32rpx;
      margin-bottom: 20rpx;
      color: #222222;
    }
    .desc {
      font-size: 26rpx;
      color: #ed4545;
            margin-bottom: 12rpx;
    }
        .gray {
            color: #999999;
            margin-bottom: 12rpx;
        }
    .status {
      position: absolute;
      right: -30rpx;
      top: 0;
      height: 60rpx;
      line-height: 60rpx;
      padding: 0 32rpx;
      border-radius: 0rpx 0rpx 0rpx 30rpx;
      background-color: #e9edff;
      color: $uni-color-primary;
    }
        .icon{
            width: 120rpx;
            height: 120rpx;
            border-radius: 50%;
            position: absolute;
            right: 0rpx;
            top: 20rpx;
        }
  }
  .main_footer {
    padding-bottom: 64rpx;
    display: flex;
    justify-content: space-between;
    .btn {
      width: 336rpx;
      height: 88rpx;
      line-height: 88rpx;
      background: #ffffff;
      border-radius: 44rpx;
      border: 1rpx solid #999999;
      font-size: 32rpx;
      text-align: center;
      margin: 16rpx 0;
    }
    .agree {
      background: $uni-color-primary;
      color: #fff;
      border: 1rpx solid $uni-color-primary;
    }
  }
  .appr_modal {
    padding: 36rpx 30rpx 0;
    .title {
      font-weight: 600;
      font-size: 32rpx;
      color: #222222;
      margin-bottom: 40rpx;
      text-align: center;
    }
    textarea {
      box-sizing: border-box;
      width: 690rpx;
      background-color: #f7f7f7;
      font-size: 28rpx;
      color: #333333;
      padding: 24rpx;
      border-radius: 8rpx;
      margin-bottom: 30rpx;
    }
  }
  .emyty {
    width: 750rpx;
    height: 20rpx;
    background-color: #f7f7f7;
    margin: 0 -30rpx;
  }
}
</style>
pda/pages/index/center.vue
@@ -40,6 +40,7 @@
                <view class="line" v-else>
                    <text class="label">合同单号</text>
                    <text class="value">{{ item.contractNum }}</text>
                    <text class="primaryColor" @click="subDetail(item)">预约详情</text>
                </view>
                <view class="line">
                    <text class="label">驾驶员</text>
@@ -104,6 +105,7 @@
                            <view class="line" v-else>
                                <text class="label">合同单号</text>
                                <text class="value">{{ item.contractNum }}</text>
                                <text class="primaryColor" @click="subDetail(item)">预约详情</text>
                            </view>
                            <view class="line">
                                <text class="label">驾驶员</text>
@@ -326,6 +328,11 @@
                    this.showDetail = true
                })
            },
            subDetail(item) {
                uni.navigateTo({
                  url: `/pages/index/SubDetail?id=${item.bookId}`
                })
            },
            handleFinish(item) {
                finishWork({
                    jobId: item.id
pda/pages/index/queueup.vue
@@ -46,6 +46,7 @@
        <view class="line" v-else>
          <text class="label">合同单号</text>
          <text class="value">{{ item.contractNum }}</text>
                    <text class="primaryColor" @click="subDetail(item)">预约详情</text>
        </view>
        <view class="line">
          <text class="label">驾驶员</text>
@@ -163,6 +164,11 @@
          this.showDetail = true
      })
    },
        subDetail(item) {
            uni.navigateTo({
              url: `/pages/index/SubDetail?id=${item.bookId}`
            })
        },
    getPlatformGroup() {
      getPlatformGroupList({
        queryData: 1,
pda/static/ic_passed@2x.png
pda/static/ic_refused@2x.png
pda/static/staff/ic_chaosong@2x.png
pda/static/staff/ic_shenpiren@2x.png
pda/static/staff/liucheng_fail@2x.png
pda/static/staff/liucheng_success@2x.png