From e890eddcac0e51e67ce4e5ee8f69f58497c84af3 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 29 一月 2026 18:03:22 +0800
Subject: [PATCH] 提交忽略文件
---
server/services/src/main/java/com/doumee/service/business/impl/CasesServiceImpl.java | 181 +++++-
admin/src/api/business/member.js | 6
admin/src/components/business/OperaCasesImportWindow.vue | 87 +++
admin/src/views/business/cases.vue | 159 +++++
admin/src/api/business/cases.js | 52 +
admin/package-lock.json | 6
admin/package.json | 1
server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java | 2
admin/src/components/common/UploadFaceImg.vue | 216 ++++++++
admin/src/views/business/member.vue | 41 -
admin/src/api/system/common.js | 4
admin/src/components/business/OperaMemberWindow.vue | 273 ++++++---
server/services/src/main/java/com/doumee/dao/business/model/Cases.java | 13
admin/src/components/common/ImageCropper.vue | 238 ++++++++
server/admin/src/main/java/com/doumee/api/business/CasesController.java | 9
server/admin/src/main/java/com/doumee/api/business/MemberController.java | 16
server/services/src/main/java/com/doumee/service/business/MemberService.java | 2
server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 113 +++
server/services/src/main/java/com/doumee/service/business/CasesService.java | 2
server/services/src/main/java/com/doumee/dao/business/model/Member.java | 6
server/services/src/main/java/com/doumee/service/business/impl/ImportRecordServiceImpl.java | 2
admin/src/components/business/OperaCasesWindow.vue | 169 ++++++
22 files changed, 1,415 insertions(+), 183 deletions(-)
diff --git a/admin/package-lock.json b/admin/package-lock.json
index 1bd4443..99fc0f1 100644
--- a/admin/package-lock.json
+++ b/admin/package-lock.json
@@ -13564,6 +13564,12 @@
"clipboard": "^2.0.0"
}
},
+ "vue-cropper": {
+ "version": "0.6.5",
+ "resolved": "https://registry.npmmirror.com/vue-cropper/-/vue-cropper-0.6.5.tgz",
+ "integrity": "sha512-lSvY6IpeA/Tv/iPZ/FOkMHVRBPSlm7t57nuHEZFBMRNOH8ElvfqVlnHGDOAMlvPhh9gHiddiQoASS+fY0MFX0g==",
+ "dev": true
+ },
"vue-eslint-parser": {
"version": "7.6.0",
"resolved": "https://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-7.6.0.tgz?cache=0&sync_timestamp=1614679548045&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-7.6.0.tgz",
diff --git a/admin/package.json b/admin/package.json
index 718c85f..d8f88e9 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -49,6 +49,7 @@
"node-sass": "^4.12.0",
"sass-loader": "^8.0.2",
"vue-cli-plugin-element-ui": "~1.1.4",
+ "vue-cropper": "^0.6.5",
"vue-json-viewer": "^2.2.22",
"vue-template-compiler": "^2.6.11"
},
diff --git a/admin/src/api/business/cases.js b/admin/src/api/business/cases.js
new file mode 100644
index 0000000..51c2de3
--- /dev/null
+++ b/admin/src/api/business/cases.js
@@ -0,0 +1,52 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+ return request.post('/business/cases/page', data, {
+ trim: true
+ })
+}
+export function findAll (data) {
+ return request.post('/business/cases/list', data, {
+ trim: true
+ })
+}
+
+// 鍒涘缓
+export function create (data) {
+ return request.post('/business/cases/create', data)
+}
+export function updateStatus (data) {
+ return request.post('/business/cases/updateStatus', data)
+}
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+ return request.post('/business/cases/exportExcel', data, {
+ download: true
+ })
+}
+export function importExcel (data) {
+ return request.post('/business/cases/importExcel', data)
+}
+
+// 淇敼
+export function updateById (data) {
+ return request.post('/business/cases/updateById', data)
+}
+
+// 鍒犻櫎
+export function deleteById (id) {
+ return request.get(`/business/cases/delete/${id}`)
+}
+export function getById (id) {
+ return request.get(`/business/cases/${id}`)
+}
+
+// 鎵归噺鍒犻櫎
+export function deleteByIdInBatch (ids) {
+ return request.get('/business/cases/delete/batch', {
+ params: {
+ ids
+ }
+ })
+}
diff --git a/admin/src/api/business/member.js b/admin/src/api/business/member.js
index df77a7f..1c96abd 100644
--- a/admin/src/api/business/member.js
+++ b/admin/src/api/business/member.js
@@ -6,6 +6,11 @@
trim: true
})
}
+export function findAll (data) {
+ return request.post('/business/member/list', data, {
+ trim: true
+ })
+}
// 鍒涘缓
export function create (data) {
@@ -14,7 +19,6 @@
export function updateStatus (data) {
return request.post('/business/member/updateStatus', data)
}
-
// 瀵煎嚭Excel
export function exportExcel (data) {
return request.post('/business/member/exportExcel', data, {
diff --git a/admin/src/api/system/common.js b/admin/src/api/system/common.js
index 1f2087f..7a3c083 100644
--- a/admin/src/api/system/common.js
+++ b/admin/src/api/system/common.js
@@ -34,3 +34,7 @@
autoLogin: false
})
}
+// 涓婁紶
+export function upload (data) {
+ return request.post('/public/upload', data)
+}
diff --git a/admin/src/components/business/OperaCasesImportWindow.vue b/admin/src/components/business/OperaCasesImportWindow.vue
new file mode 100644
index 0000000..65f992a
--- /dev/null
+++ b/admin/src/components/business/OperaCasesImportWindow.vue
@@ -0,0 +1,87 @@
+<template>
+ <el-dialog
+ class="center-title"
+ :title="title"
+ width="500px"
+ top="30vh"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <p class="tip-warn"><i class="el-icon-warning"></i>瀵煎叆璇存槑锛�<br>
+ 1.璇峰厛涓嬭浇鏂囦欢妯℃澘锛屽苟鎸夌収妯℃澘瑕佸幓濉啓琛ㄦ牸鍐呭;<br>
+ </p>
+ <el-form class="demo-form-inline" >
+ <el-form-item label="妗堜緥鏁版嵁" required>
+ <div style="width: 100%;display: flex;align-items: center;">
+ <el-button type="primary" :loading="importing" @click="clickRef">鐐瑰嚮涓婁紶</el-button>
+ <el-button type="text" @click="exportTemplate">鐐瑰嚮涓嬭浇妯$増.EXCEL</el-button>
+ </div>
+ <div style="font-size: 14px; color: black;" v-if="fileName">{{fileName}}</div>
+ </el-form-item>
+ </el-form>
+ <input type="file" style="position: fixed; left: 0; top: -50px;" accept=".xlsx" ref="fileExcel" @change="result" />
+ <template v-slot:footer>
+ <el-button @click="visible=false">杩斿洖</el-button>
+ </template>
+ </el-dialog>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { importExcel } from '@/api/business/importRecord'
+export default {
+ name: 'OperaCasesImportWindow',
+ extends: BaseOpera,
+ // eslint-disable-next-line vue/no-unused-components
+ components: { GlobalWindow },
+ data () {
+ return {
+ importing: false,
+ fileName: '',
+ type: 1
+ }
+ },
+ methods: {
+ open (title) {
+ this.title = title
+ this.fileName = ''
+ this.visible = true
+ this.type = 0
+ },
+ // 瀵煎嚭妯℃澘
+ exportTemplate () {
+ // 鎶曚繚鐢宠
+ window.open('/template/cases.xlsx')
+ },
+ clickRef () {
+ this.$refs.fileExcel.click()
+ },
+ result (e) {
+ this.importing=true
+ const data = new FormData()
+ data.append('file', e.target.files[0])
+ data.append('type', this.type)
+ importExcel(data)
+ .then(res => {
+ this.$message.success('鏁版嵁宸蹭笂浼犳垚鍔燂紝鍙墠寰�銆愬鍏ヨ褰曘�戣彍鍗曟煡鐪嬩换鍔℃墽琛岃繘搴︺��')
+ this.$emit('success')
+ this.visible = false
+ })
+ .catch(err => {
+ this.fileName = ''
+ this.$message.error(err)
+ })
+ .finally(() => {
+ this.$refs.fileExcel.value = null
+ this.importing=false
+ })
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/admin/src/components/business/OperaCasesWindow.vue b/admin/src/components/business/OperaCasesWindow.vue
new file mode 100644
index 0000000..f920d92
--- /dev/null
+++ b/admin/src/components/business/OperaCasesWindow.vue
@@ -0,0 +1,169 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <el-form :model="form" ref="form" :rules="rules">
+ <el-form-item label="鍚嶇О" prop="name">
+ <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
+ </el-form-item>
+ <el-form-item label="鑰佸笀" prop="memberId" >
+ <el-select v-model="form.memberId" placeholder="閫夋嫨鑰佸笀" clearable filterable
+ >
+ <el-option
+ v-for="item in memberList"
+ :key="item.id"
+ :value="item.id"
+ :label="item.name"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鍥鹃泦" prop="icon">
+ <UploadImage
+ :fileList="tempfileList"
+ :uploadData="uploadData"
+ @beginUpload="isUploading=true"
+ @endUpload="isUploading=false"/>
+ <p class="tip-warn">
+ 寤鸿灏哄锛�750px X 750px
+ 鏀寔png銆乯pg銆乯peg鏍煎紡锛屽ぇ灏忎笉瓒呰繃2M锛屼笂浼犲浘鐗囦笉鍏佽娑夊強鏀挎不鏁忔劅涓庤壊鎯�,
+ </p>
+ </el-form-item>
+ <el-form-item label="寮�濮嬫椂闂�" prop="startDate" >
+ <el-date-picker
+ clearable
+ v-model="form.startDate"
+ type="date"
+ value-format="yyyy-MM-dd"
+ format="yyyy-MM-dd"
+ placeholder="寮�濮嬫椂闂�"
+ ></el-date-picker>
+ </el-form-item>
+ <el-form-item label="瀵煎叆鏃堕棿" prop="endDate" >
+ <el-date-picker
+ clearable
+ v-model="form.endDate"
+ type="date"
+ value-format="yyyy-MM-dd"
+ format="yyyy-MM-dd"
+ placeholder="缁撴潫鏃堕棿"
+ ></el-date-picker>
+ </el-form-item>
+ <el-form-item label="鎺掑簭鐮�" prop="sortnum">
+ <el-input v-model="form.sortnum" type="" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
+ </el-form-item>
+ <el-form-item label="鎻忚堪" prop="detail">
+ <el-input type="textarea" v-model="form.detail" placeholder="璇疯緭鍏ユ弿杩�" v-trim/>
+ </el-form-item>
+ </el-form>
+ </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import UploadImage from '@/components/common/UploadImage'
+import { findAll as memberList } from '@/api/business/member'
+export default {
+ name: 'OperaCasesWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow, UploadImage },
+ data () {
+ return {
+ isUploading: false,
+ uploadData: {
+ folder: 'dianjiang/category'
+ },
+ // 琛ㄥ崟鏁版嵁
+ form: {
+ id: null,
+ status: 0,
+ sortnum: null,
+ name: '',
+ detail: null,
+ remark: null,
+ fileList: [],
+ memberId: null,
+ startDate: null,
+ endDate: null
+ },
+ tempfileList: [],
+ memberList: [],
+ // 楠岃瘉瑙勫垯
+ rules: {
+ name: [{ required: true, message: '璇疯緭鍏ユ爣棰�' }],
+ detail: [{ required: true, message: '璇疯緭鍏ユ弿杩�' }],
+ memberId: [{ required: true, message: '璇烽�夋嫨鑰佸笀' }],
+ startDate: [{ required: true, message: '璇烽�夋嫨寮�濮嬫棩鏈�' }],
+ endDate: [{ required: true, message: '璇疯緭鍏ョ粨鏉熸棩鏈�' }]
+ }
+ }
+ },
+ created () {
+ this.config({
+ api: '/business/cases',
+ 'field.id': 'id'
+ })
+ },
+ methods: {
+ loadMemberList () {
+ memberList({
+ }).then(res => {
+ this.memberList = res
+ })
+ },
+
+ confirm () {
+ this.form.fileList = this.tempfileList
+ if (this.form[this.configData['field.id']] == null || this.form[this.configData['field.id']] === '') {
+ this.__confirmCreate()
+ return
+ }
+ this.__confirmEdit()
+ },
+ open (title, target, type) {
+ this.title = title
+ this.visible = true
+ this.loadMemberList()
+ this.tempfileList = []
+ this.form = {
+ id: null,
+ status: 0,
+ sortnum: null,
+ name: '',
+ detail: null,
+ remark: null,
+ fileList: [],
+ memberId: null,
+ startDate: null,
+ endDate: null
+ }
+ // 鏂板缓
+ if (target == null) {
+ this.$nextTick(() => {
+ this.$refs.form.resetFields()
+ this.form[this.configData['field.id']] = null
+ this.form.type = type
+ })
+ return
+ }
+ // 缂栬緫
+ this.$nextTick(() => {
+ for (const key in this.form) {
+ this.form[key] = target[key]
+ }
+ this.form.fileList = this.form.fileList || []
+ this.form.fileList.forEach(item => {
+ this.tempfileList.push({
+ fileurl: item.fileurl,
+ name: item.name,
+ url: item.url
+ })
+ })
+ })
+ }
+ }
+}
+</script>
diff --git a/admin/src/components/business/OperaMemberWindow.vue b/admin/src/components/business/OperaMemberWindow.vue
index a31bbe4..f8ff2fb 100644
--- a/admin/src/components/business/OperaMemberWindow.vue
+++ b/admin/src/components/business/OperaMemberWindow.vue
@@ -1,97 +1,103 @@
<template>
<GlobalWindow
:title="title"
+ width="50%"
:visible.sync="visible"
:confirm-working="isWorking"
@confirm="confirm"
>
<el-form :model="form" ref="form" :rules="rules">
- <el-form-item label="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�" prop="deleted">
- <el-input v-model="form.deleted" placeholder="璇疯緭鍏ユ槸鍚﹀凡鍒犻櫎 0鏈垹闄� 1宸插垹闄�" v-trim/>
+ <el-form-item label="鑰佸笀濮撳悕" prop="name">
+ <el-input v-model="form.name" placeholder="璇疯緭鍏ュ鍚�" v-trim/>
</el-form-item>
- <el-form-item label="鍒涘缓浜虹紪鐮�" prop="createUser">
- <el-input v-model="form.createUser" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" v-trim/>
+ <el-form-item label="鑰佸笀宸ュ彿" prop="code">
+ <el-input v-model="form.code" placeholder="璇疯緭鍏ュ伐鍙�" v-trim/>
</el-form-item>
- <el-form-item label="鍒涘缓鏃堕棿" prop="createTime">
- <el-date-picker v-model="form.createTime" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+ <el-form-item label="鑱屼笟鐓�" prop="imgurl">
+<!-- <UploadAvatarImage
+ :file="{ imgurlfull: form.fullImgurl, imgurl: form.imgurl }"
+ :uploadData="uploadData"
+ @uploadSuccess="uploadAvatarSuccess"
+ />
+ <p class="tip-warn">
+ 寤鸿灏哄锛�750px X 750px锛屼笂闄�6寮�
+ 鏀寔png銆乯pg銆乯peg鏍煎紡锛屽ぇ灏忎笉瓒呰繃2M锛屼笂浼犲浘鐗囦笉鍏佽娑夊強鏀挎不鏁忔劅涓庤壊鎯�,
+ </p>-->
+ <div class="upload_wrap">
+ <UploadFaceImg :file="{ imgurlfull: form.fullImgurl, imgurl: form.imgurl }" :uploadData="uploadData"
+ @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false" @uploadBegin="isUploading = true" />
+ <div class="content">
+ <div>1銆佸缓璁昂瀵革細750px X 750px 銆�</div>
+ <div>2銆佹敮鎸乸ng銆乯pg銆乯peg鏍煎紡锛屽ぇ灏忎笉瓒呰繃2M锛屼笂浼犲浘鐗囦笉鍏佽娑夊強鏀挎不鏁忔劅涓庤壊鎯呫��</div>
+ </div>
+ </div>
</el-form-item>
- <el-form-item label="鏇存柊浜虹紪鐮�" prop="updateUser">
- <el-input v-model="form.updateUser" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" v-trim/>
+ <el-form-item label="鎬у埆" prop="sex">
+ <el-radio-group v-model="form.sex" style="margin-bottom: 20px;">
+ <el-radio-button :label="0">鐢�</el-radio-button>
+ <el-radio-button :label="1">濂�</el-radio-button>
+ </el-radio-group>
</el-form-item>
- <el-form-item label="鏇存柊鏃堕棿" prop="updateTime">
- <el-date-picker v-model="form.updateTime" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�"></el-date-picker>
+ <el-form-item label="宀椾綅" prop="positon">
+ <el-input v-model="form.positon" placeholder="璇疯緭鍏ュ矖浣�" v-trim/>
</el-form-item>
- <el-form-item label="澶囨敞" prop="remark">
- <el-input v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+ <el-form-item label="浠庝笟骞翠唤" prop="jobYear">
+ <el-input type="number" v-model="form.jobYear" placeholder="璇疯緭鍏ヤ粠涓氬勾浠�" v-trim><template slot="append">骞�</template></el-input>
</el-form-item>
- <el-form-item label="澶村儚" prop="coverImage">
- <el-input v-model="form.coverImage" placeholder="璇疯緭鍏ュご鍍�" v-trim/>
+ <el-form-item label="鏈嶅姟鎴樺尯" prop="zhanquIdList">
+ <el-select v-model="form.zhanquIdList" placeholder="璇烽�夋嫨鏈嶅姟鎴樺尯" filterable multiple clearable >
+ <el-option
+ v-for="item in cateList.filter(item=>{return item.type==0})"
+ :key="item.id"
+ :value="item.id"
+ :label="item.name"
+ ></el-option>
+ </el-select>
</el-form-item>
- <el-form-item label="openid" prop="openid">
- <el-input v-model="form.openid" placeholder="璇疯緭鍏penid" v-trim/>
+ <el-form-item label="鍟嗕笟鍖栫被鍨�" prop="bustypeIdList">
+ <el-select v-model="form.bustypeIdList" placeholder="璇烽�夋嫨鍟嗕笟鍖栫被鍨�" filterable multiple clearable >
+ <el-option
+ v-for="item in cateList.filter(item=>{return item.type==1})"
+ :key="item.id"
+ :value="item.id"
+ :label="item.name"
+ ></el-option>
+ </el-select>
</el-form-item>
- <el-form-item label="鏄电О" prop="nickName">
- <el-input v-model="form.nickName" placeholder="璇疯緭鍏ユ樀绉�" v-trim/>
+ <el-form-item label="鑰佸笀绛夌骇" prop="levelId">
+ <el-select v-model="form.levelId" placeholder="璇烽�夋嫨鑰佸笀绛夌骇" filterable clearable >
+ <el-option
+ v-for="item in cateList.filter(item=>{return item.type==3})"
+ :key="item.id"
+ :value="item.id"
+ :label="item.name"
+ ></el-option>
+ </el-select>
</el-form-item>
- <el-form-item label="鑱旂郴鐢佃瘽" prop="telephone">
- <el-input v-model="form.telephone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" v-trim/>
+ <el-form-item label="鎿呴暱棰嗗煙" prop="fieldIdList">
+ <el-select v-model="form.fieldIdList" placeholder="璇烽�夋嫨鎿呴暱棰嗗煙" filterable multiple clearable >
+ <el-option
+ v-for="item in cateList.filter(item=>{return item.type==2})"
+ :key="item.id"
+ :value="item.id"
+ :label="item.name"
+ ></el-option>
+ </el-select>
</el-form-item>
- <el-form-item label="濮撳悕" prop="name">
- <el-input v-model="form.name" placeholder="璇疯緭鍏ュ鍚�" v-trim/>
+ <el-form-item label="璐圭敤鏍囧噯" prop="fee">
+ <el-input type="number" v-model="form.fee" placeholder="璇疯緭鍏ヨ垂鐢ㄦ爣鍑�" v-trim><template slot="append">鍏�/鍛�</template></el-input>
</el-form-item>
- <el-form-item label="鐢ㄥ伐韬唤:0=鏈敵璇凤紱1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�" prop="workerIdentity">
- <el-input v-model="form.workerIdentity" placeholder="璇疯緭鍏ョ敤宸ヨ韩浠�:0=鏈敵璇凤紱1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�" v-trim/>
+ <el-form-item label="鏈嶅姟鍟嗗満" prop="serveNum">
+ <el-input type="number" v-model="form.serveNum" placeholder="璇疯緭鍏ユ湇鍔″晢鍦�" v-trim><template slot="append">涓�</template></el-input>
</el-form-item>
- <el-form-item label="璐ц繍韬唤:0=鏈敵璇凤紱1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�" prop="driverIdentity">
- <el-input v-model="form.driverIdentity" placeholder="璇疯緭鍏ヨ揣杩愯韩浠�:0=鏈敵璇凤紱1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�" v-trim/>
- </el-form-item>
- <el-form-item label="渚涢寰堢矇:0=鏈敵璇凤紱1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�" prop="chefIdentity">
- <el-input v-model="form.chefIdentity" placeholder="璇疯緭鍏ヤ緵椁愬緢绮�:0=鏈敵璇凤紱1=鐢宠涓紱2=宸查�氳繃锛�3=鏈�氳繃锛�" v-trim/>
- </el-form-item>
- <el-form-item label="褰撳墠浣欓(鍗曚綅:鍒�)" prop="amount">
- <el-input v-model="form.amount" placeholder="璇疯緭鍏ュ綋鍓嶄綑棰�(鍗曚綅:鍒�)" v-trim/>
- </el-form-item>
- <el-form-item label="鍘嗗彶鎬婚噾棰�(鍗曚綅:鍒�)" prop="totalAmount">
- <el-input v-model="form.totalAmount" placeholder="璇疯緭鍏ュ巻鍙叉�婚噾棰�(鍗曚綅:鍒�)" v-trim/>
+ <el-form-item label="鑰佸笀绠�浠�" prop="content">
+ <el-input type="textarea" v-model="form.content" placeholder="璇疯緭鍏ヨ�佸笀绠�浠�" v-trim/>
</el-form-item>
<el-form-item label="鐘舵��" prop="status">
- <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬�" v-trim/>
- </el-form-item>
- <el-form-item label="鏈�鍚庣櫥褰曟椂闂�" prop="loginTime">
- <el-date-picker v-model="form.loginTime" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ渶鍚庣櫥褰曟椂闂�"></el-date-picker>
- </el-form-item>
- <el-form-item label="鎬荤櫥褰曟鏁�" prop="loginTimes">
- <el-input v-model="form.loginTimes" placeholder="璇疯緭鍏ユ�荤櫥褰曟鏁�" v-trim/>
- </el-form-item>
- <el-form-item label="鎬绘帴鍗曢噺" prop="reciveNum">
- <el-input v-model="form.reciveNum" placeholder="璇疯緭鍏ユ�绘帴鍗曢噺" v-trim/>
- </el-form-item>
- <el-form-item label="鎬诲彂鍗曢噺" prop="publishNum">
- <el-input v-model="form.publishNum" placeholder="璇疯緭鍏ユ�诲彂鍗曢噺" v-trim/>
- </el-form-item>
- <el-form-item label="璇勫垎" prop="score">
- <el-input v-model="form.score" placeholder="璇疯緭鍏ヨ瘎鍒�" v-trim/>
- </el-form-item>
- <el-form-item label="瀹氫綅鍦板潃" prop="localtion">
- <el-input v-model="form.localtion" placeholder="璇疯緭鍏ュ畾浣嶅湴鍧�" v-trim/>
- </el-form-item>
- <el-form-item label="绾害" prop="lat">
- <el-input v-model="form.lat" placeholder="璇疯緭鍏ョ含搴�" v-trim/>
- </el-form-item>
- <el-form-item label="缁忓害" prop="lgt">
- <el-input v-model="form.lgt" placeholder="璇疯緭鍏ョ粡搴�" v-trim/>
- </el-form-item>
- <el-form-item label="鐪佷唤" prop="province">
- <el-input v-model="form.province" placeholder="璇疯緭鍏ョ渷浠�" v-trim/>
- </el-form-item>
- <el-form-item label="鍩庡競" prop="city">
- <el-input v-model="form.city" placeholder="璇疯緭鍏ュ煄甯�" v-trim/>
- </el-form-item>
- <el-form-item label="鍖哄幙" prop="area">
- <el-input v-model="form.area" placeholder="璇疯緭鍏ュ尯鍘�" v-trim/>
- </el-form-item>
- <el-form-item label="鏄惁鎺ュ彈鑷姩娲惧崟:0=鍚︼紱1=鏄紱" prop="autoReciveStatus">
- <el-input v-model="form.autoReciveStatus" placeholder="璇疯緭鍏ユ槸鍚︽帴鍙楄嚜鍔ㄦ淳鍗�:0=鍚︼紱1=鏄紱" v-trim/>
+ <el-radio-group v-model="form.status" style="margin-bottom: 20px;">
+ <el-radio-button :label="0">鍚敤</el-radio-button>
+ <el-radio-button :label="1">绂佺敤</el-radio-button>
+ </el-radio-group>
</el-form-item>
</el-form>
</GlobalWindow>
@@ -100,47 +106,51 @@
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
+import { findAll as cateList } from '@/api/business/category'
+import UploadFaceImg from '@/components/common/UploadFaceImg'
export default {
name: 'OperaMemberWindow',
extends: BaseOpera,
- components: { GlobalWindow },
+ components: { GlobalWindow ,UploadFaceImg},
data () {
return {
// 琛ㄥ崟鏁版嵁
+ isUploading: false,
+ cateList: [],
+ uploadData: {
+ folder: 'dianjiang/member'
+ },
form: {
id: null,
- deleted: '',
- createUser: '',
- createTime: '',
- updateUser: '',
- updateTime: '',
- remark: '',
- coverImage: '',
- openid: '',
- nickName: '',
- telephone: '',
+ imgurl: '',
+ fullImgurl: '',
name: '',
- workerIdentity: '',
- driverIdentity: '',
- chefIdentity: '',
- amount: '',
- totalAmount: '',
- status: '',
- loginTime: '',
- loginTimes: '',
- reciveNum: '',
- publishNum: '',
- score: '',
- localtion: '',
- lat: '',
- lgt: '',
- province: '',
- city: '',
- area: '',
- autoReciveStatus: ''
+ code: '',
+ sex: 0,
+ jobYear: '',
+ positon: '',
+ zhanquIdList: [],
+ bustypeIdList: [],
+ fieldIdList: [],
+ levelId: '',
+ fee: '',
+ status: 0,
+ content: 0,
+ serveNum: '',
+ type: 0
},
// 楠岃瘉瑙勫垯
rules: {
+ name: [{ required: true, message: '璇疯緭鍏ュ鍚�' }],
+ code: [{ required: true, message: '璇疯緭鍏ュ伐鍙�' }],
+ imgurl: [{ required: true, message: '璇蜂笂浼犺亴涓氱収' }],
+ sex: [{ required: true, message: '璇烽�夋嫨鎬у埆' }],
+ jobYear: [{ required: true, message: '璇烽�夋嫨浠庝笟骞翠唤' }],
+ zhanquIdList: [{ required: true, message: '璇烽�夋嫨鏈嶅姟鎴樺尯' }],
+ bustypeIdList: [{ required: true, message: '璇烽�夋嫨鍟嗕笟鍖栫被鍨�' }],
+ levelId: [{ required: true, message: '璇烽�夋嫨鑰佸笀绛夌骇' }],
+ fieldIdList: [{ required: true, message: '璇烽�夋嫨鎿呴暱棰嗗煙' }],
+ content: [{ required: true, message: '璇疯緭鍏ヨ�佸笀绠�浠�' }]
}
}
},
@@ -149,6 +159,67 @@
api: '/business/member',
'field.id': 'id'
})
+ },
+ methods: {
+ loadCateList () {
+ cateList({
+ }).then(res => {
+ this.cateList = res
+ })
+ },
+ uploadAvatarSuccess (file) {
+ this.$set(this.form, 'imgurl', file.imgurl)
+ this.$set(this.form, 'fullImgurl', file.imgurlfull)
+ },
+ open (title, target, type) {
+ this.title = title
+ this.visible = true
+ this.loadCateList()
+ this.form.fullImgurl = null
+ this.form.imgurl = null
+ // 鏂板缓
+ if (target == null) {
+ this.$nextTick(() => {
+ this.$refs.form.resetFields()
+ this.form[this.configData['field.id']] = null
+ })
+ return
+ }
+ // 缂栬緫
+ this.$nextTick(() => {
+ console.log(target.jobYear)
+ for (const key in this.form) {
+ this.form[key] = target[key]
+ }
+ })
+ }
}
}
</script>
+<style lang="scss" scoped>
+.upload_wrap {
+ display: flex;
+ align-items: center;
+
+ .avatar-uploader {
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ }
+
+ ::v-deep .avatar {
+ max-width: 90px;
+ max-height: 90px;
+ }
+
+ .content {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ font-size: 12px;
+ color: #999999;
+ margin-left: 12px;
+ line-height: 24px;
+ }
+}
+</style>
diff --git a/admin/src/components/common/ImageCropper.vue b/admin/src/components/common/ImageCropper.vue
new file mode 100644
index 0000000..a58eedc
--- /dev/null
+++ b/admin/src/components/common/ImageCropper.vue
@@ -0,0 +1,238 @@
+<template>
+ <div class="iconShot">
+ <div class="icon-dialog">
+ <div class="clip">
+ <div class="img" ref="img">
+ <vue-cropper
+ ref="cropper"
+ :img="imgSrc"
+ :width="options.width"
+ :height="options.height"
+ :canScale="options.canScale"
+ :autoCrop="options.autoCrop"
+ :canMove="options.canMove"
+ :output-size="options.outputSize"
+ :centerBox="options.centerBox"
+ :autoCropWidth="autoCrop.width || options.autoCropWidth"
+ :autoCropHeight="autoCrop.height || options.autoCropHeight"
+ @realTime="realTime"
+ ></vue-cropper>
+ </div>
+ <div class="previews">
+ <img style="width: 150px;height: 150px;border-radius1: 50%;object-fit: cover" :src="cutImgSrc" alt="鍥剧墖">
+ </div>
+ </div>
+ </div>
+ </div>
+</template>
+
+<script>
+import { VueCropper } from 'vue-cropper'
+import { upload } from '@/api/system/common'
+export default {
+ name: 'ImageCropper',
+ components: { VueCropper },
+ props: {
+ imgSrc: {
+ type: String,
+ default: ''
+ },
+ autoCrop: {
+ type: Object,
+ default () {
+ return { width: 500, height: 500 }
+ }
+ },
+ // 鍥炴樉涓婃淇濆瓨鐨勬埅鍥剧殑浣嶇疆
+ location: {
+ type: Object,
+ default () {
+ return {}
+ }
+ }
+ // iconItem:{
+ // type:Object,
+ // default(){
+ // return {};
+ // }
+ // }
+ },
+ data () {
+ return {
+ // 瀛︿範鎴浘閫夐」
+ iconForm: {
+ originImgBase64: '',
+ imgBase64: ''
+ // location: "",
+ // matchingName: "",
+ // matchingType: "",
+ // note: "",
+ // picGroupId: "0",
+ // tsId: "",
+ },
+ // 鍌ㄥ瓨鎴浘鍖哄煙鐨勫浘鐗�,鑷繁浼�
+ // imgSrc:'',
+ // 鍌ㄥ瓨鎴浘鍚庣殑鐢熸垚鐨刡ase64鍥剧墖
+ cutImgSrc: '',
+ // cropper鎻掍欢鐨勯厤缃�
+ options: {
+ canScale: false,
+ autoCrop: true,
+ canMove: false,
+ centerBox: true,
+ height: 500,
+ width: 500,
+ outputSize: 1,
+ autoCropWidth: 500,
+ autoCropHeight: 500,
+ fixed: true,
+ fixedNumber: [1, 1]
+ },
+ // 鎴浘妗嗙浉瀵瑰浘鐗囩殑浣嶇疆
+ clipAxis: {},
+ // 鎴浘鍥炴樉鏍囧織,鍙Е鍙戜竴娆″疄鐜板洖鏄撅紝
+ flag: true
+ }
+ },
+ mounted () {
+
+ },
+ watch: {
+ },
+ methods: {
+ getImagecropper () {
+ return this.$refs.cropper
+ },
+ // 瀛︿範鎴浘妗嗗彉鍖栦簨浠�
+ realTime (data) {
+ if (data.h) {
+ // 鑾峰彇鍥剧墖鐩稿瀹瑰櫒鐨勪綅缃�
+ const img = this.$refs.cropper.getImgAxis()
+ // 鑾峰彇鎴浘妗嗙浉瀵瑰鍣ㄧ殑浣嶇疆
+ const clip = this.$refs.cropper.getCropAxis()
+ this.clipAxis.x = clip.x1 - img.x1
+ this.clipAxis.y = clip.y1 - img.y1
+ // 鑾峰彇鎴浘鍥剧墖
+ this.$refs.cropper.getCropData(img => {
+ this.clipAxis.width = data.w
+ this.clipAxis.height = data.h
+ this.cutImgSrc = img
+ })
+ // 鑾峰彇鍘熷浘base64鐨勫浘鐗�
+ // this.imageUrlToBase64(data.url);
+
+ // 鍥炬爣鍒楄〃缂栬緫鍥炴樉(鍒濆鍖栧彧瑙﹀彂涓�娆�)
+ if (this.location.height != undefined && this.flag) {
+ this.$nextTick(() => {
+ // auto crop
+ this.$refs.cropper.goAutoCrop()
+ this.$nextTick(() => {
+ // if cropped and has position message, update crop box
+ this.$refs.cropper.cropOffsertX = this.location.x + img.x1
+ this.$refs.cropper.cropOffsertY = this.location.y + img.y1
+ this.$refs.cropper.cropW = this.location.width
+ this.$refs.cropper.cropH = this.location.height
+
+ // this.iconForm.location=this.iconItem.location;
+ // this.iconForm.matchingName=this.iconItem.matchingName;
+ // this.iconForm.matchingType=this.iconItem.matchingType;
+ // this.iconForm.note=this.iconItem.note;
+ // this.picGroupId=this.iconItem.picGroupId.split(',');
+ // this.iconForm.id=this.iconItem.id;
+ // this.iconForm.tsId=this.iconItem.tsId;
+ this.flag = false
+ })
+ })
+ }
+ }
+ },
+ // 鍘熷浘閫氳繃canvas杞负base64鐨勬牸寮�
+ imageUrlToBase64 (src) {
+ // 涓�瀹氳璁剧疆涓簂et锛屼笉鐒跺浘鐗囦笉鏄剧ず
+ const image = new Image()
+ // 瑙e喅璺ㄥ煙闂
+ image.setAttribute('crossOrigin', 'anonymous')
+ const imageUrl = src
+ image.src = imageUrl
+
+ // image.onload涓哄紓姝ュ姞杞�
+ image.onload = () => {
+ var canvas = document.createElement('canvas')
+ canvas.width = image.width
+ canvas.height = image.height
+ var context = canvas.getContext('2d')
+ context.drawImage(image, 0, 0, image.width, image.height)
+
+ // var quality = 0.8;
+ // 杩欓噷鐨刣ataurl灏辨槸base64绫诲瀷
+ const dataURL = canvas.toDataURL('image/jpeg')// 浣跨敤toDataUrl灏嗗浘鐗囪浆鎹㈡垚jpeg鐨勬牸寮�
+ this.iconForm.originImgBase64 = dataURL
+ }
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+.iconShot {
+ .icon-dialog {
+ .clip {
+ display: flex;
+ .img {
+ flex: 7.5;
+ height: 500px;
+ //float: left;
+ // display: inline-block;
+ .vue-cropper {
+ background-image: none;
+ }
+ .cropper-move {
+ cursor: default;
+ }
+ .cropper-face.cropper-move {
+ cursor: move;
+ }
+
+ }
+ .previews {
+ //width: 100px;
+ flex: 2.5;
+ //float: right;
+ height: 200px;
+ //position: relative;
+ >img {
+ //position: absolute;
+ //left: 50%;
+ transform: translate(35%, 50px);
+ max-height: 100%;
+ }
+ }
+ }
+
+ }
+ .icon-options {
+ font-size: 12px;
+ font-weight: 200;
+ >.el-row {
+ >.el-col {
+ >.el-row {
+ height: 36px;
+ line-height: 36px;
+ >.el-col:nth-child(1) {
+ font-weight: 600;
+ text-align: right;
+ }
+ .el-col:nth-child(2) {
+ .el-input,.el-select {
+ width: 185px !important;
+ }
+ }
+ >.el-col {
+ padding: 0 10px;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
diff --git a/admin/src/components/common/UploadFaceImg.vue b/admin/src/components/common/UploadFaceImg.vue
new file mode 100644
index 0000000..2deb394
--- /dev/null
+++ b/admin/src/components/common/UploadFaceImg.vue
@@ -0,0 +1,216 @@
+<template>
+ <div>
+ <el-upload
+ class="avatar-uploader"
+ accept=".png,.jpg,.jpeg"
+ :style="customStyle"
+ action=""
+ :auto-upload="false"
+ :show-file-list="false"
+ :on-change='openUpdateIcon'>
+ <img v-if=" file.imgurlfull" style="width: 100%;" :src="file.imgurlfull" :style="customStyle" class="avatar">
+ <div v-else :style="customStyle">
+ <i class="el-icon-plus avatar-uploader-icon"></i>
+ <div class="tips-style">{{ tipsLabel }}</div>
+ </div>
+ </el-upload>
+ <el-dialog
+ append-to-body
+ :close-on-click-modal="false"
+ title="涓婁紶鍥剧墖"
+ :visible.sync="updateImg"
+ width="1000px"
+ class="icon-dialog-wrapper dialong-com-style">
+ <ImageCropper ref="iconShot" v-if="updateImg" :imgSrc="img" :auto-crop="autoCrop">
+ </ImageCropper>
+ <span slot="footer" class="dialog-footer">
+ <el-button v-if="loading">鍙� 娑�</el-button>
+ <el-button v-else @click="updateImg = false">鍙� 娑�</el-button>
+ <el-button :loading="loading" type="primary" @click="uploadIcon">纭� 瀹�</el-button>
+ </span>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import ImageCropper from '@/components/common/ImageCropper'
+import { upload } from '@/api/system/common'
+export default {
+ components: { ImageCropper },
+ props: {
+ file: {
+ type: Object,
+ default: () => {}
+ },
+ autoCrop: {
+ type: Object,
+ default () {
+ return { width: 500, height: 500 }
+ }
+ },
+ // eslint-disable-next-line vue/require-prop-type-constructor
+ tipsLabel: {
+ type: String,
+ default: ''
+ },
+ customStyle: {
+ type: String,
+ default: 'width: 90px; height: 90px;'
+ },
+ uploadData: Object
+ },
+ data () {
+ return {
+ loading: false,
+ fileInfo: {},
+ img: null,
+ updateImg: false,
+ imageSrc: null,
+ uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/public/upload'
+ }
+ },
+
+ methods: {
+ uploadIcon () {
+ // 鑾峰彇瑁佸壀鍚庣殑鍥剧墖
+ this.$refs.iconShot.getImagecropper().getCropBlob((fileData) => { // 鑾峰彇褰撳墠瑁佸壀濂界殑鏁版嵁
+ // 娉ㄦ鏃剁殑data鏄竴涓狟lob鏁版嵁锛岄儴鍒嗘帴鍙f帴鏀剁殑鏄疐ile杞寲鐨凢ormData鏁版嵁
+ console.log(fileData)
+ const formData = new FormData()
+
+ formData.append('folder', this.uploadData.folder || 'member')
+ if (this.uploadData.isFace || this.uploadData.isFace == 0) {
+ formData.append('isFace', 0)
+ }
+ formData.append(
+ 'file',
+ new File(
+ [fileData], // 灏咮lob绫诲瀷杞寲鎴怓ile绫诲瀷
+ this.fileInfo.name, // 璁剧疆File绫诲瀷鐨勬枃浠跺悕绉�
+ { type: this.fileInfo.type } // 璁剧疆File绫诲瀷鐨勬枃浠剁被鍨�
+ )
+ )
+ this.loading = true
+ upload(formData).then(res => {
+ this.loading = false
+ console.log(res)
+ this.file.imgurl = res.imgaddr
+ this.file.imgurlfull = res.url
+ this.$message.success('涓婁紶鎴愬姛')
+ this.imageSrc = res.url
+ this.updateImg = false
+ this.$emit('uploadSuccess', { imgurl: res.imgaddr, imgurlfull: res.url, name: res.originname })
+ this.$emit('uploadEnd')
+ }, () => {
+ this.loading = false
+ })
+ })
+ },
+
+ // 涓婁紶鍥剧墖
+ openUpdateIcon (file, fileList) {
+ const isJPG = file.raw.type === 'image/jpeg' || file.raw.type === 'image/png'
+ const isLt2M = file.size / 1024 / 1024 < 5
+ if (!isJPG) {
+ this.$message.error('涓婁紶澶村儚鍥剧墖鍙兘鏄� JPG/PNG 鏍煎紡!')
+ return false
+ }
+ if (!isLt2M) {
+ this.$message.error('涓婁紶澶村儚鍥剧墖澶у皬涓嶈兘瓒呰繃 5MB!')
+ return false
+ }
+ // 涓婁紶鎴愬姛鍚庡皢鍥剧墖鍦板潃璧嬪�肩粰瑁佸壀妗嗘樉绀哄浘鐗�
+ this.$nextTick(async () => {
+ // base64鏂瑰紡
+ // this.option.img = await fileByBase64(file.raw)
+ this.fileInfo.name = file.name
+ this.fileInfo.type = file.type
+ console.log(file, fileList)
+ this.img = URL.createObjectURL(file.raw)
+ // this.loading = false
+ this.updateImg = true
+ })
+ },
+ handleAvatarSuccess (res, file) {
+ if (res.code == 200) {
+ const { data } = res
+ this.file.imgurl = data.imgaddr
+ this.file.imgurlfull = data.url
+ this.$message.success('涓婁紶鎴愬姛')
+ this.imageSrc = data.url
+ this.updateImg = true
+ // this.$emit('uploadSuccess', { imgurl: data.imgaddr, imgurlfull: data.url, name: data.originname })
+ } else {
+ this.$message.error('涓婁紶澶辫触')
+ }
+ this.$emit('uploadEnd')
+ },
+ uploadError () {
+ this.$message.error('涓婁紶澶辫触')
+ this.$emit('uploadEnd')
+ },
+ // // 鎷︽埅
+ beforeAvatarUpload (file) {
+ this.$emit('uploadBegin')
+ return true
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+$image-width: 90px;
+.avatar-uploader {
+ width: $image-width;
+ height: $image-width;
+}
+::v-deep .el-upload {
+ border: 1px dashed #d9d9d9;
+ border-radius: 6px;
+ cursor: pointer;
+ position: relative;
+ overflow: hidden;
+}
+.avatar-uploader .el-upload:hover {
+ border-color: #409EFF;
+}
+.avatar-uploader-icon {
+ line-height: 90px;
+ font-size: 28px;
+ color: #8c939d;
+ width: $image-width;
+ height: $image-width;
+ text-align: center;
+}
+.avatar {
+ width: 100% !important;
+ height: auto !important;
+ display: block;
+}
+.tips-style {
+ height: 13px;
+ font-size: 13px;
+ font-weight: 400;
+ color: #999999;
+ line-height: 13px;
+}
+</style>
+<style lang="scss" scoped>
+::v-deep .el-upload--picture-card{
+ width: 90px !important;
+ height: 90px !important;
+}
+::v-deep .el-upload-list__item {
+ width: 90px !important;
+ height: 90px !important;
+}
+.icon {
+ -webkit-transform: translate(-50%,-50%);
+ -ms-transform: translate(-50%,-50%);
+ transform: translate(0%, -85%);
+}
+::v-deep .el-upload-list__item {
+ width: 90px !important;
+ height: 90px !important;
+}
+</style>
diff --git a/admin/src/views/business/cases.vue b/admin/src/views/business/cases.vue
new file mode 100644
index 0000000..6024fbd
--- /dev/null
+++ b/admin/src/views/business/cases.vue
@@ -0,0 +1,159 @@
+<template>
+ <TableLayout :permissions="['business:cases:query']">
+ <!-- 鎼滅储琛ㄥ崟 -->
+ <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+ <el-form-item label="鏍囬" prop="name">
+ <el-input v-model="searchForm.name" style="width: 150px" placeholder="璇疯緭鍏ユ爣棰�" @keypress.enter.native="search"></el-input>
+ </el-form-item>
+ <el-form-item label="鑰佸笀" prop="memberId">
+ <el-select
+ v-model="searchForm.memberId"
+ style="width: 150px"
+ placeholder="鑰佸笀"
+ clearable
+ filterable
+ @change="search"
+ >
+ <el-option
+ v-for="item in memberList"
+ :key="item.id"
+ :value="item.id"
+ :label="item.name"
+ ></el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="鐘舵��" prop="status">
+ <el-select
+ v-model="searchForm.status"
+ placeholder="鐘舵��"
+ clearable
+ style="width: 150px"
+ @change="search"
+ >
+ <el-option :key="0" :value="0" label="鍚敤"></el-option>
+ <el-option :key="1" :value="1" label="绂佺敤"></el-option>
+ </el-select>
+ </el-form-item>
+ <section>
+ <el-button type="primary" @click="search">鎼滅储</el-button>
+ <el-button @click="reset">閲嶇疆</el-button>
+ </section>
+ </el-form>
+ <!-- 琛ㄦ牸鍜屽垎椤� -->
+ <template v-slot:table-wrap>
+ <ul class="toolbar" v-permissions="['business:cases:create', 'business:cases:delete']">
+ <li><el-button type="primary" @click="$refs.operaCasesWindow.open('鏂板缓妗堜緥',null)" icon="el-icon-plus" v-permissions="['business:cases:create']">鏂板缓</el-button></li>
+ <li><el-button type="primary" icon="el-icon-refresh" v-permissions="['business:cases:create']" @click="$refs.OperaCasesImportWindow.open('妗堜緥瀵煎叆')">鎵归噺瀵煎叆</el-button></li>
+ <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:cases:delete']">鍒犻櫎</el-button></li>
+ </ul>
+ <el-table
+ :height="tableHeightNew"
+ v-loading="isWorking.search"
+ :data="tableData.list"
+ stripe
+ @selection-change="handleSelectionChange"
+ >
+ <el-table-column type="selection" width="55"></el-table-column>
+ <el-table-column prop="name" label="妗堜緥鏍囬" min-width="100px"></el-table-column>
+ <el-table-column prop="icon" label="鎺掕姒滃浘闆�" min-width="220px">
+ <template slot-scope="{row}">
+ <div style="display: flex; flex-wrap: wrap;width: 200px;" v-if="row.fileList && row.fileList.length">
+ <div v-for="item in row.fileList" :key="row.id+'_img'+item.id" style=" box-sizing: border-box; margin-right: 10px; " >
+ <el-image style="width: 50px; height: 50px;" :src="item.url"
+ :preview-src-list="[item.url]">
+ </el-image>
+ </div>
+ </div>
+ </template>
+ </el-table-column>
+ <el-table-column prop="memberName" label="鑰佸笀" min-width="120px"></el-table-column>
+ <el-table-column prop="startDate" label="寮�濮嬫棩鏈�" min-width="140px"></el-table-column>
+ <el-table-column prop="endDate" label="缁撴潫鏃ユ湡" min-width="140px"></el-table-column>
+ <el-table-column prop="detail" label="妗堜緥鎻忚堪" min-width="230px" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="updateUserName" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
+ <el-table-column prop="updateTime" label="鏈�杩戞搷浣滄椂闂�" min-width="150px"></el-table-column>
+ <el-table-column label="鐘舵��" fixed="right">
+ <template slot-scope="{row}">
+ <el-switch @change="changeStatus($event, row)" v-model="row.status" active-color="#13ce66"
+ inactive-color="#ff4949" :active-value="0" :inactive-value="1">
+ </el-switch>
+ </template>
+ </el-table-column>
+ <el-table-column
+ v-if="containPermissions(['business:cases:update', 'business:cases:delete'])"
+ label="鎿嶄綔"
+ min-width="120"
+ fixed="right"
+ >
+ <template slot-scope="{row}">
+ <el-button type="text" @click="$refs.operaCasesWindow.open('缂栬緫妗堜緥', row)" icon="el-icon-edit" v-permissions="['business:cases:update']">缂栬緫</el-button>
+ <el-button type="text" style="color: red" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:cases:delete']">鍒犻櫎</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <pagination
+ @size-change="handleSizeChange"
+ @current-change="handlePageChange"
+ :pagination="tableData.pagination"
+ >
+ </pagination>
+ </template>
+ <!-- 鏂板缓/淇敼 -->
+ <OperaCasesWindow ref="operaCasesWindow" @success="search"/>
+ <OperaCasesImportWindow ref="OperaCasesImportWindow" @success="handlePageChange" />
+ </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import Pagination from '@/components/common/Pagination'
+import OperaCasesWindow from '@/components/business/OperaCasesWindow'
+import OperaCasesImportWindow from '@/components/business/OperaCasesImportWindow'
+import { findAll as memberList } from '@/api/business/member'
+export default {
+ name: 'cases',
+ extends: BaseTable,
+ components: { TableLayout, Pagination, OperaCasesWindow ,OperaCasesImportWindow},
+ data () {
+ return {
+ // 鎼滅储
+ searchForm: {
+ name: '',
+ memberId: '',
+ status: null
+ },
+ memberList:[]
+ }
+ },
+ created () {
+ this.config({
+ module: '妗堜緥淇℃伅琛�',
+ api: '/business/cases',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ this.search()
+ memberList({
+ }).then(res => {
+ this.memberList = res
+ })
+ },
+ methods: {
+ changeStatus (e, row) {
+ this.working = true
+ this.api.updateStatus({ id: row.id, status: e })
+ .then(res => {
+ this.$tip.apiSuccess(res || '鎿嶄綔鎴愬姛')
+ this.handlePageChange()
+ })
+ .catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.working = false
+ })
+ }
+ }
+}
+</script>
diff --git a/admin/src/views/business/member.vue b/admin/src/views/business/member.vue
index 163e799..b8804e8 100644
--- a/admin/src/views/business/member.vue
+++ b/admin/src/views/business/member.vue
@@ -17,7 +17,7 @@
@change="search"
>
<el-option
- v-for="item in cateList"
+ v-for="item in cateList.filter(item=>{return item.type==0})"
:key="item.id"
:value="item.id"
:label="item.name"
@@ -33,7 +33,7 @@
@change="search"
>
<el-option
- v-for="item in cateList1"
+ v-for="item in cateList.filter(item=>{return item.type==1})"
:key="item.id"
:value="item.id"
:label="item.name"
@@ -50,7 +50,7 @@
@change="search"
>
<el-option
- v-for="item in cateList2"
+ v-for="item in cateList.filter(item=>{return item.type==2})"
:key="item.id"
:value="item.id"
:label="item.name"
@@ -66,7 +66,7 @@
@change="search"
>
<el-option
- v-for="item in cateList3"
+ v-for="item in cateList.filter(item=>{return item.type==3})"
:key="item.id"
:value="item.id"
:label="item.name"
@@ -154,15 +154,16 @@
</div>
</template>
</el-table-column>
- <el-table-column label="鐘舵��">
+ <el-table-column prop="fee" label="璐圭敤鏍囧噯(鍏�/鍛�)" min-width="130px"></el-table-column>
+ <el-table-column prop="updateUserName" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
+ <el-table-column prop="updateTime" label="鏈�杩戞搷浣滄椂闂�" min-width="150px"></el-table-column>
+ <el-table-column label="鐘舵��" fixed="right">
<template slot-scope="{row}">
<el-switch @change="changeStatus($event, row)" v-model="row.status" active-color="#13ce66"
- inactive-color="#ff4949" :active-value="0" :inactive-value="1">
+ inactive-color="#ff4949" :active-value="0" :inactive-value="1">
</el-switch>
</template>
</el-table-column>
- <el-table-column prop="updateUserName" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
- <el-table-column prop="updateTime" label="鏈�杩戞搷浣滄椂闂�" min-width="150px"></el-table-column>
<el-table-column
v-if="containPermissions(['business:member:update', 'business:member:delete'])"
label="鎿嶄綔"
@@ -213,10 +214,7 @@
bustypeIds:null,
type: 0
},
- cateList:[],
- cateList1:[],
- cateList2:[],
- cateList3:[],
+ cateList:[]
}
},
created () {
@@ -228,25 +226,10 @@
})
this.search()
cateList({
- type: 0 , //鎴樺尯
}).then(res => {
this.cateList = res
})
- cateList({
- type: 1 , //鍟嗕笟鍖�
- }).then(res => {
- this.cateList1 = res
- })
- cateList({
- type: 2 , //鎿呴暱棰嗙敤
- }).then(res => {
- this.cateList2 = res
- })
- cateList({
- type: 3 , //绛夌骇
- }).then(res => {
- this.cateList3 = res
- })
+
},
methods: {
changeStatus (e, row) {
@@ -254,7 +237,7 @@
this.api.updateStatus({ id: row.id, status: e })
.then(res => {
this.$tip.apiSuccess(res || '鎿嶄綔鎴愬姛')
- this.search()
+ this.handlePageChange()
})
.catch(e => {
this.$tip.apiFailed(e)
diff --git a/server/admin/src/main/java/com/doumee/api/business/CasesController.java b/server/admin/src/main/java/com/doumee/api/business/CasesController.java
index 189272b..bf460f9 100644
--- a/server/admin/src/main/java/com/doumee/api/business/CasesController.java
+++ b/server/admin/src/main/java/com/doumee/api/business/CasesController.java
@@ -8,6 +8,7 @@
import com.doumee.core.model.PageWrap;
import com.doumee.dao.business.model.Cases;
import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.model.Member;
import com.doumee.service.business.CasesService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@@ -45,7 +46,13 @@
casesService.deleteById(id);
return ApiResponse.success(null);
}
-
+ @ApiOperation("淇敼鐘舵��")
+ @PostMapping("/updateStatus")
+ @RequiresPermissions("business:cases:update")
+ public ApiResponse updateStatus( @RequestBody Cases param) {
+ casesService.updateStatus(param);
+ return ApiResponse.success(null);
+ }
@ApiOperation("鎵归噺鍒犻櫎")
@GetMapping("/delete/batch")
@RequiresPermissions("business:cases:delete")
diff --git a/server/admin/src/main/java/com/doumee/api/business/MemberController.java b/server/admin/src/main/java/com/doumee/api/business/MemberController.java
index 42bf73a..31d00f0 100644
--- a/server/admin/src/main/java/com/doumee/api/business/MemberController.java
+++ b/server/admin/src/main/java/com/doumee/api/business/MemberController.java
@@ -6,6 +6,7 @@
import com.doumee.core.model.ApiResponse;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.Category;
import com.doumee.dao.business.model.Member;
import com.doumee.core.utils.Utils;
import com.doumee.service.business.MemberService;
@@ -19,6 +20,7 @@
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
+import java.util.List;
/**
* 浼氬憳淇℃伅琛–ontroller瀹氫箟
@@ -64,13 +66,25 @@
memberService.updateById(member);
return ApiResponse.success(null);
}
-
+ @ApiOperation("淇敼鐘舵��")
+ @PostMapping("/updateStatus")
+ @RequiresPermissions("business:member:update")
+ public ApiResponse updateStatus( @RequestBody Member param) {
+ memberService.updateStatus(param);
+ return ApiResponse.success(null);
+ }
@ApiOperation("鍒嗛〉鏌ヨ")
@PostMapping("/page")
@RequiresPermissions("business:member:query")
public ApiResponse<PageData<Member>> findPage (@RequestBody PageWrap<Member> pageWrap) {
return ApiResponse.success(memberService.findPage(pageWrap));
}
+ @ApiOperation("鍒嗛〉鏌ヨ")
+ @PostMapping("/list")
+ @RequiresPermissions("business:member:query")
+ public ApiResponse<List<Member>> findList (@RequestBody Member pageWrap) {
+ return ApiResponse.success(memberService.findList(pageWrap));
+ }
@ApiOperation("瀵煎嚭Excel")
@PostMapping("/exportExcel")
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Cases.java b/server/services/src/main/java/com/doumee/dao/business/model/Cases.java
index 3cb4f9e..65a307e 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Cases.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Cases.java
@@ -11,6 +11,8 @@
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
import java.math.BigDecimal;
+import java.util.List;
+
/**
* 鍒嗙被淇℃伅琛∕odel瀹氫箟
* @author doumee
@@ -66,9 +68,11 @@
private String imgurl;
@ApiModelProperty("寮�濮嬫椂闂�")
@ExcelColumn(name="寮�濮嬫椂闂�",index=13 ,width=10)
+ @JsonFormat(pattern = "yyyy-MM-dd")
private Date startDate;
@ApiModelProperty("缁撴潫鏃堕棿")
@ExcelColumn(name="缁撴潫鏃堕棿",index=14 ,width=10)
+ @JsonFormat(pattern = "yyyy-MM-dd")
private Date endDate;
@ApiModelProperty("鎺掑簭鐮侊紙鍗囧簭浣跨敤锛�")
@ExcelColumn(name="鎺掑簭鐮侊紙鍗囧簭浣跨敤锛�",index=15 ,width=10)
@@ -79,4 +83,13 @@
@ApiModelProperty("瀵煎叆璁板綍缂栫爜锛堝叧鑱攊mport_record)")
@ExcelColumn(name="瀵煎叆璁板綍缂栫爜锛堝叧鑱攊mport_record)",index=17 ,width=10)
private Integer importId;
+ @ApiModelProperty(value = "鑰佸笀濮撳悕", example = "1")
+ @TableField(exist = false)
+ private String memberName ;
+ @ApiModelProperty(value = "鍥鹃泦闄勪欢闆嗗悎", example = "1")
+ @TableField(exist = false)
+ private List<Multifile> fileList;
+ @ApiModelProperty(value = "鏈�鍚庢搷浣滀汉鍛橈紱", example = "1")
+ @TableField(exist = false)
+ private String updateUserName;
}
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Member.java b/server/services/src/main/java/com/doumee/dao/business/model/Member.java
index b39296c..a39b833 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Member.java
@@ -157,6 +157,12 @@
@ApiModelProperty("鎿呴暱棰嗗煙")
@TableField(exist = false)
private List<Integer> fieldIdList;
+ @ApiModelProperty("鍟嗕笟鍖栫被鍨嬬紪鐮侀泦鍚�")
+ @TableField(exist = false)
+ private List<Integer> bustypeIdList;
+ @ApiModelProperty("鎴樺尯缂栫爜闆嗗悎")
+ @TableField(exist = false)
+ private List<Integer> zhanquIdList;
@ApiModelProperty("鎴樺尯闆嗗悎")
@TableField(exist = false)
private List<Category> zqList;
diff --git a/server/services/src/main/java/com/doumee/service/business/CasesService.java b/server/services/src/main/java/com/doumee/service/business/CasesService.java
index 6d32f67..6a83c22 100644
--- a/server/services/src/main/java/com/doumee/service/business/CasesService.java
+++ b/server/services/src/main/java/com/doumee/service/business/CasesService.java
@@ -26,7 +26,7 @@
* @param id 涓婚敭
*/
void deleteById(Integer id);
-
+ void updateStatus(Cases cases);
/**
* 鍒犻櫎
*
diff --git a/server/services/src/main/java/com/doumee/service/business/MemberService.java b/server/services/src/main/java/com/doumee/service/business/MemberService.java
index bc604e3..28270d4 100644
--- a/server/services/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/services/src/main/java/com/doumee/service/business/MemberService.java
@@ -49,7 +49,7 @@
* @param model 瀹炰綋瀵硅薄
*/
void updateById(Member model);
-
+ void updateStatus(Member member);
/**
* 鎵归噺涓婚敭鏇存柊
*
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/CasesServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/CasesServiceImpl.java
index 63235c9..74b8099 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/CasesServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/CasesServiceImpl.java
@@ -1,20 +1,37 @@
package com.doumee.service.business.impl;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.constants.Constants;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.MultifileMapper;
import com.doumee.dao.business.model.Cases;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.CasesMapper;
+import com.doumee.dao.business.model.Category;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Multifile;
+import com.doumee.dao.system.model.SystemUser;
import com.doumee.service.business.CasesService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
+import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
+import java.util.Objects;
/**
* 鍒嗙被淇℃伅琛⊿ervice瀹炵幇
@@ -25,19 +42,78 @@
public class CasesServiceImpl implements CasesService {
@Autowired
+ private SystemDictDataBiz systemDictDataBiz;
+ @Autowired
private CasesMapper casesMapper;
+ @Autowired
+ private MultifileMapper multifileMapper;
@Override
+ @Transactional
public Integer create(Cases cases) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ if(StringUtils.isBlank(cases.getName())
+ ||StringUtils.isBlank(cases.getDetail())
+ ||cases.getStartDate()==null
+ ||cases.getEndDate()==null ){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ cases.setDeleted(Constants.ZERO);
+ cases.setCreateTime(new Date());
+ cases.setCreateUser(loginUserInfo.getId());
+ cases.setUpdateTime(new Date());
+ cases.setUpdateUser(loginUserInfo.getId());
casesMapper.insert(cases);
+ dealBatchMultiFiles(cases, cases.getFileList(), loginUserInfo,true);
return cases.getId();
}
-
+ public void dealBatchMultiFiles(Cases category, List<Multifile> fileList, LoginUserInfo user,boolean update) {
+ Date today = new Date();
+ //娓呯┖鍘熸湁鐨�
+ if(update){
+ multifileMapper.delete(new UpdateWrapper<Multifile>().lambda()
+ .eq(Multifile::getIsdeleted,Constants.ZERO)
+ .eq(Multifile::getObjType,Constants.ONE)
+ .eq(Multifile::getObjId,category.getId()));
+ }
+ if(fileList!=null && fileList.size()>0){
+ List<Multifile> multifileList = new ArrayList<>();
+ fileList.stream().forEach(s -> {
+ if(StringUtils.isNotBlank(s.getFileurl())){
+ s.setIsdeleted(Constants.ZERO);
+ s.setCreator(user.getId());
+ s.setCreateDate(today);
+ s.setObjId(category.getId());
+ s.setType(Constants.ZERO);
+ s.setObjType(Constants.ONE);
+ multifileList.add(s);
+ }
+ });
+ if(multifileList.size()>0){
+ multifileMapper.insert(multifileList);
+ }
+ }
+ }
@Override
public void deleteById(Integer id) {
- casesMapper.deleteById(id);
+ Cases cases =new Cases();
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ cases.setUpdateTime(new Date());
+ cases.setId(id);
+ cases.setUpdateUser(loginUserInfo.getId());
+ cases.setDeleted(Constants.ONE);
+ casesMapper.updateById(cases);
}
-
+ @Override
+ public void updateStatus(Cases cases) {
+ if(Objects.isNull(cases) || Objects.isNull(cases.getId())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ cases.setUpdateTime(new Date());
+ cases.setUpdateUser(loginUserInfo.getId());
+ casesMapper.updateById(cases);
+ }
@Override
public void delete(Cases cases) {
UpdateWrapper<Cases> deleteWrapper = new UpdateWrapper<>(cases);
@@ -49,12 +125,25 @@
if (CollectionUtils.isEmpty(ids)) {
return;
}
- casesMapper.deleteBatchIds(ids);
+ for(Integer id : ids){
+ this.deleteById(id);
+ }
}
@Override
public void updateById(Cases cases) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ if(StringUtils.isBlank(cases.getName())
+ ||StringUtils.isBlank(cases.getDetail())
+ ||cases.getStartDate()==null
+ ||cases.getEndDate()==null ){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ cases.setDeleted(Constants.ZERO);
+ cases.setUpdateTime(new Date());
+ cases.setUpdateUser(loginUserInfo.getId());
casesMapper.updateById(cases);
+ dealBatchMultiFiles(cases, cases.getFileList(), loginUserInfo,true);
}
@Override
@@ -83,49 +172,59 @@
QueryWrapper<Cases> wrapper = new QueryWrapper<>(cases);
return casesMapper.selectList(wrapper);
}
-
+
@Override
public PageData<Cases> findPage(PageWrap<Cases> pageWrap) {
IPage<Cases> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
- QueryWrapper<Cases> queryWrapper = new QueryWrapper<>();
+ MPJLambdaWrapper<Cases> queryWrapper = new MPJLambdaWrapper<>();
+ queryWrapper.selectAll(Cases.class)
+ .selectAs(Member::getName,Cases::getMemberName)
+ .selectAs(SystemUser::getRealname, Member::getUpdateUserName)
+ .leftJoin(SystemUser.class,SystemUser::getId,Cases::getUpdateUser)
+ .leftJoin(Member.class,Member::getId,Cases::getMemberId);
Utils.MP.blankToNull(pageWrap.getModel());
- queryWrapper.lambda().eq(pageWrap.getModel().getId() != null,Cases::getId, pageWrap.getModel().getId());
- queryWrapper.lambda().eq(pageWrap.getModel().getDeleted() != null,Cases::getDeleted, pageWrap.getModel().getDeleted());
- queryWrapper.lambda().eq(pageWrap.getModel().getCreateUser() != null,Cases::getCreateUser, pageWrap.getModel().getCreateUser());
- if (pageWrap.getModel().getId() != null) {
- queryWrapper.lambda().ge(Cases::getCreateTime, Utils.Date.getStart(pageWrap.getModel().getCreateTime()));
- queryWrapper.lambda().le(Cases::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateTime()));
- }
- queryWrapper.lambda().eq(pageWrap.getModel().getUpdateUser() != null,Cases::getUpdateUser, pageWrap.getModel().getUpdateUser());
- if (pageWrap.getModel().getId() != null) {
- queryWrapper.lambda().ge(Cases::getUpdateTime, Utils.Date.getStart(pageWrap.getModel().getUpdateTime()));
- queryWrapper.lambda().le(Cases::getUpdateTime, Utils.Date.getEnd(pageWrap.getModel().getUpdateTime()));
- }
- queryWrapper.lambda().eq(pageWrap.getModel().getRemark() != null,Cases::getRemark, pageWrap.getModel().getRemark());
- queryWrapper.lambda().eq(pageWrap.getModel().getStatus() != null,Cases::getStatus, pageWrap.getModel().getStatus());
- queryWrapper.lambda().eq(pageWrap.getModel().getName() != null,Cases::getName, pageWrap.getModel().getName());
- queryWrapper.lambda().eq(pageWrap.getModel().getMemberId() != null,Cases::getMemberId, pageWrap.getModel().getMemberId());
- queryWrapper.lambda().eq(pageWrap.getModel().getDetail() != null,Cases::getDetail, pageWrap.getModel().getDetail());
- queryWrapper.lambda().eq(pageWrap.getModel().getImgurl() != null,Cases::getImgurl, pageWrap.getModel().getImgurl());
- if (pageWrap.getModel().getId() != null) {
- queryWrapper.lambda().ge(Cases::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate()));
- queryWrapper.lambda().le(Cases::getStartDate, Utils.Date.getEnd(pageWrap.getModel().getStartDate()));
- }
- if (pageWrap.getModel().getId() != null) {
- queryWrapper.lambda().ge(Cases::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDate()));
- queryWrapper.lambda().le(Cases::getEndDate, Utils.Date.getEnd(pageWrap.getModel().getEndDate()));
- }
- queryWrapper.lambda().eq(pageWrap.getModel().getSortnum() != null,Cases::getSortnum, pageWrap.getModel().getSortnum());
- queryWrapper.lambda().eq(pageWrap.getModel().getAddType() != null,Cases::getAddType, pageWrap.getModel().getAddType());
- queryWrapper.lambda().eq(pageWrap.getModel().getImportId() != null,Cases::getImportId, pageWrap.getModel().getImportId());
- for(PageWrap.SortData sortData: pageWrap.getSorts()) {
- if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
- queryWrapper.orderByDesc(sortData.getProperty());
- } else {
- queryWrapper.orderByAsc(sortData.getProperty());
+ queryWrapper.eq(pageWrap.getModel().getId() != null,Cases::getId, pageWrap.getModel().getId());
+ queryWrapper.eq(pageWrap.getModel().getDeleted() != null,Cases::getDeleted, pageWrap.getModel().getDeleted());
+ queryWrapper.eq(pageWrap.getModel().getCreateUser() != null,Cases::getCreateUser, pageWrap.getModel().getCreateUser());
+ queryWrapper.eq(pageWrap.getModel().getUpdateUser() != null,Cases::getUpdateUser, pageWrap.getModel().getUpdateUser());
+ queryWrapper.eq(pageWrap.getModel().getRemark() != null,Cases::getRemark, pageWrap.getModel().getRemark());
+ queryWrapper.eq(pageWrap.getModel().getStatus() != null,Cases::getStatus, pageWrap.getModel().getStatus());
+ queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName() ),Cases::getName, pageWrap.getModel().getName());
+ queryWrapper.eq(pageWrap.getModel().getMemberId() != null,Cases::getMemberId, pageWrap.getModel().getMemberId());
+ queryWrapper.eq(pageWrap.getModel().getDetail() != null,Cases::getDetail, pageWrap.getModel().getDetail());
+ queryWrapper.eq(pageWrap.getModel().getImgurl() != null,Cases::getImgurl, pageWrap.getModel().getImgurl());
+ queryWrapper.eq(pageWrap.getModel().getSortnum() != null,Cases::getSortnum, pageWrap.getModel().getSortnum());
+ queryWrapper.eq(pageWrap.getModel().getAddType() != null,Cases::getAddType, pageWrap.getModel().getAddType());
+ queryWrapper.eq(pageWrap.getModel().getImportId() != null,Cases::getImportId, pageWrap.getModel().getImportId());
+ queryWrapper.orderByDesc(Cases::getId);
+ PageData<Cases> result =PageData.from(casesMapper.selectJoinPage(page, Cases.class,queryWrapper));
+ if(result!=null && result.getRecords()!=null){
+ String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH).getCode()
+ +systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.CASES_FILES).getCode();
+ for(Cases cate : result.getRecords()){
+ initMultifileList(cate);
}
}
- return PageData.from(casesMapper.selectPage(page, queryWrapper));
+ return result;
+ }
+ private void initMultifileList(Cases cate) {
+ String path = systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.RESOURCE_PATH).getCode()
+ + systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE, Constants.CATEGORY_FILES).getCode();
+
+ Multifile find = new Multifile();
+ find.setObjId(cate.getId());
+ find.setObjType(Constants.ONE);
+ find.setIsdeleted(Constants.ZERO);
+ List<Multifile> fileList= multifileMapper.selectList(new QueryWrapper<>(find));
+ if(fileList!=null){
+ for(Multifile f : fileList){
+ if(StringUtils.isNotBlank(f.getFileurl())){
+ f.setUrl(path+f.getFileurl());
+ }
+
+ }
+ }
+ cate.setFileList(fileList);
}
@Override
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
index 0ce16ed..29bc62f 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/CategoryServiceImpl.java
@@ -190,7 +190,7 @@
Utils.MP.blankToNull(pageWrap.getModel());
pageWrap.getModel().setDeleted(Constants.ZERO);
queryWrapper.selectAll(Category.class)
- .selectAs(SystemUser::getUsername, Category::getUpdateUserName)
+ .selectAs(SystemUser::getRealname, Category::getUpdateUserName)
.leftJoin(SystemUser.class,SystemUser::getId,Category::getUpdateUser);
if (pageWrap.getModel().getId() != null) {
queryWrapper.eq(Category::getId, pageWrap.getModel().getId());
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/ImportRecordServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/ImportRecordServiceImpl.java
index 37fcaa0..1503157 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/ImportRecordServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/ImportRecordServiceImpl.java
@@ -448,6 +448,8 @@
systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.ACCESS_ID).getCode(),
systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.ACCESS_KEY).getCode());
for(Member param: importRecord.getMemberList()){
+ param.setImportId(importRecord.getId());
+ param.setAddType(Constants.ONE);
success += dealMemberInsert(obs,param,folder,nowDate,bucket);
}
obs.shutDown();
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index ced4289..24521a0 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -8,6 +8,7 @@
import com.doumee.core.constants.Constants;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.DateUtil;
@@ -24,7 +25,9 @@
import com.doumee.service.business.MemberService;
import com.github.xiaoymin.knife4j.core.util.CollectionUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import io.swagger.models.auth.In;
import org.apache.commons.lang3.StringUtils;
+import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -58,13 +61,64 @@
@Override
public Integer create(Member member) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ if(StringUtils.isBlank(member.getCode())
+ ||StringUtils.isBlank(member.getName())
+ ||StringUtils.isBlank(member.getImgurl())
+ ||StringUtils.isBlank(member.getContent())
+ ||member.getZhanquIdList()==null
+ ||member.getZhanquIdList().size()==0
+ ||member.getBustypeIdList()==null
+ ||member.getBustypeIdList().size()==0
+ ||member.getFieldIdList()==null
+ ||member.getFieldIdList().size()==0
+ ||member.getLevelId()==null ){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
+ .eq(Member::getCode,member.getCode())
+ .eq(Member::getDeleted,Constants.ZERO)
+ .eq(Member::getType,member.getType()))>0 ){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"宸ュ彿宸插瓨鍦紝璇风‘璁ゅ悗閲嶆柊褰曞叆");
+ }
+ member.setDeleted(Constants.ZERO);
+ member.setCreateTime(new Date());
+ member.setCreateUser(loginUserInfo.getId());
+ member.setUpdateTime(new Date());
+ member.setUpdateUser(loginUserInfo.getId());
+ member.setZhanquIds(getIdsStrFromList(member.getZhanquIdList()));
+ member.setFieldIds(getIdsStrFromList(member.getFieldIdList()));
+ member.setBustypeIds(getIdsStrFromList(member.getBustypeIdList()));
memberMapper.insert(member);
+
return member.getId();
+ }
+
+ private String getIdsStrFromList(List<Integer> zhanquIdList) {
+ String t = "";
+ if(zhanquIdList!=null && zhanquIdList.size()>0){
+ for (int i = 0; i < zhanquIdList.size(); i++) {
+ if(zhanquIdList.get(i)==null){
+ continue;
+ }
+ if(StringUtils.isNotBlank(t)){
+ t+=",";
+ }
+ t+="["+zhanquIdList.get(i)+"]";
+ }
+ }
+ return t;
}
@Override
public void deleteById(Integer id) {
- memberMapper.deleteById(id);
+ Member member =new Member();
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ member.setUpdateTime(new Date());
+ member.setId(id);
+ member.setUpdateUser(loginUserInfo.getId());
+ member.setDeleted(Constants.ONE);
+ memberMapper.updateById(member);
}
@Override
@@ -72,17 +126,56 @@
UpdateWrapper<Member> deleteWrapper = new UpdateWrapper<>(member);
memberMapper.delete(deleteWrapper);
}
-
+ @Override
+ public void updateStatus(Member member) {
+ if(Objects.isNull(member) || Objects.isNull(member.getId())){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ member.setUpdateTime(new Date());
+ member.setUpdateUser(loginUserInfo.getId());
+ memberMapper.updateById(member);
+ }
@Override
public void deleteByIdInBatch(List<Integer> ids) {
if (CollectionUtils.isEmpty(ids)) {
return;
}
- memberMapper.deleteBatchIds(ids);
+ for(Integer id : ids){
+ this.deleteById(id);
+ }
}
@Override
public void updateById(Member member) {
+ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
+ if(StringUtils.isBlank(member.getCode())
+ ||StringUtils.isBlank(member.getName())
+ ||StringUtils.isBlank(member.getImgurl())
+ ||StringUtils.isBlank(member.getContent())
+ ||member.getId()==null
+ ||member.getZhanquIdList()==null
+ ||member.getZhanquIdList().size()==0
+ ||member.getBustypeIdList()==null
+ ||member.getBustypeIdList().size()==0
+ ||member.getFieldIdList()==null
+ ||member.getFieldIdList().size()==0
+ ||member.getLevelId()==null ){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ if(memberMapper.selectCount(new QueryWrapper<Member>().lambda()
+ .eq(Member::getCode,member.getCode())
+ .ne(Member::getId,member.getId())
+ .eq(Member::getDeleted,Constants.ZERO)
+ .eq(Member::getType,member.getType()))>0 ){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"宸ュ彿宸插瓨鍦紝璇风‘璁ゅ悗閲嶆柊褰曞叆");
+ }
+ member.setUpdateTime(new Date());
+ member.setUpdateUser(loginUserInfo.getId());
+ member.setAddType(Constants.ZERO);
+ member.setZhanquIds(getIdsStrFromList(member.getZhanquIdList()));
+ member.setFieldIds(getIdsStrFromList(member.getFieldIdList()));
+ member.setBustypeIds(getIdsStrFromList(member.getBustypeIdList()));
memberMapper.updateById(member);
}
@@ -109,6 +202,7 @@
@Override
public List<Member> findList(Member member) {
+ member.setDeleted(Constants.ZERO);
QueryWrapper<Member> wrapper = new QueryWrapper<>(member);
return memberMapper.selectList(wrapper);
}
@@ -129,13 +223,14 @@
.like(StringUtils.isNotBlank(model.getName()),Member::getName, model.getName())
.eq(Objects.nonNull(model.getStatus()),Member::getStatus, model.getStatus())
.eq(Member::getDeleted, Constants.ZERO)
- .in(Objects.nonNull(model.getLevelId()),Member::getStatus, model.getStatus())
+ .in(Objects.nonNull(model.getLevelId()),Category::getId, model.getLevelId())
.eq(Objects.nonNull(model.getCode()),Member::getCode, model.getCode())
.orderByDesc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.ZERO),Member::getFee)
.orderByAsc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.ONE),Member::getFee)
.orderByDesc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.TWO),Category::getDetail)
.orderByAsc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.THREE),Category::getDetail)
.orderByDesc(Objects.nonNull(model.getOrderByType())&&Constants.equalsInteger(model.getOrderByType(), Constants.FOUR),Member::getServeNum)
+ .orderByDesc(Member::getId)
;
if(Constants.equalsInteger(pageWrap.getModel().getQueryFlag(),Constants.ONE)){
queryWrapper.select("(select count(c.id) from cases c where c.deleted=0 and c.member_id=t.id)",Member::getCaseNum);
@@ -175,8 +270,8 @@
}
}
member.setFullImgurl(StringUtils.isNotBlank(member.getImgurl())?(path + member.getImgurl()):"");
- if(StringUtils.isBlank(roleConfig)||StringUtils.isBlank(model.getQueryUserRole())
- || !roleConfig.contains(model.getQueryUserRole())){
+ if(!Constants.equalsInteger(pageWrap.getModel().getQueryFlag(),Constants.ONE) && (StringUtils.isBlank(roleConfig)||StringUtils.isBlank(model.getQueryUserRole())
+ || !roleConfig.contains(model.getQueryUserRole()))){
member.setFee(null);
}
if(member.getJobYear()!=null){
@@ -188,6 +283,9 @@
}
private void dealMemberCategoryList(Member member, List<Category> categoryList) {
+ member.setFieldIdList(new ArrayList<>());
+ member.setBustypeIdList(new ArrayList<>());
+ member.setZhanquIdList(new ArrayList<>());
member.setFieldList(new ArrayList<>());
member.setTypeList(new ArrayList<>());
member.setZqList(new ArrayList<>());
@@ -196,14 +294,17 @@
if(Constants.equalsInteger(c.getType(),Constants.ZERO)&& StringUtils.contains(member.getZhanquIds(),"["+c.getId()+"]")){
//鎴樺尯
member.getZqList().add(c);
+ member.getZhanquIdList().add(c.getId());
}
if(Constants.equalsInteger(c.getType(),Constants.ONE)&& StringUtils.contains(member.getBustypeIds(),"["+c.getId()+"]")){
//鍟嗕笟鍖�
member.getTypeList().add(c);
+ member.getBustypeIdList().add(c.getId());
}
if(Constants.equalsInteger(c.getType(),Constants.TWO) && StringUtils.contains(member.getFieldIds(),"["+c.getId()+"]")){
//鎿呴暱棰嗗煙
member.getFieldList().add(c);
+ member.getFieldIdList().add(c.getId());
}
}
}
--
Gitblit v1.9.3