From d5458eb28c1da630004b7679601bfd5474cd924d Mon Sep 17 00:00:00 2001
From: wjt <1797368093@qq.com>
Date: 星期三, 19 六月 2024 09:03:58 +0800
Subject: [PATCH] 企业管理添加

---
 src/views/infomanger/banner/index.vue                          |    9 +
 src/views/infomanger/companymanger/components/exportRecord.vue |   99 +++++++++++++++-
 src/views/infomanger/companymanger/components/judge.vue        |   62 ++++++++++
 src/api/system/company/company.ts                              |   53 +++++++-
 src/views/infomanger/companymanger/components/createQrcode.vue |   52 ++++++++
 src/views/infomanger/companymanger/index.vue                   |   32 +++-
 package.json                                                   |    1 
 src/views/infomanger/policy/index.vue                          |    4 
 src/views/infomanger/policy/components/addNews.vue             |    2 
 9 files changed, 287 insertions(+), 27 deletions(-)

diff --git a/package.json b/package.json
index 33787df..ef039ae 100644
--- a/package.json
+++ b/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"
   },
diff --git a/src/api/system/company/company.ts b/src/api/system/company/company.ts
index 8afdd6d..30a17b3 100644
--- a/src/api/system/company/company.ts
+++ b/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
+  })
 }
\ No newline at end of file
diff --git a/src/views/infomanger/banner/index.vue b/src/views/infomanger/banner/index.vue
new file mode 100644
index 0000000..a8f2bbc
--- /dev/null
+++ b/src/views/infomanger/banner/index.vue
@@ -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>
\ No newline at end of file
diff --git a/src/views/infomanger/companymanger/components/createQrcode.vue b/src/views/infomanger/companymanger/components/createQrcode.vue
new file mode 100644
index 0000000..0df20e8
--- /dev/null
+++ b/src/views/infomanger/companymanger/components/createQrcode.vue
@@ -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>
\ No newline at end of file
diff --git a/src/views/infomanger/companymanger/components/exportRecord.vue b/src/views/infomanger/companymanger/components/exportRecord.vue
index 9be907c..a5d4de4 100644
--- a/src/views/infomanger/companymanger/components/exportRecord.vue
+++ b/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="缁熶竴绀句細淇$敤浠g爜" 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>
\ No newline at end of file
diff --git a/src/views/infomanger/companymanger/components/judge.vue b/src/views/infomanger/companymanger/components/judge.vue
new file mode 100644
index 0000000..6f94d4b
--- /dev/null
+++ b/src/views/infomanger/companymanger/components/judge.vue
@@ -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>
\ No newline at end of file
diff --git a/src/views/infomanger/companymanger/index.vue b/src/views/infomanger/companymanger/index.vue
index 4e0664b..dcf38c6 100644
--- a/src/views/infomanger/companymanger/index.vue
+++ b/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="缁熶竴绀句細淇$敤浠g爜" 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>
diff --git a/src/views/infomanger/policy/components/addNews.vue b/src/views/infomanger/policy/components/addNews.vue
index 64072e9..d7953f5 100644
--- a/src/views/infomanger/policy/components/addNews.vue
+++ b/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">
diff --git a/src/views/infomanger/policy/index.vue b/src/views/infomanger/policy/index.vue
index c147859..6a30ab6 100644
--- a/src/views/infomanger/policy/index.vue
+++ b/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>

--
Gitblit v1.9.1