沈丘营商办后台前端项目
wjt
2024-06-19 d5458eb28c1da630004b7679601bfd5474cd924d
企业管理添加
3个文件已添加
6个文件已修改
314 ■■■■■ 已修改文件
package.json 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/system/company/company.ts 53 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infomanger/banner/index.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infomanger/companymanger/components/createQrcode.vue 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infomanger/companymanger/components/exportRecord.vue 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infomanger/companymanger/components/judge.vue 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infomanger/companymanger/index.vue 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infomanger/policy/components/addNews.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infomanger/policy/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
package.json
@@ -30,6 +30,7 @@
    "tsparticles": "^2.9.3",
    "vue": "3.2.45",
    "vue-cropper": "1.0.3",
    "vue-qr": "^4.0.9",
    "vue-router": "4.1.4",
    "vue-tsc": "^1.4.4"
  },
src/api/system/company/company.ts
@@ -35,13 +35,13 @@
  })
}
// 删除企业信息
export function delCompany(companyId) {
  return request({
    url: '/system/company/' + companyId,
    method: 'delete'
  })
}
// // 删除企业信息
// export function delCompany(companyId) {
//   return request({
//     url: '/system/company/' + companyId,
//     method: 'delete'
//   })
// }
// 导出企业模板下载
@@ -117,4 +117,43 @@
    method: 'post',
    data: data
  })
}
// 校验导入信息 /system/company/checkImport
export function checkImport(data) {
  return request({
    url: `/system/company/checkImport`,
    method: 'post',
    data: data
  })
}
// 保存导入信息 /system/company/saveImport
export function saveImport(data) {
  return request({
    url: `/system/company/saveImport`,
    method: 'post',
    data: data
  })
}
// 删除企业信息 listCompany
export function delCompany(data) {
  return request({
    url: `/system/company/${data.delId}`,
    method: 'DELETE',
  })
}
// 审核 /tool/check/checkOrder
export function checkOrder(data) {
  return request({
    url: `/tool/check/checkOrder`,
    method: 'post',
    data: data
  })
}
// 执法单列表 /enforce/order/list
export function listOrder(data) {
  return request({
    url: `/enforce/order/list`,
    method: 'post',
    data: data
  })
}
src/views/infomanger/banner/index.vue
New file
@@ -0,0 +1,9 @@
<template>
  <div class="app-container">
    <el-row>
      <el-col :span="24">
        <el-button></el-button>
      </el-col>
    </el-row>
  </div>
</template>
src/views/infomanger/companymanger/components/createQrcode.vue
New file
@@ -0,0 +1,52 @@
<template>
  <el-dialog title="二维码"  v-model="dialogVisible" width="300px" @close="closeDialog">
    <div class="text-center">
      <vueQr ref="query" :text="info.companyCode"></vueQr>
      <div>{{ info.companyName }}</div>
      <div style="margin-top: 10px;">
        <el-link @click="downImage" type="primary">下载企业码</el-link>
      </div>
    </div>
  </el-dialog>
</template>
<script lang="ts" setup>
import vueQr from 'vue-qr/src/packages/vue-qr.vue'
let dialogVisible = ref(false)
const info = ref({})
const query = ref()
function openDialog(row) {
  // console.log(row)
  info.value = row
  dialogVisible.value = true
}
function closeDialog() {
  dialogVisible.value = false
}
function downImage() {
  // console.log(query.value.imgUrl)
  let aLink = document.createElement('a')
      let blob = base64ToBlob(query.value.imgUrl)
      let evt = document.createEvent("HTMLEvents")
      evt.initEvent("click", true, true) // initEvent 不加后两个参数在FF下会报错  事件类型,是否冒泡,是否阻止浏览器的默认行为
      aLink.download = "二维码.png"
      aLink.href = URL.createObjectURL(blob);
      // aLink.dispatchEvent(evt);
      aLink.click()
}
function   base64ToBlob(code) {
      let parts = code.split(';base64,')
      let contentType = parts[0].split(':')[1]
      let raw = window.atob(parts[1])
      let rawLength = raw.length
      let uInt8Array = new Uint8Array(rawLength)
      for (let i = 0; i < rawLength; ++i) {
        uInt8Array[i] = raw.charCodeAt(i)
      }
      return new Blob([uInt8Array], {type: contentType})
    }
defineExpose({
  openDialog,
  closeDialog
})
</script>
src/views/infomanger/companymanger/components/exportRecord.vue
@@ -4,32 +4,82 @@
    <el-table :data="recordValue" border>
      <el-table-column label="企业名(企业全称)" prop="companyName">
        <template #default="scope">
          <el-input v-model="scope.row.companyName"></el-input>
          <div class="flex-box-per">
            <el-input v-model="scope.row.companyName" @blur="checkImport(scope.row, scope.$index)"></el-input>
            <el-tooltip  v-if="scope.row.errorList.length && scope.row.errorList.find(item => item.index == 0)" :content="scope.row.errorList.find(item => item.index == 0).msg">
              <div class="ml5">
                <el-icon size="large" color="red" class="ml5"><CircleCloseFilled /></el-icon>
              </div>
            </el-tooltip>
          </div>
        </template>
      </el-table-column>
      <el-table-column label="统一社会信用代码" prop="companyCode">
        <template #default="scope">
          <el-input v-model="scope.row.companyCode"></el-input>
          <div class="flex-box-per">
            <el-input v-model="scope.row.companyCode"  @blur="checkImport(scope.row, scope.$index)"></el-input>
            <el-tooltip  v-if="scope.row.errorList.length && scope.row.errorList.find(item => item.index == 1)" :content="scope.row.errorList.find(item => item.index == 1).msg">
              <div class="ml5">
                <el-icon size="large" color="red" class="ml5"><CircleCloseFilled /></el-icon>
              </div>
            </el-tooltip>
          </div>
        </template>
      </el-table-column>
      <el-table-column label="企业联系人" prop="companyUser">
        <template #default="scope">
          <el-input v-model="scope.row.companyUser"></el-input>
          <div class="flex-box-per">
            <el-input v-model="scope.row.companyUser"  @blur="checkImport(scope.row, scope.$index)"></el-input>
            <el-tooltip  v-if="scope.row.errorList.length && scope.row.errorList.find(item => item.index == 2)" :content="scope.row.errorList.find(item => item.index == 2).msg">
              <div class="ml5" v-if="scope.row.errorList.length &&scope.row.errorList.find(item => item.index == 2)">
              <el-icon size="large" color="red" class="ml5"><CircleCloseFilled /></el-icon>
            </div>
            </el-tooltip>
          </div>
        </template>
      </el-table-column>
      <el-table-column label="联系人电话" prop="companyPhone">
        <template #default="scope">
          <el-input v-model="scope.row.companyPhone"></el-input>
          <div class="flex-box-per">
            <el-input type="numer" :maxlength="11" v-model="scope.row.companyPhone"  @blur="checkImport(scope.row, scope.$index, 'companyPhone')"></el-input>
            <el-tooltip v-if="scope.row.errorList.length && scope.row.errorList.find(item => item.index == 3)" :content="scope.row.errorList.find(item => item.index == 3).msg">
              <div class="ml5">
              <el-icon size="large" color="red" class="ml5"><CircleCloseFilled /></el-icon>
            </div>
            </el-tooltip>
          </div>
        </template>
      </el-table-column>
      <el-table-column label="企业地址" prop="companyAddress">
        <template #default="scope">
          <el-input v-model="scope.row.companyAddress"></el-input>
          <div class="flex-box-per">
            <el-input v-model="scope.row.companyAddress"  @blur="checkImport(scope.row, scope.$index)"></el-input>
            <el-tooltip v-if="scope.row.errorList.length && scope.row.errorList.find(item => item.index == 4)" :content="scope.row.errorList.find(item => item.index == 4).msg">
              <div class="ml5" v-if="scope.row.errorList.length && scope.row.errorList.find(item => item.index == 4)">
              <el-icon size="large" color="red" class="ml5"><CircleCloseFilled /></el-icon>
            </div>
            </el-tooltip>
          </div>
        </template>
      </el-table-column>
      <el-table-column label="备注" prop="mark">
        <template #default="scope">
          <el-input v-model="scope.row.mark"></el-input>
          <div class="flex-box-per">
            <el-input v-model="scope.row.mark"  @blur="checkImport(scope.row, scope.$index)"></el-input>
            <el-tooltip v-if="scope.row.errorList.length && scope.row.errorList.find(item => item.index == 5)" :content="scope.row.errorList.find(item => item.index == 5).msg">
              <div class="ml5">
              <el-icon size="large" color="red" class="ml5"><CircleCloseFilled /></el-icon>
            </div>
            </el-tooltip>
          </div>
        </template>
      </el-table-column>
    </el-table>
@@ -43,7 +93,10 @@
</template>
<script setup lang="ts">
import { checkImport as checkImportHttp, saveImport } from '@/api/system/company/company'
import { ElMessage} from 'element-plus'
const dialogVisible = ref(false)
const emits = defineEmits()
const props = defineProps({
  recordRow: { type: Array, default: () => [] },
})
@@ -58,13 +111,45 @@
function closeDialog() {
  dialogVisible.value = false
}
function checkImport(row, index, item) {
  // row.companyPhone
  if(item && item == 'companyPhone') {
    if(row.companyPhone) {
      const reg = /^1[3|4|5|6|7|8|9][0-9]\d{8}$/
      if(!reg.test(row.companyPhone)){
        ElMessage.error('请输入正确的手机号')
      }
    }
  }
  checkImportHttp({voList: [row]}).then(val => {
    // recordValue.value.splice(index, 1, val.data.voList[0])
    recordValue.value[index] = val.data.voList[0]
    // ElMessage.success('修改成功')
  })
}
function addCompany() {
  saveImport({voList: recordValue.value}).then(val =>{
    ElMessage.success('修改成功')
    closeDialog()
    emits('uploadList')
  })
}
defineExpose({
  openDialog,
  closeDialog
})
</script>
<style>
<style >
.dialog-footer{
  text-align: center;
}
.flex-box-per{
  display: flex;
  justify-content: flex-start;
  align-items: center;
}
.ml5{
  /* margin-left: 5px; */
  line-height: 15px;
}
</style>
src/views/infomanger/companymanger/components/judge.vue
New file
@@ -0,0 +1,62 @@
<template>
    <el-dialog title="审核" v-model="dialogVisible" width="900px" append-to-body @close="cloaseDialog"
  >
    <el-form>
      <!-- <el-form-item label="审核类型">
        <el-select style="width: 200px;" v-model="form.checkType">
          <el-option label="企业审批" value="1"></el-option>
          <el-option label="企业审批" value="2"></el-option>
        </el-select>
      </el-form-item> -->
      <el-form-item label="审核状态">
        <el-radio-group v-model="form.checkStatus" class="ml-4">
          <el-radio value="1" size="large">通过</el-radio>
          <el-radio value="-1" size="large">拒绝</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="审核说明">
        <el-input    type="textarea"      v-model="form.checkReason"  ></el-input>
      </el-form-item>
    </el-form>
    <template #footer>
      <div style="text-align: center;">
        <el-button @click="cloaseDialog" >关闭</el-button>
        <el-button @click="checkOrder" type="primary">确认</el-button>
      </div>
    </template>
  </el-dialog>
</template>
<script setup lang="ts">
import { checkOrder as httpCheck } from '@/api/system/company/company'
import { ElMessage } from 'element-plus'
const dialogVisible = ref(false)
const info = ref({})
const form = ref({})
const cloaseDialog = () => {
  dialogVisible.value = false
}
const openDialog = (row) => {
  info.value = row
  form.value['id'] = row.companyId
  form.value['checkType'] = 1
  dialogVisible.value = true
}
function checkOrder() {
  if(!form.value.checkStatus) {
    ElMessage.error('请填写审核状态')
    return
  }
  if(form.value.checkStatus == -1 && !form.value.checkReason) {
    ElMessage.error('请填写审核说明')
    return
  }
  httpCheck(form.value).then(res => {
    form.value = res.data
  })
}
defineExpose({
  openDialog,
  cloaseDialog
})
</script>
src/views/infomanger/companymanger/index.vue
@@ -58,6 +58,7 @@
      <el-table-column  prop="companyName" label="企业名称" minWidth="300"></el-table-column>
      <el-table-column prop="companyName" label="企业类型" width="200"></el-table-column>
      <el-table-column prop="companyUser" label="联系人" width="180"></el-table-column>
      <el-table-column prop="companyCode" label="统一社会信用代码" width="180"></el-table-column>
      <el-table-column prop="companyPhone" label="手机号码" width="120"></el-table-column>
      <el-table-column prop="createTime" label="创建时间" width="200"></el-table-column>
      <el-table-column prop="" label="来源" width="100">
@@ -76,16 +77,15 @@
            <el-switch v-if="scope.row.companyId" v-model="scope.row.companyStatus" @change="changeCompanyNews(scope.row, $event)" :active-value="1" :inactive-value="0"></el-switch>
        </template>
      </el-table-column>
      <el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width" width="240">
        <template #default="scope">
          <el-link type="primary">审核</el-link>
          <el-divider direction="vertical" />
          <el-link type="primary">二维码</el-link>
          <el-link type="primary" v-if="scope.row.checkStatus < 2" v-hasPermi="['sys:company:check']" @click="checkJudge(scope.row)">审核</el-link>
          <el-divider direction="vertical" v-hasPermi="['sys:company:check']" v-if="scope.row.checkStatus < 2"/>
          <el-link type="primary" v-if="scope.row.checkStatus == 2" @click="createQrcodeHandler(scope.row)">二维码</el-link>
          <el-divider direction="vertical" />
          <el-link type="primary" @click="handleAdd(scope.row)">编辑</el-link>
          <el-divider direction="vertical" />
          <el-link type="primary">删除</el-link>
          <el-link type="primary" @click="handleDelete(scope.row)">删除</el-link>
         </template>
      </el-table-column>
    </el-table>
@@ -128,14 +128,18 @@
      </template>
    </el-dialog>
    <exportExcelCom ref="exporttem" @resList="resList"></exportExcelCom>
    <exportRecord ref="exportRecordCom" :recordRow="recordRow"></exportRecord>
    <exportRecord ref="exportRecordCom" :recordRow="recordRow" @uploadList="getList"></exportRecord>
    <judgeCom ref="judgeComRef"></judgeCom>
    <createQrcode ref="createQrcodeRef"></createQrcode>
  </div>
</template>
<script setup name="Dept">
import FileUpload from '@/components/FileUpload/index'
import FileUpload from '@/components/ImageUpload/index'
import exportRecord from './components/exportRecord'
import { listCompany,addCompany, updateCompany } from "@/api/system/company/company";
import createQrcode from './components/createQrcode'
import judgeCom from './components/judge'
import { listCompany,addCompany, updateCompany, delCompany } from "@/api/system/company/company";
import exportExcelCom from './components/export'
import { computed } from "vue";
import { judgeStatus, companyStatus, scopeList } from '@/utils/mapList/index.ts'
@@ -153,6 +157,8 @@
const refreshTable = ref(true);
const exporttem = ref()
const exportRecordCom = ref()
const judgeComRef = ref()
const createQrcodeRef = ref()
const options = reactive({
  // -1拒绝,0待审批,1审批中,2通过    
  checkOptions: [
@@ -298,9 +304,9 @@
/** 删除按钮操作 */
function handleDelete(row) {
  proxy.$modal
    .confirm('是否确认删除名称为"' + row.deptName + '"的数据项?')
    .confirm('是否确认删除该数据?')
    .then(function () {
      return delDept(row.deptId);
      return delCompany({delId: row.companyId});
    })
    .then(() => {
      getList();
@@ -330,5 +336,11 @@
  recordRow.value = row
  exportRecordCom.value.openDialog()
}
function checkJudge(row) {
  judgeComRef.value.openDialog(row)
}
function createQrcodeHandler(row) {
  createQrcodeRef.value.openDialog(row)
}
getList();
</script>
src/views/infomanger/policy/components/addNews.vue
@@ -8,7 +8,7 @@
          <el-option v-for="(item,index) in policyList" :label="item.label" :value="item.value"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="政策名称" prop="docName">
      <el-form-item label="政策名称" prop="docTitle">
        <el-input v-model="form.docTitle" placeholder="请输入政策名称"></el-input>
      </el-form-item>
      <el-form-item label="政策内容" prop="docContent">
src/views/infomanger/policy/index.vue
@@ -27,8 +27,8 @@
    <el-table :data="tableData" v-loading="loading" border>
      <el-table-column label="政策名称" prop="docTitle"></el-table-column>
      <el-table-column label="政策类型" prop="docType"></el-table-column>
      <el-table-column label="创建时间" ></el-table-column>
      <el-table-column label="创建人" width="200"></el-table-column>
      <el-table-column label="创建时间" prop="createTime"></el-table-column>
      <el-table-column label="创建人" width="200" prop="createBy"></el-table-column>
      <el-table-column label="状态" width="200" prop="docStatus">
        <template #default="scope">
          <el-switch v-if="scope.row.docId" v-model="scope.row.docStatus" :active-value="0" :inactive-value="1" @change="changeStatus(scope.row)"></el-switch>