From ccf28d1fed1aa2e5437dbe64b5133ba1cbde6ec7 Mon Sep 17 00:00:00 2001 From: renkang <8417338+k94314517@user.noreply.gitee.com> Date: 星期五, 03 一月 2025 15:30:52 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- admin/src/views/contract/components/contractEdit.vue | 235 ++++++++------ server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java | 2 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java | 3 h5/pages/polling/detail.vue | 54 ++ h5/pages/workOrder/edit.vue | 9 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java | 45 +- admin/src/views/Inspection/task.vue | 2 h5/pages/operation/device.vue | 20 + server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java | 14 h5/pages/index.vue | 26 h5/pages/login.vue | 2 admin/src/views/contract/components/contractDetail.vue | 4 admin/src/views/workorder/components/detail.vue | 72 +++- h5/pages/polling/task.vue | 21 + h5/static/plan_ic_finish@2x.png | 0 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java | 7 h5/pages/workOrder/detail.vue | 153 +++++++- h5/pages/polling/point.vue | 74 ++-- server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java | 8 admin/src/views/workorder/workorderList.vue | 1 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java | 11 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java | 2 admin/src/views/Inspection/components/taskDetail.vue | 17 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java | 12 admin/src/views/business/areas.vue | 3 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java | 1 admin/.env.development | 7 admin/src/views/project/components/OperaYwRoomWindow.vue | 13 h5/utils/config.js | 4 admin/src/components/business/OperaAreasWindow.vue | 8 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 2 server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java | 9 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java | 3 admin/src/views/Inspection/plan.vue | 44 + h5/pages/workOrder/list.vue | 6 admin/.env.test | 4 h5/static/play.png | 0 admin/src/api/company.js | 4 admin/src/views/project/components/OperaYwBuildingWindow.vue | 12 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java | 12 admin/src/views/workorder/components/OperaYwWorkorderWindow.vue | 14 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java | 20 + 42 files changed, 646 insertions(+), 314 deletions(-) diff --git a/admin/.env.development b/admin/.env.development index e812482..dbb3c07 100644 --- a/admin/.env.development +++ b/admin/.env.development @@ -4,7 +4,10 @@ VUE_APP_CONTEXT_PATH = './' # VUE_APP_API_URL = 'http://localhost:10010' -# VUE_APP_API_URL = 'http://192.168.0.163:10010' -VUE_APP_API_URL = 'https://dmtest.ahapp.net/fn_admin' + +VUE_APP_API_URL = 'http://192.168.0.137:10010' + +# VUE_APP_API_URL = 'https://dmtest.ahapp.net/fn_admin' + # VUE_APP_API_URL = 'http://10.50.250.253:8088/gateway_interface' diff --git a/admin/.env.test b/admin/.env.test index 3201150..4da080a 100644 --- a/admin/.env.test +++ b/admin/.env.test @@ -4,10 +4,10 @@ # VUE_APP_API_URL = 'http://192.168.5.13/gateway_interface' # 浠诲悍 -# VUE_APP_API_URL = 'http://192.168.0.163:10010/' +VUE_APP_API_URL = 'http://192.168.0.137:10010/' # 钀嶅 # VUE_APP_API_URL = 'http://192.168.0.108:10010/' # 娴嬭瘯鏈嶅姟 -VUE_APP_API_URL = 'https://dmtest.ahapp.net/gateway_interface' +# VUE_APP_API_URL = 'https://dmtest.ahapp.net/gateway_interface' diff --git a/admin/src/api/company.js b/admin/src/api/company.js index 832abb0..ad54d7a 100644 --- a/admin/src/api/company.js +++ b/admin/src/api/company.js @@ -11,3 +11,7 @@ export function companyList (data) { return request.post('/visitsAdmin/cloudService/business/company/list', data) } +// 鍒楄〃 +export function companyListConstract (data) { + return request.post('/visitsAdmin/cloudService/business/company/listForConstract', data) +} diff --git a/admin/src/components/business/OperaAreasWindow.vue b/admin/src/components/business/OperaAreasWindow.vue index 2458dad..5cdd9cc 100644 --- a/admin/src/components/business/OperaAreasWindow.vue +++ b/admin/src/components/business/OperaAreasWindow.vue @@ -9,9 +9,12 @@ <el-form-item :label="form.type==1?'甯傚悕绉�':'鍘垮尯鍚嶇О'" prop="name"> <el-input v-model="form.name" :placeholder="form.type==1?'杈撳叆甯傚悕绉�':'杈撳叆鍘垮尯鍚嶇О'" v-trim/> </el-form-item> - <el-form-item label="鎺掑簭鐮�" prop="sortnum"> - <el-input v-model="form.sortnum" 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="sortnum"> + <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/> + </el-form-item>--> </el-form> </GlobalAlertWindow> </template> @@ -30,6 +33,7 @@ id: null, parentId: null, name: null, + code:null, sortnum: '0', type: null }, diff --git a/admin/src/views/Inspection/components/taskDetail.vue b/admin/src/views/Inspection/components/taskDetail.vue index 54b30a5..a357861 100644 --- a/admin/src/views/Inspection/components/taskDetail.vue +++ b/admin/src/views/Inspection/components/taskDetail.vue @@ -1,5 +1,5 @@ <template> - <GlobalWindow title="宸℃浠诲姟璇︽儏" :showConfirm="false" :visible.sync="isShowModal"> + <GlobalWindow title="宸℃浠诲姟璇︽儏" width="800px" :showConfirm="false" :visible.sync="isShowModal"> <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getDetail(1)" @clear="clear" /> <el-table v-loading="loading" :data="list" stripe> <el-table-column prop="pointName" label="宸℃鐐瑰悕绉�" min-width="100" show-overflow-tooltip /> @@ -11,12 +11,25 @@ </el-table-column> <el-table-column prop="realname" label="宸℃浜�" min-width="100" show-overflow-tooltip /> <el-table-column prop="editDate" label="宸℃鏃堕棿" min-width="100" show-overflow-tooltip /> - <el-table-column prop="" label="宸℃缁撴灉" min-width="100" show-overflow-tooltip> + <el-table-column prop="files" label="宸℃缁撴灉" min-width="100" show-overflow-tooltip > <template v-slot="{ row }"> <span class="gray" v-if="row.dealStatus == 0">姝e父</span> <span class="red" v-if="row.dealStatus == 1">寮傚父</span> </template> </el-table-column> + <el-table-column prop="" label="宸℃闄勪欢" min-width="100" show-overflow-tooltip> + <template v-slot="{ row }"> + <div class="value" v-if="row.multifileList != null && row.multifileList.length"> + <div v-for="item in row.multifileList" :key="item.id" style="display: inline;margin-right: 20px"> + <video v-if="item.fileurlFull && item.fileurlFull.endsWith('.mp4')" ref="videoRef" controls preload="auto" + style="width: 60px;height: 60px;object-fit: contain;" :src="item.fileurlFull" /> + <el-image v-else-if="item.fileurlFull" style="width:60px; height: 60px" :src="item.fileurlFull" + :preview-src-list="[item.fileurlFull]"> + </el-image> + </div> + </div> + </template> + </el-table-column> <el-table-column prop="dealInfo" label="宸℃璇存槑" min-width="100" show-overflow-tooltip /> </el-table> <div class="mt20"> diff --git a/admin/src/views/Inspection/plan.vue b/admin/src/views/Inspection/plan.vue index 421f804..31bd4c2 100644 --- a/admin/src/views/Inspection/plan.vue +++ b/admin/src/views/Inspection/plan.vue @@ -2,14 +2,17 @@ <TableLayout :permissions="['business:ywpatrolscheme:query']"> <!-- 鎼滅储琛ㄥ崟 --> <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> + <el-form-item label="寮�濮嬫棩鏈�" prop="selDate"> + <el-date-picker type="daterange" v-model="searchForm.selDate" @change="changeSelDate" clearable value-format="yyyy-MM-dd" + /> + </el-form-item> + <el-form-item label="缁撴潫鏃ユ湡" prop="selDateSec"> + <el-date-picker type="daterange" v-model="searchForm.selDateSec" @change="changeSelDateSec" clearable value-format="yyyy-MM-dd" + /> + </el-form-item> <el-form-item label="璁″垝鍚嶇О" prop="title"> <el-input v-model="searchForm.title" placeholder="璇疯緭鍏ヨ鍒掑悕绉�" @keypress.enter.native="search"></el-input> </el-form-item> - <el-form-item label="璁″垝鏃ユ湡" prop="selDate"> - <el-date-picker type="daterange" v-model="searchForm.selDate" clearable value-format="yyyy-MM-dd" - @change="changeDate" /> - </el-form-item> - <section> <el-button type="primary" @click="search">鎼滅储</el-button> <el-button @click="reset">閲嶇疆</el-button> @@ -90,7 +93,9 @@ return { // 鎼滅储 searchForm: { - title: '' + title: '', + selDate:[], + selDateSec:[] } } }, @@ -113,16 +118,7 @@ this.search() }) }, - changeDate(e) { - if (e && e.length > 0) { - this.$set(this.searchForm, 'startDate', e[0]) - this.$set(this.searchForm, 'endDate', e[1]) - } else { - this.$set(this.searchForm, 'startDate', '') - this.$set(this.searchForm, 'endDate', '') - } - }, reset() { this.searchForm = {} this.search() @@ -137,6 +133,24 @@ this.$refs.operaYwPatrolSchemeWindow.initData() }, + changeSelDate(e) { + if (e && e.length > 0) { + this.$set(this.searchForm, 'startDate', e[0] ) + this.$set(this.searchForm, 'endDate', e[1] ) + } else { + this.$set(this.searchForm, 'startDate', '') + this.$set(this.searchForm, 'endDate', '') + } + }, + changeSelDateSec(e) { + if (e && e.length > 0) { + this.$set(this.searchForm, 'startDateSec', e[0] ) + this.$set(this.searchForm, 'endDateSec', e[1] ) + } else { + this.$set(this.searchForm, 'startDateSec', '') + this.$set(this.searchForm, 'endDateSec', '') + } + }, } } </script> diff --git a/admin/src/views/Inspection/task.vue b/admin/src/views/Inspection/task.vue index b9fe645..7084b40 100644 --- a/admin/src/views/Inspection/task.vue +++ b/admin/src/views/Inspection/task.vue @@ -5,7 +5,7 @@ <el-form-item label="璁″垝鍚嶇О" prop="planTitle"> <el-input v-model="searchForm.planTitle" placeholder="璇疯緭鍏ヨ鍒掑悕绉�" @keypress.enter.native="search"></el-input> </el-form-item> - <el-form-item label="浠诲姟鐘舵��"> + <el-form-item label="浠诲姟鐘舵��" prop="status"> <el-select v-model="searchForm.status" label="浠诲姟鐘舵��" filterable clearable> <el-option value="0" label="寰呭紑濮�"></el-option> <el-option value="1" label="杩涜涓�"></el-option> diff --git a/admin/src/views/business/areas.vue b/admin/src/views/business/areas.vue index 0908620..d308427 100644 --- a/admin/src/views/business/areas.vue +++ b/admin/src/views/business/areas.vue @@ -17,8 +17,11 @@ @selection-change="handleSelectionChange" > <el-table-column prop="name" label="鍦板尯鍚嶇О" min-width="100px"></el-table-column> + <el-table-column prop="code" label="琛屾斂鍖轰唬鐮�" align="center" min-width="140px"></el-table-column> <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" align="center" min-width="140px"></el-table-column> +<!-- <el-table-column prop="sortnum" label="鎺掑簭鐮�" align="center" min-width="140px"></el-table-column> +--> <el-table-column v-if="containPermissions(['business:areas:update', 'business:areas:create', 'business:areas:delete'])" label="鎿嶄綔" diff --git a/admin/src/views/contract/components/contractDetail.vue b/admin/src/views/contract/components/contractDetail.vue index a9c43db..3b49554 100644 --- a/admin/src/views/contract/components/contractDetail.vue +++ b/admin/src/views/contract/components/contractDetail.vue @@ -235,7 +235,7 @@ label="璐﹀崟鏉ユ簮"> <template slot-scope="{row}"> <span v-if="row.type === 0">鍚堝悓璐﹀崟</span> - <span v-if="row.type === 1">鑷缓璐﹀崟</span> + <span v-else>鑷缓璐﹀崟</span> </template> </el-table-column> <el-table-column @@ -345,7 +345,7 @@ page: 1, total: 0, tableData: [], - + loading: false } }, diff --git a/admin/src/views/contract/components/contractEdit.vue b/admin/src/views/contract/components/contractEdit.vue index a441200..84a9fe8 100644 --- a/admin/src/views/contract/components/contractEdit.vue +++ b/admin/src/views/contract/components/contractEdit.vue @@ -1,12 +1,6 @@ <template> - <GlobalWindow - width="100%" - :title="title" - :withFooter="false" - :visible.sync="visible" - :confirm-working="isWorking" - @confirm="confirm" - @close="close"> + <GlobalWindow width="100%" :title="title" :withFooter="false" :visible.sync="visible" :confirm-working="isWorking" + @confirm="confirm" @close="close"> <div class="tabs fixed"> <div class="tab" :class="{ active: activeTabs === 0 }">1銆佸熀鏈俊鎭�</div> <div class="tab" :class="{ active: activeTabs === 1 }">2銆佽垂鐢ㄦ潯娆�</div> @@ -19,7 +13,8 @@ <div class="list"> <el-form-item label="鍚堝悓绫诲瀷" prop="type"> <el-select v-model="form.type" placeholder="璇烽�夋嫨" @change="changeType"> - <el-option v-for="(item, index) in types" :key="index" :value="item.value" :label="item.name"></el-option> + <el-option v-for="(item, index) in types" :key="index" :value="item.value" + :label="item.name"></el-option> </el-select> </el-form-item> <el-form-item label="鍚堝悓缂栧彿" prop="code"> @@ -27,21 +22,26 @@ </el-form-item> <el-form-item label="缁忓姙浜�" prop="userId"> <el-select v-model="form.userId" filterable placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in agentList" :key="index" :value="item.id" :label="item.realname"></el-option> + <el-option v-for="(item, index) in agentList" :key="index" :value="item.id" + :label="item.realname"></el-option> </el-select> </el-form-item> <el-form-item label="鍚堝悓绛捐鏃ユ湡" prop="signDate"> - <el-date-picker type="date" v-model="form.signDate" value-format="yyyy-MM-dd" :clearable="false" placeholder="璇烽�夋嫨" /> + <el-date-picker type="date" v-model="form.signDate" value-format="yyyy-MM-dd" :clearable="false" + placeholder="璇烽�夋嫨" /> </el-form-item> <el-form-item label="鍚堝悓寮�濮嬫棩鏈�" prop="startDate"> - <el-date-picker type="date" v-model="form.startDate" @change="getHouseData" :clearable="false" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> + <el-date-picker type="date" v-model="form.startDate" @change="getHouseData" :clearable="false" + value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> </el-form-item> <el-form-item label="鍚堝悓缁撴潫鏃ユ湡" prop="endDate"> - <el-date-picker type="date" v-model="form.endDate" @change="getHouseData" :clearable="false" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> + <el-date-picker type="date" v-model="form.endDate" @change="getHouseData" :clearable="false" + value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> </el-form-item> <el-form-item label="褰掑睘椤圭洰" prop="projectId"> <el-select v-model="form.projectId" @change="getHouseTree" placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in projectList" :key="index" :value="item.id" :label="item.name"></el-option> + <el-option v-for="(item, index) in projectList" :key="index" :value="item.id" + :label="item.name"></el-option> </el-select> </el-form-item> <el-form-item label="缁撴灉鍙栨暣(鍥涜垗浜斿叆)" prop="roundedUp"> @@ -52,7 +52,8 @@ </el-form-item> <el-form-item label="鎵�灞炲叕鍙�" prop="companyId"> <el-select v-model="form.companyId" placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in comparyList" :key="index" :value="item.id" :label="item.name"></el-option> + <el-option v-for="(item, index) in comparyList" :key="index" :value="item.id" + :label="item.name"></el-option> </el-select> </el-form-item> </div> @@ -65,24 +66,21 @@ </el-form-item> <el-form-item label="鑱旂郴浜�" prop="memberId"> <el-select v-model="form.memberId" placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in contactsList" :key="index" :value="item.id" :label="item.name"></el-option> + <el-option v-for="(item, index) in contactsList" :key="index" :value="item.id" + :label="item.name"></el-option> </el-select> -<!-- <el-input v-model="form.memberName" readonly placeholder="璇风偣鍑婚�夋嫨绉熷" />--> + <!-- <el-input v-model="form.memberName" readonly placeholder="璇风偣鍑婚�夋嫨绉熷" />--> </el-form-item> </div> </el-form> </div> <div class="main_house"> <div class="title">璇烽�夋嫨鎴挎簮</div> - <el-tree - :data="houseList" - show-checkbox - node-key="idd" - @check="checkHouseRoom" - :default-expanded-keys="ids" - :default-checked-keys="ids" - :props="{ children: 'projectDataVOList', label: 'name' }"> - <span class="custom-tree-node" style="width: 100%; display: flex; align-items: center; justify-content: space-between;" slot-scope="{ node, data }"> + <el-tree :data="houseList" show-checkbox node-key="idd" @check="checkHouseRoom" :default-expanded-keys="ids" + :default-checked-keys="ids" :props="{ children: 'projectDataVOList', label: 'name' }"> + <span class="custom-tree-node" + style="width: 100%; display: flex; align-items: center; justify-content: space-between;" + slot-scope="{ node, data }"> <span>{{ data.name }}</span> <span style="color: #2080f7;" v-if="data.lv === 3"> {{ data.area }}銕� @@ -113,8 +111,12 @@ </div> <div v-show="activeTabs === 1"> <div class="tabs cost_tabs"> - <div class="tab" :class="{ active: cactiveTabs === 0 }" @click="ctabsClick(0)" v-if="[0,2].includes(form.type)">绉熻祦鏉℃</div> - <div class="tab" :class="{ active: cactiveTabs === 1 }" @click="ctabsClick(1)" v-if="[0,1].includes(form.type)">鐗╀笟鏉℃</div> + <div class="tab" :class="{ active: cactiveTabs === 0 }" @click="ctabsClick(0)" v-if="[0, 2].includes(form.type)"> + 绉熻祦鏉℃ + </div> + <div class="tab" :class="{ active: cactiveTabs === 1 }" @click="ctabsClick(1)" v-if="[0, 1].includes(form.type)"> + 鐗╀笟鏉℃ + </div> </div> <!-- 绉熻祦鏉℃ --> <div v-show="cactiveTabs === 0"> @@ -128,7 +130,8 @@ </el-form-item> <el-form-item label="浠樻鏂瑰紡" prop="zlPayType"> <el-select v-model="form.zlPayType" @change="changePayType" placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" :label="item.name"></el-option> + <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" + :label="item.name"></el-option> </el-select> </el-form-item> <el-form-item label="鍏嶇鏈�" prop="zlDate"> @@ -141,18 +144,22 @@ <el-button type="text" size="medium" @click="addZl">澧炲姞</el-button> </div> <div class="list"> - <div style="width: 100%; display: flex; flex-wrap: wrap;" v-for="(zlDetailList, index) in form.zlDetailList" :key="index"> + <div style="width: 100%; display: flex; flex-wrap: wrap;" + v-for="(zlDetailList, index) in form.zlDetailList" :key="index"> <el-form-item label="璧峰鏃ユ湡" :prop="'zlDetailList.' + index + '.time'" :rules="{ required: true, message: '璇烽�夋嫨', trigger: 'blur' }"> - <el-date-picker type="daterange" v-model="zlDetailList.time" @change="getDate1($event, index)" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> + <el-date-picker type="daterange" v-model="zlDetailList.time" @change="getDate1($event, index)" + value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> </el-form-item> <el-form-item label="鍚堝悓鍗曚环" :prop="'zlDetailList.' + index + '.price'" :rules="{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }"> <el-input placeholder="璇疯緭鍏�" v-model="zlDetailList.price" @input="clearzl" class="input-with-select"> - <el-select v-model="zlDetailList.circleType" @change="clearzl" style="width: 150px;" slot="append" placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in unitOps" :key="index" :value="item.value" :label="item.name"></el-option> + <el-select v-model="zlDetailList.circleType" @change="clearzl" style="width: 150px;" slot="append" + placeholder="璇烽�夋嫨"> + <el-option v-for="(item, index) in unitOps" :key="index" :value="item.value" + :label="item.name"></el-option> </el-select> </el-input> </el-form-item> @@ -161,7 +168,8 @@ }"> <div style="display: flex; align-items: center; justify-content: space-between;"> <el-input v-model="zlDetailList.advanceDays" @input="clearzl" placeholder="璇疯緭鍏�" v-trim /> - <el-link :underline="false" type="danger" @click="deleZl(index)" style="margin-left: 20px; flex-shrink: 0;">鍒犻櫎</el-link> + <el-link :underline="false" type="danger" @click="deleZl(index)" + style="margin-left: 20px; flex-shrink: 0;">鍒犻櫎</el-link> </div> </el-form-item> </div> @@ -185,24 +193,24 @@ </el-table-column> <el-table-column label="鏈熸暟" align="center" show-overflow-tooltip> <template slot-scope="{row}"> - <el-tag type="success" v-if="row.sortnum > 0">{{row.sortnum}}</el-tag> + <el-tag type="success" v-if="row.sortnum > 0">{{ row.sortnum }}</el-tag> </template> </el-table-column> <el-table-column label="鍖洪棿" align="center" show-overflow-tooltip> <template slot-scope="{row}"> - {{row.startDate}} ~ {{row.endDate}} + {{ row.startDate }} ~ {{ row.endDate }} </template> </el-table-column> <el-table-column prop="planPayDate" label="浠樻鏃�" align="center" show-overflow-tooltip /> <el-table-column label="搴旀敹" align="center" show-overflow-tooltip> <template slot-scope="{row}"> - {{row.receivableFee}}鍏� + {{ row.receivableFee }}鍏� </template> </el-table-column> </el-table> <div class="total"> <span>鎬昏</span> - <div>璐圭敤搴旀敹鎬昏锛歿{zlPrice}}鍏冿紝鎶奸噾搴旀敹鎬昏锛歿{form.zlDeposit}}鍏�</div> + <div>璐圭敤搴旀敹鎬昏锛歿{ zlPrice }}鍏冿紝鎶奸噾搴旀敹鎬昏锛歿{ form.zlDeposit }}鍏�</div> </div> </div> <!-- 鐗╀笟鏉℃ --> @@ -217,7 +225,8 @@ </el-form-item> <el-form-item label="浠樻鏂瑰紡" prop="wyPayType"> <el-select v-model="form.wyPayType" @change="changePayType1" placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" :label="item.name"></el-option> + <el-option v-for="(item, index) in payMethods" :key="index" :value="item.value" + :label="item.name"></el-option> </el-select> </el-form-item> <el-form-item label="鍏嶇鏈�" prop="wyDate"> @@ -230,18 +239,22 @@ <el-button type="text" size="medium" @click="addWy">澧炲姞</el-button> </div> <div class="list"> - <div style="width: 100%; display: flex; flex-wrap: wrap;" v-for="(wyDetailList, index) in form.wyDetailList" :key="index"> + <div style="width: 100%; display: flex; flex-wrap: wrap;" + v-for="(wyDetailList, index) in form.wyDetailList" :key="index"> <el-form-item label="璧峰鏃ユ湡" :prop="'wyDetailList.' + index + '.time'" :rules="{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }"> - <el-date-picker type="daterange" v-model="wyDetailList.time" @change="getDate2($event, index)" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> + <el-date-picker type="daterange" v-model="wyDetailList.time" @change="getDate2($event, index)" + value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> </el-form-item> <el-form-item label="鍚堝悓鍗曚环" :prop="'wyDetailList.' + index + '.price'" :rules="{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }"> <el-input placeholder="璇疯緭鍏�" @input="clearwy" v-model="wyDetailList.price"> - <el-select v-model="wyDetailList.circleType" @change="clearwy" style="width: 150px;" slot="append" placeholder="璇烽�夋嫨"> - <el-option v-for="(item, index) in unitOps1" :key="index" :value="item.value" :label="item.name"></el-option> + <el-select v-model="wyDetailList.circleType" @change="clearwy" style="width: 150px;" slot="append" + placeholder="璇烽�夋嫨"> + <el-option v-for="(item, index) in unitOps1" :key="index" :value="item.value" + :label="item.name"></el-option> </el-select> </el-input> </el-form-item> @@ -250,7 +263,8 @@ }"> <div style="display: flex; align-items: center; justify-content: space-between;"> <el-input v-model="wyDetailList.advanceDays" @input="clearwy" placeholder="璇疯緭鍏�" v-trim /> - <el-link :underline="false" type="danger" @click="deleWy(index)" style="margin-left: 20px; flex-shrink: 0;">鍒犻櫎</el-link> + <el-link :underline="false" type="danger" @click="deleWy(index)" + style="margin-left: 20px; flex-shrink: 0;">鍒犻櫎</el-link> </div> </el-form-item> </div> @@ -274,32 +288,33 @@ </el-table-column> <el-table-column label="鏈熸暟" align="center" show-overflow-tooltip> <template slot-scope="{row}"> - <el-tag type="success" v-if="row.sortnum > 0">{{row.sortnum}}</el-tag> + <el-tag type="success" v-if="row.sortnum > 0">{{ row.sortnum }}</el-tag> </template> </el-table-column> <el-table-column label="鍖洪棿" align="center" show-overflow-tooltip> <template slot-scope="{row}"> - {{row.startDate}} ~ {{row.endDate}} + {{ row.startDate }} ~ {{ row.endDate }} </template> </el-table-column> <el-table-column prop="planPayDate" label="浠樻鏃�" align="center" show-overflow-tooltip /> <el-table-column prop="receivableFee" label="搴旀敹" align="center" show-overflow-tooltip> <template slot-scope="{row}"> - {{row.receivableFee}}鍏� + {{ row.receivableFee }}鍏� </template> </el-table-column> </el-table> <div class="total"> <span>鎬昏</span> - <div>璐圭敤搴旀敹鎬昏锛歿{wyPrice}}鍏冿紝鎶奸噾搴旀敹鎬昏锛歿{form.wyDeposit}}鍏�</div> + <div>璐圭敤搴旀敹鎬昏锛歿{ wyPrice }}鍏冿紝鎶奸噾搴旀敹鎬昏锛歿{ form.wyDeposit }}鍏�</div> </div> </div> </div> <div class="window__footer"> <slot name="footer"> - <el-button @click="confirm" :loading="confirmWorking" type="primary">{{activeTabs === 0 ? '涓嬩竴姝�' : '鎻愪氦'}}</el-button> + <el-button @click="confirm" :loading="confirmWorking" type="primary">{{ activeTabs === 0 ? '涓嬩竴姝�' : + '鎻愪氦'}}</el-button> <slot name="btns" /> - <el-button @click="close">{{activeTabs === 0 ? '杩斿洖' : '涓婁竴姝�'}}</el-button> + <el-button @click="close">{{ activeTabs === 0 ? '杩斿洖' : '涓婁竴姝�' }}</el-button> </slot> </div> <!-- 閫夋嫨绉熷 --> @@ -316,7 +331,7 @@ import { ywList } from '@/api/customer' import { getUserList } from '@/api/system/user' import { getProjectList, tree } from '@/api/project/ywProject' -import { companyList } from '@/api/company' +import {companyListConstract as companyList } from '@/api/company' import { Message, Loading } from 'element-ui' import { mapState } from 'vuex' export default { @@ -328,7 +343,7 @@ computed: { ...mapState(['userInfo']) }, - data () { + data() { return { title: '鍒涘缓鍚堝悓', activeTabs: 0, @@ -347,7 +362,7 @@ memberId: '', memberName: '', fileList: [], - + zlDeposit: '', zlPayType: '', zlFreeStartDate: '', @@ -363,7 +378,8 @@ advanceDays: '' } ], - + + wyDeposit: '', wyPayType: '', wyFreeStartDate: '', @@ -379,17 +395,17 @@ advanceDays: '' } ], - + roomIds: [] }, - + ids: [], - + zlList: [], wyList: [], - + rules, - + contactsList: [], loadingInstance: null, @@ -432,12 +448,13 @@ { name: '鍏�/m虏路骞�', value: 2 }, { name: '鍏�/鍦�', value: 6 }, ], - + + houseLvThree: [] } }, methods: { - open (title, target) { + open(title, target) { this.title = title this.ids = [] this.houseList = [] @@ -486,7 +503,7 @@ // this.getHouseTree() }) }, - changePayType (e) { + changePayType(e) { if (e === 0) { this.unitOps = [ { name: '鍏�/m虏路澶�', value: 0 }, @@ -514,7 +531,7 @@ } this.clearzl() }, - changePayType1 (e) { + changePayType1(e) { if (e === 0) { this.unitOps1 = [ { name: '鍏�/m虏路澶�', value: 0 }, @@ -543,14 +560,14 @@ this.clearwy() }, // 鑾峰彇鑱旂郴浜� - getYwList () { + getYwList() { ywList({ customerId: this.form.renterId }).then(res => { this.contactsList = res }) }, - getHouseData () { + getHouseData() { if (this.form.startDate && this.form.endDate) { this.getHouseTree() if (this.form.zlDetailList.length === 1) { @@ -565,33 +582,33 @@ } } }, - changeType (e) { + changeType(e) { if (e === 0 || e === 2) { this.cactiveTabs = 0 } else if (e === 0 || e === 1) { this.cactiveTabs = 1 } }, - getDayTime (num) { - const today = new Date(); - const year = today.getFullYear(); - const month = today.getMonth() + 1; - const day = today.getDate(); + getDayTime(num) { + const today = new Date() + const year = today.getFullYear() + const month = today.getMonth() + 1 + const day = today.getDate() if (!num) { - return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`; + return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}` } else { - return `${year + 1}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day - 1 : day - 1}`; + return `${year + 1}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day - 1 : day - 1}` } }, - clearzl () { + clearzl() { this.zlList = [] this.zlPrice = '' }, - clearwy () { + clearwy() { this.wyList = [] this.wyPrice = '' }, - confirm () { + confirm() { var that = this if (this.activeTabs === 0) { this.$refs.form.validate((valid) => { @@ -633,7 +650,7 @@ } } }, - submit () { + submit() { // 璋冪敤鏂板缓鎺ュ彛 this.isWorking = true create({ ...this.form }) @@ -646,26 +663,26 @@ this.isWorking = false }) }, - getDate1 (e, index) { + getDate1(e, index) { this.form.zlDetailList[index].startDate = e[0] this.form.zlDetailList[index].endDate = e[1] this.clearzl() }, - getDate2 (e, index) { + getDate2(e, index) { this.form.wyDetailList[index].startDate = e[0] this.form.wyDetailList[index].endDate = e[1] this.clearwy() }, - checkHouseRoom (a, b) { + checkHouseRoom(a, b) { this.ids = b.checkedKeys let arr = b.checkedKeys.map(item => { if (item.split('-')[0] == 3) { return Number(item.split('-')[1]) } }) - this.form.roomIds = arr.filter(item => item !== undefined); + this.form.roomIds = arr.filter(item => item !== undefined) }, - getHouseTree () { + getHouseTree() { tree({ startDate: this.form.startDate, endDate: this.form.endDate, @@ -681,14 +698,14 @@ }, addParamToArray(arr) { for (let i = 0; i < arr.length; i++) { - const currentItem = arr[i].projectDataVOList; + const currentItem = arr[i].projectDataVOList arr[i].idd = arr[i].lv + '-' + arr[i].id if (currentItem.length > 0) { - this.addParamToArray(currentItem); + this.addParamToArray(currentItem) } } }, - generateZL () { + generateZL() { getBillList({ ...this.form, billType: 0 }) .then(res => { let zlPrice = 0 @@ -703,7 +720,7 @@ this.zlList = arr }) }, - generateWY () { + generateWY() { getBillList({ ...this.form, billType: 1 }) .then(res => { this.wy = true @@ -719,7 +736,7 @@ this.wyList = arr }) }, - addZl () { + addZl() { this.form.zlDetailList.push({ circleType: 0, startDate: this.form.startDate, @@ -729,7 +746,7 @@ advanceDays: '' }) }, - addWy () { + addWy() { this.form.wyDetailList.push({ circleType: 0, startDate: this.form.startDate, @@ -749,62 +766,66 @@ this.form.wyDetailList.splice(index, 1) this.clearwy() }, - getZLDate (e) { + getZLDate(e) { this.form.zlFreeStartDate = e[0] this.form.zlFreeEndDate = e[1] this.clearzl() }, - getWYDate (e) { + getWYDate(e) { this.form.wyFreeStartDate = e[0] this.form.wyFreeEndDate = e[1] this.clearwy() }, - getTenant (row) { + getTenant(row) { this.form.renterId = row.id this.form.renterName = row.name this.form.memberId = '' this.form.memberName = '' this.getYwList() }, - dele (imgaddr) { + dele(imgaddr) { this.form.fileList.forEach((item, index) => { if (imgaddr === item.imgaddr) { this.form.fileList.splice(index, 1) } }) }, - getUser () { + getUser() { getUserList({}) .then(res => { this.agentList = res }) }, - getProject () { + getProject() { getProjectList({}) .then(res => { - this.projectList = res + this.projectList = res || [] + if (this.projectList.length > 0) { + this.$set(this.form, 'projectId', this.projectList[0].id) + this.getHouseTree() + } }) }, - getCompany () { + getCompany() { companyList({ type: 2 }) .then(res => { this.comparyList = res this.form.companyId = res[0].id }) }, - tabsClick (val) { + tabsClick(val) { this.activeTabs = val }, - ctabsClick (val) { + ctabsClick(val) { this.cactiveTabs = val }, - handleRent () { + handleRent() { this.$refs.MemberSearchRef.open() }, - houseChange (e) { + houseChange(e) { console.log(e) }, - beforeUpload (file) { + beforeUpload(file) { this.loadingInstance = Loading.service({ lock: true, text: 'Loading', @@ -812,14 +833,14 @@ background: 'rgba(0, 0, 0, 0.7)' }) }, - uploadError () { + uploadError() { this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂� if (this.loadingInstance) { this.loadingInstance.close() } }) }, - getDay () { + getDay() { const now = new Date() const year = now.getFullYear() const month = now.getMonth() + 1 // 鍔�1浣垮叾浠�1寮�濮� @@ -827,9 +848,9 @@ const hours = now.getHours() const minutes = now.getMinutes() const seconds = now.getSeconds() - return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`; + return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}` }, - uploadAvatarSuccess (file) { + uploadAvatarSuccess(file) { this.$nextTick(() => { if (this.loadingInstance) { this.loadingInstance.close() @@ -838,7 +859,7 @@ const item = file.data[0] this.form.fileList.push({ ...item, fileurl: item.imgaddr, name: item.originname, userName: this.userInfo.realname, createTime: this.getDay() }) }, - close () { + close() { if (this.activeTabs === 0) { this.$emit('close') this.visible = false @@ -854,6 +875,7 @@ <style lang="scss" scoped> @import '@/assets/style/variables.scss'; + .fixed { background: #ffffff; position: sticky; @@ -976,6 +998,7 @@ display: flex; align-items: center; justify-content: space-between; + span { font-weight: 500; font-size: 14px; diff --git a/admin/src/views/project/components/OperaYwBuildingWindow.vue b/admin/src/views/project/components/OperaYwBuildingWindow.vue index 83fecbe..f1387b7 100644 --- a/admin/src/views/project/components/OperaYwBuildingWindow.vue +++ b/admin/src/views/project/components/OperaYwBuildingWindow.vue @@ -89,7 +89,7 @@ }) }, methods: { - open (title, target,type) { + open(title, target, type) { this.title = title this.visible = true this.getProject() @@ -98,14 +98,14 @@ this.$nextTick(() => { this.$refs.form.resetFields() this.form[this.configData['field.id']] = null - this.form.type=type + this.form.type = type }) return } // 缂栬緫 this.$nextTick(() => { - console.log('----'); - + console.log('----') + this.getDetail(target.id) }) }, @@ -117,6 +117,10 @@ getProject() { getProjectList({}).then(res => { this.projectList = res || [] + if (this.projectList.length > 0) { + this.$set(this.form, 'projectId', this.projectList[0].id) + // this.changeProject(this.projectList[0].id) + } }) } } diff --git a/admin/src/views/project/components/OperaYwRoomWindow.vue b/admin/src/views/project/components/OperaYwRoomWindow.vue index dc0c159..1ed0a57 100644 --- a/admin/src/views/project/components/OperaYwRoomWindow.vue +++ b/admin/src/views/project/components/OperaYwRoomWindow.vue @@ -101,6 +101,8 @@ this.title = title this.visible = true this.getProject() + this.buildList = [] + this.floorList = [] // 鏂板缓缁勭粐 if (target == null) { this.$nextTick(() => { @@ -115,8 +117,8 @@ this.getDetail(target.id) }) }, - confirm () { - if(!this.form.feeArea){ + confirm() { + if (!this.form.feeArea) { this.form.feeArea = this.form.rentArea } if (this.form.id == null || this.form.id === '') { @@ -143,6 +145,10 @@ getProject() { getProjectList({}).then(res => { this.projectList = res || [] + if (this.projectList.length > 0) { + this.$set(this.form, 'projectId', this.projectList[0].id) + this.changeProject(this.projectList[0].id) + } }) }, @@ -150,6 +156,9 @@ this.form.buildingId = '' getBuildList({ projectId: e }).then(res => { this.buildList = res || [] + // if(this.buildList.length > 0){ + // this.form.buildingId = this.buildList[0].id + // } }) }, changeBuild(e) { diff --git a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue index 4f8ce99..c97fbf4 100644 --- a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue +++ b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue @@ -140,7 +140,7 @@ this.visible = true this.getProject() this.getCate() - // 鏂板缓 + // 鏂板缓 if (target == null) { this.form = { id: null, @@ -192,7 +192,11 @@ }, getProject() { getProjectList({}).then(res => { - this.projectList = res + this.projectList = res || [] + if(this.projectList.length > 0){ + this.$set(this.form, 'projectId', this.projectList[0].id) + this.getBuild(this.projectList[0].id) + } }) }, getBuild(projectId) { @@ -200,7 +204,11 @@ this.$set(this.form, 'floorId', '') this.$set(this.form, 'roomId', '') getBuildList({ projectId }).then(res => { - this.buildList = res + this.buildList = res || [] + // if(projectId && this.buildList.length > 0){ + // this.$set(this.form, 'buildingId', this.buildList[0].id) + // this.changeBuild(this.buildList[0].id) + // } }) }, changeBuild(e) { diff --git a/admin/src/views/workorder/components/detail.vue b/admin/src/views/workorder/components/detail.vue index a6908d4..f2e7d5f 100644 --- a/admin/src/views/workorder/components/detail.vue +++ b/admin/src/views/workorder/components/detail.vue @@ -49,11 +49,21 @@ <div class="value" v-if="info.fileList == null || !info.fileList.length">鏃�</div> <div class="value" v-if="info.fileList != null && info.fileList.length"> <div v-for="item in info.fileList" :key="item.id" style="display: inline;margin-right: 20px"> - <video v-if="item.fileurlFull && item.fileurlFull.endsWith('.mp4')" ref="videoRef" controls - preload="auto" style="width: 80px;height: 80px;object-fit: contain;" :src="item.fileurlFull" /> - <el-image v-else-if="item.fileurlFull" style="width:80px; height: 80px" :src="item.fileurlFull" + <!-- <video v-if="item.fileurlFull && item.fileurlFull.endsWith('.mp4')" ref="videoRef" controls + preload="auto" style="width: 80px;height: 80px;object-fit: contain;" :src="item.fileurlFull" /> --> + <el-image v-if="item.type == 0" style="width:80px; height: 80px" :src="item.fileurlFull" :preview-src-list="[item.fileurlFull]"> </el-image> + </div> + </div> + </div> + <div v-if="info.fileList && info.fileList.length > 0 && info.fileList.filter(i => i.type == 1).length > 0" + class="item max"> + <div class="la">闂瑙嗛</div> + <div class="value"> + <div v-for="item in info.fileList" :key="item.id" style="display: inline;margin-right: 20px"> + <video v-if="item.type == 1" ref="videoRef" controls preload="auto" + style="width: 240px;height: 160px;object-fit: contain;" :src="item.fileurlFull" /> </div> </div> </div> @@ -61,7 +71,7 @@ <div class="side"> <div class="title">宸ュ崟娴佽浆璁板綍</div> <div class="flow_list"> - <div class="item" v-for="item,i in info.logList"> + <div class="item" v-for="item, i in info.logList"> <div class="icon"> <div class="dian"></div> <div v-if="i < info.logList.length - 1" class="line"></div> @@ -76,7 +86,9 @@ </div> </div> </div> - <div class="title">{{ info.dealStatus == 0 || info.dealStatus == 1 ? '宸ュ崟澶勭悊' : '澶勭悊缁撴灉' }}</div> + <div class="title" + v-if="info.dealStatus == 2 || info.dealStatus == 0 || (info.dealStatus == 1 && info.dealUserId === userInfo.id)"> + {{ info.dealStatus == 0 || info.dealStatus == 1 ? '宸ュ崟澶勭悊' : '澶勭悊缁撴灉' }}</div> <el-form :model="param" ref="form" :rules="rules"> <template v-if="info.dealStatus == 0 || info.dealStatus == null"> <el-form-item label="澶勭悊鏂瑰紡" prop="dealType"> @@ -84,7 +96,7 @@ <el-radio v-model="param.dealType" :label="0">鎸囨淳</el-radio> <el-radio v-model="param.dealType" :label="1">鐩存帴鍥炲</el-radio> </div> - </el-form-item> + </el-form-item> <el-form-item v-if="param.dealType == 0" label="鎸囨淳缁�" prop="dealUserId"> <el-select v-model="param.dealUserId" clearable filterable class="w400"> <el-option v-for="item in staffList" :label="item.realname" :value="item.id"></el-option> @@ -104,8 +116,8 @@ </el-form-item> <el-form-item label="鐜板満鍥剧墖"> <div class="file_list"> - <el-upload class="avatar-uploader" :data="uploadData" :auto-upload="true" - :action="uploadImgUrl" :show-file-list="false" :on-success="uploadAvatarSuccess" :on-error="uploadError" + <el-upload class="avatar-uploader" :data="uploadData" :auto-upload="true" :action="uploadImgUrl" + :show-file-list="false" :on-success="uploadAvatarSuccess" :on-error="uploadError" :before-upload="beforeUpload"> <div class="upload_wrap"> <i class="el-icon-plus avatar-uploader-icon"></i> @@ -223,8 +235,8 @@ const { id } = this detailById(id).then(res => { this.info = res - if(this.info.dealStatus == 1){ - this.$set(this.param, 'getDate',dayjs().format('YYYY-MM-DD HH:mm:ss') ) + if (this.info.dealStatus == 1) { + this.$set(this.param, 'getDate', dayjs().format('YYYY-MM-DD HH:mm:ss')) } }) }, @@ -316,13 +328,15 @@ } .primaryColor { - border: 1px solid rgba(63, 126, 239,.2); - background-color: rgba(63, 126, 239,.2); + border: 1px solid rgba(63, 126, 239, .2); + background-color: rgba(63, 126, 239, .2); } - .green{ + + .green { background-color: rgba(83, 183, 148, .2); border: 1px solid rgba(83, 183, 148, .2); } + .gray { color: #333333; background-color: rgba(128, 128, 128, .2); @@ -352,7 +366,8 @@ width: 100%; display: flex; align-items: center; - .la{ + + .la { margin-bottom: 0; width: 72px; } @@ -362,38 +377,47 @@ width: 100%; } } - .main_content{ + + .main_content { display: flex; - .side{ + + .side { width: 370px; - .title{ + + .title { font-size: 14px; } - .flow_list{ - .item{ + + .flow_list { + .item { display: flex; - .icon{ + + .icon { width: 28px; display: flex; flex-direction: column; align-items: center; - .dian{ + + .dian { width: 12px; height: 12px; border-radius: 50%; background-color: #e89e42; } - .line{ + + .line { width: 1px; height: 100%; background-color: #e89e42; } } - .content{ + + .content { font-size: 12px; color: #999999; padding-bottom: 12px; - .name{ + + .name { font-size: 13px; color: #333333; } diff --git a/admin/src/views/workorder/workorderList.vue b/admin/src/views/workorder/workorderList.vue index a2b0b1e..f3ad3de 100644 --- a/admin/src/views/workorder/workorderList.vue +++ b/admin/src/views/workorder/workorderList.vue @@ -103,7 +103,6 @@ showDetail: false, searchForm: { selDate: [], - areaType: '', areaIds: '', projectId: '', buildingId: '', diff --git a/h5/pages/index.vue b/h5/pages/index.vue index 9d3409d..81b4ef6 100644 --- a/h5/pages/index.vue +++ b/h5/pages/index.vue @@ -1,6 +1,6 @@ <template> <view class="main_app"> - <view class="hone_name title">{{ userInfo.realname }}锛屾杩庣櫥褰�</view> + <view class="hone_name title">{{ userInfo.realname }}锛屾杩庣櫥褰曪綖</view> <view class="home_con"> <image class="bg" src="@/static/home/home_bg.jpg" mode=""></image> <view class="h1">闃滃畞鏂囦綋涓績</view> @@ -24,14 +24,15 @@ </view> </template> -<script> - import { logoutPost } from '@/api' +<script> + import { + logoutPost + } from '@/api' export default { data() { return { userInfo: uni.getStorageSync('userInfo') || {}, - list1: [ - { + list1: [{ name: '鏂板宸ュ崟', url: '/pages/workOrder/edit', img: require('@/static/home/ic_xinzenggongdan@2x.png'), @@ -74,12 +75,15 @@ url: item.url }) }, - loginOut() { - logoutPost() - this.$store.commit('empty') - uni.redirectTo({ - url: '/pages/login' - }) + loginOut() { + logoutPost().then(res => { + this.$store.commit('empty') + setTimeout(() => { + uni.redirectTo({ + url: '/pages/login' + }) + }, 300) + }) // window.location.href= 'https://zhcg.fnwtzx.com/fn_h5' }, diff --git a/h5/pages/login.vue b/h5/pages/login.vue index 81323ed..b742a89 100644 --- a/h5/pages/login.vue +++ b/h5/pages/login.vue @@ -45,7 +45,7 @@ code: '' }, downTime: 0, - code: '' + code: '111' // code: '' } }, diff --git a/h5/pages/operation/device.vue b/h5/pages/operation/device.vue index 9377ebb..414be7b 100644 --- a/h5/pages/operation/device.vue +++ b/h5/pages/operation/device.vue @@ -83,7 +83,8 @@ import { uploadUrl, ywDevicePost, - ywDeviceCreate + ywDeviceCreate, + getPointRecordByCode } from '@/api' import dayjs from 'dayjs'; import { @@ -122,7 +123,7 @@ }, handleP() { const { - param, + param, fileList } = this ywDeviceCreate({ @@ -285,8 +286,19 @@ }, (decodeText, decodeResult) => { if (decodeText) { //杩欓噷decodeText灏辨槸閫氳繃鎵弿浜岀淮鐮佸緱鍒扮殑鍐呭 - this.$set(this.param, 'deviceCode', decodeText) - this.stopScan(); //鍏抽棴鎵爜鍔熻兘 + this.$set(this.param, 'deviceCode', decodeText) + this.stopScan(); //鍏抽棴鎵爜鍔熻兘 + getPointRecordByCode({ + // taskId: this.id, + pointCode: decodeText + }).then(ress => { + if (ress.data) { + console.log('ress', ress.data); + } else { + this.showToast('鏈尮閰嶅埌宸℃鐐�,璇烽噸鏂版壂鎻�') + } + }) + } }, (err) => { diff --git a/h5/pages/polling/detail.vue b/h5/pages/polling/detail.vue index 383395d..45ad7fb 100644 --- a/h5/pages/polling/detail.vue +++ b/h5/pages/polling/detail.vue @@ -34,7 +34,10 @@ <view class="content"> <view class="head"> <view>{{item.pointName}}</view> - <view class="status" :class="{ gray: item.status == 1 }">{{ item.status == 1 ? '宸插贰妫�' : '寰呭贰妫�' }}</view> + <view class="status" :class="{ gray: item.status == 1 }"> + <image v-if="item.status == 1" src="@/static/plan_ic_finish@2x.png" class="icon" mode=""></image> + <text>{{ item.status == 1 ? '宸插贰妫�' : '寰呭贰妫�' }}</text> + </view> </view> <template v-if="item.status == 1"> <view class="line"> @@ -43,7 +46,10 @@ </view> <view class="line"> <view class="la">宸℃鏃堕棿锛�</view> - <view class="val">{{item.dealDate}}</view> + <view class="val"> + <text>{{item.dealDate}}</text> + <text v-if="item.status == 1" class="detail">鏌ョ湅璇︽儏</text> + </view> </view> </template> <view class="desc" v-else>{{item.content}}</view> @@ -100,11 +106,11 @@ }, onLoad(option) { this.id = option.id + // this.getDetail() + }, + onShow() { this.getDetail() }, - // onShow() { - // this.getDetail() - // }, methods: { openSc() { this.isScaning = true; @@ -164,7 +170,7 @@ this.info = res.data let time = new Date(res.data.startDate).getTime() console.log('res.data.startDate', new Date().getTime()); - this.flag = new Date().getTime() > time + this.flag = new Date().getTime() > time && (this.info.status == 0 || this.info.status == 1) }) ywPatrolTaskRecord({ capacity: 999, @@ -268,14 +274,15 @@ margin-bottom: 20rpx; .la { - color: #666666; + color: #666666; + } } .list { - height: calc(100vh - 720rpx); - overflow: auto; - + height: calc(100vh - 490rpx); + overflow: auto; + padding-bottom: 160rpx; .item { width: 690rpx; height: 188rpx; @@ -288,7 +295,18 @@ margin-bottom: 20rpx; .line { - margin-bottom: 10rpx; + margin-bottom: 10rpx; + width: 100%; + .val{ + display: flex; + justify-content: space-between; + align-items: center; + flex: 1; + .detail{ + color: $primaryColor; + font-size: 26rpx; + } + } } .icon { @@ -311,9 +329,19 @@ margin-bottom: 16rpx; .status { - offset-anchor: 28rpx; + font-size: 28rpx; color: $primaryColor; - font-weight: 400; + font-weight: 400; + display: flex; + align-items: center; + .icon{ + width: 40rpx; + height: 40rpx; + // border-radius: 50%; + // overflow: hidden; + background: none; + } + } .gray { diff --git a/h5/pages/polling/point.vue b/h5/pages/polling/point.vue index 4711fbc..1288d07 100644 --- a/h5/pages/polling/point.vue +++ b/h5/pages/polling/point.vue @@ -31,7 +31,7 @@ <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> </view> </view> - <view class="desc">{{ info.dealInfo }}</view> + <view v-if="info.dealInfo" class="desc">{{ info.dealInfo }}</view> <view class="line line_s"> <view class="la">宸℃浜猴細</view> <view class="val">{{ info.realname }}</view> @@ -78,11 +78,12 @@ </view> </view> - <view class="label">澶勭悊璇存槑</view> - <textarea v-model="handleParam.dealInfo" placeholder="璇峰~鍐欏鐞嗚鏄�" placeholder-class="placeholder9" /> + <view class="label" style="margin-bottom: 10rpx;">澶勭悊璇存槑</view> + <textarea v-model="handleParam.dealInfo" :maxlength="-1" placeholder="璇峰~鍐欏鐞嗚鏄�" + placeholder-class="placeholder9" /> </view> </view> - <view class="sub_btn" @click="onSubmit">纭宸℃</view> + <view v-if="info.status == 0" class="sub_btn" @click="onSubmit">纭宸℃</view> <!-- --> <u-popup :show="showUpload" @close="showUpload = false" closeOnClickOverlay> <view class="sel_upload_wrap"> @@ -149,34 +150,38 @@ fileList, id } = this - if (handleParam.dealStatus == 1) { - return uni.showModal({ - title: '娓╅Θ鎻愮ず', - content: '宸℃缁撴灉寮傚父锛屾槸鍚﹀墠寰�鎻愪氦宸ュ崟锛�', - success: function(res) { - if (res.confirm) { - patrolData({ - ...handleParam, - multifileList: fileList, - id, - }).then(res => { - this.showToast('鎿嶄綔鎴愬姛') - uni.navigateBack() - }) + patrolData({ + ...handleParam, + multifileList: fileList, + id, + }).then(res => { + if (handleParam.dealStatus == 1) { + return uni.showModal({ + title: '娓╅Θ鎻愮ず', + content: '宸℃缁撴灉寮傚父锛屾槸鍚﹀墠寰�鎻愪氦宸ュ崟锛�', + success: (res) => { + if (res.confirm) { + this.showToast('鎿嶄綔鎴愬姛') + setTimeout(() => { + uni.redirectTo({ + url: '/pages/workOrder/edit' + }) + }, 300) + }else{ + this.showToast('鎿嶄綔鎴愬姛') + setTimeout(() => { + uni.navigateBack() + }, 300) + } } - } - }); - } else { - patrolData({ - ...handleParam, - multifileList: fileList, - id, - }).then(res => { + }); + } else { this.showToast('鎿嶄綔鎴愬姛') - uni.navigateBack() - }) - } - + setTimeout(() => { + uni.navigateBack() + }, 300) + } + }) }, getDetail() { const { @@ -360,10 +365,11 @@ } .sub_btn { - position: fixed; - bottom: 68rpx; - left: 40rpx; + // position: fixed; + // bottom: 68rpx; + // left: 40rpx; width: 670rpx; + margin-top: 60rpx; height: 88rpx; background: $primaryColor; box-shadow: 0rpx 8rpx 20rpx 0rpx rgba(0, 104, 255, 0.3); @@ -417,7 +423,7 @@ textarea { box-sizing: border-box; width: 690rpx; - min-height: 200rpx; + min-height: 140rpx; background-color: #f7f7f7; font-size: 28rpx; color: #333333; diff --git a/h5/pages/polling/task.vue b/h5/pages/polling/task.vue index 6ba466e..0e72898 100644 --- a/h5/pages/polling/task.vue +++ b/h5/pages/polling/task.vue @@ -44,13 +44,17 @@ <view class="line" @click="itemClick(item)">鎵ц鏃堕棿锛歿{ item.startDate.slice(11, 16) }} 鑷� {{ item.endDate.slice(11, 16) }}</view> <view class="line"> <view @click="itemClick(item)">瀹屾垚鎯呭喌锛歿{item.finishNum || 0}}/{{item.patrolNum}}</view> - <view v-if="param.queryStatus == '0,1'" class="btn" @click="openSc(item)"> + <view v-if="param.queryStatus == '0,1' && item.flag && (item.status == 0 || item.status == 1)" class="btn" @click="openSc(item)"> <image src="@/static/side/ic_saoma@2x.png" class="saoma" mode=""></image> <view>鎵爜宸℃</view> </view> </view> </view> </view> + <view v-if="list.length == 0" class="empty_wrap"> + <image src="@/static/empty.png" mode=""></image> + <view class="">鏆傛棤鏁版嵁</view> + </view> </view> </scroll-view> @@ -93,7 +97,9 @@ // activeItem: {} }; }, - onLoad() { + onShow() { + this.page = 1 + this.list = [] this.getList() }, methods: { @@ -184,7 +190,11 @@ page, capacity: 10 }).then(res => { - this.list = [...this.list, ...res.data.records] + this.list = [...this.list, ...res.data.records] + this.list.forEach(item => { + let time = new Date(item.startDate).getTime() + item.flag = new Date().getTime() > time + }) this.total = res.data.total }) } @@ -272,10 +282,11 @@ } .scroll_Y { - height: calc(100vh - 230rpx); + height: calc(100vh - 130rpx); } - .list { + .list { + .item { display: flex; // height: 290rpx; diff --git a/h5/pages/workOrder/detail.vue b/h5/pages/workOrder/detail.vue index f26e85c..c112a22 100644 --- a/h5/pages/workOrder/detail.vue +++ b/h5/pages/workOrder/detail.vue @@ -11,7 +11,12 @@ <view class="file_list"> <view class="file" v-for="(item,index) in info.fileList"> <image v-if="item.type == 0" :src="item.fileurlFull" mode="aspectFill"></image> - <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> + <!-- <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> --> + <view v-if="item.type == 1" @click="videoClick(item)" class="video_wrap"> + <video :src="item.fileurlFull" initial-time="0.01" :show-center-play-btn="false" :controls="false" + class="video" :enable-progress-gesture="false" autoplay muted /> + <image src="@/static/play.png" class="play" mode=""></image> + </view> </view> </view> <view class="content"> @@ -23,7 +28,7 @@ <view class="la">涓婃姤浜猴細</view> <view class="val">{{ info.creatorName }}{{info.creatorCompany ? '-' + info.creatorCompany : ''}}</view> </view> - <view class="line" v-if="info.creatorPhone || info.creatorMobile"> + <view class="line" v-if="info.creatorPhone || info.creatorMobile"> <view class="la">鑱旂郴鐢佃瘽锛�</view> <view class="val">{{ info.creatorMobile || info.creatorPhone }}</view> </view> @@ -63,7 +68,7 @@ <image src="@/static/side/phoneed.png" class="icon"></image> <text>涓婃姤浜�</text> </view> - <view class="btn active" @click="isShowHandle = true">鍘诲鐞�</view> + <view class="btn active" @click="handleOpen">鍘诲鐞�</view> </view> <!-- --> <u-popup :show="showUpload" @close="showUpload = false" zIndex="10076" closeOnClickOverlay> @@ -74,8 +79,8 @@ </u-popup> <!-- --> <!-- 宸ュ崟澶勭悊 --> - <u-popup :show="isShowHandle" :round="10" :safeAreaInsetBottom="true" mode="bottom" closeable - @close="isShowHandle = false"> + <u-popup :show="isShowHandle" :round="10" :safeAreaInsetTop="true" :safeAreaInsetBottom="true" mode="bottom" + closeable @close="isShowHandle = false"> <view class="appr_modal"> <view class="title">宸ュ崟澶勭悊</view> <view class="df_sb"> @@ -118,13 +123,18 @@ <u-datetime-picker :minDate="new Date().getTime()" :show="isShowHandleDate" @confirm="confirmHandleDate" @cancel="isShowHandleDate = false" mode="datetime"></u-datetime-picker> <!-- --> + <view v-if="videoPlay" class="video_app"> + <video controls autoplay muted x5-video-player-type="h5" x5-video-player-fullscreen="true" id="myvideo" + :src="videoUrl" @fullscreenchange="screenChange"></video> + <view class="bg" @click="closeVideo"></view> + </view> </view> </template> <script> import { uploadUrl, - ywWorkorderD, + ywWorkorderD, ywWorkorderDeal } from '@/api' import dayjs from 'dayjs'; @@ -135,10 +145,14 @@ info: {}, showUpload: false, isShowHandle: false, - isShowHandleDate: false, + isShowHandleDate: false, userInfo: uni.getStorageSync('userInfo') || {}, handleParam: {}, - dealFileList: [] + dealFileList: [], + + videoPlay: false, + videoContext: null, + videoUrl: '' }; }, onLoad(option) { @@ -147,25 +161,55 @@ this.getDetail() }, methods: { - onSubmit() { - const { handleParam, dealFileList, id } = this - if (!handleParam.dealTime) return this.showToast('澶勭悊鏃堕棿涓嶈兘涓虹┖') - ywWorkorderDeal({ - ...handleParam, - id, - dealFileList - }).then(res => { - if(res.code == 200){ - this.showToast('鎿嶄綔鎴愬姛') - uni.navigateBack() - } + handleOpen() { + this.isShowHandle = true + this.$set(this.handleParam, 'dealTime', dayjs().format('YYYY-MM-DD HH:mm:ss')); + }, + videoClick(item) { + this.videoPlay = true; + this.videoContext = uni.createVideoContext("myvideo", this); // this杩欎釜鏄疄渚嬪璞� 蹇呬紶 + this.videoUrl = item.fileurlFull; + this.videoContext.requestFullScreen(); + this.$nextTick(() => { + this.videoContext.play(); }) - }, - handleCall() { - const { info } = this - uni.makePhoneCall({ - phoneNumber: info.creatorMobile - }); + }, + screenChange(e) { + let fullScreen = e.detail.fullScreen // 鍊紅rue涓鸿繘鍏ュ叏灞忥紝false涓洪��鍑哄叏灞� + if (!fullScreen) { + //閫�鍑哄叏灞� + this.videoPlay = false // 闅愯棌鎾斁鐩掑瓙 + } + }, + closeVideo() { + this.videoPlay = false + this.videoContext = null + }, + onSubmit() { + const { + handleParam, + dealFileList, + id + } = this + if (!handleParam.dealTime) return this.showToast('澶勭悊鏃堕棿涓嶈兘涓虹┖') + ywWorkorderDeal({ + ...handleParam, + id, + dealFileList + }).then(res => { + if (res.code == 200) { + this.showToast('鎿嶄綔鎴愬姛') + uni.navigateBack() + } + }) + }, + handleCall() { + const { + info + } = this + uni.makePhoneCall({ + phoneNumber: info.creatorMobile + }); }, getDetail() { ywWorkorderD(this.id).then(res => { @@ -323,7 +367,7 @@ image, video { - width: 156rpx; + width: 156rpx; height: 156rpx; } } @@ -488,28 +532,37 @@ display: flex; flex-wrap: wrap; margin-bottom: 30rpx; + max-height: 362rpx; + overflow-y: auto; + margin-right: -30rpx; } .adduser_list_item_ipt1_upload { margin-top: 24rpx; width: 156rpx; height: 156rpx; - margin-right: 24rpx; - border: 2rpx solid #e5e5e5; + margin-right: 22rpx; + border: 1rpx solid #e5e5e5; background: #f7f7f7; color: #666666; font-size: 22rpx; + box-sizing: border-box; display: flex; flex-direction: column; align-items: center; justify-content: center; position: relative; + &:nth-of-type(4n) { + margin-right: 0; + } + .close { position: absolute; right: -20rpx; top: -20rpx; z-index: 9999; + background-color: #fff; } image { @@ -523,4 +576,46 @@ } } } + + .video_wrap { + position: relative; + border: 1px solid; + width: 156rpx; + height: 156rpx; + border-radius: 4rpx; + + .play { + width: 60rpx !important; + height: 60rpx !important; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + } + + .video_app { + overflow: hidden; + position: fixed; + left: 0; + top: 0; + width: 100vw; + height: 100vh; + display: flex; + align-items: center; + z-index: 9990; + + .bg { + background-color: rgba(0, 0, 0, .6); + position: absolute; + width: 100%; + height: 100%; + z-index: -1; + } + + video { + width: 100%; + height: 42vh; + } + } </style> \ No newline at end of file diff --git a/h5/pages/workOrder/edit.vue b/h5/pages/workOrder/edit.vue index 3e0c34d..ff72df9 100644 --- a/h5/pages/workOrder/edit.vue +++ b/h5/pages/workOrder/edit.vue @@ -51,7 +51,7 @@ <u-icon class="close" size="20" name="close-circle-fill" color="red" @click="fileDel('fileList', i)"></u-icon> <image v-if="item.type == 0" :src="item.fileurlFull" mode="widthFix"></image> - <video v-if="item.type == 1" :src="item.fileurlFull" :controls="false"></video> + <video v-if="item.type == 1" :show-center-play-btn="false" :src="item.fileurlFull" :controls="false"></video> </view> </view> </view> @@ -116,7 +116,7 @@ showCate2: false, areaType: [ [{ - name: '瀹ゅ唴瑁呬慨', + name: '瀹ゅ唴缁翠慨', id: 0 }, { @@ -431,7 +431,10 @@ position: absolute; right: -20rpx; top: -20rpx; - z-index: 9999; + z-index: 9999; + background-color: #fff; + border-radius: 50%; + overflow: hidden; } image { diff --git a/h5/pages/workOrder/list.vue b/h5/pages/workOrder/list.vue index 2da419f..7d8e1d2 100644 --- a/h5/pages/workOrder/list.vue +++ b/h5/pages/workOrder/list.vue @@ -32,7 +32,7 @@ <scroll-view scroll-y="true" class="scroll_Y" @scrolltolower="scrolltolower"> <view class="list"> <view class="item" v-for="item in list" @click="itemClick(item)"> - <image v-if="item.dealStatus == 0" src="@/static/side/workordered.png" class="icon"></image> + <image v-if="item.dealStatus == 0 || item.dealStatus == 1" src="@/static/side/workordered.png" class="icon"></image> <image v-else src="@/static/side/workorder.png" class="icon"></image> <view class="content"> <view class="name_wrap line"> @@ -216,7 +216,7 @@ } .scroll_Y{ - height: calc(100vh - 320rpx); + height: calc(100vh - 250rpx); } .list { .item { @@ -224,7 +224,7 @@ // height: 290rpx; padding: 30rpx 0; border-bottom: 2rpx solid #E5E5E5; - + .icon { width: 80rpx; height: 80rpx; diff --git a/h5/static/plan_ic_finish@2x.png b/h5/static/plan_ic_finish@2x.png new file mode 100644 index 0000000..01fafcc --- /dev/null +++ b/h5/static/plan_ic_finish@2x.png Binary files differ diff --git a/h5/static/play.png b/h5/static/play.png new file mode 100644 index 0000000..1b4b225 --- /dev/null +++ b/h5/static/play.png Binary files differ diff --git a/h5/utils/config.js b/h5/utils/config.js index 450773b..49ff135 100644 --- a/h5/utils/config.js +++ b/h5/utils/config.js @@ -1,6 +1,6 @@ - // export const baseUrl = 'gateway_interface/' + export const baseUrl = 'gateway_interface/' // export const baseUrl = 'http://192.168.0.173/gateway_interface/' -export const baseUrl = 'https://zhcg.fnwtzx.com/gateway_interface/' +// export const baseUrl = 'https://zhcg.fnwtzx.com/gateway_interface/' export const uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do` export const uploadUrl = `${baseUrl}visitsAdmin/cloudService/public/uploadBatch` diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java index 2efd887..42c3b1f 100644 --- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java +++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/CompanyCloudController.java @@ -1,6 +1,5 @@ package com.doumee.cloud.admin; -import com.baomidou.mybatisplus.annotation.TableField; import com.doumee.api.BaseController; import com.doumee.config.DataSyncConfig; import com.doumee.config.annotation.CloudRequiredPermission; @@ -123,6 +122,12 @@ public ApiResponse<List<Company>> list (@RequestBody Company company,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ return ApiResponse.success(companyService.findList(company)); } + @ApiOperation("鏂板缓鍚堝悓鎵�灞炲叕鍙哥瓫閫�") + @PostMapping("/listForConstract") + @CloudRequiredPermission("business:company:query") + public ApiResponse<List<Company>> listForConstract (@RequestBody Company company,@RequestHeader(Constants.HEADER_USER_TOKEN) String token){ + return ApiResponse.success(companyService.listForConstract(company)); + } diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java index 2e1e381..1d28bbf 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwContractBill.java @@ -105,7 +105,6 @@ @ApiModelProperty(value = "璐圭敤绫诲瀷锛�0=鍛ㄦ湡璐圭敤锛�1=涓�娆℃�ц垂鐢�") @TableField(exist = false) private Integer feeType; - @ApiModelProperty(value = "鎵�灞炲叕鍙�", example = "1") private Integer companyId; diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java index a7c167c..bc6ea4b 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolScheme.java @@ -122,4 +122,15 @@ @ApiModelProperty(value = "瓒呮湡浠诲姟鏁�") @TableField(exist = false) private Integer timeOutTaskNum; + + @ApiModelProperty(value = "寮�濮嬫棩鏈燂紙鎼滅储鎴鏃ユ湡锛�") + @TableField(exist = false) + @JsonFormat(pattern = "yyyy-MM-dd") + private Date startDateSec; + + @ApiModelProperty(value = "缁撴潫鏃ユ湡锛堟悳绱㈡埅姝㈡棩鏈燂級") + @TableField(exist = false) + @JsonFormat(pattern = "yyyy-MM-dd") + private Date endDateSec; + } diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java index e3905db..d6ff2a8 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwPatrolTaskRecord.java @@ -35,7 +35,6 @@ @ApiModelProperty(value = "鍒涘缓鏃堕棿") @ExcelColumn(name="鍒涘缓鏃堕棿") - @JsonFormat(pattern = "yyyy-MM-dd") private Date createDate; @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1") @@ -44,7 +43,6 @@ @ApiModelProperty(value = "鏇存柊鏃堕棿") @ExcelColumn(name="鏇存柊鏃堕棿") - @JsonFormat(pattern = "yyyy-MM-dd") private Date editDate; @ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1") diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java index 52b009b..8b9b37c 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwWorkorder.java @@ -33,6 +33,7 @@ @ApiModelProperty(value = "鍒涘缓鏃堕棿") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ExcelColumn(name="涓婃姤鏃堕棿",index = 5,width = 16,dateFormat = "yyyy-MM-dd HH:mm:ss") private Date createDate; @ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1") @@ -83,7 +84,6 @@ @ApiModelProperty(value = "鎻愭姤鏃堕棿") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @ExcelColumn(name="涓婃姤鏃堕棿",index = 5,width = 16,dateFormat = "yyyy-MM-dd HH:mm:ss") private Date submitDate; @ApiModelProperty(value = "宸ュ崟鍒嗙被缂栫爜(鍏宠仈category锛�", example = "1") @@ -97,7 +97,7 @@ private String code; @ApiModelProperty(value = "澶勭悊鐘舵�� 0寰呭鐞� 1宸插垎娲� 2宸插鐞�", example = "1") - @ExcelColumn(name="宸ュ崟鐘舵��",index = 7,width = 10,valueMapping = "0=寰呭鐞�;1=宸插垎娲�;1=宸插鐞�;") + @ExcelColumn(name="宸ュ崟鐘舵��",index = 7,width = 10,valueMapping = "0=寰呭鐞�;1=宸插垎娲�;2=宸插鐞�;") private Integer dealStatus; @ApiModelProperty(value = "鍒嗘淳浜虹紪鐮�(鍏宠仈system_user)", example = "1") @@ -136,9 +136,12 @@ @TableField(exist = false) private String buildingName; @ApiModelProperty(value = "鎴挎簮鍚嶇О") - @ExcelColumn(name="鎴挎簮",index = 2,width = 10) @TableField(exist = false) private String roomName; + @ApiModelProperty(value = "鎶ヤ慨鍖哄煙") + @ExcelColumn(name="鎶ヤ慨鍖哄煙",index = 2,width = 10) + @TableField(exist = false) + private String areaNameInfo; @ApiModelProperty(value = "妤煎眰鍚嶇О") @TableField(exist = false) private String floorName; diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java index d890255..09e5135 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/CompanyService.java @@ -129,4 +129,6 @@ Integer createFinanceCompany(Company company); Integer updateFinanceCompany(Company company); + + List<Company> listForConstract(Company company); } diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java index 2416bac..28835e0 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/AreasServiceImpl.java @@ -102,6 +102,7 @@ wrapper.lambda().eq(Areas::getId,areas.getId()); Areas update = new Areas(); update.setName(areas.getName()); + update.setCode(areas.getCode()); update.setSortnum(areas.getSortnum()); areasMapper.update(update,wrapper); //鍒锋柊缂撳瓨鏁版嵁 @@ -326,7 +327,7 @@ CITY_LIST=null; AREA_LIST = null; ALL_AREA_TREE = null; - ALL_AREA_LIST = areasMapper.selectList(new QueryWrapper<>(a).lambda().orderByDesc(Areas::getSortnum)); + ALL_AREA_LIST = areasMapper.selectList(new QueryWrapper<>(a).lambda().orderByAsc(Areas::getCode)); if(ALL_AREA_LIST!=null){ for(Areas model : ALL_AREA_LIST){ if(Constants.equalsInteger(model.getType(),Constants.ZERO)){ diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java index a978630..573f959 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CompanyServiceImpl.java @@ -432,6 +432,18 @@ } @Override + public List<Company> listForConstract(Company company) { + MPJLambdaWrapper<Company> queryWrapper = new MPJLambdaWrapper<>(); + queryWrapper.selectAll(Company.class); + queryWrapper.like(company.getName() != null,Company::getName, company.getName()); + queryWrapper.eq(Company::getStatus, Constants.ZERO); + queryWrapper.eq(Company::getType, Constants.TWO); + queryWrapper.eq(Company::getIsdeleted, Constants.ZERO); + queryWrapper.exists("select b.id from yw_account b where b.isdeleted=0 and b.company_id=t.id and b.status=0"); + queryWrapper.orderByDesc(Company::getCreateDate); + return companyMapper.selectList(queryWrapper); + } + @Override public List<Company> findList(Company company) { MPJLambdaWrapper<Company> queryWrapper = new MPJLambdaWrapper<>(); if (company.getId() != null) { diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java index fb15ce1..12976d2 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java @@ -1016,6 +1016,8 @@ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝浜哄憳淇℃伅涓嶅瓨鍦紒"); } if(model.getCompanyId()!=null) { + member.setEditor(member.getLoginUserInfo().getId()); + member.setEditDate(new Date()); if(Constants.equalsInteger(member.getHeadStatus(),Constants.ONE)){ //濡傛灉鏄彇娑堜富绠� companyMapper.update(null,new UpdateWrapper<Company>().lambda() diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java index 59adbcc..375b2f6 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolSchemeServiceImpl.java @@ -321,11 +321,13 @@ .eq(YwPatrolScheme::getIsdeleted,Constants.ZERO) .like(StringUtils.isNotBlank(model.getTitle()),YwPatrolScheme::getTitle,model.getTitle()) //鏌ヨ鏈夋椂娈典氦闆嗙殑鏁版嵁 - .apply(Objects.nonNull(model.getStartDate())&&Objects.nonNull(model.getEndDate()), - " t.START_DATE <= '"+pageWrap.getModel().getEndDate()+"' and t.END_DATE >= '"+pageWrap.getModel().getStartDate()+"' " - ) -// .ge(Objects.nonNull(model.getStartDate()),YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getStartDate())) -// .le(Objects.nonNull(model.getEndDate()),YwDeviceRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getEndDate())) + /* .apply(Objects.nonNull(model.getStartDate())&&Objects.nonNull(model.getEndDate()), + " t.START_DATE <= '"+pageWrap.getModel().getEndDate()+"' or t.END_DATE >= '"+pageWrap.getModel().getStartDate()+"' " + )*/ + .ge( model.getStartDate()!=null,YwPatrolScheme::getStartDate, Utils.Date.getStart(pageWrap.getModel().getStartDate())) + .le(Objects.nonNull(model.getEndDate()),YwPatrolScheme::getStartDate, Utils.Date.getStart(pageWrap.getModel().getEndDate())) + .ge(Objects.nonNull(model.getStartDateSec()),YwPatrolScheme::getEndDate, Utils.Date.getStart(pageWrap.getModel().getStartDateSec())) + .le(Objects.nonNull(model.getEndDateSec()),YwPatrolScheme::getEndDate, Utils.Date.getStart(pageWrap.getModel().getEndDateSec())) .orderByDesc(YwPatrolScheme::getCreateDate) ; IPage<YwPatrolScheme> iPage = ywPatrolSchemeMapper.selectJoinPage(page,YwPatrolScheme.class,queryWrapper); diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java index 92357ea..d025f21 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskRecordServiceImpl.java @@ -137,7 +137,33 @@ .orderByDesc(YwPatrolScheme::getCreateDate) ; IPage<YwPatrolTaskRecord> iPage = ywPatrolTaskRecordMapper.selectJoinPage(page,YwPatrolTaskRecord.class,queryWrapper); + if(iPage!=null && iPage.getRecords()!=null){ + for(YwPatrolTaskRecord m : iPage.getRecords()){ + getFileListByModel(m); + } + } return PageData.from(iPage); + } + + private void getFileListByModel(YwPatrolTaskRecord ywPatrolTaskRecord) { + //闄勪欢鏁版嵁 + List<Multifile> multifileList = multifileMapper.selectJoinList(Multifile.class,new MPJLambdaWrapper<Multifile>() + .selectAll(Multifile.class) + .selectAs(SystemUser::getRealname,Multifile::getUserName) + .leftJoin(SystemUser.class,SystemUser::getId,Multifile::getCreator) + .eq(Multifile::getObjId,ywPatrolTaskRecord.getId()) + .eq(Multifile::getIsdeleted,Constants.ZERO) + .eq(Multifile::getObjType,Constants.MultiFile.FN_PATROL_TASK_RECORD_FILE.getKey())); + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ + String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() + +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_PATROL).getCode(); + for (Multifile multifile:multifileList) { + if(StringUtils.isNotBlank(multifile.getFileurl())){ + multifile.setFileurlFull(path + multifile.getFileurl()); + } + } + ywPatrolTaskRecord.setMultifileList(multifileList); + } } @Override @@ -286,24 +312,7 @@ if(Objects.isNull(ywPatrolTaskRecord)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈尮閰嶅埌宸℃鐐�!"); } - //闄勪欢鏁版嵁 - List<Multifile> multifileList = multifileMapper.selectJoinList(Multifile.class,new MPJLambdaWrapper<Multifile>() - .selectAll(Multifile.class) - .selectAs(SystemUser::getRealname,Multifile::getUserName) - .leftJoin(SystemUser.class,SystemUser::getId,Multifile::getCreator) - .eq(Multifile::getObjId,ywPatrolTaskRecord.getId()) - .eq(Multifile::getIsdeleted,Constants.ZERO) - .eq(Multifile::getObjType,Constants.MultiFile.FN_PATROL_TASK_RECORD_FILE.getKey())); - if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(multifileList)){ - String path = systemDictDataBiz.queryByCode(Constants.FTP,Constants.FTP_RESOURCE_PATH).getCode() - +systemDictDataBiz.queryByCode(Constants.FTP,Constants.YW_PATROL).getCode(); - for (Multifile multifile:multifileList) { - if(StringUtils.isNotBlank(multifile.getFileurl())){ - multifile.setFileurlFull(path + multifile.getFileurl()); - } - } - ywPatrolTaskRecord.setMultifileList(multifileList); - } + getFileListByModel(ywPatrolTaskRecord); return ywPatrolTaskRecord; diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java index b5998ec..104c528 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolTaskServiceImpl.java @@ -86,8 +86,8 @@ .selectAs(YwPatrolScheme::getCode,YwPatrolTask::getPlanCode) .selectAs(YwPatrolScheme::getTitle,YwPatrolTask::getPlanTitle) .selectAs(SystemUser::getRealname,YwPatrolTask::getUserName) - .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and t.ISDELETED = 0 ) ",YwPatrolTask::getPatrolNum) - .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and t.STATUS = 1 and t.ISDELETED = 0) ",YwPatrolTask::getFinishNum) + .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and ytr.ISDELETED = 0 ) ",YwPatrolTask::getPatrolNum) + .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and ytr.STATUS = 1 and ytr.ISDELETED = 0) ",YwPatrolTask::getFinishNum) .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolTask::getDealUserId) .leftJoin(YwPatrolScheme.class,YwPatrolScheme::getId,YwPatrolTask::getSchemeId) .eq(YwPatrolTask::getIsdeleted, Constants.ZERO) @@ -140,8 +140,8 @@ .selectAs(YwPatrolScheme::getCode,YwPatrolTask::getPlanCode) .selectAs(YwPatrolScheme::getTitle,YwPatrolTask::getPlanTitle) .selectAs(SystemUser::getRealname,YwPatrolTask::getUserName) - .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and t.ISDELETED = 0 ) ",YwPatrolTask::getPatrolNum) - .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and t.STATUS = 1 and t.ISDELETED = 0) ",YwPatrolTask::getFinishNum) + .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and ytr.ISDELETED = 0 ) ",YwPatrolTask::getPatrolNum) + .select(" ( select count(1) from yw_patrol_task_record ytr where ytr.TASK_ID = t.id and ytr.STATUS = 1 and ytr.ISDELETED = 0) ",YwPatrolTask::getFinishNum) .leftJoin(SystemUser.class,SystemUser::getId,YwPatrolTask::getDealUserId) .leftJoin(YwPatrolScheme.class,YwPatrolScheme::getId,YwPatrolTask::getSchemeId) .eq(YwPatrolTask::getIsdeleted, Constants.ZERO) diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java index 2e2061a..2e0587a 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwProjectServiceImpl.java @@ -282,6 +282,7 @@ List<YwRoom> ywRoomList = ywRoomMapper.selectList(new QueryWrapper<YwRoom>().lambda() .eq(YwRoom::getIsdeleted,Constants.ZERO) .eq(YwRoom::getStatus,Constants.ZERO) + .eq(YwRoom::getIsInvestment,Constants.ONE) .eq(Objects.nonNull(dataDTO.getProjectId()),YwRoom::getProjectId,dataDTO.getProjectId()) .apply(Objects.nonNull(dataDTO)&&Objects.nonNull(dataDTO.getStartDate())&&Objects.nonNull(dataDTO.getEndDate())," id not in (" + " SELECT y2.room_id FROM yw_contract y1 left join yw_contract_room y2 on y1.id = y2.contract_id where 1 = 1 and y1.`STATUS` in( 0,1,2) " + @@ -291,7 +292,7 @@ " SELECT y2.room_id FROM yw_contract y1 left join yw_contract_room y2 on y1.id = y2.contract_id where 1 = 1 and y1.`STATUS` = 3 " + " and y1.START_DATE < '"+dataDTO.getEndDate()+" 00:00:00' and y1.BT_DATE > '"+ dataDTO.getStartDate() +" 00:00:00' " + " ) ") - .orderByAsc(YwRoom::getSortnum) + .orderByAsc(YwRoom::getRoomNum) ); for (YwRoom data:ywRoomList) { diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java index c8a86f3..42f163b 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwWorkorderServiceImpl.java @@ -499,10 +499,28 @@ queryWrapper.orderByAsc(sortData.getProperty()); } } + if(StringUtils.isNotBlank(pageWrap.getModel().getBuildingName())){ + queryWrapper.and(rw ->{ + rw.like(YwBuilding::getName,pageWrap.getModel().getBuildingName()).or() + .like(YwRoom::getName,pageWrap.getModel().getBuildingName()); + }); + } queryWrapper.ge(Objects.nonNull(pageWrap.getModel().getQueryStartTime()), YwWorkorder::getCreateDate, pageWrap.getModel().getQueryStartTime()) .le(Objects.nonNull(pageWrap.getModel().getQueryEndTime()), YwWorkorder::getCreateDate, pageWrap.getModel().getQueryEndTime()); queryWrapper.orderByDesc(YwContract::getCreateDate ); - return PageData.from(ywWorkorderMapper.selectPage(page, queryWrapper)); + + PageData<YwWorkorder> result = PageData.from(ywWorkorderMapper.selectPage(page, queryWrapper)); + if(result!=null && result.getRecords()!=null){ + for(YwWorkorder m : result.getRecords()){ + if(Constants.equalsInteger(m.getAreaType(),Constants.ZERO)){ + //0瀹ゅ唴缁翠慨 + m.setAreaNameInfo(StringUtils.defaultString(m.getBuildingName(),"")+"/"+StringUtils.defaultString(m.getRoomNum(),"")); + }else{ + m.setAreaNameInfo(StringUtils.defaultString(m.getBuildingName(),"")+"/"+StringUtils.defaultString(m.getFloorName(),"")); + } + } + } + return result; } @Override diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java index a846351..613cd7a 100644 --- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java +++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/erp/ErpSyncServiceImpl.java @@ -10,16 +10,18 @@ import com.doumee.core.constants.ResponseStatus; import com.doumee.core.erp.ErpConstants; import com.doumee.core.erp.ErpTool; -import com.doumee.core.erp.model.openapi.request.erp.*; +import com.doumee.core.erp.model.openapi.request.*; +import com.doumee.core.erp.model.openapi.request.erp.OrgListRequest; +import com.doumee.core.erp.model.openapi.request.erp.UserFailRequest; +import com.doumee.core.erp.model.openapi.request.erp.UserListRequest; +import com.doumee.core.erp.model.openapi.response.*; import com.doumee.core.erp.model.openapi.response.erp.ERPApiResponse; +import com.doumee.core.erp.model.openapi.response.erp.ErpOrgListResponse; +import com.doumee.core.erp.model.openapi.response.erp.ErpUserListResponse; import com.doumee.core.exception.BusinessException; import com.doumee.core.haikang.model.HKConstants; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; -import com.doumee.core.erp.model.openapi.request.*; -import com.doumee.core.erp.model.openapi.response.*; -import com.doumee.core.erp.model.openapi.response.erp.ErpOrgListResponse; -import com.doumee.core.erp.model.openapi.response.erp.ErpUserListResponse; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DESUtil; import com.doumee.core.utils.DateUtil; @@ -31,8 +33,8 @@ import com.doumee.dao.business.join.DeviceEventJoinMapper; import com.doumee.dao.business.join.VisitEventJoinMapper; import com.doumee.dao.business.model.*; -import com.doumee.service.business.ext.ERPSyncService; import com.doumee.service.business.InterfaceLogService; +import com.doumee.service.business.ext.ERPSyncService; import com.doumee.service.business.impl.MemberServiceImpl; import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; -- Gitblit v1.9.3