admin/src/components/business/OperaCarUseBookWindow.vue
@@ -1,18 +1,14 @@ <template> <GlobalWindow :title="title" :visible.sync="visible" @confirm="confirm" > <GlobalWindow :title="title" :visible.sync="visible" @confirm="confirm"> <div class="modal_wrap"> <div class="modal_content"> <div class="header"> <div class="left"> <div class="h1">公务车申请</div> <div class="time">提交时间:{{model.createDate}}</div> <div class="time">提交时间:{{ model.createDate }}</div> </div> <span class="right" v-if="model.status === 0">申请中</span> <span class="right" v-if="model.status === 1">审批中</span> <span class="right" v-if="model.status === 0">申请中</span> <span class="right" v-if="model.status === 1">审批中</span> <span class="right" style="background:#53b76f " v-if="model.status === 2">审批通过</span> <span class="right" style="background:#dc362e " v-if="model.status === 3">审批不通过</span> <span class="right" style="background:#B2B2B2; " v-if="model.status === 4">已撤销</span> @@ -22,86 +18,98 @@ <div class="list"> <div class="item" style="width: 100%"> <div class="label">申请人</div> <div class="value">{{model.memberName || ''}} {{model.memberPhone || ''}} ({{model.companyName || ''}})</div> <div class="value">{{ model.memberName || '' }} {{ model.memberPhone || '' }} ({{ model.companyName || '' }}) </div> </div> <div class="item"> <div class="label">申请车辆</div> <div class="value">{{model.carCode || ''}}</div> <div class="value">{{ model.carCode || '' }}</div> </div> <div class="item"> <div class="label">司机信息</div> <div class="value" v-if="model.driverId !=null">{{model.driverName || ''}} {{model.driverPhone || ''}}</div> <div class="value" v-if="model.driverId ==null">未指派</div> <div class="value" v-if="model.driverId != null">{{ model.driverName || '' }} {{ model.driverPhone || '' }} </div> <div class="value" v-if="model.driverId == null">未指派</div> </div> <div class="item" > <div class="label">用车事由</div> <div class="value">{{model.content}}</div> </div> <div class="item"> <div class="label">用车事由</div> <div class="value">{{ model.content }}</div> </div> <div class="item"> <div class="label">乘车人员</div> <div class="value">{{model.memberNames || ''}}</div> <div class="value">{{ model.memberNames || '' }}</div> </div> <div class="item"> <div class="label">目的地类别</div> <div class="value status-green" v-if="model.type == 0">【市内用车】</div> <div class="value status-red" v-if="model.type == 1">【市外用车】</div> <div class="value status-red" v-if="model.type == 1">【市外用车】</div> </div> <div class="item"> <div class="label">目的地</div> <div class="value">{{model.addr || ''}}</div> <div class="value">{{ model.addr || '' }}</div> </div> <div class="item"> <div class="label">预计出发时间</div> <div class="value">{{model.planUseDate || ''}}</div> <div class="value">{{ model.planUseDate || '' }}</div> </div> <div class="item"> <div class="label">用车时段</div> <div class="value">始:{{model.startTime || ''}}<br>止:{{model.endTime || ''}}</div> <div class="value">始:{{ model.startTime || '' }}<br>止:{{ model.endTime || '' }}</div> </div> </div> </div> </div> <div class="side"> <div class="side_title">审批流程</div> <div class="list" v-if="model.approveDateVO !=null && model.approveDateVO.approveList !=null"> <div class="item" v-for="(item,index) in model.approveDateVO.approveList" :key="item.id"> <div class="separate" v-if=" (index < model.approveDateVO.approveList.length-1)"></div> <div class="list" v-if=" model.approveDateVO != null && model.approveDateVO.approveList != null "> <div class="item" v-for="(item, index) in model.approveDateVO.approveList" :key="item.id"> <div class="separate" v-if="index < model.approveDateVO.approveList.length - 1"></div> <div class="info"> <img src="@/assets/icons/ic_tongguo.png" class="iconnew" v-if="( item.status ==2)"/> <img src="@/assets/icons/ic_dangqian.png" class="iconnew" v-if="( item.status==1)"/> <img src="@/assets/icons/ic_jujue.png" class="iconnew" v-if="( item.status==3)"/> <img src="@/assets/icons/ic_grey.png" class="iconnew" v-if=" (item.status==null || item.status==0 )"/> <div style="display: inline" v-if="item.approveType !=1"> <img v-if="item.faceImg!=null && item.faceImg !=''" :src="item.faceImg" class="avatar" alt="" /> <img v-if="item.faceImg ==null ||item.faceImg ==''" src="@/assets/avatar/man.png" class="avatar" alt="" /> <img src="@/assets/icons/ic_tongguo.png" class="iconnew" v-if="item.status == 2" /> <img src="@/assets/icons/ic_dangqian.png" class="iconnew" v-if="item.status == 1" /> <img src="@/assets/icons/ic_jujue.png" class="iconnew" v-if="item.status == 3" /> <img src="@/assets/icons/ic_grey.png" class="iconnew" v-if="item.status == null || item.status == 0" /> <div style="display: inline" v-if="item.approveType != 1"> <img v-if="item.faceImg != null && item.faceImg != ''" :src="item.faceImg" class="avatar" alt="" /> <img v-if="item.faceImg == null || item.faceImg == ''" src="@/assets/avatar/man.png" class="avatar" alt="" /> </div> <div style="display: inline" v-if="item.approveType == 1"> <img v-if="item.type !=1" src="@/assets/icons/ic_duoren.png" class="avatar" alt="" /> <img v-if="item.type == 1" src="@/assets/icons/ic_chaosong.png" class="avatar" alt="" /> <div style="display: inline" v-if="item.approveType == 1"> <img v-if="item.type != 1" src="@/assets/icons/ic_duoren.png" class="avatar" alt="" /> <img v-if="item.type == 1" src="@/assets/icons/ic_chaosong.png" class="avatar" alt="" /> </div> <div class="content"> <div class="line"> <div class="name">{{ item.title}}</div> <div class="name">{{ item.title }}</div> <div class="time">{{ item.checkDate }}</div> </div> <div class="line"> <div class="company"> {{ item.memberName }} <div style="display: inline" v-if="item.statusInfo!=null && item.statusInfo!=''"> (<span class="status-green">{{item.statusInfo ||''}}</span>) <div style="display: inline" v-if="item.statusInfo != null && item.statusInfo != ''"> (<span :class="{ padding: item.statusInfo == '处理中' || item.status == '1' }">{{ item.statusInfo || "" }}</span>) </div> </div> </div> </div> </div> <div v-if="item.approveType != 1 && item.checkInfo !=null && item.checkInfo !=''" class="remark"> {{ item.checkInfo || '' }} <div v-if=" item.approveType != 1 && item.checkInfo != null && item.checkInfo != '' " class="remark"> {{ item.checkInfo || "" }} </div> <div v-if="item.approveType == 1 " class="childList"> <div v-if="item.approveType == 0 || item.type == 1 || item.approveType == 1" class="childList"> <div class="m_content company" v-for="item1 in item.approveList" :key="item1.id"> <img v-if="item1.faceImg!=null && item1.faceImg !=''" :src="item1.faceImg" class="avatar" alt="" /> <img v-if="item1.faceImg ==null ||item1.faceImg ==''" src="@/assets/avatar/man.png" class="avatar" alt="" /> <span > {{item1.memberName}}</span> <img v-if="item1.faceImg != null && item1.faceImg != ''" :src="item1.faceImg" class="avatar" alt="" /> <img v-if="item1.faceImg == null || item1.faceImg == ''" src="@/assets/avatar/man.png" class="avatar" alt="" /> <span> {{ item1.memberName }}</span> </div> </div> </div> @@ -109,38 +117,27 @@ </div> </div> <!-- --> <template v-slot:footer> <el-button @click="agreeOpen" type="primary" v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 " class="status-red">同意</el-button> <el-button @click="jectOpen" type="danger" v-if="model.approveDateVO!=null&& model.approveDateVO.canBeApproved!=null &&model.approveDateVO.canBeApproved ==1 " >拒绝</el-button> <el-button @click="visible=false">返回</el-button> <template v-slot:footer> <el-button @click="agreeOpen" type="primary" v-if="model.approveDateVO != null && model.approveDateVO.canBeApproved != null && model.approveDateVO.canBeApproved == 1" class="status-red">同意</el-button> <el-button @click="jectOpen" type="danger" v-if="model.approveDateVO != null && model.approveDateVO.canBeApproved != null && model.approveDateVO.canBeApproved == 1">拒绝</el-button> <el-button @click="visible = false">返回</el-button> </template> <el-dialog append-to-body title="同意申请" style="text-align: center" class="dialogCl" :visible.sync="isShowProblem" width="480px" > <el-form :model="dealForm" :rules="rules" ref="dealForm" > <el-dialog append-to-body title="同意申请" style="text-align: center" class="dialogCl" :visible.sync="isShowProblem" width="480px"> <el-form :model="dealForm" :rules="rules" ref="dealForm"> <!-- <el-form-item label="派车司机" prop="driverId" required v-if="model.approveDateVO!=null && model.approveDateVO.driverParam === 1"> --> <el-form-item label="派车司机" prop="driverId" v-if="model.approveDateVO!=null && model.approveDateVO.driverParam == 1"> <el-select v-model="dealForm.driverId" style="width: 300px" filterable clearable placeholder="请选择派遣司机"> <el-option v-for="item in memberList" :key="item.id" :label="item.name+'-'+item.phone" :value="item.id"> <el-form-item label="派车司机" prop="driverId" v-if="model.approveDateVO != null && model.approveDateVO.driverParam == 1"> <el-select v-model="dealForm.driverId" style="width: 300px" filterable clearable placeholder="请选择派遣司机"> <el-option v-for="item in memberList" :key="item.id" :label="item.name + '-' + item.phone" :value="item.id"> </el-option> </el-select> </el-form-item> <el-form-item label="同意说明"> <el-input type="textarea" placeholder="请填写说明" :rows="4" v-model="dealForm.checkInfo" /> <el-input type="textarea" placeholder="请填写说明" :rows="4" v-model="dealForm.checkInfo" /> </el-form-item> </el-form> <span slot="footer" class="dialog-footer"> @@ -148,26 +145,15 @@ <el-button type="primary" :loading="dealing" @click="dealDo">确定</el-button> </span> </el-dialog> <el-dialog append-to-body title="拒绝申请" style="text-align: center" class="dialogCl" :visible.sync="isBackProblem" width="600px" > <el-form :model="backForm" ref="backForm" label-width="100px"> <el-dialog append-to-body title="拒绝申请" style="text-align: center" class="dialogCl" :visible.sync="isBackProblem" width="600px"> <el-form :model="backForm" ref="backForm" label-width="100px"> <el-form-item label="拒绝说明"> <el-input type="textarea" placeholder="请填写说明" :rows="4" v-model="backForm.checkInfo" /> <el-input type="textarea" placeholder="请填写说明" :rows="4" v-model="backForm.checkInfo" /> </el-form-item> </el-form> <span slot="footer" class="dialog-footer"> <el-button @click="isBackProblem= false">取消</el-button> <el-button @click="isBackProblem = false">取消</el-button> <el-button type="primary" :loading="dealing" @click="backDo">确定</el-button> </span> </el-dialog> @@ -184,12 +170,12 @@ name: 'OperaCarUseBookWindow', components: { GlobalWindow }, extends: BaseOpera, data () { data() { return { title: '公务车申请', visible: false, dataId: null, model: { }, model: {}, dealing: false, isShowProblem: false, isBackProblem: false, @@ -209,14 +195,14 @@ computed: { ...mapState(['userInfo']) }, created () { created() { this.config({ api: '/business/carUseBook', 'field.id': 'id' }) }, methods: { dealDo () { dealDo() { this.$refs.dealForm.validate((valid) => { if (!valid) { return @@ -242,18 +228,18 @@ }) }) }, agreeOpen () { agreeOpen() { this.isShowProblem = true this.$set(this.dealForm, 'checkInfo', '') this.loadMemberList() }, jectOpen () { jectOpen() { this.isBackProblem = true this.backForm = { checkInfo: null } }, backDo () { backDo() { this.$refs.backForm.validate((valid) => { if (!valid) { return @@ -275,7 +261,7 @@ }) }) }, open (title, target) { open(title, target) { this.title = title this.visible = true this.model = {} @@ -292,14 +278,26 @@ this.getDetail() }) }, getDetail () { getDetail() { this.api.detail(this.dataId) .then(res => { this.model = res if (this.model.approveDateVO && this.model.approveDateVO.approveList.length > 0) { this.model.approveDateVO.approveList.forEach(item => { if (item.approveList && item.approveList.length == 1 && item.type !== 1) { item.title = item.approveList[0].title item.faceImg = item.approveList[0].faceImg item.memberName = item.approveList[0].memberName item.statusInfo = item.approveList[0].statusInfo item.status = item.approveList[0].status item.approveList = [] } }) } this.dealForm.driveId = res.driveId }) }, loadMemberList () { loadMemberList() { driveList({}).then(res => { this.memberList = res }) @@ -309,6 +307,8 @@ </script> <style lang="scss" scoped> @import "@/assets/style/variables.scss"; .upload_box { width: 84px; height: 84px; @@ -320,14 +320,17 @@ align-items: center; color: #999999; border: 1px solid #e4e4e4; .icon { font-size: 24px; } .text { font-size: 12px; } } .side_title{ .side_title { font-weight: 600; font-size: 18px; color: #111111; @@ -335,9 +338,11 @@ margin-left: 20px; margin-top: 20px; } .modal_wrap { display: flex; height: 100%; .modal_content { flex: 1; padding: 0px 30px; @@ -352,6 +357,7 @@ margin-bottom: 20px; margin-top: 30px; } .info { .list { display: flex; @@ -361,6 +367,7 @@ display: flex; width: 40%; margin-bottom: 20px; &:nth-of-type(2n) { width: 60%; } @@ -410,20 +417,24 @@ border-radius: 16px 0px 16px 0px; } } .table_info { .name_wrap { display: flex; align-items: center; .avatar { width: 40px; height: 40px; border-radius: 50%; margin-right: 12px; } .content { .line { display: flex; } .tag { color: #b2cbf9; border: 1px solid #b2cbf9; @@ -441,17 +452,20 @@ width: 420px; background: #ffffff; border-left: 20px solid #f7f7f7; .list { .item { padding: 8px 0; position: relative; .separate { position: absolute; border-left: 2px dashed #cccccc; left: 31px; height: calc(100% - 36px); height: calc(100% - 30px); top: 49px; } .avatar { width: 40px; height: 40px; @@ -459,75 +473,98 @@ margin: 0 12px 0 16px; //border: 1px solid; } .childList{ .childList { display: flex; flex-wrap: wrap; margin-left: 100px; } .company { font-size: 13px; color: #888888; .status { color: #00ba67; color: $primaryColor; } } .m_content{ .m_content { display: flex; flex-direction: column; align-items: center; justify-content: center; margin-bottom: 4px; } .info { display: flex; align-items: center; margin-left: 20px; .icon { position: relative; z-index: 11; color: #53b76f; font-size: 24px; } .icon1 { position: relative; z-index: 11; color: deepskyblue; font-size: 24px; } .icon2 { position: relative; z-index: 11; color: #dc362e; font-size: 24px; } .iconnew{ .iconnew { width: 24px; height: 24px; } .icon3 { position: relative; z-index: 11; color:gray; color: gray; font-size: 24px; } .content { flex: 1; .line { display: flex; justify-content: space-between; align-content: center; margin-bottom: 6px; .status { color: #888888; } .padding { color: $primaryColor; } .name { font-weight: 600; font-size: 16px; color: #111111; } .time { color: #888888; } } } } .remark { background: #f7f7f7; border-radius: 4px; @@ -535,7 +572,6 @@ color: #666666; margin-left: 100px; } } } } admin/src/components/business/OperaHiddenDangerWindow.vue
@@ -551,6 +551,7 @@ </script> <style lang="scss" scoped> @import "@/assets/style/variables.scss"; .side_title{ font-weight: 600; font-size: 18px; @@ -748,7 +749,7 @@ font-size: 13px; color: #888888; .status { color: #00ba67; color: $primaryColor; } } } admin/src/components/common/CommonHeader.vue
@@ -19,63 +19,35 @@ <el-dropdown v-if="isLogined" trigger="click"> <span class="el-dropdown-link"> <!-- <img v-if="userInfo != null" :src="userInfo.avatar == null ? `${require('@/assets/avatar/man.png')}` : userInfo.avatar" alt="">{{userInfo | displayName}}<i class="el-icon-arrow-down el-icon--right"></i> --> <img v-if="userInfo != null" style="width: 30px !important" src="@/assets/avatar/man.png" alt="" />{{ userInfo | displayName <img v-if="userInfo != null" style="width: 30px !important" src="@/assets/avatar/man.png" alt="" />{{ userInfo | displayName }}<i class="el-icon-arrow-down el-icon--right"></i> </span> <el-dropdown-menu slot="dropdown"> <el-dropdown-item @click.native="changePwd" >修改密码</el-dropdown-item > <el-dropdown-item @click.native="changePwd">修改密码</el-dropdown-item> <el-dropdown-item @click.native="logout">退出登录</el-dropdown-item> </el-dropdown-menu> </el-dropdown> </div> </div> <!-- 修改密码 --> <GlobalAlertWindow title="修改密码" :visible.sync="visible.changePwd" <GlobalAlertWindow title="修改密码" :visible.sync="visible.changePwd" :showClose="!userInfo.needChangePwd || userInfo.needChangePwd == '1'" :showCancel="userInfo.needChangePwd && userInfo.needChangePwd == '0'" @confirm="confirmChangePwd" @close="visible.changePwd = false" > <el-form :model="changePwdData.form" ref="changePwdDataForm" :rules="changePwdData.rules" > :showCancel="!userInfo.needChangePwd || userInfo.needChangePwd == '1'" @confirm="confirmChangePwd" @close="visible.changePwd = false"> <el-form :model="changePwdData.form" ref="changePwdDataForm" :rules="changePwdData.rules"> <el-form-item label="原始密码" prop="oldPwd" required> <el-input v-model="changePwdData.form.oldPwd" type="password" placeholder="请输入原始密码" maxlength="30" show-password ></el-input> <el-input v-model="changePwdData.form.oldPwd" type="password" placeholder="请输入原始密码" maxlength="30" show-password></el-input> </el-form-item> <el-form-item label="新密码" prop="newPwd" required> <el-input v-model="changePwdData.form.newPwd" type="password" placeholder="请输入新密码" maxlength="20" show-password ></el-input> <el-input v-model="changePwdData.form.newPwd" type="password" placeholder="请输入新密码,密码需包含字母、数字及特殊字符中的至少两种" maxlength="20" show-password></el-input> </el-form-item> <!-- <div style="font-size: 12px;color:#999999">密码需包含字母、数字及特殊字符中的至少两种</div> --> <el-form-item label="确认新密码" prop="confirmPwd" required> <el-input v-model="changePwdData.form.confirmPwd" type="password" placeholder="请再次输入新密码" maxlength="20" show-password ></el-input> <el-input v-model="changePwdData.form.confirmPwd" type="password" placeholder="请再次输入新密码" maxlength="20" show-password></el-input> </el-form-item> </el-form> </GlobalAlertWindow> @@ -121,8 +93,8 @@ { required: true, message: '请输入原始密码' } ], newPwd: [ { required: true, message: '请输入密码', trigger: 'blur' }, { validator: this.validatePassword, trigger: 'blur' }, { required: true, message: '请输入密码', trigger: 'blur' }, { validator: this.validatePassword, trigger: 'blur' }, ], confirmPwd: [ { required: true, message: '请再次输入新密码' } @@ -139,10 +111,10 @@ }, mounted() { // console.log('userInfo',this.userInfo); if(!this.userInfo.needChangePwd || this.userInfo.needChangePwd == '0'){ this.visible.changePwd = true if (!this.userInfo.needChangePwd || this.userInfo.needChangePwd == '0') { // this.visible.changePwd = true } }, filters: { // 展示名称 @@ -167,27 +139,27 @@ }, validatePassword(rule, value, callback) { if (!value) { callback(new Error('请输入密码')); callback(new Error('请输入密码')) } else { const lengthValid = /^.{6,20}$/.test(value); const hasLetter = /[a-zA-Z]/.test(value); const hasNumber = /[0-9]/.test(value); const hasSpecial = /[!@#$%^&*(),.?":{}|<>]/.test(value); const lengthValid = /^.{6,20}$/.test(value) const hasLetter = /[a-zA-Z]/.test(value) const hasNumber = /[0-9]/.test(value) const hasSpecial = /[!@#$%^&*(),.?":{}|<>]/.test(value) const typesCount = [hasLetter, hasNumber, hasSpecial].filter(Boolean).length; const typesCount = [hasLetter, hasNumber, hasSpecial].filter(Boolean).length if (!lengthValid) { callback(new Error('密码长度需为6到20个字符')); callback(new Error('密码长度需为6到20个字符')) } else if (typesCount < 2) { callback(new Error('密码需包含字母、数字及特殊字符中的至少两种')); callback(new Error('密码需包含字母、数字及特殊字符中的至少两种')) } else { callback(); // 验证通过 callback() // 验证通过 } } }, getHeaderNav(type){ getHeaderNav(type) { getAppHeaderNav(type).then(res => { window.open(res, "_blank"); window.open(res, "_blank") }) }, // 确定修改密码 @@ -215,7 +187,7 @@ this.visible.changePwd = false }) .catch(e => { // this.$tip.apiFailed(e) // this.$tip.apiFailed(e) }) .finally(() => { this.isWorking.changePwd = false @@ -241,15 +213,18 @@ <style scoped lang="scss"> @import "@/assets/style/variables.scss"; .common-header { background-color: #2080f7; } .list{ .list { flex: 1; display: flex; align-items: center; margin-left: 60px; .item{ .item { margin-right: 40px; font-size: 16px; font-weight: 400; @@ -259,16 +234,19 @@ justify-content: flex-start; height: 40px; cursor: pointer; .linellae{ .linellae { width: 64px; height: 2px; background: #FFFFFF; } } .active{ .active { font-weight: 500; } } .header { overflow: hidden; // background: #fff; @@ -289,9 +267,11 @@ color: #fff; display: flex; align-items: center; .title{ .title { width: 200px; } // display: inline; .title-en { font-size: 11px; @@ -299,6 +279,7 @@ color: rgb(202, 214, 238); } } .user { width: 212px; box-sizing: border-box; @@ -308,10 +289,12 @@ flex-shrink: 0; text-align: right; cursor: pointer; .el-dropdown { top: 2px; color: #fff; } img { width: 32px; position: relative; @@ -320,9 +303,11 @@ } } } // 下拉菜单框 .el-dropdown-menu { width: 140px; .el-dropdown-menu__item:hover { background: #e3edfb; color: $primary-color; admin/src/components/common/GlobalAlertWindow.vue
@@ -21,7 +21,7 @@ <div v-if="withFooter" class="window__footer"> <slot name="footer"> <el-button @click="confirm" :loading="confirmWorking" type="primary">确定</el-button> <el-button v-if="showCancel" @click="close">取消</el-button> <el-button v-if="!showCancel" @click="close">取消</el-button> </slot> </div> </el-dialog> @@ -41,7 +41,7 @@ }, showCancel: { type: Boolean, default: true default: false }, // 是否包含底部操作 withFooter: { admin/src/views/platform/index.vue
@@ -62,27 +62,27 @@ </div> </div> <div class="line"> <div v-if="task.billCode" class="ite"> <div v-if="task.billCode" style="width: 40%;" class="ite"> <span>运输单号:</span> <span>{{ task.billCode }}</span> </div> <div v-else class="ite"> <div v-else class="ite" style="width: 40%;"> <span>合同单号:</span> <span>{{ task.contractNum }}</span> </div> <div class="ite siji"> <div class="ite jiashi"> <span>驾驶员:</span> <span>{{ task.driverName }}</span> <span>{{ task.driverName }} {{ task.drivierPhone }}</span> </div> <div class="ite phone"> <!-- <div class="ite phone"> <span>手机号:</span> <span>{{ task.drivierPhone }}</span> </div> <div class="ite"> </div> --> <div class="ite" style="width: 40%"> <span>总运输量:</span> <span>{{ task.totalNum }}万支</span> </div> <div v-if="task.billCode" class="ite" style="width: 66.6%"> <div v-if="task.billCode" class="ite" style="width: 60%"> <span>运输公司:</span> <span>{{ task.carrierName }}</span> </div> @@ -497,12 +497,12 @@ margin-bottom: 6px; .ite { width: 33.3%; width: 50%; margin-top: 8px; } .siji { width: 29%; .jiashi { width: 60%; } .phone { admin/src/views/task/dangetDetail.vue
@@ -601,6 +601,7 @@ </script> <style lang="scss" scoped> @import "@/assets/style/variables.scss"; .upload_wrap { display: flex; flex-wrap: wrap; @@ -800,7 +801,7 @@ font-size: 13px; color: #888888; .status { color: #00ba67; color: $primaryColor; } } .m_content { admin/src/views/task/driverDetail.vue
@@ -3,15 +3,19 @@ <div class="modal_wrap"> <div class="modal_content"> <div class="header"> <img v-if="info.status == '3' || info.status == '6'" class="head_bg" src="@/assets/task/bg_shenhe_fail@2x.png" alt=""> <img v-else-if="info.status == '2' || info.status == '5'" class="head_bg" src="@/assets/task/bg_shenhe_pass@2x.png" alt=""> <img v-if="info.status == '3' || info.status == '6'" class="head_bg" src="@/assets/task/bg_shenhe_fail@2x.png" alt=""> <img v-else-if="info.status == '2' || info.status == '5'" class="head_bg" src="@/assets/task/bg_shenhe_pass@2x.png" alt=""> <img v-else-if="info.status == '4'" class="head_bg" src="@/assets/task/bg_shenhe_chexiao@2x.png" alt=""> <img v-else class="head_bg" src="@/assets/task/bg_shenhe@2x.png" alt=""> <div class="left"> <div class="h1">物流车预约</div> <div class="time">提交时间:{{ info.createDate }}</div> </div> <div class="right" :class="{ scs: info.status == '2' || info.status == '5', msg: info.status == '3' || info.status == '6' }">{{ statusMap[info.status] }}</div> <div class="right" :class="{ scs: info.status == '2' || info.status == '5', msg: info.status == '3' || info.status == '6' }">{{ statusMap[info.status] }}</div> </div> <div class="info"> <div class="title">物流车预约信息</div> @@ -43,7 +47,8 @@ <div class="item"> <div class="label">准运证照片</div> <div v-if="info.transportImg" class="value"> <el-image style="width: 100px" :preview-src-list="[info.prefixUrl + info.transportImg]" :src="info.prefixUrl + info.transportImg" alt="" /> <el-image style="width: 100px" :preview-src-list="[info.prefixUrl + info.transportImg]" :src="info.prefixUrl + info.transportImg" alt="" /> </div> </div> </div> @@ -210,7 +215,7 @@ } }) }, close(){ close() { this.isShowModal = false this.$emit('close') }, @@ -275,6 +280,7 @@ border-radius: 8px; overflow: hidden; height: 100%; .title { font-weight: 600; font-size: 18px; @@ -317,7 +323,8 @@ margin: 0 -30px; border-radius: 8px 8px 0 0; position: relative; .head_bg{ .head_bg { position: absolute; width: 100%; height: 100%; @@ -325,6 +332,7 @@ top: 0; z-index: 9; } .h1 { font-weight: 600; font-size: 22px; @@ -349,10 +357,12 @@ position: relative; z-index: 99; } .scs{ .scs { background-color: #00BA67; } .msg{ .msg { background-color: #ED4545; } } @@ -398,6 +408,7 @@ display: flex; margin-bottom: 24px; position: relative; .separate { position: absolute; border-left: 2px dashed #cccccc; @@ -405,15 +416,18 @@ height: calc(100% - 2px); top: 42px; } .info{ .info { padding-top: 10px; margin-left: 20px; margin-right: 16px; .iconnew { width: 24px; height: 24px; } } .avatar_wrap { width: 40px; height: 40px; @@ -460,7 +474,7 @@ color: #777777; .status { color: $primary-color; color: $primaryColor; } } @@ -480,6 +494,7 @@ width: 100%; overflow-x: auto; margin-top: 12px; .carbon_item { text-align: center; flex-shrink: 0; admin/src/views/task/index.vue
@@ -165,12 +165,12 @@ }, pagination: { capacity: 10, page: 1 page: 1, total: 0, }, loading: false, dataList: [], headData: {}, total: 0, cateList: [ { name: '访客申请', id: 0 }, @@ -268,6 +268,7 @@ }).then(res => { console.log('res', res) this.dataList = res.records || [] this.pagination.total = res.total || 0 this.dataList.forEach(i => { i.param1 = JSON.parse(i.param1) }) admin/src/views/task/visReportDetail.vue
@@ -3,19 +3,17 @@ <div class="modal_wrap"> <div class="modal_content"> <div class="header"> <img v-if="info.businessStatus == '3'" class="head_bg" src="@/assets/task/bg_shenhe_fail@2x.png" <img v-if="info.businessStatus == '3'" class="head_bg" src="@/assets/task/bg_shenhe_fail@2x.png" alt=""> <img v-else-if="info.businessStatus == '2'" class="head_bg" src="@/assets/task/bg_shenhe_pass@2x.png" alt=""> <img v-else-if="info.businessStatus == '4'" class="head_bg" src="@/assets/task/bg_shenhe_chexiao@2x.png" alt=""> <img v-else-if="info.businessStatus == '2'" class="head_bg" src="@/assets/task/bg_shenhe_pass@2x.png" alt=""> <img v-else-if="info.businessStatus == '4'" class="head_bg" src="@/assets/task/bg_shenhe_chexiao@2x.png" alt=""> <img v-else class="head_bg" src="@/assets/task/bg_shenhe@2x.png" alt=""> <div class="left"> <div class="h1">{{ cateList[type] }}</div> <div class="time">提交时间:{{ info.createDate }}</div> </div> <div class="right" :class="{ scs: info.businessStatus == '2', msg: info.businessStatus == '3' }">{{ statusMap[info.businessStatus] }}</div> <div class="right" :class="{ scs: info.businessStatus == '2', msg: info.businessStatus == '3' }">{{ statusMap[info.businessStatus] }}</div> </div> <div class="info"> <div class="title">访客报备信息</div> @@ -83,7 +81,7 @@ <div style="display: inline" v-if="item.statusInfo != null && item.statusInfo != ''"> (<span :class="{ padding: item.statusInfo == '处理中' || item.status == '1' }">{{ item.statusInfo || "" }}</span>) }}</span>) </div> </div> </div> @@ -96,7 +94,7 @@ " class="remark"> {{ item.checkInfo || "" }} </div> <div v-if="item.approveType == 1" class="childList"> <div v-if="item.approveType == 0 || item.type == 1 || item.approveType == 1" class="childList"> <div class="m_content company" v-for="item1 in item.approveList" :key="item1.id"> <img v-if="item1.faceImg != null && item1.faceImg != ''" :src="item1.faceImg" class="avatar" alt="" /> <img v-if="item1.faceImg == null || item1.faceImg == ''" src="@/assets/avatar/man.png" class="avatar" @@ -238,7 +236,7 @@ }) }) }, close(){ close() { this.isShowModal = false this.$emit('close') }, @@ -246,6 +244,18 @@ const { id } = this getVisitedReDetail({ id }).then(res => { this.info = res if (this.info.approveDateVO && this.info.approveDateVO.approveList.length > 0) { this.info.approveDateVO.approveList.forEach(item => { if (item.approveList && item.approveList.length == 1 && item.type !== 1) { item.title = item.approveList[0].title item.faceImg = item.approveList[0].faceImg item.memberName = item.approveList[0].memberName item.statusInfo = item.approveList[0].statusInfo item.status = item.approveList[0].status item.approveList = [] } }) } }) }, handleAppr(val) { @@ -463,7 +473,7 @@ color: #888888; .status { color: #00ba67; color: $primaryColor; } } admin/src/views/task/visSubDetail.vue
@@ -516,7 +516,7 @@ color: #888888; .status { color: #00ba67; color: $primaryColor; } } h5/pages/staff/index.vue
@@ -18,7 +18,7 @@ mode="widthFix" ></image> </view> <view class="title_wrap"><view class="name">业务办理</view></view> <view v-if="list1.filter(i => checkAuth(i.auth)).length > 0" class="title_wrap"><view class="name">业务办理</view></view> <view class="container1"> <view class="list"> <block v-for="item in list1" :key="item.name"> @@ -65,13 +65,16 @@ </view> --> </view> <!-- --> <view class="title_wrap"><view class="name">业务查询</view></view> <view v-if="list2.filter(i => checkAuth(i.auth)).length > 0" class="title_wrap"><view class="name">业务查询</view></view> <view class="container2"> <view class="list"> <view class="item" @click="jump(item.url)" v-for="item in list2" :key="item.name"> <image :src="item.img" class="icon" /> <view class="name">{{item.name}}</view> </view> <block v-for="item in list2" :key="item.name"> <view v-if="checkAuth(item.auth)" class="item" @click="jump(item.url)"> <image :src="item.img" class="icon" /> <view class="name">{{item.name}}</view> <view v-if="item.name == '任务中心' && taskInfo" class="task_num">{{ taskInfo }}</view> </view> </block> </view> <!-- <view class="img_wrap" @click="jump('/pages/staff/task/index')"> @@ -206,6 +209,9 @@ isDetail: '1' }).then(res => { this.taskInfo = res.data.noticeWaitNum + res.data.noticeCopyNum if(this.taskInfo && this.taskInfo > 99){ this.taskInfo = 99 } }) }, } @@ -250,11 +256,26 @@ width: 25%; margin-bottom: 40rpx; font-size: 26rpx; position: relative; image{ width: 88rpx; height: 88rpx; margin-bottom: 20rpx; } .task_num{ position: absolute; top: -10rpx; right: 28rpx; font-size: 24rpx; width: 36rpx; height: 36rpx; background-color: red; color: #fff; border-radius: 50%; display: flex; justify-content: center; align-items: center; } } } .banner_wrap { h5/pages/staff/task/visitorReport.vue
@@ -44,7 +44,7 @@ </view> <view class="item"> <view class="label">访客单位</view> <view class="value">{{ info.companyName }}人</view> <view class="value">{{ info.companyName }}</view> </view> <view class="item"> <view class="label">来访事由</view> pda/pages/index/login.vue
@@ -42,8 +42,8 @@ data() { return { form: { username: '13996529050', password: '123456', username: '', password: '', }, err: '', isShowProtocol: false, pda/unpackage/release/apk/__UNI__8789FB4__20241018164933.apkBinary files differ
pda/unpackage/res/icons/1024x1024.png
pda/unpackage/res/icons/120x120.png
pda/unpackage/res/icons/144x144.png
pda/unpackage/res/icons/152x152.png
pda/unpackage/res/icons/167x167.png
pda/unpackage/res/icons/180x180.png
pda/unpackage/res/icons/192x192.png
pda/unpackage/res/icons/20x20.png
pda/unpackage/res/icons/29x29.png
pda/unpackage/res/icons/40x40.png
pda/unpackage/res/icons/58x58.png
pda/unpackage/res/icons/60x60.png
pda/unpackage/res/icons/72x72.png
pda/unpackage/res/icons/76x76.png
pda/unpackage/res/icons/80x80.png
pda/unpackage/res/icons/87x87.png
pda/unpackage/res/icons/96x96.png