Newer
Older
smart-metering-front / src / views / measure / source / components / sourceApprovalDetail.vue
Stephanie on 6 Jan 2023 18 KB fix<views>: 修改溯源供方审批
<script lang="ts" setup name="SourceApprovalDetail">
// 溯源供方审批详情
import { reactive, ref } from 'vue'
import type { Ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import type { FormInstance, UploadInstance, UploadProps, UploadUserFile } from 'element-plus'
import type { IButton, ISupplier, traceSupplierPerson } from '../list_interface'
import ManageBox from './manageBox.vue'
import showPhoto from '@/views/system/tool/showPhoto.vue'
import { exportFile } from '@/utils/exportUtils'
import { UploadFile } from '@/api/measure/file'
import { getSoucreLisListExport, getSoucreLisUpdate, getSoucreListDetail, getSoucreListlevelType } from '@/api/measure/source'
import { submitApproval } from '@/api/approval'
const loading = ref(false) // 表单加载状态
const infoId = ref('') // id
const buttonArray = ref<IButton[]>([])
const pageType = ref('detail') // 页面类型: detail
const buttonLoading = ref(false) // 按钮加载状态

const buttonsSet: { [key: string]: IButton[] } = {
  2: [{ name: '查看', type: 'primary' },
    { name: '同意', type: 'primary' },
    { name: '驳回', type: 'primary' },
    { name: '拒绝', type: 'danger' },
  ],
  3: [
    { name: '取消', type: 'primary' },
  ],
}
// 从路由中获取页面类型参数
const $route = useRoute()
if ($route.params && $route.params.type) {
  const status = $route.params.type
  if ($route.params.id) {
    infoId.value = $route.params.id as string
  }
}
// 溯源供方详情表单
const dataForm = ref<ISupplier>({
  id: '',
  businessContent: '',
  supplierName: '',
  supplierNo: '',
  bankAccount: '',
  bankAccountNumber: '',
  bankName: '',
  briefName: '',
  businessScope: '',
  companyAddress: '',
  companyArea: '',
  companyCity: '',
  companyCountry: '',
  companyProvince: '',
  createTime: '',
  director: '',
  fax: '',
  invoiceAddress: '',
  invoiceArea: '',
  invoiceCity: '',
  invoiceCountry: '',
  invoiceProvince: '',
  mailbox: '',
  minioFileName: '',
  mobile: '',
  phone: '',
  postalCode: '',
  remark: '',
  taxNumber: '',
  website: '',
  traceSupplierPersonList: [],
})
// 获取表单详情
const getInfo = () => {
  getSoucreListDetail({ id: infoId.value }).then((res) => {
    dataForm.value = res.data
    if (dataForm.value.approvalStatus) {
      // 待审批
      if (dataForm.value.approvalStatus == '2') {
        buttonArray.value = buttonsSet[dataForm.value.approvalStatus]
      }
      else if (dataForm.value.approvalStatus == '3') { // 审批中
        // todo:判断当前用户是否为发起人
        buttonArray.value = buttonsSet[dataForm.value.approvalStatus]
      }
    }
  })
}
getInfo()

const ruleFormRef = ref<FormInstance>()
const traceSupplierPersonList: Ref<traceSupplierPerson[]> = ref([])
const columns = [
  { text: '人员编号', value: 'personNo' },
  { text: '姓名', value: 'name' },
  { text: '工作部门', value: 'department' },
  { text: '职务', value: 'job' },
  { text: '联系方式', value: 'phone' },
]

const provinceList = ref([])
const fileList = ref<UploadUserFile[]>([])
const cityList = ref([])
const areaList = ref([])
const invoiceProvince = ref([])
const invoiceCityList = ref([])
const areaInvoiceList = ref([])

// 初始化router
const $router = useRouter()
// 关闭新增页面的回调
const close = () => {
  $router.back()
}

const approvalActivities = [
  {
    name: '张三',
    deptName: '审计局',
    content: '同意',
    timestamp: '2018-04-15 08:00:00',
  },
  {
    name: '张三',
    content: 'Approved',
    timestamp: '2018-04-13',
  },
  {
    name: '张三',
    content: 'Success',
    timestamp: '2018-04-11',
  },
]

// 获取公司地址省级
const getCompanyAddress = (type: string) => {
  getSoucreListlevelType(type).then((res) => {
    provinceList.value = res.data
  })
}
// 公司地址省级的值发生改变
const changeProvince = (e: any) => {
  cityList.value = []
  areaList.value = []
  dataForm.value.companyCity = ''
  dataForm.value.companyArea = ''

  getSoucreListlevelType(e).then((res) => {
    cityList.value = res.data
  })
}
// 公司地址市级发生改变
const cityChange = (e: any) => {
  areaList.value = []
  dataForm.value.companyArea = ''
  getSoucreListlevelType(e).then((res) => {
    areaList.value = res.data
  })
}
// 获取到开票地址省级
const getinvoiceProvinceList = (type: string) => {
  getSoucreListlevelType(type).then((res) => {
    invoiceProvince.value = res.data
  })
}
// 开票地址省级发生改变
const changeInvoice = (e: any) => {
  dataForm.value.invoiceCity = ''
  dataForm.value.invoiceArea = ''
  getSoucreListlevelType(e).then((res) => {
    invoiceCityList.value = res.data
  })
}
// 开票地址市级发生改变
const invoiceCityChange = (e: string) => {
  dataForm.value.invoiceArea = ''
  getSoucreListlevelType(e).then((res) => {
    areaInvoiceList.value = res.data
  })
}
// 审批结束回调
const approvalSuccess = () => {
  getInfo()
}
// 取消
const handleCancel = () => {
  const params = {
    taskId: dataForm.value.taskId!,
    comments: '',
  }
  ElMessageBox.confirm(
    '确认取消该审批吗?',
    '提示',
    {
      confirmButtonText: '确认',
      cancelButtonText: '取消',
      type: 'warning',
    },
  )
    .then(() => {
      submitApproval('revoke', params).then((res) => {
        ElMessage({
          type: 'success',
          message: '取消成功',
        })
      })
    })
}
const approvalDialog = ref()
// 点击数据后的操作按钮
const clickBtn = (row: ISupplier, buttonType: string) => {
  switch (buttonType) {
    case '同意':
      approvalDialog.value.initDialog('agree', row.taskId)
      break
    case '驳回':
      approvalDialog.value.initDialog('reject', row.taskId)
      break
    case '拒绝':
      approvalDialog.value.initDialog('refuse', row.taskId)
      break
    case '取消':
      handleCancel()
      break
  }
}
</script>

<template>
  <app-container>
    <detail-page title="溯源供方审批">
      <template #btns>
        <el-button v-for="(item, index) in buttonArray" :key="index" type="primary" @click="getAddList(ruleFormRef, item)">
          {{ item }}
        </el-button>
        <el-button type="info" @click="close">
          关闭
        </el-button>
      </template>
      <el-form
        ref="ruleFormRef"
        :model="dataForm"
        class="demo-form-inline"
        label-width="auto"
        label-position="right"
        :rules="rules"
      >
        <el-row :gutter="24" class="marg">
          <el-col :span="6">
            <el-form-item label="溯源供方编号:" prop="supplierNo">
              <el-input
                v-model="dataForm.supplierNo"
                :placeholder="
                  pageType === 'detail' ? '无' : '请输入溯源供方编号'
                "
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="税号:" prop="taxNumber">
              <el-input
                v-model="dataForm.taxNumber"
                :placeholder="pageType === 'detail' ? '无' : '请输入税号'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="邮编:">
              <el-input
                v-model="dataForm.postalCode"
                :placeholder="pageType === 'detail' ? '无' : '请输入邮编'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="手机:">
              <el-input
                v-model="dataForm.mobile"
                :placeholder="pageType === 'detail' ? '无' : '请输入手机'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24" class="marg">
          <el-col :span="6">
            <el-form-item label="公司名称:" prop="supplierName">
              <el-input
                v-model="dataForm.supplierName"
                :placeholder="pageType === 'detail' ? '无' : '请输入公司名称'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="银行账户名:">
              <el-input
                v-model="dataForm.bankAccount"
                :placeholder="pageType === 'detail' ? '无' : '请输入银行账户名'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="负责人:">
              <el-input
                v-model="dataForm.director"
                :placeholder="pageType === 'detail' ? '无' : '请输入负责人'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="邮箱:">
              <el-input
                v-model="dataForm.mailbox"
                :placeholder="pageType === 'detail' ? '无' : '请输入邮箱'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24" class="marg">
          <el-col :span="6">
            <el-form-item label="公司简称:">
              <el-input
                v-model="dataForm.briefName"
                :placeholder="pageType === 'detail' ? '无' : '请输入公司简称'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="银行名称:">
              <el-input
                v-model="dataForm.bankName"
                :placeholder="pageType === 'detail' ? '无' : '请输入银行名称'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="电话:">
              <el-input
                v-model="dataForm.phone"
                :placeholder="pageType === 'detail' ? '无' : '请输入电话'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="网址:">
              <el-input
                v-model="dataForm.website"
                :placeholder="pageType === 'detail' ? '无' : '请输入网址'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24" class="marg">
          <el-col :span="6">
            <el-form-item label="业务内容:" prop="businessContent">
              <el-input
                v-model="dataForm.businessContent"
                :placeholder="pageType === 'detail' ? '无' : '请输入业务内容'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="银行账号:">
              <el-input
                v-model="dataForm.bankAccountNumber"
                :placeholder="pageType === 'detail' ? '无' : '请输入银行账号'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
          <el-col :span="6">
            <el-form-item label="传真:">
              <el-input
                v-model="dataForm.fax"
                :placeholder="pageType === 'detail' ? '无' : '请输入传真'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24" class="marg">
          <el-form-item label="公司地址:">
            <el-col :span="4">
              <el-input v-model="dataForm.companyCountry" :disabled="pageType === 'detail'" />
            </el-col>
            <el-col :span="4">
              <el-input v-model="dataForm.companyProvince" :disabled="pageType === 'detail'" />
            </el-col>
            <el-col :span="4">
              <el-input v-model="dataForm.companyCity" :disabled="pageType === 'detail'" />
            </el-col>
            <el-col :span="4">
              <el-input v-model="dataForm.companyArea" :disabled="pageType === 'detail'" />
            </el-col>
            <el-col :span="8">
              <el-input
                v-model="dataForm.companyAddress"
                placeholder="公司详细地址"
                :disabled="pageType === 'detail'"
              />
            </el-col>
          </el-form-item>
        </el-row>
        <el-row :gutter="24" class="marg">
          <el-form-item label="开票地址:">
            <el-col :span="4">
              <el-select
                v-model="dataForm.invoiceCountry"
                placeholder="国别"
                :disabled="pageType === 'detail'"
              >
                <el-option label="中国" value="中国" />
              </el-select>
            </el-col>
            <el-col :span="4">
              <el-select
                v-model="dataForm.invoiceProvince"
                placeholder="省"
                :disabled="pageType === 'detail'"
                @click="getinvoiceProvinceList('0')"
                @change="changeInvoice"
              >
                <el-option
                  v-for="province in invoiceProvince"
                  :key="province.id"
                  :label="province.areaName"
                  :value="province.id"
                />
              </el-select>
            </el-col>
            <el-col :span="4">
              <el-select
                v-model="dataForm.invoiceCity"
                placeholder="市"
                :disabled="pageType === 'detail'"
                @change="invoiceCityChange"
              >
                <el-option
                  v-for="city in invoiceCityList"
                  :key="city.id"
                  :label="city.areaName"
                  :value="city.id"
                />
              </el-select>
            </el-col>
            <el-col :span="4">
              <el-select
                v-model="dataForm.invoiceArea"
                placeholder="区/县"
                :disabled="pageType === 'detail'"
              >
                <el-option
                  v-for="area in areaInvoiceList"
                  :key="area.id"
                  :label="area.areaName"
                  :value="area.id"
                />
              </el-select>
            </el-col>
            <el-col :span="8">
              <el-input
                v-model="dataForm.invoiceAddress"
                placeholder="开票详细地址"
                :disabled="pageType === 'detail'"
              />
            </el-col>
          </el-form-item>
        </el-row>
        <el-row :gutter="24" class="marg">
          <el-col :span="14">
            <el-form-item label="公司业务范围:">
              <el-input
                v-model="dataForm.businessScope"
                :placeholder="
                  pageType === 'detail' ? '无' : '请输入公司业务范围'
                "
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24" class="marg">
          <el-col :span="14">
            <el-form-item label="备注:">
              <el-input
                v-model="dataForm.remark"
                :placeholder="pageType === 'detail' ? '无' : '请输入备注'"
                :disabled="pageType === 'detail'"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="24" class="marg">
          <el-col :span="14">
            <el-form-item label="附件:">
              <show-photo v-if="dataForm.minioFileName" :minio-file-name="dataForm.minioFileName" />
              <span>无</span>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </detail-page>
    <detail-block title="审批流程">
      <!-- 审批流程 -->
      <div>
        <el-timeline>
          <el-timeline-item
            v-for="(activity, index) in approvalActivities"
            :key="index"
            :timestamp="activity.timestamp"
          >
            <div><span>审批人:</span>{{ activity.name }} <span style="margin-left: 10px;">审批意见:</span>{{ activity.content }}</div>
          </el-timeline-item>
        </el-timeline>
      </div>
    </detail-block>
    <detail-block title="人员信息">
      <el-table
        :data="traceSupplierPersonList"
        border
        style="width: 100%;"
      >
        <el-table-column align="center" label="序号" width="80" type="index" />
        <el-table-column
          v-for="item in columns"
          :key="item.value"
          :prop="item.value"
          :label="item.text"
          align="center"
        >
          <template #default="scope">
            <span>{{ scope.row[item.value] }}</span>
          </template>
        </el-table-column>
      </el-table>
    </detail-block>
    <approval-dialog ref="approvalDialog" @on-success="approvalSuccess" />
  </app-container>
</template>

<style lang="scss" scoped>
.top-info {
  width: 100%;
  height: 50px;
  padding-right: 10px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  border-radius: 10px;
  background-color: #fff;

  .title {
    width: 75%;
    text-align: center;
  }
}

.info-content {
  margin-top: 10px;
  padding: 30px;
  border-radius: 10px;
  background-color: #fff;

  .content-top {
    display: flex;
    justify-content: space-around;
  }

  .info-dizhi {
    margin-right: 155px;
  }
}

.el-select {
  width: 9vw;
  margin-right: 15px;
}

.info-dizhi .el-input {
  width: 20vw;
}

.input-width .el-input {
  width: 30vw;
}

.info-appendix span {
  margin-right: 25px;
}

.table-top {
  margin-top: 10px;
  padding: 5px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  border-radius: 10px;
  background-color: #fff;

  .table-top-title {
    width: 60vw;
    text-align: center;
  }
}

.dialog-button {
  margin-left: 50%;
  transform: translateX(-50%);
}
</style>