admin/public/favicon.icoadmin/src/api/system/sms.js
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,10 @@ import request from '@/utils/request' // çä¿¡éç¥ å页å表 export function getSmsList (data) { return request.post('/visitsAdmin/cloudService/business/smsConfig/page', data) } // çä¿¡éç¥ ç¶ææ´æ° export function SmsStatusUpdate (data) { return request.post('/visitsAdmin/cloudService/business/smsConfig/updateById', data) } admin/src/components/business/OperaCarsWindow.vue
@@ -16,6 +16,7 @@ label: 'name', value: 'id', children: 'childCategoryList', checkStrictly: true }"></el-cascader> </el-form-item> <el-form-item label="éæ©ç»ç»ï¼" prop="groupId"> admin/src/components/business/OperaDeviceLedWindow.vue
@@ -10,7 +10,7 @@ <el-input v-model="form.title" placeholder="请è¾å ¥LED屿¾ç¤ºå 容" v-trim/> </el-form-item> <el-form-item label="ææ¾é度" prop="speed"> <el-input type="number" v-model="form.speed" placeholder="请è¾å ¥ææ¾é度(大äº0æ°åï¼" v-trim/> <el-input type="number" v-model="form.speed" placeholder="请è¾å ¥ææ¾éåº¦ï¼æ°åè¶å°ææ¾è¶å¿«ï¼å»ºè®®é度8" v-trim/> </el-form-item> </el-form> </GlobalWindow> admin/src/components/business/OperaPlatformApproveTemplWindow.vue
@@ -1,11 +1,5 @@ <template> <GlobalWindow :title="title" width="100%" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm" > <GlobalWindow :title="title" width="100%" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm"> <TableLayout> <template v-slot:table-wrap> <div class="config"> @@ -23,14 +17,10 @@ <img src="@/assets/images/peizhi_ar@2x.png" alt="" /> </div> <div v-for="(item, index) in apprList" :key="index"> <div class="item yellow" :class="{ <div class="item yellow" :class="{ active: activeIndex == index, blue: item.type == '1', }" @click="flowClick(index)" > }" @click="flowClick(index)"> <div class="head">{{ item.remark }}</div> <div class="content"> <!-- å®¡æ¹ --> @@ -40,25 +30,19 @@ </template> <template v-if="item.memberType == '1'"> <div v-if="item.objIds && item.objIds.length === 1"> <span >{{ item.objIds[0].name }} {{ item.objIds[0].companyName }}</span > <span>{{ item.objIds[0].name }} {{ item.objIds[0].companyName }}</span> <span v-if="item.approveType == 0 && item.type == '0'"> æç¾</span > æç¾</span> <span v-if="item.approveType == 1 && item.type == '0'"> ä¼ç¾</span > ä¼ç¾</span> </div> <div v-else-if="item.objIds && item.objIds.length > 1"> <span>{{ item.objIds[0].name }} ç</span> <span v-if="item.approveType == 0 && item.type == '0'"> æç¾</span > æç¾</span> <span v-if="item.approveType == 1 && item.type == '0'"> ä¼ç¾</span > ä¼ç¾</span> </div> <div v-else>è¯·éæ©</div> <i class="el-icon-arrow-right"></i> @@ -67,19 +51,14 @@ <!-- æé --> <template v-if="item.type == 1"> <div v-if="item.objIds && item.objIds.length === 1"> <span >{{ item.objIds[0].name }} {{ item.objIds[0].companyName }}</span > <span>{{ item.objIds[0].name }} {{ item.objIds[0].companyName }}</span> </div> <div v-else-if="item.objIds && item.objIds.length > 1"> <span>{{ item.objIds[0].name }} ç</span> </div> <div v-else>è¯·éæ©</div> <i v-if="item.memberType == '1'" class="el-icon-arrow-right" ></i> <i v-if="item.memberType == '1'" class="el-icon-arrow-right"></i> </template> </div> </div> @@ -88,11 +67,7 @@ <div class="line"></div> <img src="@/assets/images/peizhi_ar@2x.png" alt="" /> </template> <i v-if="apprList.length - 2 === index" @click="handleAddAppr()" class="el-icon-circle-plus add" ></i> <i v-if="apprList.length - 2 === index" @click="handleAddAppr()" class="el-icon-circle-plus add"></i> </div> </div> </div> @@ -102,171 +77,114 @@ <div class="config_data_item_label">éæ©è¯¥èç¹ç审æ¹äºº</div> <div class="df_ac mb10"> <div>审æ¹èç¹åç§°</div> <el-input class="w200 ml10" v-model="apprList[activeIndex].remark" ></el-input> <el-input class="w200 ml10" v-model="apprList[activeIndex].remark"></el-input> </div> <!-- æé人 --> <template v-if="apprList[activeIndex].type == '1'"> <div class="config_data_item_reviewed_content"> <div v-for="mem in apprList[activeIndex].objIds" :key="mem.id" class="config_data_item_reviewed_content_item" > <div v-for="mem in apprList[activeIndex].objIds" :key="mem.id" class="config_data_item_reviewed_content_item"> <span>{{ mem.name }}</span> <i class="el-icon-close"></i> </div> <span class="add" @click="selStaff">+æ·»å </span> </div> </template> <el-radio-group v-if="apprList[activeIndex].type == '0'" v-model="apprList[activeIndex].memberType" > <!-- <el-radio :label="0">ç³è¯·äºº</el-radio>--> <el-radio-group v-if="apprList[activeIndex].type == '0'" v-model="apprList[activeIndex].memberType"> <!-- <el-radio :label="0">ç³è¯·äºº</el-radio>--> <el-radio :label="1">æå®äººå</el-radio> <el-radio :label="2">é¨é¨ä¸»ç®¡</el-radio> </el-radio-group> <div class="config_data_item_reviewed" v-if="apprList[activeIndex].memberType == 1" > <div class="config_data_item_reviewed" v-if="apprList[activeIndex].memberType == 1"> <div class="config_data_item_reviewed_label"> <span>æå®å®¡æ ¸äºº</span> <span>ä¸è¶ è¿20人</span> </div> <div class="config_data_item_reviewed_content"> <div v-for="(mem, memIndex) in apprList[activeIndex].objIds" :key="mem.id" class="config_data_item_reviewed_content_item" > <div v-for="(mem, memIndex) in apprList[activeIndex].objIds" :key="mem.id" class="config_data_item_reviewed_content_item"> <span>{{ mem.name }}</span> <i class="el-icon-close" @click="memDel(memIndex)"></i> </div> <span class="add" @click="selStaff">+æ·»å </span> </div> </div> <div class="config_data_item_reviewed" v-if="apprList[activeIndex].memberType == 2" > <div class="config_data_item_reviewed" v-if="apprList[activeIndex].memberType == 2"> <div class="config_data_item_reviewed_label"> <span>é¨é¨ä¸»ç®¡</span> </div> <div class="config_data_item_reviewed_r"> <span>ç³è¯·äººç</span> <el-select v-model="apprList[activeIndex].objLevel" placeholder="è¯·éæ©" style="margin: 0 20px 0 10px" > <el-select v-model="apprList[activeIndex].objLevel" placeholder="è¯·éæ©" style="margin: 0 20px 0 10px"> <el-option label="ç´æ¥ä¸»ç®¡" :value="0" /> <el-option label="äºçº§ä¸»ç®¡" :value="1" /> <el-option label="ä¸çº§ä¸»ç®¡" :value="2" /> <el-option label="å级主管" :value="4" /> </el-select> <el-checkbox v-model="apprList[activeIndex].noleaderOpt" :true-label="1" :false-label="0" >æ¾ä¸å°ä¸»ç®¡æ¶ï¼ç±ä¸çº§ä¸»ç®¡ä»£å®¡æ ¸</el-checkbox> <el-checkbox v-model="apprList[activeIndex].noleaderOpt" :true-label="1" :false-label="0">æ¾ä¸å°ä¸»ç®¡æ¶ï¼ç±ä¸çº§ä¸»ç®¡ä»£å®¡æ ¸</el-checkbox> </div> </div> </div> <div class="config_data_item" v-if=" <div class="config_data_item" v-if=" (apprList[activeIndex].memberType == 1 || apprList[activeIndex].memberType == 2) && apprList[activeIndex].type == '0' " > "> <div class="config_data_item_label"> å®¡æ¹æ¹å¼ <span>审æ¹äººä¸ºå¤ä¸ªæ¶ï¼éç¨çå®¡æ¹æ¹å¼</span> </div> <el-radio-group v-model="apprList[activeIndex].approveType" style="display: flex; flex-direction: column" > <el-radio :label="0" style="margin-bottom: 20px" >æç¾ï¼å ¶ä¸ä¸å审æ¹äººåæææç»å³å¯ï¼</el-radio > <el-radio-group v-model="apprList[activeIndex].approveType" style="display: flex; flex-direction: column"> <el-radio :label="0" style="margin-bottom: 20px">æç¾ï¼å ¶ä¸ä¸å审æ¹äººåæææç»å³å¯ï¼</el-radio> <el-radio :label="1">ä¼ç¾ï¼ææå®¡æ¹äººé½åææå¯éè¿ï¼</el-radio> </el-radio-group> </div> <div class="config_data_submit"> <el-button @click="onSubmit" :loading="subLoading" style="background: #435ebe" type="primary" >ä¿åé 置项</el-button > <el-button v-if="activeIndex !== 0 && activeIndex !== apprList.length - 1" type="danger" plain @click="handleDel" >å é¤èç¹</el-button > <el-button @click="onSubmit" :loading="subLoading" style="background: #435ebe" type="primary">ä¿åé 置项</el-button> <el-button v-if="activeIndex !== 0 && activeIndex !== apprList.length - 1" type="danger" plain @click="handleDel">å é¤èç¹</el-button> </div> </div> </div> </template> <!-- --> <el-dialog title="éæ©åå·¥" :visible.sync="isShowTransfer" width="1000px" style="z-index: 99999" append-to-body> <el-dialog title="éæ©åå·¥" :visible.sync="isShowTransfer" width="900px" style="z-index: 99999" append-to-body> <div class="staff_modal"> <div class="left"> <div style=" <div style=" width: 100%; height: 50px; background: rgba(242, 242, 242, 1); line-height: 50px; text-align: center; font-size: 14px; " > "> ä¼ä¸ç»ç»æ¶æ </div> <div style="width: 100%; height: 100%; overflow-y: scroll"> <Tree :list="companyTree" :defaultProps="{ <Tree :list="companyTree" :defaultProps="{ name: 'name', status: 'fsStatus', children: 'childList', id: 'id', }" @callback="callback" /> }" @callback="callback" /> </div> </div> <el-transfer filterable :title="['æªé', 'å·²é']" openAll :props="{ label: 'name', key: 'keyTemp' }" filter-placeholder="æç´¢åå·¥" v-model="searchForm.objIds" :data="memberList" class="transfer" > <el-transfer filterable :titles="['æªé', 'å·²é']" openAll :props="{ label: 'name', key: 'keyTemp' }" filter-placeholder="æç´¢åå·¥" v-model="searchForm.objIds" :data="memberList" class="transfer"> </el-transfer> </div> <span slot="footer" class="dialog-footer"> <el-button @click="isShowTransfer = false">å æ¶</el-button> <el-button type="primary" @click="TransferSub">ç¡® å®</el-button> </span> <el-button @click="isShowTransfer = false">å æ¶</el-button> <el-button type="primary" @click="TransferSub">ç¡® å®</el-button> </span> </el-dialog> </TableLayout> <span slot="footer" class="dialog-footer"> <el-button @click="visible= false">è¿å</el-button> </span> <el-button @click="visible = false">è¿å</el-button> </span> </GlobalWindow> </template> @@ -274,7 +192,7 @@ import BaseOpera from '@/components/base/BaseOpera' import TableLayout from '@/layouts/TableLayout' import Tree from '@/components/common/Tree' import {approveTemplSave, approveTemplById} from '@/api' import { approveTemplSave, approveTemplById } from '@/api' import { fetchList } from '@/api/business/company' import { fetchList as memberListPost } from '@/api/business/member' import GlobalWindow from '@/components/common/GlobalWindow' @@ -282,14 +200,14 @@ name: 'OperaPlatformReasonWindow', extends: BaseOpera, components: { Tree, GlobalWindow, TableLayout }, data () { data() { return { model:{}, model: {}, reasonId: null, activeType: '6', subLoading: false, apprList: [ { remark: '审æ¹äºº', active: false,memberType:1, type: '1', objIds: [] }, { remark: '审æ¹äºº', active: false, memberType: 1, type: '1', objIds: [] }, { remark: 'æé人', active: false, type: '1', objIds: [] } ], activeIndex: 0, @@ -300,18 +218,18 @@ companyTree: [] } }, created () { created() { }, methods: { open (title, row) { open(title, row) { this.title = title + 'ã' + row.reason + 'ã' this.visible = true this.reasonId = row.id this.model = row this.getfindCompanyTreePage() this.apprList = [ { remark: '审æ¹äºº', active: false, type: '0',memberType:1, objIds: [] }, { remark: '审æ¹äºº', active: false, type: '0', memberType: 1, objIds: [] }, { remark: 'æé人', active: false, type: '1', objIds: [] } ] this.param = {} @@ -321,7 +239,7 @@ this.companyTree = [] this.initDate() }, flowClick (i) { flowClick(i) { this.activeIndex = i this.apprList.forEach((item, index) => { if (i === index) { @@ -339,8 +257,8 @@ } }) }, initDate () { if(this.model.approveTemplId){ initDate() { if (this.model.approveTemplId) { approveTemplById(this.model.approveTemplId).then(res => { if (res && res.paramList) { const arr = res.paramList || [] @@ -353,7 +271,7 @@ companyName: i.companyName } }) }else{ } else { item.objIds = [] } }) @@ -365,7 +283,7 @@ }) } }, onSubmit () { onSubmit() { const { apprList, activeType } = this const temp = JSON.parse(JSON.stringify(apprList)) temp.forEach((item, index) => { @@ -379,7 +297,7 @@ this.subLoading = true approveTemplSave({ type: activeType, reasonId:this.model.id, reasonId: this.model.id, paramList: temp }).then(res => { this.subLoading = false @@ -389,17 +307,17 @@ this.subLoading = false }) }, handleDel () { handleDel() { const { activeIndex } = this this.apprList.splice(activeIndex, 1) this.activeIndex = 0 }, handleAddAppr () { this.apprList.splice(this.apprList.length - 1, 0, { remark: '审æ¹äºº', active: false,memberType:1, type: 0, objIds: [] }) handleAddAppr() { this.apprList.splice(this.apprList.length - 1, 0, { remark: '审æ¹äºº', active: false, memberType: 1, type: 0, objIds: [] }) // this.apprList.push({ remark: '审æ¹äºº', active: false, type: '0' }) }, // è·åç»ç»æ getfindCompanyTreePage () { getfindCompanyTreePage() { fetchList() .then(res => { if (res && res.length > 0) { @@ -411,7 +329,7 @@ } }) }, getMemberList () { getMemberList() { memberListPost({ model: { companyId: this.searchForm.companyId || '', @@ -433,13 +351,13 @@ // console.log('defaultProps', res) }) }, callback (row) { callback(row) { console.log(row) this.$set(this.searchForm, 'companyId', row.id) this.$set(this.searchForm, 'erpOrgId', row.erpId) this.getMemberList() }, TransferSub () { TransferSub() { const { activeIndex } = this if (this.searchForm.objIds && this.searchForm.objIds.length > 0) { if (this.searchForm.objIds.length > 20) return this.$message.warning('æå¤éæ©20人') @@ -460,7 +378,7 @@ this.isShowTransfer = false console.log(this.searchForm.objIds) }, memDel (memIndex) { memDel(memIndex) { const { activeIndex } = this this.apprList.forEach((item, index) => { if (activeIndex === index) { @@ -472,11 +390,11 @@ } }) }, selStaff () { selStaff() { this.isShowTransfer = true this.getMemberList() }, seleItem (i) { seleItem(i) { this.list.forEach((item, index) => { item.active = index === i }) @@ -485,175 +403,205 @@ } </script> <style lang="scss" scoped> .labelTip{ .labelTip { font-size: 12px; color: #666666; } .config { width: 100%; padding-bottom: 20px; box-sizing: border-box; height: calc(100vh - 140px); display: flex; align-items: center; justify-content: space-between; .config_list { width: 543px; height: 100%; flex-shrink: 0; border-radius: 2px; padding: 20px; box-sizing: border-box; border: 1px solid #eeeeee; background: #f7f7f7; .config_list_head { width: 100%; height: 40px; padding-bottom: 20px; box-sizing: border-box; height: calc(100vh - 140px); display: flex; align-items: center; justify-content: space-between; span { font-size: 18px; font-weight: 500; color: #222222; .config_list { width: 543px; height: 100%; flex-shrink: 0; border-radius: 2px; padding: 20px; box-sizing: border-box; border: 1px solid #eeeeee; background: #f7f7f7; .config_list_head { width: 100%; height: 40px; display: flex; align-items: center; justify-content: space-between; span { font-size: 18px; font-weight: 500; color: #222222; } } .config_content { width: 100%; height: calc(100% - 40px); padding-top: 45px; box-sizing: border-box; overflow-y: scroll; display: flex; align-items: center; flex-direction: column; &::-webkit-scrollbar { width: 0; } .active { border: 2px solid #4456ac !important; } .yellow { background: #e89e42 !important; } .blue { background: #5094f3 !important; } .arrows { display: flex; flex-direction: column; align-items: center; position: relative; .line { width: 1px; height: 60px; background-color: #ccc; } .add { font-size: 40px; color: #2080f7; position: absolute; cursor: pointer; z-index: 999; top: 10px; } img { width: 12px; } } .item { width: 200px; cursor: pointer; border: 2px solid #f7f7f7; height: 80px; background: #4456ac; border-radius: 2px; position: relative; display: flex; flex-direction: column; .head { height: 32px; line-height: 32px; padding: 2px 12px; color: #fff; } .content { flex: 1; background-color: #fff; display: flex; align-items: center; padding: 0 12px; justify-content: space-between; } &:last-child { margin: 0 !important; } } } } .config_data { flex: 1; height: 100%; margin-left: 20px; .config_data_submit { margin-top: 50px; } .config_data_item { width: 100%; display: flex; flex-direction: column; margin-bottom: 30px; &:last-child { margin: 0 !important; } .config_data_item_label { font-size: 16px; font-weight: 500; color: #222222; margin-bottom: 20px; span { font-size: 12px; font-weight: 400; color: #999999; margin-left: 10px; } } .config_data_item_reviewed { width: 100%; margin-top: 20px; .config_data_item_reviewed_r { margin-top: 10px; width: 100%; display: flex; align-items: center; span { flex-shrink: 0; font-size: 14px; font-weight: 400; color: #666666; } } .config_data_item_reviewed_label { display: flex; align-items: center; span { &:nth-child(1) { font-size: 14px; font-weight: 400; color: #222222; } &:nth-child(2) { font-size: 12px; font-weight: 400; color: #999999; margin-left: 8px; } } } } } } } } .config_content { width: 100%; height: calc(100% - 40px); padding-top: 45px; box-sizing: border-box; overflow-y: scroll; display: flex; align-items: center; flex-direction: column; &::-webkit-scrollbar { width: 0; } .active { border: 2px solid #4456ac !important; } .yellow { background: #e89e42 !important; } .blue { background: #5094f3 !important; } .arrows { display: flex; flex-direction: column; align-items: center; position: relative; .line { width: 1px; height: 60px; background-color: #ccc; } .add { font-size: 40px; color: #2080f7; position: absolute; cursor: pointer; z-index: 999; top: 10px; } img { width: 12px; } } .item { width: 200px; cursor: pointer; border: 2px solid #f7f7f7; height: 80px; background: #4456ac; border-radius: 2px; position: relative; display: flex; flex-direction: column; .head { height: 32px; line-height: 32px; padding: 2px 12px; color: #fff; } .content { flex: 1; background-color: #fff; display: flex; align-items: center; padding: 0 12px; justify-content: space-between; } &:last-child { margin: 0 !important; } } } } .config_data { flex: 1; height: 100%; margin-left: 20px; .config_data_submit { margin-top: 50px; } .config_data_item { width: 100%; display: flex; flex-direction: column; margin-bottom: 30px; &:last-child { margin: 0 !important; } .config_data_item_label { font-size: 16px; font-weight: 500; color: #222222; margin-bottom: 20px; span { font-size: 12px; font-weight: 400; color: #999999; margin-left: 10px; } } .config_data_item_reviewed { width: 100%; margin-top: 20px; .config_data_item_reviewed_r { margin-top: 10px; width: 100%; display: flex; align-items: center; span { flex-shrink: 0; font-size: 14px; font-weight: 400; color: #666666; } } .config_data_item_reviewed_label { display: flex; align-items: center; span { &:nth-child(1) { font-size: 14px; font-weight: 400; color: #222222; } &:nth-child(2) { font-size: 12px; font-weight: 400; color: #999999; margin-left: 8px; } } } } } } } .config_data_item_reviewed_content { width: 400px; margin-top: 10px; @@ -665,46 +613,62 @@ display: flex; align-items: flex-start; flex-wrap: wrap; .add { font-size: 12px; font-weight: 400; color: #435ebe; cursor: pointer; margin-top: 3px; .add { font-size: 12px; font-weight: 400; color: #435ebe; cursor: pointer; margin-top: 3px; } .config_data_item_reviewed_content_item { padding: 3px 5px; background: #f4f7fc; border-radius: 2px; box-sizing: border-box; margin-right: 10px; margin-bottom: 10px; span { font-size: 12px; font-weight: 400; color: #333333; } i { color: #949ba2; margin-left: 10px; cursor: pointer; } } } .config_data_item_reviewed_content_item { padding: 3px 5px; background: #f4f7fc; border-radius: 2px; box-sizing: border-box; margin-right: 10px; margin-bottom: 10px; span { font-size: 12px; font-weight: 400; color: #333333; } i { color: #949ba2; margin-left: 10px; cursor: pointer; } } } .staff_modal { display: flex; .left { width: 300px; margin-right: 20px; } .transfer { height: 600px; ::v-deep .el-transfer-panel__body { height: 500px; } ::v-deep .el-transfer-panel__list.is-filterable { height: 480px; } } .left { width: 240px; margin-right: 20px; } .transfer { height: 600px; width: 100%; display: flex; justify-content: center; align-items: center; ::v-deep .el-transfer-panel{ flex: 1; height: 100%; } ::v-deep .el-transfer-panel__body { height: 500px; } ::v-deep .el-transfer-panel__list.is-filterable { height: 480px; } } } </style> admin/src/layouts/TableLayout1.vue
@@ -8,10 +8,10 @@ </div>--> <Profile :roles="roles" :permissions="permissions"> <div style="width: 100%; height: 100%; padding: 0 16px; box-sizing: border-box; display: flex; align-items: center; justify-content: space-between;"> <div style="width: 300px; height: 100%; flex-shrink: 0; background: #ffffff;"> <div style="width: 240px; height: 100%; flex-shrink: 0; background: #ffffff;"> <slot name="menu"></slot> </div> <div style="width: calc(100% - 310px); height: 100%"> <div style="width: calc(100% - 250px); height: 100%"> <!-- æç´¢è¡¨åé¨å --> <div class="table-search-form" style="padding: 0 !important;"> <div class="form-wrap"> admin/src/views/platform/LogisticsRecord/leaveAuth.vue
@@ -122,7 +122,7 @@ { filed: 'selDate', type: 'datetimerange', label: 'æä½æ¶é´', label: 'ä½ä¸å®ææ¶é´æç´¢', pickerOptions: {} }, { admin/src/views/platform/LogisticsRecord/waybillQuery.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,181 @@ <template> <div class="main_app"> <QueryForm v-model="filters" :query-form-config="queryFormConfig" @changeForm='changeForm' @handleQuery="getList(1)" @clear="clear"> </QueryForm> <div class="pt16"> <el-button :loading="exLoading" @click="handleEx" v-permissions="['business:platformjob:exportExcel']">导åº</el-button> </div> <el-table class="mb20" v-loading="loading" :data="list" stripe> <el-table-column prop="billCode" label="å§å" min-width="100" show-overflow-tooltip /> <el-table-column prop="carCodeFront" label="ææºå·" min-width="100" show-overflow-tooltip /> <el-table-column prop="taskOrigin" label="è¥éåºå" min-width="100" show-overflow-tooltip /> <el-table-column prop="carrierName" label="夿³¨" min-width="100" show-overflow-tooltip /> <el-table-column prop="driverName" label="æåæ´æ°æ¶é´" min-width="100" show-overflow-tooltip /> <el-table-column prop="name" label="æä½" min-width="120" align="center" fixed="right" show-overflow-tooltip> <template v-slot="scope"> <el-button v-if="scope.row.status == '12'" type="text" class="red" v-permissions="['business:platformjob:delete']" @click="handleDel(scope.row)">å é¤</el-button> <el-button v-if="scope.row != 12" type="text" v-permissions="['business:platformjob:query']" @click="handleDetail(scope.row)">ç¼è¾</el-button> </template> </el-table-column> </el-table> <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> <!-- --> <!-- --> <WaybillDetailRef v-if="isShowDetail" ref="WaybillDetailRef" /> </div> </template> <script> import Pagination from '@/components/common/Pagination' import QueryForm from '@/components/common/QueryForm' import { platformJobPage, platformJobExport, platformJobDel } from '@/api' import { statusMap } from '../config' import WaybillDetailRef from "../components/WaybillDetail.vue" import GlobalWindow from '@/components/common/GlobalWindow' import UploadFaceImg from '@/components/common/UploadFaceImg' import { Message } from 'element-ui' import dayjs from 'dayjs' export default { components: { Pagination, QueryForm, WaybillDetailRef, GlobalWindow, UploadFaceImg }, data() { return { statusMap, isShowDetail: false, exLoading: false, loading: false, pagination: { pageSize: 10, page: 1, total: 0 }, filters: { selDate: [], fastdate: 0 }, list: [], queryFormConfig: { formItems: [ { filed: 'name', type: 'input', label: 'å§å' }, { filed: 'phone', type: 'input', label: 'ææºå·' } ], online: true }, } }, created() { this.changeRadio('0') this.getList() }, methods: { changeRadio(day) { const arr = [dayjs().subtract(day, 'day').format('YYYY-MM-DD') + ' 00:00:00', dayjs().format('YYYY-MM-DD') + ' 23:59:59'] this.$set(this.filters, 'selDate', arr) this.getList() }, changeForm(str) { if (str === 'selDate') { this.$set(this.filters, 'fastdate', null) this.getList() } }, getList(page) { const { pagination, filters } = this this.loading = true platformJobPage({ model: { ...filters, jobType: '0', createDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null, createDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null, }, capacity: pagination.pageSize, page: page || pagination.page, }).then(res => { this.loading = false this.list = res.records || [] this.list.forEach(item => { item.inTypeTemp = item.inType == 0 ? 'æ´æç' : 'ä»¶ç' item.taskOrigin = 'WMSè·å' }) this.pagination.total = res.total || 0 }, () => { this.loading = false }) }, handleDel(row) { this.$dialog.exportConfirm('确认å é¤åï¼').then(() => { platformJobDel(row.id).then(res => { Message.success('å 餿å') this.getList() }) }) }, handleEx() { this.$dialog.exportConfirm('确认导åºåï¼') .then(() => { this.exLoading = true platformJobExport({ page: this.pagination.page, capacity: 1000000, jobType: '0', model: this.filters }) .then(response => { this.download(response) }) .catch(e => { this.$tip.apiFailed(e) }) .finally(() => { this.exLoading = false }) }) }, clear() { this.pagination.page = 1 this.filters = { selDate: [], fastdate: 0 } this.getList() }, handleDetail(row) { this.isShowDetail = true this.$nextTick(() => { this.$refs.WaybillDetailRef.isShowModal = true this.$refs.WaybillDetailRef.id = row.id this.$refs.WaybillDetailRef.getDetail() }) }, handleSizeChange(capacity) { this.pagination.pageSize = capacity } } } </script> <style lang="scss" scoped> .param_title { font-size: 18px; font-weight: 600; color: #000000; margin-bottom: 15px; } </style> admin/src/views/platform/components/WaybillDetail.vue
@@ -27,7 +27,16 @@ <div class="title">ååå表</div> <div class="content"> <div class="item" v-for="item in info.wmsJobContractVOList"> <div class="contract">ååå·ï¼{{ item.contractCode }}</div> <div class="contract"> <span>ååå·ï¼{{ item.contractCode }}</span> <div> <span class="scs" v-if="item.platformWmsDetailList[0].status == 1">WMSä½ä¸å·²å®æ</span> <span class="pad" v-if="item.platformWmsDetailList[0].status == 0">WMSä½ä¸æªå®æ</span> <span class="err" v-if="item.platformWmsDetailList[0].status == 2">WMSä½ä¸å·²åæ¶</span> <span class="scs" v-if="item.platformWmsDetailList[0].lockStatus == 1">çµåéå·²ä¸é</span> <span class="pad" v-if="item.platformWmsDetailList[0].lockStatus == 0">çµåéæªä¸é</span> </div> </div> <div class="placeholder6">æ¶è´§å°ï¼{{ item.address }}</div> <div class="list"> <div class="line" v-for="line in item.platformWmsDetailList"> @@ -151,6 +160,17 @@ font-size: 15px; color: #279baa; margin-bottom: 4px; display: flex; justify-content: space-between; .scs{ color: #00ba67; } .pad{ color: #f19c3f; } .err{ color: red; } } .line { admin/src/views/platform/platformGroup.vue
@@ -26,8 +26,8 @@ <span v-if="row.type == 2">å¸å ¬å¸å¸è´§</span> </template> </el-table-column> <el-table-column prop="waitCallTime" label="å«å·çå¾ æ¶é´ï¼åéï¼" min-width="100px" align="center"></el-table-column> <el-table-column prop="editDate" label="æè¿æ´æ°æ¶é´" min-width="140px" align="center"></el-table-column> <el-table-column prop="waitCallTime" label="å«å·çå¾ æ¶é´ï¼åéï¼" min-width="140px" align="center"></el-table-column> <el-table-column prop="editDate" label="æè¿æ´æ°æ¶é´" min-width="150px" align="center"></el-table-column> <el-table-column v-if="containPermissions(['business:platformgroup:update', 'business:platformgroup:delete'])" label="æä½" admin/src/views/system/smsMessage.vue
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,132 @@ <template> <div class="main_app"> <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear"> </QueryForm> <!-- <div class="pt16"> <el-button :loading="exLoading" @click="handleEx" v-permissions="['business:platformjob:exportExcel']">导åº</el-button> </div> --> <el-table class="mb20" v-loading="loading" :data="list" stripe> <el-table-column prop="name" label="æ¶æ¯æ é¢" min-width="160" show-overflow-tooltip /> <el-table-column prop="code" label="æ¶æ¯ç¼ç " min-width="150" show-overflow-tooltip /> <el-table-column prop="content" label="æ¶æ¯æ¨¡æ¿" min-width="300" show-overflow-tooltip /> <el-table-column label="ç¶æ" width="120" align="center" fixed="right"> <template v-slot="scope"> <el-switch v-model="scope.row.status" @change="changeStatus(scope.row)" :active-value="0" :inactive-value="1"> </el-switch> </template> </el-table-column> </el-table> <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> </div> </template> <script> import Pagination from '@/components/common/Pagination' import QueryForm from '@/components/common/QueryForm' import { getSmsList, SmsStatusUpdate } from '@/api/system/sms' import GlobalWindow from '@/components/common/GlobalWindow' import { Message } from 'element-ui' import dayjs from 'dayjs' export default { components: { Pagination, QueryForm, GlobalWindow, }, data() { return { isShowDetail: false, exLoading: false, loading: false, pagination: { pageSize: 10, page: 1, total: 0 }, filters: {}, list: [], queryFormConfig: { formItems: [ { filed: 'name', type: 'input', label: 'æ¶æ¯æ é¢' }, { filed: 'status', type: 'select', label: 'å¯ç¨ç¶æ', options: [ { value: 0, label: 'å¯ç¨' }, { value: 1, label: 'ç¦ç¨' }, ] }, { filed: 'code', type: 'input', label: 'æ¶æ¯ç¼ç ' } ], online: true }, } }, created() { this.getList() }, methods: { changeStatus(row) { console.log('row', row); SmsStatusUpdate({ ...row }).then(res => { Message.success('ç¶ææ´æ°æå') }, () => { this.getList() }) }, getList(page) { const { pagination, filters } = this this.loading = true getSmsList({ model: { ...filters, }, capacity: pagination.pageSize, page: page || pagination.page, }).then(res => { this.loading = false this.list = res.records || [] this.list.forEach(item => { item.inTypeTemp = item.inType == 0 ? 'æ´æç' : 'ä»¶ç' item.taskOrigin = 'WMSè·å' }) this.pagination.total = res.total || 0 }, () => { this.loading = false }) }, clear() { this.pagination.page = 1 this.filters = {} this.getList() }, handleSizeChange(capacity) { this.pagination.pageSize = capacity } } } </script> <style lang="scss" scoped> .param_title { font-size: 18px; font-weight: 600; color: #000000; margin-bottom: 15px; } </style> admin/src/views/vehicle/components/OperaCategoryWindow.vue
@@ -1,13 +1,13 @@ <template> <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" width="600px" @close="close" @confirm="confirm"> <el-form :model="form" ref="form" :rules="rules"> <el-form-item label="ä¸çº§åç±»" prop="parentId"> <el-form-item label="æå±åç±»" prop="parentId"> <el-select v-model="form.parentId" placeholder="ä¸å¡«ä¸ºåä¸çº§åç±»"> <el-option v-for="op in dataList" :key="op.id" :label="op.name" :value="op.id"></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="name"> <el-input v-model="form.name" placeholder="请è¾å ¥åç±»åç§°" v-trim /> </el-form-item> <!-- <el-form-item label="ç¶æ" prop="status"> <el-select v-model="form.status" placeholder="è¯·éæ©"> screen/src/views/PlatformCall.vue
@@ -1,5 +1,5 @@ <script setup> import { ref, onMounted } from 'vue' import { ref, onMounted, nextTick } from 'vue' import dayjs from 'dayjs' import UQRCode from 'uqrcodejs' import { getLargeScreenData } from '@/utils/request' @@ -22,7 +22,8 @@ if (res.data && res.data.allList) { contentList.value = res.data.allList.map(item => { if (item.optTime) { item.optTimeTemp = dayjs.duration(item.optTime).format('HHå°æ¶mmå') item.optTimeTemp = dayjs(item.optTime).format('HH:mm') // item.optTimeTemp = dayjs.duration(Math.abs(new Date().getTime() - item.optTime)).format('HH:mm') } return item }) @@ -106,7 +107,7 @@ var qr = new UQRCode() // 设置äºç»´ç å 容 qr.data = qrcode.value qr.size = 220 qr.size = 210 // è°ç¨å¶ä½äºç»´ç æ¹æ³ qr.make() var canvas = document.getElementById("qrcode") @@ -139,6 +140,51 @@ newDate.value = dayjs().format('YYYY-MM-DD') newTime.value = dayjs().format('HH:mm') }, 1000) const isFullscreen = ref(false); const handleFull = () => { if(!isFullscreen.value){ handleFullScreen() }else{ cancelFullscreen() } } setTimeout(() => { handleFull() }, 1000) const handler = () => { isFullscreen.value = document.fullscreenElement !== null; if (!isFullscreen) { // éåºå ¨å±æ¶åè§£é¤çå¬ï¼ä¸ç¶æ¯æ¬¡çå¬é½ä¼æ·»å 䏿¬¡ç»å® document.removeEventListener("fullscreenchange", handler); } }; document.addEventListener("fullscreenchange", handler); const handleFullScreen = () => { let elem = document.documentElement // å°è¯å¯ç¨å ¨å±æ¨¡å¼ if (elem.requestFullscreen) { elem.requestFullscreen() } else if (elem.mozRequestFullScreen) { // å ¼å®¹ Firefox elem.mozRequestFullScreen() } else if (elem.webkitRequestFullscreen) { // å ¼å®¹ Chrome, Safari å Opera elem.webkitRequestFullscreen() } else if (elem.msRequestFullscreen) { // å ¼å®¹ IE/Edge elem.msRequestFullscreen() } } function cancelFullscreen() { if (document.exitFullscreen) { document.exitFullscreen(); } else if (document.msExitFullscreen) { document.msExitFullscreen(); } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen(); } else if (document.webkitExitFullscreen) { document.webkitExitFullscreen(); } } </script> <template> <div class="main_app"> @@ -203,14 +249,14 @@ </div> <div class="qrcode_wrap"> <div class="qrcode"> <canvas id="qrcode" width="220" height="220"></canvas> <canvas id="qrcode" width="210" height="210"></canvas> </div> <div class="title">请æ«ç ç¾å°</div> </div> </div> </div> <div class="main_footer"> <img src="@/assets/images/call/ic_news@2x.png" class="icon" alt=""> <img @click="handleFull" src="@/assets/images/call/ic_news@2x.png" class="icon" alt=""> <div class="title">è¯·æ ¹æ®éåæç¤ºä¿¡æ¯ï¼ä¾æ¬¡çåè¿åº</div> <div class="icon"></div> </div> @@ -218,9 +264,10 @@ </template> <style lang="scss" scoped> div{ div { box-sizing: border-box; } .main_app { color: #fff; position: fixed; @@ -231,10 +278,10 @@ overflow: hidden; background-color: #092030; position: relative; z-index: -2; display: flex; flex-direction: column; justify-content: space-between; .main_header { width: 100%; height: 112px; @@ -243,7 +290,7 @@ align-items: center; justify-content: space-between; padding: 0 50px; z-index: 11; .title { font-weight: 800; font-size: 48px; @@ -288,15 +335,18 @@ display: flex; padding: 30px 20px; position: relative; .list { flex: 5; margin-right: 20px; display: flex; flex-direction: column; .line { display: flex; align-items: center; flex: 1; height: 11.1%; &:nth-of-type(2n) { background: rgba(255, 255, 255, 0); } @@ -311,13 +361,15 @@ align-items: center; flex-direction: column; font-weight: 500; font-size: 36px; font-size: 30px; flex: 10; height: 100%; .time_place{ .time_place { font-weight: 500; font-size: 24px; font-size: 22px; } .status { /* padding: 0 28px; */ width: 170px; @@ -348,8 +400,10 @@ } .header { font-size: bold; font-size: 40px; .item { font-size: bold; font-size: 36px; } background: linear-gradient(180deg, #00B5D1 0%, #003C57 100%) !important; } } @@ -359,13 +413,14 @@ flex: 2; display: flex; flex-direction: column; border: 1px solid red; .tip_wrap { margin-bottom: 20px; width: 100%; position: relative; /* flex-shrink: 0; */ flex: 1; .current_plat { display: flex; flex-direction: column; @@ -373,14 +428,14 @@ justify-content: center; padding: 30px 40px; color: #FFA000; height: 100%; .id_card { font-weight: bold; font-weight: 500; font-size: 68px; } .no { margin: 10px 0; margin: 8px 0; font-weight: 500; font-size: 52px; } @@ -392,24 +447,27 @@ .plat { color: #fff; margin: 0 10px; margin: 0 6px; } } .empty { padding: 30px 40px; display: flex; flex-direction: column; justify-content: center; font-weight: 500; font-size: 30px; font-size: 26px; height: 100%; .title { text-align: center; font-weight: bold; font-size: 36px; margin-bottom: 20px; font-size: 32px; margin-bottom: 16px; } .line { margin-bottom: 10px; margin-bottom: 8px; padding-left: 32px; } } @@ -446,9 +504,9 @@ } .title { margin-top: 20px; margin-top: 16px; font-weight: bold; font-size: 34px; font-size: 28px; color: #111111; } } screen/vite.config.js
@@ -16,6 +16,9 @@ '@': fileURLToPath(new URL('./src', import.meta.url)) } }, build: { outDir: 'platform_screen' }, server: { proxy: { "/gateway_interface": { server/system_service/src/main/java/com/doumee/core/utils/DateUtil.java
@@ -317,6 +317,35 @@ } } /** * è·åXæä»½ä¹åçæä»½æ° * @param currentDate * @param month * @return */ public static List<String> getBeforMonth(Date currentDate , Integer month) { SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy"); SimpleDateFormat sdfMonth = new SimpleDateFormat("MM"); int currentYear = Integer.parseInt(sdfYear.format(currentDate)); int currentMonth = Integer.parseInt(sdfMonth.format(currentDate)); List<String> list = new ArrayList<>(); System.out.println("è¿12个æä»½ï¼"); for (int i = 0; i < month; i++) { int tempYear = currentYear; int tempMonth = currentMonth - i; if (tempMonth <= 0) { tempYear--; tempMonth += 12; } list.add(tempYear +"-" + StringUtils.leftPad(Integer.toString(tempMonth),2,"0")); } return list; } /** * Descrption:åå¾å½åæ¥ææ¶é´,æ ¼å¼ä¸º:YYYYMMDDHHMISS * @@ -2775,16 +2804,18 @@ // System.out.println(DateUtil.afterMinutesDate(-5)); Date startTime = DateUtil.StringToDate("2024-05-01 08:00:00" ,"yyyy-MM-dd HH:mm:ss"); Date endTime = DateUtil.StringToDate("2024-05-01 17:00:00" ,"yyyy-MM-dd HH:mm:ss"); Long intervalTime = 35L; DateUtil.getBeforMonth(new Date(),12); DateUtil.checkDateInterval( startTime.toInstant() .atZone(ZoneId.systemDefault()) .toLocalDateTime(), endTime.toInstant() .atZone(ZoneId.systemDefault()) .toLocalDateTime(),intervalTime); // Date startTime = DateUtil.StringToDate("2024-05-01 08:00:00" ,"yyyy-MM-dd HH:mm:ss"); // Date endTime = DateUtil.StringToDate("2024-05-01 17:00:00" ,"yyyy-MM-dd HH:mm:ss"); // Long intervalTime = 35L; // // // DateUtil.checkDateInterval( startTime.toInstant() // .atZone(ZoneId.systemDefault()) // .toLocalDateTime(), endTime.toInstant() // .atZone(ZoneId.systemDefault()) // .toLocalDateTime(),intervalTime); } catch (Exception ex) { ex.printStackTrace(); server/system_service/src/main/java/com/doumee/core/utils/SmsConstants.java
@@ -19,31 +19,32 @@ public class SmsConstants { public interface SmsObjectType{ String inventCode = "0"; //éªè¯ç String visit= "1"; //访客ç³è¯· String visitReport = "2"; //访客æ¥å¤ String hiddenDanger ="3";//鿣鿿 String carUse ="4";//ç¨è½¦ç³è¯· String meeting ="5";//ä¼è®®é¢çº¦ String platformBook ="6";//ç©æµè½¦é¢çº¦ String platformJob ="7";//æå°ä½ä¸ } public static final String inventCode ="inventCode" ; public static final String visit ="visit" ; public static final String visitReport ="visitReport" ; public static final String hiddenDanger ="hiddenDanger" ; public static final String carUse ="carUse" ; public static final String meeting ="meeting" ; public static final String platformBook ="platformBook" ; public static final String platformJob ="platformJob" ; /** * 访客ç³è¯· */ public interface visitContent{ //访客ç³è¯·-éç¥ï¼ç»å®¡æ¹äººï¼ String visitNotice = "æ¨æä¸æ¡ã{访客ç³è¯·}ãéè¦å¤çï¼è¯¦ç»ä¿¡æ¯è¯·åå¾å¾®ä¿¡å ¬ä¼å·æ¥çã"; String visitNotice = "visitNotice"; //访客ç³è¯·-审æ¹éè¿éç¥ï¼ç»ç³è¯·äººï¼ï¼ã String visitAuditSuccess = "æ¨çã{访客ç³è¯·}ãå·²ç»å®¡æ¹éè¿ï¼è¯·äº{é¢çº¦å ¥åå¼å§æ¶é´}åå¾é¨å«å®¤è®¿å®¢æºç¾å°å ¥åï¼å¦æçé®ï¼è¯·è系被访人"; String visitAuditSuccess = "visitAuditSuccess"; //访客ç³è¯·-审æ¹é©³åéç¥ï¼ç»ç³è¯·äººï¼ï¼ã String visitAuditFail = "æ¨çã{访客ç³è¯·}ã已被驳åï¼é©³ååå 为ï¼{驳ååå }ã妿çé®ï¼è¯·è系被访人ã"; String visitAuditFail = "visitAuditFail"; //访客ç³è¯·-è¶ æ¶æªç¾ç¦»-éç¥ï¼ç»ç³è¯·äººï¼ï¼ String visitTimeOutSignOut = "æ¨çã访客ç³è¯·ãå·²äº{å°ææ¶é´}å°æï¼è¯·åæ¶ç¦»åºå¹¶åå¾é¨å«å®¤è®¿å®¢æºç¾ç¦»ï¼å¦æçé®ï¼è¯·è系被访人"; String visitTimeOutSignOut = "visitTimeOutSignOut"; //访客ç³è¯·-è¶ æ¶æªç¾ç¦»-éç¥ï¼ç»æå®æ¥æ¶äººï¼ String visitTimeOutSignOutNum = "仿¥è¿æ{æªç¾ç¦»æ°é}个访客æªç¾ç¦»ï¼è¯·åå¾PC端æ¥ç详ç»ä¿¡æ¯ã"; String visitTimeOutSignOutNum = "visitTimeOutSignOutNum"; } @@ -53,15 +54,15 @@ */ public interface visitReportingContent{ //访客æ¥å¤-éç¥ï¼ç»å®¡æ¹äººï¼ String visitReportingNotice = "æ¨æä¸æ¡ã{访客æ¥å¤}ãéè¦å¤çï¼è¯¦ç»ä¿¡æ¯è¯·åå¾å¾®ä¿¡å ¬ä¼å·æ¥çã"; String visitReportingNotice = "visitReportingNotice"; //访客æ¥å¤-审æ¹éè¿éç¥ï¼ç»ç³è¯·äººï¼ï¼ã String visitReportingAuditSuccess = "æ¨çã{访客æ¥å¤}ãå·²ç»å®¡æ¹éè¿ï¼è¯·éç¥è®¿å®¢äº{é¢çº¦å ¥åå¼å§æ¶é´}åä¹å{车çå·}å ¥åï¼å¦æçé®ï¼è¯·è系被访人ã"; String visitReportingAuditSuccess = "visitReportingAuditSuccess"; //访客æ¥å¤-审æ¹é©³åéç¥ï¼ç»ç³è¯·äººï¼ï¼ã String visitReportingAuditFail = "æ¨çã{访客æ¥å¤}ã已被驳åï¼é©³ååå 为ï¼{驳ååå }ã妿çé®ï¼è¯·è系审æ¹äººã"; String visitReportingAuditFail = "visitReportingAuditFail"; //访客æ¥å¤-è¶ æ¶æªç¦»åº-éç¥ï¼ç»ç³è¯·äººï¼ï¼ String visitReportingTimeOutSignOut = "æ¨çã访客æ¥å¤ãå·²äº{é¢çº¦å ¥åç»ææ¶é´}å°æï¼è¯·åæ¶ç¦»åºï¼å¦æçé®ï¼è¯·è系被访人"; String visitReportingTimeOutSignOut = "visitReportingTimeOutSignOut"; //访客æ¥å¤-è¶ æ¶æªç¦»åº-éç¥ï¼ç»æå®æ¥æ¶äººï¼ String visitReporting_time_out_sign_out_num = "仿¥è¿æ{æªç¾ç¦»æ°é}个访客æ¥å¤è½¦è¾æªç¦»åºï¼è¯·åå¾PC端æ¥ç详ç»ä¿¡æ¯ã"; String visitReportingTimeOutSignOutNum = "visitReportingTimeOutSignOutNum"; } @@ -70,9 +71,9 @@ */ public interface hiddenDangerContent{ //鿣鿿-éç¥ï¼ç»å¤çäººï¼ String hiddenDanger_deal_user = "æ¨æä¸æ¡ã{鿣鿿-æ¶é²éæ£}ãéè¦å¤çï¼è¯¦ç»ä¿¡æ¯è¯·åå¾å¾®ä¿¡å ¬ä¼å·æ¥ç"; String hiddenDangerDealUser = "hiddenDangerDealUser"; //鿣鿿-å¤ç宿ï¼ç»ç³è¯·äººï¼ï¼ã String hiddenDanger_deal_over = "æ¨æäº¤çã{鿣鿿-æ¶é²éæ£}ãå·²ç»å¤ç宿¯ï¼è¯¦ç»ä¿¡æ¯è¯·åå¾å¾®ä¿¡å ¬ä¼å·æ¥çã"; String hiddenDangerDealOver = "hiddenDangerDealOver"; } @@ -81,13 +82,13 @@ */ public interface carUseBookContent{ //çä¿¡éç¥æ¨¡æ¿ï¼ç»å¤çäººï¼ String carUseBook_wait_audit = "æ¨æä¸æ¡ã{ç¨è½¦ç³è¯·}ãéè¦å¤çï¼è¯¦ç»ä¿¡æ¯è¯·åå¾å¾®ä¿¡å ¬ä¼å·æ¥çã"; String carUseBookWaitAudit = "carUseBookWaitAudit"; //ç¨è½¦ç³è¯·-审æ¹éè¿éç¥ï¼ç»ç³è¯·äººï¼ï¼ã String carUseBook_audit_success = "æ¨çã{ç¨è½¦ç³è¯·}ãå·²ç»å®¡æ¹éè¿ï¼åºåæ¶é´ä¸º{æäº¤çåºåæ¶é´}ï¼è¯·ææ¶ç¨è½¦ãå¦ç¨è½¦è®¡åæåï¼è¯·åæ¶è系派车åã"; String carUseBookAuditSuccess = "carUseBookAuditSuccess"; //ç¨è½¦ç³è¯·-审æ¹é©³åéç¥ï¼ç»ç³è¯·äººï¼ï¼ã String carUseBook_audit_fail = "æ¨çã{ç¨è½¦ç³è¯·}ã已被驳åï¼é©³ååå 为ï¼{驳ååå }ã妿çé®ï¼è¯·è系派车åã"; String carUseBookAuditFail = "carUseBookAuditFail"; //ç¨è½¦ç³è¯·-审æ¹é©³åéç¥ï¼ç»ç³è¯·äººï¼ï¼ã String carUseBook_cancel = "æ¨çã{ç¨è½¦ç³è¯·}ãå·²è¢«åæ¶ï¼åæ¶åå 为ï¼{åæ¶åå }ã妿çé®ï¼è¯·è系派车åã"; String carUseBookCancel = "carUseBookCancel"; } @@ -96,13 +97,13 @@ */ public interface platformBookContent{ //çä¿¡éç¥æ¨¡æ¿ï¼ç»å¤çäººï¼ String platformBook_wait_audit = "æ¨æä¸æ¡ã车è¾å ¥åç³è¯·ãéè¦å¤çï¼è¯¦ç»ä¿¡æ¯è¯·åå¾å¾®ä¿¡å ¬ä¼å·æ¥çã"; String platformBookWaitAudit = "platformBookContent"; //ç©æµè½¦é¢çº¦-审æ¹éè¿éç¥ï¼ç»ç³è¯·äººï¼ï¼ã String platformBook_audit_success = "æ¨çã车è¾å ¥åç³è¯·ãå·²ç»å®¡æ¹éè¿ï¼å ¥åæ¶é´ä¸º2024-7-19 09:00ï¼è¯·æå30åéåå¾ç°åºç¾å°ãå¦è®¡åæåï¼è¯·åæ¶èç³»å®¡æ ¸äººåã"; String platformBookAuditSuccess = "platformBookAuditSuccess"; //ç©æµè½¦é¢çº¦-审æ¹é©³åçä¿¡éç¥æ¨¡æ¿ï¼ç»ç³è¯·äººï¼ String platformBook_audit_fail = "æ¨çã车è¾å ¥åç³è¯·ã已被驳åï¼é©³ååå 为ï¼{驳ååå }ã妿çé®ï¼è¯·èç³»å®¡æ ¸äººåã"; String platformBookAuditFail = "platformBookAuditFail"; //ç©æµè½¦é¢çº¦-å ¥åé¢çº¦åæ¶çä¿¡éç¥æ¨¡æ¿ï¼ç»ç³è¯·äººï¼ String carUseBook_cancel = "æ¨çã车è¾å ¥åç³è¯·ãå·²è¢«åæ¶ï¼åæ¶åå 为ï¼{åæ¶åå }ã妿çé®ï¼è¯·èç³»å®¡æ ¸äººåã"; String carUseBookCancel = "carUseBookCancel"; } @@ -111,25 +112,25 @@ */ public interface platformJobContent{ // è¿è¾ä»»å¡ä¸è¾¾ ï¼ç»å¸æºï¼ String platformJob_new_job = "ã车çå·ã车主æ¨å¥½ï¼æ¨æä¸ä¸ªæ°çè¿è¾ä»»å¡ï¼è¯¦ç»ä¿¡æ¯è¯·åå¾å¾®ä¿¡å ¬ä¼å·æ¥çã"; String platformJobNewJob = "platformJobNewJob"; //ç©æµè½¦ä½ä¸-è¿è¾ä»»å¡ä¸æ¢æéï¼ç»å¸æºï¼ï¼ã String platformJob_stop_job = "ã车çå·ã车主æ¨å¥½ï¼æ¨çè¿è¾ä»»å¡å·²è¢«åæ¶ï¼è¯¦ç»ä¿¡æ¯è¯·åå¾å¾®ä¿¡å ¬ä¼å·æ¥çã"; String platformJobStopJob = "platformJobStopJob"; //ç©æµè½¦é¢çº¦-å«å·å ¥åçå¾ ï¼ç»å¸æºï¼ String platformBook_call_in = "ã车çå·ã车主æ¨å¥½ï¼è¯·å¨10åéå ï¼åå¾ååºçå¾ åºçå¾ å«å·ä½ä¸ã"; String platformBookCallIn = "platformBookCallIn"; //ç©æµè½¦é¢çº¦-æå°å«å·ï¼ç»å¸æºï¼ String platformBook_sing_in = "ã车çå·ã车主æ¨å¥½ï¼è¯·å¨10åéå ï¼åå¾{æå°åç§°}è¿è¡ä½ä¸ã"; String platformBookSingIn = "platformBookSingIn"; //ç©æµè½¦é¢çº¦-æå°å«å·è¿å·ï¼ç»å¸æºï¼ String platformBook_over_num = "ã车çå·ã车主æ¨å¥½ï¼æ¨çä»»å¡å·²è¿å·ï¼è¯·éæ°ç¾å°æéçå¾ ã"; String platformBookOverNum = "platformBookOverNum"; //ç©æµè½¦é¢çº¦-ä½ä¸å¼å§ï¼ç»å¸æºï¼ String platformBook_working = "ã车çå·ã车主æ¨å¥½ï¼æ¨ç车è¾å·²å¨{æå°åç§°}å¼å§ä½ä¸ï¼è¯·éæ¶å ³æ³¨ä½ä¸æ åµã"; String platformBookWorking = "platformBookWorking"; //ç©æµè½¦é¢çº¦-ä½ä¸å®æï¼ç»å¸æºï¼ String platformBook_finish = "ã车çå·ã车主æ¨å¥½ï¼æ¨ç车è¾å·²å¨{æå°åç§°}宿ä½ä¸ï¼è¯·åæ¶é©¶ç¦»æå°ã"; String platformBookFinish = "platformBookFinish"; //ç©æµè½¦é¢çº¦-ä½ä¸å¼å¸¸æèµ·ï¼ç»å¸æºï¼ String platformBook_error = "ã车çå·ã车主æ¨å¥½ï¼æ¨å¨{æå°åç§°}çä½ä¸ä»»å¡å·²ç»è¢«å¼å¸¸æèµ·ï¼è¯·åæ¶å ³æ³¨å ·ä½æ åµ"; String platformBookError = "platformBookError"; //ç©æµè½¦é¢çº¦-æå°è½¬ç§»ï¼ç»å¸æºï¼ String platformBook_move = "ã车çå·ã车主æ¨å¥½ï¼æ¨å¨{æå°åç§°}çä½ä¸ä»»å¡å·²ç»å·²è¢«è½¬ç§»è³{转移åæå°åç§°}ï¼è¯·åæ¶å ³æ³¨å«å·æ åµã"; String platformBookMove = "platformBookMove"; //ç©æµè½¦é¢çº¦-æå°åé è¶ æ¶ï¼ç»å¸æºï¼ String platformBook_time_out = "ã车çå·ã车主æ¨å¥½ï¼æ¨å¨{æå°åç§°}å·²åé è¶ æ¶ï¼è¯·å°½å¿«é©¶ç¦»ä»¥å å½±ååç»ä½ä¸ã"; String platformBookTimeOut = "platformBookTimeOut"; } server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/openapi/HkOpenApiController.java
@@ -123,10 +123,27 @@ @LoginNoRequired @PreventRepeat @ApiOperation("ãç¨æ°´éãè¿12个æç¨æ°´éä¿¡æ¯å表") @PostMapping("/water/lastMonthsDataList") public ApiResponse<List<PlatformLastMonthListResponse>> lastMonthsWaterList() { return ApiResponse.success(platformWaterGasService.getPlatformLastMonthListResponse(Constants.ZERO)); } @LoginNoRequired @PreventRepeat @ApiOperation("ãç¨æ°éãæ¬æã䏿åå»å¹´åæ") @PostMapping("/gas/dataByMonth") public ApiResponse<GasByMonthResponse> gasDataByMonth(@RequestBody GasByMonthRequest param) { return ApiResponse.success(platformWaterGasService.gasDataByMonth(param)); } @LoginNoRequired @PreventRepeat @ApiOperation("ãç¨æ°éãè¿12个æç¨æ°éä¿¡æ¯å表") @PostMapping("/gas/lastMonthsDataList") public ApiResponse<List<PlatformLastMonthListResponse>> lastMonthsGasList () { return ApiResponse.success(platformWaterGasService.getPlatformLastMonthListResponse(Constants.ONE)); } @LoginNoRequired @@ -151,7 +168,7 @@ @PreventRepeat @ApiOperation("ãæå°ãæå°å½åä½ä¸ä¿¡æ¯å表") @PostMapping("/platform/workingDataList") public ApiResponse<List<PlatformDataListResponse>> platformWorkingDataList(@RequestBody PlatformDataListRequest param) { public ApiResponse<List<PlatformDataListResponse>> workingDataList(@RequestBody PlatformDataListRequest param) { return ApiResponse.success(platformJobService.platformWorkingDataList(param)); } @@ -159,7 +176,7 @@ @PreventRepeat @ApiOperation("ãæå°ãæå°ä½ä¸è¯¦æ ä¿¡æ¯") @PostMapping("/platform/workDataInfo") public ApiResponse<PlatformDataInfoResponse> platformWorkingDataList(@RequestBody PlatformDataInfoRequest param) { public ApiResponse<PlatformDataInfoResponse> workDataInfo(@RequestBody PlatformDataInfoRequest param) { return ApiResponse.success(platformJobService.platformWorkingDataList(param)); } server/visits/dmvisit_service/src/main/java/com/doumee/dao/openapi/response/PlatformWarnEventListResponse.java
@@ -19,6 +19,8 @@ private String title; @ApiModelProperty(value = "æ¶é´") private Date createDate; @ApiModelProperty(value = "车çå·") private String carCode; @ApiModelProperty(value = "äºä»¶å 容说æ") private String content; @ApiModelProperty(value = "æå°åç§°") server/visits/dmvisit_service/src/main/java/com/doumee/service/business/PlatformWaterGasService.java
@@ -8,6 +8,7 @@ import com.doumee.dao.openapi.request.GasByMonthRequest; import com.doumee.dao.openapi.request.WaterByMonthRequest; import com.doumee.dao.openapi.response.GasByMonthResponse; import com.doumee.dao.openapi.response.PlatformLastMonthListResponse; import com.doumee.dao.openapi.response.WaterByMonthResponse; import java.util.List; @@ -107,4 +108,6 @@ WaterByMonthResponse waterDataByMonth(WaterByMonthRequest param); GasByMonthResponse gasDataByMonth(GasByMonthRequest param); List<PlatformLastMonthListResponse> getPlatformLastMonthListResponse(Integer type); } server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/ApproveServiceImpl.java
@@ -98,6 +98,8 @@ private PlatformLogMapper platformLogMapper; @Autowired private PlatformReasonMapper platformReasonMapper; @Autowired private PlatformGroupMapper platformGroupMapper; @Autowired @@ -1513,12 +1515,25 @@ platformBooks.setEditDate(new Date()); platformBooks.setEditor(approveDTO.getLoginUserInfo().getMemberId()); PlatformReason platformReason = platformReasonMapper.selectById(platformBooks.getReasonId()); if(Objects.isNull(platformReason)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"æªæ¥è¯¢å°å ¥ååå æ°æ®"); } PlatformGroup platformGroup = platformGroupMapper.selectById(platformReason.getGroupId()); if(Objects.isNull(platformGroup)){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"æªæ¥è¯¢å°å ¥ååå é ç½®æå°ç»æ°æ®"); } //çæä»»å¡è®°å½ PlatformJob platformJob = platformBooks.toPlatformJob(); platformJob.setId(null); platformJob.setPlatformGroupId(platformReason.getGroupId().intValue()); platformJob.setType(Constants.platformJobType.sgscxh); if(Constants.equalsInteger(platformGroup.getType(),Constants.ZERO)){ platformJob.setType(Constants.platformJobType.wxcxh); }else if(Constants.equalsInteger(platformGroup.getType(),Constants.ONE)){ platformJob.setType(Constants.platformJobType.wxczh); }else{ platformJob.setType(Constants.platformJobType.sgscxh); } platformJob.setStatus(Constants.PlatformJobStatus.WART_SIGN_IN.getKey()); platformJobMapper.insert(platformJob); platformBooks.setJobId(platformJob.getId()); server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformJobServiceImpl.java
@@ -1570,9 +1570,12 @@ ); platformDataListResponse.setWorkStatus(Constants.ONE); //æ¥è¯¢ä½ä¸æ¶é¿ // Long workTime = this.getWorkTime(platformJob); Long min = (System.currentTimeMillis() - platformJob.getNewStartDate().getTime())/1000/60; platformDataListResponse.setWorkTime( this.getWorkTime(platformJob) min ); //计ç®å·²ä½ä¸æ¶é¿ æ ¹æ®æå°å·¥ä½æç 计ç®ä»»å¡ééè¦æ¶é´ if (Objects.isNull(platformJob.getWorkNum()) || Objects.isNull(platformJob.getWorkRate())) { platformDataListResponse.setFinishTime(null); server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWarnEventServiceImpl.java
@@ -120,6 +120,7 @@ platformWarnEventListResponse.setContent(event.getEventContent()); platformWarnEventListResponse.setTitle(event.getTitle()); platformWarnEventListResponse.setPlatfromHkId(event.getPlatfromHkId()); platformWarnEventListResponse.setCarCode(event.getCarCode()); list.add(platformWarnEventListResponse); } } @@ -201,6 +202,7 @@ platformWarnEvent.setCreateDate(new Date()); platformWarnEvent.setIsdeleted(Constants.ZERO); platformWarnEvent.setPlatformId(savePlatformWarnEventDTO.getPlatformId()); platformWarnEvent.setCarCode(savePlatformWarnEventDTO.getCarCode()); Constants.PlatformWarnEvent cPl = Constants.PlatformWarnEvent.STOP_TIMEOUT; if(Constants.equalsInteger(savePlatformWarnEventDTO.getEventType(),Constants.ZERO)){ if(Objects.isNull(savePlatformWarnEventDTO.getPlatformJobId())){ server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/PlatformWaterGasServiceImpl.java
@@ -15,6 +15,7 @@ import com.doumee.dao.openapi.request.GasByMonthRequest; import com.doumee.dao.openapi.request.WaterByMonthRequest; import com.doumee.dao.openapi.response.GasByMonthResponse; import com.doumee.dao.openapi.response.PlatformLastMonthListResponse; import com.doumee.dao.openapi.response.WaterByMonthResponse; import com.doumee.service.business.PlatformWaterGasService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -29,10 +30,7 @@ import org.springframework.web.bind.annotation.RequestBody; import java.math.BigDecimal; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.*; /** * æå°_ç¨æ°´ç¨æ°ä¿¡æ¯è®°å½è¡¨Serviceå®ç° @@ -244,7 +242,7 @@ list = platformWaterGasMapper.selectList(new QueryWrapper<PlatformWaterGas>().lambda() .eq(PlatformWaterGas::getIsdeleted,Constants.ZERO) .eq(PlatformWaterGas::getType,Constants.ZERO) .like(PlatformWaterGas::getTimeInfo,beforMonth) .like(PlatformWaterGas::getTimeInfo,DateUtil.getDate(beforMonth,"yyyy-MM")) ); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){ waterByMonthResponse.setLastMonth(list.stream().map(m->m.getNum()).reduce(BigDecimal.ZERO,BigDecimal::add)); @@ -253,7 +251,7 @@ list = platformWaterGasMapper.selectList(new QueryWrapper<PlatformWaterGas>().lambda() .eq(PlatformWaterGas::getIsdeleted,Constants.ZERO) .eq(PlatformWaterGas::getType,Constants.ZERO) .like(PlatformWaterGas::getTimeInfo,beforYearMonth) .like(PlatformWaterGas::getTimeInfo,DateUtil.getDate(beforYearMonth,"yyyy-MM")) ); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){ waterByMonthResponse.setLastYearMonth(list.stream().map(m->m.getNum()).reduce(BigDecimal.ZERO,BigDecimal::add)); @@ -287,7 +285,7 @@ list = platformWaterGasMapper.selectList(new QueryWrapper<PlatformWaterGas>().lambda() .eq(PlatformWaterGas::getIsdeleted,Constants.ZERO) .eq(PlatformWaterGas::getType,Constants.ONE) .like(PlatformWaterGas::getTimeInfo,beforMonth) .like(PlatformWaterGas::getTimeInfo,DateUtil.getDate(beforMonth,"yyyy-MM")) ); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){ response.setLastMonth(list.stream().map(m->m.getNum()).reduce(BigDecimal.ZERO,BigDecimal::add)); @@ -296,7 +294,7 @@ list = platformWaterGasMapper.selectList(new QueryWrapper<PlatformWaterGas>().lambda() .eq(PlatformWaterGas::getIsdeleted,Constants.ZERO) .eq(PlatformWaterGas::getType,Constants.ONE) .like(PlatformWaterGas::getTimeInfo,beforYearMonth) .like(PlatformWaterGas::getTimeInfo,DateUtil.getDate(beforYearMonth,"yyyy-MM")) ); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){ response.setLastYearMonth(list.stream().map(m->m.getNum()).reduce(BigDecimal.ZERO,BigDecimal::add)); @@ -304,4 +302,31 @@ return response; } /** * * @param type 0ç¨æ°´ 1ç¨æ° * @return */ @Override public List<PlatformLastMonthListResponse> getPlatformLastMonthListResponse(Integer type){ List<PlatformLastMonthListResponse> lastMonthListResponses = new ArrayList<>(); List<PlatformWaterGas> platformWaterGasList = platformWaterGasMapper.selectList(new QueryWrapper<PlatformWaterGas>().lambda() .eq(PlatformWaterGas::getIsdeleted,Constants.ZERO) .eq(PlatformWaterGas::getType,type) ); List<String> monthList = DateUtil.getBeforMonth(new Date(),12); for (String str:monthList) { PlatformLastMonthListResponse platformLastMonthListResponse = new PlatformLastMonthListResponse(); platformLastMonthListResponse.setNum(platformWaterGasList.stream().filter(i->DateUtil.dateToString(i.getTimeInfo(),"yyyy-MM").equals(str)).map(i->i.getNum()).reduce(BigDecimal.ZERO,BigDecimal::add)); platformLastMonthListResponse.setTimeInfo(str); lastMonthListResponses.add(platformLastMonthListResponse); } return lastMonthListResponses; } } server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/SmsEmailServiceImpl.java
@@ -251,9 +251,14 @@ } public static void sendBusiness(EmayService emayService ,SmsEmailMapper smsEmailMapper ,List<String> phoneList,String objType,String content,Integer objId){ //TODO æ¯å¦åéçä¿¡ public static void sendBusiness(EmayService emayService ,SmsEmailMapper smsEmailMapper ,List<String> phoneList,String objType,String content,Integer objId){ for (String phone:phoneList) { boolean result= emayService.sendSingleSms(phone,content); if(!result){