admin/.env.development | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
admin/src/views/business/internalMember.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
admin/src/views/platform/LogisticsRecord/operationCity.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
admin/src/views/platform/components/PlatformQueuing.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
admin/src/views/platform/platform.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
h5/manifest.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
h5/pages/driver/index.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
h5/pages/driver/login.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
h5/pages/driver/queueUp.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
h5/pages/driver/taskDetail.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
pda/api/index.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
pda/manifest.json | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
pda/pages/index/center.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
pda/pages/index/queueup.vue | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
admin/.env.development
@@ -2,6 +2,6 @@ NODE_ENV = 'development' VUE_APP_API_URL = 'http://localhost:10010' VUE_APP_API_URL = 'http://192.168.0.103:10010' # VUE_APP_API_URL = 'http://10.50.250.178:8088/gateway_interface' # VUE_APP_API_URL = 'http://192.168.0.103:10010' VUE_APP_API_URL = 'http://10.50.250.178:8088/gateway_interface' s admin/src/views/business/internalMember.vue
@@ -1,195 +1,187 @@ <template> <TableLayout1 :permissions="['business:member:query']"> <!-- 搜索表单 --> <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> <el-form-item label="" prop="keyword"> <el-input v-model="searchForm.keyword" placeholder="请输入姓名/手机号/工号" @keypress.enter.native="search"></el-input> </el-form-item> <el-form-item label="" prop="hasFace"> <el-select v-model="searchForm.hasFace" @keypress.enter.native="search" clearable 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="canVisit"> <el-select v-model="searchForm.canVisit" clearable @keypress.enter.native="search" placeholder="可拜访"> <el-option label="是" value="1"></el-option> <el-option label="否" value="0"></el-option> </el-select> </el-form-item> <el-form-item label="" prop="status"> <el-select v-model="searchForm.status" @keypress.enter.native="search" clearable placeholder="状态"> <el-option label="正常" value="0"></el-option> <el-option label="禁用" value="1"></el-option> <el-option label="拉黑/冻结" value="2"></el-option> </el-select> </el-form-item> <el-form-item label="" prop="hkStatus"> <el-select v-model="searchForm.hkStatus" @keypress.enter.native="search" clearable placeholder="海康同步状态"> <el-option label="待同步" value="0"></el-option> <el-option label="同步成功" value="1"></el-option> <el-option label="同步失败" value="2"></el-option> </el-select> </el-form-item> <section> <el-button type="primary" @click="search">搜索</el-button> <el-button @click="reset">重置</el-button> </section> </el-form> <template v-slot:menu> <div style="width: 100%; height: 50px; background: rgba(242, 242, 242, 1); line-height: 50px; text-align: center; font-size: 14px;">企业组织架构</div> <div style="width: 100%; height: calc(100vh - 170px); overflow-y: scroll;"> <Tree :list="companyTree" :defaultProps="{name: 'name', status: 'fsStatus', children: 'childList', id: 'id'}" @callback="callback" /> <TableLayout1 :permissions="['business:member:query']"> <!-- 搜索表单 --> <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> <el-form-item label="" prop="keyword"> <el-input v-model="searchForm.keyword" placeholder="请输入姓名/手机号/工号" @keypress.enter.native="search"></el-input> </el-form-item> <el-form-item label="" prop="hasFace"> <el-select v-model="searchForm.hasFace" @keypress.enter.native="search" clearable 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="canVisit"> <el-select v-model="searchForm.canVisit" clearable @keypress.enter.native="search" placeholder="可拜访"> <el-option label="是" value="1"></el-option> <el-option label="否" value="0"></el-option> </el-select> </el-form-item> <el-form-item label="" prop="status"> <el-select v-model="searchForm.status" @keypress.enter.native="search" clearable placeholder="状态"> <el-option label="正常" value="0"></el-option> <el-option label="禁用" value="1"></el-option> <el-option label="拉黑/冻结" value="2"></el-option> </el-select> </el-form-item> <el-form-item label="" prop="hkStatus"> <el-select v-model="searchForm.hkStatus" @keypress.enter.native="search" clearable placeholder="海康同步状态"> <el-option label="待同步" value="0"></el-option> <el-option label="同步成功" value="1"></el-option> <el-option label="同步失败" value="2"></el-option> </el-select> </el-form-item> <section> <el-button type="primary" @click="search">搜索</el-button> <el-button @click="reset">重置</el-button> </section> </el-form> <template v-slot:menu> <div style="width: 100%; height: 50px; background: rgba(242, 242, 242, 1); line-height: 50px; text-align: center; font-size: 14px;"> 企业组织架构</div> <div style="width: 100%; height: calc(100vh - 170px); overflow-y: scroll;"> <Tree :list="companyTree" :defaultProps="{ name: 'name', status: 'fsStatus', children: 'childList', id: 'id' }" @callback="callback" /> </div> </template> <!-- 表格和分页 --> <template v-slot:table-wrap> <ul class="toolbar" v-permissions="['business:member:delete', 'business:member:create,business:empower:create']"> <li><el-button type="primary" v-permissions="['business:member:sync']" :loading="loading" @click="synchronous()">同步</el-button></li> <li><el-button type="primary" @click="$refs.OperaMemberWindow.open('新建员工', null, department, searchForm.companyType)" icon="el-icon-plus" v-permissions="['business:member:create']">新建员工</el-button></li> <li><el-button type="primary" @click="$refs.OperaMemberImportWindow.open('人员导入', searchForm.companyType)" icon="el-icon-plus" v-permissions="['business:member:create']">人员导入</el-button></li> <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">批量删除</el-button></li> <li><el-button type="primary" v-permissions="['business:empower:create']" @click="startEmpowerBatch()" icon="el-icon-plus">下发授权</el-button></li> <li style="float: right"> <el-checkbox style="font-size: 12px" label="1" v-model="searchForm.includeChild" key="1" @change="search">是否包含下级组织</el-checkbox> </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="110px"> <template slot-scope="{row}"> <span>{{ row.name }}</span> <span class="zhuguan" v-if="row.headStatus == 1">主管</span> </template> </el-table-column> <el-table-column prop="phone" label="手机号" min-width="100px"></el-table-column> <el-table-column prop="idcardDecode" label="身份证号" min-width="100px"></el-table-column> <el-table-column label="性别" min-width="100px"> <template slot-scope="{row}"> <span v-if="row.sex == 1">男</span> <span v-if="row.sex == 2">女</span> </template> </el-table-column> <el-table-column prop="companyName" 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" style="color: green">正常</span> <span v-if="row.status == 1" style="color: red">禁用</span> <span v-if="row.status == 2" style="color: red">拉黑/冻结</span> </template> </el-table-column> <el-table-column label="部门类型" min-width="100px"> <template slot-scope="{row}"> <span v-if="row.companyType == 0">相关方组织</span> <span v-if="row.companyType == 1">内部组织</span> </template> </el-table-column> <el-table-column label="在职状态"> <template slot-scope="{row}"> <el-switch @change="changeWorkStatus($event, row)" v-model="row.workStatus" active-color="#13ce66" inactive-color="#ff4949" :active-value="0" :inactive-value="1"> </el-switch> </template> </el-table-column> <el-table-column label="是否可拜访"> <template slot-scope="{row}"> <el-switch @change="changeCanvisit($event, row)" v-model="row.canVisit" active-color="#13ce66" inactive-color="#ff4949" :active-value="1" :inactive-value="0"> </el-switch> </template> </el-table-column> <el-table-column label="海康同步状态" min-width="100px"> <template slot-scope="{row}"> <span v-if="row.hkStatus == 0" style="color: #435EBE">待同步</span> <span v-if="row.hkStatus == 1" style="color: green">同步成功</span> <span v-if="row.hkStatus == 2" style="color: red">同步失败</span> <span v-if="row.hkStatus == 3" style="color: red">不符合下发条件</span> </template> </el-table-column> <el-table-column label="是否授权" min-width="100px"> <template slot-scope="{row}"> <span v-if="row.authStatus == 1" style="color: green">是</span> <span v-if="row.authStatus == 0" style="color: red">否</span> </template> </el-table-column> <el-table-column label="门禁角色" min-width="100px"> <template slot-scope="{row}"> <span>{{ (row.roleNames && row.roleNames.length) ? row.roleNames.join(',') : '-' }}</span> </template> </el-table-column> <el-table-column label="门禁有效期" min-width="170px"> <template slot-scope="{row}"> <div v-if="row.roleId != null && row.roleId != ''"> <div v-if="!row.startTime || !row.endTime">长期有效</div> <div v-else> <span>起:{{ row.startTime }}</span><br /> <span>止:{{ row.endTime }}</span> </div> </div> </template> <!-- 表格和分页 --> <template v-slot:table-wrap> <ul class="toolbar" v-permissions="['business:member:delete','business:member:create,business:empower:create']"> <li><el-button type="primary" v-permissions="['business:member:sync']" :loading="loading" @click="synchronous()">同步</el-button></li> <li><el-button type="primary" @click="$refs.OperaMemberWindow.open('新建员工',null,department,searchForm.companyType)" icon="el-icon-plus" v-permissions="['business:member:create']">新建员工</el-button></li> <li><el-button type="primary" @click="$refs.OperaMemberImportWindow.open('人员导入',searchForm.companyType)" icon="el-icon-plus" v-permissions="['business:member:create']">人员导入</el-button></li> <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:member:delete']">批量删除</el-button></li> <li><el-button type="primary" v-permissions="['business:empower:create']" @click="startEmpowerBatch()" icon="el-icon-plus">下发授权</el-button></li> <li style="float: right"> <el-checkbox style="font-size: 12px" label="1" v-model="searchForm.includeChild" key="1" @change="search" >是否包含下级组织</el-checkbox> </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="110px"> <template slot-scope="{row}"> <span>{{ row.name }}</span> <span class="zhuguan" v-if="row.headStatus == 1">主管</span> </template> </el-table-column> <el-table-column prop="phone" label="手机号" min-width="100px"></el-table-column> <el-table-column prop="idcardDecode" label="身份证号" min-width="100px"></el-table-column> <el-table-column label="性别" min-width="100px"> <template slot-scope="{row}"> <span v-if="row.sex == 1">男</span> <span v-if="row.sex == 2">女</span> </template> </el-table-column> <el-table-column prop="companyName" 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" style="color: green">正常</span> <span v-if="row.status == 1" style="color: red">禁用</span> <span v-if="row.status == 2" style="color: red">拉黑/冻结</span> </template> </el-table-column> <el-table-column label="部门类型" min-width="100px"> <template slot-scope="{row}"> <span v-if="row.companyType == 0">相关方组织</span> <span v-if="row.companyType == 1">内部组织</span> </template> </el-table-column> <el-table-column label="在职状态"> <template slot-scope="{row}"> <el-switch @change="changeWorkStatus($event, row)" v-model="row.workStatus" active-color="#13ce66" inactive-color="#ff4949" :active-value="0" :inactive-value="1"> </el-switch> </template> </el-table-column> <el-table-column label="是否可拜访"> <template slot-scope="{row}"> <el-switch @change="changeCanvisit($event, row)" v-model="row.canVisit" active-color="#13ce66" inactive-color="#ff4949" :active-value="1" :inactive-value="0"> </el-switch> </template> </el-table-column> <el-table-column label="海康同步状态" min-width="100px"> <template slot-scope="{row}"> <span v-if="row.hkStatus == 0" style="color: #435EBE">待同步</span> <span v-if="row.hkStatus == 1" style="color: green">同步成功</span> <span v-if="row.hkStatus == 2" style="color: red">同步失败</span> <span v-if="row.hkStatus == 3" style="color: red">不符合下发条件</span> </template> </el-table-column> <el-table-column label="是否授权" min-width="100px"> <template slot-scope="{row}"> <span v-if="row.authStatus == 1" style="color: green">是</span> <span v-if="row.authStatus == 0" style="color: red">否</span> </template> </el-table-column> <el-table-column label="门禁角色" min-width="100px"> <template slot-scope="{row}"> <span>{{(row.roleNames && row.roleNames.length) ?row.roleNames.join(','): '-'}}</span> </template> </el-table-column> <el-table-column label="门禁有效期" min-width="170px"> <template slot-scope="{row}"> <div v-if="row.roleId !=null && row.roleId != ''"> <div v-if="!row.startTime || !row.endTime">长期有效</div> <div v-else> <span>起:{{row.startTime}}</span><br /> <span>止:{{row.endTime}}</span> </div> </div> <div v-else >-</div> </template> </el-table-column> <el-table-column prop="code" label="工号" min-width="100px"></el-table-column> <el-table-column label="卡片" min-width="80px"> <template slot-scope="{row}"> <el-button @click="$refs.cardOpeningRecord.open('开卡记录', row.id)" type="text">{{row.memberCardCount || '0'}}</el-button> </template> </el-table-column> <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column> <el-table-column prop="editDate" label="最后操作时间" min-width="150px"></el-table-column> <el-table-column fixed="right" label="人脸信息" min-width="100px"> <template slot-scope="{row}"> <el-image v-if="row.faceImgFull" style="width: 60px; height: 60px" :src="row.faceImgFull" :preview-src-list="[row.faceImgFull]"> </el-image> </template> </el-table-column> <el-table-column v-if="containPermissions(['business:member:update', 'business:member:delete','business:empower:create'])" label="操作" min-width="280" fixed="right" > <template slot-scope="{row}"> <el-button type="text" icon="el-icon-edit" @click="$refs.OperaMemberWindow.open('编辑员工信息',row,department)" v-permissions="['business:empower:update']">编辑</el-button> <el-button type="text" icon="el-icon-plus" @click="empower(row.id)" v-permissions="['business:empower:create']">重新授权</el-button> <el-button type="text" :loading="heading" style="color: red" icon="el-icon-delete" @click="updateHead(row,0)" v-if="row.headStatus ==1 " v-permissions="['business:member:head']">取消主管</el-button> <el-button type="text" :loading="heading" icon="el-icon-edit" @click="updateHead(row,1)" v-if="row.headStatus == 0" v-permissions="['business:member:head']">设为主管</el-button> <el-button type="text" icon="el-icon-delete" @click="deleteById(row)" style="color: red" v-permissions="['business:member:delete']">删除</el-button> </template> </el-table-column> </el-table> <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination" > </pagination> <!-- 查看人员开卡记录 --> <cardOpeningRecord ref="cardOpeningRecord" @success="handlePageChange" /> <OperaMemberWindow ref="OperaMemberWindow" @success="handlePageChange" /> <OperaMemberImportWindow ref="OperaMemberImportWindow" @success="handlePageChange" /> <OperaMemberRoleWindow ref="OperaMemberRoleWindow" @success="handlePageChange" /> </template> </TableLayout1> <div v-else>-</div> </template> </el-table-column> <el-table-column prop="code" label="工号" min-width="100px"></el-table-column> <el-table-column label="卡片" min-width="80px"> <template slot-scope="{row}"> <el-button @click="$refs.cardOpeningRecord.open('开卡记录', row.id)" type="text">{{ row.memberCardCount || '0'}}</el-button> </template> </el-table-column> <el-table-column prop="editorName" label="操作人" min-width="100px"></el-table-column> <el-table-column prop="editDate" label="最后操作时间" min-width="150px"></el-table-column> <el-table-column fixed="right" label="人脸信息" min-width="100px"> <template slot-scope="{row}"> <el-image v-if="row.faceImgFull" style="width: 60px; height: 60px" :src="row.faceImgFull" :preview-src-list="[row.faceImgFull]"> </el-image> </template> </el-table-column> <el-table-column v-if="containPermissions(['business:member:update', 'business:member:delete', 'business:empower:create'])" label="操作" min-width="280" fixed="right"> <template slot-scope="{row}"> <el-button type="text" icon="el-icon-edit" @click="$refs.OperaMemberWindow.open('编辑员工信息', row, department)" v-permissions="['business:empower:update']">编辑</el-button> <el-button type="text" icon="el-icon-plus" @click="empower(row.id)" v-permissions="['business:empower:create']">重新授权</el-button> <el-button type="text" :loading="heading" style="color: red" icon="el-icon-delete" @click="updateHead(row, 0)" v-if="row.headStatus == 1" v-permissions="['business:member:head']">取消主管</el-button> <el-button type="text" :loading="heading" icon="el-icon-edit" @click="updateHead(row, 1)" v-if="row.headStatus == 0" v-permissions="['business:member:head']">设为主管</el-button> <el-button type="text" icon="el-icon-delete" @click="deleteById(row)" style="color: red" v-permissions="['business:member:delete']">删除</el-button> </template> </el-table-column> </el-table> <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination"> </pagination> <!-- 查看人员开卡记录 --> <cardOpeningRecord ref="cardOpeningRecord" @success="handlePageChange" /> <OperaMemberWindow ref="OperaMemberWindow" @success="handlePageChange" /> <OperaMemberImportWindow ref="OperaMemberImportWindow" @success="handlePageChange" /> <OperaMemberRoleWindow ref="OperaMemberRoleWindow" @success="handlePageChange" /> </template> </TableLayout1> </template> <script> @@ -206,8 +198,8 @@ export default { name: 'internalMember', extends: BaseTable, components: { TableLayout1, Pagination, Tree, cardOpeningRecord, OperaMemberWindow, OperaMemberRoleWindow ,OperaMemberImportWindow}, data () { components: { TableLayout1, Pagination, Tree, cardOpeningRecord, OperaMemberWindow, OperaMemberRoleWindow, OperaMemberImportWindow }, data() { return { TreeList: [], // 搜索 @@ -219,7 +211,7 @@ canVisit: '', keyword: '', type: 2, companyType:1, companyType: 1, erpOrgId: '', companyId: '', hasFace: '' @@ -232,7 +224,7 @@ department: [] } }, created () { created() { this.config({ module: '人员信息表', api: '/business/member', @@ -243,7 +235,7 @@ this.getfindCompanyTreePage() }, methods: { startEmpowerBatch () { startEmpowerBatch() { if (this.tableData.selectedRows.length === 0) { this.$tip.warning('请至少选择一条数据') return @@ -254,9 +246,9 @@ ids.push(item.id) names.push(item.name) }) this.$refs.OperaMemberRoleWindow.open('内部员工下发权限', ids, names,this.searchForm.companyType) this.$refs.OperaMemberRoleWindow.open('内部员工下发权限', ids, names, this.searchForm.companyType) }, empower (id) { empower(id) { var that = this this.$confirm('确定重新授权吗?', '提示', { confirmButtonText: '确定', @@ -273,7 +265,7 @@ }) }, // 获取组织树 getfindCompanyTreePage () { getfindCompanyTreePage() { fetchList() .then(res => { if (res && res.length > 0) { @@ -285,7 +277,7 @@ } }) }, getDepartmentTree (tree) { getDepartmentTree(tree) { if (tree == null) { return [] } @@ -300,16 +292,16 @@ newItem.children = this.getDepartmentTree(newItem.children) } if(newItem.type === this.searchForm.companyType){ if (newItem.type === this.searchForm.companyType) { //newItem.disabled =false }else{ } else { newItem.disabled = true } return newItem }) }, // 同步信息 async synchronous () { async synchronous() { this.$dialog.actionConfirm('该操作降触发全员信息更新和重新下发!请谨慎操作', '您确认全量同步内部人员信息吗?') .then(() => { this.loading = true @@ -325,9 +317,9 @@ this.loading = false }) }) .catch(() => {}) .catch(() => { }) }, async updateHead (row, type) { async updateHead(row, type) { this.$dialog.actionConfirm('您确认进行当前操作吗?', '部门主管设置操作提示') .then(() => { this.heading = true @@ -342,10 +334,10 @@ .finally(() => { this.heading = false }) .catch(() => {}) .catch(() => { }) }) }, changeWorkStatus (e, row) { changeWorkStatus(e, row) { this.working = true updateWorkStatus({ id: row.id, workStatus: e }) .then(res => { @@ -358,9 +350,9 @@ .finally(() => { this.working = false }) .catch(() => {}) .catch(() => { }) }, changeCanvisit (e, row) { changeCanvisit(e, row) { this.canvisiting = true updateCanVisit({ id: row.id, canVisit: e }) .then(res => { @@ -373,9 +365,9 @@ .finally(() => { this.canvisiting = false }) .catch(() => {}) .catch(() => { }) }, callback (row) { callback(row) { console.log(row) this.searchForm.erpOrgId = row.erpId this.searchForm.companyId = row.id @@ -386,26 +378,30 @@ </script> <style lang="scss" scoped> @import '@/assets/style/variables.scss'; .box { width: 100%; display: flex; align-items: center; .box_menu { width: 100px; height: 100%; flex-shrink: 0; } .box_tab { flex: 1; height: 100%; } } .zhuguan{ color: $primary-color; border: 1px solid $primary-color; padding: 0px 3px; border-radius: 4px; margin-left: 6px; } @import '@/assets/style/variables.scss'; .box { width: 100%; display: flex; align-items: center; .box_menu { width: 100px; height: 100%; flex-shrink: 0; } .box_tab { flex: 1; height: 100%; } } .zhuguan { color: $primary-color; border: 1px solid $primary-color; padding: 0px 3px; border-radius: 4px; margin-left: 6px; } </style> admin/src/views/platform/LogisticsRecord/operationCity.vue
@@ -26,7 +26,7 @@ <el-table-column prop="carrierName" label="运输公司" min-width="100" show-overflow-tooltip /> --> <el-table-column prop="driverName" label="驾驶员" min-width="100" show-overflow-tooltip /> <el-table-column prop="drivierPhone" label="联系方式" min-width="100" show-overflow-tooltip /> <el-table-column prop="confirmTaskDate" label="确认时间" min-width="150" show-overflow-tooltip /> <!-- <el-table-column prop="confirmTaskDate" label="确认时间" min-width="150" show-overflow-tooltip /> --> <el-table-column prop="signDate" label="签到时间" min-width="150" show-overflow-tooltip /> <el-table-column prop="callDate" label="叫号时间" min-width="150" show-overflow-tooltip /> <el-table-column prop="startDate" label="作业开始时间" min-width="150" show-overflow-tooltip /> admin/src/views/platform/components/PlatformQueuing.vue
@@ -96,6 +96,7 @@ platformId: activePlat.id }).then(() => { Message.success('叫号成功') this.$emit('success') this.getList() }) } else { admin/src/views/platform/platform.vue
@@ -13,10 +13,10 @@ </el-option> </el-select> </el-form-item> <section> <!-- <section> --> <el-button type="primary" @click="search">搜索</el-button> <el-button @click="reset">重置</el-button> </section> <!-- </section> --> </el-form> </SearchFormCollapse> <!-- 表格和分页 --> h5/manifest.json
@@ -92,8 +92,8 @@ "/admin_interface" : { // 这个字段名需与你配置的basePrefixUrl一致,系统识别到带有/dev-api请求的地址时,会在前面拼接上代理服务器地址 // "target" : "http://172.20.10.7:10010", // 代理服务器域名或IP地址 "target" : "http://192.168.0.100:10010", // 代理服务器域名或IP地址 // "target" : "http://10.50.250.178:8088/gateway_interface", // 代理服务器域名或IP地址 // "target" : "http://192.168.0.100:10010", // 代理服务器域名或IP地址 "target" : "http://10.50.250.178:8088/gateway_interface", // 代理服务器域名或IP地址 "changeOrigin" : true, // 允许跨域 "pathRewrite" : { "^/admin_interface" : "" h5/pages/driver/index.vue
@@ -40,10 +40,11 @@ </view> </view> <view class="sub"> <view class="time" v-if="item.arriveDate">{{ item.arriveDate.slice(5) }}</view> <view class="time" v-if="item.arriveDate && item.type == 4">{{ item.arriveDate.slice(5) }}</view> <view class="time" v-if="item.type != 4 && item.platformWmsJob && item.platformWmsJob.ioCreatedate">{{ item.platformWmsJob.ioCreatedate.slice(5, 19) }}</view> <view v-if="item.status == 0" class="sub_btn">确认任务</view> <view v-if="item.status == 1" class="sub_btn">立即签到</view> <view v-if="item.status == 2" class="sub_btn">查看排队</view> <view v-if="item.status == 2" class="sub_btn" @click.stop="handleQueue(item)">查看排队</view> </view> </view> </view> @@ -129,9 +130,11 @@ console.log(item); if(status == 0){ uni.navigateTo({url: '/pages/driver/taskConfirm?id=' + item.id}); }else if(status == 2){ uni.navigateTo({url:'/pages/driver/queueUp?jobId=' + item.id}) }else{ } // else if(status == 2){ // uni.navigateTo({url:'/pages/driver/queueUp?jobId=' + item.id}) // } else{ uni.navigateTo({url: `/pages/driver/taskDetail?id=${item.id}&status=${item.status}`}); } }, @@ -317,7 +320,8 @@ display: flex; justify-content: space-between; align-items: center; padding: 0 30rpx 24rpx; height: 68rpx; padding: 0 30rpx 0; .time { font-size: 26rpx; color: #999999; h5/pages/driver/login.vue
@@ -38,7 +38,7 @@ return { form: { username: '18056814089', password: '1' password: '123456' }, isShowProtocol: false, countDown: 0 h5/pages/driver/queueUp.vue
@@ -68,7 +68,7 @@ driverLineUpDetail({ mobile: jobId ? '' : uni.getStorageSync('driverInfo').mobile, queryType: jobId ? 1 : 0, jobId: jobId jobId: jobId, }).then(res => { this.platformGroupList = res.data.platformGroupList if (res.data && res.data.platformGroupList && res.data.platformGroupList.length > 0) { h5/pages/driver/taskDetail.vue
@@ -1,485 +1,546 @@ <template> <view class="main_app"> <view class="status_wrap"> <image class="bg" src="../../static/driver/bg_renwu@2x.png" mode="" ></image> <view class="name" v-if="param.status == 1">请与{{ param.arriveDate.slice(0,11) }}现场签到</view> <view class="name" v-if="param.status == 2">前方排队:{{param.lineUpNum}}辆</view> <view class="name" v-if="param.status == 5">月台作业中</view> <view class="name" v-if="param.status == 6">作业已完成</view> <view class="id_card">{{ param.carCodeFront }}</view> <view class="status">{{statusMap[param.status]}}</view> </view> <!-- --> <view class="main_content"> <view class="line"> <view class="label">司机姓名</view> <view class="value">{{param.driverName}}</view> </view> <view class="line"> <view class="label">手机号</view> <view class="value">{{param.drivierPhone}}</view> </view> <template v-if="param.type != 4"> <view class="line"> <view class="label">运输单号</view> <view class="value" @click="showDetail = true"> <text class="waybill_num">{{param.billCode}}</text> <text class="btn">运单详情</text> </view> </view> <view class="line"> <view class="label">作业类型</view> <view class="value">市公司外协车卸货</view> </view> </template> <template v-else> <view class="line"> <view class="label">合同编号</view> <view class="value">{{param.contractNum}}</view> </view> <view class="line"> <view class="label">入库类型</view> <view class="value">{{param.inType == 0 ? '整托盘' : '件烟'}}</view> </view> <view class="line"> <view class="label">作业量</view> <view class="value">{{param.totalNum}}万支</view> </view> </template> <view class="line"> <view class="label">车牌照</view> <view class="value">前:{{param.carCodeFront}} | 后:{{param.carCodeBack}}</view> </view> <!-- --> <view class="line" v-if="param.status == 1"> <view class="label">距离园区</view> <view class="value"> <view class="">{{param.getDistance}}公里</view> <view class="btn" @click="getLocation"> <image class="icon mr6" src="../../static/driver/position.png"></image> 重新定位 </view> </view> </view> <view class="line" v-if="param.signDate"> <view class="label">签到时间</view> <view class="value">{{param.signDate}}</view> </view> <view class="line" v-if="param.startDate"> <view class="label">开始作业</view> <view class="value">{{param.startDate}}</view> </view> <view class="line" v-if="param.doneDate"> <view class="label">作业完成</view> <view class="value">{{param.doneDate}}</view> </view> <view v-if="param.status == 1" class="warnning"> <u-icon name="info-circle" color="#ED4545" class="mr12"></u-icon> 如无法获取定位,请用微信扫描园区大屏二维 </view> <!-- <view class="line"> <view class="label">签到时间</view> <view class="value">2022</view> </view> <view class="line"> <view class="label">入园时间</view> <view class="value">2022</view> </view> <view class="line"> <view class="label">作业完成</view> <view class="value">2022</view> </view> --> <view v-if="param.status == 1" class="signIn_wrap" @click="handleSignIn"> <image :src=" param.getDistance < signDistance ? require('@/static/driver/btn_qiandao@2x.png') : require('@/static/driver/btn_qiandao_fail@2x.png') " class="img" mode="widthFix" ></image> <view class="handle">{{ param.getDistance > signDistance ? '无法签到' : '签到' }}</view> <view class="time">{{nowTime}}</view> </view> </view> <view class="space"></view> <!-- 等待叫号 --> <view v-if="param.status == 2" class="padding_wrap"> <view class="btn check" @click="handleQueue">查看排队情况</view> </view> <!-- modal --> <u-popup :show="showDetail" :round="10" :safeAreaInsetBottom="true" closeOnClickOverlay :closeable="true" mode="bottom" @close="showDetail = false" > <view class="detail_modal"> <view class="modal_title">运单详情</view> <view class="id_card"> <view class="last">皖</view> <view class="name">AD1111</view> </view> <!-- --> <view class="info"> <view class="line"> <view class="label">运输单号</view> <view class="value">2222</view> </view> <view class="line"> <view class="label">驾驶员</view> <view class="value">2222</view> </view> <view class="line"> <view class="label">总运输量</view> <view class="value">2222</view> </view> <view class="line"> <view class="label">运输公司</view> <view class="value">2222</view> </view> </view> <view class="separate"></view> <view class="contract_list"> <view class="title">合同号:111</view> <view class="address">aadd</view> <view class="list"> <view class="line"> <view class="label">物料:</view> <view class="value">黄山黑马</view> </view> <view class="line"> <view class="label">数量:</view> <view class="value">黄山黑马</view> </view> <view class="line"> <view class="label">物料:</view> <view class="value">黄山黑马</view> </view> <view class="line"> <view class="label">数量:</view> <view class="value">黄山黑马</view> </view> </view> </view> </view> </u-popup> </view> </template> <script> import { driverTaskJobDetail, driverSignInTask } from '@/api'; import { statusMap } from '@/utils/config.js'; import dayjs from 'dayjs'; export default { data() { return { statusMap, param: { status: '0' }, jobId: '', // lat: '', // lnt: '', lat: '31.783205', lnt: '117.262635', nowTime: '', signDistance: uni.getStorageSync('driverGuide').signDistance, showDetail: false, } }, onLoad(option) { this.jobId = option.id // if(option.status && option.status == '1'){ // this.getLocation() // }else{ // this.getDetail() // } this.getDetail() setInterval(() => { this.nowTime = dayjs().format('HH:mm:ss') }) }, methods: { handleSignIn() { const { param, signDistance, lat, lnt, jobId } = this if(param.getDistance > signDistance) return driverSignInTask({ jobId, lat, lnt,signType: 0 }).then(res => { this.showToast('签到成功') this.getDetail() }) }, getDetail() { const { jobId, lat, lnt } = this driverTaskJobDetail({ jobId: this.jobId, lat, lnt }).then(ress => { this.param = { ...ress.data } }) }, getLocation() { const { jobId } = this uni.getLocation({ type: 'wgs84', success: (res) => { this.lat = res.latitude this.lnt = res.longitude this.getDetail() }, fail:(err) => { this.showToast('获取定位失败') } }) }, handleQueue() { uni.navigateTo({ url:'/pages/driver/queueUp?jobId=' + this.jobId }) }, } } </script> <style lang="scss"> .main_app { padding: 0; .main_content { background: #ffffff; border-radius: 20rpx 20rpx 0rpx 0rpx; padding: 16rpx 30rpx; position: relative; bottom: 32rpx; z-index: 999; .line { padding: 24rpx 0 28rpx; border-bottom: 1rpx solid #e5e5e5; display: flex; .label { width: 150rpx; font-size: 30rpx; color: #666666; } .value { flex: 1; display: flex; justify-content: space-between; align-items: center; font-size: 30rpx; .waybill_num { flex: 1; } .btn { font-size: 28rpx; color: $uni-color-primary; display: flex; align-items: center; .icon{ width: 30rpx; height: 30rpx; } } } } .warnning { display: flex; color: #ed4545; align-items: center; margin: 40rpx 0; } .signIn_wrap { margin: 80rpx auto; width: 260rpx; height: 260rpx; position: relative; color: #fff; z-index: 1; display: flex; flex-direction: column; justify-content: center; align-items: center; .handle { font-weight: 600; font-size: 40rpx; line-height: 56rpx; } .time { color: rgba(255, 255, 255, 0.7); } .img { position: absolute; top: 0; left: 0; width: 100%; z-index: -1; } } } .status_wrap { height: 200rpx; width: 100%; padding: 30rpx; position: relative; color: #fff; .bg { width: 100%; height: 100%; position: absolute; top: 0; left: 0; z-index: -1; } .name { font-weight: 600; font-size: 40rpx; line-height: 56rpx; margin-bottom: 12rpx; } .id_card { color: rgba(255, 255, 255, 0.8); } .status { position: absolute; right: 0; top: 30rpx; height: 68rpx; line-height: 68rpx; background: #ffffff; padding: 0 24rpx; border-radius: 34rpx 0rpx 0rpx 34rpx; font-size: 26rpx; color: $uni-color-primary; } } .space { width: 750rpx; height: 200rpx; } .padding_wrap { position: fixed; z-index: 999; padding: 0 30rpx 64rpx; bottom: 0; left: 0; width: 100%; display: flex; justify-content: space-between; .btn { height: 96rpx; line-height: 96rpx; text-align: center; width: 100%; font-size: 36rpx; color: #333333; background: #ffffff; border-radius: 48rpx; border: 1rpx solid #999999; } .check { background: $uni-color-primary; border: 1rpx solid $uni-color-primary; color: #fff; } } } .detail_modal { padding: 36rpx 30rpx; .modal_title { font-weight: 600; font-size: 32rpx; color: #222222; line-height: 44rpx; text-align: center; margin-bottom: 36rpx; } .contract_list { .list { background: #f7f7f7; border-radius: 8rpx; padding: 20rpx; .line { display: flex; margin-bottom: 20rpx; &:nth-of-type(3n) { border-top: 1rpx solid #e5e5e5; padding-top: 20rpx; } .label { color: #666666; width: 86rpx; } .value { flex: 1; color: #222222; } } } .title { font-weight: 600; font-size: 30rpx; color: $uni-color-primary; margin-bottom: 12rpx; } .address { font-size: 26rpx; color: #666666; margin-bottom: 20rpx; } } .info { .line { display: flex; margin-bottom: 20rpx; .label { font-size: 30rpx; color: #666666; width: 150rpx; } .value { flex: 1; font-size: 30rpx; color: #222222; } } } .separate { width: 750rpx; height: 2rpx; margin: 30rpx -30rpx; border: 1rpx solid #e5e5e5; } .id_card { border-radius: 8rpx; display: flex; height: 60rpx; line-height: 60rpx; font-weight: 600; font-size: 36rpx; color: #111111; text-align: center; margin-bottom: 30rpx; .last { background: #e9f5f6; width: 60rpx; border-radius: 8rpx 0rpx 0rpx 8rpx; border: 1rpx solid #dfdede; } .name { width: 186rpx; border: 1rpx solid #dfdede; } } } </style> <template> <view class="main_app"> <view class="status_wrap"> <image class="bg" src="../../static/driver/bg_renwu@2x.png" mode=""></image> <view class="name" v-if="param.status == 1">请与{{ param.arriveDate.slice(0,11) }}现场签到</view> <view class="name" v-if="param.status == 2">前方排队:{{param.lineUpNum}}辆</view> <view class="name" v-if="param.status == 3">入园等待</view> <view class="name" v-if="param.status == 5">月台作业中</view> <view class="name" v-if="param.status == 6">作业已完成</view> <view class="id_card">{{ param.carCodeFront }}</view> <view class="status">{{statusMap[param.status]}}</view> </view> <!-- --> <view class="main_content"> <view class="line"> <view class="label">司机姓名</view> <view class="value">{{param.driverName}}</view> </view> <view class="line"> <view class="label">手机号</view> <view class="value">{{param.drivierPhone}}</view> </view> <template v-if="param.type != 4"> <view class="line"> <view class="label">运输单号</view> <view class="value" @click="wmsDetail"> <text class="waybill_num">{{param.billCode}}</text> <text class="btn">运单详情</text> </view> </view> <view class="line"> <view class="label">作业类型</view> <view class="value" v-if="param.type == 0">自有车卸货</view> <view class="value" v-if="param.type == 1">自有车装货</view> <view class="value" v-if="param.type == 2">外协车卸货</view> <view class="value" v-if="param.type == 3">外协车装货</view> </view> </template> <template v-else> <view class="line"> <view class="label">合同编号</view> <view class="value">{{param.contractNum}}</view> </view> <view class="line"> <view class="label">入库类型</view> <view class="value">{{param.inType == 0 ? '整托盘' : '件烟'}}</view> </view> <view class="line"> <view class="label">作业量</view> <view class="value">{{param.totalNum}}万支</view> </view> </template> <view class="line"> <view class="label">车牌照</view> <view class="value">前:{{param.carCodeFront}} | 后:{{param.carCodeBack}}</view> </view> <!-- --> <view class="line" v-if="param.status == 1"> <view class="label">距离园区</view> <view class="value"> <view class="">{{param.getDistance}}公里</view> <view class="btn" @click="getLocation"> <image class="icon mr6" src="../../static/driver/position.png"></image> 重新定位 </view> </view> </view> <view class="line" v-if="param.signDate"> <view class="label">签到时间</view> <view class="value">{{param.signDate}}</view> </view> <view class="line" v-if="param.startDate"> <view class="label">开始作业</view> <view class="value">{{param.startDate}}</view> </view> <view class="line" v-if="param.doneDate"> <view class="label">作业完成</view> <view class="value">{{param.doneDate}}</view> </view> <view v-if="param.status == 1" class="warnning"> <u-icon name="info-circle" color="#ED4545" class="mr12"></u-icon> 如无法获取定位,请用微信扫描园区大屏二维 </view> <!-- <view class="line"> <view class="label">签到时间</view> <view class="value">2022</view> </view> <view class="line"> <view class="label">入园时间</view> <view class="value">2022</view> </view> <view class="line"> <view class="label">作业完成</view> <view class="value">2022</view> </view> --> <view v-if="param.status == 1" class="signIn_wrap" @click="handleSignIn"> <image :src=" param.getDistance < signDistance ? require('@/static/driver/btn_qiandao@2x.png') : require('@/static/driver/btn_qiandao_fail@2x.png') " class="img" mode="widthFix"></image> <view class="handle">{{ param.getDistance > signDistance ? '无法签到' : '签到' }}</view> <view class="time">{{nowTime}}</view> </view> </view> <view class="space"></view> <!-- 等待叫号 --> <view v-if="param.status == 2" class="padding_wrap"> <view class="btn check" @click="handleQueue">查看排队情况</view> </view> <!-- modal --> <u-popup :show="showDetail" :round="10" :safeAreaInsetBottom="true" closeOnClickOverlay :closeable="true" mode="bottom" @close="showDetail = false"> <view class="detail_modal"> <view class="modal_title">运单详情</view> <view v-if="wmsInfo.plateNumber" class="id_card"> <text>{{ wmsInfo.plateNumber.slice(0, 1) }}</text> <text>{{ wmsInfo.plateNumber.slice(1, 2) }}</text> <text>·</text> <text>{{ wmsInfo.plateNumber.slice(2) }}</text> </view> <!-- --> <view class="info"> <view class="line"> <view class="label">运输单号</view> <view class="value">{{ wmsInfo.carryBillCode }}</view> </view> <view class="line"> <view class="label">驾驶员</view> <view class="value">{{ wmsInfo.driverName }} {{ wmsInfo.driverPhone }}</view> </view> <view class="line"> <view class="label">总运输量</view> <view class="value">{{ wmsInfo.ioQty }}万支</view> </view> <view class="line"> <view class="label">运输公司</view> <view class="value">{{ wmsInfo.carrierName }}</view> </view> </view> <view class="separate"></view> <view class="contract_list" v-for="item in wmsInfo.wmsJobContractVOList"> <view class="title">合同号:{{ item.contractCode }}</view> <view class="address">收货地:{{ item.address }}</view> <view class="list"> <view class="item" v-for="line in item.platformWmsDetailList"> <view class="line"> <view class="label">物料:</view> <view class="value">{{ line.materialName }}</view> </view> <view class="line"> <view class="label">数量:</view> <view class="value">{{ line.ioQty }}</view> </view> </view> </view> </view> </view> </u-popup> </view> </template> <script> import { driverTaskJobDetail, driverSignInTask, wmsJobDetail } from '@/api'; import { statusMap } from '@/utils/config.js'; import dayjs from 'dayjs'; export default { data() { return { statusMap, param: { status: '0' }, jobId: '', // lat: '', // lnt: '', lat: '31.783205', lnt: '117.262635', nowTime: '', wmsInfo: {}, signDistance: uni.getStorageSync('driverGuide').signDistance, showDetail: false, } }, onLoad(option) { this.jobId = option.id // if(option.status && option.status == '1'){ // this.getLocation() // }else{ // this.getDetail() // } this.getDetail() setInterval(() => { this.nowTime = dayjs().format('HH:mm:ss') }) }, methods: { handleSignIn() { const { param, signDistance, lat, lnt, jobId } = this if (param.getDistance > signDistance) return driverSignInTask({ jobId, lat, lnt, signType: 0 }).then(res => { this.showToast('签到成功') this.getDetail() }) }, getDetail() { const { jobId, lat, lnt } = this driverTaskJobDetail({ jobId: this.jobId, lat, lnt }).then(ress => { this.param = { ...ress.data } }) }, wmsDetail() { const { param } = this wmsJobDetail({ id: param.id }).then(res => { this.wmsInfo = res.data this.showDetail = true }) }, getLocation() { const { jobId } = this uni.getLocation({ type: 'wgs84', success: (res) => { this.lat = res.latitude this.lnt = res.longitude this.getDetail() }, fail: (err) => { this.showToast('获取定位失败') } }) }, handleQueue() { uni.navigateTo({ url: '/pages/driver/queueUp?jobId=' + this.jobId }) }, } } </script> <style lang="scss"> .main_app { padding: 0; .main_content { background: #ffffff; border-radius: 20rpx 20rpx 0rpx 0rpx; padding: 16rpx 30rpx; position: relative; bottom: 32rpx; z-index: 999; .line { padding: 24rpx 0 28rpx; border-bottom: 1rpx solid #e5e5e5; display: flex; .label { width: 150rpx; font-size: 30rpx; color: #666666; } .value { flex: 1; display: flex; justify-content: space-between; align-items: center; font-size: 30rpx; .waybill_num { flex: 1; } .btn { font-size: 28rpx; color: $uni-color-primary; display: flex; align-items: center; .icon { width: 30rpx; height: 30rpx; } } } } .warnning { display: flex; color: #ed4545; align-items: center; margin: 40rpx 0; } .signIn_wrap { margin: 80rpx auto; width: 260rpx; height: 260rpx; position: relative; color: #fff; z-index: 1; display: flex; flex-direction: column; justify-content: center; align-items: center; .handle { font-weight: 600; font-size: 40rpx; line-height: 56rpx; } .time { color: rgba(255, 255, 255, 0.7); } .img { position: absolute; top: 0; left: 0; width: 100%; z-index: -1; } } } .status_wrap { height: 200rpx; width: 100%; padding: 30rpx; position: relative; color: #fff; .bg { width: 100%; height: 100%; position: absolute; top: 0; left: 0; z-index: -1; } .name { font-weight: 600; font-size: 40rpx; line-height: 56rpx; margin-bottom: 12rpx; } .id_card { color: rgba(255, 255, 255, 0.8); } .status { position: absolute; right: 0; top: 30rpx; height: 68rpx; line-height: 68rpx; background: #ffffff; padding: 0 24rpx; border-radius: 34rpx 0rpx 0rpx 34rpx; font-size: 26rpx; color: $uni-color-primary; } } .space { width: 750rpx; height: 200rpx; } .padding_wrap { position: fixed; z-index: 999; padding: 0 30rpx 64rpx; bottom: 0; left: 0; width: 100%; display: flex; justify-content: space-between; .btn { height: 96rpx; line-height: 96rpx; text-align: center; width: 100%; font-size: 36rpx; color: #333333; background: #ffffff; border-radius: 48rpx; border: 1rpx solid #999999; } .check { background: $uni-color-primary; border: 1rpx solid $uni-color-primary; color: #fff; } } } .detail_modal { padding: 36rpx 30rpx; .modal_title { font-weight: 600; font-size: 32rpx; color: #222222; line-height: 44rpx; text-align: center; margin-bottom: 36rpx; } .contract_list { .list { background: #f7f7f7; border-radius: 8rpx; padding: 20rpx; .line { display: flex; margin-bottom: 20rpx; &:nth-of-type(3n) { border-top: 1rpx solid #e5e5e5; padding-top: 20rpx; } .label { color: #666666; width: 86rpx; } .value { flex: 1; color: #222222; } } } .title { font-weight: 600; font-size: 30rpx; color: $uni-color-primary; margin-bottom: 12rpx; } .address { font-size: 26rpx; color: #666666; margin-bottom: 20rpx; } } .info { .line { display: flex; margin-bottom: 20rpx; .label { font-size: 30rpx; color: #666666; width: 150rpx; } .value { flex: 1; font-size: 30rpx; color: #222222; } } } .separate { width: 750rpx; height: 2rpx; margin: 30rpx -30rpx; border: 1rpx solid #e5e5e5; } .id_card { display: flex; font-weight: 600; height: 60rpx; line-height: 60rpx; font-size: 32rpx; color: #111111; border-radius: 8rpx; border: 1rpx solid #dfdede; width: 220rpx; margin-bottom: 15rpx; text { &:nth-of-type(1) { background: #e9f5f6; padding: 0 12rpx; } &:nth-of-type(2) { padding-left: 10rpx; } &:nth-of-type(4) { padding-right: 6rpx; } } } } </style> pda/api/index.js
@@ -149,4 +149,12 @@ method: 'post', data }) } // wms运单详情 export const wmsJobDetail = (data) => { return http({ url: 'visitsAdmin/cloudService/web/pdaPlatform/wmsJobDetail', method: 'get', data }) } pda/manifest.json
@@ -18,8 +18,8 @@ "proxy": { "/gateway_interface": { // 这个字段名需与你配置的basePrefixUrl一致,系统识别到带有/dev-api请求的地址时,会在前面拼接上代理服务器地址 // "target" : "http://10.50.250.178:8088/gateway_interface", // 代理服务器域名或IP地址 "target": "http://192.168.0.100:10010", // 代理服务器域名或IP地址 "target" : "http://10.50.250.178:8088/gateway_interface", // 代理服务器域名或IP地址 // "target": "http://192.168.0.100:10010", // 代理服务器域名或IP地址 "changeOrigin": true, // 允许跨域 "pathRewrite": { "^/gateway_interface": "" // 重写地址,如果实际接口中是不带/dev-api,需要将这个前缀置空,因为这个前缀只是为了识别用,识别完之后就没用了 pda/pages/index/center.vue
@@ -6,7 +6,8 @@ <view class="platform_list"> <view class="item" :class="{ active: item.id === activePlatform.id }" v-for="(item, index) in activePlatformGroup.platformList" :key="index" @click="platformClick(item)"> {{ item.name }}</view> {{ item.name }} </view> </view> <view class="status_wrap"> <view class="status">作业:<text>{{ platformTaskInfo.workNum }}</text></view> @@ -26,7 +27,8 @@ <text>{{ item.carCodeFront.slice(2) }}</text> </view> <view class="status" v-if="item.status != 4 && item.status != 5" :class="{ red: item.status == 8 }"> {{ statusMap[item.status] }}</view> {{ statusMap[item.status] }} </view> <view class="status" v-if="item.status == 4">叫号中 {{ item.callDateTemp }}</view> <view class="status scs" v-if="item.status == 5">已作业 {{ item.startDateTemp }}</view> </view> @@ -37,7 +39,7 @@ <view class="line" v-else> <text class="label">运输单号</text> <text class="value">{{ item.code }}</text> <text class="primaryColor" @click="handleDetail()">运单详情</text> <text class="primaryColor" @click="handleDetail(item)">运单详情</text> </view> <view class="line"> <text class="label">驾驶员</text> @@ -100,8 +102,8 @@ </view> <view class="line" v-else> <text class="label">运输单号</text> <text class="value">{{ item.code }}</text> <text class="primaryColor" @click="handleDetail()">运单详情</text> <text class="value">{{ item.billCode }}</text> <text class="primaryColor" @click="handleDetail(item)">运单详情</text> </view> <view class="line"> <text class="label">驾驶员</text> @@ -124,53 +126,48 @@ </view> </u-popup> <!-- 运单详情 --> <u-popup :show="showDetail" closeable safeAreaInsetTop round="10" @close="showDetail = false"> <view class="PlatformCallModal" :style="{ height: 'calc(100vh - ' + windowTop + 'px)' }"> <view class="title">运单详情</view> <view class="platform_ing" style="padding: 0"> <view class="head"> <view class="code"> <text>皖</text> <text>AD1212</text> </view> <u-popup :show="showDetail" :round="10" :safeAreaInsetBottom="true" closeOnClickOverlay :closeable="true" mode="bottom" @close="showDetail = false"> <view class="detail_modal"> <view class="modal_title">运单详情</view> <view v-if="wmsInfo.plateNumber" class="id_card"> <text>{{ wmsInfo.plateNumber.slice(0, 1) }}</text> <text>{{ wmsInfo.plateNumber.slice(1, 2) }}</text> <text>·</text> <text>{{ wmsInfo.plateNumber.slice(2) }}</text> </view> <!-- --> <view class="info"> <view class="line"> <view class="label">运输单号</view> <view class="value">{{ wmsInfo.carryBillCode }}</view> </view> <view class="line"> <text class="label">运输单号</text> <text class="value">11111</text> <view class="label">驾驶员</view> <view class="value">{{ wmsInfo.driverName }} {{ wmsInfo.driverPhone }}</view> </view> <view class="line"> <text class="label">驾驶员</text> <text class="value">11111</text> <view class="label">总运输量</view> <view class="value">{{ wmsInfo.ioQty }}万支</view> </view> <view class="line"> <text class="label">总运输量</text> <text class="value">11111</text> </view> <view class="line"> <text class="label">运输公司</text> <text class="value">11111</text> <view class="label">运输公司</view> <view class="value">{{ wmsInfo.carrierName }}</view> </view> </view> <view class="detail_list"> <view class="item"> <view class="orderId">合同编号:{{ 111 }}</view> <view class="addr">收货地:{{ 111 }}</view> <view class="content"> <view class="separate"></view> <view class="contract_list" v-for="item in wmsInfo.wmsJobContractVOList"> <view class="title">合同号:{{ item.contractCode }}</view> <view class="address">收货地:{{ item.address }}</view> <view class="list"> <view class="item" v-for="line in item.platformWmsDetailList"> <view class="line"> <view class="label">物料:</view> <view class="value">黄山</view> <view class="value">{{ line.materialName }}</view> </view> <view class="line"> <view class="label">数量:</view> <view class="value">黄山</view> </view> <view class="line"> <view class="label">物料:</view> <view class="value">黄山</view> </view> <view class="line"> <view class="label">数量:</view> <view class="value">黄山</view> <view class="value">{{ line.ioQty }}万支</view> </view> </view> </view> @@ -213,7 +210,8 @@ finishWork, platformMove, platformErr, platformOverNumber platformOverNumber, wmsJobDetail } from '@/api' import { statusMap @@ -245,6 +243,7 @@ transformPlatId: '', // 转移记录月台id transformId: '', // 转移记录任务id wmsInfo: {} } }, onLoad() { @@ -317,8 +316,13 @@ this.activePlatform = item this.getPlatformTask() }, handleDetail() { this.showDetail = true handleDetail(param) { wmsJobDetail({ id: param.id }).then(res => { this.wmsInfo = res.data this.showDetail = true }) }, handleFinish(item) { finishWork({ @@ -362,7 +366,8 @@ this.platformCallPage = 1 if (callType == 1) { // 入园叫号 platformInPark({ jobId: item.id jobId: item.id, platformId: activePlatform.id }).then(res => { this.showToast('叫号成功') this.getPlatformCallList() @@ -848,4 +853,112 @@ } } } .detail_modal { padding: 36rpx 30rpx; .modal_title { font-weight: 600; font-size: 32rpx; color: #222222; line-height: 44rpx; text-align: center; margin-bottom: 36rpx; } .contract_list { .list { background: #f7f7f7; border-radius: 8rpx; padding: 20rpx; .line { display: flex; margin-bottom: 20rpx; &:nth-of-type(3n) { border-top: 1rpx solid #e5e5e5; padding-top: 20rpx; } .label { color: #666666; width: 92rpx; } .value { flex: 1; color: #222222; } } } .title { font-weight: 600; font-size: 30rpx; color: $uni-color-primary; margin-bottom: 12rpx; } .address { font-size: 26rpx; color: #666666; margin-bottom: 20rpx; } } .info { .line { display: flex; margin-bottom: 20rpx; .label { font-size: 30rpx; color: #666666; width: 150rpx; } .value { flex: 1; font-size: 30rpx; color: #222222; } } } .separate { width: 750rpx; height: 2rpx; margin: 30rpx -30rpx; border: 1rpx solid #e5e5e5; } .id_card { display: flex; font-weight: 600; height: 60rpx; line-height: 60rpx; font-size: 32rpx; color: #111111; border-radius: 8rpx; border: 1rpx solid #dfdede; width: 220rpx; margin-bottom: 15rpx; text { &:nth-of-type(1) { background: #e9f5f6; padding: 0 12rpx; } &:nth-of-type(2) { padding-left: 10rpx; } &:nth-of-type(4) { padding-right: 6rpx; } } } } </style> pda/pages/index/queueup.vue
@@ -44,8 +44,8 @@ </view> <view class="line" v-else> <text class="label">运输单号</text> <text class="value">{{ item.code }}</text> <text class="primaryColor" @click="handleDetail()">运单详情</text> <text class="value">{{ item.billCode }}</text> <text class="primaryColor" @click="handleDetail(item)">运单详情</text> </view> <view class="line"> <text class="label">驾驶员</text> @@ -70,7 +70,55 @@ <text>暂无作业车辆</text> </view> </view> <u-picker <u-popup :show="showDetail" :round="10" :safeAreaInsetBottom="true" closeOnClickOverlay :closeable="true" mode="bottom" @close="showDetail = false"> <view class="detail_modal"> <view class="modal_title">运单详情</view> <view v-if="wmsInfo.plateNumber" class="id_card"> <text>{{ wmsInfo.plateNumber.slice(0, 1) }}</text> <text>{{ wmsInfo.plateNumber.slice(1, 2) }}</text> <text>·</text> <text>{{ wmsInfo.plateNumber.slice(2) }}</text> </view> <!-- --> <view class="info"> <view class="line"> <view class="label">运输单号</view> <view class="value">{{ wmsInfo.carryBillCode }}</view> </view> <view class="line"> <view class="label">驾驶员</view> <view class="value">{{ wmsInfo.driverName }} {{ wmsInfo.driverPhone }}</view> </view> <view class="line"> <view class="label">总运输量</view> <view class="value">{{ wmsInfo.ioQty }}万支</view> </view> <view class="line"> <view class="label">运输公司</view> <view class="value">{{ wmsInfo.carrierName }}</view> </view> </view> <view class="separate"></view> <view class="contract_list" v-for="item in wmsInfo.wmsJobContractVOList"> <view class="title">合同号:{{ item.contractCode }}</view> <view class="address">收货地:{{ item.address }}</view> <view class="list"> <view class="item" v-for="line in item.platformWmsDetailList"> <view class="line"> <view class="label">物料:</view> <view class="value">{{ line.materialName }}</view> </view> <view class="line"> <view class="label">数量:</view> <view class="value">{{ line.ioQty }}万支</view> </view> </view> </view> </view> </view> </u-popup> <u-picker :show="showPlatformgroup" keyName="name" :columns="[platformGroupList]" @@ -81,7 +129,7 @@ </template> <script> import { platformLineUpPage, getPlatformGroupList } from '@/api' import { platformLineUpPage, getPlatformGroupList, wmsJobDetail } from '@/api' export default { data() { return { @@ -92,6 +140,7 @@ total: 0, carCodeFront: '', platformGroup: {}, wmsInfo: {}, platformGroupList: [], platformLineUpList: [] } @@ -105,8 +154,11 @@ } }, methods: { handleDetail() { this.showDetail = true handleDetail(param) { wmsJobDetail({ id: param.id }).then(res => { this.wmsInfo = res.data this.showDetail = true }) }, getPlatformGroup() { getPlatformGroupList({ @@ -123,7 +175,7 @@ getList() { const { page, capacity, platformGroup, carCodeFront } = this platformLineUpPage({ capacity, page, model: { platformGroupId: platformGroup.id, callType: 2, carCodeFront } capacity, page, model: { platformGroupId: platformGroup.id, callType: 3, carCodeFront } }).then(res => { if (res.data) { this.platformLineUpList = [...this.platformLineUpList, ...res.data.records || []] @@ -258,4 +310,111 @@ } } } .detail_modal { padding: 36rpx 30rpx; .modal_title { font-weight: 600; font-size: 32rpx; color: #222222; line-height: 44rpx; text-align: center; margin-bottom: 36rpx; } .contract_list { .list { background: #f7f7f7; border-radius: 8rpx; padding: 20rpx; .line { display: flex; margin-bottom: 20rpx; &:nth-of-type(3n) { border-top: 1rpx solid #e5e5e5; padding-top: 20rpx; } .label { color: #666666; width: 86rpx; } .value { flex: 1; color: #222222; } } } .title { font-weight: 600; font-size: 30rpx; color: $uni-color-primary; margin-bottom: 12rpx; } .address { font-size: 26rpx; color: #666666; margin-bottom: 20rpx; } } .info { .line { display: flex; margin-bottom: 20rpx; .label { font-size: 30rpx; color: #666666; width: 150rpx; } .value { flex: 1; font-size: 30rpx; color: #222222; } } } .separate { width: 750rpx; height: 2rpx; margin: 30rpx -30rpx; border: 1rpx solid #e5e5e5; } .id_card { display: flex; font-weight: 600; height: 60rpx; line-height: 60rpx; font-size: 32rpx; color: #111111; border-radius: 8rpx; border: 1rpx solid #dfdede; width: 220rpx; margin-bottom: 15rpx; text { &:nth-of-type(1) { background: #e9f5f6; padding: 0 12rpx; } &:nth-of-type(2) { padding-left: 10rpx; } &:nth-of-type(4) { padding-right: 6rpx; } } } } </style>