From 9c491f119144c9bc536c1cf39307ad82be96b85b Mon Sep 17 00:00:00 2001 From: liukangdong <898885815@qq.com> Date: 星期五, 18 十月 2024 18:13:40 +0800 Subject: [PATCH] ll --- admin/src/views/task/dangetDetail.vue | 3 pda/unpackage/res/icons/192x192.png | 0 pda/unpackage/res/icons/40x40.png | 0 pda/unpackage/res/icons/152x152.png | 0 pda/unpackage/res/icons/87x87.png | 0 admin/src/views/task/visReportDetail.vue | 32 ++- pda/unpackage/res/icons/58x58.png | 0 admin/src/components/common/CommonHeader.vue | 113 +++++------- admin/src/components/business/OperaCarUseBookWindow.vue | 242 +++++++++++++++----------- pda/unpackage/res/icons/20x20.png | 0 admin/src/views/task/visSubDetail.vue | 2 admin/src/views/task/driverDetail.vue | 35 ++- pda/unpackage/res/icons/80x80.png | 0 h5/pages/staff/task/visitorReport.vue | 2 pda/unpackage/res/icons/144x144.png | 0 h5/pages/staff/index.vue | 33 +++ pda/unpackage/res/icons/180x180.png | 0 admin/src/components/common/GlobalAlertWindow.vue | 4 pda/unpackage/res/icons/29x29.png | 0 pda/unpackage/res/icons/120x120.png | 0 pda/pages/index/login.vue | 4 pda/unpackage/res/icons/96x96.png | 0 pda/unpackage/res/icons/167x167.png | 0 admin/src/views/task/index.vue | 5 pda/unpackage/res/icons/60x60.png | 0 admin/src/views/platform/index.vue | 22 +- admin/src/components/business/OperaHiddenDangerWindow.vue | 3 pda/unpackage/release/apk/__UNI__8789FB4__20241018164933.apk | 0 pda/unpackage/res/icons/76x76.png | 0 pda/unpackage/res/icons/1024x1024.png | 0 pda/unpackage/res/icons/72x72.png | 0 31 files changed, 285 insertions(+), 215 deletions(-) diff --git a/admin/src/components/business/OperaCarUseBookWindow.vue b/admin/src/components/business/OperaCarUseBookWindow.vue index 8321ae4..e1afa43 100644 --- a/admin/src/components/business/OperaCarUseBookWindow.vue +++ b/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; } - } } } diff --git a/admin/src/components/business/OperaHiddenDangerWindow.vue b/admin/src/components/business/OperaHiddenDangerWindow.vue index 6937591..694ad5b 100644 --- a/admin/src/components/business/OperaHiddenDangerWindow.vue +++ b/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; } } } diff --git a/admin/src/components/common/CommonHeader.vue b/admin/src/components/common/CommonHeader.vue index 4b5996f..f72b38a 100644 --- a/admin/src/components/common/CommonHeader.vue +++ b/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; diff --git a/admin/src/components/common/GlobalAlertWindow.vue b/admin/src/components/common/GlobalAlertWindow.vue index f5b8623..f252722 100644 --- a/admin/src/components/common/GlobalAlertWindow.vue +++ b/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: { diff --git a/admin/src/views/platform/index.vue b/admin/src/views/platform/index.vue index 6e75cf5..7b3ed4a 100644 --- a/admin/src/views/platform/index.vue +++ b/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 { diff --git a/admin/src/views/task/dangetDetail.vue b/admin/src/views/task/dangetDetail.vue index 700880c..35c7845 100644 --- a/admin/src/views/task/dangetDetail.vue +++ b/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 { diff --git a/admin/src/views/task/driverDetail.vue b/admin/src/views/task/driverDetail.vue index a63e59c..385d4dd 100644 --- a/admin/src/views/task/driverDetail.vue +++ b/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; diff --git a/admin/src/views/task/index.vue b/admin/src/views/task/index.vue index 28e27df..ac5d8d1 100644 --- a/admin/src/views/task/index.vue +++ b/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) }) diff --git a/admin/src/views/task/visReportDetail.vue b/admin/src/views/task/visReportDetail.vue index 60f8ec5..83c8ce0 100644 --- a/admin/src/views/task/visReportDetail.vue +++ b/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; } } diff --git a/admin/src/views/task/visSubDetail.vue b/admin/src/views/task/visSubDetail.vue index db8dd9b..d9f19b2 100644 --- a/admin/src/views/task/visSubDetail.vue +++ b/admin/src/views/task/visSubDetail.vue @@ -516,7 +516,7 @@ color: #888888; .status { - color: #00ba67; + color: $primaryColor; } } diff --git a/h5/pages/staff/index.vue b/h5/pages/staff/index.vue index a4c96ae..87dae86 100644 --- a/h5/pages/staff/index.vue +++ b/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 { diff --git a/h5/pages/staff/task/visitorReport.vue b/h5/pages/staff/task/visitorReport.vue index afe5576..b51016a 100644 --- a/h5/pages/staff/task/visitorReport.vue +++ b/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> diff --git a/pda/pages/index/login.vue b/pda/pages/index/login.vue index 8a53efa..e07389e 100644 --- a/pda/pages/index/login.vue +++ b/pda/pages/index/login.vue @@ -42,8 +42,8 @@ data() { return { form: { - username: '13996529050', - password: '123456', + username: '', + password: '', }, err: '', isShowProtocol: false, diff --git a/pda/unpackage/release/apk/__UNI__8789FB4__20241018164933.apk b/pda/unpackage/release/apk/__UNI__8789FB4__20241018164933.apk new file mode 100644 index 0000000..304d595 --- /dev/null +++ b/pda/unpackage/release/apk/__UNI__8789FB4__20241018164933.apk Binary files differ diff --git a/pda/unpackage/res/icons/1024x1024.png b/pda/unpackage/res/icons/1024x1024.png new file mode 100644 index 0000000..8e5ccd4 --- /dev/null +++ b/pda/unpackage/res/icons/1024x1024.png Binary files differ diff --git a/pda/unpackage/res/icons/120x120.png b/pda/unpackage/res/icons/120x120.png new file mode 100644 index 0000000..650cc00 --- /dev/null +++ b/pda/unpackage/res/icons/120x120.png Binary files differ diff --git a/pda/unpackage/res/icons/144x144.png b/pda/unpackage/res/icons/144x144.png new file mode 100644 index 0000000..1b2fc49 --- /dev/null +++ b/pda/unpackage/res/icons/144x144.png Binary files differ diff --git a/pda/unpackage/res/icons/152x152.png b/pda/unpackage/res/icons/152x152.png new file mode 100644 index 0000000..0bc20ba --- /dev/null +++ b/pda/unpackage/res/icons/152x152.png Binary files differ diff --git a/pda/unpackage/res/icons/167x167.png b/pda/unpackage/res/icons/167x167.png new file mode 100644 index 0000000..bd290e8 --- /dev/null +++ b/pda/unpackage/res/icons/167x167.png Binary files differ diff --git a/pda/unpackage/res/icons/180x180.png b/pda/unpackage/res/icons/180x180.png new file mode 100644 index 0000000..93ab56f --- /dev/null +++ b/pda/unpackage/res/icons/180x180.png Binary files differ diff --git a/pda/unpackage/res/icons/192x192.png b/pda/unpackage/res/icons/192x192.png new file mode 100644 index 0000000..e6e6595 --- /dev/null +++ b/pda/unpackage/res/icons/192x192.png Binary files differ diff --git a/pda/unpackage/res/icons/20x20.png b/pda/unpackage/res/icons/20x20.png new file mode 100644 index 0000000..ceaeb7c --- /dev/null +++ b/pda/unpackage/res/icons/20x20.png Binary files differ diff --git a/pda/unpackage/res/icons/29x29.png b/pda/unpackage/res/icons/29x29.png new file mode 100644 index 0000000..154fa02 --- /dev/null +++ b/pda/unpackage/res/icons/29x29.png Binary files differ diff --git a/pda/unpackage/res/icons/40x40.png b/pda/unpackage/res/icons/40x40.png new file mode 100644 index 0000000..d1c2b47 --- /dev/null +++ b/pda/unpackage/res/icons/40x40.png Binary files differ diff --git a/pda/unpackage/res/icons/58x58.png b/pda/unpackage/res/icons/58x58.png new file mode 100644 index 0000000..a4cc188 --- /dev/null +++ b/pda/unpackage/res/icons/58x58.png Binary files differ diff --git a/pda/unpackage/res/icons/60x60.png b/pda/unpackage/res/icons/60x60.png new file mode 100644 index 0000000..d42638d --- /dev/null +++ b/pda/unpackage/res/icons/60x60.png Binary files differ diff --git a/pda/unpackage/res/icons/72x72.png b/pda/unpackage/res/icons/72x72.png new file mode 100644 index 0000000..f6ef39e --- /dev/null +++ b/pda/unpackage/res/icons/72x72.png Binary files differ diff --git a/pda/unpackage/res/icons/76x76.png b/pda/unpackage/res/icons/76x76.png new file mode 100644 index 0000000..afed12c --- /dev/null +++ b/pda/unpackage/res/icons/76x76.png Binary files differ diff --git a/pda/unpackage/res/icons/80x80.png b/pda/unpackage/res/icons/80x80.png new file mode 100644 index 0000000..e0b8ee0 --- /dev/null +++ b/pda/unpackage/res/icons/80x80.png Binary files differ diff --git a/pda/unpackage/res/icons/87x87.png b/pda/unpackage/res/icons/87x87.png new file mode 100644 index 0000000..09839e1 --- /dev/null +++ b/pda/unpackage/res/icons/87x87.png Binary files differ diff --git a/pda/unpackage/res/icons/96x96.png b/pda/unpackage/res/icons/96x96.png new file mode 100644 index 0000000..dcccdbc --- /dev/null +++ b/pda/unpackage/res/icons/96x96.png Binary files differ -- Gitblit v1.9.3