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