From 05cd6a216ba17cfe357bbe52e4a9e53494d5717c Mon Sep 17 00:00:00 2001 From: liukangdong <898885815@qq.com> Date: 星期三, 09 十月 2024 10:23:03 +0800 Subject: [PATCH] ll --- admin/src/components/business/OperaTrainTimeImportWindow.vue | 2 admin/src/views/vehicle/category.vue | 120 +++++++++ admin/src/views/statistics/platformRecord.vue | 17 admin/src/api/platform/index.js | 4 admin/src/assets/style/style.scss | 5 admin/src/views/vehicle/components/OperaCategoryWindow.vue | 79 ++++++ admin/.env.production | 2 admin/src/components/system/user/RoleConfigWindow.vue | 6 admin/src/api/business/category.js | 11 /dev/null | 93 ------- admin/src/views/vehicle/cars.vue | 250 ++++++++++-------- admin/.env.test | 2 admin/src/views/business/relativeMember.vue | 2 h5_meeting/unpackage/release/apk/__UNI__EF8BAA7__20241008151948.apk | 0 admin/src/api/business/company.js | 4 admin/src/views/vehicle/parkBook.vue | 4 admin/src/components/business/OperaCarsWindow.vue | 158 ++++++++--- 17 files changed, 489 insertions(+), 270 deletions(-) diff --git a/admin/.env.production b/admin/.env.production index 5a7a449..7406b0f 100644 --- a/admin/.env.production +++ b/admin/.env.production @@ -1,4 +1,4 @@ # 鐢熶骇鐜閰嶇疆 NODE_ENV = 'production' -VUE_APP_API_URL = 'http://10.50.250.178:8088/gateway_interface' +# VUE_APP_API_URL = 'http://10.50.250.178:8088/gateway_interface' diff --git a/admin/.env.test b/admin/.env.test index 0e7cb4a..2d37af3 100644 --- a/admin/.env.test +++ b/admin/.env.test @@ -1,4 +1,4 @@ # 娴嬭瘯鐜閰嶇疆 NODE_ENV = 'production' -VUE_APP_API_URL = 'http://192.168.5.13/gateway_interface' +# VUE_APP_API_URL = 'http://192.168.5.13/gateway_interface' diff --git a/admin/src/api/business/category.js b/admin/src/api/business/category.js index f912616..76cddde 100644 --- a/admin/src/api/business/category.js +++ b/admin/src/api/business/category.js @@ -6,12 +6,21 @@ trim: true }) } +// 涓�绾у垎绫绘煡璇� +export function fetchCateList (data) { + return request.post('/visitsAdmin/cloudService/business/category/list', data, { + trim: true + }) +} // 鍒涘缓 export function create (data) { return request.post('/visitsAdmin/cloudService/business/category/create', data) } - +// 璇︽儏 +export function getInfoById (id) { + return request.get('/visitsAdmin/cloudService/business/category/' + id) +} // 淇敼 export function updateById (data) { return request.post('/visitsAdmin/cloudService/business/category/updateById', data) diff --git a/admin/src/api/business/company.js b/admin/src/api/business/company.js index b1b1863..dd0434d 100644 --- a/admin/src/api/business/company.js +++ b/admin/src/api/business/company.js @@ -37,6 +37,10 @@ export function companySync (data) { return request.post('/visitsAdmin/cloudService/business/company/syncAll', data) } +// 鍒嗛〉鏌ヨ +export function companyGetList (data) { + return request.post('/visitsAdmin/cloudService/business/company/page', data) +} // 鍒犻櫎 export function deleteById (id) { diff --git a/admin/src/api/platform/index.js b/admin/src/api/platform/index.js index fc0eaa6..4e85937 100644 --- a/admin/src/api/platform/index.js +++ b/admin/src/api/platform/index.js @@ -97,6 +97,10 @@ export function platformJobPage(data) { return request.post('/visitsAdmin/cloudService/business/platformJob/page', data) } +// 缁熻鏈堝彴浣滀笟浠诲姟 鍒嗛〉鍒楄〃 +export function platformLogPage(data) { + return request.post('/visitsAdmin/cloudService/business/platformLog/page', data) +} // 鏈堝彴浣滀笟缁熻 鍒嗛〉鍒楄〃 export function platformWorkReportPage(data) { return request.post('/visitsAdmin/cloudService/business/platform/platformWorkReportPage', data) diff --git a/admin/src/assets/style/style.scss b/admin/src/assets/style/style.scss index 0bcff9d..f6a469f 100644 --- a/admin/src/assets/style/style.scss +++ b/admin/src/assets/style/style.scss @@ -291,6 +291,11 @@ .df{ display: flex; } +.df_center{ + display: flex; + align-items: center; + justify-content: center; +} .df_ac{ display: flex; align-items: center; diff --git a/admin/src/components/business/OperaCarsWindow.vue b/admin/src/components/business/OperaCarsWindow.vue index 966e8f2..f8bfc58 100644 --- a/admin/src/components/business/OperaCarsWindow.vue +++ b/admin/src/components/business/OperaCarsWindow.vue @@ -1,45 +1,52 @@ <template> - <GlobalWindow - :title="title" - width="500px" - :visible.sync="visible" - :confirm-working="isWorking" - @confirm="confirm" - > - <el-form :model="form" ref="form" :rules="rules"> - <el-form-item label="杞︾墝鍙�" prop="code"> - <el-input v-model="form.code" placeholder="璇疯緭鍏ヨ溅鐗屽彿" v-trim/> - </el-form-item> - <el-form-item label="杞﹁締绫诲瀷" prop="type"> - <el-radio-group v-model="form.type" > - <el-radio :label="0" >瀹夋嘲鍏姟杞�</el-radio> - <el-radio :label="1" >瀹夋嘲鐗╂祦杞�</el-radio> - <el-radio :label="2" >鍏朵粬</el-radio> - </el-radio-group> - </el-form-item> - <el-form-item label="閫夋嫨杞︿富锛�" prop="memberId"> - <el-select v-model="form.memberId" clearable filterable placeholder="璇烽�夋嫨"> - <el-option - v-for="item in memberList" - :key="item.id" - :label="item.name" - :value="item.id"> - </el-option> - </el-select> - </el-form-item> - </el-form> - </GlobalWindow> + <GlobalWindow :title="title" width="500px" @close="close" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm"> + <el-form :model="form" ref="form" :rules="rules"> + <el-form-item label="杞︾墝鍙�" prop="code"> + <el-input v-model="form.code" placeholder="璇疯緭鍏ヨ溅鐗屽彿" v-trim /> + </el-form-item> + <el-form-item label="杞﹁締绫诲瀷" prop="type"> + <el-radio-group v-model="form.type"> + <el-radio :label="0">瀹夋嘲鍏姟杞�</el-radio> + <el-radio :label="1">瀹夋嘲鐗╂祦杞�</el-radio> + <el-radio :label="2">鍏朵粬</el-radio> + </el-radio-group> + </el-form-item> + <el-form-item label="閫夋嫨鍒嗙被锛�" prop="type"> + <el-cascader v-model="form.cateId" @change="changeSel" :options="cateList" :props="{ + label: 'name', + value: 'id', + children: 'childCategoryList', + }"></el-cascader> + </el-form-item> + <el-form-item label="閫夋嫨缁勭粐锛�" prop="groupId"> + <el-select v-model="form.groupId" @change="changeSel" clearable filterable placeholder="璇烽�夋嫨"> + <el-option v-for="item in companyList" :key="item.id" :label="item.name" :value="item.id"> + </el-option> + </el-select> + </el-form-item> + <el-form-item label="閫夋嫨杞︿富锛�" prop="memberId"> + <el-select v-model="form.memberId" clearable filterable placeholder="璇烽�夋嫨"> + <el-option v-for="item in memberList" :key="item.id" :label="item.name" :value="item.id"> + </el-option> + </el-select> + </el-form-item> + </el-form> + </GlobalWindow> </template> <script> import BaseOpera from '@/components/base/BaseOpera' import GlobalWindow from '@/components/common/GlobalWindow' import { allList } from '@/api/business/member' +import { fetchList } from '@/api/business/category.js' +import { create, updateById } from '@/api/business/cars' +import { companyGetList } from '@/api/business/company' +import { Message } from 'element-ui' export default { name: 'OperaInternalCompanyWindow', extends: BaseOpera, components: { GlobalWindow }, - data () { + data() { return { // 琛ㄥ崟鏁版嵁 memberList: [], @@ -47,49 +54,112 @@ id: null, code: null, memberId: null, - type: 0 + type: 0, + groupId: null, + cateId: [], }, + cateList: [], + companyList: [], // 楠岃瘉瑙勫垯 rules: { - code: [ - { required: true, message: '璇疯緭鍏ヨ溅鐗屽彿' } - ], + code: [{ required: true, message: '璇疯緭鍏ヨ溅鐗屽彿' }], + groupId: [{ required: true, message: '璇烽�夋嫨缁勭粐' }], type: [ { required: true, message: '璇烽�夋嫨杞﹁締绫诲瀷' } ] } } }, - created () { + created() { this.config({ api: '/business/cars', 'field.id': 'id' }) }, methods: { - open (title, target) { + open(title, target) { this.title = title this.visible = true - this.loadMember() + this.getCate() + this.getCompany() // 鏂板缓缁勭粐 if (target == null) { this.$nextTick(() => { this.$refs.form.resetFields() this.form[this.configData['field.id']] = null - this.form.type=0 + this.form.type = 0 }) return } // 缂栬緫 - this.$nextTick(() => { - for (const key in this.form) { - this.form[key] = target[key] + // this.$nextTick(() => { + // for (const key in this.form) { + // this.form[key] = target[key] + // } + // }) + }, + changeSel() { + const { form } = this + if (form.groupId) { + this.loadMember() + } + }, + confirm() { + console.log('form', this.form.cateId) + const { form } = this + if(form.cateId && form.cateId.length == 2){ + + }else{ + return Message.error('璇烽�夋嫨浜岀骇鍒嗙被') + } + this.$refs['form'].validate((valid) => { + if (valid) { + let fn = form.id ? updateById : create + fn({ + ...form, + cateId: form.cateId[1] + }).then(res => { + Message.success('淇濆瓨鎴愬姛') + this.visible = false + this.$emit('success') + }) } }) + }, - loadMember () { + close() { + this.visible = false + this.$emit('close') + }, + handleChange(val) { + + }, + getCate() { + fetchList({ + model: {}, + capacity: 1000, + page: 1, + }).then(res => { + this.cateList = res.records || [] + + }) + }, + getCompany() { + companyGetList({ + model: {}, + capacity: 1000, + page: 1, + }).then(res => { + this.companyList = res.records || [] + + }) + }, + loadMember() { + const { form } = this allList({ - type: 2 + type: 2, + companyId: form.groupId, + }) .then(res => { this.memberList = res diff --git a/admin/src/components/business/OperaCategoryWindow.vue b/admin/src/components/business/OperaCategoryWindow.vue deleted file mode 100644 index d170a56..0000000 --- a/admin/src/components/business/OperaCategoryWindow.vue +++ /dev/null @@ -1,59 +0,0 @@ -<template> - <GlobalWindow - :title="title" - :visible.sync="visible" - :confirm-working="isWorking" - @confirm="confirm" - > - <el-form :model="form" ref="form" :rules="rules"> - <el-form-item label="缁勭粐绫诲瀷" prop="name"> - <el-input v-model="form.name" placeholder="璇疯緭鍏ョ粍缁囩被鍨�" v-trim/> - </el-form-item> - <el-form-item label="鐘舵��" prop="status"> - <el-select v-model="form.status" placeholder="璇烽�夋嫨"> - <el-option label="鍚敤" value="0"></el-option> - <el-option label="绂佺敤" value="1"></el-option> - </el-select> - </el-form-item> - <el-form-item label="澶囨敞" prop="remark"> - <el-input type="textarea" v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" v-trim/> - </el-form-item> - </el-form> - </GlobalWindow> -</template> - -<script> -import BaseOpera from '@/components/base/BaseOpera' -import GlobalWindow from '@/components/common/GlobalWindow' -export default { - name: 'OperaCategoryWindow', - extends: BaseOpera, - components: { GlobalWindow }, - data () { - return { - // 琛ㄥ崟鏁版嵁 - form: { - id: null, - name: '', - remark: '', - status: '' - }, - // 楠岃瘉瑙勫垯 - rules: { - name: [ - { required: true, message: '璇疯緭鍏ョ粍缁囩被鍨�', trigger: 'blur' } - ], - status: [ - { required: true, message: '璇烽�夋嫨鏄惁鍚敤', trigger: 'change' } - ] - } - } - }, - created () { - this.config({ - api: '/business/category', - 'field.id': 'id' - }) - } -} -</script> diff --git a/admin/src/components/business/OperaTrainTimeImportWindow.vue b/admin/src/components/business/OperaTrainTimeImportWindow.vue index 07bdf26..7e578bf 100644 --- a/admin/src/components/business/OperaTrainTimeImportWindow.vue +++ b/admin/src/components/business/OperaTrainTimeImportWindow.vue @@ -12,7 +12,7 @@ 1.璇峰厛涓嬭浇鏂囦欢妯℃澘锛屽苟鎸夌収妯℃澘瑕佸幓濉啓琛ㄦ牸鍐呭;<br> </p> <el-form class="demo-form-inline" > - <el-form-item label="浜哄憳鍩硅鏈熷悕鍗�" required> + <el-form-item label="浜哄憳鍚嶅崟" required> <div style="width: 100%;display: flex;align-items: center;"> <el-button type="primary" :loading="importing" @click="clickRef">鐐瑰嚮涓婁紶</el-button> <el-button type="text" @click="exportTemplate">鐐瑰嚮涓嬭浇妯$増.EXCEL</el-button> diff --git a/admin/src/components/system/user/RoleConfigWindow.vue b/admin/src/components/system/user/RoleConfigWindow.vue index 5b029f7..35fb877 100644 --- a/admin/src/components/system/user/RoleConfigWindow.vue +++ b/admin/src/components/system/user/RoleConfigWindow.vue @@ -2,13 +2,14 @@ <GlobalWindow :visible.sync="visible" :confirm-working="isWorking" - width="582px" + width="620px" title="閰嶇疆鐢ㄦ埛瑙掕壊" @confirm="confirm" > <p class="tip" v-if="user != null">涓虹敤鎴� <em>{{user.realname}}</em> 閰嶇疆瑙掕壊</p> <p class="tip-warn"><i class="el-icon-warning"></i>鎻愰啋锛氳鑹查厤缃悗闇�閲嶆柊鐧诲綍鍚庣敓鏁�</p> - <el-transfer + <div class="df_center"> + <el-transfer v-model="selectedIds" :titles="['鏈巿鏉冭鑹�', '宸叉巿鏉冭鑹�']" :props="{ @@ -17,6 +18,7 @@ }" :data="roles"> </el-transfer> + </div> </GlobalWindow> </template> diff --git a/admin/src/views/business/category.vue b/admin/src/views/business/category.vue deleted file mode 100644 index fda2f2b..0000000 --- a/admin/src/views/business/category.vue +++ /dev/null @@ -1,93 +0,0 @@ -<template> - <TableLayout :permissions="['business:category:query']"> - <!-- 鎼滅储琛ㄥ崟 --> - <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> - <el-form-item label="鍚嶇О" prop="name"> - <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input> - </el-form-item> - <el-form-item label="鐘舵��" prop="status"> - <el-select v-model="searchForm.status" placeholder="璇烽�夋嫨"> - <el-option label="鍚敤" value="0"></el-option> - <el-option label="绂佺敤" value="1"></el-option> - </el-select> - </el-form-item> - <section> - <el-button type="primary" @click="search">鎼滅储</el-button> - <el-button @click="reset">閲嶇疆</el-button> - </section> - </el-form> - <!-- 琛ㄦ牸鍜屽垎椤� --> - <template v-slot:table-wrap> - <ul class="toolbar" v-permissions="['business:category:create', 'business:category:delete']"> - <li><el-button type="primary" @click="$refs.operaCategoryWindow.open('鏂板缓鍒嗙被淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:category:create']">鏂板缓</el-button></li> - <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:category:delete']">鍒犻櫎</el-button></li> - </ul> - <el-table - v-loading="isWorking.search" - :data="tableData.list" - stripe - @selection-change="handleSelectionChange" - > - <el-table-column type="selection" width="55"></el-table-column> - <el-table-column prop="name" label="缁勭粐绫诲瀷" min-width="100px"></el-table-column> - <el-table-column prop="remark" label="澶囨敞" min-width="100px"></el-table-column> - <el-table-column prop="status" label="鐘舵��" min-width="100px"> - <template slot-scope="{row}"> - <span v-if="row.status === 0">鍚敤</span> - <span v-if="row.status === 1">绂佺敤</span> - </template> - </el-table-column> - <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column> - <el-table-column - v-if="containPermissions(['business:category:update', 'business:category:delete'])" - label="鎿嶄綔" - min-width="120" - fixed="right" - > - <template slot-scope="{row}"> - <el-button type="text" @click="$refs.operaCategoryWindow.open('缂栬緫鍒嗙被淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:category:update']">缂栬緫</el-button> - <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:category:delete']">鍒犻櫎</el-button> - </template> - </el-table-column> - </el-table> - <pagination - @size-change="handleSizeChange" - @current-change="handlePageChange" - :pagination="tableData.pagination" - > - </pagination> - </template> - <!-- 鏂板缓/淇敼 --> - <OperaCategoryWindow ref="operaCategoryWindow" @success="handlePageChange"/> - </TableLayout> -</template> - -<script> -import BaseTable from '@/components/base/BaseTable' -import TableLayout from '@/layouts/TableLayout' -import Pagination from '@/components/common/Pagination' -import OperaCategoryWindow from '@/components/business/OperaCategoryWindow' -export default { - name: 'Category', - extends: BaseTable, - components: { TableLayout, Pagination, OperaCategoryWindow }, - data () { - return { - // 鎼滅储 - searchForm: { - name: '', - status: '' - } - } - }, - created () { - this.config({ - module: '鍒嗙被淇℃伅琛�', - api: '/business/category', - 'field.id': 'id', - 'field.main': 'id' - }) - this.search() - } -} -</script> diff --git a/admin/src/views/business/relativeMember.vue b/admin/src/views/business/relativeMember.vue index 8baf6ad..5452250 100644 --- a/admin/src/views/business/relativeMember.vue +++ b/admin/src/views/business/relativeMember.vue @@ -61,7 +61,7 @@ <li><el-button type="primary" @click="$refs.OperaMemberImportWindow.open('浜哄憳瀵煎叆', searchForm.companyType)" icon="el-icon-plus" v-permissions="['business:member:create']">浜哄憳瀵煎叆</el-button></li> <li><el-button type="primary" - @click="$refs.OperaTrainTimeImportWindow.open('鍩硅鏈熷鍏�', department, searchForm.companyType)" + @click="$refs.OperaTrainTimeImportWindow.open('鍩硅鏈夋晥鏈熷鍏�', department, searchForm.companyType)" icon="el-icon-plus" v-permissions="['business:traintime:create']">鍩硅鏈熷鍏�</el-button></li> <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">鎵归噺鍒犻櫎</el-button></li> diff --git a/admin/src/views/statistics/platformRecord.vue b/admin/src/views/statistics/platformRecord.vue index 9d26059..49f98e1 100644 --- a/admin/src/views/statistics/platformRecord.vue +++ b/admin/src/views/statistics/platformRecord.vue @@ -6,9 +6,10 @@ <el-table-column prop="platformGroupName" label="鏈堝彴缁�" min-width="100" show-overflow-tooltip /> <el-table-column prop="carCodeFront" label="杞﹀墠鐗岀収鍙�" min-width="100" show-overflow-tooltip /> <el-table-column prop="carCodeBack" label="杞﹀悗鐗岀収鍙�" min-width="100" show-overflow-tooltip /> - <el-table-column prop="startDate" label="浣滀笟寮�濮�" min-width="100" show-overflow-tooltip /> - <el-table-column prop="doneDate" label="浣滀笟缁撴潫" min-width="100" show-overflow-tooltip /> - <el-table-column prop="workTime" label="浣滀笟鏃堕暱" min-width="100" show-overflow-tooltip /><el-table-column prop="name" + <el-table-column prop="param1" label="浣滀笟寮�濮�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="param2" label="浣滀笟缁撴潫" min-width="100" show-overflow-tooltip /> + <el-table-column prop="workTime" label="浣滀笟鏃堕暱" min-width="100" show-overflow-tooltip /> + <el-table-column prop="name" label="杩愯緭鍗曞彿/鍚堝悓鍙�" min-width="100" show-overflow-tooltip> <template v-slot="scope"> <span>{{ scope.row.billCode || scope.row.contractNum }}</span> @@ -27,7 +28,7 @@ import dayjs from 'dayjs' import duration from 'dayjs/plugin/duration' dayjs.extend(duration) -import { platformJobPage, getPlatformGroupList } from '@/api' +import { platformLogPage, getPlatformGroupList } from '@/api' export default { components: { Pagination, @@ -99,14 +100,14 @@ getList(page) { const { pagination, filters } = this this.loading = true - platformJobPage({ + platformLogPage({ model: { ...filters, - queryStatus: '5,6,9,10', + queryStatus: '6,7,8', beginWorkDateStart: filters.selDate && filters.selDate.length > 0 ? filters.selDate[0] : null, beginWorkDateEnd: filters.selDate && filters.selDate.length > 0 ? filters.selDate[1] : null, }, - sorts: [{ direction: 'DESC', property: 'START_DATE' }], + sorts: [{ direction: 'DESC', property: 'param1' }], capacity: pagination.pageSize, page: page || pagination.page, }).then(res => { @@ -115,7 +116,7 @@ this.list.forEach(item => { item.inTypeTemp = item.inType == 0 ? '鏁存墭鐩�' : '浠剁儫' item.taskOrigin = 'WMS鑾峰彇' - item.workTime = dayjs.duration(item.workTime, 'seconds').format('H鏃秏鍒唖绉�') + item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�') }) this.pagination.total = res.total || 0 }, () => { diff --git a/admin/src/views/vehicle/cars.vue b/admin/src/views/vehicle/cars.vue index 55d2b4e..2477ce4 100644 --- a/admin/src/views/vehicle/cars.vue +++ b/admin/src/views/vehicle/cars.vue @@ -1,113 +1,116 @@ <template> - <TableLayout :permissions="['business:member:query']"> - <!-- 鎼滅储琛ㄥ崟 --> - <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> - <el-form-item label="" prop="code" title="杞︾墝鍙�"> - <el-input v-model="searchForm.code" clearable placeholder="杞︾墝鍙�" @keypress.enter.native="search"></el-input> - </el-form-item> - <el-form-item label="" prop="memberName" title="杞︿富濮撳悕/鎵嬫満鍙�"> - <el-input v-model="searchForm.memberName" clearable placeholder="杞︿富濮撳悕/鎵嬫満鍙�" @keypress.enter.native="search"></el-input> - </el-form-item> - <el-form-item label="" prop="companyName" title="杞︿富閮ㄩ棬鍚嶇О"> - <el-input v-model="searchForm.companyName" clearable placeholder="杞︿富閮ㄩ棬鍚嶇О" @keypress.enter.native="search"></el-input> - </el-form-item> - <el-form-item label="" prop="authStatus" title="鏄惁鎺堟潈"> - <el-select v-model="searchForm.authStatus" @change="search" clearable placeholder="鏄惁鎺堟潈"> - <el-option label="宸叉巿鏉�" value="1"></el-option> - <el-option label="鏈巿鏉�" value="0"></el-option> - </el-select> - </el-form-item> - <el-form-item label="" prop="type" title="杞﹁締绫诲瀷"> - <el-select v-model="searchForm.type" @change="search" clearable placeholder="杞﹁締绫诲瀷"> - <el-option label="瀹夋嘲鍏姟杞�" value="0"></el-option> - <el-option label="瀹夋嘲鑷湁鐗╂祦杞�" value="1"></el-option> - <el-option label="鍏朵粬" value="2"></el-option> - </el-select> - </el-form-item> - <section> - <el-button type="primary" @click="search">鎼滅储</el-button> - <el-button @click="reset">閲嶇疆</el-button> - </section> - </el-form> - <!-- 琛ㄦ牸鍜屽垎椤� --> - <template v-slot:table-wrap> - <ul class="toolbar" v-permissions="['business:cars:create', 'business:parkBook:create']"> - <li><el-button type="primary" @click="$refs.operaCarsWindow.open('鏂板缓杞﹁締')" icon="el-icon-plus" v-permissions="['business:cars:create']">鏂板缓</el-button></li> - <li><el-button type="primary" @click="startEmpowerBatch" icon="el-icon-plus" v-permissions="['business:parkbook:create']">涓嬪彂鎺堟潈</el-button></li> - </ul> - <el-table - v-loading="isWorking.search" - :data="tableData.list" - stripe - @selection-change="handleSelectionChange" - > - <el-table-column type="selection" width="55"></el-table-column> - <el-table-column prop="code" label="杞︾墝鍙�" min-width="100px"></el-table-column> - <el-table-column label="杞﹁締绫诲瀷" min-width="100px"> - <template slot-scope="{row}"> - <span v-if="row.type == 0" >瀹夋嘲鍏姟杞�</span> - <span v-if="row.type == 1">瀹夋嘲鑷湁鐗╂祦杞�</span> - <span v-if="row.type == 2" >鍏朵粬</span> - </template> - </el-table-column> - <el-table-column prop="memberName" label="杞︿富濮撳悕" min-width="100px"></el-table-column> - <el-table-column prop="memberPhone" label="杞︿富鎵嬫満鍙�" min-width="100px"></el-table-column> - <el-table-column prop="companyName" label="杞︿富缁勭粐" min-width="200px"></el-table-column> - <el-table-column label="鏄惁鎺堟潈" align="center" min-width="100px"> - <template slot-scope="{row}"> - <span v-if="row.authStatus == 1" style="color: green">鏄�</span> - <span v-else style="color: red">鍚�</span> - </template> - </el-table-column> - <el-table-column prop="parksName" align="center" label="宸叉巿鏉冨仠杞﹀満" min-width="200px"> - <template slot-scope="{row}"> - <div v-if="row.parkBookList && row.parkBookList.length" > - <span v-for="item in row.parkBookList" :key="item.id" style="display: block"> - <span :style="(item.hkStatus== 0?'color:#2080f7':(item.hkStatus== 1?'color:green':(item.hkStatus== 2?'color:red':'')))">銆恵{item.hkStatus== 0?'绛夊緟涓嬪彂':(item.hkStatus== 1?'涓嬪彂鎴愬姛':(item.hkStatus== 2?'涓嬪彂澶辫触':''))}}銆� </span>{{item.parksName}} - </span> - </div> - <span v-if="row.parkBookList ==null ||row.parkBookList.length ==0">-</span> - </template> - </el-table-column> - <el-table-column label="涓嬪彂鏈夋晥鏈�" align="center" min-width="170px"> - <template slot-scope="{row}"> - <div v-if="row.authStatus !=null && row.authStatus == 1 && row.parkBookList!=null && row.parkBookList.length>0"> - <div v-if="!row.startTime || !row.endTime">闀挎湡鏈夋晥</div> - <div v-else> - <span style="color: green">璧凤細{{row.startTime}}</span><br/> - <span style="color: red">姝細{{row.endTime}}</span> - </div> - </div> - <div v-else >-</div> - </template> - </el-table-column> - <el-table-column prop="editorName" label="鎿嶄綔浜�" min-width="100px"></el-table-column> - <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="140px"></el-table-column> - <el-table-column - v-if="containPermissions(['business:member:update', 'business:member:delete','business:empower:create'])" - label="鎿嶄綔" - min-width="200" - align="center" - fixed="right" - > - <template slot-scope="{row}"> - <el-button type="text" icon="el-icon-edit" @click="$refs.operaCarsWindow.open('缂栬緫杞﹁締淇℃伅',row)" v-permissions="['business:cars:update']">缂栬緫</el-button> - <el-button type="text" icon="el-icon-edit" @click="$refs.operaCarAuthWindow.open('涓嬪彂鎺堟潈',[row.id],[row.code])" v-permissions="['business:parkbook:create']">涓嬪彂鎺堟潈</el-button> - <el-button type="text" icon="el-icon-delete" @click="deleteById(row)" style="color: red" v-permissions="['business:empower:delete']">鍒犻櫎</el-button> - </template> - </el-table-column> - </el-table> - <pagination - @size-change="handleSizeChange" - @current-change="handlePageChange" - :pagination="tableData.pagination" - > - </pagination> - </template> - <!-- 鏂板缓/淇敼 --> - <OperaCarAuthWindow ref="operaCarAuthWindow" @success="handlePageChange"/> - <OperaCarsWindow ref="operaCarsWindow" @success="handlePageChange"/> - </TableLayout> + <TableLayout :permissions="['business:member:query']"> + <!-- 鎼滅储琛ㄥ崟 --> + <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> + <el-form-item label="" prop="code" title="杞︾墝鍙�"> + <el-input v-model="searchForm.code" clearable placeholder="杞︾墝鍙�" @keypress.enter.native="search"></el-input> + </el-form-item> + <el-form-item label="" prop="memberName" title="杞︿富淇℃伅"> + <el-input v-model="searchForm.memberName" clearable placeholder="杞︿富淇℃伅" + @keypress.enter.native="search"></el-input> + </el-form-item> + <!-- <el-form-item label="" prop="cateName" title="杞﹁締鍒嗙被鍚嶇О"> + <el-input v-model="searchForm.cateName" clearable placeholder="杞﹁締鍒嗙被鍚嶇О" + @keypress.enter.native="search"></el-input> + </el-form-item> --> + <el-form-item label="" prop="companyName" title="杞︿富缁勭粐鍚嶇О"> + <el-input v-model="searchForm.companyName" clearable placeholder="杞︿富缁勭粐鍚嶇О" + @keypress.enter.native="search"></el-input> + </el-form-item> + <el-form-item label="" prop="authStatus" title="鏄惁鎺堟潈"> + <el-select v-model="searchForm.authStatus" @change="search" clearable placeholder="鏄惁鎺堟潈"> + <el-option label="宸叉巿鏉�" value="1"></el-option> + <el-option label="鏈巿鏉�" value="0"></el-option> + </el-select> + </el-form-item> + <el-form-item label="" prop="type" title="杞﹁締绫诲瀷"> + <el-select v-model="searchForm.type" @change="search" clearable placeholder="杞﹁締绫诲瀷"> + <el-option label="瀹夋嘲鍏姟杞�" value="0"></el-option> + <el-option label="瀹夋嘲鑷湁鐗╂祦杞�" value="1"></el-option> + <el-option label="鍏朵粬" value="2"></el-option> + </el-select> + </el-form-item> + <section> + <el-button type="primary" @click="search">鎼滅储</el-button> + <el-button @click="reset">閲嶇疆</el-button> + </section> + </el-form> + <!-- 琛ㄦ牸鍜屽垎椤� --> + <template v-slot:table-wrap> + <ul class="toolbar" v-permissions="['business:cars:create', 'business:parkBook:create']"> + <li><el-button type="primary" @click="handleEdit" icon="el-icon-plus" + v-permissions="['business:cars:create']">鏂板缓</el-button></li> + <li><el-button type="primary" @click="startEmpowerBatch" icon="el-icon-plus" + v-permissions="['business:parkbook:create']">涓嬪彂鎺堟潈</el-button></li> + </ul> + <el-table v-loading="isWorking.search" :data="tableData.list" stripe @selection-change="handleSelectionChange"> + <el-table-column type="selection" width="55"></el-table-column> + <el-table-column prop="code" label="杞︾墝鍙�" min-width="100px"></el-table-column> + <el-table-column label="杞﹁締绫诲瀷" min-width="120px"> + <template slot-scope="{row}"> + <span v-if="row.type == 0">瀹夋嘲鍏姟杞�</span> + <span v-if="row.type == 1">瀹夋嘲鑷湁鐗╂祦杞�</span> + <span v-if="row.type == 2">鍏朵粬</span> + </template> + </el-table-column> + <el-table-column prop="memberName" label="杞︿富濮撳悕" min-width="100px"></el-table-column> + <el-table-column prop="memberPhone" label="杞︿富鎵嬫満鍙�" min-width="100px"></el-table-column> + <el-table-column prop="cateName" label="杞﹁締鍒嗙被" min-width="160px"></el-table-column> + <el-table-column prop="companyName" label="杞︿富缁勭粐" min-width="200px"></el-table-column> + <el-table-column label="鏄惁鎺堟潈" align="center" min-width="100px"> + <template slot-scope="{row}"> + <span v-if="row.authStatus == 1" style="color: green">鏄�</span> + <span v-else style="color: red">鍚�</span> + </template> + </el-table-column> + <el-table-column prop="parksName" align="center" label="宸叉巿鏉冨仠杞﹀満" min-width="200px"> + <template slot-scope="{row}"> + <div v-if="row.parkBookList && row.parkBookList.length"> + <span v-for="item in row.parkBookList" :key="item.id" style="display: block"> + <span + :style="(item.hkStatus == 0 ? 'color:#2080f7' : (item.hkStatus == 1 ? 'color:green' : (item.hkStatus == 2 ? 'color:red' : '')))">銆恵{ item.hkStatus == + 0 ? '绛夊緟涓嬪彂' : (item.hkStatus == 1 ? '涓嬪彂鎴愬姛' : (item.hkStatus == 2?'涓嬪彂澶辫触':''))}}銆� </span>{{ item.parksName }} + </span> + </div> + <span v-if="row.parkBookList == null || row.parkBookList.length == 0">-</span> + </template> + </el-table-column> + <el-table-column label="涓嬪彂鏈夋晥鏈�" align="center" min-width="170px"> + <template slot-scope="{row}"> + <div + v-if="row.authStatus != null && row.authStatus == 1 && row.parkBookList != null && row.parkBookList.length > 0"> + <div v-if="!row.startTime || !row.endTime">闀挎湡鏈夋晥</div> + <div v-else> + <span style="color: green">璧凤細{{ row.startTime }}</span><br /> + <span style="color: red">姝細{{ row.endTime }}</span> + </div> + </div> + <div v-else>-</div> + </template> + </el-table-column> + <el-table-column prop="editorName" label="鎿嶄綔浜�" min-width="100px"></el-table-column> + <el-table-column prop="editDate" label="鎿嶄綔鏃堕棿" min-width="140px"></el-table-column> + <el-table-column + v-if="containPermissions(['business:member:update', 'business:member:delete', 'business:empower:create'])" + label="鎿嶄綔" min-width="200" align="center" fixed="right"> + <template slot-scope="{row}"> + <el-button type="text" icon="el-icon-edit" @click="handleEdit(row)" + v-permissions="['business:cars:update']">缂栬緫</el-button> + <el-button type="text" icon="el-icon-edit" + @click="$refs.operaCarAuthWindow.open('涓嬪彂鎺堟潈', [row.id], [row.code])" + v-permissions="['business:parkbook:create']">涓嬪彂鎺堟潈</el-button> + <el-button type="text" icon="el-icon-delete" @click="deleteById(row)" style="color: red" + v-permissions="['business:empower:delete']">鍒犻櫎</el-button> + </template> + </el-table-column> + </el-table> + <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination"> + </pagination> + </template> + <!-- 鏂板缓/淇敼 --> + <OperaCarAuthWindow ref="operaCarAuthWindow" @success="handlePageChange" /> + <OperaCarsWindow v-if="isShowEdit" ref="operaCarsWindow" @close="isShowEdit = false" @success="handlePageChange" /> + </TableLayout> </template> <script> @@ -119,20 +122,21 @@ export default { name: 'Cars', extends: BaseTable, - components: { TableLayout, Pagination, OperaCarsWindow,OperaCarAuthWindow }, - data () { + components: { TableLayout, Pagination, OperaCarsWindow, OperaCarAuthWindow }, + data() { return { // 鎼滅储 searchForm: { code: '', memberName: '', companyName: '', - type:null, - authStatus:null - } + type: null, + authStatus: null + }, + isShowEdit: false } }, - created () { + created() { this.config({ module: '杞﹁締淇℃伅琛�', api: '/business/cars', @@ -142,8 +146,22 @@ this.search() }, methods: { + handleEdit(row) { + this.isShowEdit = true + let str = row && row.id ? '缂栬緫杞﹁締' : '鏂板缓杞﹁締' + this.$nextTick(() => { + this.$refs.operaCarsWindow.open(str, row) + if (row && row.id) { + let form = { ...row, cateId: []} + if(row.catePId){ form.cateId.push(row.catePId) } + if(row.cateId){ form.cateId.push(row.cateId) } + this.$refs.operaCarsWindow.form = form + this.$refs.operaCarsWindow.loadMember() + } + }) + }, // 鍚屾淇℃伅 - startEmpowerBatch () { + startEmpowerBatch() { if (this.tableData.selectedRows.length === 0) { this.$tip.warning('璇疯嚦灏戦�夋嫨涓�鏉℃暟鎹�') return diff --git a/admin/src/views/vehicle/category.vue b/admin/src/views/vehicle/category.vue new file mode 100644 index 0000000..73b3540 --- /dev/null +++ b/admin/src/views/vehicle/category.vue @@ -0,0 +1,120 @@ +<template> + <TableLayout> + <!-- 鎼滅储琛ㄥ崟 --> + <!-- <el-form ref="searchForm" slot="search-form" label-width="100px" inline> + <el-form-item label="鐘舵��" prop="status"> + <el-select v-model="filters.status" placeholder="璇烽�夋嫨"> + <el-option label="鍚敤" value="0"></el-option> + <el-option label="绂佺敤" value="1"></el-option> + </el-select> + </el-form-item> + <section> + <el-button type="primary" @click="search">鎼滅储</el-button> + <el-button @click="reset">閲嶇疆</el-button> + </section> + </el-form> --> + <!-- 琛ㄦ牸鍜屽垎椤� --> + <template v-slot:table-wrap> + <ul class="toolbar" v-permissions="['business:category:create', 'business:category:delete']"> + <li><el-button type="primary" @click="handleEdit()" icon="el-icon-plus" + v-permissions="['business:category:create']">鏂板缓</el-button></li> + </ul> + <el-table row-key="id" :tree-props="{children: 'childCategoryList'}" v-loading="isWorking.search" :data="dataList" stripe @selection-change="handleSelectionChange"> + <el-table-column prop="name" label="鍒嗙被鍚嶇О" min-width="100px"></el-table-column> + <el-table-column prop="remark" label="澶囨敞" min-width="100px"></el-table-column> + <!-- <el-table-column prop="status" label="鐘舵��" min-width="100px"> + <template slot-scope="{row}"> + <span v-if="row.status === 0">鍚敤</span> + <span v-if="row.status === 1">绂佺敤</span> + </template> + </el-table-column> --> + <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column> + <el-table-column v-if="containPermissions(['business:category:update', 'business:category:delete'])" + label="鎿嶄綔" min-width="120" fixed="right"> + <template slot-scope="{row}"> + <el-button type="text" @click="handleEdit(row)" icon="el-icon-edit" + v-permissions="['business:category:update']">缂栬緫</el-button> + <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" + v-permissions="['business:category:delete']">鍒犻櫎</el-button> + </template> + </el-table-column> + </el-table> + <pagination @size-change="handleSizeChange" @current-change="getList" :pagination="tableData.pagination"> + </pagination> + </template> + <!-- 鏂板缓/淇敼 --> + <OperaCategoryWindow v-if="isShowEdit" @close="isShowEdit = false" ref="operaCategoryWindow" @success="getList" /> + </TableLayout> +</template> + +<script> +import BaseTable from '@/components/base/BaseTable' +import TableLayout from '@/layouts/TableLayout' +import Pagination from '@/components/common/Pagination' +import OperaCategoryWindow from './components/OperaCategoryWindow' +import { fetchList, deleteById } from '@/api/business/category.js' +export default { + name: 'Category', + extends: BaseTable, + components: { TableLayout, Pagination, OperaCategoryWindow }, + data() { + return { + // 鎼滅储 + filters: { + parentId: '' + }, + isShowEdit: false, + loading: false, + pagination: { + pageSize: 10, + page: 1, + total: 0, + }, + dataList: [] + } + }, + created() { + this.getList() + }, + methods: { + handleEdit(row) { + this.isShowEdit = true + let str = row && row.id ? '缂栬緫杞﹁締鍒嗙被' : '鏂板缓杞﹁締鍒嗙被' + this.$nextTick(() => { + this.$refs.operaCategoryWindow.open(str) + this.$refs.operaCategoryWindow.getList() + if(row && row.id){ + this.$refs.operaCategoryWindow.getDetail(row.id) + } + }) + }, + deleteById(row) { + this.$confirm(`鎮ㄧ‘璁よ鍒犻櫎璇ュ垎绫诲悧`, '娓╅Θ鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning' + }).then(() => { + deleteById(row.id).then(res => { + this.getList() + }) + }) + + }, + getList() { + const { pagination, filters } = this + this.loading = true + fetchList({ + model: { ...filters }, + capacity: pagination.pageSize, + page: pagination.page, + }).then(res => { + this.loading = false + this.dataList = res.records || [] + this.pagination.total = res.total || 0 + }, () => { + this.loading = false + }) + }, + } +} +</script> diff --git a/admin/src/views/vehicle/components/OperaCategoryWindow.vue b/admin/src/views/vehicle/components/OperaCategoryWindow.vue new file mode 100644 index 0000000..feaead6 --- /dev/null +++ b/admin/src/views/vehicle/components/OperaCategoryWindow.vue @@ -0,0 +1,79 @@ +<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-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> + <!-- <el-form-item label="鐘舵��" prop="status"> + <el-select v-model="form.status" placeholder="璇烽�夋嫨"> + <el-option label="鍚敤" value="0"></el-option> + <el-option label="绂佺敤" value="1"></el-option> + </el-select> + </el-form-item> --> + <el-form-item label="澶囨敞" prop="remark"> + <el-input type="textarea" v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" v-trim /> + </el-form-item> + </el-form> + </GlobalWindow> +</template> + +<script> +import BaseOpera from '@/components/base/BaseOpera' +import GlobalWindow from '@/components/common/GlobalWindow' +import { create, fetchCateList, getInfoById } from '@/api/business/category.js' +export default { + name: 'OperaCategoryWindow', + extends: BaseOpera, + components: { GlobalWindow }, + data() { + return { + // 琛ㄥ崟鏁版嵁 + form: { + parentId: null, + name: '', + remark: '', + status: '', + type: 1 + }, + // 楠岃瘉瑙勫垯 + rules: { + name: [ + { required: true, message: '璇疯緭鍏ヤ簩绾у垎绫诲悕绉�', trigger: 'blur' } + ], + status: [ + { required: true, message: '璇烽�夋嫨鏄惁鍚敤', trigger: 'change' } + ] + }, + dataList: [] + } + }, + created() { + this.config({ + api: '/business/category', + 'field.id': 'id' + }) + }, + methods: { + getList() { + fetchCateList({}).then(res => { + this.dataList = res || [] + + }) + }, + close() { + this.visible = false + this.$emit('close') + }, + getDetail(id) { + getInfoById(id).then(res => { + this.form = res + }) + }, + } +} +</script> diff --git a/admin/src/views/vehicle/parkBook.vue b/admin/src/views/vehicle/parkBook.vue index ee74c48..5902ae2 100644 --- a/admin/src/views/vehicle/parkBook.vue +++ b/admin/src/views/vehicle/parkBook.vue @@ -5,8 +5,8 @@ <el-form-item title="杞︾墝鍙�" prop="carCode"> <el-input v-model="searchForm.carCode" placeholder="杞︾墝鍙�" @keypress.enter.native="search"></el-input> </el-form-item> - <el-form-item title="杞︿富濮撳悕/鎵嬫満鍙�" prop="memberName"> - <el-input v-model="searchForm.memberName" placeholder="鍛樺伐濮撳悕/鎵嬫満鍙�" @keypress.enter.native="search"></el-input> + <el-form-item title="杞︿富淇℃伅" prop="memberName"> + <el-input v-model="searchForm.memberName" placeholder="杞︿富淇℃伅" @keypress.enter.native="search"></el-input> </el-form-item> <el-form-item title="杞︿富缁勭粐" prop="companyName"> <el-input v-model="searchForm.companyName" placeholder="杞︿富缁勭粐鍚嶇О" @keypress.enter.native="search"></el-input> diff --git a/h5_meeting/unpackage/release/apk/__UNI__EF8BAA7__20241008151948.apk b/h5_meeting/unpackage/release/apk/__UNI__EF8BAA7__20241008151948.apk new file mode 100644 index 0000000..eff3492 --- /dev/null +++ b/h5_meeting/unpackage/release/apk/__UNI__EF8BAA7__20241008151948.apk Binary files differ -- Gitblit v1.9.3