Browse Source

字体文件,各种找人接口对接,文件上传

master
mk 1 year ago
parent
commit
0feee78815
  1. 2
      src/App.vue
  2. 13
      src/api/basic.js
  3. 4
      src/api/index.js
  4. 10
      src/api/service.js
  5. 16
      src/assets/css/common.less
  6. 17
      src/assets/fonts/index.css
  7. BIN
      src/assets/fonts/pingfang-black.ttf
  8. BIN
      src/assets/fonts/pingfang-bold.ttf
  9. BIN
      src/assets/fonts/pingfang-ordinary.ttf
  10. 5
      src/utils/request.js
  11. 6
      src/views/assistance/card.vue
  12. 95
      src/views/assistance/index.vue
  13. 123
      src/views/assistanceDetail/index.vue
  14. 2
      src/views/mine/changePassword.vue

2
src/App.vue

@ -18,7 +18,7 @@ export default {
}
.van-dialog__content {
padding: 10px;
padding: 10px 15px;
box-sizing: border-box;
}
</style>

13
src/api/basic.js

@ -0,0 +1,13 @@
import api from './index'
import request from '@/utils/request'
export function uploadvariedfile(file) {
var files = new File([file], new Date().getTime() + file.name)
const data = new FormData()
data.append('file', files)
return request({
url: api.Uploadvariedfile,
hideloading: true,
method: 'post',
data
})
}

4
src/api/index.js

@ -12,7 +12,9 @@ const api = {
receiveService: '/governance/service/rcvAndProcess/receive',
serviceScopeTree :'/gov/org/icServiceProject/service/serviceScopeTree',
ServiceConfirm: '/governance/service/rcvAndProcess/confirm',
ServiceComplete: '/governance/service/rcvAndProcess/complete'
ServiceComplete: '/governance/service/rcvAndProcess/complete',
Uploadvariedfile: '/oss/file/uploadvariedfile',
SearchResis: '/governance/service/rcvAndProcess/searchResis/detail'
}
export default api

10
src/api/service.js

@ -80,6 +80,12 @@ export function serviceComplete(data) {
data
})
}
//各种找人详情
export function getSearchResis(params) {
return request({
url: api.SearchResis,
method: 'get',
params
})
}

16
src/assets/css/common.less

@ -1,3 +1,4 @@
@import "../fonts/index.css";
.flex {
display: flex;
}
@ -123,5 +124,18 @@
}
.font-bold{
font-weight: bold;
}
.font-pingfangB{
font-family: pingfang-bold;
}
}
.required{
position: relative;
}
.required::after{
content: '*';
position: absolute;
left: -10px;
top: 0;
color: red;
}

17
src/assets/fonts/index.css

@ -0,0 +1,17 @@
@font-face {
font-family: 'pingfang-bold';
src: url('pingfang-bold.ttf');
src:url('pingfang-bold.ttf') format('truetype');
font-weight: normal;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'pingfang-ordinary';
src: url('pingfang-ordinary.ttf');
src:url('pingfang-ordinary.ttf') format('truetype');
font-weight: normal;
font-style: normal;
font-display: swap;
}

BIN
src/assets/fonts/pingfang-black.ttf

Binary file not shown.

BIN
src/assets/fonts/pingfang-bold.ttf

Binary file not shown.

BIN
src/assets/fonts/pingfang-ordinary.ttf

Binary file not shown.

5
src/utils/request.js

@ -15,6 +15,10 @@ const service = axios.create({
// request拦截器 request interceptor
service.interceptors.request.use(
config => {
if (!config.hideloading) {
// loading
Tips.loading(config.message)
}
config.headers['source'] = process.env.NODE_ENV !== 'production' ? 'dev' : 'prod'
config.headers.client = 'web'
config.headers.app = 'gov'
@ -23,7 +27,6 @@ service.interceptors.request.use(
config.headers['Authorization'] = localStorage.getItem('token')
}
config.baseURL = config.baseURL + '/'
Tips.loading()
return config
},
error => {

6
src/views/assistance/card.vue

@ -8,7 +8,7 @@
{{ item.categoryName }}
</div>
</div>
<div class="m-top5 flex flex-center font-bold" v-if="item.source === 1">
<div class="m-top5 flex flex-center font-pingfangB" v-if="item.source === 1">
{{ item.title || '--' }}<br>
</div>
<div class="m-top5 flex flex-center" v-if="item.source !== 1">
@ -30,11 +30,11 @@
<div class="m-top5 ">
<div class="flex flex-center3">
<img src="@/assets/images/icon/content.png" style="vertical-align: top;" class="small_img m-right7">
<div class="van-multi-ellipsis--l2">{{ item.summary }}</div>
<div class="van-multi-ellipsis--l2">{{ item.summary||'--' }}</div>
</div>
</div>
</div>
<hr class="m-top12-right opacity5">
<hr class="m-top12-right opacity5" v-if="active != 2">
<div class="flex flex-fend m-top12-right">
<van-button size="small" type="info" class="m-left12 rounded-corner m-top5-bottom" v-if="item.processStatus === 10" @click="$emit('handleCLickReceive',item)">接单</van-button>
<a :href='`tel:${item.serviceTargetMobile}`' v-if="item.processStatus === 20 && item.source === 4 ">联系需求人</a>

95
src/views/assistance/index.vue

@ -44,6 +44,23 @@
<span @click="showStart = true, showPopup = true" class="font-size13">{{ actualServiceStartTime || '服务开始时间'
}}</span><span class="tag-date"></span><span @click="showEnd = true, showPopup = true"
class="font-size13">{{ actualServiceEndTime || '服务结束时间' }}</span>
<p class="required">完成情况</p>
<van-radio-group v-model="rdFinishResult">
<van-radio name="resolved">已解决</van-radio>
<van-radio name="unresolved">未解决</van-radio>
</van-radio-group>
<p>上传图片</p>
<div class="block">
<template>
<van-uploader v-model="fileList" :after-read="afterRead" :max-count="3"
:max-size="10 * 1024 * 1024" />
</template>
</div>
<p class="required">评价</p>
<van-rate v-model="rdScore" :size="25" color="#ffd21e" void-icon="star" void-color="#eee" />
<p>备注</p>
<van-field v-model="rdFinishDesc" rows="2" autosize type="textarea" placeholder="请输入备注" />
</van-dialog>
<van-popup v-model="showPopup" position="bottom">
<van-datetime-picker v-if="showStart" v-model="serviceTimeStart" type="datetime" title="开始时间"
@ -59,7 +76,8 @@
<script>
import card from './card.vue'
import throttle from 'lodash/debounce'
import { getServiceListRcv, getServiceListProcess, getServiceListCompleted, getCommonalityDetail, getMeasureDetail, getListMyIdentities, receiveService, getServiceScopeTree, serviceConfirm, serviceComplete } from '@/api/service'
import { getServiceListRcv, getServiceListProcess, getServiceListCompleted, getCommonalityDetail, getMeasureDetail, getListMyIdentities, receiveService, getServiceScopeTree, serviceConfirm, serviceComplete,getSearchResis } from '@/api/service'
import { uploadvariedfile } from '@/api/basic'
import { Dialog } from 'vant';
export default {
@ -92,7 +110,11 @@ export default {
showComplete:false,
actualServiceStartTime:null,//
actualServiceEndTime:null,//
selfObj:{}
selfObj:{},
rdFinishResult: null,//
rdScore: 5,//
fileList: [],//
rdFinishDesc: null,//
};
},
created() {
@ -108,12 +130,27 @@ export default {
})
},
methods: {
afterRead(file) {
file.status = 'uploading'
file.message = '上传中...'
uploadvariedfile(file.file)
.then(res => {
file.status = ''
file.message = '上传成功'
file.url = res.data.url
console.log(this.fileList)
})
.catch(() => {
file.status = 'failed'
file.message = '上传失败'
})
},
handelServiceComplete(item) {
if(item.source === 1){
if(item.source != 4){
Dialog.confirm({
message: `确定已完成“${item.title}”服务吗?`,
}).then( () => {
this.serviceComplete(item.source,item.id)
this.serviceComplete(item)
}).catch(() => {
})
}else if(item.source === 4){
@ -122,7 +159,6 @@ export default {
}
},
onBeforeClose(action, done) {
//
if (action === "confirm") {
if (this.selfObj.source === 4) {
if (!this.actualServiceStartTime) {
@ -133,7 +169,25 @@ export default {
this.$tips.warning('请选择服务结束时间')
return done(false)
}
this.serviceComplete(this.selfObj.source, this.selfObj.id, this.actualServiceStartTime, this.actualServiceEndTime)
if (!this.rdScore) {
this.$tips.warning('请进行评价')
return done(false)
}
if (!this.rdFinishResult) {
this.$tips.warning('请选择完成情况')
return done(false)
}
let parm = {
source: this.selfObj.source,
id: this.selfObj.id,
actualServiceStartTime: this.actualServiceStartTime,
actualServiceEndTime: this.actualServiceEndTime,
rdScore: this.rdScore,
rdFinishResult: this.rdFinishResult,
rdFinishAttachments: this.fileList.map(item => ({ originFileName: item.file.name, type: item.file.type, format: 'image', url: item.url })),
rdFinishDesc: this.rdFinishDesc
}
this.serviceComplete(parm)
done(true)
}
@ -142,23 +196,21 @@ export default {
done(true);
}
},
async serviceComplete(source,id,actualServiceStartTime,actualServiceEndTime){
let { code } = await serviceComplete({ source, id, actualServiceStartTime, actualServiceEndTime})
if (code === 0) {
this.$toast.success('服务完成')
this.pageNo = 1;
this.requestFlag = true;
this.list = [];
this.getTableData();
}
async serviceComplete(parm) {
let { code } = await serviceComplete(parm)
if (code === 0) {
this.$tips.success('服务完成')
}
},
async handelTodetail(item) {
this.serverId = item.id;
if (item.source === 4) {
await this.getMeasureDetail()
} else {
} else if(item.source === 1){
await this.getCommonalityDetail()
}else {
await this.getSearchResis()
}
this.$router.push({ name: 'assistanceDetail', params: { detail: this.formData, selfObj: item } })
},
@ -205,7 +257,7 @@ export default {
console.log(parm);
let { data, code, msg } = await receiveService(parm)
if (code === 0) {
this.$toast.success('接单成功')
this.$tips.success('接单成功')
this.showRole = false;
this.showScope = false;
this.pageNo = 1;
@ -233,7 +285,8 @@ export default {
async handelServiceConfirm(val) {
let { data, code, msg } = await serviceConfirm({ id: val.id })
if (code === 0) {
this.$toast.success('确认成功')
this.$tips.success('确认成功')
this.requestFlag = true;
this.pageNo = 1;
this.list = [];
this.getTableData();
@ -257,6 +310,12 @@ export default {
this.formData = data;
}
},
async getSearchResis() {
let { data, code, msg } = await getSearchResis({ id: this.serverId })
if (code === 0) {
this.formData = data;
}
},
async getServiceScopeTree() {
let { data, code, msg } = await getServiceScopeTree({ id: this.serverId })
if (code === 0) {

123
src/views/assistanceDetail/index.vue

@ -2,7 +2,7 @@
<div class='pages' v-if="detail">
<section>
<div class="card m-top12">
<div class="m-top5 flex flex-center font-bold" v-if="this.selfObj.source === 1">
<div class="m-top5 flex flex-center font-pingfangB" v-if="this.selfObj.source === 1">
{{ this.detail.title || '--' }}<br>
</div>
<div class="m-top5 flex flex-center">
@ -10,11 +10,13 @@
{{ detail.serviceTargetName || '--' }} {{ detail.serviceTargetMobile }}<br>
</div>
<div class="opacity5 font-size13 m-top5" style="margin-left: 29px;" v-if="selfObj.source != 1">{{ detail.serviceTargetAddress }}
<div class="opacity5 font-size13 m-top5" style="margin-left: 29px;" v-if="selfObj.source == 4">{{
detail.serviceTargetAddress }}
</div>
<div class="opacity5 font-size13 m-top5" style="margin-left: 29px;" v-else>{{ detail.serviceTargetAddresses.join('') }}
<div class="opacity5 font-size13 m-top5" style="margin-left: 29px;" v-else>{{
detail.serviceTargetAddresses.join(',') }}
</div>
<div class="m-top5 flex flex-center" v-if="selfObj.source != 1">
<div class="m-top5 flex flex-center" v-if="selfObj.source === 4">
<img src="@/assets/images/icon/time.png" class="small_img m-right7">
<div>
{{ detail.serviceStartTime || '--' }}
@ -22,8 +24,8 @@
</div>
<div class="m-top5 flex flex-center" v-else>
<img src="@/assets/images/icon/time.png" class="small_img m-right7">
<div style="font-size: 15px;">
{{ detail.serviceTimeStart || '--' }} {{detail.serviceTimeEnd || '--'}}
<div style="font-size: 15px;">
{{ detail.serviceTimeStart || '--' }} {{ detail.serviceTimeEnd || '--' }}
</div>
</div>
<div class="m-top5 ">
@ -37,13 +39,23 @@
<div class="card m-top12" style="padding: 5px;">
<van-cell title="服务类型" :value="sourceName" />
<van-cell title="需求分类" :value="detail.categoryName" />
<van-cell :title="source === 4 ?'需求分类':'服务类别'" :value="detail.categoryName" />
<van-cell title="上报人" :value="detail.serviceTargetName + detail.serviceTargetMobile"
v-if="selfObj.source != 1" />
<van-cell title="上报时间" :value="detail.reportTime" v-if="selfObj.source != 1" />
<van-cell title="创建时间" :value="detail.createdTime" v-if="selfObj.source == 1 && selfObj.processStatus === 10" />
<van-cell title="指派时间" :value="detail.assignTime" v-if="selfObj.source == 1 && (selfObj.processStatus === 30 ||selfObj.processStatus === 20 )"/>
<van-cell title="完成时间" :value="detail.assignTime" v-if="selfObj.source == 1 && selfObj.processStatus === 30"/>
v-if="selfObj.source == 4" />
<van-cell title="上报时间" :value="detail.reportTime" v-if="selfObj.source == 4" />
<van-cell title="实际服务时间" :value="`${detail.serviceStartTime} 至 ${detail.serviceEndTime}`"
v-if="selfObj.source == 4" />
<van-cell title="评分" v-if="selfObj.source == 4" >
<template #default>
<van-rate v-model="detail.score" readonly color="#ffd21e"/>
</template>
</van-cell>
<van-cell title="创建时间" :value="detail.createdTime"
v-if="selfObj.source != 4 && selfObj.processStatus === 10" />
<van-cell title="指派时间" :value="detail.assignTime"
v-if="selfObj.source != 4 && (selfObj.processStatus === 30 || selfObj.processStatus === 20)" />
<van-cell title="完成时间" :value="detail.serviceTimeEnd"
v-if="selfObj.source != 4 && selfObj.processStatus === 30" />
</div>
</section>
<div class="bto_btn flex flex-center" style="justify-content: end;">
@ -51,9 +63,9 @@
<!--processStatus: 10待接单/待指派20待处理30已完成 -->
<van-button size="small" type="info" class="m-left12 rounded-corner m-top5-bottom"
v-if="selfObj.processStatus === 10 && selfObj.source === 1" @click="showScope = true">接单</van-button>
v-if="selfObj.processStatus === 10 && selfObj.source !== 4" @click="showScope = true">接单</van-button>
<van-button size="small" type="info" class="m-left12 rounded-corner m-top5-bottom"
v-if="selfObj.processStatus === 20 && selfObj.source === 1 && selfObj.confirmedFlag === 1"
v-if="selfObj.processStatus === 20 && selfObj.source !== 4 && selfObj.confirmedFlag === 1"
@click="handelClickComplete">完成服务</van-button>
<van-button size="small" type="info" class="m-left12 rounded-corner m-top5-bottom"
@ -76,23 +88,27 @@
</van-dialog>
<!-- 个性需求完成弹框 -->
<van-dialog v-model="showComplete" title="我已完成需求人的需求" show-cancel-button :before-close="onBeforeClose">
<p>服务开始时间</p>
<p class="required">服务开始时间</p>
<span @click="showStart = true, showPopup = true" class="font-size13">{{ actualServiceStartTime || '服务开始时间'
}}</span><span class="tag-date"></span><span @click="showEnd = true, showPopup = true"
class="font-size13">{{ actualServiceEndTime || '服务结束时间' }}</span>
<p>完成情况</p>
<p class="required">完成情况</p>
<van-radio-group v-model="rdFinishResult">
<van-radio name="resolved">已解决</van-radio>
<van-radio name="unresolved">未解决</van-radio>
</van-radio-group>
<p>评价</p>
<van-rate
v-model="rdScore"
:size="25"
color="#ffd21e"
void-icon="star"
void-color="#eee"
/>
<p>上传图片</p>
<div class="block">
<template>
<van-uploader v-model="fileList" :after-read="afterRead" :max-count="3"
:max-size="10 * 1024 * 1024" />
</template>
</div>
<p class="required">评价</p>
<van-rate v-model="rdScore" :size="25" color="#ffd21e" void-icon="star" void-color="#eee" />
<p>备注</p>
<van-field v-model="rdFinishDesc" rows="2" autosize type="textarea" placeholder="请输入备注" />
</van-dialog>
<van-popup v-model="showPopup" position="bottom">
<van-datetime-picker v-if="showStart" v-model="serviceTimeStart" type="datetime" title="开始时间"
@ -108,6 +124,7 @@
<script>
import { receiveService, getListMyIdentities, getServiceScopeTree, serviceComplete, serviceConfirm } from '@/api/service'
import { uploadvariedfile } from '@/api/basic'
import { Dialog } from 'vant';
export default {
data() {
@ -132,9 +149,11 @@ export default {
showRole: false,
actualServiceStartTime: null,//
actualServiceEndTime: null,//
showComplete: false,
rdFinishResult:null,
rdScore:5
showComplete: false,//
rdFinishResult: null,//
rdScore: 5,//
fileList: [],//
rdFinishDesc: null,//
};
},
created() {
@ -149,6 +168,21 @@ export default {
this.sourceName = this.typeList[this.source]
},
methods: {
afterRead(file) {
file.status = 'uploading'
file.message = '上传中...'
uploadvariedfile(file.file)
.then(res => {
file.status = ''
file.message = '上传成功'
file.url = res.data.url
console.log(this.fileList)
})
.catch(() => {
file.status = 'failed'
file.message = '上传失败'
})
},
async confirmService() {
let { data, code, msg } = await serviceConfirm({ id: this.id })
if (code === 0) {
@ -166,10 +200,27 @@ export default {
this.$tips.warning('请选择服务结束时间')
return done(false)
}
this.serviceComplete(this.selfObj.source, this.selfObj.id, this.actualServiceStartTime, this.actualServiceEndTime)
if (!this.rdScore) {
this.$tips.warning('请进行评价')
return done(false)
}
if (!this.rdFinishResult) {
this.$tips.warning('请选择完成情况')
return done(false)
}
let parm = {
source: this.selfObj.source,
id: this.selfObj.id,
actualServiceStartTime: this.actualServiceStartTime,
actualServiceEndTime: this.actualServiceEndTime,
rdScore: this.rdScore,
rdFinishResult: this.rdFinishResult,
rdFinishAttachments: this.fileList.map(item => ({ originFileName: item.file.name, type: item.file.type, format: 'image', url: item.url })),
rdFinishDesc: this.rdFinishDesc
}
this.serviceComplete(parm)
done(true)
}
}
//
else {
@ -178,19 +229,19 @@ export default {
},
handelClickComplete() {
if (this.selfObj.source === 1) {
if (this.selfObj.source != 4) {
Dialog.confirm({
message: `确定已完成${this.detail.title}服务吗?`,
message: `确定已完成${this.detail.title}服务吗?`,
}).then(() => {
this.serviceComplete(this.selfObj.source, this.selfObj.id)
this.serviceComplete(this.selfObj)
}).catch(() => {
});
}
},
async serviceComplete(source, id, actualServiceStartTime, actualServiceEndTime) {
let { code } = await serviceComplete({ source, id, actualServiceStartTime, actualServiceEndTime })
async serviceComplete(parm) {
let { code } = await serviceComplete(parm)
if (code === 0) {
this.$toast.success('服务完成')
this.$tips.success('服务完成')
this.$router.go(-1)
}
},
@ -222,7 +273,7 @@ export default {
console.log(parm);
let { data, code, msg } = await receiveService(parm)
if (code === 0) {
this.$toast.success('接单成功')
this.$tips.success('接单成功')
this.showRole = false;
this.showScope = false;
this.$router.back()

2
src/views/mine/changePassword.vue

@ -106,7 +106,7 @@ export default {
let { data, code, msg } = response;
if(code === 0){
console.log('data111');
this.$toast('修改成功!请重新登录');
this.$tips('修改成功!请重新登录');
this.$router.replace({name:'login'})
}
}).catch(error => {

Loading…
Cancel
Save