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