Commit 94f59716 by 董有沛

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/views/school-center/order/order.vue
parents 4b4c11ab 831e0a9b
...@@ -6,3 +6,4 @@ node_modules/ ...@@ -6,3 +6,4 @@ node_modules/
.git/ .git/
package-lock.json package-lock.json
dist/ dist/
deploy/prod/docker-gdtel-gztel-hhr/ui/nginx/html/
FROM nginx
LABEL maintainer="Liph <liph@gzwinsun.com>" app="gdtel-gztel-jyyy-ui"
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk update && apk add ca-certificates tzdata \
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/timezone \
&& apk del tzdata
COPY dist/ /usr/share/nginx/html/
EXPOSE 80
...@@ -12,14 +12,14 @@ const local = { ...@@ -12,14 +12,14 @@ const local = {
'^/api/auth/ciop': '/auth/ciop' '^/api/auth/ciop': '/auth/ciop'
} }
}, },
'/api/schoolcenter': { /*'/api/api/ciop': {
target: 'http://localhost:11091', target: 'http://localhost:11091',
//target: 'http://132.97.54.60:58334', //target: 'http://132.97.54.60:58334',
ws: false, ws: false,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
//默认所有请求都加了api前缀,需要去掉 //默认所有请求都加了api前缀,需要去掉
'^/api/schoolcenter': '/' '^/api/api/ciop': '/ciop'
} }
}, },
'/api/report': { '/api/report': {
...@@ -41,6 +41,16 @@ const local = { ...@@ -41,6 +41,16 @@ const local = {
//默认所有请求都加了api前缀,需要去掉 //默认所有请求都加了api前缀,需要去掉
'^/api/app': '/' '^/api/app': '/'
} }
},*/
'/api/manager': {
target: 'http://localhost:10001',
ws: false,
changeOrigin: true,
pathRewrite: {
//默认所有请求都加了api前缀,需要去掉
'^/api/manager': '/manager'
}
} }
} }
} }
......
FROM nginx
LABEL maintainer="Liph <liph@gzwinsun.com>" app="com.gdtel.gztel.schoolcenter.ui"
COPY nginx/html /etc/nginx/html
COPY nginx/config/ui.conf /etc/nginx/conf.d/default.conf
EXPOSE 11090
CMD ["nginx", "-g", "daemon off;"]
server_tokens off;
server {
listen 11090;
server_name 172.18.101.171;
client_max_body_size 100M;
proxy_connect_timeout 180;
proxy_read_timeout 180;
proxy_send_timeout 180;
location / {
root /etc/nginx/html;
}
location /auth {
proxy_pass http://gateway:10001/auth;
}
# 后端管理接口
location /manager {
proxy_pass http://gateway:10001/manager;
}
# 新用户模块
# 老用户模块
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
#!/bin/bash
rm -rf docker-gdtel-gztel-hhr/ui/nginx/html/*
cp -r ../../dist/* docker-gdtel-gztel-hhr/ui/nginx/html
scp -r docker-gdtel-gztel-hhr/* root@172.18.101.171:/datas/apps/web/docker-gdtel-gztel-hhr/
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
"dependencies": { "dependencies": {
"@antv/data-set": "^0.10.2", "@antv/data-set": "^0.10.2",
"@tinymce/tinymce-vue": "^2.0.0", "@tinymce/tinymce-vue": "^2.0.0",
"ant-design-vue": "^1.4.5", "ant-design-vue": "^1.4.12",
"apexcharts": "^3.10.1", "apexcharts": "^3.10.1",
"axios": "^0.18.0", "axios": "^0.18.0",
"clipboard": "^2.0.4", "clipboard": "^2.0.4",
...@@ -23,11 +23,13 @@ ...@@ -23,11 +23,13 @@
"dayjs": "^1.8.17", "dayjs": "^1.8.17",
"echarts": "^4.5.0", "echarts": "^4.5.0",
"enquire.js": "^2.1.6", "enquire.js": "^2.1.6",
"html2canvas": "^1.0.0-rc.5",
"js-cookie": "^2.2.1", "js-cookie": "^2.2.1",
"lodash.get": "^4.4.2", "lodash.get": "^4.4.2",
"lodash.pick": "^4.4.0", "lodash.pick": "^4.4.0",
"md5": "^2.2.1", "md5": "^2.2.1",
"nprogress": "^0.2.0", "nprogress": "^0.2.0",
"qrcodejs2": "^0.0.2",
"reqwest": "^2.0.5", "reqwest": "^2.0.5",
"tinymce": "^5.1.1", "tinymce": "^5.1.1",
"vant": "^2.5.2", "vant": "^2.5.2",
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0"> <meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>中国电信广州分公司集约一体化运营门户</title> <title>一体化运营门户欢迎您</title>
<link rel="icon" href="<%= BASE_URL %>logoJY.png"> <link rel="icon" href="<%= BASE_URL %>logoJY.png">
<script src="./polyfill.js"></script> <script src="./polyfill.js"></script>
<style> <style>
......
import {postAction,getAotion} from '@/api/manage' import {postAction,getAotion} from '@/api/manage'
const prefix = '/schoolcenter/ciop'; const prefix = '/manager/ciop';
// 获取活动列表 // 获取活动列表
let findByList = (params) => postAction(prefix + "/school/partner/list" , params); let findByList = (params) => postAction(prefix + "/school/partner/list" , params);
...@@ -13,4 +13,4 @@ let getlistysm = (params) => postAction(prefix + "/ysmUser/getlist" , params); ...@@ -13,4 +13,4 @@ let getlistysm = (params) => postAction(prefix + "/ysmUser/getlist" , params);
export { export {
findByList,modify,getlistysm findByList,modify,getlistysm
} }
\ No newline at end of file
import {postAction,downFilePost} from '@/api/manage'
const prefix = '/manager/ciop/';
//订单
let deleteExcel = (params) => postAction(prefix + "exportExcel/deleteExcel" , params);
let uploadExcel = (params) => downFilePost(prefix + "exportExcel/uploadExcel" , params);
let listExportExcel = (params) => postAction(prefix + "exportExcel/listExportExcel" , params);
export {
deleteExcel,
listExportExcel,
uploadExcel
}
import {postAction,downFilePost} from '@/api/manage' import {postAction,downFilePost} from '@/api/manage'
const prefix = '/schoolcenter/ciop'; const prefix = '/manager/ciop/';
//订单 //订单
let orderList = (params) => postAction(prefix + "/order/list" , params); let orderList = (params) => postAction(prefix + "order/list" , params);
let download = (params) => downFilePost(prefix + "/order/download/" , params); let download = (params) => postAction(prefix + "order/download" , params);
//返回订单历史状态
let selectOrderHis = (params) => postAction(prefix +"order/selectOrderHis" , params);
let reviewStudentIdCard = (params) => postAction(prefix +"order/reviewStudentIdCard" , params);
let abnormal = (params) => postAction(prefix +"order/abnormal" , params);
let downloadMoBan = (params) => downFilePost(prefix + "order/downloadMoBan" , params);
let downloadMoBanKD = (params) => downFilePost(prefix + "order/downloadMoBanKD" , params);
//报表
let reportList = (params) => postAction(prefix + "order/getHhrOrderInfo",params);
let reportDownload = (params) => postAction(prefix + "order/outputHhrOrder",params);
export { export {
orderList, orderList,
download download,
} selectOrderHis,
\ No newline at end of file abnormal,
downloadMoBan,
downloadMoBanKD,
reportList,
reviewStudentIdCard,
reportDownload
}
import {postAction,getAotion} from '@/api/manage' import {postAction,getAotion} from '@/api/manage'
const prefix = '/schoolcenter/ciop'; const prefix = '/manager/ciop';
// 获取活动列表 // 获取活动列表
let findByList = (params) => postAction(prefix + "/packageManagement/package/list" , params); let findByList = (params) => postAction(prefix + "/packageManagement/package/list" , params);
...@@ -19,4 +19,4 @@ let delet= (params) => postAction(prefix + "/packageManagement/package/delete" , ...@@ -19,4 +19,4 @@ let delet= (params) => postAction(prefix + "/packageManagement/package/delete" ,
let packageAllList= () => postAction(prefix + "/packageManagement/package/packageAllList" ); let packageAllList= () => postAction(prefix + "/packageManagement/package/packageAllList" );
export { export {
findByList,choosepages,modify,insert,packageAllList,delet findByList,choosepages,modify,insert,packageAllList,delet
} }
\ No newline at end of file
import {postAction,downFilePost} from '@/api/manage' import {postAction,downFilePost} from '@/api/manage'
const prefix = '/schoolcenter/ciop'; const prefix = '/manager/ciop';
// 宽带产品 // 宽带产品
let productList = (params) => postAction(prefix + "/product/list" , params); let productList = (params) => postAction(prefix + "/product/list" , params);
let productDelete = (id) => postAction(prefix + "/product/delete/"+id); let productDelete = (id) => postAction(prefix + "/product/delete/"+id);
let productInsert = (params) => postAction(prefix + "/product/insert" , params); let productInsert = (params) => postAction(prefix + "/product/insert" , params);
let productUpdate = (params) => postAction(prefix + "/product/update",params); let productUpdate = (params) => postAction(prefix + "/product/update",params);
//适用学校
let universitySchool = (params) => postAction(prefix + "/university/universitySchool",params);
//大学宽带信息 //大学宽带信息
let universityList = (params) => postAction(prefix + "/university/list" , params); let universityList = (params) => postAction(prefix + "/university/list" , params);
...@@ -13,6 +15,7 @@ let universityDelete = (id) => postAction(prefix + "/university/delete/"+id); ...@@ -13,6 +15,7 @@ let universityDelete = (id) => postAction(prefix + "/university/delete/"+id);
let universityInsert = (params) => postAction(prefix + "/university/insert" , params); let universityInsert = (params) => postAction(prefix + "/university/insert" , params);
let universityUpdate = (params) => postAction(prefix + "/university/update",params); let universityUpdate = (params) => postAction(prefix + "/university/update",params);
//宽带订单 //宽带订单
let orderViewList = (params) => postAction(prefix + "/orderView/list" , params); let orderViewList = (params) => postAction(prefix + "/orderView/list" , params);
let download = (params) => downFilePost(prefix + "/orderView/download/" , params); let download = (params) => downFilePost(prefix + "/orderView/download/" , params);
...@@ -27,5 +30,6 @@ export { ...@@ -27,5 +30,6 @@ export {
universityInsert, universityInsert,
universityUpdate, universityUpdate,
orderViewList, orderViewList,
download download,
} universitySchool
\ No newline at end of file }
import {postAction,downFilePost} from '@/api/manage'
const prefix = '/manager/ciop';
let uploadPicture = (params) => postAction(prefix + "/QRCpde/picture" , params);
let listPicture = (params) => postAction(prefix + "/QRCpde/list" , params);
let deletePicture = (id,params) => postAction(prefix + "/QRCpde/deletePicture/"+id , params);
let updateEnable = (id,params) => postAction(prefix + "/QRCpde/updateEnable/"+id , params);
export {
uploadPicture,
listPicture,
deletePicture,
updateEnable
}
import {postAction,getAotion} from '@/api/manage' import {postAction,getAotion} from '@/api/manage'
const prefix = '/schoolcenter/ciop'; const prefix = '/manager/ciop';
// 获取活动列表 // 获取活动列表
let findByList = (params) => postAction(prefix + "/school/schoolManagement/findByList" , params); let findByList = (params) => postAction(prefix + "/school/schoolManagement/findByList" , params);
...@@ -17,4 +17,4 @@ let insert= (params) => postAction(prefix + "/school/schoolManagement/insert" , ...@@ -17,4 +17,4 @@ let insert= (params) => postAction(prefix + "/school/schoolManagement/insert" ,
let hidestatus= (params) => postAction(prefix + "/school/schoolManagement/hidestatus" , params); let hidestatus= (params) => postAction(prefix + "/school/schoolManagement/hidestatus" , params);
export { export {
findByList,choosepages,modify,insert,hidestatus findByList,choosepages,modify,insert,hidestatus
} }
\ No newline at end of file
import {postAction,getAotion} from '@/api/manage' import {postAction,getAotion} from '@/api/manage'
const prefix = '/schoolcenter/ciop'; const prefix = '/manager/ciop';
// 获取活动列表 // 获取活动列表
let packagefindByList = (params) => postAction(prefix + "/school/packageManagement/list" , params); let packagefindByList = (params) => postAction(prefix + "/school/packageManagement/list" , params);
export { export {
packagefindByList packagefindByList
} }
\ No newline at end of file
import {postAction,downFilePost} from '@/api/manage' import {postAction,downFilePost} from '@/api/manage'
const prefix = '/schoolcenter/ciop'; const prefix = '/manager/ciop';
// 智能平台账号实名 // 智能平台账号实名
let ysmUserList = (params) => postAction(prefix + "/ysmUser/list" , params); let ysmUserList = (params) => postAction(prefix + "/ysmUser/list" , params);
...@@ -13,4 +13,4 @@ export { ...@@ -13,4 +13,4 @@ export {
ysmUserInsert, ysmUserInsert,
ysmUserUpdate ysmUserUpdate
} }
\ No newline at end of file
...@@ -2,11 +2,11 @@ ...@@ -2,11 +2,11 @@
* 系统管理的api管理 * 系统管理的api管理
*/ */
import { getAction, postAction,postFormAction } from '@/api/manage' import { getAction, postAction,postFormAction } from '@/api/manage'
let prefix = 'auth/ciop/' let prefix = 'auth/ciop'
//忘记密码 //忘记密码
let register = (params) => postAction(prefix+"forgerpw/changePwd", params); let register = (params) => postAction(prefix+"/forgerpw/changePwd", params);
let registercode = (params) => postAction(prefix+"forgerpw/verificationCode", params); let registercode = (params) => postAction(prefix+"/forgerpw/verificationCode", params);
// 用户管理 // 用户管理
let getList = (params) => getAction(prefix+"/dept/tree", params); let getList = (params) => getAction(prefix+"/dept/tree", params);
let tabList = (params) => getAction(prefix+"/mgr/list", params); let tabList = (params) => getAction(prefix+"/mgr/list", params);
...@@ -19,7 +19,7 @@ let roleTreeList = (params) => postAction(prefix+"/role/roleTreeListByUserId", p ...@@ -19,7 +19,7 @@ let roleTreeList = (params) => postAction(prefix+"/role/roleTreeListByUserId", p
let roleTreeList2 = (params) => postAction(prefix+"/role/roleTreeListByUserId/"+params["id"], {}); let roleTreeList2 = (params) => postAction(prefix+"/role/roleTreeListByUserId/"+params["id"], {});
let userFreeze= (params) => postAction(prefix+"/mgr/freeze", params); let userFreeze= (params) => postAction(prefix+"/mgr/freeze", params);
let userUnFreeze= (params) => postAction(prefix+"/mgr/unfreeze", params); let userUnFreeze= (params) => postAction(prefix+"/mgr/unfreeze", params);
let changeOtherPwd= (params) => postAction(prefix+"/mgr/changeOtherPwd", params);//超级用户修改密码 let changeOtherPwd= (params) => postAction(prefix+"/forgerpw/changeOtherPwd", params);//修改密码
//部门管理 //部门管理
const departmentList = (params) => getAction(prefix+"/dept/departmentList", params); const departmentList = (params) => getAction(prefix+"/dept/departmentList", params);
let deptAdd = (params) => postAction(prefix+"/dept/add", params); let deptAdd = (params) => postAction(prefix+"/dept/add", params);
......

163 KB | W: | H:

172 KB | W: | H:

src/assets/bg_content.png
src/assets/bg_content.png
src/assets/bg_content.png
src/assets/bg_content.png
  • 2-up
  • Swipe
  • Onion skin
<template>
<div>
<img ref="code2" class="code" :src="images" v-if="images != ''" @mousedown.prevent="move" :style="{'width':(width+'px'),'height':(width+'px')}">
<div ref="code" v-show="false" class="qrcode" :style="{'width':(width+'px'),'height':(width+'px')}"></div>
</div>
</template>
<script>
import draggable from 'vuedraggable';
import QRCode from 'qrcodejs2';
export default {
name: "codeMove",
components:{draggable},
props:{
width:Number
},
data(){
return {
currentX:0,
currentY:0,
desX:0,
desY:0,
timer:null,
positionX:0,
positionY:0,
text:"",
images:""
}
},
methods:{
//生成海报
newCode(text){
//清空内容
this.$refs.code.innerHTML = "";
this.text = text;
new QRCode(this.$refs.code, {
text: text,
width: this.width,
height: this.width
})
listenQrcodeSrc();
let that = this;
function listenQrcodeSrc() {
let qrcodeImg = document.querySelector('.qrcode canvas+img')
let observeConfig = {attributes: true}
let observeCb = (mutationsList, observer) => {
mutationsList.forEach(function (mutation) {
if (
mutation.type.toLowerCase() === 'attributes' &&
mutation.attributeName.toLowerCase() === 'src'
) {
console.log('qrcodeImg src done!', mutation.target.src)
that.images = mutation.target.src;
observer.disconnect()
}
})
}
if (typeof MutationObserver !== 'undefined') {
let observer = new MutationObserver(observeCb)
observer.observe(qrcodeImg, observeConfig)
}
}
},
move(e){
let op = e.currentTarget; //获取目标元素
//算出鼠标相对元素的位置
let disX = e.clientX - op.offsetLeft;
let disY = e.clientY - op.offsetTop;
document.onmousemove = (e)=>{ //鼠标按下并移动的事件
//用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
let left = e.clientX - disX;
let top = e.clientY - disY;
if(left<0){
left = 0;
}
if(left+this.width > 300){
left = 300-this.width;
}
if(top<0){
top = 0;
}
//绑定元素位置到positionX和positionY上面
this.positionX = left;
this.positionY = top;
//移动当前元素
op.style.left = left + 'px';
op.style.top = top + 'px';
};
document.onmouseup = (e) => {
document.onmousemove = null;
document.onmouseup = null;
};
}
}
}
</script>
<style scoped lang="less">
.code{
position: absolute;
width: 100px;
height: 100px;
}
</style>
...@@ -19,14 +19,6 @@ ...@@ -19,14 +19,6 @@
</span> </span>
<a-tooltip placement="topLeft"> <a-tooltip placement="topLeft">
<template slot="title"> <template slot="title">
<span>系统反馈</span>
</template>
<span class="action" @click="JumpPage">
<a-icon type="file-text"/>
</span>
</a-tooltip>
<a-tooltip placement="topLeft">
<template slot="title">
<span>查看版本信息</span> <span>查看版本信息</span>
</template> </template>
<span class="action" v-if="isDesktop()" @click="visible = true"> <span class="action" v-if="isDesktop()" @click="visible = true">
...@@ -79,10 +71,6 @@ ...@@ -79,10 +71,6 @@
// } // }
return url; return url;
}, },
//跳转
JumpPage() {
this.$router.push({path: '/gdtel-gztel-jyyy/system/feedback'})
},
handleLogout() { handleLogout() {
const that = this const that = this
......
...@@ -134,7 +134,6 @@ ...@@ -134,7 +134,6 @@
that.confirmLoading = true; that.confirmLoading = true;
values.oldPwd=encodeURIComponent(this.getPass(values.oldPwd)) values.oldPwd=encodeURIComponent(this.getPass(values.oldPwd))
values.newPwd=encodeURIComponent(this.getPass(values.newPwd)) values.newPwd=encodeURIComponent(this.getPass(values.newPwd))
values.inputCode=encodeURIComponent(this.getPass("XXXXXX"))
values.rePwd=values.newPwd values.rePwd=values.newPwd
let params = Object.assign(values) let params = Object.assign(values)
postAction(this.url,params).then((res)=>{ postAction(this.url,params).then((res)=>{
......
<template> <template>
<a-drawer title="版本信息" placement="right" :visible="visible" @close="close" :closable="false" :maskClosable="true" <a-drawer
width="300"> title="版本信息"
<a-card title="系统UI" size="small"> placement="right"
<p> :visible="visible"
<label>版本号:</label> @close="close"
<span>0.0.59</span> :closable="false"
</p> :maskClosable="true"
</a-card> width="300"
</a-drawer> >
<a-card title="系统UI" size="small">
<p>
<label>版本号:</label>
<span>0.0.1</span>
</p>
</a-card>
</a-drawer>
</template> </template>
<script> <script>
export default { export default {
name: "VersionModel", name: "VersionModel",
props: { props: {
visible: Boolean, visible: Boolean
}, },
data() { data() {
return { return {
versiondatas:[], versiondatas: []
} };
}, },
methods: { methods: {
close() { close() {
this.$emit('update:visible', false); this.$emit("update:visible", false);
}
},
created() {
}
} }
},
created() {}
};
</script> </script>
<style scoped> <style scoped>
</style> </style>
...@@ -14,7 +14,13 @@ export const asyncRouterMap = [{ ...@@ -14,7 +14,13 @@ export const asyncRouterMap = [{
path: 'login', path: 'login',
name: 'login', name: 'login',
component: () => import(/* webpackChunkName: "user" */ '@/views/user/Login') component: () => import(/* webpackChunkName: "user" */ '@/views/user/Login')
}, }
,
{
path: 'register',
name: 'register',
component: () => import(/* webpackChunkName: "user" */ '@/views/user/register')
},
{ {
path: 'ueditor2', path: 'ueditor2',
name: 'ueditor2', name: 'ueditor2',
......
...@@ -12,13 +12,11 @@ let Frequency = { ...@@ -12,13 +12,11 @@ let Frequency = {
let title =[ let title =[
{ {
title: '当前操作',},
{
title: '处理人',}, title: '处理人',},
{ {
title: '处理时间',}, title: '处理时间',},
{ {
title: '回复信息',} title: '订单状态',}
]; ];
export default { export default {
......
...@@ -6,10 +6,12 @@ import {Modal, notification} from 'ant-design-vue' ...@@ -6,10 +6,12 @@ import {Modal, notification} from 'ant-design-vue'
import { ACCESS_TOKEN } from "@/store/mutation-types" import { ACCESS_TOKEN } from "@/store/mutation-types"
import { serialize } from '@/utils/util' import { serialize } from '@/utils/util'
const env = process.env.NODE_ENV; //获取当前环境 //获取当前环境
const env = process.env.NODE_ENV;
let api = "/" + window.wsPackName; let api = "/" + window.wsPackName;
if(env === 'development'){ //测试环境默认添加前缀 if(env === 'development'){
//测试环境默认添加前缀
api = '/api/' + window.wsPackName; api = '/api/' + window.wsPackName;
} }
// 创建 axios 实例 // 创建 axios 实例
......
<template>
<div class="flex-container">
<div class="table-page-search-wrapper" >
<!-- 搜索区域 -->
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="4" :sm="12">
<a-form-item label="是否启用:">
<a-select v-model="queryParam.enable" style="width: 120px">
<a-select-option value>全部</a-select-option>
<a-select-option value="0">不启用</a-select-option>
<a-select-option value="1">启用</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="4" :sm="12">
<a-button @click="search()" type="primary">查询</a-button>
<a-divider type="vertical"/>
<a-upload
:beforeUpload="uploadPicture"
>
<a-button> <a-icon type="upload" /> 上传图片 </a-button>
</a-upload>
</a-col>
</a-row>
</a-form>
</div>
<new-poster ref="model1"></new-poster>
<!--列表-->
<s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling" :locale="emptyText">
<template slot="createTime" slot-scope="text">
{{ text | dayjs}}
</template>
<template slot="picture" slot-scope="text">
<img style="width: 20%" :src="apis + text" @click="imgClick(text)">
</template>
<template slot="enable" slot-scope="text">
<span v-if="text == 0">不启用</span>
<span v-if="text == 1">启用</span>
</template>
<template slot="operation" slot-scope="text, record">
<span>
<a @click="addPoster(record.picture)">新建海报</a>
<a-divider type="vertical"/>
<a-popconfirm title="是否要删除此行?" @confirm="remove(record.id)">
<a>删除</a>
</a-popconfirm>
<a-divider type="vertical"/>
<a v-show="record.enable == '0'"
@click="updateEnable(record.id,'1')">启用</a>
<a v-show="record.enable == '1'"
@click="updateEnable(record.id,'0')">不启用</a>
</span>
</template>
</s-table>
<!----弹框-->
<a-drawer
title="海报图片"
placement="right"
:closable="false"
@close="pictureOnClose"
:visible="visiblepicture"
width="30%"
>
<div >
<img class="bg-img" :src="imgInfo">
</div>
</a-drawer>
</div>
</template>
<script>
import STable from '@/components/table';
import {listPicture,uploadPicture,deletePicture,updateEnable} from "@/api/school-center/qrCode"
import newPoster from './newPoster'
export default {
name: "PosterList",
components: {
STable,newPoster
},
data(){
return {
pictureSize:2,//限制图片大小,M为单位
emptyText: {emptyText: '暂无数据'},
jumpPath:'http://hhrcode.winsun-aly.com/#/hhr/home?id=',
imgInfo:'',
visiblepicture:false,
pictureInfo:'',
Formtable: this.$form.createForm(this),
modifyvisible: false,
add: true,
queryParam: {
enable :'', //是否启用
},
modelData:{
universityName:'',
universityRegion:'',
universityInstalledAddress:'',
universityExteriorLines:'',
universityPackageNumber:'',
universityInstalledAddressId:'',
universityUserType:'',
universityContactPhone:'',
universityMonthlyRentType:'',
universityChargeMode:'',
universityChargingAttribute:'',
speed:'',
publicNumber:'',
universityId:''
},
apis:'',
columns: [
{dataIndex: 'picture', title: '图片 ', scopedSlots: {customRender: 'picture'},align: 'center'},
{dataIndex: 'createName', width: 100, title: '创建人',align: 'center'},
{dataIndex: 'createTime', width: 100, title: '创建时间 ', scopedSlots: {customRender: 'createTime'},align: 'center'},
{dataIndex: 'enable', width: 50, title: '启用状态', scopedSlots: {customRender: 'enable'},align: 'center'},
{
dataIndex: 'operation',
width: 100,
title: '操作',
scopedSlots: {customRender: 'operation'},
fixed: "right",
align: 'center'
}]
,
rowdata: parameter => {
const env = process.env.NODE_ENV; //获取当前环境
if(env === 'development'){ //测试环境默认添加前缀
this.apis = '/api/';
}
let params = {
pageNo: parameter.pageNo,
pageSize: parameter.pageSize,
enable:this.queryParam.enable
}
return listPicture(params).then(res => {
let data = {}
if (res.state !== 'success') {
this.$message.error("查询失败!", 5);
this.emptyText.emptyText = '查询失败!'
data = {
data: [],
pageSize: parameter.pageSize,
pageNo: 1,
totalCount: 0
}
} else {
data = {
data: res.data.records,
pageSize: parameter.pageSize,
pageNo: parameter.pageNo,
totalCount: res.data.total
}
}
return data
})
}
}
},
methods:{
pictureOnClose() {
this.imgInfo=''
this.visiblepicture = false;
},
imgClick(res){
this.imgInfo=this.apis + res
this.visiblepicture=true
},
uploadPicture(file) {
let fileSize = file.size/1024/1024
console.log(fileSize)
if(fileSize > this.pictureSize){
this.$message.error('上传失败!图片大小不能超过'+this.pictureSize+'M',5);
return new Promise(resolve => {})
}else {
return new Promise(resolve => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => {
const img = document.createElement('img');
img.src = reader.result;
img.onload = () => {
const limitWidth = arguments[2] ? arguments[2] : 640;
const width = img.width > limitWidth ? limitWidth : img.width;
const height = img.width > limitWidth ? parseInt((img.height * limitWidth) / img.width) : img.height;
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = width
canvas.height = height
ctx.fillStyle = '#fff'
ctx.fillRect(0,0,canvas.width,canvas.height)
ctx.drawImage(img,0,0,width,height)
const picture = canvas.toDataURL('image/jpeg')
console.log(picture.length)
return uploadPicture({picture}).then(res => {
if(res == 'error'){
this.$message.error('上传失败!',5);
this.search()
}
if(res.state == 'success'){
this.search()
this.$message.success(res.data,5);
}
})
};
};
});
}
},
addPoster(picture){
let url = this.jumpPath+this.$store.state.user.info.id
picture = this.apis + picture
this.$refs.model1.showModal(picture,url);
},
search() {
this.$refs.table.refresh({search: true})
},
remove(id) {
deletePicture(id).then((res) => {
if(res.state=="success"){
this.$notification.success({message: res.data, description: '', duration: 4})
this.search()
}
if(res.state=="error"){
this.$notification.error({message: res.msg, description: '', duration: 4})
}
})
},
updateEnable(id,enable) {
updateEnable(id,{enable}).then((res) => {
if(res.state=="success"){
this.$notification.success({message: res.data, description: '', duration: 4})
this.search()
}
if(res.state=="error"){
this.$notification.error({message: res.msg, description: '', duration: 4})
}
})
},
}
}
</script>
<style scoped lang="less">
.bg-img {
margin-left: 20%;
width: 60%;
}
</style>
<template>
<a-drawer
title="二维码创建"
placement="right"
:closable="true"
:visible="visible"
@close="onClose"
width="50%"
:bodyStyle="{'padding':0}"
destroyOnClose
>
<div class="meun-box">
<a-row>
<a-col :span="6">
<!-- <div class="select-btn">
<span>选择图片</span>
<input ref="selectImgae" class="seletImg" type="file" @change="selectImage" />
</div>-->
<a-button type="primary" @click="toImage" v-if="images != ''">生成图片</a-button>
<!-- <a-divider type="vertical"/>
<a-button @click="newCode" v-if="images != ''">生成二维码</a-button>-->
</a-col>
<!--<a-col :span="6" v-if="images!=''">
<a-form-item label="二维码内容:" :label-col="{ span: 5 }" :wrapper-col="{ span: 12 }">
<a-input v-model="codeText"></a-input>
</a-form-item>
</a-col>-->
<a-col :span="18" v-if="images!=''">
<a-form-item label="二维码大小:" :label-col="{ span: 5 }" :wrapper-col="{ span: 12 }">
<a-slider id="code" v-model="codeWidth" :max="300" />
</a-form-item>
</a-col>
</a-row>
</div>
<div class="center-box">
<div class="image-box" ref="imageWrapper" v-if="images!=''">
<code-move ref="code" :width="codeWidth"></code-move>
<img class="bg-img" :src="images" />
</div>
<a-divider />
</div>
<div style="margin-left: 10%">
<h2>操作说明</h2>
<h3>
1.使用鼠标可拖动二维码放置在图片内任何地方(注意:二维码位置不可超出图片范围)
</h3>
<h3>
2.滑动图片上方的滑动条可以调节二维码大小
</h3>
<h3>
3.点击图片上方的生成图片按钮可以下载调节好的二维码图片
</h3>
</div>
</a-drawer>
</template>
<script>
import CodeMove from "../../components/sysmanage/codeMove";
import html2canvas from "html2canvas";
import ACol from "ant-design-vue/es/grid/Col";
export default {
name: "newPoster",
components: { ACol, CodeMove },
data() {
return {
visible: false,
images: "",
codeWidth: 150, //二维码大小
codeText:""
};
},
methods: {
showModal(picture,url) {
this.codeText=url
this.getBase64(picture, 'jpeg', (base64) =>{
// 给原生img对象的src属性赋值
this.images=base64;
this.visible = true;
});
/* this.$nextTick(()=>{
this.newCode()
});*/
setTimeout(() =>{
this.newCode()
},500);
},
onClose() {
this.visible = false;
this.codeWidth=150
},
selectImage() {
let file = this.$refs.selectImgae;
if (!file.files || !file.files[0]) {
return;
}
var reader = new FileReader();
reader.onload = evt => {
let result = evt.target.result;
this.images = result;
};
reader.readAsDataURL(file.files[0]);
},
toImage() {
html2canvas(this.$refs.imageWrapper, {
backgroundColor: null
}).then(canvas => {
let dataURL = canvas.toDataURL("image/png");
this.downloadFile("海报.png", dataURL);
});
},
newCode(){
if(this.codeText === ''){
this.$notification.warning({ message: '系统提示', description:'请输入二维码内容!',duration: 4});
return;
}
this.$refs.code.newCode(this.codeText);
},
getBase64(url, ext, callback) {
let canvas = document.createElement("canvas"); //创建canvas DOM元素
let ctx = canvas.getContext("2d");
let img = new Image;
img.crossOrigin = 'Anonymous';
img.src = url;
img.onload = () => {
canvas.width = img.width; //指定画板的宽度,自定义
canvas.height = img.height; //指定画板的高度,自定义
ctx.drawImage(img, 0, 0, img.width, img.height); //参数可自定义
let dataURL = canvas.toDataURL("image/" + ext);
callback.call(this, dataURL); //回掉函数获取Base64编码
canvas = null;
};
},
downloadFile(fileName, content) {
const blob = this.base64ToBlob(content); // new Blob([content]);
if (window.navigator.msSaveOrOpenBlob) {
navigator.msSaveBlob(blob, fileName);
} else {
const link = document.createElement("a");
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
//此写法兼容可火狐浏览器
document.body.appendChild(link);
const evt = document.createEvent("MouseEvents");
evt.initEvent("click", false, false);
link.dispatchEvent(evt);
document.body.removeChild(link);
}
},
base64ToBlob(code) {
const parts = code.split(";base64,");
const contentType = parts[0].split(":")[1];
const raw = window.atob(parts[1]);
const rawLength = raw.length;
const uInt8Array = new Uint8Array(rawLength);
for (let i = 0; i < rawLength; ++i) {
uInt8Array[i] = raw.charCodeAt(i);
}
return new Blob([uInt8Array], { type: contentType });
}
}
};
</script>
<style scoped lang="less">
.meun-box {
left: 0;
right: 0;
height: 80px;
padding: 10px 24px 0;
}
.center-box {
padding-top: 0px;
}
.select-btn {
width: 90px;
height: 32px;
border: 1px solid #eee;
position: relative;
background-color: #00a0e9;
line-height: 31px;
border-radius: 4px;
color: white;
text-align: center;
display: inline-block;
margin-right: 8px;
.seletImg {
opacity: 0;
width: 100%;
height: 100%;
position: absolute;
left: 0;
top: 0;
}
}
.image-box {
width: 300px;
height: auto;
overflow: hidden;
position: relative;
margin: auto;
.bg-img {
width: 100%;
}
}
</style>
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
</a-form> </a-form>
<!--列表--> <!--列表-->
<s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling"> <s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling" :locale="emptyText">
<template slot="genderoperation" slot-scope="text"> <template slot="genderoperation" slot-scope="text">
<span v-if="text==1"></span> <span v-if="text==1"></span>
<span v-else></span> <span v-else></span>
...@@ -91,6 +91,7 @@ ...@@ -91,6 +91,7 @@
}, },
data: function () { data: function () {
return { return {
emptyText: {emptyText: '暂无数据'},
Formtable: this.$form.createForm(this, {name: 'Formtable'}), Formtable: this.$form.createForm(this, {name: 'Formtable'}),
queryParam: { queryParam: {
name: '', name: '',
...@@ -139,6 +140,8 @@ ...@@ -139,6 +140,8 @@
return findByList(Object.assign(params,obj)).then(res => { return findByList(Object.assign(params,obj)).then(res => {
let data = {} let data = {}
if (res.state !== 'success') { if (res.state !== 'success') {
this.$message.error("查询失败!", 5);
this.emptyText.emptyText = '查询失败!'
data = { data = {
data: [], data: [],
pageSize: parameter.pageSize, pageSize: parameter.pageSize,
......
<template>
<div class="flex-container">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<!-- 搜索区域 -->
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="6" :sm="12">
<a-form-item label="文件名:">
<a-input placeholder="文件名" v-model="queryParam.fileName"></a-input>
</a-form-item>
</a-col>
<span class="table-page-search-submitButtons" style="float: left; overflow: hidden;">
<a-col :md="6" :sm="24">
<a-button @click="search()" type="primary">查询</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<!--列表-->
<s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling" :locale="emptyText">
<template slot="operation" slot-scope="text, record">
<span>
<a @click="downloadExcel(record.id)">下载</a>
<a-divider type="vertical"/>
<a @click="remove(record.id)">删除</a>
</span>
</template>
<template slot="createTime" slot-scope="text">{{ text | dayjs}}</template>
</s-table>
</div>
</template>
<script>
import STable from '@/components/table';
import {deleteExcel,listExportExcel,uploadExcel} from "@/api/school-center/exportExcel"
import {cloneObject,exportFile} from '@/utils/util';
import moment from "moment";
export default {
name: "exportExcel",
components: {
STable,
},
data(){
return {
emptyText: {emptyText: '暂无数据'},
Formtable: this.$form.createForm(this),
modifyvisible: false,
add: true,
queryParam: {
fileName :''
},
modelData:{
id:'',
userName:'',
sign:''
},
columns: [
{dataIndex: 'fileName', title: '文件名'},
{dataIndex: 'createName', title: '导出人'},
{dataIndex: 'createTime', title: '导出时间', scopedSlots: {customRender: 'createTime'}},
{
dataIndex: 'operation',
title: '操作',
scopedSlots: {customRender: 'operation'},
fixed: "right"
}]
,
rowdata: parameter => {
let params = {
pageNo: parameter.pageNo,
pageSize: parameter.pageSize
}
let obj = cloneObject(this.queryParam)
//表示
return listExportExcel(Object.assign(params,obj)).then(res => {
let data = {}
if (res.state !== 'success') {
this.$message.error("查询失败!", 5);
this.emptyText.emptyText = '查询失败!'
data = {
data: [],
pageSize: parameter.pageSize,
pageNo: 1,
totalCount: 0
}
} else {
data = {
data: res.data.records,
pageSize: parameter.pageSize,
pageNo: parameter.pageNo,
totalCount: res.data.total
}
}
return data
})
}
}
},
methods:{
moment,
search() {
this.$refs.table.refresh({search: true})
},
remove(exportId) {
deleteExcel({exportId}).then(res => {
if (res.state == 'success') {
this.$message.success(res.data, 5);
}else {
this.$message.success(res.msg, 5);
}
})
},
downloadExcel(exportId) {
let nowdate = moment().format("YYYY-MM-DD");
exportFile(
uploadExcel({exportId}),
"订单清单" + nowdate + ".xls",
);
}
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<div class="flex-container">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<!-- 搜索区域 -->
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="6" :sm="12">
<a-form-item label="时间选择:">
<a-range-picker @change="onChange" />
</a-form-item>
</a-col>
<span class="table-page-search-submitButtons" style="float: left; overflow: hidden;">
<a-col :md="4" :sm="24">
<a-button @click="search()" type="primary">查询</a-button>
<a-button v-show="!callback" @click="handleSubmit" style="margin-left: 10px">导出</a-button>
<a-button v-show="callback" style="margin-left: 10px">
导出中
<a-spin style="margin-left: 5px" size="small" />
</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<!--列表-->
<s-table
:columns="columns"
:data="rowdata"
bordered
ref="table"
size="small"
class="flex-filling"
:locale="emptyText"
></s-table>
</div>
</template>
<script>
import STable from "@/components/table";
import { reportList, reportDownload } from "@/api/school-center/orderAPI";
import { cloneObject, exportFile } from "@/utils/util";
import moment from "moment";
export default {
name: "hhrReport",
components: {
STable
},
data() {
return {
emptyText: {emptyText: '暂无数据'},
callback: false,
Formtable: this.$form.createForm(this),
queryParam: {
startTime: "",
endTime: ""
},
columns: [
{
title: "时间",
fixed: "left",
children: [
{
title: "业务类型",
children: [
{
title: "县分",
dataIndex: "subName",
width: 80
},
{
dataIndex: "schoolNum",
width: 80,
title: "学校数"
},
{
dataIndex: "studentNum",
width: 80,
title: "学生数"
}
]
}
]
},
{
title: "本周",
children: [
{
title: "新增",
children: [
{ dataIndex: "newUserNumWeek", width: 80,title: "新用户" },
{ dataIndex: "newAloneNumWeek",width: 80, title: "单宽带" },
{ dataIndex: "newMixNumWeek", width: 80,title: "融合宽带" }
]
},
{
title: "存量",
children: [
{ dataIndex: "oldUserNumWeek",width: 100, title: "老用户办理" },
{
dataIndex: "oldContinueNumWeek",
width: 100,
title: "老用户续约"
}
]
},
{
title: "已竣工",
children: [
{ dataIndex: "finishNewNumWeek",width: 80, title: "新增" },
{ dataIndex: "finishOldNumWeek", width: 80,title: "存量" }
]
},
{ dataIndex: "sumWeek", width: 80,title: "总计" }
]
},
{
title: "本月",
children: [
{
title: "新增",
children: [
{ dataIndex: "newUserNumMonth",width: 80, title: "新用户" },
{ dataIndex: "newAloneNumMonth", width: 80,title: "单宽带" },
{ dataIndex: "newMixNumMonth",width: 80, title: "融合宽带" }
]
},
{
title: "存量",
children: [
{
dataIndex: "oldUserNumMonth",
width: 100,
title: "老用户办理"
},
{
dataIndex: "oldContinueNumMonth",
width: 100,
title: "老用户续约"
}
]
},
{
title: "已竣工",
children: [
{ dataIndex: "finishNewNumMonth",width: 80, title: "新增" },
{ dataIndex: "finishOldNumMonth",width: 80, title: "存量" }
]
},
{ dataIndex: "sumMonth", width: 80,title: "总计" }
]
},
{
title: "累计",
children: [
{
title: "新增",
children: [
{ dataIndex: "newUserNumAll",width: 80, title: "新用户" },
{ dataIndex: "newAloneNumAll",width: 80, title: "单宽带" },
{ dataIndex: "newMixNumAll",width: 80, title: "融合宽带" }
]
},
{
title: "存量",
children: [
{ dataIndex: "oldUserNumAll",width: 100, title: "老用户办理" },
{
dataIndex: "oldContinueNumAll",
width: 100,
title: "老用户续约"
}
]
},
{
title: "已竣工",
children: [
{ dataIndex: "finishNewNumAll", width: 80,title: "新增" },
{ dataIndex: "finishOldNumAll",width: 80, title: "存量" }
]
},
{ dataIndex: "sumAll",width: 80, title: "总计" }
]
}
],
rowdata: parameter => {
let params = {
pageNo: parameter.pageNo,
pageSize: parameter.pageSize
};
let obj = cloneObject(this.queryParam);
//表示
return reportList(Object.assign(params, obj)).then(res => {
let data = {};
if (res.state !== "success") {
this.$message.error("查询失败!", 5);
this.emptyText.emptyText = '查询失败!'
data = {
data: []
};
} else {
data = {
data: res.data
};
}
return data;
});
}
};
},
methods: {
moment,
search() {
this.$refs.table.refresh({ search: true });
},
//时间事件
onChange(date, dateString) {
if (dateString.length == 0) {
this.queryParam.startTime = "";
this.queryParam.endTime = "";
} else {
this.queryParam.startTime = dateString[0];
this.queryParam.endTime = dateString[1];
}
},
handleSubmit() {
this.callback = true;
let today = new Date();
today.setTime(today.getTime());
let s2 =
today.getFullYear() +
"-" +
(today.getMonth() + 1) +
"-" +
today.getDate();
exportFile(
reportDownload(),
"一人一码统计报表" + s2 + ".xlsx",
this.downloadstatu
);
},
downloadstatu() {
this.callback = false;
}
}
};
</script>
<style scoped>
</style>
\ No newline at end of file
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
</div> </div>
<!--列表--> <!--列表-->
<s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling"> <s-table :locale="emptyText" :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling">
<!--拦截器--> <!--拦截器-->
<template slot="statusDefault" slot-scope="text"> <template slot="statusDefault" slot-scope="text">
<span v-if="text=='1'"> <span v-if="text=='1'">
...@@ -119,7 +119,25 @@ ...@@ -119,7 +119,25 @@
</a-radio-group> </a-radio-group>
</a-form-item> </a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="客户二维码"> <a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="客户二维码">
<img :src="customimg" style="width: 150px"> <a-upload
ref="upload"
:action=uploadUrl
listType="picture-card"
:fileList="fileList"
:headers="header"
@preview="handlePreview"
@change="handleChange"
:data="fileid"
accept=".jpg"
>
<div>
<a-icon type="plus" />
<div class="ant-upload-text"> <span v-if="fileList.length==0">上传二维码</span> <span v-if="fileList.length>0">更换二维码</span> </div>
</div>
</a-upload>
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
<img alt="example" style="width: 100%" :src="previewImage" />
</a-modal>
</a-form-item> </a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 15, offset: 1}" label="套餐选择"> <a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 15, offset: 1}" label="套餐选择">
<a-checkbox-group :defaultValue="chosePages" @change="chosePagesfunction"> <a-checkbox-group :defaultValue="chosePages" @change="chosePagesfunction">
...@@ -134,6 +152,9 @@ ...@@ -134,6 +152,9 @@
</template> </template>
<script> <script>
import Vue from 'vue'
import { ACCESS_TOKEN } from "@/store/mutation-types"
import STable from '@/components/table'; import STable from '@/components/table';
import {findByList,choosepages,modify,insert,hidestatus} from "@/api/school-center/schoolManagermentAPI" import {findByList,choosepages,modify,insert,hidestatus} from "@/api/school-center/schoolManagermentAPI"
import {cloneObject} from '@/utils/util'; import {cloneObject} from '@/utils/util';
...@@ -144,6 +165,16 @@ ...@@ -144,6 +165,16 @@
}, },
data: function () { data: function () {
return { return {
emptyText: {emptyText: '暂无数据'},
previewVisible: false,
previewImage: '',
fileList: [
],
header:{
"Authorization":Vue.ls.get(ACCESS_TOKEN)
},
fileid:{},
brackgroundurl:"manager/ciop/school/schoolManagement/qrcodeUpload",
// form // form
Formtable: this.$form.createForm(this, {name: 'Formtable'}), Formtable: this.$form.createForm(this, {name: 'Formtable'}),
titleName:"", titleName:"",
...@@ -201,6 +232,8 @@ ...@@ -201,6 +232,8 @@
return findByList(Object.assign(params, obj)).then(res => { return findByList(Object.assign(params, obj)).then(res => {
let data = {} let data = {}
if (res.state !== 'success') { if (res.state !== 'success') {
this.emptyText.emptyText = '查询失败!'
this.$message.error("查询失败!", 5);
data = { data = {
data: [], data: [],
pageSize: parameter.pageSize, pageSize: parameter.pageSize,
...@@ -245,6 +278,43 @@ ...@@ -245,6 +278,43 @@
} }
}, },
methods:{ methods:{
getuuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0,
v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
},
baseuploadUrl(){
const env = process.env.NODE_ENV; //获取当前环境
let apis = "/";
if(env === 'development'){ //测试环境默认添加前缀
apis = '/api/';
}
return apis
},
uploadUrl(){
return this.baseuploadUrl() + this.brackgroundurl
}
,
//背景图
handleCancel() {
this.previewVisible = false;
},
handlePreview(file) {
this.previewImage = file.url || file.thumbUrl;
this.previewVisible = true;
},
handleChange(obj) {
if (this.fileList.length==2){
this.fileList.splice(0,1)
}else{
this.fileList = obj.fileList;
}
},
delet(deletdata){ delet(deletdata){
let status=0; let status=0;
if(deletdata.status==0){ if(deletdata.status==0){
...@@ -287,6 +357,19 @@ ...@@ -287,6 +357,19 @@
let choosepagespare={ let choosepagespare={
id:data.id id:data.id
} }
this.fileid={
id:data.id
}
let url=this.baseuploadUrl()+"manager/"+data.serviceQrcode.replace("enclosure","ciop")
if (!(data.serviceQrcode == null || data.serviceQrcode=="")) {
//下载图片浏览
this.fileList.push({
uid: this.getuuid(),
name: '找不到图片',
status: 'done',
url: url,
})
}
this.modifyForm.id=data.id this.modifyForm.id=data.id
//查询中间表 //查询中间表
choosepages(choosepagespare).then(res=>{ choosepages(choosepagespare).then(res=>{
...@@ -352,6 +435,7 @@ ...@@ -352,6 +435,7 @@
if (res.state=="success") { if (res.state=="success") {
this.$message.success(res.data ? res.data : '添加成功!', 5); this.$message.success(res.data ? res.data : '添加成功!', 5);
this.search(); this.search();
this.modifyvisible=false
return null; return null;
} }
this.$message.error(res.data ? res.data : '添加失败!', 5); this.$message.error(res.data ? res.data : '添加失败!', 5);
...@@ -363,6 +447,7 @@ ...@@ -363,6 +447,7 @@
if (res.state=="success") { if (res.state=="success") {
this.$message.success(res.data ? res.data : '修改成功!', 5); this.$message.success(res.data ? res.data : '修改成功!', 5);
this.search(); this.search();
this.modifyvisible=false
return null; return null;
} }
this.$message.error(res.data ? res.data : '修改失败!', 5); this.$message.error(res.data ? res.data : '修改失败!', 5);
...@@ -384,6 +469,7 @@ ...@@ -384,6 +469,7 @@
isShowrh:"", isShowrh:"",
isRecv:"", isRecv:"",
}) })
this.fileList=[]
this.modifyForm.id="" this.modifyForm.id=""
this.modifyForm.chosePages="" this.modifyForm.chosePages=""
this.chosePages.splice(0,this.chosePages.length) this.chosePages.splice(0,this.chosePages.length)
...@@ -397,4 +483,4 @@ ...@@ -397,4 +483,4 @@
<style scoped> <style scoped>
</style> </style>
\ No newline at end of file
<template> <template>
<div class="flex-container"> <div class="flex-container">
<!-- 查询区域 --> <!-- 查询区域 -->
<div class="table-page-search-wrapper"> <div class="table-page-search-wrapper">
<!-- 搜索区域 --> <!-- 搜索区域 -->
<a-form layout="inline"> <a-form layout="inline">
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :md="6" :sm="12"> <a-col :md="6" :sm="12">
<a-form-item label="时间选择:"> <a-form-item label="时间选择:">
<a-range-picker @change="onChange" /> <a-range-picker @change="onChange" />
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="4" :sm="12"> <a-col :md="4" :sm="12">
<a-form-item label="客户类型:"> <a-form-item label="客户类型:">
<a-select v-model="queryParam.userType" style="width: 120px" > <a-select v-model="queryParam.userType" style="width: 120px">
<a-select-option value="">全部客户</a-select-option> <a-select-option value>全部客户</a-select-option>
<a-select-option value="1">老用户办理</a-select-option> <a-select-option value="1">老用户办理</a-select-option>
<a-select-option value="0">新用户办理</a-select-option> <a-select-option value="0">新用户办理</a-select-option>
<a-select-option value="2">老用户续约</a-select-option> <a-select-option value="2">老用户续约</a-select-option>
<a-select-option value="3">融合办理</a-select-option> <a-select-option value="3">融合办理</a-select-option>
<a-select-option value="4">抽奖业务</a-select-option> <a-select-option value="4">抽奖业务</a-select-option>
<a-select-option value="5">单宽业务</a-select-option> <a-select-option value="5">单宽业务</a-select-option>
<a-select-option value="6">羊城通业务</a-select-option> <a-select-option value="6">羊城通业务</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="4" :sm="12"> <a-col :md="4" :sm="12">
<a-form-item label="订单编号:"> <a-form-item label="订单编号:">
<a-input placeholder="订单编号" v-model="queryParam.orderNumber"></a-input> <a-input placeholder="订单编号" v-model="queryParam.orderNumber"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="4" :sm="12"> <a-col :md="4" :sm="12">
<a-form-item label="客户姓名:"> <a-form-item label="客户姓名:">
<a-input placeholder="客户姓名" v-model="queryParam.customerName"></a-input> <a-input placeholder="客户姓名" v-model="queryParam.customerName"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="4" :sm="12"> <a-col :md="4" :sm="12">
<a-form-item label="办理号码:"> <a-form-item label="办理号码:">
<a-input placeholder="办理号码" v-model="queryParam.businessNumber"></a-input> <a-input placeholder="办理号码" v-model="queryParam.businessNumber"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="4" :sm="12"> <a-col :md="4" :sm="12">
<a-form-item label="联系号码:"> <a-form-item label="联系号码:">
<a-input placeholder="联系号码" v-model="queryParam.contactNumber"></a-input> <a-input placeholder="联系号码" v-model="queryParam.contactNumber"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="4" :sm="12"> <a-col :md="4" :sm="12">
<a-form-item label="合伙人姓名:"> <a-form-item label="合伙人姓名:">
<a-input placeholder="合伙人姓名" v-model="queryParam.hehuorenName" ></a-input> <a-input placeholder="合伙人姓名" v-model="queryParam.hehuorenName"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="4" :sm="12"> <a-col :md="4" :sm="12">
<a-form-item label="合伙人学校:"> <a-form-item label="合伙人学校:">
<a-input placeholder="合伙人学校" v-model="queryParam.hehuorenSchool" ></a-input> <a-input placeholder="合伙人学校" v-model="queryParam.hehuorenSchool"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="4" :sm="12"> <a-col :md="4" :sm="12">
<a-form-item label="状态:"> <a-form-item label="状态:">
<a-select v-model="queryParam.status" style="width: 120px" > <a-select v-model="queryParam.orderStatus" style="width: 120px">
<a-select-option value="">请选择</a-select-option> <a-select-option value>请选择</a-select-option>
<a-select-option value="1">待提交</a-select-option> <a-select-option value="待处理">待处理</a-select-option>
<a-select-option value="4">归档</a-select-option> <a-select-option value="待选号">待选号</a-select-option>
<a-select-option value="5">作废</a-select-option> <a-select-option value="待识别">待识别</a-select-option>
<a-select-option value="3">受理成功</a-select-option> <a-select-option value="待活体">待活体</a-select-option>
<a-select-option value="9">已收费</a-select-option> <a-select-option value="审核中">审核中</a-select-option>
<a-select-option value="10">受理异常</a-select-option> <a-select-option value="待审核">待配送</a-select-option>
<a-select-option value="2">待受理</a-select-option> <a-select-option value="待审核">待审核</a-select-option>
<a-select-option value="100">未支付</a-select-option> <a-select-option value="待受理">待受理</a-select-option>
</a-select> <a-select-option value="已发货">已发货</a-select-option>
</a-form-item> <a-select-option value="已完成">已完成</a-select-option>
</a-col> <a-select-option value="异常单">异常单</a-select-option>
<a-button @click="search()" type="primary">查询</a-button> <a-select-option value="待派奖">待派奖</a-select-option>
<a-button v-show="!callback" @click="handleSubmit" style="margin-left: 10px">导出</a-button> <a-select-option value="已派奖">已派奖</a-select-option>
<a-button v-show="callback" style="margin-left: 10px">导出中<a-spin style="margin-left: 5px" size="small"/></a-button> <a-select-option value="重新下单">重新下单</a-select-option>
</a-row> </a-select>
</a-form> </a-form-item>
</div> </a-col>
<!--列表--> <a-col :md="6" :sm="12">
<s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling"> <a-button @click="search()" type="primary">查询</a-button>
<!--拦截器--> <a-button @click="handleSubmit" style="margin-left: 10px">导出</a-button>
<template slot="productLastUpdateTime" slot-scope="text"> <a-dropdown>
{{ text | dayjs}} <a-menu slot="overlay" @click="handleMenuClick">
</template> <a-menu-item key="1">
<!--拦截器--> <a-icon type="arrow-up" />受理单
<template slot="productCreateTime" slot-scope="text"> </a-menu-item>
{{ text | dayjs}} <a-menu-item key="2">
</template> <a-icon type="arrow-up" />快递
<template slot="text" slot-scope="text"> </a-menu-item>
<p style="white-space: pre-line;">{{text}}</p> </a-menu>
</template> <a-button style="margin-left: 8px">
导入
<a-icon type="down" />
</a-button>
</a-dropdown>
</a-col>
</a-row>
</a-form>
</div>
<template slot="userType" slot-scope="text"> <!--列表-->
<p v-if="text=='1'">老用户办理</p> <s-table
<p v-if="text=='0'">新用户办理</p> :columns="columns"
<p v-if="text=='2'">老用户续约</p> :data="rowdata"
<p v-if="text=='3'">融合办理</p> bordered
<p v-if="text=='4'">抽奖业务</p> ref="table"
<p v-if="text=='5'">单宽业务</p> size="small"
<p v-if="text=='6'">羊城通业务</p> class="flex-filling"
</template> :locale="emptyText"
<template slot="studentCardCheckStatus" slot-scope="text"> >
<p v-if="text=='0'">未审核</p> <!--拦截器-->
<p v-if="text=='1'">已审核</p> <template slot="productLastUpdateTime" slot-scope="text">{{ text | dayjs}}</template>
</template> <!--拦截器-->
<template slot="operation" slot-scope="text, record"> <template slot="productCreateTime" slot-scope="text">{{ text | dayjs}}</template>
<span> <template slot="text" slot-scope="text">
<a @click="showDrawer(record)">查看</a> <p style="white-space: pre-line;">{{text}}</p>
</span> </template>
</template>
</s-table> <template slot="userType" slot-scope="text">
<!----抽屉--> <p v-if="text=='1'">老用户办理</p>
<a-drawer width="640" placement="right" :closable="false" @close="onClose" :visible="visible"> <p v-if="text=='0'">新用户办理</p>
<p :style="pStyle">基础信息</p> <p v-if="text=='2'">老用户续约</p>
<a-row> <p v-if="text=='3'">融合办理</p>
<a-col :span="12"> <p v-if="text=='4'">抽奖业务</p>
<p>客户名称:{{orderInfo.customerName}}</p> <p v-if="text=='5'">单宽业务</p>
</a-col> <p v-if="text=='6'">羊城通业务</p>
<a-col :span="12"> </template>
<p>卡品:{{orderInfo.kapin}}</p> <template slot="studentCardCheckStatus" slot-scope="text">
</a-col> <p v-if="text=='0'">未审核</p>
</a-row> <p v-if="text=='1'">已审核</p>
<a-row> </template>
<a-col :span="12"> <template slot="operation" slot-scope="text, record">
<p>用户学校:{{orderInfo.school}}</p> <span>
</a-col> <a @click="showDrawer(record)">查看</a>
<a-col :span="12"> <a-divider type="vertical" />
<p>小白卡单号:{{orderInfo.xbOrderId | dayjs}}</p> <a @click="abnormal(record.id)">设为异常单</a>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<p>订单完成时间:{{orderInfo.successTime}}</p>
</a-col>
<a-col :span="12">
<p>预制卡单号:{{orderInfo.yzOrderId}}</p>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<p>学号:{{orderInfo.no}}</p>
</a-col>
<a-col :span="12">
<p>班级:{{orderInfo.class}}</p>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<p>父母名字:{{orderInfo.parentName}}</p>
</a-col>
<a-divider v-if="record.orderStatus === '待审核' " type="vertical" />
<a v-show="record.orderStatus === '待审核'" @click="reviewStudentIdCard(record)">审核学生证</a>
</span>
</template>
</s-table>
<!----抽屉-->
<a-drawer width="1280" placement="right" :closable="false" @close="onClose" :visible="visible">
<a-form :form="orderInfo">
<a-tabs type="card">
<a-tab-pane tab="订单基本信息" key="1" activeKey>
<a-divider orientation="left">基础信息</a-divider>
<a-row>
<a-col :span="6">
<p>客户名称:{{ orderInfo.customerName }}</p>
</a-col>
<a-col :span="6">
<p>卡品:{{ orderInfo.kapin }}</p>
</a-col>
<a-col :span="6">
<p>用户学校:{{ orderInfo.userSchool }}</p>
</a-col>
<a-col :span="6">
<p>小白卡单号:{{ orderInfo.xbOrderId }}</p>
</a-col>
</a-row> </a-row>
<a-row> <a-row>
<a-col :span="12"> <a-col :span="6">
<p>联系电话:{{orderInfo.contactNumber}}</p> <p>订单完成时间:{{ orderInfo.successTime | dayjs }}</p>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="6">
<p>身份证号:{{orderInfo.idCard}}</p> <p>学号:{{ orderInfo.studentNumber }}</p>
</a-col> </a-col>
<a-col :span="6">
<p>班级:{{ orderInfo.classNumber }}</p>
</a-col>
<a-col :span="6">
<p>父母名字:{{ orderInfo.parentName }}</p>
</a-col>
</a-row> </a-row>
<a-row> <a-row>
<a-col :span="12"> <a-col :span="6">
<p>办理号码:{{orderInfo.businessNumber}}</p> <p>联系电话:{{ orderInfo.contactNumber }}</p>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="6">
<p>创建时间:{{orderInfo.createTime}}</p> <p>身份证号:{{ orderInfo.idCard }}</p>
</a-col> </a-col>
<a-col :span="6">
<p>办理号码:{{ orderInfo.businessNumber }}</p>
</a-col>
<a-col :span="6">
<p>创建时间:{{ orderInfo.createTime | dayjs }}</p>
</a-col>
</a-row> </a-row>
<a-row> <a-row>
<a-col :span="12"> <a-col :span="6">
<p>地址:{{orderInfo.address}}</p> <p>地址:{{ orderInfo.address }}</p>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="6">
<p>省市县:{{orderInfo.site}}</p> <p>省市县:{{ orderInfo.site }}</p>
</a-col> </a-col>
<a-col :span="6">
<p>资费:{{ orderInfo.expenses }}</p>
</a-col>
<a-col :span="6">
<p>办理标识:{{ orderInfo.identifyin }}</p>
</a-col>
</a-row> </a-row>
<a-row> <a-row>
<a-col :span="12"> <a-col :span="12">
<p>备注:{{orderInfo.remarks}}</p> <p>备注:{{ orderInfo.remarks }}</p>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="12">
<p>错误原因:{{orderInfo.checkFail}}</p> <p>错误原因:{{ orderInfo.checkFail }}</p>
</a-col> </a-col>
</a-row> </a-row>
<a-row> <a-row>
<a-col :span="12"> <a-col :span="6">
<p>资费:{{orderInfo.expenses}}</p> <p>宽带账号:{{ orderInfo.netNumber }}</p>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="6">
<p>办理标识:{{orderInfo.identifying}}</p> <p>宽带密码:{{ orderInfo.netPassword }}</p>
</a-col> </a-col>
<a-col :span="6">
<p>奖品账号:{{ orderInfo.giftAccount }}</p>
</a-col>
<a-col :span="6">
<p>奖品密码:{{ orderInfo.giftPassword }}</p>
</a-col>
</a-row> </a-row>
<a-row> <a-row>
<a-col :span="12"> <a-col :span="6">
<p>宽带账号:{{orderInfo.netNumber}}</p> <p>学生证审核状态:{{ orderInfo.studentCardCheckStatus }}</p>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="6">
<p>宽带密码:{{orderInfo.netPassword}}</p> <p>宽带订单id:{{ orderInfo.kdOrderId }}</p>
</a-col> </a-col>
</a-row> <a-col :span="6">
<a-row> <p>智能平台订单号:{{ orderInfo.orderId }}</p>
<a-col :span="12"> </a-col>
<p>奖品账号:{{orderInfo.giftAccount}}</p> <a-col :span="6">
</a-col> <p>智能平台订单状态:{{ orderInfo.thStatus }}</p>
<a-col :span="12"> </a-col>
<p>奖品密码:{{orderInfo.giftPassword}}</p>
</a-col>
</a-row> </a-row>
<a-divider orientation="left">附件</a-divider>
<div v-show="!imgShow">无附件</div>
<div v-show="imgShow" style="margin-bottom: 50px">
<a-carousel arrows dotsClass="slick-dots slick-thumb">
<a slot="customPaging" slot-scope="props">
<img :src="getImgUrl(props.i)" />
</a>
<div @click="pictureSize" v-for="item in certificatePhoto.length">
<img :style="imgStype" :src="certificatePhoto[item - 1]" />
</div>
</a-carousel>
</div>
<a-divider orientation="left">受理信息</a-divider>
<a-row> <a-row>
<a-col :span="12"> <a-col :span="6">
<p>学生证审核状态:{{orderInfo.studentCardCheckStatus}}</p> <p>客户名称 :{{ orderInfo.customerName }}</p>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="6">
<p>宽带订单id:{{orderInfo.kdOrderId}}</p> <p>联系电话 :{{ orderInfo.contactNumber }}</p>
</a-col> </a-col>
<a-col :span="6">
<p>现有套餐 :{{ orderInfo.nowPackage }}</p>
</a-col>
<a-col :span="6">
<p>升级套餐 :{{ orderInfo.businessPackage }}</p>
</a-col>
</a-row> </a-row>
<a-row> <a-row>
<a-col :span="12"> <a-col :span="6">
<p>智能平台订单号:{{orderInfo.znOrderNumber}}</p> <p>受理人:{{ orderInfo.acceptName }}</p>
</a-col> </a-col>
<a-col :span="12"> <a-col :span="6">
<p>智能平台订单状态:{{orderInfo.thStatus}}</p> <p>受理结果 :{{ orderInfo.acceptResult }}</p>
</a-col> </a-col>
<a-col :span="6">
<p>受理意见 :{{ orderInfo.acceptComment }}</p>
</a-col>
<a-col :span="6">
<p>受理时间 :{{ orderInfo.acceptDate | dayjs }}</p>
</a-col>
</a-row> </a-row>
<a-row> </a-tab-pane>
<a-col :span="12">
<p>附件:</p>
</a-col>
</a-row> <a-tab-pane tab="操作日志" key="3">
<a-divider /> <a-list :grid="{ column: 4 }" :dataSource="title">
<a-list-item slot="renderItem" slot-scope="item, index">
<a-card :title="item.title" :bordered="false">
<a-card-grid style="width:100%;" v-for="item in abnormalInfo">
<div
style="overflow: hidden;text-overflow: ellipsis;white-space: nowrap;height: 20px"
>
<a-tooltip placement="left">
<template slot="title">{{item[index]}}</template>
{{ item[index] }}
</a-tooltip>
</div>
</a-card-grid>
</a-card>
</a-list-item>
</a-list>
</a-tab-pane>
</a-tabs>
</a-form>
</a-drawer>
<a-modal
title="批量导入"
:visible="modifyvisible"
@ok="createfunctionOk"
@cancel="createfunctionCancel"
html-type="submit"
width="400px"
>
<a-row :gutter="24">
<a-col :md="24" :sm="12">
<p style="text-align:center">{{ importTile }}</p>
</a-col>
</a-row>
<import-btn :url="importUrl" :responseFun="doPush">
<a-tooltip placement="topLeft" title="导入文件" arrowPointAtCenter>
<a-row :gutter="24">
<a-col :md="24" :sm="12">
<p>
选择文件:
<a-button type="primary">选择文件</a-button>
</p>
</a-col>
</a-row>
</a-tooltip>
</import-btn>
<a-row :gutter="24">
<a-col :md="24" :sm="12">
<p v-show="YRYMmoBan">
模板下载:
<a-button type="primary" @click="downloadMoBan">一人一码受理单模板</a-button>
</p>
<p v-show="KDmoBan">
模板下载:
<a-button type="primary" @click="downloadMoBanKD">快递清单模板</a-button>
</p>
</a-col>
</a-row>
<a-row :gutter="24" :v-show="KDmoBan">
<a-col :md="24" :sm="12">
<p>说明:</p>
<p>1.批量导入请严格按照模版进行导入;</p>
</a-col>
</a-row>
</a-modal>
</a-drawer> <a-modal
</div> title="学生证审核"
:visible="review"
@ok="reviewOk"
@cancel="reviewCancel"
html-type="submit"
width="1024px"
>
<div align="center">
<img :src="reviewStudentImg" />
</div>
<a-row :gutter="24" style="text-align: right">
<a-col :md="6" :sm="12">
<p>审核状态:</p>
</a-col>
<a-col :md="6" :sm="12">
<a-radio-group :options="options" v-model="reviewStudent.studentCardCheckStatus" />
</a-col>
</a-row>
<a-row :gutter="24" style="text-align: right">
<a-col :md="6" :sm="12">
<p>审核不通过原因:</p>
</a-col>
<a-col :md="12" :sm="12">
<a-input placeholder="审核不通过原因" v-model="reviewStudent.checkFail"></a-input>
</a-col>
</a-row>
</a-modal>
</div>
</template> </template>
<script> <script>
import STable from '@/components/table'; import STable from "@/components/table";
import {orderList,download} from "@/api/school-center/orderAPI" import {
import {cloneObject,exportFile} from '@/utils/util'; orderList,
import moment from 'moment'; download,
export default { abnormal,
name: "orderView", selectOrderHis,
components: { downloadMoBan,
STable, downloadMoBanKD,
reviewStudentIdCard
} from "@/api/school-center/orderAPI";
import { cloneObject, exportFile } from "@/utils/util";
import moment from "moment";
import ConstantActivity from "@/constant/ConstantActivity";
import ImportBtn from "../../../components/sysmanage/ImportBtn";
const options = [
{ label: "审核通过", value: "1" },
{ label: "审核不通过", value: "0" }
];
export default {
name: "orderView",
components: {
STable,
ImportBtn
},
data() {
return {
emptyText: {emptyText: '暂无数据'},
reviewStudentImg: "",
reviewStudent: {
id: "",
checkFail: "",
studentCardCheckStatus: ""
},
options,
review: false,
imgShow: false,
imgStype: { width: "300px", heigth: "300px" },
baseUrl:
"https://raw.githubusercontent.com/vueComponent/ant-design-vue/master/components/vc-slick/assets/img/react-slick/",
certificatePhoto: [],
childrenDrawer: false,
YRYMmoBan: false,
KDmoBan: false,
importUrl: "",
importTile: "",
modifyvisible: false,
title: ConstantActivity.title,
Formtable: this.$form.createForm(this),
visible: false,
abnormalInfo: [],
pStyle: {
fontSize: "16px",
color: "rgba(0,0,0,0.85)",
lineHeight: "24px",
display: "block",
marginBottom: "16px"
},
pStyle2: {
marginBottom: "24px"
},
apis:'',
queryParam: {
createTimeStart: "",
createTimeEnd: "",
userType: "",
orderNumber: "",
customerName: "",
businessNumber: "",
contactNumber: "",
hehuorenSchool: "",
hehuorenName: "",
orderStatus: ""
},
orderInfo: {},
columns: [
{ dataIndex: "customerName", width: 200, title: "客户姓名" },
{ dataIndex: "orderNumber", width: 200, title: "订单编号" },
{ dataIndex: "businessPackage", width: 200, title: "升级套餐" },
{ dataIndex: "orderStatus", width: 200, title: "订单状态" },
{
dataIndex: "userType",
width: 200,
title: "订单类型",
scopedSlots: { customRender: "userType" }
}, },
data(){ { dataIndex: "contactNumber", width: 200, title: "联系号码" },
return { { dataIndex: "businessNumber", width: 200, title: "办理号码" },
//下载完成状态 { dataIndex: "kapin", width: 200, title: "办理套餐" },
callback:false, { dataIndex: "hehuorenName", width: 200, title: "合伙人姓名" },
Formtable: this.$form.createForm(this), { dataIndex: "hehuorenSchool", width: 200, title: "合伙人学校" },
visible: false, { dataIndex: "hehuorenPhone", width: 200, title: "合伙人手机" },
pStyle: { {
fontSize: '16px', dataIndex: "studentCardCheckStatus",
color: 'rgba(0,0,0,0.85)', width: 200,
lineHeight: '24px', title: "学生证审核状态",
display: 'block', scopedSlots: { customRender: "studentCardCheckStatus" }
marginBottom: '16px',
},
pStyle2: {
marginBottom: '24px',
},
queryParam: {
createTimeStart :'',
createTimeEnd :'',
userType :'',
orderNumber :'',
customerName :'',
businessNumber :'',
contactNumber :'',
hehuorenSchool :'',
hehuorenName :'',
orderStatus :''
},
orderInfo:{},
columns: [
{dataIndex: 'customerName', width: 200, title: '客户姓名'},
{dataIndex: 'orderNumber', width: 200, title: '订单编号'},
{dataIndex: 'contactNumber', width: 200, title: '联系号码'},
{dataIndex: 'businessNumber', width: 200, title: '办理号码'},
{dataIndex: 'businessPackage', width: 200, title: '办理套餐'},
{dataIndex: 'hehuorenName', width: 200, title: '合伙人姓名'},
{dataIndex: 'hehuorenSchool', width: 200, title: '合伙人学校'},
{dataIndex: 'hehuorenPhone', width: 200, title: '合伙人手机'},
{dataIndex: 'packageId', width: 200, title: '现有套餐'},
{dataIndex: 'businessPackage', width: 200, title: '升级套餐'},
{dataIndex: 'orderStatus', width: 200, title: '订单状态'},
{dataIndex: 'userType', width: 200, title: '订单类型',scopedSlots: {customRender: 'userType'}},
{dataIndex: 'studentCardCheckStatus', width: 200, title: '学生证审核状态',
scopedSlots: {customRender: 'studentCardCheckStatus'}
},
{
dataIndex: 'operation',
width: 100,
title: '操作',
scopedSlots: {customRender: 'operation'},
fixed: "right"
}]
,
rowdata: parameter => {
let params = {
pageNo: parameter.pageNo,
pageSize: parameter.pageSize
}
let obj = cloneObject(this.queryParam)
//表示
return orderList(Object.assign(params,obj)).then(res => {
let data = {}
if (res.state !== 'success') {
data = {
data: [],
pageSize: parameter.pageSize,
pageNo: 1,
totalCount: 0
}
} else {
data = {
data: res.data.records,
pageSize: parameter.pageSize,
pageNo: parameter.pageNo,
totalCount: res.data.total
}
}
return data
})
}
}
}, },
methods:{ {
moment, dataIndex: "operation",
search() { width: 250,
this.$refs.table.refresh({search: true}) title: "操作",
}, scopedSlots: { customRender: "operation" },
onClose() { fixed: "right"
this.orderInfo={ }
customerName:'', ],
kapin:'', rowdata: parameter => {
school:'', const env = process.env.NODE_ENV; //获取当前环境
xbOrderId:'', if(env === 'development'){ //测试环境默认添加前缀
successTime:'', this.apis = '/api/';
yzOrderId:'', }
no:'', let params = {
class:'', pageNo: parameter.pageNo,
parentName:'', pageSize: parameter.pageSize
contactNumber:'', };
idCard:'',
businessNumber:'', let obj = cloneObject(this.queryParam);
createTime:'', //表示
address:'', return orderList(Object.assign(params, obj)).then(res => {
site:'', let data = {};
remarks:'', if (res.state !== "success") {
checkFail:'', this.$message.error("查询失败!", 5);
expenses:'', this.emptyText.emptyText = '查询失败!'
identifying:'', data = {
netNumber:'', data: [],
netPassword:'', pageSize: parameter.pageSize,
giftAccount:'', pageNo: 1,
giftPassword:'', totalCount: 0
kuaidiOrder:'', };
company:'', } else {
studentCardCheckStatus:'', data = {
kdOrderId:'', data: res.data.records,
znOrderNumber:'', pageSize: parameter.pageSize,
thStatus:'' pageNo: parameter.pageNo,
} totalCount: res.data.total
this.visible = false; };
}, }
showDrawer(data){ return data;
this.orderInfo={ });
customerName:data.customerName, }
kapin:data.kapin, };
school:data.school, },
xbOrderId:data.xbOrderId, methods: {
successTime:data.successTime, moment,
yzOrderId:data.yzOrderId, handleMenuClick(e) {
no:data.no, if (e.key == "1") {
class:data.class, this.handleSubmit1();
parentName:data.parentName, }
contactNumber:data.contactNumber, if (e.key == "2") {
idCard:data.idCard, this.handleSubmit2();
businessNumber:data.businessNumber, }
createTime:data.createTime, },
address:data.address, reviewStudentIdCard(res) {
site:data.site, this.reviewStudentImg =this.apis + res.studenCard;
remarks:data.remarks, /*this.reviewStudentImg =this.baseUrl+'abstract0'+1+'.jpg'*/
checkFail:data.checkFail, this.reviewStudent.studentCardCheckStatus = res.studentCardCheckStatus;
expenses:data.expenses, this.reviewStudent.checkFail = res.checkFail;
identifying:data.identifying, this.reviewStudent.id = res.id;
netNumber:data.netNumber, this.review = true;
netPassword:data.netPassword, },
giftAccount:data.giftAccount, reviewOk() {
giftPassword:data.giftPassword, if (this.reviewStudent.studentCardCheckStatus == "0") {
kuaidiOrder:data.kuaidiOrder, if (
company:data.company, this.reviewStudent.checkFail == "" ||
studentCardCheckStatus:data.studentCardCheckStatus, this.reviewStudent.checkFail == undefined
kdOrderId:data.kdOrderId, ) {
znOrderNumber:data.znOrderNumber, this.$notification.error({
thStatus:data.thStatus message: "审核不通过必须填写不通过原因!",
} description: "",
this.visible=true; duration: 4
}, });
//时间事件 }
onChange(date, dateString) { } else {
if(dateString.length==0){ if (
this.queryParam.startTime='' this.reviewStudent.checkFail != "" &&
this.queryParam.endTime='' this.reviewStudent.checkFail != undefined
}else { ) {
this.queryParam.startTime=dateString[0] this.$notification.error({
this.queryParam.endTime=dateString[1] message: "审核通过无须填写不通过原因!",
} description: "",
}, duration: 4
handleSubmit() { });
let downqueryParam=this.queryParam }
let nowdate = moment().format('YYYY-MM-DD'); }
this.callback=true; if (
exportFile(download(downqueryParam), "订单清单" + nowdate + ".xls",this.downloadstatu); this.reviewStudent.checkFail == "" ||
}, this.reviewStudent.checkFail == undefined
downloadstatu(){ ) {
this.callback=false; this.reviewStudent.checkFail == "";
} }
let obj = cloneObject(this.reviewStudent);
reviewStudentIdCard(Object.assign(obj)).then(res => {
if (res.state == "success") {
this.$notification.success({
message: "审核成功!",
description: "",
duration: 4
});
this.search();
} else {
this.$notification.error({
message: "审核失败!",
description: "",
duration: 4
});
}
});
this.reviewClear();
},
reviewCancel() {
this.reviewClear();
},
reviewClear() {
this.reviewStudentImg = "";
this.reviewStudent.id = "";
this.reviewStudent.studentCardCheckStatus = "";
this.reviewStudent.checkFail = "";
this.review = false;
},
pictureSize() {
if (this.imgStype.width == "700px") {
this.imgStype = { width: "300px", heigth: "300px" };
} else {
this.imgStype = { width: "700px", heigth: "500px" };
}
},
getImgUrl(i) {
return this.certificatePhoto[i];
},
showChildrenDrawer() {
this.childrenDrawer = true;
},
onChildrenDrawerClose() {
this.childrenDrawer = false;
},
downloadMoBan: function() {
exportFile(downloadMoBan(), "一人一码受理单.xlsx");
},
downloadMoBanKD: function() {
exportFile(downloadMoBanKD(), "快递清单.xlsx");
},
// 执行上传
doPush(res) {
console.log(res);
if (!res || !res.response) {
this.$message.error("上传文件出错!", 10);
return false;
}
const response = res.response;
if (response.state !== "success") {
this.$message.error(response.msg ? response.msg : "上传文件出错!", 10);
return false;
}
this.$message.success("上传成功!" + response.data, 5);
},
createfunctionCancel() {
this.modifyvisible = false;
this.clearmodel();
},
clearmodel() {
this.importTile = "";
this.YRYMmoBan = false;
this.KDmoBan = false;
this.importUrl = "";
},
createfunctionOk() {
this.modifyvisible = false;
this.clearmodel();
},
handleSubmit1() {
this.importTile = "批量导入受理单";
this.YRYMmoBan = true;
this.importUrl = "manager/ciop/order/importDate";
this.modifyvisible = true;
},
handleSubmit2() {
this.importTile = "批量导入快递清单";
this.KDmoBan = true;
this.importUrl = "manager/ciop/order/importExpressDelivery";
this.modifyvisible = true;
},
search() {
this.$refs.table.refresh({ search: true });
},
onClose() {
this.certificatePhoto = [];
this.orderInfo = {
acceptResult: "",
nowPackage: "",
businessPackage: "",
acceptName: "",
acceptComment: "",
acceptDate: "",
customerName: "",
kapin: "",
userSchool: "",
xbOrderId: "",
successTime: "",
orderId: "",
studentNumber: "",
classNumber: "",
parentName: "",
contactNumber: "",
idCard: "",
businessNumber: "",
createTime: "",
address: "",
site: "",
remarks: "",
checkFail: "",
expenses: "",
identifying: "",
netNumber: "",
netPassword: "",
giftAccount: "",
giftPassword: "",
kuaidiOrder: "",
company: "",
studentCardCheckStatus: "",
kdOrderId: "",
thStatus: ""
};
this.visible = false;
},
showDrawer(data) {
this.certificatePhoto.push( this.apis+data.idCardz);
this.certificatePhoto.push(this.apis+data.idCardf);
this.certificatePhoto.push(this.apis+data.idCardzs);
this.certificatePhoto.push(this.apis+data.studenCard);
/* this.certificatePhoto.push('http://yrym.winsun-aly.com/gdtel-xyzx-hhr/images/yrym-ruanyan-logo.png')
this.certificatePhoto.push('http://yrym.winsun-aly.com/gdtel-xyzx-hhr/images/yrym-ruanyan-logo.png')
this.certificatePhoto.push('http://yrym.winsun-aly.com/gdtel-xyzx-hhr/images/yrym-ruanyan-logo.png')
this.certificatePhoto.push('http://yrym.winsun-aly.com/gdtel-xyzx-hhr/images/yrym-ruanyan-logo.png')*/
if (
this.certificatePhoto[0] == '/api/null' &&
this.certificatePhoto[1] == '/api/null' &&
this.certificatePhoto[2] == '/api/null' &&
this.certificatePhoto[3] == '/api/null'
) {
this.imgShow = false;
} else {
this.imgShow = true;
}
this.orderInfo = {
acceptResult: data.acceptResult,
nowPackage: data.nowPackage,
businessPackage: data.businessPackage,
acceptName: data.acceptName,
acceptComment: data.acceptComment,
acceptDate: data.acceptDate,
customerName: data.customerName,
kapin: data.kapin,
userSchool: data.userSchool,
xbOrderId: data.xbOrderId,
successTime: data.successTime,
orderId: data.orderId,
studentNumber: data.studentNumber,
classNumber: data.classNumber,
parentName: data.parentName,
contactNumber: data.contactNumber,
idCard: data.idCard,
businessNumber: data.businessNumber,
createTime: data.createTime,
address: data.address,
site: data.site,
remarks: data.remarks,
checkFail: data.checkFail,
expenses: data.expenses,
identifying: data.identifying,
netNumber: data.netNumber,
netPassword: data.netPassword,
giftAccount: data.giftAccount,
giftPassword: data.giftPassword,
kuaidiOrder: data.kuaidiOrder,
company: data.company,
studentCardCheckStatus: data.studentCardCheckStatus,
kdOrderId: data.kdOrderId,
thStatus: data.thStatus
};
this.selectOrderHis(data.id);
this.visible = true;
},
//时间事件
onChange(date, dateString) {
if (dateString.length == 0) {
this.queryParam.startTime = "";
this.queryParam.endTime = "";
} else {
this.queryParam.startTime = dateString[0];
this.queryParam.endTime = dateString[1];
}
},
handleSubmit() {
let downqueryParam = this.queryParam;
download(downqueryParam).then(res => {
if (res.state == "success") {
this.search();
this.$message.success(res.data, 5);
} else {
this.$message.error(res.msg, 5);
} }
})
/* if (this.callback == true) {
this.$message.warn("正在导出中...", 5);
}
let downqueryParam = this.queryParam;
let nowdate = moment().format("YYYY-MM-DD");
this.callback = true;
exportFile(
download(downqueryParam),
"订单清单" + nowdate + ".xls",
this.downloadstatu
);*/
},
/* downloadstatu(exportId) {
let nowdate = moment().format("YYYY-MM-DD");
exportFile(
uploadExcel({exportId}),
"订单清单" + nowdate + ".xls",
);
},*/
selectOrderHis(orderId) {
selectOrderHis({ orderId }).then(res => {
let liu = res.data;
for (let i = 0; i < liu.length; i++) {
let resdate = [];
resdate.push(liu[i]["operator"]);
let startTime = moment(new Date(liu[i]["create_date"])).format(
this.YYYY_MM_DD_HH_MI_SS
);
resdate.push(startTime);
resdate.push(liu[i]["status"]);
this.abnormalInfo.push(resdate);
}
});
},
abnormal(orderId) {
abnormal({ orderId }).then(res => {
if (res.state == "success") {
this.search();
this.$message.success(res.data, 5);
} else {
this.$message.error(res.msg, 5);
}
});
} }
}
};
</script> </script>
<style scoped> <style scoped>
.ant-carousel >>> .slick-dots {
height: auto;
}
.ant-carousel >>> .slick-slide img {
border: 5px solid #fff;
display: block;
margin: auto;
max-width: 80%;
}
.ant-carousel >>> .slick-thumb {
bottom: -45px;
}
.ant-carousel >>> .slick-thumb li {
width: 60px;
height: 45px;
}
.ant-carousel >>> .slick-thumb li img {
width: 100%;
height: 100%;
filter: grayscale(100%);
}
.ant-carousel >>> .slick-thumb li.slick-active img {
filter: grayscale(0%);
}
</style> </style>
\ No newline at end of file
...@@ -53,7 +53,7 @@ ...@@ -53,7 +53,7 @@
</div> </div>
<!--列表--> <!--列表-->
<s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling"> <s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling" :locale="emptyText">
<!--拦截器--> <!--拦截器-->
<template slot="productLastUpdateTime" slot-scope="text"> <template slot="productLastUpdateTime" slot-scope="text">
{{ text | dayjs}} {{ text | dayjs}}
...@@ -221,7 +221,7 @@ ...@@ -221,7 +221,7 @@
}, },
data(){ data(){
return { return {
//下载完成状态 emptyText: {emptyText: '暂无数据'},
callback:false, callback:false,
Formtable: this.$form.createForm(this), Formtable: this.$form.createForm(this),
visible: false, visible: false,
...@@ -274,6 +274,8 @@ ...@@ -274,6 +274,8 @@
return orderViewList(Object.assign(params,obj)).then(res => { return orderViewList(Object.assign(params,obj)).then(res => {
let data = {} let data = {}
if (res.state !== 'success') { if (res.state !== 'success') {
this.$message.error("查询失败!", 5);
this.emptyText.emptyText = '查询失败!'
data = { data = {
data: [], data: [],
pageSize: parameter.pageSize, pageSize: parameter.pageSize,
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
<!--列表--> <!--列表-->
<s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling"> <s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling" :locale="emptyText">
<template slot="operation" slot-scope="text,record"> <template slot="operation" slot-scope="text,record">
<a @click="modifyfunction(record)">编辑</a> <a @click="modifyfunction(record)">编辑</a>
<a-divider type="vertical"/> <a-divider type="vertical"/>
...@@ -74,10 +74,46 @@ ...@@ -74,10 +74,46 @@
<a-input placeholder="简介" v-decorator="[ 'explains', {rules: [{ required: true, message: '简介不能为空!' ,whitespace:true}]}]"></a-input> <a-input placeholder="简介" v-decorator="[ 'explains', {rules: [{ required: true, message: '简介不能为空!' ,whitespace:true}]}]"></a-input>
</a-form-item> </a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="背景图"> <a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="背景图">
<img style="width: 150px"> <a-upload
ref="upload"
:action=uploadUrl
listType="picture-card"
:fileList="fileList"
:headers="header"
@preview="handlePreview"
@change="handleChange"
:data="fileid"
accept=".jpg"
>
<div>
<a-icon type="plus" />
<div class="ant-upload-text"> <span v-if="fileList.length==0">上传背景图</span> <span v-if="fileList.length>0">更换背景图</span> </div>
</div>
</a-upload>
<a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel">
<img alt="example" style="width: 100%" :src="previewImage" />
</a-modal>
</a-form-item> </a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="小图"> <a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="小图">
<img style="width: 150px"> <a-upload
ref="xiaoupload"
:action=xiaotuuploadUrl
listType="picture-card"
:fileList="fileListxiaotu"
:headers="header"
@preview="handlePreviewxiaotu"
@change="handleChangexiaotu"
:data="fileid"
accept=".png"
>
<div>
<a-icon type="plus" />
<div class="ant-upload-text"> <span v-if="fileListxiaotu.length==0">上传小图</span> <span v-if="fileListxiaotu.length>0">更换小图</span> </div>
</div>
</a-upload>
<a-modal :visible="previewVisiblexiaotu" :footer="null" @cancel="handleCancelxiaotu">
<img alt="example" style="width: 100%" :src="previewImagexiaotu" />
</a-modal>
</a-form-item> </a-form-item>
</a-form> </a-form>
</a-modal> </a-modal>
...@@ -85,6 +121,8 @@ ...@@ -85,6 +121,8 @@
</template> </template>
<script> <script>
import Vue from 'vue'
import { ACCESS_TOKEN } from "@/store/mutation-types"
import STable from '@/components/table'; import STable from '@/components/table';
import {findByList,modify,insert,packageAllList,delet} from "@/api/school-center/packageManagementAPI" import {findByList,modify,insert,packageAllList,delet} from "@/api/school-center/packageManagementAPI"
import {cloneObject} from '@/utils/util'; import {cloneObject} from '@/utils/util';
...@@ -95,6 +133,22 @@ ...@@ -95,6 +133,22 @@
}, },
data: function () { data: function () {
return { return {
emptyText: {emptyText: '暂无数据'},
header:{
"Authorization":Vue.ls.get(ACCESS_TOKEN)
},
previewVisible: false,
previewImage: '',
fileList: [
],
previewVisiblexiaotu: false,
previewImagexiaotu: '',
fileListxiaotu:[],
fileid:{},
brackgroundurl:"manager/ciop/packageManagement/package/backgroundUpload",
xiaotuurl:"manager/ciop/packageManagement/package/xiaotuUpload",
Formtable: this.$form.createForm(this, {name: 'Formtable'}), Formtable: this.$form.createForm(this, {name: 'Formtable'}),
//输入框列表 //输入框列表
autoCompleteResult:[], autoCompleteResult:[],
...@@ -139,6 +193,8 @@ ...@@ -139,6 +193,8 @@
return findByList(Object.assign(params,obj)).then(res => { return findByList(Object.assign(params,obj)).then(res => {
let data = {} let data = {}
if (res.state !== 'success') { if (res.state !== 'success') {
this.$message.error("查询失败!", 5);
this.emptyText.emptyText = '查询失败!'
data = { data = {
data: [], data: [],
pageSize: parameter.pageSize, pageSize: parameter.pageSize,
...@@ -159,6 +215,60 @@ ...@@ -159,6 +215,60 @@
} }
}, },
methods:{ methods:{
getuuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
var r = Math.random() * 16 | 0,
v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
},
baseuploadUrl(){
const env = process.env.NODE_ENV; //获取当前环境
let apis = "/";
if(env === 'development'){ //测试环境默认添加前缀
apis = '/api/';
}
return apis
},
xiaotuuploadUrl(){
return this.baseuploadUrl() + this.xiaotuurl
},
uploadUrl(){
return this.baseuploadUrl() + this.brackgroundurl
}
,
//背景图
handleCancel() {
this.previewVisible = false;
},
handlePreview(file) {
this.previewImage = file.url || file.thumbUrl;
this.previewVisible = true;
},
handleChange(obj) {
if (this.fileList.length==2){
this.fileList.splice(0,1)
}else{
this.fileList = obj.fileList;
}
},
//小图
handleCancelxiaotu() {
this.previewVisiblexiaotu = false;
},
handlePreviewxiaotu(file) {
this.previewImagexiaotu = file.url || file.thumbUrl;
this.previewVisiblexiaotu = true;
},
handleChangexiaotu(obj) {
if (this.fileListxiaotu.length==2){
this.fileListxiaotu.splice(0,1)
}else{
this.fileListxiaotu = obj.fileList;
}
},
search() { search() {
this.$refs.table.refresh({search: true}) this.$refs.table.refresh({search: true})
}, },
...@@ -176,6 +286,7 @@ ...@@ -176,6 +286,7 @@
}) })
}, },
add(){ add(){
this.fileid={id:""}
this.modifyvisible=true this.modifyvisible=true
this.modifyForm.id="" this.modifyForm.id=""
this.titleName="添加" this.titleName="添加"
...@@ -192,6 +303,30 @@ ...@@ -192,6 +303,30 @@
}, },
modifyfunction(data){ modifyfunction(data){
this.modifyForm.id=data.id this.modifyForm.id=data.id
this.fileid={
id:data.id
}
let url=this.baseuploadUrl()+"manager/"+data.advImg.replace("enclosure","ciop")
if (!(data.advImg == null || data.advImg=="")) {
//下载图片浏览
this.fileList.push({
uid: this.getuuid(),
name: '找不到图片',
status: 'done',
url: url,
})
}
//下载图片浏览
if (!(data.logo == null || data.logo == "")) {
let xiaotuurl = this.baseuploadUrl() +"manager/"+ data.logo.replace("enclosure","ciop")
this.fileListxiaotu.push({
uid: this.getuuid(),
name: '找不到图片',
status: 'done',
url: xiaotuurl,
})
}
this.titleName="编辑" this.titleName="编辑"
this.modifyvisible=true this.modifyvisible=true
setTimeout(()=>{ setTimeout(()=>{
...@@ -252,6 +387,8 @@ ...@@ -252,6 +387,8 @@
}) })
}, },
createfunctionCancel(){ createfunctionCancel(){
this.fileList=[]
this.fileListxiaotu=[]
this.modifyvisible=false this.modifyvisible=false
this.autoCompleteResult=[] this.autoCompleteResult=[]
this.Formtable.setFieldsValue({ this.Formtable.setFieldsValue({
...@@ -273,4 +410,4 @@ ...@@ -273,4 +410,4 @@
<style scoped> <style scoped>
</style> </style>
\ No newline at end of file
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
</div> </div>
<!--列表--> <!--列表-->
<s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling"> <s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling" :locale="emptyText">
<!--拦截器--> <!--拦截器-->
<template slot="productLastUpdateTime" slot-scope="text"> <template slot="productLastUpdateTime" slot-scope="text">
{{ text | dayjs}} {{ text | dayjs}}
...@@ -53,6 +53,27 @@ ...@@ -53,6 +53,27 @@
</s-table> </s-table>
<!----弹框--> <!----弹框-->
<a-modal :title="add ?'添加宽带': '编辑宽带'" :visible="modifyvisible" @ok="createfunctionOk" @cancel="createfunctionCancel" html-type="submit" width="1024px"> <a-modal :title="add ?'添加宽带': '编辑宽带'" :visible="modifyvisible" @ok="createfunctionOk" @cancel="createfunctionCancel" html-type="submit" width="1024px">
<a-drawer
title="适用学校详情"
placement="right"
:closable="false"
@close="visibleT = false"
:visible="visibleT"
width=" 40%"
>
<p><span>学校名称:{{chouti.universityName}}</span></p>
<p><span>县分:{{chouti.universityRegion}}</span></p>
<p><span>装机地址:{{chouti.universityInstalledAddress}}</span></p>
<p><span>外线方式:{{chouti.universityExteriorLines}}</span></p>
<p><span>揽装工号:{{chouti.universityPackageNumber}}</span></p>
<p><span>地址ID:{{chouti.universityInstalledAddressId}}</span></p>
<p><span>用户类型:{{chouti.universityUserType}}</span></p>
<p><span>月租类型:{{chouti.universityMonthlyRentType}}</span></p>
<p><span>收费模式:{{chouti.universityChargeMode}}</span></p>
<p><span>计费属性:{{chouti.universityChargingAttribute}}</span></p>
<p><span>学校联系号码:{{chouti.universityContactPhone}}</span></p>
</a-drawer>
<a-form :form="Formtable"> <a-form :form="Formtable">
<a-form-item :labelCol="{span: 5}" :wrapperCol="{span: 9, offset: 1}" label="宽带标题:"> <a-form-item :labelCol="{span: 5}" :wrapperCol="{span: 9, offset: 1}" label="宽带标题:">
<a-input placeholder="宽带标题" v-decorator="[ 'productTitle', {rules: [{ required: true, message: '宽带标题不能为空!' ,validator: 'click'}]} ]"></a-input> <a-input placeholder="宽带标题" v-decorator="[ 'productTitle', {rules: [{ required: true, message: '宽带标题不能为空!' ,validator: 'click'}]} ]"></a-input>
...@@ -70,7 +91,11 @@ ...@@ -70,7 +91,11 @@
<a-input placeholder="包年包月情况" v-decorator="[ 'productRate', {rules: [{ required: true, message: '包年包月情况不能为空!' ,validator: 'click'}]} ]"></a-input> <a-input placeholder="包年包月情况" v-decorator="[ 'productRate', {rules: [{ required: true, message: '包年包月情况不能为空!' ,validator: 'click'}]} ]"></a-input>
</a-form-item> </a-form-item>
<a-form-item :labelCol="{span: 5}" :wrapperCol="{span: 9, offset: 1}" label="适用学校:"> <a-form-item :labelCol="{span: 5}" :wrapperCol="{span: 9, offset: 1}" label="适用学校:">
<a-input placeholder="适用学校" v-decorator="[ 'productUniversity', {rules: [{ required: true, message: '适用学校不能为空!' ,validator: 'click'}]} ]"></a-input> <a-select v-model="universityName" style="width: 330px">
<a-select-option @click="universitySchoolName('请选择')" value="请选择">请选择</a-select-option>
<a-select-option @click="universitySchoolName(item)" v-for="item in universitySchool" :value="item.universityId">{{item.universityName}}</a-select-option>
</a-select>
<a @click="visibleT = true">详情</a>
</a-form-item> </a-form-item>
<a-form-item :labelCol="{span: 5}" :wrapperCol="{span: 9, offset: 1}" label="套餐情况:"> <a-form-item :labelCol="{span: 5}" :wrapperCol="{span: 9, offset: 1}" label="套餐情况:">
<a-input :rows="10" v-model="modelData.productMealPrice"/> <a-input :rows="10" v-model="modelData.productMealPrice"/>
...@@ -98,7 +123,7 @@ ...@@ -98,7 +123,7 @@
<script> <script>
import STable from '@/components/table'; import STable from '@/components/table';
import {productList,productDelete,productInsert,productUpdate} from "@/api/school-center/productAPI" import {productList,productDelete,productInsert,productUpdate,universitySchool} from "@/api/school-center/productAPI"
import {cloneObject} from '@/utils/util'; import {cloneObject} from '@/utils/util';
export default { export default {
name: "product", name: "product",
...@@ -107,6 +132,12 @@ ...@@ -107,6 +132,12 @@
}, },
data(){ data(){
return { return {
universityIdtrue:true,
universityName:'',
visibleT:false,
chouti:{},
universitySchool:[],
emptyText: {emptyText: '暂无数据'},
Formtable: this.$form.createForm(this), Formtable: this.$form.createForm(this),
modifyvisible: false, modifyvisible: false,
add: true, add: true,
...@@ -119,6 +150,7 @@ ...@@ -119,6 +150,7 @@
productState :'' // 宽带狀態 productState :'' // 宽带狀態
}, },
modelData:{ modelData:{
universityId:'',
productMealPrice:'', productMealPrice:'',
productMeal:'', productMeal:'',
productTitle:'', productTitle:'',
...@@ -160,6 +192,8 @@ ...@@ -160,6 +192,8 @@
return productList(Object.assign(params,obj)).then(res => { return productList(Object.assign(params,obj)).then(res => {
let data = {} let data = {}
if (res.state !== 'success') { if (res.state !== 'success') {
this.$message.error("查询失败!", 5);
this.emptyText.emptyText = '查询失败!'
data = { data = {
data: [], data: [],
pageSize: parameter.pageSize, pageSize: parameter.pageSize,
...@@ -180,6 +214,15 @@ ...@@ -180,6 +214,15 @@
} }
}, },
methods:{ methods:{
universitySchoolName(item){
if(item == '请选择'){
this.modelData.productUniversity=item
}else {
this.modelData.productUniversity=item.universityName
this.modelData.universityId=item.universityId
this.chouti=item
}
},
search() { search() {
this.$refs.table.refresh({search: true}) this.$refs.table.refresh({search: true})
}, },
...@@ -192,16 +235,21 @@ ...@@ -192,16 +235,21 @@
}) })
}, },
modifyfunction(data){ modifyfunction(data){
universitySchool().then(res => {
this.universitySchool=res.data
})
if(data != undefined ){ if(data != undefined ){
this.productIntroduction=data.productIntroduction, this.productIntroduction=data.productIntroduction,
this.productSetMealIntroduction=data.productSetMealIntroduction, this.productSetMealIntroduction=data.productSetMealIntroduction,
this.modelData.productMealPrice=data.productMealPrice this.modelData.productMealPrice=data.productMealPrice
this.modelData.productUniversity=data.productUniversity
this.universityName=data.productUniversity
this.modelData.universityId=data.universityId
this.modelData.productId=data.productId this.modelData.productId=data.productId
setTimeout(()=>{ setTimeout(()=>{
this.Formtable.setFieldsValue({ this.Formtable.setFieldsValue({
"productMeal":data.productMeal, "productMeal":data.productMeal,
"productTitle":data.productTitle, "productTitle":data.productTitle,
"productUniversity":data.productUniversity,
"productPrice":data.productPrice, "productPrice":data.productPrice,
"productRegion":data.productRegion, "productRegion":data.productRegion,
"productRate":data.productRate, "productRate":data.productRate,
...@@ -209,18 +257,24 @@ ...@@ -209,18 +257,24 @@
}) })
},0) },0)
this.add=false; this.add=false;
}else {
this.universityName='请选择'
} }
this.modifyvisible=true; this.modifyvisible=true;
}, },
createfunctionOk(){ createfunctionOk(){
if(this.modelData.universityId == '' || this.modelData.universityId == undefined || this.modelData.productUniversity=='请选择'){
this.$notification.error({message: '请选择适用学校', duration: 4})
return
}
let that = this; let that = this;
that.Formtable.validateFields(['productMeal','productTitle','productPrice','productUniversity','productRegion','productRate','productState'], {force: true}, (err, values) => { that.Formtable.validateFields(['productMeal','productTitle','productPrice','productRegion','productRate','productState'], {force: true}, (err, values) => {
if (err ) { if (err ) {
return; return;
} }
that.modelData.productMeal=values.productMeal that.modelData.productMeal=values.productMeal
that.modelData.productTitle=values.productTitle that.modelData.productTitle=values.productTitle
that.modelData.productUniversity=values.productUniversity
that.modelData.productPrice=values.productPrice that.modelData.productPrice=values.productPrice
that.modelData.productRegion=values.productRegion that.modelData.productRegion=values.productRegion
that.modelData.productRate=values.productRate that.modelData.productRate=values.productRate
...@@ -264,10 +318,11 @@ ...@@ -264,10 +318,11 @@
that.modelData.productId='' that.modelData.productId=''
that.modelData.productIntroduction='' that.modelData.productIntroduction=''
that.modelData.productSetMealIntroduction='' that.modelData.productSetMealIntroduction=''
that.modelData.productUniversity='',
that.modelData.universityId='',
this.Formtable.setFieldsValue({ this.Formtable.setFieldsValue({
productMeal:'', productMeal:'',
productTitle:'', productTitle:'',
productUniversity:'',
productPrice:'', productPrice:'',
productRegion:'', productRegion:'',
productRate:'', productRate:'',
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
</div> </div>
<!--列表--> <!--列表-->
<s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling"> <s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling" :locale="emptyText">
<!--拦截器--> <!--拦截器-->
<template slot="productLastUpdateTime" slot-scope="text"> <template slot="productLastUpdateTime" slot-scope="text">
{{ text | dayjs}} {{ text | dayjs}}
...@@ -68,6 +68,9 @@ ...@@ -68,6 +68,9 @@
<a-form-item :labelCol="{span: 5}" :wrapperCol="{span: 9, offset: 1}" label="揽装工号:"> <a-form-item :labelCol="{span: 5}" :wrapperCol="{span: 9, offset: 1}" label="揽装工号:">
<a-input placeholder="揽装工号" v-decorator="[ 'universityPackageNumber', {rules: [{ required: true, message: '揽装工号不能为空!' ,validator: 'click'}]} ]"></a-input> <a-input placeholder="揽装工号" v-decorator="[ 'universityPackageNumber', {rules: [{ required: true, message: '揽装工号不能为空!' ,validator: 'click'}]} ]"></a-input>
</a-form-item> </a-form-item>
<a-form-item :labelCol="{span: 5}" :wrapperCol="{span: 9, offset: 1}" label="地址ID:">
<a-input placeholder="地址ID" v-decorator="[ 'universityInstalledAddressId', {rules: [{ required: true, message: '地址ID不能为空!' ,validator: 'click'}]} ]"></a-input>
</a-form-item>
<a-form-item :labelCol="{span: 5}" :wrapperCol="{span: 9, offset: 1}" label="用户类型:"> <a-form-item :labelCol="{span: 5}" :wrapperCol="{span: 9, offset: 1}" label="用户类型:">
<a-input placeholder="如:校园天翼宽带用户" v-decorator="[ 'universityUserType', {rules: [{ required: true, message: '用户类型不能为空!' ,validator: 'click'}]} ]"></a-input> <a-input placeholder="如:校园天翼宽带用户" v-decorator="[ 'universityUserType', {rules: [{ required: true, message: '用户类型不能为空!' ,validator: 'click'}]} ]"></a-input>
</a-form-item> </a-form-item>
...@@ -105,6 +108,7 @@ ...@@ -105,6 +108,7 @@
}, },
data(){ data(){
return { return {
emptyText: {emptyText: '暂无数据'},
Formtable: this.$form.createForm(this), Formtable: this.$form.createForm(this),
modifyvisible: false, modifyvisible: false,
add: true, add: true,
...@@ -118,6 +122,7 @@ ...@@ -118,6 +122,7 @@
universityInstalledAddress:'', universityInstalledAddress:'',
universityExteriorLines:'', universityExteriorLines:'',
universityPackageNumber:'', universityPackageNumber:'',
universityInstalledAddressId:'',
universityUserType:'', universityUserType:'',
universityContactPhone:'', universityContactPhone:'',
universityMonthlyRentType:'', universityMonthlyRentType:'',
...@@ -133,6 +138,7 @@ ...@@ -133,6 +138,7 @@
{dataIndex: 'universityInstalledAddress', width: 300, title: '装机地址'}, {dataIndex: 'universityInstalledAddress', width: 300, title: '装机地址'},
{dataIndex: 'universityExteriorLines', width: 120, title: '外线方式 '}, {dataIndex: 'universityExteriorLines', width: 120, title: '外线方式 '},
{dataIndex: 'universityPackageNumber', width: 100, title: '揽装工号 '}, {dataIndex: 'universityPackageNumber', width: 100, title: '揽装工号 '},
{dataIndex: 'universityInstalledAddressId', width: 150, title: '地址ID'},
{dataIndex: 'universityUserType', width: 150, title: '用户类型 '}, {dataIndex: 'universityUserType', width: 150, title: '用户类型 '},
{dataIndex: 'universityMonthlyRentType', width: 80, title: '月租类型 '}, {dataIndex: 'universityMonthlyRentType', width: 80, title: '月租类型 '},
{dataIndex: 'universityChargeMode', width: 120, title: '收费模式 '}, {dataIndex: 'universityChargeMode', width: 120, title: '收费模式 '},
...@@ -158,6 +164,8 @@ ...@@ -158,6 +164,8 @@
return universityList(Object.assign(params,obj)).then(res => { return universityList(Object.assign(params,obj)).then(res => {
let data = {} let data = {}
if (res.state !== 'success') { if (res.state !== 'success') {
this.$message.error("查询失败!", 5);
this.emptyText.emptyText = '查询失败!'
data = { data = {
data: [], data: [],
pageSize: parameter.pageSize, pageSize: parameter.pageSize,
...@@ -199,6 +207,7 @@ ...@@ -199,6 +207,7 @@
"universityInstalledAddress":data.universityInstalledAddress, "universityInstalledAddress":data.universityInstalledAddress,
"universityExteriorLines":data.universityExteriorLines, "universityExteriorLines":data.universityExteriorLines,
"universityPackageNumber":data.universityPackageNumber, "universityPackageNumber":data.universityPackageNumber,
"universityInstalledAddressId":data.universityInstalledAddressId,
"universityUserType":data.universityUserType, "universityUserType":data.universityUserType,
"universityContactPhone":data.universityContactPhone, "universityContactPhone":data.universityContactPhone,
"universityMonthlyRentType":data.universityMonthlyRentType, "universityMonthlyRentType":data.universityMonthlyRentType,
...@@ -214,7 +223,7 @@ ...@@ -214,7 +223,7 @@
}, },
createfunctionOk(){ createfunctionOk(){
let that = this; let that = this;
that.Formtable.validateFields(['universityName','universityRegion','universityInstalledAddress','universityExteriorLines','universityPackageNumber','universityUserType', that.Formtable.validateFields(['universityName','universityRegion','universityInstalledAddress','universityExteriorLines','universityPackageNumber','universityInstalledAddressId','universityUserType',
'universityContactPhone','universityMonthlyRentType','universityChargeMode','universityChargingAttribute','speed','publicNumber'], {force: true}, (err, values) => { 'universityContactPhone','universityMonthlyRentType','universityChargeMode','universityChargingAttribute','speed','publicNumber'], {force: true}, (err, values) => {
if (err ) { if (err ) {
return; return;
...@@ -224,6 +233,7 @@ ...@@ -224,6 +233,7 @@
that.modelData.universityInstalledAddress=values.universityInstalledAddress that.modelData.universityInstalledAddress=values.universityInstalledAddress
that.modelData.universityExteriorLines=values.universityExteriorLines that.modelData.universityExteriorLines=values.universityExteriorLines
that.modelData.universityPackageNumber=values.universityPackageNumber that.modelData.universityPackageNumber=values.universityPackageNumber
that.modelData.universityInstalledAddressId=values.universityInstalledAddressId
that.modelData.universityUserType=values.universityUserType that.modelData.universityUserType=values.universityUserType
that.modelData.universityContactPhone=values.universityContactPhone that.modelData.universityContactPhone=values.universityContactPhone
that.modelData.universityMonthlyRentType=values.universityMonthlyRentType that.modelData.universityMonthlyRentType=values.universityMonthlyRentType
...@@ -272,6 +282,7 @@ ...@@ -272,6 +282,7 @@
"universityInstalledAddress":'', "universityInstalledAddress":'',
"universityExteriorLines":'', "universityExteriorLines":'',
"universityPackageNumber":'', "universityPackageNumber":'',
"universityInstalledAddressId":'',
"universityUserType":'', "universityUserType":'',
"universityContactPhone":'', "universityContactPhone":'',
"universityMonthlyRentType":'', "universityMonthlyRentType":'',
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
</div> </div>
<!--列表--> <!--列表-->
<s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling"> <s-table :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling" :locale="emptyText">
<template slot="operation" slot-scope="text, record"> <template slot="operation" slot-scope="text, record">
<span> <span>
<a @click="modifyfunction(record)">修改</a> <a @click="modifyfunction(record)">修改</a>
...@@ -61,6 +61,7 @@ ...@@ -61,6 +61,7 @@
}, },
data(){ data(){
return { return {
emptyText: {emptyText: '暂无数据'},
Formtable: this.$form.createForm(this), Formtable: this.$form.createForm(this),
modifyvisible: false, modifyvisible: false,
add: true, add: true,
...@@ -93,6 +94,8 @@ ...@@ -93,6 +94,8 @@
return ysmUserList(Object.assign(params,obj)).then(res => { return ysmUserList(Object.assign(params,obj)).then(res => {
let data = {} let data = {}
if (res.state !== 'success') { if (res.state !== 'success') {
this.$message.error("查询失败!", 5);
this.emptyText.emptyText = '查询失败!'
data = { data = {
data: [], data: [],
pageSize: parameter.pageSize, pageSize: parameter.pageSize,
......
...@@ -32,8 +32,8 @@ ...@@ -32,8 +32,8 @@
<a-col :md="6" :sm="24"> <a-col :md="6" :sm="24">
<a-form-item label="使用状态"> <a-form-item label="使用状态">
<a-select v-model="queryParams.status" placeholder="请选择" default-value="0"> <a-select v-model="queryParams.status" placeholder="请选择" default-value="1">
<a-select-option value="">全部</a-select-option> <!-- <a-select-option value="1,2,3">全部</a-select-option>-->
<a-select-option value="1">正常</a-select-option> <a-select-option value="1">正常</a-select-option>
<a-select-option value="2">冻结</a-select-option> <a-select-option value="2">冻结</a-select-option>
<a-select-option value="3">已失效</a-select-option> <a-select-option value="3">已失效</a-select-option>
...@@ -90,8 +90,13 @@ ...@@ -90,8 +90,13 @@
</s-table> </s-table>
<!-- 修改密码 --> <!-- 修改密码 -->
<a-modal title="密码修改" v-model="editpaswordmodel" @ok="editPassword" @cancel="editPasswordcancel"> <a-modal title="密码修改" v-model="editpaswordmodel" @ok="editPassword" @cancel="editPasswordcancel">
<a-form :form="EditPassFrom"> <a-form :form="EditPassFrom" >
<a-form-item label="新密码" >
<a-form-item label="原密码" v-if="hasOperationPermission(['超级管理员'])">
<a-input placeholder="原密码" type="password" v-model="editpasswordfrom.oldPwd"></a-input>
</a-form-item>
<a-form-item label="新密码" >
<a-input placeholder="新密码" v-decorator="['editpassword',{rules: [{ required: true, message: '新密码不能为空!' }]}]" type="password"></a-input> <a-input placeholder="新密码" v-decorator="['editpassword',{rules: [{ required: true, message: '新密码不能为空!' }]}]" type="password"></a-input>
</a-form-item> </a-form-item>
<a-form-item label="确认密码" > <a-form-item label="确认密码" >
...@@ -252,6 +257,7 @@ export default { ...@@ -252,6 +257,7 @@ export default {
//修改密码窗口 //修改密码窗口
editpaswordmodel:false, editpaswordmodel:false,
editpasswordfrom:{ editpasswordfrom:{
oldPwd:'',
newPwd:"", newPwd:"",
rePwd:"", rePwd:"",
changeId:"", changeId:"",
...@@ -287,7 +293,7 @@ export default { ...@@ -287,7 +293,7 @@ export default {
//查询条件 //查询条件
queryParams: { queryParams: {
account: '', account: '',
status:"", status:"1",
deptid:"", deptid:"",
name:"", name:"",
phone:"" phone:""
...@@ -356,26 +362,29 @@ export default { ...@@ -356,26 +362,29 @@ export default {
}, },
//提交密码修改 //提交密码修改
editPassword() { editPassword() {
if(this.hasOperationPermission(['超级管理员'])){
if(this.editpasswordfrom.oldPwd == '' || this.editpasswordfrom.oldPwd==undefined){
this.$message.error("请输入原密码!", 5);
}
}
this.EditPassFrom.validateFields(err => { this.EditPassFrom.validateFields(err => {
if (!err) { if (!err) {
this.editpasswordfrom.newPwd= encodeURIComponent(this.getPass(this.EditPassFrom.getFieldValue('editpassword'))) this.editpasswordfrom.newPwd= encodeURIComponent(this.getPass(this.EditPassFrom.getFieldValue('editpassword')))
this.editpasswordfrom.oldPwd= encodeURIComponent(this.getPass(this.editpasswordfrom.oldPwd))
this.editpasswordfrom.rePwd=this.editpasswordfrom.newPwd this.editpasswordfrom.rePwd=this.editpasswordfrom.newPwd
changeOtherPwd(this.editpasswordfrom).then(res => { changeOtherPwd(this.editpasswordfrom).then(res => {
if (res.code == 200) { if (res.state == 'success') {
this.editpasswordfrom.oldPwd = ''
this.editpasswordfrom.editrepassword = ''
this.editpasswordfrom.editpassword = ''
this.EditPassFrom.setFieldsValue({editpassword:""}); this.EditPassFrom.setFieldsValue({editpassword:""});
this.EditPassFrom.setFieldsValue({editrepassword:""}); this.EditPassFrom.setFieldsValue({editrepassword:""});
if(res.message==undefined){
this.$message.success(res.data != "" ? res.data : "修改成功", 5); this.$message.success(res.data != "" ? res.data : "修改成功", 5);
}else {
this.$message.success(res.message != "" ? res.message : "修改成功", 5);
}
}else{ }else{
if(res.message==undefined){ this.editpasswordfrom.oldPwd = ''
this.$message.error(res.data != "" ? res.data : "失败修改", 5); this.editpasswordfrom.editrepassword = ''
}else { this.editpasswordfrom.editpassword = ''
this.$message.error(res.message != "" ? res.message : "失败修改", 5); this.$message.error(res.msg != "" ? res.msg : "修改失败", 5);
}
} }
this.editpaswordmodel = false this.editpaswordmodel = false
}) })
...@@ -577,6 +586,14 @@ export default { ...@@ -577,6 +586,14 @@ export default {
that.$refs.table.refresh({ search: true }) that.$refs.table.refresh({ search: true })
}) })
}, },
hasOperationPermission(marks = []) {
for (const index in marks) {
if (this.$store.state.user.info.role.indexOf(marks[index]) > -1) {
return false;
}
}
return true;
},
updatePassword(userid){ updatePassword(userid){
this.editpaswordmodel=true this.editpaswordmodel=true
this.editpasswordfrom.changeId=userid; this.editpasswordfrom.changeId=userid;
......
...@@ -39,6 +39,31 @@ ...@@ -39,6 +39,31 @@
</a-col> </a-col>
</a-row> </a-row>
<a-row :gutter="0">
<a-col :span="14">
<a-form-item>
<a-input
:disabled="!loginBtn"
v-decorator="['phonecode',validatorRules.phoneCode]"
size="large"
type="text"
placeholder="请输入手机验证码">
<a-icon slot="prefix" type="message" :style="{ color: 'rgba(0,0,0,.25)' }"/>
</a-input>
</a-form-item>
</a-col>
<a-col :span="10">
<a-button
size="small"
type="primary"
htmlType="submit"
class="code-button"
@click.stop.prevent="getCode"
:disabled="!loginBtn">{{codeMsg}}
</a-button>
<!-- <j-graphic-code @success="generateCode" style="float: right"></j-graphic-code>-->
</a-col>
</a-row>
<a-form-item> <a-form-item>
<a-input <a-input
:disabled="!loginBtn" :disabled="!loginBtn"
...@@ -50,7 +75,7 @@ ...@@ -50,7 +75,7 @@
<a-icon slot="prefix" type="lock" :style="{ color: 'rgba(0,0,0,.25)' }"/> <a-icon slot="prefix" type="lock" :style="{ color: 'rgba(0,0,0,.25)' }"/>
</a-input> </a-input>
</a-form-item> </a-form-item>
<!-- <div class="register">忘记密码?<router-link :to="{path: '/user/register'}">找回密码</router-link></div>--> <div class="register"><router-link :to="{path: '/user/register'}">找回密码</router-link></div>
<a-form-item style="margin-top:24vw/@vw"> <a-form-item style="margin-top:24vw/@vw">
<a-button <a-button
...@@ -149,6 +174,17 @@ export default { ...@@ -149,6 +174,17 @@ export default {
let data = { let data = {
username: username, username: username,
} }
getPhoneCode(data).then(res => {
if (res.code == 200) {
this.$notification.success({
message: res.message ? res.message :"发送成功",
});
return null;
}
this.$notification.error({
message: res.message ? res.message :"发送错误",
});
})
//初始化倒计时 //初始化倒计时
this.countdown=60; this.countdown=60;
this.timer = setInterval(() => { this.timer = setInterval(() => {
...@@ -173,12 +209,12 @@ export default { ...@@ -173,12 +209,12 @@ export default {
smsCode: "xxxx" smsCode: "xxxx"
}; };
// 使用账户密码登陆 // 使用账户密码登陆
that.form.validateFields(['username', 'password', 'inputCode'], {force: true}, (err, values) => { that.form.validateFields(['username', 'password', 'inputCode',"phonecode"], {force: true}, (err, values) => {
if (!err) { if (!err) {
loginParams.username = values.username; loginParams.username = values.username;
loginParams.password = encodeURIComponent(this.getPass(values.password)); loginParams.password = encodeURIComponent(this.getPass(values.password));
loginParams.remember = that.formLogin.remember; loginParams.remember = that.formLogin.remember;
loginParams.phonecode=encodeURIComponent(this.getPass("XXXXXX")); loginParams.phonecode=encodeURIComponent(this.getPass(values.phonecode));
//console.log(loginParams); //console.log(loginParams);
that.Login(loginParams).then(() => { that.Login(loginParams).then(() => {
this.departConfirm({}); this.departConfirm({});
......
<template>
<div class="main clearfix">
<div class="caption">
</div>
<div class="form">
<span class="form_title">密码重置</span>
<a-form :form="form" class="user-layout-login" ref="formLogin" id="formLogin">
<a-form-item>
<a-input
size="large"
v-decorator="['username',validatorRules.username,{ validator: this.handleUsernameOrEmail }]"
type="text"
placeholder="请输入账号">
<a-icon slot="prefix" type="user" :style="{ color: 'rgba(0,0,0,.25)' }"/>
</a-input>
</a-form-item>
<a-row :gutter="0">
<a-col :span="14">
<a-form-item>
<a-input
v-decorator="['inputCode',validatorRules.inputCode]"
size="large"
type="text"
@change="inputCodeChange"
placeholder="请输入验证码">
<a-icon
slot="prefix"
v-if=" inputCodeContent==verifiedCode "
type="smile"
:style="{ color: 'rgba(0,0,0,.25)' }"/>
<a-icon slot="prefix" v-else type="frown" :style="{ color: 'rgba(0,0,0,.25)' }"/>
</a-input>
</a-form-item>
</a-col>
<a-col :span="10">
<a-button
size="small"
type="primary"
htmlType="submit"
class="code-button"
:loading="loginBtn"
@click.stop.prevent="getCode"
:disabled="loginBtn">{{codeMsg}}
</a-button>
<!-- <j-graphic-code @success="generateCode" style="float: right"></j-graphic-code>-->
</a-col>
</a-row>
<a-form-item>
<a-input
v-decorator="['password',validatorRules.password]"
size="large"
type="password"
autocomplete="false"
placeholder="新密码(6-12位数字和字母组合)">
<a-icon slot="prefix" type="lock" :style="{ color: 'rgba(0,0,0,.25)' }"/>
</a-input>
</a-form-item>
<a-form-item>
<a-input
v-decorator="['password2',validatorRules.password2]"
size="large"
type="password"
autocomplete="false"
placeholder="再次输入密码">
<a-icon slot="prefix" type="lock" :style="{ color: 'rgba(0,0,0,.25)' }"/>
</a-input>
</a-form-item>
<router-link :to="{name: '/user/Login'}" class="back_login">返回登录</router-link>
<a-button
size="small"
type="primary"
htmlType="submit"
class="login-button"
:loading="loginBtn"
@click.stop.prevent="handleSubmit"
:disabled="loginBtn">确定
</a-button>
</a-form>
<!-- <two-step-captcha-->
<!-- v-if="requiredTwoStepCaptcha"-->
<!-- :visible="stepCaptchaVisible"-->
<!-- @success="stepCaptchaSuccess"-->
<!-- @cancel="stepCaptchaCancel">-->
<!-- </two-step-captcha>-->
</div>
</div>
</template>
<script>
import TwoStepCaptcha from '@/components/tools/TwoStepCaptcha'
import {mapActions} from "vuex"
import {timeFix} from "@/utils/util"
import Vue from 'vue'
import {ACCESS_TOKEN} from "@/store/mutation-types"
import JGraphicCode from '@/components/jeecg/JGraphicCode'
import {setMaxDigits , RSAKeyPair , encryptedString} from '@/utils/RSA'
import {
register,registercode
} from '@/api/system'
export default {
components: {
TwoStepCaptcha,
JGraphicCode
},
data() {
return {
customActiveKey: "tab1",
loginBtn: false,
// login type: 0 email, 1 username, 2 telephone
loginType: 0,
requiredTwoStepCaptcha: false,
stepCaptchaVisible: false,
form: this.$form.createForm(this),
formLogin: {
username: "",
password: "",
captcha: "",
mobile: ""
},
validatorRules: {
username: {rules: [{required: true, message: '请输入手机号码!', validator: 'click'}]},
password: {rules: [{required: true, message: '请输入密码!', validator: 'click'}]},
password2: {rules: [{required: true, message: '请再次输入密码!'},{validator: this.validateToNextPassword}]},
mobile: {rules: [{validator: this.validateMobile}]},
captcha: {rule: [{required: true, message: '请输入验证码!'}]},
inputCode: {rules: [{required: true, message: '请输入验证码!'}, {validator: this.validateInputCode}]}
},
codeDisabled: false,// 是否禁用按钮
countdown: 60,// 倒计时秒数
codeMsg: '获取验证码', // 按钮上的文字
timer: null,// 定时器
verifiedCode: "",
inputCodeContent: "",
inputCodeNull: true,
}
},
created() {
Vue.ls.remove(ACCESS_TOKEN)
this.getRouterData();
},
methods: {
// handler
handleUsernameOrEmail(rule, value, callback) {
const regex = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;
if (regex.test(value)) {
this.loginType = 0
} else {
this.loginType = 1
}
callback()
},
handleTabClick(key) {
this.customActiveKey = key
// this.form.resetFields()
},
getCode(){
// 验证码60秒倒计时
if (!this.timer) {
let data={
account:this.form.getFieldValue("username")
}
registercode(data).then(res=>{
if (res.code==200){
this.$notification.success({
message: res.data,
});
return null;
}
this.$notification.error({
message: res.data,
});
})
this.timer = setInterval(() => {
if (this.countdown > 0 && this.countdown <= 60) {
this.countdown--;
if (this.countdown !== 0) {
this.codeMsg = "重新发送(" + this.countdown + ")";
} else {
clearInterval(this.timer);
this.codeMsg = "获取验证码";
this.countdown = 60;
this.timer = null;
this.codeDisabled = false;
}
}
}, 1000)
}
},
handleSubmit() {
let that = this
let loginParams = {
smsCode: "xxxx"
};
let data={
account:"",
verificationCode:"",
newPwd:"",
rePwd:''
}
// 确定修改密码
that.form.validateFields(['username', 'password', 'password2', 'inputCode'], {force: true}, (err, values) => {
if (!err) {
values.password = encodeURIComponent(this.getPass(values.password));
values.password2 = encodeURIComponent(this.getPass(values.password2));
let data = {
account: values.username,
verificationCode: values.inputCode,
newPwd: values.password,
rePwd: values.password
}
register(data).then(res => {
if (res.code==200) {
this.registerSuccess(res.data);
return null;
}
this.registerRrror(res.data)
})
}
})
},
requestFailed(err) {
this.$notification['error']({
message: '登录失败',
description: ((err.response || {}).data || {}).message || err.message || "请求出现错误,请稍后再试",
duration: 4,
});
this.loginBtn = false;
},
registerSuccess(data) {
this.$notification.success({
message: data,
description: `${timeFix()},请再次登录`,
});
},
registerRrror(data) {
this.$notification.warn({
message: data,
});
},
validateMobile(rule, value, callback) {
if (!value || new RegExp(/^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/).test(value)) {
callback();
} else {
callback("您的手机号码格式不正确!");
}
},
validateInputCode(rule, value, callback) {
if (!value || this.verifiedCode == this.inputCodeContent) {
callback();
} else {
callback("您输入的验证码不正确!");
}
},
inputCodeChange(e) {
},
getRouterData() {
this.$nextTick(() => {
this.form.setFieldsValue({
'username': this.$route.params.username
});
})
},
validateToNextPassword (rule, value, callback) {
const form = this.form;
if (value!= form.getFieldValue("password")) {
callback("两次输入的密码不一样!");
}
callback();
},
//密码加密
getPass(text){
/*let keyss = setMaxDigits(130);
keyss = new RSAKeyPair("10001","","a5d210338760bdbe2baabef73c410582e812dad8d9669d8c6ebfe026450e5cc10005290f17a0474c7351031edbff81bd8217a518bdf1a02855f53105ead0370e8a9e30b8560feab1d333a0b055b29419476b0eea1ea54315662ddfc46ec066f076e9490ec34c825afad9e44cf38e5ab600f3136acfe3a0ac0e672e2cb8e50371");
let password = encryptedString(keyss,text);*/
let publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCAcsbUyeRD2lQGPEnu5LbXOL2lycUJwK/8BsoZD3b932l4JehAvOKR/YNzs6EG4gnZ7gaXLCnWbE5kB1wuUooo6bv8fSAg0W5QmM1TH8zaIImdAaN6c8mw5dUS/2VJ/2GHI54R1NJziX9VHecpf2DrHnWngETsNytmXaVl3JiXywIDAQAB";
let encrypt = new window.JSEncrypt();
encrypt.setPublicKey(publicKey);
var encryptPwd = encrypt.encryptLong(text);
return encryptPwd;
//return text;
}
}
}
</script>
<style lang="less" scoped>
@import '~@/assets/less/style';
.main{
.caption{
width: 666vw/@vw;
height: 792vw/@vw;
background: url("~@/assets/bg_content.png") no-repeat center;
background-size: cover;
float: left;
}
.form{
width: calc(100% - 666vw/@vw);
height: 792vw/@vw;
box-sizing: border-box;
padding:80vw/@vw 80vw/@vw 0 60vw/@vw;
float:left;
.form_title{
font-size:40vw/@vw;
font-family:PingFang SC;
font-weight:500;
color:rgba(51,51,51,1);
display: inline-block;
height: 55vw/@vw;
margin: 25vw/@vw 0vw/@vw 50vw/@vw 0;
border-bottom: 6vw/@vw solid #57bbff;
}
/deep/ .ant-form-item{
margin-bottom: 24vw/@vw;
}
@media (min-width: 1920px) {
/deep/.ant-input-affix-wrapper .ant-input-prefix{
font-size: 22vw/@vw;
top: 38% !important;
}
}
@media (min-width: 1400px) {
/deep/.ant-input-affix-wrapper .ant-input-prefix{
font-size: 22vw/@vw;
top: 40.5% !important;
}
}
/deep/.ant-input-affix-wrapper .ant-input-prefix{
font-size: 22vw/@vw;
top: 39%;
}
/deep/ .user-layout-login div .ant-input{
width:100%;
height:68vw/@vw;
margin-bottom: 15vw/@vw;
padding-left: 44vw/@vw;
background:rgba(245,245,245,1);
border:1vw/@vw solid rgba(221,221,221,1);
opacity:0.5;
border-radius:4vw/@vw;
&::-webkit-input-placeholder {
font-size:24vw/@vw;
font-family:PingFang SC;
font-weight:500;
color:#333;
line-height:88vw/@vw;
}
&::-moz-placeholder {
font-size:24vw/@vw;
font-family:PingFang SC;
font-weight:500;
color:#333;
line-height:88vw/@vw;
}
&:-ms-input-placeholder {
font-size:24vw/@vw;
font-family:PingFang SC;
font-weight:500;
color:#333;
line-height:88vw/@vw;
}
}
/deep/ #gc-canvas{
height: 67vw/@vw;
}
.code-button{
width:calc(100% - 10vw/@vw);
height:68vw/@vw;
margin-left: 10vw/@vw;
background:#e6e6e6;
/*border-radius:40vw/@vw;*/
font-size:24vw/@vw;
font-family:PingFang SC;
font-weight:bold;
color:#adadad;
}
.back_login{
width:290vw/@vw;
height:80vw/@vw;
margin-right: 10vw/@vw;
background:rgba(87,148,255,1);
border-radius:40vw/@vw;
font-size:36vw/@vw;
font-family:PingFang SC;
font-weight:bold;
color:rgba(255,255,255,1);
text-decoration: none;
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);
line-height: 80vw/@vw;
display: inline-block;
white-space: nowrap;
text-align: center;
border: 1px solid transparent;
cursor: pointer;
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-ms-touch-action: manipulation;
touch-action: manipulation;
}
/deep/ .user-layout-login button.login-button{
width:290vw/@vw;
height:80vw/@vw;
background:rgba(87,148,255,1);
border-radius:40vw/@vw;
font-size:36vw/@vw;
font-family:PingFang SC;
font-weight:bold;
color:rgba(255,255,255,1);
}
}
}
/*.user-layout-login {
margin-top: 20px;
label {
font-size: 14px;
}
.getCaptcha {
display: block;
width: 100%;
height: 40px;
}
.forge-password {
font-size: 14px;
}
button.login-button {
padding: 0 15px;
font-size: 16px;
height: 40px;
width: 100%;
}
.user-login-other {
text-align: left;
margin-top: 24px;
line-height: 22px;
.item-icon {
font-size: 24px;
color: rgba(0, 0, 0, .2);
margin-left: 16px;
vertical-align: middle;
cursor: pointer;
transition: color .3s;
&:hover {
color: #1890ff;
}
}
.register {
float: right;
}
}
}*/
</style>
<style>
.valid-error .ant-select-selection__placeholder {
color: #f5222d;
}
</style>
const path = require('path') const path = require('path')
function resolve(dir) { function resolve(dir) {
return path.join(__dirname, dir) return path.join(__dirname, dir)
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment