From 8ac30411bb33e406e0ed5a2b6e2edaf7ab59f11f Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期六, 23 十一月 2024 17:10:21 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- admin/src/views/contract/components/contractEdit.vue | 376 +++++ admin/src/views/workorder/workorderCate.vue | 14 admin/src/views/Inspection/components/areaCate.vue | 74 + admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue | 69 admin/src/views/Inspection/task.vue | 88 admin/src/views/finance/payments.vue | 137 + admin/src/api/Inspection/ywPatrolPoint.js | 7 admin/src/assets/style/style.scss | 3 admin/src/views/Inspection/dot.vue | 67 admin/src/views/contract/components/contractDetail.vue | 226 +++ admin/src/views/client/staffList.vue | 6 admin/src/views/finance/account.vue | 138 ++ admin/src/views/operation/category.vue | 109 + admin/src/views/operation/components/maintain.vue | 222 +++ admin/src/views/workorder/workorderList.vue | 96 admin/src/views/Inspection/components/taskDetail.vue | 98 + admin/src/views/operation/components/deviceEdit.vue | 137 + admin/src/views/operation/device.vue | 138 ++ admin/src/components/common/MemberSearch/index.js | 3 admin/src/views/finance/bull.vue | 194 ++ admin/src/components/common/MemberSearch/src/index.vue | 155 ++ admin/src/views/finance/components/accountEdit.vue | 104 + admin/src/views/workorder/components/OperaCategoryWindow.vue | 21 admin/src/components/common/QueryForm/queryForm.vue | 16 admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue | 97 + admin/src/views/operation/record.vue | 138 ++ admin/src/views/contract/contractList.vue | 147 ++ admin/src/views/Inspection/plan.vue | 97 admin/src/views/finance/company.vue | 132 + admin/src/views/operation/components/OperaCategoryWindow.vue | 74 + admin/src/api/Inspection/device.js | 40 admin/src/views/Inspection/area.vue | 107 + admin/src/views/project/components/OperaYwBuildingWindow.vue | 2 admin/src/views/contract/components/config.js | 3 admin/src/views/finance/components/companyEdit.vue | 93 + admin/src/views/project/buildingList.vue | 63 admin/src/views/Inspection/components/OperaYwPatrolLineWindow.vue | 175 + admin/src/views/Inspection/path.vue | 75 admin/src/views/finance/components/deviceEdit.vue | 137 + admin/src/views/workorder/components/OperaYwWorkorderWindow.vue | 226 ++- 40 files changed, 3,665 insertions(+), 439 deletions(-) diff --git a/admin/src/api/Inspection/device.js b/admin/src/api/Inspection/device.js new file mode 100644 index 0000000..5098bb4 --- /dev/null +++ b/admin/src/api/Inspection/device.js @@ -0,0 +1,40 @@ +import request from '../../utils/request' + +// 鏌ヨ +export function fetchList (data) { + return request.post('/visitsAdmin/cloudService/business/ywDevice/page', data, { + trim: true + }) +} + +// 瀵煎嚭Excel +export function exportExcel (data) { + return request.post('/visitsAdmin/cloudService/business/ywDevice/exportExcel', data, { + trim: true, + download: true + }) +} + +// 鍒涘缓 +export function create (data) { + return request.post('/visitsAdmin/cloudService/business/ywDevice/create', data) +} + +// 淇敼 +export function updateById (data) { + return request.post('/visitsAdmin/cloudService/business/ywDevice/updateById', data) +} + +// 鍒犻櫎 +export function deleteById (id) { + return request.get(`/visitsAdmin/cloudService/business/ywDevice/delete/${id}`) +} + +// 鎵归噺鍒犻櫎 +export function deleteByIdInBatch (ids) { + return request.get('/visitsAdmin/cloudService/business/ywDevice/delete/batch', { + params: { + ids + } + }) +} diff --git a/admin/src/api/Inspection/ywPatrolPoint.js b/admin/src/api/Inspection/ywPatrolPoint.js index 933179d..92dfde0 100644 --- a/admin/src/api/Inspection/ywPatrolPoint.js +++ b/admin/src/api/Inspection/ywPatrolPoint.js @@ -6,7 +6,12 @@ trim: true }) } - +// 鏌ヨ +export function getFetchList (data) { + return request.post('/visitsAdmin/cloudService/business/ywPatrolPoint/list', data, { + trim: true + }) +} // 瀵煎嚭Excel export function exportExcel (data) { return request.post('/visitsAdmin/cloudService/business/ywPatrolPoint/exportExcel', data, { diff --git a/admin/src/assets/style/style.scss b/admin/src/assets/style/style.scss index 310a553..afecdf3 100644 --- a/admin/src/assets/style/style.scss +++ b/admin/src/assets/style/style.scss @@ -50,6 +50,9 @@ .green{ color: #75a236; } +.gary{ + color: #aaaaaa; +} .cu{ cursor: pointer; } diff --git a/admin/src/components/common/MemberSearch/index.js b/admin/src/components/common/MemberSearch/index.js new file mode 100644 index 0000000..9f1e88f --- /dev/null +++ b/admin/src/components/common/MemberSearch/index.js @@ -0,0 +1,3 @@ +import Index from './src' + +export default Index diff --git a/admin/src/components/common/MemberSearch/src/index.vue b/admin/src/components/common/MemberSearch/src/index.vue new file mode 100644 index 0000000..f3db2c9 --- /dev/null +++ b/admin/src/components/common/MemberSearch/src/index.vue @@ -0,0 +1,155 @@ +<template> + <GlobalWindow title="閫夋嫨瀹㈡埛" width="1000px" @close="close" :visible.sync="isShowMemberList"> + <div> + <div class="df_ac mb20"> + <el-input v-model="modalSearchValue" placeholder="璇疯緭鍏ュ鎴峰悕绉�" class="w400" @keyup.enter.native="queryList"> + <!-- <el-button slot="append" icon="el-icon-search" @click="queryList()" /> --> + </el-input> + <el-button class="ml10" type="primary" @click="queryList()">鏌ヨ</el-button> + </div> + <el-table ref="table" v-loading="listLoading" :data="list" element-loading-text="Loading" border fit + :header-row-class-name="'table-header'" class="doumee-element-table doumee-element-tableb" + @row-click="rowClick"> + + <el-table-column align="center" label="瀹㈡埛绫诲瀷" prop="cardName" show-overflow-tooltip min-width="80" /> + <el-table-column align="center" label="瀹㈡埛鍚嶇О" show-overflow-tooltip prop="remainingMoney" min-width="80" /> + <el-table-column align="center" label="鑱旂郴浜�" show-overflow-tooltip prop="remainingGiveMoney" min-width="80" /> + <el-table-column label="鑱旂郴鐢佃瘽" prop="createTime" min-width="100" align="center" /> + <el-table-column label="缁熶竴淇$敤浠g爜" prop="createTime" min-width="120" align="center" /> + <el-table-column label="钀ヤ笟鏈熼檺" prop="createTime" min-width="100" align="center" /> + <el-table-column label="榛樿鍙戠エ绫诲瀷" prop="createTime" min-width="100" align="center" /> + </el-table> + <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> + </div> + </GlobalWindow> +</template> + +<script> +import { memberList, memberDetailInfo } from '@/api' +import GlobalWindow from '@/components/common/GlobalWindow' +import dayjs from 'dayjs' +// import { debounce } from '@/utils/debounce' + +import Pagination from '@/components/common/Pagination' +export default { + components: { + Pagination, + GlobalWindow + }, + props: { + isShowChooseBtn: { + type: Boolean, + default: () => true + }, + type: { // (10: 鍟嗗搧鎶樻墸 20: 璁㈠満鎶樻墸 30: 闂ㄧエ鎶樻墸 40: 濂楅鎶樻墸 50锛氭椿鍔ㄦ姌鎵� 60锛氳绋嬫姌鎵�) + type: String, + default: 'default' + } + }, + data() { + return { + searchValue: '', + isShowMemberList: false, + modalSearchValue: '', + list: [], + totalCount: 0, + pagination: { + pageSize: 10, + page: 1, + total: 0 + }, + listLoading: false, + + } + }, + created() { + // (10: 鍟嗗搧鎶樻墸 20: 璁㈠満鎶樻墸 30: 闂ㄧエ鎶樻墸 40: 濂楅鎶樻墸 50锛氭椿鍔ㄦ姌鎵� 60锛氳绋嬫姌鎵�) + }, + methods: { + clearSearch() { + this.searchValue = '' + this.modalSearchValue = '' + }, + handleMemberSelect(item) { + memberDetailInfo({ param: { memberId: item.id } }).then((res) => { + if (res.errorCode !== '000000') return + const obj = res.record || {} + obj.searchValue = this.searchValue + this.$emit('select', obj) + }) + }, + clear() { + this.searchValue = '' + setTimeout(() => { + this.$refs.searchValueRef.focus() + }) + this.$emit('clear') + }, + rowClick(item) { + memberDetailInfo({ param: { memberId: item.id } }).then((res) => { + if (res.errorCode !== '000000') return + const obj = res.record || {} + this.searchValue = obj.nickName + obj.searchValue = this.modalSearchValue + if (item.phone) { + this.searchValue += '-' + item.phone + } + if (item.number) { + this.searchValue += '锛�' + item.number + '锛�' + } + this.$emit('select', obj) + }) + this.isShowMemberList = false + }, + getList() { + const { pagination, modalSearchValue } = this + this.listLoading = true + memberList({ pagination, param: { keyword: modalSearchValue } }).then((res) => { + this.listLoading = false + if (res.errorCode !== '000000') return + this.list = res.recordList + this.pagination.total = res.total || 0 + this.totalCount = res.totalCount + }, () => { + this.listLoading = false + }) + }, + openModal() { + this.modalSearchValue = '' + // this.queryList() + this.isShowMemberList = true + }, + queryList() { + this.pagination.page = 1 + this.getList() + }, + currentChange(val) { + this.pagination.page = val + this.getList() + }, + clear() { + this.filters = {} + this.pagination.pageSize = 10 + this.pagination.page = 1 + this.getList() + }, + handleSizeChange(capacity) { + this.pagination.pageSize = capacity + this.getList() + }, + close() { + this.isShowMemberList = false + } + } +} +</script> + +<style lang="scss" scoped> +.member_search_wrap { + display: flex; + + ::v-deep .el-input__validateIcon { + display: none !important; + } +} +</style> diff --git a/admin/src/components/common/QueryForm/queryForm.vue b/admin/src/components/common/QueryForm/queryForm.vue index c56d064..80e9fc1 100644 --- a/admin/src/components/common/QueryForm/queryForm.vue +++ b/admin/src/components/common/QueryForm/queryForm.vue @@ -2,13 +2,13 @@ <div class="doumee-filter"> <el-form inline label-suffix="锛�" @submit.native.prevent> <template v-for="(item, index) in queryFormConfig.formItems"> - <el-form-item v-if="item.type === 'input' && (showZk || index < listLength)" :key="item.filed"> + <el-form-item v-if="item.type === 'input' && (showZk || index < listLength)" :label="item.label" :key="item.filed"> <el-input v-model="searchForm[item.filed]" :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true" :placeholder="item.label" class="w200" @change="changeForm(item.filed)" @keyup.enter.native="handlekeyup(item.keyup || false)" /> </el-form-item> - <el-form-item v-if="item.type === 'moneySelect' && (showZk || index < listLength)" :key="item.label"> + <el-form-item v-if="item.type === 'moneySelect' && (showZk || index < listLength)" :label="item.label" :key="item.label"> <el-input v-model="searchForm[item.filedStrt]" :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true" :placeholder="item.start" style="width: 150px" /> @@ -17,7 +17,7 @@ :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true" :placeholder="item.end" style="width: 150px" /> </el-form-item> - <el-form-item v-if="item.type === 'select' && (showZk || index < listLength)" :key="item.filed"> + <el-form-item v-if="item.type === 'select' && (showZk || index < listLength)" :label="item.label" :key="item.filed"> <el-select v-model="searchForm[item.filed]" :filterable="item.filterable || true" :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true" :placeholder="item.label" class="w200" @@ -26,25 +26,25 @@ :label="item.labelCode ? opt[item.labelCode] : opt.label" /> </el-select> </el-form-item> - <el-form-item v-if="item.type === 'date' && (showZk || index < listLength)" :key="item.filed"> + <el-form-item v-if="item.type === 'date' && (showZk || index < listLength)" :label="item.label" :key="item.filed"> <el-date-picker v-model="searchForm[item.filed]" type="date" value-format="yyyy-MM-dd" class="w200" :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true" :placeholder="item.label" :picker-options="item.pickerOptions || {}" @change="changeForm(item.filed)" /> </el-form-item> - <el-form-item v-if="item.type === 'daterange' && (showZk || index < listLength)" :key="item.filed"> + <el-form-item v-if="item.type === 'daterange' && (showZk || index < listLength)" :label="item.label" :key="item.filed"> <el-date-picker v-model="searchForm[item.filed]" value-format="yyyy-MM-dd" type="daterange" range-separator="鑷�" :clearable="(item.clearable !== null && item.clearable !== undefined && item.clearable !== '') ? item.clearable : true" :start-placeholder="item.start || ''" :end-placeholder="item.end || ''" :picker-options="item.pickerOptions || {}" class="w400" @change="changeForm(item.filed)" /> </el-form-item> - <el-form-item v-if="item.type === 'timePicker' && (showZk || index < listLength)" :key="item.filed"> + <el-form-item v-if="item.type === 'timePicker' && (showZk || index < listLength)" :label="item.label" :key="item.filed"> <el-time-picker v-model="searchForm[item.filed]" is-range range-separator="鑷�" format="HH:mm" value-format="HH:mm" start-placeholder="寮�濮嬫椂闂�" end-placeholder="缁撴潫鏃堕棿" placeholder="閫夋嫨鏃堕棿鑼冨洿" class="w400" @change="changeForm(item.filed)" /> </el-form-item> - <el-form-item v-if="item.type === 'datetimerange' && (showZk || index < listLength)" :key="item.filed"> + <el-form-item v-if="item.type === 'datetimerange' && (showZk || index < listLength)" :label="item.label" :key="item.filed"> <el-date-picker v-model="searchForm[item.filed]" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" type="datetimerange" :default-time="['00:00:00', '23:59:59']" :picker-options="item.pickerOptions || pickerOptions" range-separator="鑷�" @@ -52,7 +52,7 @@ :start-placeholder="item.start || '寮�濮嬫椂闂�'" :end-placeholder="item.end || '缁撴潫鏃堕棿'" class="w400" @change="changeForm(item.filed)" /> </el-form-item> - <el-form-item v-if="item.type === 'slot' && (showZk || index < listLength)" :key="item.filed"> + <el-form-item v-if="item.type === 'slot' && (showZk || index < listLength)" :label="item.label" :key="item.filed"> <slot :name="item.filed" /> </el-form-item> </template> diff --git a/admin/src/views/Inspection/area.vue b/admin/src/views/Inspection/area.vue index e69de29..1068c9c 100644 --- a/admin/src/views/Inspection/area.vue +++ b/admin/src/views/Inspection/area.vue @@ -0,0 +1,107 @@ +<template> + <TableLayout> + <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="parentName" label="鎵�灞炲垎绫�" min-width="100px"></el-table-column> --> + <el-table-column prop="sortnum" 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/areaCate.vue' +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.config({ + module: '杞﹁締淇℃伅琛�', + api: '/business/category', + 'field.id': 'id', + 'field.main': 'id' + }) + 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, type: 4 }, + 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/Inspection/components/OperaYwPatrolLineWindow.vue b/admin/src/views/Inspection/components/OperaYwPatrolLineWindow.vue index abbc222..d936c67 100644 --- a/admin/src/views/Inspection/components/OperaYwPatrolLineWindow.vue +++ b/admin/src/views/Inspection/components/OperaYwPatrolLineWindow.vue @@ -1,78 +1,157 @@ <template> - <GlobalWindow - :title="title" - :visible.sync="visible" - :confirm-working="isWorking" - @confirm="confirm" - > + <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm"> <el-form :model="form" ref="form" :rules="rules"> - <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator"> - <el-input v-model="form.creator" 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="createDate"> - <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker> - </el-form-item> - <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor"> - <el-input v-model="form.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" v-trim/> - </el-form-item> - <el-form-item label="鏇存柊鏃堕棿" prop="editDate"> - <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�"></el-date-picker> - </el-form-item> - <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted"> - <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" v-trim/> - </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="remark"> - <el-input v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" v-trim/> - </el-form-item> - <el-form-item label="鐘舵�� 0鍚敤 1绂佺敤" prop="status"> - <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0鍚敤 1绂佺敤" v-trim/> - </el-form-item> - <el-form-item label="鎺掑簭鐮�" prop="sortnum"> - <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/> - </el-form-item> - <el-form-item label="鍥炬爣" prop="imgurl"> - <el-input v-model="form.imgurl" placeholder="璇疯緭鍏ュ浘鏍�" v-trim/> - </el-form-item> + <div class="head"> + <div class="title">宸℃鐐�</div> + <el-button type="primary" @click="openModal">娣诲姞宸℃鐐�</el-button> + </div> + <el-table v-loading="isWorking.search" :data="list" stripe> + <el-table-column prop="code" label="宸℃鐐圭紪鐮�" min-width="100px"></el-table-column> + <el-table-column prop="pointName" label="宸℃鐐瑰悕绉�" min-width="100px"></el-table-column> + <el-table-column prop="name" label="鎵爜鎵撳崱" min-width="100px"> + <template v-slot="scope"> + <el-switch v-model="scope.row.needScancode" @change="changeStatus" active-value="0" + inactive-value="1"></el-switch> + </template> + </el-table-column> + <el-table-column prop="name" label="鎺掑簭鐮�" min-width="100px"> + <template v-slot="scope"> + <el-input v-model="scope.row.sortnum" class="w100"></el-input> + </template> + </el-table-column> + <el-table-column prop="name" label="鎿嶄綔" min-width="100px"> + <template v-slot="scope"> + <span class="red cu" @click="handleDel(scope)">鍒犻櫎</span> + </template> + </el-table-column> + </el-table> + + </el-form> + <!-- --> + <el-dialog title="娣诲姞宸℃鐐�" :close-on-click-modal="false" append-to-body :visible.sync="isShowModal" width="500px"> + <el-select class="w400" v-model="selPoint" clearable multiple filterable> + <el-option v-for="item in pointList" :value="item.id" :label="item.name"></el-option> + </el-select> + <span slot="footer" class="dialog-footer"> + <el-button @click="isShowModal = false">鍙� 娑�</el-button> + <el-button type="primary" @click="subModal">纭� 瀹�</el-button> + </span> + </el-dialog> </GlobalWindow> </template> <script> import BaseOpera from '@/components/base/BaseOpera' import GlobalWindow from '@/components/common/GlobalWindow' +import { getFetchList } from '@/api/Inspection/ywPatrolPoint' +import { create } from '@/api/Inspection/ywPatrolLine' +import { Message } from 'element-ui' export default { name: 'OperaYwPatrolLineWindow', extends: BaseOpera, components: { GlobalWindow }, - data () { + data() { return { // 琛ㄥ崟鏁版嵁 form: { - id: null, - creator: '', - createDate: '', - editor: '', - editDate: '', - isdeleted: '', name: '', - remark: '', - status: '', - sortnum: '', - imgurl: '' }, + selPoint: [], + pointList: [], + list: [], + isShowModal: false, // 楠岃瘉瑙勫垯 rules: { + name: [{ required: true, message: '璇疯緭鍏�' }], + selPoint: [{ type: 'array', required: true, message: '璇疯緭鍏�' }], } } }, - created () { + created() { this.config({ api: '/Inspection/ywPatrolLine', - 'field.id': 'id' }) + }, + methods: { + confirm() { + const { form, list } = this + if (list.length == 0) return Message.warning('璇峰厛閫夋嫨宸℃鐐�') + form.linePointList = list + create({ ...form }).then(res => { + if (res.code == 200) { + Message.success('淇濆瓨鎴愬姛') + this.close() + } + }) + }, + initData() { + getFetchList({}).then(res => { + this.pointList = res || [] + }) + }, + handleDel(row) { + this.list.splice(row.$index, 1) + + }, + changeStatus(row) { + + }, + openModal() { + this.selPoint = this.list.map(i => i.id) + this.isShowModal = true + }, + subModal() { + const { selPoint, pointList, list } = this + if (selPoint.length == 0) return Message.warning('璇峰厛閫夋嫨宸℃鐐�') + let arr = [] + // 鍙栧嚭閫変腑鍒楄〃 + pointList.forEach(item => { + selPoint.forEach(item2 => { + if (item.id === item2) { + arr.push(item) + } + }) + }) + // 鍚宭ist鍘婚噸 + list.forEach(item => { + arr.forEach((item2, i) => { + if (item.id === item2.id) { + arr.splice(i, 1) + } + }) + }) + // 娣诲姞 + arr.forEach(i => { + this.list.push({ + needScancode: '1', + pointName: i.name, + pointId: i.id, + code: i.code, + id: i.id + }) + }) + this.isShowModal = false + }, + close(){ + this.visible = false + this.$emit('success') + } } } </script> +<style lang="scss" scoped> +.head { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 20px; + + div { + font-weight: 500; + } +} +</style> diff --git a/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue b/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue index 4d0089b..8674bad 100644 --- a/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue +++ b/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue @@ -1,22 +1,36 @@ <template> - <GlobalWindow - :title="title" - :visible.sync="visible" - :confirm-working="isWorking" - @confirm="confirm" - > + <GlobalWindow :title="title" :visible.sync="visible" width="620px" :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 label="宸℃鐐圭紪鐮�" prop="code"> + <el-input v-model="form.code" placeholder="璇疯緭鍏ュ悕绉�" v-trim /> </el-form-item> - <el-form-item label="鍥炬爣" prop="imgurl"> - <el-input v-model="form.imgurl" 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="鍖哄煙缂栫爜锛堝叧鑱攃ategory)" prop="areaId"> - <el-input v-model="form.areaId" placeholder="璇疯緭鍏ュ尯鍩熺紪鐮侊紙鍏宠仈category)" v-trim/> + <el-form-item label="宸℃璁惧"> + <el-select v-model="form.deviceId"> + <el-option v-for="item in deviceList" :key="item.id" :label="item.name" :value="item.id"></el-option> + </el-select> </el-form-item> - <el-form-item label="鍦板潃" prop="addr"> - <el-input v-model="form.addr" placeholder="璇疯緭鍏ュ湴鍧�" v-trim/> + <el-form-item label="鎵�灞炲尯鍩�" prop="areaId"> + <el-cascader v-model="form.areaIds" @change="changeSel" placeholder="璇烽�夋嫨宸℃鍖哄煙" clearable :options="cateList" + :props="{ + label: 'name', + value: 'id', + children: 'childCategoryList', + checkStrictly: true + }"></el-cascader> + </el-form-item> + <el-form-item label="缁忕含搴�"> + + </el-form-item> + <el-form-item label="宸℃鍐呭" prop="content"> + <el-input type="textarea" :rows="4" v-model="form.content" placeholder="璇疯緭鍏�" /> + </el-form-item> + <el-form-item label="涓婁紶鍥剧墖" prop="imgurl"> + <UploadAvatarImage :file="{ 'imgurlfull': form.imgurlfull, 'imgurl': form.imgurl }" + :uploadData="{ folder: 'projects' }" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false" + @uploadBegin="isUploading = true" /> </el-form-item> </el-form> </GlobalWindow> @@ -25,38 +39,67 @@ <script> import BaseOpera from '@/components/base/BaseOpera' import GlobalWindow from '@/components/common/GlobalWindow' +import UploadAvatarImage from '@/components/common/UploadAvatarImage' +import { fetchList } from '@/api/business/category' export default { name: 'OperaYwPatrolPointWindow', extends: BaseOpera, - components: { GlobalWindow }, - data () { + components: { GlobalWindow, UploadAvatarImage }, + data() { return { // 琛ㄥ崟鏁版嵁 form: { - id: null, - creator: '', - createDate: '', - editor: '', - editDate: '', - isdeleted: '', name: '', - remark: '', - status: '', - sortnum: '', + code: '', + content: '', imgurl: '', areaId: '', addr: '' }, + deviceList: [], + cateList: [], // 楠岃瘉瑙勫垯 rules: { - } + name: [{ required: true, message: '璇疯緭鍏�' }], + code: [{ required: true, message: '璇疯緭鍏�' }], + }, + isUploading: false, } }, - created () { + created() { this.config({ api: '/Inspection/ywPatrolPoint', 'field.id': 'id' }) + }, + methods: { + initData() { + fetchList({ + model: { type: 4 }, + capacity: 1000, + page: 1, + }).then(res => { + this.cateList = res.records || [] + }) + + }, + changeSel(e) { + if (e && e.length == 1) { + this.$set(this.form, 'catePId', e[0]) + this.$set(this.form, 'cateId', '') + } else if (e && e.length == 2) { + this.$set(this.form, 'catePId', e[0]) + this.$set(this.form, 'cateId', e[1]) + } else { + this.$set(this.form, 'catePId', '') + this.$set(this.form, 'cateId', '') + } + this.search() + }, + uploadAvatarSuccess(file) { + this.form.imgurl = file.imgurl + this.form.imgurlfull = file.imgurlfull + }, } } </script> diff --git a/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue b/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue index 2f13c0e..0f933b6 100644 --- a/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue +++ b/admin/src/views/Inspection/components/OperaYwPatrolSchemeWindow.vue @@ -1,38 +1,37 @@ <template> - <GlobalWindow - :title="title" - :visible.sync="visible" - :confirm-working="isWorking" - @confirm="confirm" - > + <GlobalWindow width="520px" :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm"> <el-form :model="form" ref="form" :rules="rules"> - - <el-form-item label="鏍囬" prop="title"> - <el-input v-model="form.title" placeholder="璇疯緭鍏ユ爣棰�" v-trim/> + <el-form-item label="璁″垝鍚嶇О" prop="title"> + <el-input v-model="form.title" placeholder="璇疯緭鍏ユ爣棰�" v-trim /> </el-form-item> - - - <el-form-item label="宸℃璐熻矗浜虹紪鐮侀泦鍚堬紝澶氫釜浣跨敤鑻辨枃閫楀彿闅斿紑" prop="userIds"> - <el-input v-model="form.userIds" placeholder="璇疯緭鍏ュ贰妫�璐熻矗浜虹紪鐮侀泦鍚堬紝澶氫釜浣跨敤鑻辨枃閫楀彿闅斿紑" v-trim/> + <el-form-item label="宸℃绾胯矾"> + <el-select v-model="form.status" filterable clearable> + <el-option value="0" label="姣忓ぉ"></el-option> + <el-option value="1" label="姣忓懆"></el-option> + <el-option value="2" label="姣忔湀"></el-option> + </el-select> </el-form-item> - - <el-form-item label="寰幆鍛ㄦ湡 0姣忓ぉ 1姣忓懆 2姣忓ぉ" prop="circleType"> - <el-input v-model="form.circleType" placeholder="璇疯緭鍏ュ惊鐜懆鏈� 0姣忓ぉ 1姣忓懆 2姣忓ぉ" v-trim/> + <el-form-item label="宸℃璐熻矗浜�"> + <el-select v-model="form.userIds" filterable clearable> + <el-option value="0" label="姣忓ぉ"></el-option> + <el-option value="1" label="姣忓懆"></el-option> + <el-option value="2" label="姣忔湀"></el-option> + </el-select> </el-form-item> - <el-form-item label="寰幆閲嶅瑙勫垯 1-31锛屽涓嫳鏂囬�楀彿闅斿紑" prop="circleDays"> - <el-input v-model="form.circleDays" placeholder="璇疯緭鍏ュ惊鐜噸澶嶈鍒� 1-31锛屽涓嫳鏂囬�楀彿闅斿紑" v-trim/> + <el-form-item label="璁″垝寮�濮嬫棩鏈�-缁撴潫鏃ユ湡"> + <el-date-picker v-model="form.selDate" is-range range-separator="-" value-format="yyyy-MM-dd" type="daterange" + start-placeholder="寮�濮嬫棩鏈�" end-placeholder="缁撴潫鏃ユ湡" class="w400" /> </el-form-item> - <el-form-item label="寮�濮嬫棩鏈�" prop="startDate"> - <el-date-picker v-model="form.startDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ紑濮嬫棩鏈�"></el-date-picker> + <el-form-item label="璁″垝鎵ц鏃堕棿"> + <el-time-picker v-model="form.selTime" is-range range-separator="-" format="HH:mm" value-format="HH:mm:ss" + start-placeholder="寮�濮嬫椂闂�" end-placeholder="缁撴潫鏃堕棿" placeholder="閫夋嫨鏃堕棿鑼冨洿" class="w400" /> </el-form-item> - <el-form-item label="缁撴潫鏃ユ湡" prop="endDate"> - <el-date-picker v-model="form.endDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ粨鏉熸棩鏈�"></el-date-picker> - </el-form-item> - <el-form-item label="寮�濮嬫椂闂寸偣" prop="startTime"> - <el-input v-model="form.startTime" placeholder="璇疯緭鍏ュ紑濮嬫椂闂寸偣" v-trim/> - </el-form-item> - <el-form-item label="缁撴潫鏃堕棿鐐�" prop="endTime"> - <el-input v-model="form.endTime" placeholder="璇疯緭鍏ョ粨鏉熸椂闂寸偣" v-trim/> + <el-form-item label="寰幆鍛ㄦ湡"> + <el-select v-model="form.circleType" filterable clearable> + <el-option value="0" label="姣忓ぉ"></el-option> + <el-option value="1" label="姣忓懆"></el-option> + <el-option value="2" label="姣忔湀"></el-option> + </el-select> </el-form-item> </el-form> </GlobalWindow> @@ -45,7 +44,7 @@ name: 'OperaYwPatrolSchemeWindow', extends: BaseOpera, components: { GlobalWindow }, - data () { + data() { return { // 琛ㄥ崟鏁版嵁 form: { @@ -70,18 +69,26 @@ endDate: '', startTime: '', endTime: '', - processStatus: '' + processStatus: '', + selDate: [], + selTime: [], }, // 楠岃瘉瑙勫垯 rules: { } } }, - created () { + created() { this.config({ api: '/Inspection/ywPatrolScheme', 'field.id': 'id' }) + }, + methods: { + initData() { + + } } + } </script> diff --git a/admin/src/views/Inspection/components/areaCate.vue b/admin/src/views/Inspection/components/areaCate.vue new file mode 100644 index 0000000..ebe0534 --- /dev/null +++ b/admin/src/views/Inspection/components/areaCate.vue @@ -0,0 +1,74 @@ +<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="name"> + <el-input v-model="form.name" placeholder="璇疯緭鍏ュ尯鍩熷悕绉�" v-trim /> + </el-form-item> + <el-form-item label="鎵�灞炲尯鍩�" prop="parentId"> + <el-select :disabled="form.id" 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="sortnum"> + <el-input v-model="form.sortnum" oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 6)" 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: '', + sortnum: '', + type: 4 + }, + // 楠岃瘉瑙勫垯 + 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({ type: 4 }).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/Inspection/components/taskDetail.vue b/admin/src/views/Inspection/components/taskDetail.vue new file mode 100644 index 0000000..dfe59dc --- /dev/null +++ b/admin/src/views/Inspection/components/taskDetail.vue @@ -0,0 +1,98 @@ +<template> + <GlobalWindow title="宸℃浠诲姟璇︽儏" :showConfirm="false" :visible.sync="isShowModal"> + <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> + <el-table v-loading="loading" :data="list" stripe> + <el-table-column prop="" label="宸℃鐐瑰悕绉�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="鐘舵��" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="宸℃浜�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="宸℃鏃堕棿" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="宸℃缁撴灉" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="宸℃璇存槑" min-width="100" show-overflow-tooltip> + <template v-slot="scope"> + <span>{{ scope.row.billCode || scope.row.contractNum }}</span> + </template> + </el-table-column> + </el-table> + <div class="mt20"> + <Pagination @size-change="handleSizeChange" @current-change="getDetail" :pagination="pagination" /> + </div> + </GlobalWindow> +</template> + +<script> +import GlobalWindow from '@/components/common/GlobalWindow' +import QueryForm from '@/components/common/QueryForm' +import Pagination from '@/components/common/Pagination' +export default { + components: { GlobalWindow, QueryForm, Pagination }, + data() { + return { + isShowModal: true, + id: '', + pagination: { + pageSize: 10, + page: 1, + total: 0 + }, + filters: {}, + list: [], + total: 0, + queryFormConfig: { + formItems: [ + { + filed: 'name', + type: 'input', + label: '宸℃鐐瑰悕绉�' + }, + { + filed: 'status', + type: 'select', + label: '鎵ц鐘舵��', + placeholder: '鍏ㄩ儴', + options: [] + }, + ], + online: true + } + } + }, + methods: { + getDetail(page) { + const { pagination, filters, id } = this + this.loading = true + platformLogPage({ + model: { + ...filters, + id, + }, + sorts: [{ direction: 'DESC', property: 'param1' }], + 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鑾峰彇' + item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�') + }) + this.pagination.total = res.total || 0 + }, () => { + this.loading = false + }) + }, + clear() { + this.filters = {} + this.pagination.pageSize = 10 + this.pagination.page = 1 + this.getDetail() + }, + handleSizeChange(capacity) { + this.pagination.pageSize = capacity + this.getDetail() + } + } +} +</script> + +<style lang="scss" scoped></style> \ No newline at end of file diff --git a/admin/src/views/Inspection/dot.vue b/admin/src/views/Inspection/dot.vue index 0db2bf6..790a839 100644 --- a/admin/src/views/Inspection/dot.vue +++ b/admin/src/views/Inspection/dot.vue @@ -1,22 +1,44 @@ <template> <TableLayout :permissions="['business:ywpatrolpoint: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="宸℃鍖哄煙"> + <el-cascader v-model="searchForm.areaIds" @change="changeSel" placeholder="璇烽�夋嫨宸℃鍖哄煙" clearable + :options="areaList" :props="{ + label: 'name', + value: 'id', + children: 'childCategoryList', + checkStrictly: true + }"></el-cascader> + </el-form-item> + <section> + <el-button type="primary" @click="search">鎼滅储</el-button> + <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywpatrolline:exportExcel']" + @click="exportExcel">瀵煎嚭</el-button> + <el-button @click="reset">閲嶇疆</el-button> + </section> + </el-form> <!-- 琛ㄦ牸鍜屽垎椤� --> <template v-slot:table-wrap> <ul class="toolbar" v-permissions="['business:ywpatrolpoint:create', 'business:ywpatrolpoint:delete']"> - <li><el-button type="primary" @click="$refs.operaYwPatrolPointWindow.open('鏂板缓宸℃鐐�')" icon="el-icon-plus" + <li><el-button type="primary" @click="editClick()" icon="el-icon-plus" v-permissions="['business:ywpatrolpoint:create']">鏂板缓</el-button></li> <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:ywpatrolpoint: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="status" label="鐘舵�� 0鍚敤 1绂佺敤" min-width="100px"></el-table-column> + <el-table-column prop="code" label="宸℃鐐圭紪鐮�" min-width="100px"></el-table-column> + <el-table-column prop="name" label="宸℃鐐瑰悕绉�" min-width="100px"></el-table-column> + <el-table-column prop="deviceName" label="鍏宠仈璁惧" min-width="100px"></el-table-column> + <el-table-column prop="areaName" label="宸℃鍖哄煙" min-width="100px"></el-table-column> <el-table-column v-if="containPermissions(['business:ywpatrolpoint:update', 'business:ywpatrolpoint:delete'])" label="鎿嶄綔" min-width="120" fixed="right"> <template slot-scope="{row}"> - <el-button type="text" @click="$refs.operaYwPatrolPointWindow.open('缂栬緫宸℃鐐�', row)" icon="el-icon-edit" + <el-button type="text" @click="editClick(row)" icon="el-icon-edit" v-permissions="['business:ywpatrolpoint:update']">缂栬緫</el-button> <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:ywpatrolpoint:delete']">鍒犻櫎</el-button> @@ -36,6 +58,7 @@ import TableLayout from '@/layouts/TableLayout' import Pagination from '@/components/common/Pagination' import OperaYwPatrolPointWindow from './components/OperaYwPatrolPointWindow' +import { fetchList } from '@/api/business/category' export default { name: 'YwPatrolPoint', extends: BaseTable, @@ -57,7 +80,8 @@ imgurl: '', areaId: '', addr: '' - } + }, + areaList: [] } }, created() { @@ -68,6 +92,39 @@ 'field.main': 'id' }) this.search() + this.getProject() + }, + methods: { + getProject() { + fetchList({ + model: {type: 4}, + capacity: 1000, + page: 1, + }).then(res => { + this.areaList = res.records || [] + }) + }, + editClick(row) { + if (row && row.id) { + this.$refs.operaYwPatrolPointWindow.open('缂栬緫宸℃鐐�') + } else { + this.$refs.operaYwPatrolPointWindow.open('鏂板缓宸℃鐐�') + } + this.$refs.operaYwPatrolPointWindow.initData() + }, + changeSel(e) { + if (e && e.length == 1) { + this.$set(this.searchForm, 'catePId', e[0]) + this.$set(this.searchForm, 'cateId', '') + } else if (e && e.length == 2) { + this.$set(this.searchForm, 'catePId', e[0]) + this.$set(this.searchForm, 'cateId', e[1]) + } else { + this.$set(this.searchForm, 'catePId', '') + this.$set(this.searchForm, 'cateId', '') + } + this.search() + }, } } </script> diff --git a/admin/src/views/Inspection/path.vue b/admin/src/views/Inspection/path.vue index a426856..4854c6b 100644 --- a/admin/src/views/Inspection/path.vue +++ b/admin/src/views/Inspection/path.vue @@ -2,54 +2,49 @@ <TableLayout :permissions="['business:ywpatrolline: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="璁″垝鏃ユ湡"> - <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input> + <el-form-item label="宸℃绾胯矾" prop="name"> + <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ贰妫�绾胯矾鍚嶇О" @keypress.enter.native="search"></el-input> </el-form-item> <section> <el-button type="primary" @click="search">鎼滅储</el-button> - <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywpatrolline:exportExcel']" @click="exportExcel">瀵煎嚭</el-button> + <!-- <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywpatrolline:exportExcel']" + @click="exportExcel">瀵煎嚭</el-button> --> <el-button @click="reset">閲嶇疆</el-button> </section> </el-form> <!-- 琛ㄦ牸鍜屽垎椤� --> <template v-slot:table-wrap> <ul class="toolbar" v-permissions="['business:ywpatrolline:create', 'business:ywpatrolline:delete']"> - <li><el-button type="primary" @click="$refs.operaYwPatrolLineWindow.open('鏂板缓宸℃绾胯矾')" icon="el-icon-plus" v-permissions="['business:ywpatrolline:create']">鏂板缓</el-button></li> - <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:ywpatrolline:delete']">鍒犻櫎</el-button></li> + <li><el-button type="primary" @click="editClick()" icon="el-icon-plus" + v-permissions="['business:ywpatrolline:create']">鏂板缓</el-button></li> + <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" + v-permissions="['business:ywpatrolline: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="status" label="鐘舵�� 0鍚敤 1绂佺敤" min-width="100px"></el-table-column> - <el-table-column - v-if="containPermissions(['business:ywpatrolline:update', 'business:ywpatrolline:delete'])" - label="鎿嶄綔" - min-width="120" - fixed="right" - > + <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="lineAmount" label="宸℃鐐规暟閲�" min-width="100px"></el-table-column> + <el-table-column prop="status" label="鐘舵��" min-width="100px"> + <template v-slot="scope"> + <el-switch v-model="scope.row.status" @change="changeStatus" active-value="0" inactive-value="1"> + </el-switch> + </template> + </el-table-column> + <el-table-column v-if="containPermissions(['business:ywpatrolline:update', 'business:ywpatrolline:delete'])" + label="鎿嶄綔" min-width="120" fixed="right"> <template slot-scope="{row}"> - <el-button type="text" @click="$refs.operaYwPatrolLineWindow.open('缂栬緫宸℃绾胯矾', row)" icon="el-icon-edit" v-permissions="['business:ywpatrolline:update']">缂栬緫</el-button> - <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:ywpatrolline:delete']">鍒犻櫎</el-button> + <el-button type="text" @click="editClick(row)" icon="el-icon-edit" + v-permissions="['business:ywpatrolline:update']">缂栬緫</el-button> + <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" + v-permissions="['business:ywpatrolline:delete']">鍒犻櫎</el-button> </template> </el-table-column> </el-table> - <pagination - @size-change="handleSizeChange" - @current-change="handlePageChange" - :pagination="tableData.pagination" - > + <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination"> </pagination> </template> <!-- 鏂板缓/淇敼 --> - <OperaYwPatrolLineWindow ref="operaYwPatrolLineWindow" @success="handlePageChange"/> + <OperaYwPatrolLineWindow ref="operaYwPatrolLineWindow" @success="handlePageChange" /> </TableLayout> </template> @@ -62,7 +57,7 @@ name: 'YwPatrolLine', extends: BaseTable, components: { TableLayout, Pagination, OperaYwPatrolLineWindow }, - data () { + data() { return { // 鎼滅储 searchForm: { @@ -80,7 +75,7 @@ } } }, - created () { + created() { this.config({ module: '杩愮淮宸℃璺嚎淇℃伅琛�', api: '/Inspection/ywPatrolLine', @@ -88,6 +83,20 @@ 'field.main': 'id' }) this.search() + }, + methods: { + changeStatus() { + + }, + editClick(row) { + if (row && row.id) { + this.$refs.operaYwPatrolLineWindow.open('缂栬緫宸℃绾胯矾') + } else { + this.$refs.operaYwPatrolLineWindow.open('鏂板缓宸℃绾胯矾') + } + this.$refs.operaYwPatrolLineWindow.initData() + + }, } } </script> diff --git a/admin/src/views/Inspection/plan.vue b/admin/src/views/Inspection/plan.vue index 1fa37c1..55fa79a 100644 --- a/admin/src/views/Inspection/plan.vue +++ b/admin/src/views/Inspection/plan.vue @@ -2,69 +2,73 @@ <TableLayout :permissions="['business:ywpatrolscheme:query']"> <!-- 鎼滅储琛ㄥ崟 --> <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> - + <el-form-item label="鏍囬" prop="title"> <el-input v-model="searchForm.title" placeholder="璇疯緭鍏ユ爣棰�" @keypress.enter.native="search"></el-input> </el-form-item> <el-form-item label="寮�濮嬫棩鏈�" prop="startDate"> - <el-date-picker v-model="searchForm.startDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ紑濮嬫棩鏈�" @change="search"/> + <el-date-picker v-model="searchForm.startDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ紑濮嬫棩鏈�" + @change="search" /> </el-form-item> <el-form-item label="缁撴潫鏃ユ湡" prop="endDate"> - <el-date-picker v-model="searchForm.endDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ粨鏉熸棩鏈�" @change="search"/> + <el-date-picker v-model="searchForm.endDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ粨鏉熸棩鏈�" @change="search" /> </el-form-item> - + <section> <el-button type="primary" @click="search">鎼滅储</el-button> - <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywpatrolscheme:exportExcel']" @click="exportExcel">瀵煎嚭</el-button> + <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywpatrolscheme:exportExcel']" + @click="exportExcel">瀵煎嚭</el-button> <el-button @click="reset">閲嶇疆</el-button> </section> </el-form> <!-- 琛ㄦ牸鍜屽垎椤� --> <template v-slot:table-wrap> <ul class="toolbar" v-permissions="['business:ywpatrolscheme:create', 'business:ywpatrolscheme:delete']"> - <li><el-button type="primary" @click="$refs.operaYwPatrolSchemeWindow.open('鏂板缓宸℃璁″垝')" icon="el-icon-plus" v-permissions="['business:ywpatrolscheme:create']">鏂板缓</el-button></li> - <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:ywpatrolscheme:delete']">鍒犻櫎</el-button></li> + <li><el-button type="primary" @click="$refs.operaYwPatrolSchemeWindow.open('鏂板缓宸℃璁″垝')" icon="el-icon-plus" + v-permissions="['business:ywpatrolscheme:create']">鏂板缓</el-button></li> + <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" + v-permissions="['business:ywpatrolscheme:delete']">鍒犻櫎</el-button></li> </ul> - <el-table - v-loading="isWorking.search" - :data="tableData.list" - stripe - @selection-change="handleSelectionChange" - > + <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="title" label="鏍囬" min-width="100px"></el-table-column> - <el-table-column prop="status" label="鐘舵�� 0鍚敤 1绂佺敤" min-width="100px"></el-table-column> - <el-table-column prop="lineId" label="宸℃鐐圭紪鐮�(鍏宠仈yw_patrol_line)" min-width="100px"></el-table-column> - - <el-table-column prop="dealDate" label="澶勭悊鏃堕棿" min-width="100px"></el-table-column> - <el-table-column prop="dealInfo" label="澶勭悊澶囨敞" min-width="100px"></el-table-column> - <el-table-column prop="startDate" label="寮�濮嬫棩鏈�" min-width="100px"></el-table-column> - <el-table-column prop="endDate" label="缁撴潫鏃ユ湡" min-width="100px"></el-table-column> - <el-table-column prop="startTime" label="寮�濮嬫椂闂寸偣" min-width="100px"></el-table-column> - <el-table-column prop="endTime" label="缁撴潫鏃堕棿鐐�" min-width="100px"></el-table-column> - <el-table-column prop="processStatus" label="鎵ц杩涘害 0寰呭紑濮� 1杩涜涓� 2瓒呮湡 3宸插畬鎴�" min-width="100px"></el-table-column> - <el-table-column - v-if="containPermissions(['business:ywpatrolscheme:update', 'business:ywpatrolscheme:delete'])" - label="鎿嶄綔" - min-width="120" - fixed="right" - > + + <el-table-column prop="title" label="璁″垝鍚嶇О" min-width="100px"></el-table-column> + <el-table-column prop="lineId" label="璁″垝缂栧彿" min-width="100px"></el-table-column> + <el-table-column prop="dealDate" label="璐熻矗浜哄憳" min-width="100px"></el-table-column> + + <el-table-column prop="startDate" label="璁″垝鏃ユ湡" min-width="100px"> + <template v-slot="scope"> + <span>{{ scope.row.startDate }} - {{ scope.row.endDate }}</span> + </template> + </el-table-column> + <el-table-column prop="startDate" label="鎵ц鏃堕棿" min-width="100px"> + <template v-slot="scope"> + <span>{{ scope.row.startTime }} - {{ scope.row.endTime }}</span> + </template> + </el-table-column> + <el-table-column prop="" label="鍒涘缓浜�" min-width="100px"></el-table-column> + <el-table-column prop="" label="鎵ц缁撴灉" min-width="100px"></el-table-column> + <el-table-column label="鐘舵��" min-width="100px"> + <template v-slot="scope"> + <el-switch v-model="scope.row.status" @change="changeStatus" active-value="0" inactive-value="1"> + </el-switch> + </template> + </el-table-column> + <el-table-column v-if="containPermissions(['business:ywpatrolscheme:update', 'business:ywpatrolscheme:delete'])" + label="鎿嶄綔" min-width="120" fixed="right"> <template slot-scope="{row}"> - <el-button type="text" @click="$refs.operaYwPatrolSchemeWindow.open('缂栬緫宸℃璁″垝', row)" icon="el-icon-edit" v-permissions="['business:ywpatrolscheme:update']">缂栬緫</el-button> - <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:ywpatrolscheme:delete']">鍒犻櫎</el-button> + <el-button type="text" @click="$refs.operaYwPatrolSchemeWindow.open('缂栬緫宸℃璁″垝', row)" icon="el-icon-edit" + v-permissions="['business:ywpatrolscheme:update']">缂栬緫</el-button> + <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" + v-permissions="['business:ywpatrolscheme:delete']">鍒犻櫎</el-button> </template> </el-table-column> </el-table> - <pagination - @size-change="handleSizeChange" - @current-change="handlePageChange" - :pagination="tableData.pagination" - > + <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination"> </pagination> </template> <!-- 鏂板缓/淇敼 --> - <OperaYwPatrolSchemeWindow ref="operaYwPatrolSchemeWindow" @success="handlePageChange"/> + <OperaYwPatrolSchemeWindow ref="operaYwPatrolSchemeWindow" @success="handlePageChange" /> </TableLayout> </template> @@ -77,7 +81,7 @@ name: 'YwPatrolScheme', extends: BaseTable, components: { TableLayout, Pagination, OperaYwPatrolSchemeWindow }, - data () { + data() { return { // 鎼滅储 searchForm: { @@ -106,7 +110,7 @@ } } }, - created () { + created() { this.config({ module: '杩愮淮宸℃璁″垝淇℃伅琛�', api: '/Inspection/ywPatrolScheme', @@ -114,6 +118,17 @@ 'field.main': 'id' }) this.search() + }, + methods: { + editClick(row) { + if (row && row.id) { + this.$refs.operaYwPatrolSchemeWindow.open('缂栬緫宸℃璁″垝') + } else { + this.$refs.operaYwPatrolSchemeWindow.open('鏂板缓宸℃璁″垝') + } + this.$refs.operaYwPatrolSchemeWindow.initData() + + }, } } </script> diff --git a/admin/src/views/Inspection/task.vue b/admin/src/views/Inspection/task.vue index 9544842..99b3ea0 100644 --- a/admin/src/views/Inspection/task.vue +++ b/admin/src/views/Inspection/task.vue @@ -2,15 +2,17 @@ <TableLayout :permissions="['business:ywpatroltask:query']"> <!-- 鎼滅储琛ㄥ崟 --> <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> - - <el-form-item label="鏍囬" prop="title"> - <el-input v-model="searchForm.title" placeholder="璇疯緭鍏ユ爣棰�" @keypress.enter.native="search"></el-input> + <el-form-item label="璁″垝鍚嶇О" prop="title"> + <el-input v-model="searchForm.title" placeholder="璇疯緭鍏ヨ鍒掑悕绉�" @keypress.enter.native="search"></el-input> </el-form-item> - <el-form-item label="寮�濮嬫棩鏈�" prop="startDate"> - <el-date-picker v-model="searchForm.startDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ紑濮嬫棩鏈�" @change="search"/> - </el-form-item> - <el-form-item label="缁撴潫鏃ユ湡" prop="endDate"> - <el-date-picker v-model="searchForm.endDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ョ粨鏉熸棩鏈�" @change="search"/> + <el-form-item > + <el-select v-model="searchForm.status" filterable clearable> + <el-option value="0" label="寰呭紑濮�"></el-option> + <el-option value="1" label="杩涜涓�"></el-option> + <el-option value="2" label="宸茶秴鏈�"></el-option> + <el-option value="3" label="宸插畬鎴�"></el-option> + <el-option value="4" label="宸插彇娑�"></el-option> + </el-select> </el-form-item> <section> <el-button type="primary" @click="search">鎼滅储</el-button> @@ -20,10 +22,6 @@ </el-form> <!-- 琛ㄦ牸鍜屽垎椤� --> <template v-slot:table-wrap> - <ul class="toolbar" v-permissions="['business:ywpatroltask:create', 'business:ywpatroltask:delete']"> - <li><el-button type="primary" @click="$refs.operaYwPatrolTaskWindow.open('鏂板缓宸℃浠诲姟')" icon="el-icon-plus" v-permissions="['business:ywpatroltask:create']">鏂板缓</el-button></li> - <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:ywpatroltask:delete']">鍒犻櫎</el-button></li> - </ul> <el-table v-loading="isWorking.search" :data="tableData.list" @@ -31,16 +29,25 @@ @selection-change="handleSelectionChange" > <el-table-column type="selection" width="55"></el-table-column> - <el-table-column prop="title" label="鏍囬" min-width="100px"></el-table-column> - <el-table-column prop="status" label="鐘舵�� 0寰呭紑濮� 1杩涜涓� 2宸茶秴鏈� 3宸插畬鎴� 4宸插彇娑�" min-width="100px"></el-table-column> - <el-table-column prop="schemeId" label="宸℃璁″垝缂栫爜(鍏宠仈yw_patrol_scheme)" min-width="100px"></el-table-column> - - <el-table-column prop="dealUserId" label="澶勭悊浜虹紪鐮�(鍏宠仈system_user)" min-width="100px"></el-table-column> - <el-table-column prop="dealDate" label="澶勭悊鏃堕棿" min-width="100px"></el-table-column> - <el-table-column prop="dealInfo" label="澶勭悊澶囨敞" min-width="100px"></el-table-column> - <el-table-column prop="startDate" label="寮�濮嬫棩鏈�" min-width="100px"></el-table-column> - <el-table-column prop="endDate" label="缁撴潫鏃ユ湡" min-width="100px"></el-table-column> - <el-table-column prop="dealStatus" label="宸℃缁撴灉 0姝e父 1寮傚父" min-width="100px"></el-table-column> + <el-table-column prop="planTitle" label="璁″垝鍚嶇О" min-width="100px"></el-table-column> + <el-table-column prop="schemeId" label="璁″垝缂栧彿" min-width="100px"></el-table-column> + <el-table-column prop="code" label="浠诲姟缂栧彿" min-width="100px"></el-table-column> + <el-table-column prop="dealDate" label="浠诲姟鏃堕棿" min-width="100px"> + <template v-slot="scope"> + <span>{{ scope.row.startDate }} {{ scope.row.endDate }}</span> + </template> + </el-table-column> + <el-table-column prop="dealDate" label="瀹為檯瀹屾垚鏃堕棿" min-width="100px"></el-table-column> + <el-table-column prop="userName" label="鎵ц浜�" min-width="100px"></el-table-column> + <el-table-column prop="dealStatus" label="浠诲姟鐘舵��" min-width="100px"> + <template v-slot="scope"> + <span class="primaryColor" v-if="scope.row.status == 0">寰呭紑濮�</span> + <span class="green" v-if="scope.row.status == 1">杩涜涓�</span> + <span class="red" v-if="scope.row.status == 2">宸茶秴鏈�</span> + <span class="gray" v-if="scope.row.status == 3">宸插畬鎴�</span> + <span class="gray" v-if="scope.row.status == 4">宸插彇娑�</span> + </template> + </el-table-column> <el-table-column v-if="containPermissions(['business:ywpatroltask:update', 'business:ywpatroltask:delete'])" label="鎿嶄綔" @@ -48,8 +55,7 @@ fixed="right" > <template slot-scope="{row}"> - <el-button type="text" @click="$refs.operaYwPatrolTaskWindow.open('缂栬緫宸℃浠诲姟', row)" icon="el-icon-edit" v-permissions="['business:ywpatroltask:update']">缂栬緫</el-button> - <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:ywpatroltask:delete']">鍒犻櫎</el-button> + <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:ywpatroltask:delete']">鍙栨秷</el-button> </template> </el-table-column> </el-table> @@ -60,7 +66,8 @@ > </pagination> </template> - + <!-- --> + <TaskDetail ref="TaskDetailRef" /> </TableLayout> </template> @@ -68,33 +75,17 @@ import BaseTable from '@/components/base/BaseTable' import TableLayout from '@/layouts/TableLayout' import Pagination from '@/components/common/Pagination' +import TaskDetail from './components/taskDetail' export default { name: 'YwPatrolTask', extends: BaseTable, - components: { TableLayout, Pagination }, + components: { TableLayout, Pagination, TaskDetail }, data () { return { // 鎼滅储 searchForm: { - id: '', - creator: '', - createDate: '', - editor: '', - editDate: '', - isdeleted: '', - title: '', - remark: '', - status: '', - sortnum: '', - schemeId: '', - pointId: '', - dealUserId: '', - dealDate: '', - dealInfo: '', - circleType: '', - startDate: '', - endDate: '', - dealStatus: '' + title:'', + status: '' } } }, @@ -106,6 +97,13 @@ 'field.main': 'id' }) this.search() + }, + methods: { + handleDetail(row) { + this.$refs.TaskDetailRef.isShowModal = true + this.$refs.TaskDetailRef.id = row.id + this.$refs.TaskDetailRef.getDetail() + }, } } </script> diff --git a/admin/src/views/client/staffList.vue b/admin/src/views/client/staffList.vue index 05d7c12..3012931 100644 --- a/admin/src/views/client/staffList.vue +++ b/admin/src/views/client/staffList.vue @@ -5,6 +5,9 @@ <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 prop="name"> + <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ヤ汉鍛樺鍚�/鎵嬫満鍙�" @keypress.enter.native="search"></el-input> + </el-form-item> <section> <el-button type="primary" @click="search">鎼滅储</el-button> <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywcustomer:exportExcel']" @@ -21,10 +24,11 @@ v-permissions="['business:ywcustomer: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="memberName" label="鑱旂郴浜�" min-width="100px"></el-table-column> <el-table-column prop="phone" label="鑱旂郴鐢佃瘽" min-width="100px"></el-table-column> + <el-table-column prop="" label="韬唤" min-width="100px"></el-table-column> + <el-table-column prop="" label="鐘舵��" min-width="100px"></el-table-column> <el-table-column v-if="containPermissions(['business:ywcustomer:update', 'business:ywcustomer:delete'])" label="鎿嶄綔" min-width="120" fixed="right"> <template slot-scope="{row}"> diff --git a/admin/src/views/contract/components/config.js b/admin/src/views/contract/components/config.js new file mode 100644 index 0000000..7d3be5d --- /dev/null +++ b/admin/src/views/contract/components/config.js @@ -0,0 +1,3 @@ +export const rules = { + name: [{ required: true, message: '璇疯緭鍏�' }] +} \ No newline at end of file diff --git a/admin/src/views/contract/components/contractDetail.vue b/admin/src/views/contract/components/contractDetail.vue new file mode 100644 index 0000000..f8504a5 --- /dev/null +++ b/admin/src/views/contract/components/contractDetail.vue @@ -0,0 +1,226 @@ +<template> + <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @close="close" + @confirm="confirm"> + <div class="home_title"> + <div class="left"> + <span class="mr10">鍗曚綅鍚嶇О锛歺xx</span> + <span class="status">status</span> + </div> + <el-button plain type="danger">閫�绉�</el-button> + </div> + <div class="remark">鍚堝悓鎽樿锛歺xxx</div> + <div class="tabs"> + <div class="tab" :class="{ active: activeTabs == 0 }" @click="tabsClick(0)">鍚堝悓淇℃伅</div> + <div class="tab" :class="{ active: activeTabs == 1 }" @click="tabsClick(1)">鍏宠仈璐﹀崟</div> + <div class="tab" :class="{ active: activeTabs == 2 }" @click="tabsClick(2)">鎿嶄綔璁板綍</div> + </div> + <div class="main"> + <div class="title">鍩虹淇℃伅</div> + <div class="list"> + <div class="item"> + <div class="la">鍚堝悓缂栧彿</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">缁忓姙浜�</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">鍒涘缓浜�</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">鍚堝悓绉熻祦鏁�</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">鎵�灞炲叕鍙�</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">绛捐鏃ユ湡</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">寮�濮嬫棩鏈�</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">缁撴潫鏃ユ湡</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">鎵�灞為」鐩�</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">缁撴灉鍙栨暣(鍥涜垗浜斿叆)</div> + <div class="val">{{ info.aaa }}</div> + </div> + </div> + <div class="title">鎴挎簮淇℃伅</div> + <div class="list"> + <div class="item"> + <div class="la">椤圭洰鍚嶇О</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">妤煎畤鍚嶇О</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">妤煎眰/鎴垮彿</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">闈㈢Н</div> + <div class="val">{{ info.aaa }}</div> + </div> + </div> + <div class="title">绉熷淇℃伅</div> + <div class="list"> + <div class="item"> + <div class="la">绉熷</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">缁忓姙浜�</div> + <div class="val">{{ info.aaa }}</div> + </div> + </div> + <div class="title">绉熻祦鏉℃</div> + <div class="list"> + <div class="item"> + <div class="la">鎶奸噾閲戦</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">浠樻鏂瑰紡</div> + <div class="val">{{ info.aaa }}</div> + </div> + <div class="item"> + <div class="la">鍏嶇鏈�</div> + <div class="val">{{ info.aaa }}</div> + </div> + </div> + <el-table :data="info.list" stripe> + <el-table-column prop="" label="寮�濮嬫棩鏈�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="缁撴潫鏃ユ湡" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="鍚堝悓鍗曚环" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="浠樻鎻愬墠澶╂暟" min-width="100" show-overflow-tooltip /> + </el-table> + </div> + </GlobalWindow> +</template> + +<script> +import GlobalWindow from '@/components/common/GlobalWindow' +import BaseOpera from '@/components/base/BaseOpera' +export default { + components: { + GlobalWindow + }, + extends: BaseOpera, + data() { + return { + id: '', + visible: false, + activeTabs: '', + info: {} + } + }, + methods: { + tabsClick(val) { + this.activeTabs = val + }, + getDetail() { + + } + } +} +</script> + +<style lang="scss" scoped> +@import '@/assets/style/variables.scss'; +.home_title { + display: flex; + justify-content: space-between; + align-items: center; + + .left { + font-weight: 500; + font-size: 16px; + margin-right: 10px; + display: flex; + align-items: center; + + .status { + padding: 0 6px; + height: 22px; + line-height: 22px; + border-radius: 2px; + border: 1px solid #00BA92; + color: #00BA92; + font-weight: 400; + font-size: 12px; + color: #00BA92; + } + } +} + +.remark { + background: #E8EBF7; + border-radius: 2px; + padding: 10px 20px; + font-size: 16px; + margin: 20px 0 +} + +.tabs { + border-bottom: 1px solid #DFE2E8; + display: flex; + margin-bottom: 20px; + .tab { + height: 58px; + line-height: 58px; + font-size: 16px; + color: #666666; + margin-right: 30px; + cursor: pointer; + } + + .active { + font-weight: 500; + color: $primary-color; + border-bottom: 2px solid $primary-color; + } +} + +.main { + .title { + font-weight: 500; + font-size: 18px; + color: $primary-color; + margin-bottom: 15px; + } + + .list { + display: flex; + flex-wrap: wrap; + background: #F7F7F7; + border-radius: 2px; + padding: 15px 20px; + margin-bottom: 20px; + + .item { + width: 25%; + margin-bottom: 16px; + + .la { + color: #7f7f7f; + margin-top: 2px; + } + } + } +} +</style> diff --git a/admin/src/views/contract/components/contractEdit.vue b/admin/src/views/contract/components/contractEdit.vue new file mode 100644 index 0000000..8e79bce --- /dev/null +++ b/admin/src/views/contract/components/contractEdit.vue @@ -0,0 +1,376 @@ +<template> + <GlobalWindow width="1000px" :title="title" :visible.sync="showModal" :confirm-working="isWorking" @close="close" @confirm="confirm"> + <div class="tabs"> + <div class="tab" :class="{ active: activeTabs == 0 }" @click="tabsClick(0)">1銆佸熀鏈俊鎭�</div> + <div class="tab" :class="{ active: activeTabs == 1 }" @click="tabsClick(1)">2銆佽垂鐢ㄦ潯娆�</div> + </div> + <template v-if="activeTabs == 0"> + <div class="main"> + <div class="main_content"> + <el-form :model="param" ref="paramRef" :rules="rules"> + <div class="m_title">鍩虹淇℃伅</div> + <div class="list"> + <el-form-item label="鍚堝悓绫诲瀷" prop="type"> + <el-select v-model="param.type" placeholder="璇烽�夋嫨" clearable> + <el-option v-for="item in types" :value="item.value" :label="item.name"></el-option> + </el-select> + </el-form-item> + <el-form-item label="鍚堝悓缂栧彿" prop="code"> + <el-input v-model="param.code" placeholder="璇疯緭鍏ュ悎鍚岀紪鍙�" v-trim /> + </el-form-item> + <el-form-item label="缁忓姙浜�" prop="aaa"> + <el-select v-model="param.aaa" placeholder="璇烽�夋嫨" clearable> + <el-option v-for="item in agentList" :value="item.id" :label="item.name"></el-option> + </el-select> + </el-form-item> + <el-form-item label="鍚堝悓绛捐鏃ユ湡" prop=""> + <el-date-picker type="date" v-model="param.getDate" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> + </el-form-item> + <el-form-item label="鍚堝悓寮�濮嬫棩鏈�" prop=""> + <el-date-picker type="date" v-model="param.getDate" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> + </el-form-item> + <el-form-item label="鍚堝悓缁撴潫鏃ユ湡" prop=""> + <el-date-picker type="date" v-model="param.getDate" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> + </el-form-item> + <el-form-item label="褰掑睘椤圭洰" prop=""> + <el-select v-model="param.aaa" placeholder="璇烽�夋嫨" clearable> + <el-option v-for="item in projectList" :value="item.id" :label="item.name"></el-option> + </el-select> + </el-form-item> + <el-form-item label="缁撴灉鍙栨暣(鍥涜垗浜斿叆)" prop=""> + <el-select v-model="param.aaa" placeholder="璇烽�夋嫨" clearable> + <el-option :value="0" label="鍚�"></el-option> + <el-option :value="1" label="鏄�"></el-option> + </el-select> + </el-form-item> + <el-form-item label="鎵�灞炲叕鍙�" prop=""> + <el-select v-model="param.aaa" placeholder="璇烽�夋嫨" clearable> + <el-option v-for="item in comparyList" :value="item.id" :label="item.name"></el-option> + </el-select> + </el-form-item> + </div> + <div class="m_title">绉熷淇℃伅</div> + <div class="list"> + <el-form-item label="绉熷" prop=""> + <el-button @click="handleRent" type="primary">閫夋嫨绉熷</el-button> + <el-select v-model="param.aaa" placeholder="璇烽�夋嫨" clearable> + <el-option v-for="item in renterList" :value="item.id" :label="item.name"></el-option> + </el-select> + </el-form-item> + <el-form-item label="鑱旂郴浜�" prop=""> + <el-select v-model="param.aaa" placeholder="璇烽�夋嫨" clearable> + <el-option v-for="item in contacts" :value="item.id" :label="item.name"></el-option> + </el-select> + </el-form-item> + </div> + </el-form> + </div> + <div class="main_house"> + <div class="title">璇烽�夋嫨鎴挎簮</div> + <el-cascader style="width: 300px" v-model="value" @change="houseChange" :options="options" + :props="{ multiple: true }" collapse-tags clearable /> + </div> + </div> + <div class="file_wrap"> + <div class="head"> + <div>鍚堝悓闄勪欢</div> + <el-button icon="el-icon-plus" plain>娣诲姞闄勪欢</el-button> + </div> + <el-table :data="param.list" stripe> + <el-table-column prop="" label="闄勪欢鍚嶇О" align="center" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="鎿嶄綔浜�" align="center" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="鎿嶄綔鏃堕棿" align="center" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="鎿嶄綔" align="center" min-width="100"> + <template v-slot="scope"> + <span class="cu red">鍒犻櫎</span> + </template> + </el-table-column> + </el-table> + </div> + </template> + <template v-if="activeTabs == 1"> + <div class="tabs cost_tabs"> + <div class="tab" :class="{ active: cactiveTabs == 0 }" @click="ctabsClick(0)">绉熻祦鏉℃</div> + <div class="tab" :class="{ active: cactiveTabs == 1 }" @click="ctabsClick(1)">鐗╀笟鏉℃</div> + </div> + <div class="main"> + <div class="main_content"> + <el-form :model="paramCost" ref="paramCostRef" :rules="rules"> + <div class="m_title">绉熻祦淇℃伅</div> + <div class="list"> + <el-form-item label="鎶奸噾閲戦(鍏�)" prop="type"> + <el-input v-model="paramCost.code" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="浠樻鏂瑰紡" prop="code"> + <el-select v-model="paramCost.type" placeholder="璇烽�夋嫨" clearable> + <el-option v-for="item in payMethods" :value="item.value" :label="item.name"></el-option> + </el-select> + </el-form-item> + <el-form-item label="鍏嶇鏈�" prop="aaa"> + <el-date-picker type="daterange" v-model="paramCost.getDate" value-format="yyyy-MM-dd" + placeholder="璇烽�夋嫨" /> + </el-form-item> + </div> + <div class="m_title">绉熻祦鏉℃</div> + <div class="list"> + <el-form-item label="璧峰鏃ユ湡" prop=""> + <el-date-picker type="date" v-model="paramCost.getDate" value-format="yyyy-MM-dd" placeholder="璇烽�夋嫨" /> + </el-form-item> + <el-form-item label="鍚堝悓鍗曚环" prop=""> + <el-input placeholder="璇疯緭鍏ュ唴瀹�" v-model="paramCost.aaa"> + <el-select v-model="paramCost.ddd" slot="append" placeholder="璇烽�夋嫨" clearable> + <el-option v-for="item in unitOps" :value="item.value" :label="item.name"></el-option> + </el-select> + </el-input> + </el-form-item> + <el-form-item label="浠樻鎻愬墠澶╂暟" prop=""> + <el-input v-model="paramCost.aaa" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + </div> + </el-form> + </div> + </div> + <el-button style="width: 100%;height: 48px;" type="primary" plain>鐢熸垚璐﹀崟鏄庣粏</el-button> + <el-table :data="paramCost.list" class="mt20" stripe> + <el-table-column prop="" label="璐圭敤绫诲瀷" align="center" width="160px" show-overflow-tooltip /> + <el-table-column prop="" label="鎸囨暟"align="center" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="鍖洪棿" align="center" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="浠樻鏃�" align="center" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="搴旀敹" align="center" min-width="100" show-overflow-tooltip /> + </el-table> + <div class="total"> + <span>鎬昏</span> + <div>璐圭敤搴旀敹鎬昏锛氾紝鎶奸噾搴旀敹鎬昏锛�</div> + </div> + </template> + <!-- --> + <MemberSearch ref="MemberSearchRef" /> + </GlobalWindow> +</template> + +<script> +import GlobalWindow from '@/components/common/GlobalWindow' +import BaseOpera from '@/components/base/BaseOpera' +import MemberSearch from '@/components/common/MemberSearch' +import { rules } from './config' +export default { + components: { + GlobalWindow, + MemberSearch + }, + extends: BaseOpera, + data() { + return { + showModal: false, + title: '鍒涘缓鍚堝悓', + activeTabs: '0', + param: {}, + rules, + + types: [ + { name: '鐗╀笟+绉熻祦鍚堝悓', value: 0 }, + { name: '绉熻祦鍚堝悓', value: 1 }, + { name: '鐗╀笟鍚堝悓', value: 2 }, + ], + agentList: [], //缁忓姙浜� + projectList: [], + comparyList: [], // 鍏徃 + renterList: [], // 绉熷 + contacts: [], // 鑱旂郴浜� + value: [], + options: [ + { + value: 1, + label: '涓滃崡', + children: [{ + value: 2, + label: '涓婃捣', + children: [ + { value: 3, label: '鏅檧' }, + { value: 4, label: '榛勫煍' }, + { value: 5, label: '寰愭眹' } + ] + }, { + value: 7, + label: '姹熻嫃', + children: [ + { value: 8, label: '鍗椾含' }, + { value: 9, label: '鑻忓窞' }, + { value: 10, label: '鏃犻敗' } + ] + }, { + value: 12, + label: '娴欐睙', + children: [ + { value: 13, label: '鏉窞' }, + { value: 14, label: '瀹佹尝' }, + { value: 15, label: '鍢夊叴' } + ] + }] + }, + { + value: 17, + label: '瑗垮寳', + children: [{ + value: 18, + label: '闄曡タ', + children: [ + { value: 19, label: '瑗垮畨' }, + { value: 20, label: '寤跺畨' } + ] + }, { + value: 21, + label: '鏂扮枂缁村惥灏旀棌鑷不鍖�', + children: [ + { value: 22, label: '涔岄瞾鏈ㄩ綈' }, + { value: 23, label: '鍏嬫媺鐜涗緷' } + ] + }] + } + ], + cactiveTabs: 0, + paramCost: {}, + payMethods: [ + { name: '涓�娆℃�т粯娆�', value: 0 }, + { name: '3涓湀涓�浠�', value: 1 }, + { name: '6涓湀涓�浠�', value: 2 }, + { name: '1骞翠竴浠�', value: 2 }, + ], + unitOps: [ + { name: '鍏�/m虏路澶�', value: 0 }, + { name: '鍏�/m虏路鏈�', value: 1 }, + { name: '鍏�/澶�', value: 2 }, + { name: '鍏�/鏈�', value: 3 }, + { name: '鍏�/骞�', value: 4 }, + { name: '鍏�/m虏路骞�', value: 5 }, + { name: '鍏�/鍦�', value: 6 }, + ], + } + }, + methods: { + tabsClick(val) { + this.activeTabs = val + }, + ctabsClick(val) { + this.cactiveTabs = val + }, + getDetail() { + + }, + handleRent() { + this.$refs.MemberSearchRef.openModal() + }, + houseChange(e) { + console.log(e) + console.log(this.value) + + }, + close() { + this.showModal = false + this.$emit('close') + } + } +} +</script> + +<style lang="scss" scoped> +@import '@/assets/style/variables.scss'; + +.tabs { + border-bottom: 1px solid #DFE2E8; + display: flex; + margin-bottom: 20px; + display: flex; + justify-content: center; + + .tab { + height: 58px; + line-height: 58px; + font-size: 16px; + color: #666666; + margin: 0 30px; + cursor: pointer; + } + + .active { + font-weight: 500; + color: $primary-color; + border-bottom: 2px solid $primary-color; + } +} + +.cost_tabs { + justify-content: flex-start; + border: none; + + .tab { + height: 36px; + line-height: 36px; + font-size: 14px; + } +} + +.main { + display: flex; + margin-bottom: 20px; + + .main_content { + flex: 1; + margin-right: 20px; + + .list { + display: flex; + flex-wrap: wrap; + + .el-form-item { + width: 33.33%; + box-sizing: border-box; + padding: 0 12px; + } + } + } + + .main_house { + width: 420px; + padding: 24px 12px; + border: 1px solid #c3c6cd; + border-radius: 2px; + + .title { + font-size: 16px; + font-weight: 500; + margin-bottom: 30px; + } + } + +} +.total{ + display: flex; + justify-content: space-between; + align-items: center; + height: 32px; + background-color: #e7e9f5; + span{ + width: 160px; + text-align: center; + } +} +.file_wrap { + padding: 20px 16px; + border: 1px solid #c3c6cd; + border-radius: 2px; + + .head { + display: flex; + justify-content: space-between; + align-items: center; + } +} + +.m_title { + font-weight: 500; + font-size: 14px; + margin-bottom: 15px; + margin-top: 10px; +} +</style> diff --git a/admin/src/views/contract/contractList.vue b/admin/src/views/contract/contractList.vue index e69de29..1309081 100644 --- a/admin/src/views/contract/contractList.vue +++ b/admin/src/views/contract/contractList.vue @@ -0,0 +1,147 @@ +<template> + <div class="main_app"> + <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear"> + <template #btns> + <el-button>瀵煎嚭</el-button> + </template> + </QueryForm> + <div class="mt10"> + <el-button @click="handleEdit()" icon="el-icon-plus" type="primary">鏂板缓</el-button> + </div> + <el-table v-loading="loading" :data="list" stripe> + <el-table-column prop="" label="瀹㈡埛鍚嶇О" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="寮�濮嬫棩鏈�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="缁撴潫鏃ユ湡" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="绉熻祦鍗曚环" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="绉熻祦闈㈢Н" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="绛捐鏃�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="鍚堝悓缂栧彿" min-width="100" show-overflow-tooltip /> + + <el-table-column prop="" label="鍚堝悓鐘舵��" min-width="100" show-overflow-tooltip> + <template v-slot="scope"> + <span class="primaryColor">寰呮墽琛�</span> + <span class="green">姝e父鎵ц涓�</span> + <span class="gary">宸查��绉�</span> + </template> + </el-table-column> + <el-table-column prop="" label="鎿嶄綔" min-width="100" show-overflow-tooltip> + <template v-slot="scope"> + <span class="primaryColor cu" @click="handleDetail(scope.row)">鏌ョ湅璇︽儏</span> + </template> + </el-table-column> + </el-table> + <div class="mt20"> + <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> + </div> + <ContractDetail ref="ContractDetailRef" /> + <ContractEdit ref="ContractEditRef" v-if="showEdit" /> + </div> +</template> + +<script> +import Pagination from '@/components/common/Pagination' +import QueryForm from '@/components/common/QueryForm' +import ContractDetail from './components/contractDetail' +import ContractEdit from './components/contractEdit.vue' +import dayjs from 'dayjs' +import duration from 'dayjs/plugin/duration' +dayjs.extend(duration) +import { platformLogPage, getPlatformGroupList } from '@/api' +export default { + components: { + Pagination, + QueryForm, + ContractEdit, + ContractDetail + }, + data() { + return { + showEdit: false, + loading: false, + pagination: { + pageSize: 10, + page: 1, + total: 0 + }, + filters: {}, + list: [], + total: 0, + queryFormConfig: { + formItems: [ + { + filed: 'name', + type: 'input', + label: '鍚堝悓鍚嶇О' + }, + { + filed: 'selDate', + type: 'datetimerange', + placeholder: '搴斿紑濮嬫椂闂�' + } + ], + online: true + } + } + }, + created() { + // this.getList() + // this.getGroupList() + }, + methods: { + handleEdit(row) { + this.showEdit = true + this.$nextTick(() => { + this.$refs.ContractEditRef.showModal = true + }) + if(row && row.id){ + + }else{ + + } + }, + handleDetail(row) { + this.$refs.ContractDetailRef.visible = true + this.$refs.ContractDetailRef.getDetail(row.id) + }, + + getList(page) { + const { pagination, filters } = this + this.loading = true + platformLogPage({ + model: { + ...filters, + 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: 'param1' }], + 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鑾峰彇' + item.workTime = dayjs.duration(item.param3, 'seconds').format('H鏃秏鍒唖绉�') + }) + this.pagination.total = res.total || 0 + }, () => { + this.loading = false + }) + }, + clear() { + this.filters = {} + this.pagination.pageSize = 10 + this.pagination.page = 1 + this.getList() + }, + handleSizeChange(capacity) { + this.pagination.pageSize = capacity + } + } +} +</script> + +<style> +</> diff --git a/admin/src/views/finance/account.vue b/admin/src/views/finance/account.vue new file mode 100644 index 0000000..3cb9a42 --- /dev/null +++ b/admin/src/views/finance/account.vue @@ -0,0 +1,138 @@ +<template> + <div class="main_app"> + <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> + <div class="mt20"> + <el-button type="primary" @click="handleEdit()" icon="el-icon-plus" + v-permissions="['business:ywpatrolline:create']">鏂板缓</el-button> + </div> + <el-table v-loading="loading" :data="list" stripe> + <el-table-column prop="code" label="鏀舵敮鏉$洰" min-width="100" show-overflow-tooltip /> + <el-table-column prop="name" label="鏀舵鍏徃" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="璐︽埛绫诲瀷" min-width="100" show-overflow-tooltip /> + <el-table-column prop="modelNo" label="璐︽埛鍚嶇О" min-width="100" show-overflow-tooltip /> + <el-table-column prop="realName" label="寮�鎴烽摱琛�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="realName" label="閾惰璐﹀彿" min-width="100" show-overflow-tooltip /> + <el-table-column prop="status" label="鐘舵��" min-width="100" show-overflow-tooltip> + <template v-slot="scope"> + <el-switch v-model="scope.row.status" active-value="0" inactive-value="1"> + </el-switch> + </template> + </el-table-column> + <el-table-column 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> + <div class="mt20"> + <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> + </div> + <Edit v-if="showEdit" ref="EditRef" @success="getList" @close="showEdit = false" /> + </div> +</template> + +<script> +import Pagination from '@/components/common/Pagination' +import QueryForm from '@/components/common/QueryForm' +import Edit from './components/accountEdit.vue' +import { companyGetList, deleteById } from '@/api/business/company' +export default { + components: { + Pagination, + QueryForm, + Edit + }, + data() { + return { + loading: false, + showEdit: false, + pagination: { + pageSize: 10, + page: 1, + total: 0 + }, + filters: {}, + list: [], + total: 0, + queryFormConfig: { + formItems: [ + { + filed: 'name', + type: 'input', + label: '鏀舵敮鏉$洰' + }, + { + filed: 'name', + type: 'select', + label: '鏀舵鍏徃' + }, + ], + online: true + } + } + }, + created() { + this.getList() + }, + methods: { + getList(page) { + const { pagination, filters } = this + this.loading = true + companyGetList({ + model: { + ...filters, + type: 2 + }, + capacity: pagination.pageSize, + page: page || pagination.page, + }).then(res => { + this.loading = false + this.list = res.records || [] + this.list.forEach(item => { + item.stautsName = item.status == 0 ? '姝e父' : item.status == 1 ? '鎹熷潖' : '鎶ュ簾' + }) + this.pagination.total = res.total || 0 + }, () => { + this.loading = false + }) + }, + handleEdit(row) { + this.showEdit = true + this.$nextTick(() => { + this.$refs.EditRef.isShowModal = true + if (row && row.id) { + this.$refs.EditRef.getDetail(row.id) + } + }) + + }, + handleDel(row) { + let message = `纭鍒犻櫎璇ヨ褰曞悧?` + this.$dialog.deleteConfirm(message) + .then(() => { + this.isWorking.delete = true + deleteById(row.id) + .then(() => { + this.$tip.apiSuccess('鍒犻櫎鎴愬姛') + this.getList() + }) + }) + .catch(() => { }) + }, + clear() { + this.filters = {} + this.pagination.pageSize = 10 + this.pagination.page = 1 + this.getList() + }, + handleSizeChange(capacity) { + this.pagination.pageSize = capacity + } + } +} +</script> + +<style></style> diff --git a/admin/src/views/finance/bull.vue b/admin/src/views/finance/bull.vue new file mode 100644 index 0000000..fef662a --- /dev/null +++ b/admin/src/views/finance/bull.vue @@ -0,0 +1,194 @@ +<template> + <div class="main_app"> + <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> + <div class="df_sb mt20"> + <div class="tabs"> + <div class="tab" :class="{ active: activeTabs == 0 }" @click="tabsClick(0)">鏀舵璐﹀崟</div> + <div class="tab" :class="{ active: activeTabs == 1 }" @click="tabsClick(1)">浠樻璐﹀崟</div> + </div> + <div class="btns"> + <el-button type="primary" @click="handleEdit()" icon="el-icon-plus" + v-permissions="['business:ywpatrolline:create']">鏂板缓</el-button> + <el-button @click="handleEx" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button> + </div> + </div> + <el-table v-loading="loading" :data="list" stripe> + <el-table-column prop="" label="杩愮淮浜�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="code" label="璁惧缂栧彿" min-width="100" show-overflow-tooltip /> + <el-table-column prop="name" label="璁惧鍚嶇О" min-width="100" show-overflow-tooltip /> + <el-table-column prop="stautsName" label="璁惧鐘舵��" min-width="100" show-overflow-tooltip /> + <el-table-column prop="remark" label="杩愮淮澶囨敞" min-width="100" show-overflow-tooltip /> + <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="100" show-overflow-tooltip /> + <el-table-column label="鎿嶄綔" min-width="120" fixed="right"> + <template slot-scope="{row}"> + <el-button type="text" @click="handleDetail(row)" icon="el-icon-edit" + v-permissions="['business:category:update']">鏌ョ湅</el-button> + </template> + </el-table-column> + </el-table> + <div class="mt20"> + <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> + </div> + <Edit v-if="showEdit" ref="EditRef" @success="getList" @close="showEdit = false" /> + </div> +</template> + +<script> +import Pagination from '@/components/common/Pagination' +import QueryForm from '@/components/common/QueryForm' +import Edit from './components/deviceEdit.vue' +import { fetchList, deleteById } from '@/api/Inspection/device' +export default { + components: { + Pagination, + QueryForm, + Edit + }, + data() { + return { + loading: false, + showEdit: false, + pagination: { + pageSize: 10, + page: 1, + total: 0 + }, + activeTabs: 0, + filters: {}, + list: [], + total: 0, + statusMap: [ + { value: 0, label: '寰呮敹娆�' }, + { value: 1, label: '宸茬粨绠�' }, + { value: 2, label: '閮ㄥ垎缁撴竻' }, + { value: 3, label: '寰呴��娆�' }, + { value: 4, label: '寰呬粯娆�' }, + ], + queryFormConfig: { + formItems: [ + { + filed: 'name', + type: 'input', + label: '瀹㈡埛鍚嶇О', + }, + { + filed: 'status', + type: 'select', + label: '璐﹀崟鐘舵��', + options: [ + { value: '0', label: '寮�鍚�' }, + { value: '1', label: '鍏抽棴' }, + ] + }, + { + filed: 'status', + type: 'select', + label: '缁撴竻鐘舵��', + options: this.statusMap + }, + { + filed: 'selDate', + type: 'daterange', + label: '搴旀敹/浠樻棩鏈�' + }, + ], + online: true + } + } + }, + created() { + this.getList() + }, + methods: { + getList(page) { + const { pagination, filters } = this + this.loading = true + fetchList({ + model: { + ...filters, + }, + capacity: pagination.pageSize, + page: page || pagination.page, + }).then(res => { + this.loading = false + this.list = res.records || [] + this.list.forEach(item => { + item.stautsName = item.status == 0 ? '姝e父' : item.status == 1 ? '鎹熷潖' : '鎶ュ簾' + }) + this.pagination.total = res.total || 0 + }, () => { + this.loading = false + }) + }, + handleEx() { + + }, + tabsClick(val) { + this.activeTabs = val + }, + handleEdit(row) { + this.showEdit = true + this.$nextTick(() => { + this.$refs.EditRef.isShowModal = true + if (row && row.id) { + this.$refs.EditRef.getDetail(row.id) + } + }) + + }, + handleDetail() { + + }, + handleDel(row) { + let message = `纭鍒犻櫎璇ヨ褰曞悧?` + this.$dialog.deleteConfirm(message) + .then(() => { + this.isWorking.delete = true + deleteById(row.id) + .then(() => { + this.$tip.apiSuccess('鍒犻櫎鎴愬姛') + this.getList() + }) + }) + .catch(() => { }) + }, + clear() { + this.filters = {} + this.pagination.pageSize = 10 + this.pagination.page = 1 + this.getList() + }, + handleSizeChange(capacity) { + this.pagination.pageSize = capacity + this.getList() + } + } +} +</script> + +<style lang="scss" scoped> +@import '@/assets/style/variables.scss'; + +.tabs { + border-bottom: 1px solid #DFE2E8; + display: flex; + margin-bottom: 20px; + display: flex; + justify-content: center; + + .tab { + height: 58px; + line-height: 58px; + font-size: 16px; + color: #666666; + margin: 0 30px; + cursor: pointer; + } + + .active { + font-weight: 500; + color: $primary-color; + border-bottom: 2px solid $primary-color; + } +} +</style> diff --git a/admin/src/views/finance/company.vue b/admin/src/views/finance/company.vue new file mode 100644 index 0000000..6397411 --- /dev/null +++ b/admin/src/views/finance/company.vue @@ -0,0 +1,132 @@ +<template> + <div class="main_app"> + <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> + <div class="mt20"> + <el-button type="primary" @click="handleEdit()" icon="el-icon-plus" + v-permissions="['business:ywpatrolline:create']">鏂板缓</el-button> + </div> + <el-table v-loading="loading" :data="list" stripe> + <el-table-column prop="code" label="鍏徃鍚嶇О" min-width="100" show-overflow-tooltip /> + <el-table-column prop="name" label="鍏徃绠�浠�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="绾崇◣璇嗗埆鍙�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="modelNo" label="鍏徃鍦板潃" min-width="100" show-overflow-tooltip /> + <el-table-column prop="realName" label="鏀舵敮璐︽埛鏁伴噺" min-width="100" show-overflow-tooltip /> + <el-table-column prop="status" label="鐘舵��" min-width="100" show-overflow-tooltip> + <template v-slot="scope"> + <el-switch v-model="scope.row.status" active-value="0" inactive-value="1"> + </el-switch> + </template> + </el-table-column> + <el-table-column 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> + <div class="mt20"> + <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> + </div> + <Edit v-if="showEdit" ref="EditRef" @success="getList" @close="showEdit = false" /> + </div> +</template> + +<script> +import Pagination from '@/components/common/Pagination' +import QueryForm from '@/components/common/QueryForm' +import Edit from './components/companyEdit.vue' +import { companyGetList, deleteById } from '@/api/business/company' +export default { + components: { + Pagination, + QueryForm, + Edit + }, + data() { + return { + loading: false, + showEdit: false, + pagination: { + pageSize: 10, + page: 1, + total: 0 + }, + filters: {}, + list: [], + total: 0, + queryFormConfig: { + formItems: [ + { + filed: 'name', + type: 'input', + label: '鍏徃鍚嶇О' + }, + ], + online: true + } + } + }, + created() { + this.getList() + }, + methods: { + getList(page) { + const { pagination, filters } = this + this.loading = true + companyGetList({ + model: { + ...filters, + type: 2 + }, + capacity: pagination.pageSize, + page: page || pagination.page, + }).then(res => { + this.loading = false + this.list = res.records || [] + this.list.forEach(item => { + item.stautsName = item.status == 0 ? '姝e父' : item.status == 1 ? '鎹熷潖' : '鎶ュ簾' + }) + this.pagination.total = res.total || 0 + }, () => { + this.loading = false + }) + }, + handleEdit(row) { + this.showEdit = true + this.$nextTick(() => { + this.$refs.EditRef.isShowModal = true + if (row && row.id) { + this.$refs.EditRef.getDetail(row.id) + } + }) + + }, + handleDel(row) { + let message = `纭鍒犻櫎璇ヨ褰曞悧?` + this.$dialog.deleteConfirm(message) + .then(() => { + this.isWorking.delete = true + deleteById(row.id) + .then(() => { + this.$tip.apiSuccess('鍒犻櫎鎴愬姛') + this.getList() + }) + }) + .catch(() => { }) + }, + clear() { + this.filters = {} + this.pagination.pageSize = 10 + this.pagination.page = 1 + this.getList() + }, + handleSizeChange(capacity) { + this.pagination.pageSize = capacity + } + } +} +</script> + +<style></style> diff --git a/admin/src/views/finance/components/accountEdit.vue b/admin/src/views/finance/components/accountEdit.vue new file mode 100644 index 0000000..7a7fae4 --- /dev/null +++ b/admin/src/views/finance/components/accountEdit.vue @@ -0,0 +1,104 @@ +<template> + <GlobalWindow :title="param.id ? '缂栬緫鍏徃' : '鏂板缓鍏徃'" :confirmWorking="subLoading" :visible.sync="isShowModal" + width="600px" @close="close" @confirm="handleSub"> + <el-form :model="param" ref="paramRef" :rules="rules"> + <el-form-item label="鏀舵敮鏉$洰" prop="name"> + <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="鏀舵鍏徃" prop="name"> + <el-select v-model="param.realName" filterable clearable> + <el-option value="0" label="xxx"></el-option> + </el-select> + </el-form-item> + <el-form-item label="鏀舵绫诲瀷" prop="name"> + <el-radio-group v-model="param.radio"> + <el-radio :label="0">瀵瑰叕</el-radio> + <el-radio :label="1">涓汉</el-radio> + </el-radio-group> + </el-form-item> + <el-form-item label="璐︽埛鍚嶇О" prop="desc"> + <el-input v-model="param.desc" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="寮�鎴峰悕绉�"> + <el-input v-model="param.code" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="閾惰璐﹀彿"> + <el-input v-model="param.addr" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="鐘舵��" prop="code"> + <el-switch v-model="param.status" active-value="0" inactive-value="1"> + </el-switch> + </el-form-item> + </el-form> + </GlobalWindow> +</template> + +<script> +import GlobalWindow from '@/components/common/GlobalWindow' +import UploadAvatarImage from '@/components/common/UploadAvatarImage' +import { create, updateById } from '@/api/business/company' +import { Message } from 'element-ui' +export default { + components: { GlobalWindow, UploadAvatarImage }, + data() { + return { + isShowModal: false, + subLoading: false, + param: { + type: 2, + status: '0' + }, + cateList: [], + rules: { + name: [{ required: true, message: '璇疯緭鍏�' }], + desc: [{ required: true, message: '璇疯緭鍏�' }] + }, + + } + }, + created() { + }, + methods: { + handleSub() { + const { param, subLoading } = this + this.$refs['paramRef'].validate((valid) => { + if (valid) { + let fn = param.id ? updateById : create + this.subLoading = true + fn(param).then(res => { + this.subLoading = false + this.$emit('success') + Message.success('淇濆瓨鎴愬姛') + this.close() + }).catch(() => { + this.subLoading = false + }) + } + }) + }, + changeSel(e) { + if (e && e.length == 1) { + this.$set(this.param, 'catePId', e[0]) + this.$set(this.param, 'cateId', '') + } else if (e && e.length == 2) { + this.$set(this.param, 'catePId', e[0]) + this.$set(this.param, 'cateId', e[1]) + } else { + this.$set(this.param, 'catePId', '') + this.$set(this.param, 'cateId', '') + } + this.search() + }, + uploadAvatarSuccess(file) { + this.$set(this.param, 'imgurl', file.imgurl) + this.$set(this.param, 'imgurlfull', file.imgurlfull) + }, + close() { + this.isShowModal = false + this.$emit('close') + } + } +} +</script> + +<style lang="scss" scoped></style> \ No newline at end of file diff --git a/admin/src/views/finance/components/companyEdit.vue b/admin/src/views/finance/components/companyEdit.vue new file mode 100644 index 0000000..6c378a8 --- /dev/null +++ b/admin/src/views/finance/components/companyEdit.vue @@ -0,0 +1,93 @@ +<template> + <GlobalWindow :title="param.id ? '缂栬緫鍏徃' : '鏂板缓鍏徃'" :confirmWorking="subLoading" :visible.sync="isShowModal" + width="600px" @close="close" @confirm="handleSub"> + <el-form :model="param" ref="paramRef" :rules="rules"> + <el-form-item label="鍏徃鍚嶇О" prop="name"> + <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="鍏徃绠�浠�" prop="desc"> + <el-input v-model="param.desc" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="绾崇◣璇嗗埆鍙�"> + <el-input v-model="param.code" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="鑱旂郴鍦板潃"> + <el-input v-model="param.addr" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="鐘舵��" prop="code"> + <el-switch v-model="param.status" active-value="0" inactive-value="1"> + </el-switch> + </el-form-item> + </el-form> + </GlobalWindow> +</template> + +<script> +import GlobalWindow from '@/components/common/GlobalWindow' +import UploadAvatarImage from '@/components/common/UploadAvatarImage' +import { create, updateById } from '@/api/business/company' +import { Message } from 'element-ui' +export default { + components: { GlobalWindow, UploadAvatarImage }, + data() { + return { + isShowModal: false, + subLoading: false, + param: { + type: 2, + status: '0' + }, + cateList: [], + rules: { + name: [{ required: true, message: '璇疯緭鍏�' }], + desc: [{ required: true, message: '璇疯緭鍏�' }] + }, + + } + }, + created() { + }, + methods: { + handleSub() { + const { param, subLoading } = this + this.$refs['paramRef'].validate((valid) => { + if (valid) { + let fn = param.id ? updateById : create + this.subLoading = true + fn(param).then(res => { + this.subLoading = false + this.$emit('success') + Message.success('淇濆瓨鎴愬姛') + this.close() + }).catch(() => { + this.subLoading = false + }) + } + }) + }, + changeSel(e) { + if (e && e.length == 1) { + this.$set(this.param, 'catePId', e[0]) + this.$set(this.param, 'cateId', '') + } else if (e && e.length == 2) { + this.$set(this.param, 'catePId', e[0]) + this.$set(this.param, 'cateId', e[1]) + } else { + this.$set(this.param, 'catePId', '') + this.$set(this.param, 'cateId', '') + } + this.search() + }, + uploadAvatarSuccess(file) { + this.$set(this.param, 'imgurl', file.imgurl) + this.$set(this.param, 'imgurlfull', file.imgurlfull) + }, + close() { + this.isShowModal = false + this.$emit('close') + } + } +} +</script> + +<style lang="scss" scoped></style> \ No newline at end of file diff --git a/admin/src/views/finance/components/deviceEdit.vue b/admin/src/views/finance/components/deviceEdit.vue new file mode 100644 index 0000000..185fbdc --- /dev/null +++ b/admin/src/views/finance/components/deviceEdit.vue @@ -0,0 +1,137 @@ +<template> + <GlobalWindow :title="param.id ? '缂栬緫璁惧' : '鏂板缓璁惧'" :confirmWorking="subLoading" :visible.sync="isShowModal" width="600px" @close="close" + @confirm="handleSub"> + <el-form :model="param" ref="paramRef" :rules="rules"> + <el-form-item label="璁惧缂栫爜" prop="code"> + <el-input v-model="param.code" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="璁惧鍚嶇О" prop="name"> + <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="璁惧鍨嬪彿" prop=""> + <el-input v-model="param.modelNo" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="璁惧鍒嗙被" prop=""> + <el-cascader v-model="param.areaIds" @change="changeSel" placeholder="璇烽�夋嫨宸℃鍖哄煙" clearable :options="cateList" + :props="{ + label: 'name', + value: 'id', + children: 'childCategoryList', + checkStrictly: true + }"></el-cascader> + </el-form-item> + <el-form-item label="璁惧绠$悊鍛�" prop=""> + <el-select v-model="param.realName" filterable clearable> + <el-option value="0" label="xxx"></el-option> + </el-select> + </el-form-item> + <el-form-item label="鎵�鍦ㄤ綅缃�" prop=""> + <el-input v-model="param.addr" placeholder="璇疯緭鍏�" v-trim /> + + </el-form-item> + <el-form-item label="渚涘簲鍟�" prop=""> + <el-input v-model="param.company" placeholder="璇疯緭鍏�" v-trim /> + + </el-form-item> + <el-form-item label="杩愮淮鍐呭" prop=""> + <el-input type="textarea" :rows="4" v-model="param.content" placeholder="璇疯緭鍏�" /> + </el-form-item> + <el-form-item label="璁惧鐘舵��" prop=""> + <el-select v-model="param.status" filterable clearable> + <el-option value="0" label="姝e父"></el-option> + <el-option value="1" label="鎹熷潖"></el-option> + <el-option value="2" label="鎶ュ簾"></el-option> + </el-select> + </el-form-item> + <el-form-item label="鐓х墖" prop=""> + <UploadAvatarImage :file="{ 'imgurlfull': param.imgurlfull, 'imgurl': param.imgurl }" + :uploadData="{ folder: 'projects' }" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false" + @uploadBegin="isUploading = true" /> + </el-form-item> + + + + </el-form> + </GlobalWindow> +</template> + +<script> +import GlobalWindow from '@/components/common/GlobalWindow' +import UploadAvatarImage from '@/components/common/UploadAvatarImage' +import { fetchList } from '@/api/business/category' +import { create, updateById } from '@/api/Inspection/device' +import { Message } from 'element-ui' +export default { + components: { GlobalWindow, UploadAvatarImage }, + data() { + return { + isShowModal: false, + subLoading: false, + param: {}, + cateList: [], + rules: { + name: [{ required: true, message: '璇疯緭鍏�' }], + code: [{ required: true, message: '璇疯緭鍏�' }] + }, + + } + }, + created() { + this.initData() + }, + methods: { + handleSub() { + const { param, subLoading } = this + this.$refs['paramRef'].validate((valid) => { + if (valid) { + let fn = param.id ? updateById : create + this.subLoading = true + fn(param).then(res => { + if (res.code == 200) { + this.subLoading = false + this.$emit('success') + Message.success('淇濆瓨鎴愬姛') + this.close() + } + }).catch(() => { + this.subLoading = false + }) + } + }) + }, + initData() { + fetchList({ + model: { type: 5 }, + capacity: 1000, + page: 1, + }).then(res => { + this.cateList = res.records || [] + }) + + }, + changeSel(e) { + if (e && e.length == 1) { + this.$set(this.param, 'catePId', e[0]) + this.$set(this.param, 'cateId', '') + } else if (e && e.length == 2) { + this.$set(this.param, 'catePId', e[0]) + this.$set(this.param, 'cateId', e[1]) + } else { + this.$set(this.param, 'catePId', '') + this.$set(this.param, 'cateId', '') + } + this.search() + }, + uploadAvatarSuccess(file) { + this.$set(this.param, 'imgurl', file.imgurl) + this.$set(this.param, 'imgurlfull', file.imgurlfull) + }, + close() { + this.isShowModal = false + this.$emit('close') + } + } +} +</script> + +<style lang="scss" scoped></style> \ No newline at end of file diff --git a/admin/src/views/finance/payments.vue b/admin/src/views/finance/payments.vue new file mode 100644 index 0000000..107c3a5 --- /dev/null +++ b/admin/src/views/finance/payments.vue @@ -0,0 +1,137 @@ +<template> + <div class="main_app"> + <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> + <div class="mt20"> + <el-button type="primary" @click="handleEdit()" icon="el-icon-plus" + v-permissions="['business:ywpatrolline:create']">鏂板缓</el-button> + </div> + <el-table v-loading="loading" :data="list" stripe> + <el-table-column prop="code" label="shou" min-width="100" show-overflow-tooltip /> + <el-table-column prop="name" label="鍏徃绠�浠�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="绾崇◣璇嗗埆鍙�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="modelNo" label="鍏徃鍦板潃" min-width="100" show-overflow-tooltip /> + <el-table-column prop="realName" label="鏀舵敮璐︽埛鏁伴噺" min-width="100" show-overflow-tooltip /> + <el-table-column prop="status" label="鐘舵��" min-width="100" show-overflow-tooltip> + <template v-slot="scope"> + <el-switch v-model="scope.row.status" active-value="0" inactive-value="1"> + </el-switch> + </template> + </el-table-column> + <el-table-column 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> + <div class="mt20"> + <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> + </div> + <Edit v-if="showEdit" ref="EditRef" @success="getList" @close="showEdit = false" /> + </div> +</template> + +<script> +import Pagination from '@/components/common/Pagination' +import QueryForm from '@/components/common/QueryForm' +import Edit from './components/companyEdit.vue' +import { companyGetList, deleteById } from '@/api/business/company' +export default { + components: { + Pagination, + QueryForm, + Edit + }, + data() { + return { + loading: false, + showEdit: false, + pagination: { + pageSize: 10, + page: 1, + total: 0 + }, + filters: {}, + list: [], + total: 0, + queryFormConfig: { + formItems: [ + { + filed: 'name', + type: 'input', + label: '鏀舵敮鏉$洰' + }, + { + filed: 'name', + type: 'select', + label: '鏀舵鍏徃' + }, + ], + online: true + } + } + }, + created() { + this.getList() + }, + methods: { + getList(page) { + const { pagination, filters } = this + this.loading = true + companyGetList({ + model: { + ...filters, + type: 2 + }, + capacity: pagination.pageSize, + page: page || pagination.page, + }).then(res => { + this.loading = false + this.list = res.records || [] + this.list.forEach(item => { + item.stautsName = item.status == 0 ? '姝e父' : item.status == 1 ? '鎹熷潖' : '鎶ュ簾' + }) + this.pagination.total = res.total || 0 + }, () => { + this.loading = false + }) + }, + handleEdit(row) { + this.showEdit = true + this.$nextTick(() => { + this.$refs.EditRef.isShowModal = true + if (row && row.id) { + this.$refs.EditRef.getDetail(row.id) + } + }) + + }, + handleDel(row) { + let message = `纭鍒犻櫎璇ヨ褰曞悧?` + this.$dialog.deleteConfirm(message) + .then(() => { + this.isWorking.delete = true + deleteById(row.id) + .then(() => { + this.$tip.apiSuccess('鍒犻櫎鎴愬姛') + this.getList() + }) + }) + .catch(() => { }) + }, + clear() { + this.filters = {} + this.pagination.pageSize = 10 + this.pagination.page = 1 + this.getList() + }, + handleSizeChange(capacity) { + this.pagination.pageSize = capacity + } + } +} +</script> + +<style></style> diff --git a/admin/src/views/operation/category.vue b/admin/src/views/operation/category.vue index e69de29..af61f66 100644 --- a/admin/src/views/operation/category.vue +++ b/admin/src/views/operation/category.vue @@ -0,0 +1,109 @@ +<template> + <TableLayout> + <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> + <li v-permissions="['business:category:exportExcel']"><el-button type="primary" + @click="exportExcel">瀵煎嚭</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="parentName" label="鎵�灞炲垎绫�" min-width="100px"></el-table-column> --> + <el-table-column prop="sortnum" 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.config({ + module: '杞﹁締淇℃伅琛�', + api: '/business/category', + 'field.id': 'id', + 'field.main': 'id' + }) + 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, type: 5 }, + 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/operation/components/OperaCategoryWindow.vue b/admin/src/views/operation/components/OperaCategoryWindow.vue new file mode 100644 index 0000000..a066862 --- /dev/null +++ b/admin/src/views/operation/components/OperaCategoryWindow.vue @@ -0,0 +1,74 @@ +<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="name"> + <el-input v-model="form.name" placeholder="璇疯緭鍏ュ垎绫诲悕绉�" v-trim /> + </el-form-item> + <el-form-item label="鎵�灞炲垎绫�" prop="parentId"> + <el-select :disabled="form.id" 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="sortnum"> + <el-input v-model="form.sortnum" oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 6)" 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: '', + sortnum: '', + type: 5 + }, + // 楠岃瘉瑙勫垯 + 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({ type: 5 }).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/operation/components/deviceEdit.vue b/admin/src/views/operation/components/deviceEdit.vue new file mode 100644 index 0000000..185fbdc --- /dev/null +++ b/admin/src/views/operation/components/deviceEdit.vue @@ -0,0 +1,137 @@ +<template> + <GlobalWindow :title="param.id ? '缂栬緫璁惧' : '鏂板缓璁惧'" :confirmWorking="subLoading" :visible.sync="isShowModal" width="600px" @close="close" + @confirm="handleSub"> + <el-form :model="param" ref="paramRef" :rules="rules"> + <el-form-item label="璁惧缂栫爜" prop="code"> + <el-input v-model="param.code" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="璁惧鍚嶇О" prop="name"> + <el-input v-model="param.name" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="璁惧鍨嬪彿" prop=""> + <el-input v-model="param.modelNo" placeholder="璇疯緭鍏�" v-trim /> + </el-form-item> + <el-form-item label="璁惧鍒嗙被" prop=""> + <el-cascader v-model="param.areaIds" @change="changeSel" placeholder="璇烽�夋嫨宸℃鍖哄煙" clearable :options="cateList" + :props="{ + label: 'name', + value: 'id', + children: 'childCategoryList', + checkStrictly: true + }"></el-cascader> + </el-form-item> + <el-form-item label="璁惧绠$悊鍛�" prop=""> + <el-select v-model="param.realName" filterable clearable> + <el-option value="0" label="xxx"></el-option> + </el-select> + </el-form-item> + <el-form-item label="鎵�鍦ㄤ綅缃�" prop=""> + <el-input v-model="param.addr" placeholder="璇疯緭鍏�" v-trim /> + + </el-form-item> + <el-form-item label="渚涘簲鍟�" prop=""> + <el-input v-model="param.company" placeholder="璇疯緭鍏�" v-trim /> + + </el-form-item> + <el-form-item label="杩愮淮鍐呭" prop=""> + <el-input type="textarea" :rows="4" v-model="param.content" placeholder="璇疯緭鍏�" /> + </el-form-item> + <el-form-item label="璁惧鐘舵��" prop=""> + <el-select v-model="param.status" filterable clearable> + <el-option value="0" label="姝e父"></el-option> + <el-option value="1" label="鎹熷潖"></el-option> + <el-option value="2" label="鎶ュ簾"></el-option> + </el-select> + </el-form-item> + <el-form-item label="鐓х墖" prop=""> + <UploadAvatarImage :file="{ 'imgurlfull': param.imgurlfull, 'imgurl': param.imgurl }" + :uploadData="{ folder: 'projects' }" @uploadSuccess="uploadAvatarSuccess" @uploadEnd="isUploading = false" + @uploadBegin="isUploading = true" /> + </el-form-item> + + + + </el-form> + </GlobalWindow> +</template> + +<script> +import GlobalWindow from '@/components/common/GlobalWindow' +import UploadAvatarImage from '@/components/common/UploadAvatarImage' +import { fetchList } from '@/api/business/category' +import { create, updateById } from '@/api/Inspection/device' +import { Message } from 'element-ui' +export default { + components: { GlobalWindow, UploadAvatarImage }, + data() { + return { + isShowModal: false, + subLoading: false, + param: {}, + cateList: [], + rules: { + name: [{ required: true, message: '璇疯緭鍏�' }], + code: [{ required: true, message: '璇疯緭鍏�' }] + }, + + } + }, + created() { + this.initData() + }, + methods: { + handleSub() { + const { param, subLoading } = this + this.$refs['paramRef'].validate((valid) => { + if (valid) { + let fn = param.id ? updateById : create + this.subLoading = true + fn(param).then(res => { + if (res.code == 200) { + this.subLoading = false + this.$emit('success') + Message.success('淇濆瓨鎴愬姛') + this.close() + } + }).catch(() => { + this.subLoading = false + }) + } + }) + }, + initData() { + fetchList({ + model: { type: 5 }, + capacity: 1000, + page: 1, + }).then(res => { + this.cateList = res.records || [] + }) + + }, + changeSel(e) { + if (e && e.length == 1) { + this.$set(this.param, 'catePId', e[0]) + this.$set(this.param, 'cateId', '') + } else if (e && e.length == 2) { + this.$set(this.param, 'catePId', e[0]) + this.$set(this.param, 'cateId', e[1]) + } else { + this.$set(this.param, 'catePId', '') + this.$set(this.param, 'cateId', '') + } + this.search() + }, + uploadAvatarSuccess(file) { + this.$set(this.param, 'imgurl', file.imgurl) + this.$set(this.param, 'imgurlfull', file.imgurlfull) + }, + close() { + this.isShowModal = false + this.$emit('close') + } + } +} +</script> + +<style lang="scss" scoped></style> \ No newline at end of file diff --git a/admin/src/views/operation/components/maintain.vue b/admin/src/views/operation/components/maintain.vue new file mode 100644 index 0000000..5ec2b19 --- /dev/null +++ b/admin/src/views/operation/components/maintain.vue @@ -0,0 +1,222 @@ +<template> + <GlobalWindow :title="param.id ? '缂栬緫杩愮淮璁板綍' : '鏂板缓杩愮淮璁板綍'" :confirmWorking="subLoading" :visible.sync="isShowModal" + width="600px" @close="close" @confirm="handleSub"> + <el-form :model="param" ref="paramRef" :rules="rules"> + <el-form-item label="閫夋嫨璁惧" prop="code"> + <el-select v-model="param.deviceId" filterable clearable> + <el-option v-for="item in deviceList" :value="item" :label="item"></el-option> + </el-select> + </el-form-item> + <el-form-item label="杩愮淮浜哄憳" prop="code"> + <el-select v-model="param.realName" filterable clearable> + <el-option v-for="item in 10" :value="item" :label="item"></el-option> + </el-select> + </el-form-item> + <el-form-item label="璁惧鐘舵��" prop=""> + <el-select v-model="param.status" filterable clearable> + <el-option value="0" label="姝e父"></el-option> + <el-option value="1" label="鎹熷潖"></el-option> + <el-option value="2" label="鎶ュ簾"></el-option> + </el-select> + </el-form-item> + <el-form-item label="鐜板満鐓х墖" prop=""> + <div class="file_list"> + <el-upload class="avatar-uploader" :data="uploadData" :auto-upload="true" :action="uploadImgUrl" + :show-file-list="false" :on-success="uploadAvatarSuccess" :on-error="uploadError" + :before-upload="beforeUpload"> + <div class="upload_wrap"> + <i class="el-icon-plus avatar-uploader-icon"></i> + <div>鍥剧墖/瑙嗛</div> + </div> + </el-upload> + <div v-for="(item, i) in fileList" :key="i" class="item"> + <i @click="handleDelImg(i)" class="el-icon-error close"></i> + <el-image :src="item.fileurlFull" :preview-src-list="[item.fileurlFull]" v-if="item.type == 0" + class="img"></el-image> + <video :src="item.fileurlFull" controls v-if="item.type == 1" class="img"></video> + </div> + </div> + </el-form-item> + <el-form-item label="杩愮淮澶囨敞" prop=""> + <el-input type="textarea" :rows="4" v-model="param.remark" placeholder="璇疯緭鍏�" /> + </el-form-item> + <el-form-item label="杩愮淮鏃堕棿" prop=""> + <el-date-picker v-model="param.dealDate" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" + type="datetime"></el-date-picker> + </el-form-item> + + + + + </el-form> + </GlobalWindow> +</template> + +<script> +import GlobalWindow from '@/components/common/GlobalWindow' +import UploadAvatarImage from '@/components/common/UploadAvatarImage' +import { fetchList } from '@/api/Inspection/device' +import { Message, Loading } from 'element-ui' +export default { + components: { GlobalWindow, UploadAvatarImage }, + data() { + return { + isShowModal: false, + subLoading: false, + param: {}, + deviceList: [], + rules: { + name: [{ required: true, message: '璇疯緭鍏�' }], + code: [{ required: true, message: '璇疯緭鍏�' }] + }, + + loadingInstance: null, + uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch', + fileList: [], + uploadData: { + folder: 'HIDDEN_DANGER_FILE' + }, + + } + }, + created() { + this.initData() + }, + methods: { + handleSub() { + const { param, subLoading } = this + this.$refs['paramRef'].validate((valid) => { + if (valid) { + let fn = param.id ? updateById : create + this.subLoading = true + fn(param).then(res => { + if (res.code == 200) { + this.subLoading = false + this.$emit('success') + Message.success('淇濆瓨鎴愬姛') + this.close() + } + }).catch(() => { + this.subLoading = false + }) + } + }) + }, + initData() { + fetchList({ + model: {}, + capacity: 1000, + page: 1, + }).then(res => { + this.deviceList = res || [] + }) + + }, + changeSel(e) { + if (e && e.length == 1) { + this.$set(this.param, 'catePId', e[0]) + this.$set(this.param, 'cateId', '') + } else if (e && e.length == 2) { + this.$set(this.param, 'catePId', e[0]) + this.$set(this.param, 'cateId', e[1]) + } else { + this.$set(this.param, 'catePId', '') + this.$set(this.param, 'cateId', '') + } + this.search() + }, + beforeUpload(file) { + if (['video/mp4', 'video/ogg', 'video/flv', 'video/avi', 'video/wmv', 'video/rmvb', 'image/jpeg', 'image/jpg', 'image/png', 'image/gif'].indexOf(file.type) == -1) { + this.$message.error('璇蜂笂浼犳纭殑瑙嗛/鍥剧墖鏍煎紡') + return false + } + this.loadingInstance = Loading.service({ + lock: true, + text: 'Loading', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }) + }, + uploadError() { + this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂� + if (this.loadingInstance) { + this.loadingInstance.close() + } + }) + }, + uploadAvatarSuccess(file) { + this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂� + if (this.loadingInstance) { + this.loadingInstance.close() + } + }) + console.log('file', file) + const item = file.data[0] + if (['.mp4', '.avi', '.flv', '.wmv'].some(char => item.imgaddr.includes(char))) { + this.fileList.push({ + type: 1, + fileurl: item.imgaddr, + fileurlFull: item.url + }) + } else { + this.fileList.push({ + type: 0, + fileurl: item.imgaddr, + fileurlFull: item.url + }) + } + console.log('file', this.fileList) + // this.$set(this.param, 'faceImg', file.imgurl) + // this.$set(this.param, 'faceImgUrl', file.imgurlfull) + }, + handleDelImg(i) { + this.fileList.splice(i, 1) + }, + close() { + this.isShowModal = false + this.$emit('close') + } + } +} +</script> + +<style lang="scss" scoped> +.file_list { + display: flex; + flex-wrap: wrap; + .avatar-uploader{ + width: 92px; + height: 92px; + display: flex; + justify-content: center; + align-items: center; + border: 1px dashed #d9d9d9; + } + .item { + width: 92px; + max-height: 92px; + margin-left: 10px; + position: relative; + border: 1px dashed #d9d9d9; + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center; + + .close { + font-size: 20px; + position: absolute; + right: -10px; + top: -10px; + z-index: 111; + color: red; + cursor: pointer; + } + + .img { + width: 92px; + max-height: 92px; + } + } +} +</style> \ No newline at end of file diff --git a/admin/src/views/operation/device.vue b/admin/src/views/operation/device.vue index e69de29..202eccd 100644 --- a/admin/src/views/operation/device.vue +++ b/admin/src/views/operation/device.vue @@ -0,0 +1,138 @@ +<template> + <div class="main_app"> + <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> + <div class="mt20"> + <el-button type="primary" @click="handleEdit()" icon="el-icon-plus" + v-permissions="['business:ywpatrolline:create']">鏂板缓</el-button> + </div> + <el-table v-loading="loading" :data="list" stripe> + <el-table-column prop="code" label="璁惧缂栧彿" min-width="100" show-overflow-tooltip /> + <el-table-column prop="name" label="璁惧鍚嶇О" min-width="100" show-overflow-tooltip /> + <el-table-column prop="" label="璁惧鍒嗙被" min-width="100" show-overflow-tooltip /> + <el-table-column prop="modelNo" label="璁惧鍨嬪彿" min-width="100" show-overflow-tooltip /> + <el-table-column prop="realName" label="绠$悊鍛�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="company" label="璁惧渚涘簲鍟�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="status" label="璁惧鐘舵��" min-width="100" show-overflow-tooltip /> + <el-table-column 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> + <div class="mt20"> + <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> + </div> + <Edit v-if="showEdit" ref="EditRef" @success="getList" @close="showEdit = false" /> + </div> +</template> + +<script> +import Pagination from '@/components/common/Pagination' +import QueryForm from '@/components/common/QueryForm' +import Edit from './components/deviceEdit' +import { fetchList, deleteById } from '@/api/Inspection/device' +export default { + components: { + Pagination, + QueryForm, + Edit + }, + data() { + return { + loading: false, + showEdit: false, + pagination: { + pageSize: 10, + page: 1, + total: 0 + }, + filters: {}, + list: [], + total: 0, + queryFormConfig: { + formItems: [ + { + filed: 'name', + type: 'input', + label: '璁惧鍚嶇О', + placeholder: '璇疯緭鍏ヨ澶囧悕绉�/缂栫爜' + }, + { + filed: 'status', + type: 'select', + label: '璁惧鐘舵��', + options: [ + { value: 0, label: '姝e父' }, + { value: 1, label: '鎹熷潖' }, + { value: 2, label: '鎶ュ簾' }, + ] + }, + ], + online: true + } + } + }, + created() { + this.getList() + }, + methods: { + getList(page) { + const { pagination, filters } = this + this.loading = true + fetchList({ + model: { + ...filters, + }, + capacity: pagination.pageSize, + page: page || pagination.page, + }).then(res => { + this.loading = false + this.list = res.records || [] + this.list.forEach(item => { + item.stautsName = item.status == 0 ? '姝e父' : item.status == 1 ? '鎹熷潖' : '鎶ュ簾' + }) + this.pagination.total = res.total || 0 + }, () => { + this.loading = false + }) + }, + handleEdit(row) { + this.showEdit = true + this.$nextTick(() => { + this.$refs.EditRef.isShowModal = true + if (row && row.id) { + this.$refs.EditRef.getDetail(row.id) + } + }) + + }, + handleDel(row) { + let message = `纭鍒犻櫎璇ヨ褰曞悧?` + this.$dialog.deleteConfirm(message) + .then(() => { + this.isWorking.delete = true + deleteById(row.id) + .then(() => { + this.$tip.apiSuccess('鍒犻櫎鎴愬姛') + this.getList() + }) + }) + .catch(() => { }) + }, + clear() { + this.filters = {} + this.pagination.pageSize = 10 + this.pagination.page = 1 + this.getList() + }, + handleSizeChange(capacity) { + this.pagination.pageSize = capacity + } + } +} +</script> + +<style></style> diff --git a/admin/src/views/operation/record.vue b/admin/src/views/operation/record.vue index e69de29..53e95ad 100644 --- a/admin/src/views/operation/record.vue +++ b/admin/src/views/operation/record.vue @@ -0,0 +1,138 @@ +<template> + <div class="main_app"> + <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clear" /> + <div class="mt20"> + <el-button type="primary" @click="handleEdit()" icon="el-icon-plus" + v-permissions="['business:ywpatrolline:create']">鏂板缓</el-button> + <el-button type="primary" @click="handleEx" v-permissions="['business:ywpatrolline:create']">瀵煎嚭</el-button> + </div> + <el-table v-loading="loading" :data="list" stripe> + <el-table-column prop="" label="杩愮淮浜�" min-width="100" show-overflow-tooltip /> + <el-table-column prop="code" label="璁惧缂栧彿" min-width="100" show-overflow-tooltip /> + <el-table-column prop="name" label="璁惧鍚嶇О" min-width="100" show-overflow-tooltip /> + <el-table-column prop="stautsName" label="璁惧鐘舵��" min-width="100" show-overflow-tooltip /> + <el-table-column prop="remark" label="杩愮淮澶囨敞" min-width="100" show-overflow-tooltip /> + <el-table-column prop="createTime" label="鍒涘缓鏃堕棿" min-width="100" show-overflow-tooltip /> + <el-table-column label="鎿嶄綔" min-width="120" fixed="right"> + <template slot-scope="{row}"> + <el-button type="text" @click="handleDetail(row)" icon="el-icon-edit" + v-permissions="['business:category:update']">鏌ョ湅</el-button> + </template> + </el-table-column> + </el-table> + <div class="mt20"> + <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> + </div> + <Edit v-if="showEdit" ref="EditRef" @success="getList" @close="showEdit = false" /> + </div> +</template> + +<script> +import Pagination from '@/components/common/Pagination' +import QueryForm from '@/components/common/QueryForm' +import Edit from './components/maintain.vue' +import { fetchList, deleteById } from '@/api/Inspection/device' +export default { + components: { + Pagination, + QueryForm, + Edit + }, + data() { + return { + loading: false, + showEdit: false, + pagination: { + pageSize: 10, + page: 1, + total: 0 + }, + filters: {}, + list: [], + total: 0, + queryFormConfig: { + formItems: [ + { + filed: 'name', + type: 'input', + label: '璁惧鍚嶇О', + placeholder: '璇疯緭鍏ヨ澶囧悕绉�/缂栫爜' + }, + { + filed: 'selTime', + type: 'datetimerange', + label: '鍒涘缓鏃堕棿' + }, + ], + online: true + } + } + }, + created() { + this.getList() + }, + methods: { + getList(page) { + const { pagination, filters } = this + this.loading = true + fetchList({ + model: { + ...filters, + }, + capacity: pagination.pageSize, + page: page || pagination.page, + }).then(res => { + this.loading = false + this.list = res.records || [] + this.list.forEach(item => { + item.stautsName = item.status == 0 ? '姝e父' : item.status == 1 ? '鎹熷潖' : '鎶ュ簾' + }) + this.pagination.total = res.total || 0 + }, () => { + this.loading = false + }) + }, + handleEx() { + + }, + handleEdit(row) { + this.showEdit = true + this.$nextTick(() => { + this.$refs.EditRef.isShowModal = true + if (row && row.id) { + this.$refs.EditRef.getDetail(row.id) + } + }) + + }, + handleDetail() { + + }, + handleDel(row) { + let message = `纭鍒犻櫎璇ヨ褰曞悧?` + this.$dialog.deleteConfirm(message) + .then(() => { + this.isWorking.delete = true + deleteById(row.id) + .then(() => { + this.$tip.apiSuccess('鍒犻櫎鎴愬姛') + this.getList() + }) + }) + .catch(() => { }) + }, + clear() { + this.filters = {} + this.pagination.pageSize = 10 + this.pagination.page = 1 + this.getList() + }, + handleSizeChange(capacity) { + this.pagination.pageSize = capacity + this.getList() + } + } +} +</script> + +<style></style> diff --git a/admin/src/views/project/buildingList.vue b/admin/src/views/project/buildingList.vue index d84c6b1..b3dd1ec 100644 --- a/admin/src/views/project/buildingList.vue +++ b/admin/src/views/project/buildingList.vue @@ -6,28 +6,26 @@ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ユゼ瀹囧悕绉�" @keypress.enter.native="search"></el-input> </el-form-item> <el-form-item label="鎵�灞為」鐩�" prop="projectId"> - <el-select v-model="searchForm.projectId"> - <el-option v-for="item in projectList" :key="item.id" :label="item.name" :value="item.id"></el-option> - </el-select> + <el-select v-model="searchForm.projectId"> + <el-option v-for="item in projectList" :key="item.id" :label="item.name" :value="item.id"></el-option> + </el-select> </el-form-item> <section> <el-button type="primary" @click="search">鎼滅储</el-button> - <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywbuilding:exportExcel']" @click="exportExcel">瀵煎嚭</el-button> + <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywbuilding:exportExcel']" + @click="exportExcel">瀵煎嚭</el-button> <el-button @click="reset">閲嶇疆</el-button> </section> </el-form> <!-- 琛ㄦ牸鍜屽垎椤� --> <template v-slot:table-wrap> <ul class="toolbar" v-permissions="['business:ywbuilding:create', 'business:ywbuilding:delete']"> - <li><el-button type="primary" @click="editClick()" icon="el-icon-plus" v-permissions="['business:ywbuilding:create']">鏂板缓</el-button></li> - <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:ywbuilding:delete']">鍒犻櫎</el-button></li> + <li><el-button type="primary" @click="editClick()" icon="el-icon-plus" + v-permissions="['business:ywbuilding:create']">鏂板缓</el-button></li> + <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" + v-permissions="['business:ywbuilding:delete']">鍒犻櫎</el-button></li> </ul> - <el-table - v-loading="isWorking.search" - :data="tableData.list" - stripe - @selection-change="handleSelectionChange" - > + <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"> <template v-slot="scope"> @@ -39,30 +37,25 @@ <el-table-column prop="area" label="寤虹瓚闈㈢Н(m虏)" min-width="80px"></el-table-column> <el-table-column prop="cqArea" label="绠$悊闈㈢Н(m虏)" min-width="80px"></el-table-column> <el-table-column prop="" label="鎴块棿鎬绘暟(闂�)" min-width="80px"></el-table-column> - <el-table-column prop="" label="鍙嫑鍟嗘埧婧愭暟閲�(闂�)" min-width="100px"></el-table-column> - <el-table-column - v-if="containPermissions(['business:ywbuilding:update', 'business:ywbuilding:delete'])" - label="鎿嶄綔" - min-width="120" - fixed="right" - > + <el-table-column prop="" label="鍙嫑鍟嗘埧婧愭暟閲�(闂�)" min-width="100px"></el-table-column> + <el-table-column v-if="containPermissions(['business:ywbuilding:update', 'business:ywbuilding:delete'])" + label="鎿嶄綔" min-width="120" fixed="right"> <template slot-scope="{row}"> - <el-button type="text" @click="editClick(row)" icon="el-icon-edit" v-permissions="['business:ywbuilding:update']">缂栬緫</el-button> - <el-button type="text" @click="editFloor(row)" v-permissions="['business:ywbuilding:update']">妤煎眰绠$悊</el-button> - <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:ywbuilding:delete']">鍒犻櫎</el-button> + <el-button type="text" @click="editClick(row)" icon="el-icon-edit" + v-permissions="['business:ywbuilding:update']">缂栬緫</el-button> + <el-button type="text" @click="editFloor(row)" + v-permissions="['business:ywbuilding:update']">妤煎眰绠$悊</el-button> + <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" + v-permissions="['business:ywbuilding:delete']">鍒犻櫎</el-button> </template> </el-table-column> </el-table> - <pagination - @size-change="handleSizeChange" - @current-change="handlePageChange" - :pagination="tableData.pagination" - > + <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination"> </pagination> </template> <!-- 鏂板缓/淇敼 --> - <OperaYwBuildingWindow ref="operaYwBuildingWindow" @success="handlePageChange"/> - <FloorLevel ref="FloorLevelRef" @success="handlePageChange"/> + <OperaYwBuildingWindow ref="operaYwBuildingWindow" @success="handlePageChange" /> + <FloorLevel ref="FloorLevelRef" @success="handlePageChange" /> <BuildingDetail ref="BuildingDetailRef" /> </TableLayout> </template> @@ -78,18 +71,18 @@ export default { name: 'YwBuilding', extends: BaseTable, - components: { TableLayout, Pagination, OperaYwBuildingWindow ,BuildingDetail, FloorLevel}, - data () { + components: { TableLayout, Pagination, OperaYwBuildingWindow, BuildingDetail, FloorLevel }, + data() { return { // 鎼滅储 - searchForm: { + searchForm: { name: '', projectId: '' }, projectList: [] } }, - created () { + created() { this.config({ module: '杩愮淮妤煎畤淇℃伅琛�', api: '/project/ywBuilding', @@ -106,9 +99,9 @@ }) }, editClick(row) { - if(row && row.id){ + if (row && row.id) { this.$refs.operaYwBuildingWindow.open('缂栬緫妤煎畤') - }else{ + } else { this.$refs.operaYwBuildingWindow.open('鏂板缓妤煎畤') } this.$refs.operaYwBuildingWindow.getProject() diff --git a/admin/src/views/project/components/OperaYwBuildingWindow.vue b/admin/src/views/project/components/OperaYwBuildingWindow.vue index 2b92f59..d095dc0 100644 --- a/admin/src/views/project/components/OperaYwBuildingWindow.vue +++ b/admin/src/views/project/components/OperaYwBuildingWindow.vue @@ -2,7 +2,7 @@ <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm"> <el-form :model="form" ref="form" :rules="rules"> <el-form-item label="鎵�灞為」鐩�" prop="projectId" clearable placeholder="璇烽�夋嫨椤圭洰"> - <el-select v-model="form.projectId"> + <el-select v-model="form.projectId" filterable clearable> <el-option v-for="item in projectList" :key="item.id" :label="item.name" :value="item.id"></el-option> </el-select> </el-form-item> diff --git a/admin/src/views/workorder/components/OperaCategoryWindow.vue b/admin/src/views/workorder/components/OperaCategoryWindow.vue index b3588eb..6b9bb0f 100644 --- a/admin/src/views/workorder/components/OperaCategoryWindow.vue +++ b/admin/src/views/workorder/components/OperaCategoryWindow.vue @@ -1,22 +1,16 @@ <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="name"> + <el-input v-model="form.name" placeholder="璇疯緭鍏ュ垎绫诲悕绉�" v-trim /> + </el-form-item> <el-form-item label="鎵�灞炲垎绫�" prop="parentId"> <el-select :disabled="form.id" 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 label="鎺掑簭鐮�(鍗囧簭)" prop="sortnum"> + <el-input v-model="form.sortnum" oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 6)" v-trim /> </el-form-item> </el-form> </GlobalWindow> @@ -38,7 +32,8 @@ name: '', remark: '', status: '', - type: 1 + sortnum: '', + type: 3 }, // 楠岃瘉瑙勫垯 rules: { @@ -60,7 +55,7 @@ }, methods: { getList() { - fetchCateList({}).then(res => { + fetchCateList({ type: 3 }).then(res => { this.dataList = res || [] }) diff --git a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue index 1bdcfef..f292342 100644 --- a/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue +++ b/admin/src/views/workorder/components/OperaYwWorkorderWindow.vue @@ -1,107 +1,60 @@ <template> - <GlobalWindow - :title="title" - :visible.sync="visible" - :confirm-working="isWorking" - @confirm="confirm" - > + <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking" @confirm="confirm"> <el-form :model="form" ref="form" :rules="rules"> - <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator"> - <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" v-trim/> + <el-form-item label="浣嶇疆绫诲瀷" prop="areaType"> + <el-select v-model="form.areaType"> + <el-option label="瀹ゅ唴缁翠慨" value="0"></el-option> + <el-option label="鍏叡缁翠慨" value="1"></el-option> + </el-select> </el-form-item> - <el-form-item label="鍒涘缓鏃堕棿" prop="createDate"> - <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker> + <el-form-item label="鎶ヤ慨鍖哄煙"> + </el-form-item> - <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor"> - <el-input v-model="form.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" v-trim/> - </el-form-item> - <el-form-item label="鏇存柊鏃堕棿" prop="editDate"> - <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�"></el-date-picker> - </el-form-item> - <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted"> - <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" v-trim/> - </el-form-item> - <el-form-item label="鏍囬" prop="title"> - <el-input v-model="form.title" placeholder="璇疯緭鍏ユ爣棰�" v-trim/> - </el-form-item> - <el-form-item label="澶囨敞" prop="remark"> - <el-input v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" v-trim/> - </el-form-item> - <el-form-item label="鐘舵�� 0鍚敤 1绂佺敤" prop="status"> - <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0鍚敤 1绂佺敤" v-trim/> - </el-form-item> - <el-form-item label="鎺掑簭鐮�" prop="sortnum"> - <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/> - </el-form-item> - <el-form-item label="鎯呭喌璇存槑" prop="content"> - <el-input v-model="form.content" placeholder="璇疯緭鍏ユ儏鍐佃鏄�" v-trim/> + <el-form-item label="鍒嗙被" prop="cateId"> + <el-select v-model="form.cateId"> + <el-option label="" value=""></el-option> + </el-select> </el-form-item> <el-form-item label="涓婇棬鏃堕棿" prop="getDate"> - <el-date-picker v-model="form.getDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ヤ笂闂ㄦ椂闂�"></el-date-picker> + <el-date-picker type="datetime" v-model="form.getDate" format="yyyy-MM-dd HH:mm" value-format="yyyy-MM-dd HH:mm:ss" + placeholder="璇烽�夋嫨涓婇棬鏃堕棿"></el-date-picker> </el-form-item> - <el-form-item label="鎵�灞為」鐩紪鐮侊紙鍏宠仈yw_project)" prop="projectId"> - <el-input v-model="form.projectId" placeholder="璇疯緭鍏ユ墍灞為」鐩紪鐮侊紙鍏宠仈yw_project)" v-trim/> + <el-form-item label="鐜板満鍥剧墖"> + <div class="file_list"> + <el-upload class="avatar-uploader" :data="uploadData" :auto-upload="true" :action="uploadImgUrl" + :show-file-list="false" :on-success="uploadAvatarSuccess" :on-error="uploadError" + :before-upload="beforeUpload"> + <div class="upload_wrap"> + <i class="el-icon-plus avatar-uploader-icon"></i> + <div>鍥剧墖/瑙嗛</div> + </div> + </el-upload> + <div v-for="(item, i) in fileList" :key="i" class="item"> + <i @click="handleDelImg(i)" class="el-icon-error close"></i> + <el-image :src="item.fileurlFull" :preview-src-list="[item.fileurlFull]" v-if="item.type == 0" + class="img"></el-image> + <video :src="item.fileurlFull" controls v-if="item.type == 1" class="img"></video> + </div> + </div> </el-form-item> - <el-form-item label="鎵�灞為」鐩紪鐮侊紙鍏宠仈yw_building)" prop="buildingId"> - <el-input v-model="form.buildingId" placeholder="璇疯緭鍏ユ墍灞為」鐩紪鐮侊紙鍏宠仈yw_building)" v-trim/> - </el-form-item> - <el-form-item label="鎵�灞炴埧闂寸紪鐮侊紙鍏宠仈yw_room)" prop="roomId"> - <el-input v-model="form.roomId" placeholder="璇疯緭鍏ユ墍灞炴埧闂寸紪鐮侊紙鍏宠仈yw_room)" v-trim/> - </el-form-item> - <el-form-item label="鎻愭姤浜虹紪鐮�" prop="userId"> - <el-input v-model="form.userId" placeholder="璇疯緭鍏ユ彁鎶ヤ汉缂栫爜" v-trim/> - </el-form-item> - <el-form-item label="鑱旂郴鐢佃瘽" prop="phone"> - <el-input v-model="form.phone" placeholder="璇疯緭鍏ヨ仈绯荤數璇�" v-trim/> - </el-form-item> - <el-form-item label="鎻愭姤鏃堕棿" prop="submitDate"> - <el-date-picker v-model="form.submitDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ彁鎶ユ椂闂�"></el-date-picker> - </el-form-item> - <el-form-item label="宸ュ崟鍒嗙被缂栫爜(鍏宠仈category锛�" prop="cateId"> - <el-input v-model="form.cateId" placeholder="璇疯緭鍏ュ伐鍗曞垎绫荤紪鐮�(鍏宠仈category锛�" v-trim/> - </el-form-item> - <el-form-item label="淇濅慨鍖哄煙绫诲瀷 0瀹ゅ唴缁翠慨 1鍏叡鍖哄煙" prop="areaType"> - <el-input v-model="form.areaType" placeholder="璇疯緭鍏ヤ繚淇尯鍩熺被鍨� 0瀹ゅ唴缁翠慨 1鍏叡鍖哄煙" v-trim/> - </el-form-item> - <el-form-item label="宸ュ崟缂栧彿" prop="code"> - <el-input v-model="form.code" placeholder="璇疯緭鍏ュ伐鍗曠紪鍙�" v-trim/> - </el-form-item> - <el-form-item label="澶勭悊鐘舵�� 0寰呭鐞� 1宸插垎娲� 2宸插鐞�" prop="dealStatus"> - <el-input v-model="form.dealStatus" placeholder="璇疯緭鍏ュ鐞嗙姸鎬� 0寰呭鐞� 1宸插垎娲� 2宸插鐞�" v-trim/> - </el-form-item> - <el-form-item label="鍒嗘淳浜虹紪鐮�(鍏宠仈system_user)" prop="dispatchUserId"> - <el-input v-model="form.dispatchUserId" placeholder="璇疯緭鍏ュ垎娲句汉缂栫爜(鍏宠仈system_user)" v-trim/> - </el-form-item> - <el-form-item label="鍒嗘淳鏃堕棿" prop="dispatchDate"> - <el-date-picker v-model="form.dispatchDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垎娲炬椂闂�"></el-date-picker> - </el-form-item> - <el-form-item label="鍒嗘淳澶勭悊璇存槑" prop="dispatchInfo"> - <el-input v-model="form.dispatchInfo" placeholder="璇疯緭鍏ュ垎娲惧鐞嗚鏄�" v-trim/> - </el-form-item> - <el-form-item label="澶勭悊浜虹紪鐮�(鍏宠仈system_user)" prop="dealUserId"> - <el-input v-model="form.dealUserId" placeholder="璇疯緭鍏ュ鐞嗕汉缂栫爜(鍏宠仈system_user)" v-trim/> - </el-form-item> - <el-form-item label="澶勭悊鏃堕棿" prop="dealDate"> - <el-date-picker v-model="form.dealDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ鐞嗘椂闂�"></el-date-picker> - </el-form-item> - <el-form-item label="澶勭悊澶囨敞" prop="dealInfo"> - <el-input v-model="form.dealInfo" placeholder="璇疯緭鍏ュ鐞嗗娉�" v-trim/> - </el-form-item> - <el-form-item label="澶勭悊鏂瑰紡 0鎸囨淳鍚庡鐞� 1鐩存帴鍥炲" prop="dealType"> - <el-input v-model="form.dealType" placeholder="璇疯緭鍏ュ鐞嗘柟寮� 0鎸囨淳鍚庡鐞� 1鐩存帴鍥炲" v-trim/> + <el-form-item label="鎯呭喌璇存槑" prop="content"> + <el-input type="textarea" :rows="4" v-model="form.content" placeholder="璇疯緭鍏ユ儏鍐佃鏄�" v-trim /> </el-form-item> </el-form> + <!-- --> + </GlobalWindow> </template> <script> import BaseOpera from '@/components/base/BaseOpera' import GlobalWindow from '@/components/common/GlobalWindow' +import { Loading } from 'element-ui' export default { name: 'OperaYwWorkorderWindow', extends: BaseOpera, components: { GlobalWindow }, - data () { + data() { return { // 琛ㄥ崟鏁版嵁 form: { @@ -124,7 +77,7 @@ phone: '', submitDate: '', cateId: '', - areaType: '', + areaType: '0', code: '', dealStatus: '', dispatchUserId: '', @@ -135,16 +88,115 @@ dealInfo: '', dealType: '' }, + loadingInstance: null, // 楠岃瘉瑙勫垯 rules: { - } + }, + uploadImgUrl: process.env.VUE_APP_API_PREFIX + '/visitsAdmin/cloudService/public/uploadBatch', + fileList: [], + uploadData: { + folder: 'HIDDEN_DANGER_FILE' + }, } }, - created () { + created() { this.config({ api: '/workorder/ywWorkorder', 'field.id': 'id' }) + }, + methods: { + beforeUpload (file) { + if (['video/mp4', 'video/ogg', 'video/flv', 'video/avi', 'video/wmv', 'video/rmvb', 'image/jpeg','image/jpg', 'image/png', 'image/gif'].indexOf(file.type) == -1) { + this.$message.error('璇蜂笂浼犳纭殑瑙嗛/鍥剧墖鏍煎紡') + return false + } + this.loadingInstance = Loading.service({ + lock: true, + text: 'Loading', + spinner: 'el-icon-loading', + background: 'rgba(0, 0, 0, 0.7)' + }) + }, + uploadError() { + this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂� + if(this.loadingInstance){ + this.loadingInstance.close() + } + }) + }, + uploadAvatarSuccess (file) { + this.$nextTick(() => { // 浠ユ湇鍔$殑鏂瑰紡璋冪敤鐨� Loading 闇�瑕佸紓姝ュ叧闂� + if(this.loadingInstance){ + this.loadingInstance.close() + } + }) + console.log('file', file) + const item = file.data[0] + if (['.mp4', '.avi', '.flv', '.wmv'].some(char => item.imgaddr.includes(char))) { + this.fileList.push({ + type: 1, + fileurl: item.imgaddr, + fileurlFull: item.url + }) + } else { + this.fileList.push({ + type: 0, + fileurl: item.imgaddr, + fileurlFull: item.url + }) + } + console.log('file', this.fileList) + // this.$set(this.param, 'faceImg', file.imgurl) + // this.$set(this.param, 'faceImgUrl', file.imgurlfull) + }, + handleDelImg (i) { + this.fileList.splice(i, 1) + }, + close(){ + this.isShowModal = false + this.$emit('close') + } } } </script> +<style lang="scss" scoped> +.file_list { + display: flex; + flex-wrap: wrap; + .avatar-uploader{ + width: 92px; + height: 92px; + display: flex; + justify-content: center; + align-items: center; + border: 1px dashed #d9d9d9; + } + .item { + width: 92px; + max-height: 92px; + margin-left: 10px; + position: relative; + border: 1px dashed #d9d9d9; + border-radius: 4px; + display: flex; + align-items: center; + justify-content: center; + + .close { + font-size: 20px; + position: absolute; + right: -10px; + top: -10px; + z-index: 111; + color: red; + cursor: pointer; + } + + .img { + width: 92px; + max-height: 92px; + } + } +} +</style> \ No newline at end of file diff --git a/admin/src/views/workorder/workorderCate.vue b/admin/src/views/workorder/workorderCate.vue index a86289e..394d168 100644 --- a/admin/src/views/workorder/workorderCate.vue +++ b/admin/src/views/workorder/workorderCate.vue @@ -9,15 +9,9 @@ </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 prop="name" label="宸ュ崟鍒嗙被" min-width="100px"></el-table-column> + <!-- <el-table-column prop="parentName" label="鎵�灞炲垎绫�" min-width="100px"></el-table-column> --> + <el-table-column prop="sortnum" 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}"> @@ -99,7 +93,7 @@ const { pagination, filters } = this this.loading = true fetchList({ - model: { ...filters }, + model: { ...filters, type: 3 }, capacity: pagination.pageSize, page: pagination.page, }).then(res => { diff --git a/admin/src/views/workorder/workorderList.vue b/admin/src/views/workorder/workorderList.vue index 7af17bb..1173e81 100644 --- a/admin/src/views/workorder/workorderList.vue +++ b/admin/src/views/workorder/workorderList.vue @@ -2,74 +2,65 @@ <TableLayout :permissions="['business:ywworkorder:query']"> <!-- 鎼滅储琛ㄥ崟 --> <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> - <el-form-item label="鎵�灞為」鐩紪鐮侊紙鍏宠仈yw_project)" prop="projectId"> - <el-input v-model="searchForm.projectId" placeholder="璇疯緭鍏ユ墍灞為」鐩紪鐮侊紙鍏宠仈yw_project)" @keypress.enter.native="search"></el-input> + <el-form-item prop="areaType"> + <el-select v-model="searchForm.areaType"> + <el-option label="瀹ゅ唴缁翠慨" value="0"></el-option> + <el-option label="鍏叡缁翠慨" value="1"></el-option> + </el-select> </el-form-item> - <el-form-item label="鎵�灞為」鐩紪鐮侊紙鍏宠仈yw_building)" prop="buildingId"> - <el-input v-model="searchForm.buildingId" placeholder="璇疯緭鍏ユ墍灞為」鐩紪鐮侊紙鍏宠仈yw_building)" @keypress.enter.native="search"></el-input> + <el-form-item label="璇烽�夋嫨鎶ヤ慨鍖哄煙" prop="buildingId"> + <el-input v-model="searchForm.buildingId" placeholder="璇疯緭鍏ユ墍灞為」鐩紪鐮侊紙鍏宠仈yw_building)" + @keypress.enter.native="search"></el-input> </el-form-item> - <el-form-item label="鎵�灞炴埧闂寸紪鐮侊紙鍏宠仈yw_room)" prop="roomId"> - <el-input v-model="searchForm.roomId" placeholder="璇疯緭鍏ユ墍灞炴埧闂寸紪鐮侊紙鍏宠仈yw_room)" @keypress.enter.native="search"></el-input> - </el-form-item> - <el-form-item label="宸ュ崟鍒嗙被缂栫爜(鍏宠仈category锛�" prop="cateId"> - <el-input v-model="searchForm.cateId" placeholder="璇疯緭鍏ュ伐鍗曞垎绫荤紪鐮�(鍏宠仈category锛�" @keypress.enter.native="search"></el-input> + <el-form-item prop="cateId"> + <el-input v-model="searchForm.cateId" placeholder="鎶ヤ慨鐗╁搧绫诲埆" @keypress.enter.native="search"></el-input> </el-form-item> <section> <el-button type="primary" @click="search">鎼滅储</el-button> - <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywworkorder:exportExcel']" @click="exportExcel">瀵煎嚭</el-button> + <el-button type="primary" :loading="isWorking.export" v-permissions="['business:ywworkorder:exportExcel']" + @click="exportExcel">瀵煎嚭</el-button> <el-button @click="reset">閲嶇疆</el-button> </section> </el-form> <!-- 琛ㄦ牸鍜屽垎椤� --> <template v-slot:table-wrap> <ul class="toolbar" v-permissions="['business:ywworkorder:create', 'business:ywworkorder:delete']"> - <li><el-button type="primary" @click="$refs.operaYwWorkorderWindow.open('鏂板缓宸ュ崟')" icon="el-icon-plus" v-permissions="['business:ywworkorder:create']">鏂板缓</el-button></li> - <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:ywworkorder:delete']">鍒犻櫎</el-button></li> + <li><el-button type="primary" @click="$refs.operaYwWorkorderWindow.open('鏂板缓宸ュ崟')" icon="el-icon-plus" + v-permissions="['business:ywworkorder:create']">鏂板缓</el-button></li> + <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" + v-permissions="['business:ywworkorder: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="projectId" label="鎵�灞為」鐩紪鐮侊紙鍏宠仈yw_project)" min-width="100px"></el-table-column> - <el-table-column prop="buildingId" label="鎵�灞為」鐩紪鐮侊紙鍏宠仈yw_building)" min-width="100px"></el-table-column> - <el-table-column prop="roomId" label="鎵�灞炴埧闂寸紪鐮侊紙鍏宠仈yw_room)" min-width="100px"></el-table-column> - <el-table-column prop="userId" label="鎻愭姤浜虹紪鐮�" min-width="100px"></el-table-column> - <el-table-column prop="phone" label="鑱旂郴鐢佃瘽" min-width="100px"></el-table-column> - <el-table-column prop="submitDate" label="鎻愭姤鏃堕棿" min-width="100px"></el-table-column> - <el-table-column prop="cateId" label="宸ュ崟鍒嗙被缂栫爜(鍏宠仈category锛�" min-width="100px"></el-table-column> - <el-table-column prop="areaType" label="淇濅慨鍖哄煙绫诲瀷 0瀹ゅ唴缁翠慨 1鍏叡鍖哄煙" min-width="100px"></el-table-column> - - <el-table-column prop="dealStatus" label="澶勭悊鐘舵�� 0寰呭鐞� 1宸插垎娲� 2宸插鐞�" min-width="100px"></el-table-column> - - <el-table-column prop="dealUserId" label="澶勭悊浜虹紪鐮�(鍏宠仈system_user)" min-width="100px"></el-table-column> - <el-table-column prop="dealType" label="澶勭悊鏂瑰紡 0鎸囨淳鍚庡鐞� 1鐩存帴鍥炲" min-width="100px"></el-table-column> - <el-table-column - v-if="containPermissions(['business:ywworkorder:update', 'business:ywworkorder:delete'])" - label="鎿嶄綔" - min-width="120" - fixed="right" - > + <el-table v-loading="isWorking.search" :data="tableData.list" stripe> + <el-table-column prop="areaType" label="浣嶇疆绫诲瀷" min-width="80px"> + <template v-slot="scope"> + <span v-if="scope.row.areaType == 0">瀹ゅ唴瑁呬慨</span> + <span v-if="scope.row.areaType == 1">鍏叡鍖哄煙</span> + </template> + </el-table-column> + <el-table-column prop="" label="鎶ヤ慨鍖哄煙" min-width="100px"></el-table-column> + <el-table-column prop="cateName" label="鎶ヤ慨鐗╁搧绫诲瀷" min-width="100px"></el-table-column> + <el-table-column prop="userName" label="涓婃姤浜�" min-width="100px"></el-table-column> + <el-table-column prop="submitDate" label="涓婃姤鏃堕棿" min-width="100px"></el-table-column> + <el-table-column prop="dealUserName" label="澶勭悊浜�" min-width="100px"></el-table-column> + <el-table-column label="澶勭悊缁撴灉" min-width="100px"> <template slot-scope="{row}"> - <el-button type="text" @click="$refs.operaYwWorkorderWindow.open('缂栬緫宸ュ崟', row)" icon="el-icon-edit" v-permissions="['business:ywworkorder:update']">缂栬緫</el-button> - <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:ywworkorder:delete']">鍒犻櫎</el-button> + <span v-if="row.dealStatus == 0">寰呮寚娲�</span> + <span v-if="row.dealStatus == 1">宸叉寚娲�</span> + <span v-if="row.dealStatus == 2">宸插鐞�</span> + </template> + </el-table-column> + <el-table-column v-if="containPermissions(['business:ywworkorder:update'])" + label="鎿嶄綔" min-width="80" fixed="right"> + <template slot-scope="{row}"> + <span class="primaryColor cu">鏌ョ湅璇︽儏</span> </template> </el-table-column> </el-table> - <pagination - @size-change="handleSizeChange" - @current-change="handlePageChange" - :pagination="tableData.pagination" - > + <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination"> </pagination> </template> <!-- 鏂板缓/淇敼 --> - <OperaYwWorkorderWindow ref="operaYwWorkorderWindow" @success="handlePageChange"/> + <OperaYwWorkorderWindow ref="operaYwWorkorderWindow" @success="handlePageChange" /> </TableLayout> </template> @@ -82,11 +73,11 @@ name: 'YwWorkorder', extends: BaseTable, components: { TableLayout, Pagination, OperaYwWorkorderWindow }, - data () { + data() { return { // 鎼滅储 searchForm: { - id: '', + areaType: '', creator: '', createDate: '', editor: '', @@ -105,7 +96,6 @@ phone: '', submitDate: '', cateId: '', - areaType: '', code: '', dealStatus: '', dispatchUserId: '', @@ -118,7 +108,7 @@ } } }, - created () { + created() { this.config({ module: '杩愮淮宸ュ崟淇℃伅琛�', api: '/workorder/ywWorkorder', -- Gitblit v1.9.3