Commit 4c4f565e by 黄森林

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	package.json
#	yarn.lock
parents c4ed4b25 48f6dc20
...@@ -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
...@@ -3,16 +3,25 @@ const dev = { ...@@ -3,16 +3,25 @@ const dev = {
devServer: { devServer: {
port: 3000, port: 3000,
proxy: { proxy: {
'/api': { '/api/auth': {
target: 'http://132.97.20.38:18080', target: 'http://172.18.101.171:10001',
ws: false, ws: false,
changeOrigin: true, changeOrigin: true,
pathRewrite: { pathRewrite: {
//默认所有请求都加了api前缀,需要去掉 //默认所有请求都加了api前缀,需要去掉
'^/api': '/' '^/api/auth/ciop': '/auth/ciop'
}
} }
},
'/api/manager': {
target: 'http://172.18.101.171:10001',
ws: false,
changeOrigin: true,
pathRewrite: {
//默认所有请求都加了api前缀,需要去掉
'^/api/manager': '/manager'
}
}
} }
} }
} }
......
...@@ -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': {
...@@ -31,6 +31,26 @@ const local = { ...@@ -31,6 +31,26 @@ const local = {
//默认所有请求都加了api前缀,需要去掉 //默认所有请求都加了api前缀,需要去掉
'^/api/report': '/' '^/api/report': '/'
} }
},
'/api/app': {
target: 'http://localhost:11092',
//target: 'http://132.97.54.60:58334',
ws: false,
changeOrigin: true,
pathRewrite: {
//默认所有请求都加了api前缀,需要去掉
'^/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,8 +15,7 @@ ...@@ -15,8 +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",
"antd-mobile-vue": "^0.4.0",
"apexcharts": "^3.10.1", "apexcharts": "^3.10.1",
"axios": "^0.18.0", "axios": "^0.18.0",
"clipboard": "^2.0.4", "clipboard": "^2.0.4",
...@@ -24,11 +23,13 @@ ...@@ -24,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>
......
/**
* report的接口管理
*/
import {postAction,postFormAction} from '@/api/manage'
let prefix = 'app/ciop/'
let selectPackage = (params) => postAction(prefix +"packageUpgrade/selectPackage" , params);
let sendVerificationCode = (params) => postAction(prefix +"packageUpgrade/sendVerificationCode" , params);
export {
selectPackage,
sendVerificationCode
}
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);
...@@ -11,6 +11,18 @@ let modify = (params) => postAction(prefix + "/school/partner/update" , params); ...@@ -11,6 +11,18 @@ let modify = (params) => postAction(prefix + "/school/partner/update" , params);
// 编辑 // 编辑
let getlistysm = (params) => postAction(prefix + "/ysmUser/getlist" , params); let getlistysm = (params) => postAction(prefix + "/ysmUser/getlist" , params);
// 新增用户
let addPartner = (params) => postAction(prefix + "/school/partner/addPartner" , params);
// 获取县分下拉列表
let getSubstList = (params) => postAction(prefix + "/school/schoolManagement/substList" , params);
// 获取县分下拉列表
let getSchoolList = (params) => postAction(prefix + "/school/schoolManagement/schoolList" , params);
// 获取学子公司职位下级成员列表
let getXzUserList = (params) => postAction(prefix + "/school/partner/getXzUserList" , params);
export { export {
findByList,modify,getlistysm findByList,modify,getlistysm,addPartner,getSubstList,getSchoolList,getXzUserList
} }
import {postAction,getAotion} from '@/api/manage'
const prefix = '/manager/ciop';
// 获取活动列表
let getList = (params) => postAction(prefix + "/activity/list" , params);
//新增
let addActivity = (params) => postAction(prefix + "/activity/addActivity" , params);
// 编辑
let updateActivity = (params) => postAction(prefix + "/activity/updateActivity" , params);
//新增
let deleteActivity = (params) => postAction(prefix + "/activity/deleteActivity" , params);
export {
getList,addActivity,updateActivity,deleteActivity
}
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'
const prefix = '/manager/ciop/';
//订单
let orderList = (params) => postAction(prefix + "order/list" , 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 {
orderList,
download,
selectOrderHis,
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);
......
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
} }
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);
// 回显选择的套餐 // 回显选择的套餐findByList
let choosepages = (params) => postAction(prefix + "/school/schoolManagement/choosepages" , params); let choosepages = (params) => postAction(prefix + "/school/schoolManagement/choosepages" , params);
// 编辑 // 编辑
......
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);
......
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);
......
...@@ -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+"/mgr/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>
...@@ -249,4 +249,7 @@ ...@@ -249,4 +249,7 @@
.alert { .alert {
margin-bottom: 16px; margin-bottom: 16px;
} }
/*
*/
</style> </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">
...@@ -68,6 +60,12 @@ ...@@ -68,6 +60,12 @@
visible: false visible: false
} }
}, },
mounted() {
let timestamp = (new Date()).valueOf();
if((timestamp - this.$store.state.user.info.updateTime) > (24*60*60*1000*90)){
this.updatePassword()
}
},
methods: { methods: {
...mapActions(["Logout"]), ...mapActions(["Logout"]),
...mapGetters(["nickname", "avatar", "userInfo"]), ...mapGetters(["nickname", "avatar", "userInfo"]),
...@@ -79,10 +77,6 @@ ...@@ -79,10 +77,6 @@
// } // }
return url; return url;
}, },
//跳转
JumpPage() {
this.$router.push({path: '/gdtel-gztel-jyyy/system/feedback'})
},
handleLogout() { handleLogout() {
const that = this const that = this
......
...@@ -11,6 +11,13 @@ ...@@ -11,6 +11,13 @@
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form" class="addModel clearfix"> <a-form :form="form" class="addModel clearfix">
<a-form-item <a-form-item
v-show="tishi"
:labelCol="labelCol"
:wrapperCol="wrapperCol"
label="提示:">
<p style="color:red;">您的密码已90天未修改,请修改密码后重新登录</p>
</a-form-item>
<a-form-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="旧密码"> label="旧密码">
...@@ -53,17 +60,19 @@ ...@@ -53,17 +60,19 @@
</template> </template>
<script> <script>
import {registercode} from '@/api/system'
import { postAction } from '@/api/manage' import { postAction } from '@/api/manage'
import {mapActions} from 'vuex'
export default { export default {
name: "UserPassword", name: "UserPassword",
data () { data () {
return { return {
tishi:false,
countdown: 60,// 倒计时秒数 countdown: 60,// 倒计时秒数
codeMsg: '获取验证码', // 按钮上的文字 codeMsg: '获取验证码', // 按钮上的文字
timer: null,// 定时器 timer: null,// 定时器
title:"修改密码", title:"修改密码",
modalWidth:500, modalWidth:600,
visible: false, visible: false,
confirmLoading: false, confirmLoading: false,
verifiedCode: "", verifiedCode: "",
...@@ -107,6 +116,7 @@ ...@@ -107,6 +116,7 @@
} }
}, },
methods: { methods: {
...mapActions(["Logout"]),
getCode() { getCode() {
// 验证码60秒倒计时 // 验证码60秒倒计时
if (!this.timer) { if (!this.timer) {
...@@ -149,6 +159,10 @@ ...@@ -149,6 +159,10 @@
//return text; //return text;
}, },
show(uname){ show(uname){
let timestamp = (new Date()).valueOf();
if((timestamp - this.$store.state.user.info.updateTime) > (24*60*60*1000*90)){
this.tishi=true
}
if(!uname){ if(!uname){
this.$message.warning("当前系统无登陆用户!"); this.$message.warning("当前系统无登陆用户!");
return return
...@@ -159,7 +173,20 @@ ...@@ -159,7 +173,20 @@
} }
}, },
handleCancel () { handleCancel () {
if(this.tishi){
this.$message.warning("您的密码已90天未修改,请修改密码后重新登录!");
return this.Logout({}).then(() => {
window.location.href = "/";
//window.location.reload()
}).catch(err => {
this.$message.error({
title: '错误',
description: err.message
})
})
}else {
this.close() this.close()
}
}, },
close () { close () {
this.$emit('close'); this.$emit('close');
...@@ -184,12 +211,25 @@ ...@@ -184,12 +211,25 @@
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)=>{
if(res.code){ if(res.code!=200){
that.$message.error(res.message); that.$message.error(res.data);
that.close();
}else{ }else{
that.$message.success(res.message);
this.visible=false this.visible=false
that.close();
if(this.tishi){
return this.Logout({}).then(() => {
that.$message.success("修改成功,请重新登录!");
window.location.href = "/";
//window.location.reload()
}).catch(err => {
that.$message.error({
title: '错误',
description: err.message
})
})
}
that.$message.success(res.message);
} }
}).finally(() => { }).finally(() => {
that.confirmLoading = false; that.confirmLoading = false;
......
<template> <template>
<a-drawer title="版本信息" placement="right" :visible="visible" @close="close" :closable="false" :maskClosable="true" <a-drawer
width="300"> title="版本信息"
placement="right"
:visible="visible"
@close="close"
:closable="false"
:maskClosable="true"
width="300"
>
<a-card title="系统UI" size="small"> <a-card title="系统UI" size="small">
<p> <p>
<label>版本号:</label> <label>版本号:</label>
<span>0.0.59</span> <span>0.0.1</span>
</p> </p>
</a-card> </a-card>
</a-drawer> </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,8 @@ export const asyncRouterMap = [{ ...@@ -14,7 +14,8 @@ 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', path: 'register',
name: 'register', name: 'register',
...@@ -44,6 +45,41 @@ export const asyncRouterMap = [{ ...@@ -44,6 +45,41 @@ export const asyncRouterMap = [{
path: 'newPackageTips', path: 'newPackageTips',
name: 'newPackageTips', name: 'newPackageTips',
component: () => import('@views/hhr-view/newpackage/newPackageTips.vue') component: () => import('@views/hhr-view/newpackage/newPackageTips.vue')
},
{
path: 'newPackageTips',
name: 'newPackageTips',
component: () => import('@views/hhr-view/newpackage/newPackageTips.vue')
},
{
path: 'chooseCard',
name: 'chooseCard',
component: () => import('@views/hhr-view/newpackage/chooseCard.vue')
},
{
path: 'danKuan',
name: 'danKuan',
component: () => import('@views/hhr-view/bandwidth/danKuan.vue')
},
{
path: 'rongHe',
name: 'rongHe',
component: () => import('@views/hhr-view/bandwidth/rongHe.vue')
},
{
path: 'packageUpgrade',
name: 'packageUpgrade',
component: () => import('@views/hhr-view/packageUpgrade/packageUpgrade.vue')
},
{
path: 'readAgree',
name: 'readAgree',
component: () => import('@views/hhr-view/newpackage/readAgree.vue')
},
{
path: 'welfareScheme',
name: 'welfareScheme',
component: () => import('@views/hhr-view/packageUpgrade/welfareScheme.vue')
} }
] ]
} }
......
...@@ -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 {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -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>
<img src="/picture/hhr/banner.png" style="width: 100%">
<van-button type="info" style="width: 150px; height: 50px;margin: 10px 20px 10px 20px;">30元/月</van-button>
<van-row type="flex" justify="center">
<p style="width: auto; height: 40px;margin: 10px 10px 0px 10px;">面向学校:广州工商学院(花都校区)</p>
</van-row>
<div style=" background-image: url('./picture/hhr/info_logo_bg.png');
background-repeat: no-repeat;
background-size: 50%;
width: 85%;
height: 85%;
background-position: 70% 0%,right center;
Text-align:center;">
<div style="height:60px;Text-align:center;">资费介绍</div>
</div>
</div>
</template>
<script>
export default {
name: "danKuan"
}
</script>
<style scoped>
</style>
<template>
<div style=" background-image: url('./picture/hhr/01.jpg');
background-repeat: no-repeat;
background-size: 100%;
width: 100%;
height: 150%;">
<div style="height:60px"></div>
<div style="width: auto; height: 80px; background: white;">
<van-row type="flex" justify="center">
<span style="font-size: 28px;text-align: center;color: rgb(1,12,146);width: 80%;margin: auto">绑定29元新黑牛卡校园网提速到50M</span>
</van-row>
<van-divider :style="{ color: '#1989fa', borderColor: '#1989fa', padding: '0 16px' }" />
<van-row type="flex" justify="center">
<span style="font-size: 22px;padding-top: 10px;text-align: center;color: black;width: 80%;margin: auto">请填写以下有效消息</span>
</van-row>
<van-form validate-first @submit="onSubmit" @failed="onFailed">
<van-field v-model="phone" name="phone" label="手机号" :rules="phoneRules" />
<van-field
v-model="code"
center
clearable
label="验证码"
:rules="codeRules"
placeholder="请输入短信验证码"
>
<van-button slot="button" size="small" type="primary">发送验证码</van-button>
</van-field>
<div style=" width: 15.0rem;margin: 10px 20px 10px 70px;">
<span style="color: black;font-size: 14px;"><font style="color:red">注意:</font>
以上填写的手机号和身份证号必须要和办理校园网的本人一致,否则无法绑定进行提速。
</span>
</div>
<div>
<van-grid :column-num="1">
<van-row >
<van-col span="20" offset="2"> <div style="color: black;font-size: 17px;text-align: center;">未有电信号码请按以下按钮办理</div></van-col>
<van-col span="10" offset="8"> <div style="color: black;font-size: 17px;text-align: center;"><van-sticky :offset-top="50">
<van-button type="info">申请办理手机卡</van-button>
</van-sticky></div></van-col>
</van-row>
<van-row type="flex" justify="center">
<p style="color: red;font-size: 14px">请办理完手机卡后,重新访问此网页进行绑定,申请校园网提速。</p>
</van-row>
</van-grid>
</div>
<div style="margin: 16px;">
<van-button round block type="info" native-type="submit">
提交
</van-button>
</div>
</van-form>
</div>
</div>
</template>
<script>
import { Toast } from 'vant';
export default {
name:"rongHe",
data(){
this.phoneRules = [
{ required: true, message: '请输入手机号' },
{ validator: this.phoneValidator, message: '手机号格式错误' },
];
this.codeRules = [
{ required: true, message: '请输入验证码' },
{ validator: this.codeValidator, message: '验证码错误' },
];
return{
code: '',
phone: '',
}
}
,
methods: {
// 校验函数返回 true 表示校验通过,false 表示不通过
phoneValidator(val) {
return /1\d{10}/.test(val);
},
// 校验函数返回 Promise 来实现异步校验
codeValidator(val) {
return new Promise(resolve => {
Toast.loading('验证中...');
setTimeout(() => {
Toast.clear();
resolve(/\d{6}/.test(val));
}, 1000);
});
},
onSubmit(values) {
console.log('submit', values);
},
onFailed(errorInfo) {
console.log('failed', errorInfo);
},
},
}
</script>
<style scoped>
</style>
...@@ -3,17 +3,17 @@ ...@@ -3,17 +3,17 @@
background-repeat: no-repeat; background-repeat: no-repeat;
background-size: 100%; background-size: 100%;
width: 100%; width: 100%;
height: 150%;"> height: 150%; position:relative">
<img src="/picture/hhr/kefu.png" style="width: 10%;float: right;margin-top: 20px;margin-right: 20px" @click="showPopup"> <img src="/picture/hhr/kefu.png" style="width: 10%;position:fixed ;right: 15px;top: 15px" @click="showPopup">
<div style="height:40px"></div> <div style="height:40px"></div>
<div style="background-image: url('./picture/hhr/02.png');background-repeat: no-repeat;background-position: center;background-size: 100%;width: 77%;height: 280px;margin: auto;"> <div style="background-image: url('./picture/hhr/02.png');background-repeat: no-repeat;background-position: center;background-size: 100%;width: 77%;height: 280px;margin: auto;">
</div> </div>
<div v-show="!newcar"> <div v-show="newcarAll">
<div @click="newcartouch" style="background-image: url('./picture/hhr/03.png'); width: 256px; height: 64px;margin: 20px auto; background-repeat: no-repeat;background-size: 100%;"> <div @click="newcartouch" style="background-image: url('./picture/hhr/03.png'); width: 256px; height: 64px;margin: 20px auto; background-repeat: no-repeat;background-size: 100%;">
</div> </div>
<div style="text-align: center;color: white;font-size: 14px;margin-top: -20px">(新开卡优惠+0息分期购机)</div> <div style="text-align: center;color: white;font-size: 14px;margin-top: -20px">(新开卡优惠+0息分期购机)</div>
<div style="background-image: url('./picture/hhr/04.png'); width: 256px; height: 64px;margin: 20px auto; background-repeat: no-repeat;background-size: 100%;"></div> <div @click="packageUpgrade" style="background-image: url('./picture/hhr/04.png'); width: 256px; height: 64px;margin: 20px auto; background-repeat: no-repeat;background-size: 100%;"></div>
<div style="background-image: url('./picture/hhr/05.png'); width: 256px; height: 64px;margin: 20px auto; background-repeat: no-repeat;background-size: 100%;"></div> <div @click="newcartouchB" style="background-image: url('./picture/hhr/05.png'); width: 256px; height: 64px;margin: 20px auto; background-repeat: no-repeat;background-size: 100%;"></div>
<fieldset class="layui-elem-field" <fieldset class="layui-elem-field"
style="width: 85%;margin: 0 auto;border-radius: 10px;margin-bottom: 10px;background-color: rgba(255,255,255, 0.8);"> style="width: 85%;margin: 0 auto;border-radius: 10px;margin-bottom: 10px;background-color: rgba(255,255,255, 0.8);">
<legend style="text-align: center;background-color: white;border-radius: 10px;font-weight: bold;background-color: rgb(244,194,124);width: 50%;"> <legend style="text-align: center;background-color: white;border-radius: 10px;font-weight: bold;background-color: rgb(244,194,124);width: 50%;">
...@@ -30,14 +30,25 @@ ...@@ -30,14 +30,25 @@
</div> </div>
</fieldset> </fieldset>
</div> </div>
<div v-show="newcar"> <div v-show="newcar" >
<div style="background-image: url('./picture/hhr/06.png'); width: 256px; height: 64px;margin: 20px auto; background-repeat: no-repeat;background-size: 100%;" @click="newPackage"></div> <div style="background-image: url('./picture/hhr/06.png'); width: 256px; height: 64px;margin: 20px auto; background-repeat: no-repeat;background-size: 100%;" @click="newPackage"></div>
<div style="height: 250px"></div> <div style="height: 250px"></div>
</div> </div>
<van-popup v-model="kefushow"> <div v-show="newcarB">
<img src="/picture/hhr/service-qrcode.jpg" style="width:100%;height: 100%" > <div style="background-image: url('./picture/hhr/b1.png');width: 256px; height: 64px;margin: 20px auto; background-repeat: no-repeat;background-size: 100%;" @click="danKuan"></div>
<div style="background-image: url('./picture/hhr/b2.png');width: 256px; height: 64px;margin: 20px auto; background-repeat: no-repeat;background-size: 100%;" @click="rongHe"></div>
<div style="height: 250px"></div>
</div>
<div v-show="kefushow">
<van-popup v-model="kefushow" style="width: 90%;height: 45%; display: flex; align-items: center;justify-content: center;" >
<div style="border: 1px solid #e2e2e2;width: 92%;height: 90%;position: fixed;display: flex; align-items: center;justify-content: center;">
<div style="font-size: 20px; color: black;text-align: center;position: fixed;top: 3px">您的专属客服</div>
<img src="/picture/hhr/service-qrcode.jpg" style="width:55%;" >
</div>
</van-popup> </van-popup>
</div> </div>
</div>
</template> </template>
...@@ -47,7 +58,9 @@ ...@@ -47,7 +58,9 @@
name:"hhrCustomer", name:"hhrCustomer",
data(){ data(){
return{ return{
newcarAll:true,
newcar:false, newcar:false,
newcarB:false,
kefushow: false kefushow: false
} }
} }
...@@ -56,6 +69,11 @@ ...@@ -56,6 +69,11 @@
methods: { methods: {
newcartouch(){ newcartouch(){
this.newcar=true this.newcar=true
this.newcarAll=false
},
newcartouchB(){
this.newcarB=true
this.newcarAll=false
}, },
newcargoback(){ newcargoback(){
this.newcar=false this.newcar=false
...@@ -65,6 +83,15 @@ ...@@ -65,6 +83,15 @@
}, },
newPackage(){ newPackage(){
this.$router.push({path: 'newPackageTips'}) this.$router.push({path: 'newPackageTips'})
},
danKuan(){
this.$router.push({path: 'danKuan'})
},
rongHe(){
this.$router.push({path: 'rongHe'})
},
packageUpgrade(){
this.$router.push({path: 'packageUpgrade'})
} }
} }
} }
......
<template>
<div class="div-bg">
<div style="display: flex; ">
<img src="/picture/hhr/kefu.png" style="width: 10%;position:fixed ;right: 15px;top: 15px"
@click="showPopup">
</div>
<div class="div-pkg-card-top">
<div class="div-pkg-cards">
<div class="div-pkg-card">
<div class="div-pkg-fee">
<img src="/picture/hhr/pkg-fee-tag.png" height="36px" style="margin-top: -5px;">
<div class="div-pkg-fee-font">
10元/月
</div>
</div>
<img class="pkg-logo" src="/picture/hhr/xueshengzhenglog.png">
<div class="pkg-explain">10元/月</div>
<div class="div-pkg-btns">
<div id="btn-details"><a href="/gdtel-xyzx-hhr/customer/index.do?id=11519&amp;cardId=49">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
</div>
<div class="btns-split">&nbsp;</div>
<div id="btn-dopay"><a href="/gdtel-xyzx-hhr/customer/create.do?id=11519&amp;cardId=49">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
</div>
</div>
</div>
</div>
<div class="div-pkg-cards">
<div class="div-pkg-card">
<div class="div-pkg-fee">
<img src="/picture/hhr/pkg-fee-tag.png" height="36px" style="margin-top: -5px;">
<div class="div-pkg-fee-font">
28元/月
</div>
</div>
<img class="pkg-logo" src="/picture/hhr/heiniuka.png">
<div class="pkg-explain">30G国内+40G定向大流量</div>
<div class="div-pkg-btns">
<div id="btn-details"><a href="/gdtel-xyzx-hhr/customer/index.do?id=11519&amp;cardId=49">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
</div>
<div class="btns-split">&nbsp;</div>
<div id="btn-dopay"><a href="/gdtel-xyzx-hhr/customer/create.do?id=11519&amp;cardId=49">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
</div>
</div>
</div>
</div>
<div class="div-pkg-cards">
<div class="div-pkg-card">
<div class="div-pkg-fee">
<img src="/picture/hhr/pkg-fee-tag.png" height="36px" style="margin-top: -5px;">
<div class="div-pkg-fee-font">
28元/月
</div>
</div>
<img class="pkg-logo" src="/picture/hhr/heiniuka.png">
<div class="pkg-explain">30G国内+40G定向大流量</div>
<div class="div-pkg-btns">
<div id="btn-details"><a href="/gdtel-xyzx-hhr/customer/index.do?id=11519&amp;cardId=49">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
</div>
<div class="btns-split">&nbsp;</div>
<div id="btn-dopay"><a href="/gdtel-xyzx-hhr/customer/create.do?id=11519&amp;cardId=49">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
</div>
</div>
</div>
</div>
</div>
<div v-show="kefushow">
<van-popup v-model="kefushow" style="width: 90%;height: 45%; display: flex; align-items: center;justify-content: center;">
<div style="border: 1px solid #e2e2e2;width: 92%;height: 90%;position: fixed;display: flex; align-items: center;justify-content: center;">
<div style="font-size: 20px; color: black;text-align: center;position: fixed;top: 3px">您的专属客服</div>
<img src="/picture/hhr/service-qrcode.jpg" style="width:55%;" >
</div>
</van-popup>
</div>
</div>
</template>
<script>
export default {
name: "chooseCard",
data(){
return{
kefushow:false
}
},
methods:{
showPopup(){
this.kefushow=true
},
}
}
</script>
<style scoped>
.div-bg {
background-image: url(/picture/hhr/01.jpg);
background-repeat: no-repeat;
background-size: 100%;
width: 100%;
height: 100%;
border: 0;
overflow-y: scroll;
}
.div-pkg-cards {
position: relative;
margin-top: 20px;
margin-bottom: 20px;
}
#btn-dopay {
width: 49.5%;
float: right;
height: 100%;
text-align: center;
background-image: url(/picture/hhr/btn_choosecard_dopay.png);
background-size: 50%;
background-repeat: no-repeat;
background-position: center;
}
.btns-split {
width: 1px;
float: left;
background-color: rgb(110, 126, 190);
height: 100%;
}
#btn-details {
width: 49.5%;
float: left;
height: 100%;
text-align: center;
border-top: 1px;
background-image: url(/picture/hhr/btn_choosecard_details.png);
background-size: 50%;
background-repeat: no-repeat;
background-position: center;
}
.div-pkg-btns {
position: absolute;
width: 80%;
height: 50px;
line-height: 50px;
bottom: 0;
border-color: rgb(110, 126, 190);
border-style: solid;
border-top-width: 1px;
border-left-width: 0;
border-right-width: 0;
border-bottom-width: 0;
}
.pkg-explain {
float: left;
padding: 10px;
width: 60%;
font-size: 16px;
color: black;
}
.pkg-logo {
width: 128px;
max-height: 50px;
margin: 10px;
float: left;
}
.div-pkg-card-top {
margin-top: 20%;
}
.div-pkg-card {
width: 80%;
height: 180px;
margin: auto;
margin-top: 30px;
border-radius: 10px;
background-color: rgb(191, 220, 252);
box-shadow: #4962bd 10px 10px;
background-image: url(/picture/hhr/sim-bg.png);
background-repeat: no-repeat;
background-size: 90px;
background-position: 90% 50%;
}
.div-pkg-fee-font {
background-color: rgb(248, 204, 70);
display: inline-block;
line-height: 36px;
height: 100%;
font-size: 18px;
font-weight: bold;
color: black;
}
.div-pkg-fee {
float: right;
margin-top: 20px;
padding-right: 0;
height: 36px;
}
</style>
<template> <template>
<div> <div style="position:relative ">
<img src="/picture/hhr/adv_img.jpg" style="width: 100%"> <img src="/picture/hhr/adv_img.jpg" style="width: 100%; float: right">
<van-button type="info" :round="true" size="large">我要领卡</van-button> <img src="/picture/hhr/kefu.png" style="width: 10%;position:fixed ;right: 15px;top: 15px" @click="showPopup">
<div style="position:fixed ;bottom: 0px;width: 100%">
<van-button type="info" :round="true" size="large" @click="ordercar">我要领卡</van-button>
</div>
<div v-show="kefushow">
<van-popup v-model="kefushow" style="width: 90%;height: 45%; display: flex; align-items: center;justify-content: center;">
<div style="border: 1px solid #e2e2e2;width: 92%;height: 90%;position: fixed;display: flex; align-items: center;justify-content: center;">
<div style="font-size: 20px; color: black;text-align: center;position: fixed;top: 3px">您的专属客服</div>
<img src="/picture/hhr/service-qrcode.jpg" style="width:55%;" >
</div>
</van-popup>
</div>
</div> </div>
</template> </template>
<script> <script>
export default { export default {
name: "newPackageTips" name: "newPackageTips",
data(){
return{
kefushow:false
}
}
,
methods:{
showPopup(){
this.kefushow=true
},
ordercar(){
this.$router.push({path: 'chooseCard'})
}
}
} }
</script> </script>
......
<template>
<div style=" background-image: url('./picture/hhr/01.jpg');
background-repeat: no-repeat;
background-size: 100%;
width: 100%;
height: 150%; position:relative">
<div style="display: flex; ">
<img src="/picture/hhr/question.png" style="width: 10%;margin-left: 70%;margin-top: 5%">
<img src="/picture/hhr/kefu.png" style="width: 10%;margin-left: 5%;margin-top: 5%" @click="showPopup">
</div>
<div style="display: flex; ">
<p style="width: 20%;font-size: 13px;margin-left: 65%;">常见问题</p>
<p style="width: 20%;font-size: 13px;">联系客服</p>
</div>
<div style="width: 100%;background-color: white;line-height: 13px;font-size: 13px;">
<div style="padding-top: 5%;padding-left: 5%">
<div style="width: 15%;height: 80px;float: left; margin-right: 10px">
<img src="/picture/hhr/sim-bg.png" style="width: 100%;">
</div>
<p style="font-weight: 900" >天翼学生证</p>
<p style="font-weight: 900">10元/月</p>
<p style="color: red">适用于中小学生,号码卡将统一配送至学生</p>
<p style="color: red"> 所在学校,由学校发放给学生。</p>
</div>
<div style="border-top:1px solid #e2e2e2; margin-top: 35px">
<h2 style ="font-weight:900;font-size: 20px;margin-top: -10px;margin-left:10% " >
请填写有效信息
</h2>
</div>
<!-- 领卡表单部分-->
<div>
<van-cell-group>
<van-field left-icon="user-o" label="学生姓名" v-model="value" placeholder="请输入用户名" />
<van-field left-icon="location-o" label="学校" v-model="value" placeholder="请输入9月开学时就读的院校名称" />
<van-field
left-icon="location-o"
readonly
clickable
name="area"
:value="value"
label="学校所在地区"
placeholder="点击选择省市区"
@click="showArea = true"
/>
<van-popup v-model="showArea" position="bottom">
<van-area
:area-list="areaList"
@confirm="onConfirm"
@cancel="showArea = false"
/>
</van-popup>
<van-field left-icon="contact" label="班级" v-model="value" placeholder="请输入学生所属班级" />
<van-field left-icon="contact" label="学号" v-model="value" placeholder="请输入学生学号" />
<van-field left-icon="friends-o" label="家长名称" v-model="value" placeholder="请输入家长名称" />
<van-field left-icon="phone-o" label="家长联系号码" v-model="value" placeholder="请输入家长联系号码" />
<van-field left-icon="other-pay" label="家长身份证" v-model="value" placeholder="请输入家长身份证" />
<van-field left-icon="records" label="备注" v-model="value" placeholder="请输入备注" />
</van-cell-group>
</div>
<div style="line-height: 20px;margin-left:10%;margin-top: 3%;width: 90%">
<h2 style ="font-weight:900;font-size: 20px;">请家长持本人以下证件拍照上传,16岁以上学生可学生本人拍照上传</h2>
</div>
<p style="color: red;width: 95%;margin: auto;line-height: 18px">根据工信部令第25号规定,用户预受理电信业务需上传身份证国徽照、人像照、半身照三张照片。系统需对您上传的三张照片进行身份证资料核验,成功提交后系统会自动给您发送短信,您可通过短信中的链接查询审核状态,请您耐心等待系统核验结果,谢谢。</p>
<van-grid :border="false" :column-num="3">
<van-grid-item @click="tips(1)">
<div v-show="uploadFileshow.zmian">
<img id='img_imgfilezmian' style="width: 80%">
</div>
<div v-show="!uploadFileshow.zmian">
<van-image src="/picture/hhr/upload01.png" />
</div>
</van-grid-item >
<van-grid-item @click="tips(2)">
<div v-show="uploadFileshow.fmina">
<img id='img_imgfilefmina' style="width: 80%">
</div>
<div v-show="!uploadFileshow.fmina">
<van-image src="/picture/hhr/upload02.png" />
</div>
</van-grid-item >
<van-grid-item @click="tips(3)">
<div v-show="uploadFileshow.txiang">
<img id='img_imgfiletxiang' style="width: 80%">
</div>
<div v-show="!uploadFileshow.txiang">
<van-image src="/picture/hhr/upload03.png" />
</div>
</van-grid-item>
</van-grid>
<div style="height: 130px" >
</div>
</div>
<!-- 领卡确认部分-->
<div style="background-color:white;position: fixed;bottom: 0%;width: 100%">
<div style="margin-left: 8%;font-size: 16px;text-align:left">
<span>
<div style="width: 100%;display: flex;padding-top: 2%">
<van-checkbox v-model="Agree" shape="square" style="width: 13%" checked-color="#07c160">
</van-checkbox>
<span >同意 <a @click="readagreeurl">《中国电信股份有限公司广州分公司全业务服务协议》 </a>内容</span>
</div>
</span>
</div>
<div style="width: 80%;margin-left: 10%;margin-top: 5%;margin-bottom: 2%">
<van-button :round="true" size="large" type="info">马上领卡</van-button>
</div>
</div>
<van-popup v-model="kefushow" style="width: 90%;height: 45%; display: flex; align-items: center;justify-content: center;">
<div style="border: 1px solid #e2e2e2;width: 92%;height: 90%;position: fixed;display: flex; align-items: center;justify-content: center;">
<div style="font-size: 20px; color: black;text-align: center;position: fixed;top: 3px">您的专属客服</div>
<img src="/picture/hhr/service-qrcode.jpg" style="width:55%;" >
</div>
</van-popup>
<div>
<van-dialog v-model="sfzshow.zmian" :before-close="closeOnClickOverlay1" :closeOnClickOverlay="true" >
<h2 style="font-weight: 900;text-align: center;margin-top: 5%">证件上传示例</h2>
<img src="/picture/hhr/backidcard.jpg" style="width: 100%">
<p style="text-align: center;">注意照片亮度均匀、图像清晰</p>
</van-dialog>
</div>
<div>
<van-dialog v-model="sfzshow.fmina" :before-close="closeOnClickOverlay1" :closeOnClickOverlay="true">
<h2 style="font-weight: 900;text-align: center;margin-top: 5%">证件上传示例</h2>
<img src="/picture/hhr/backidcard.jpg" style="width: 100%">
<p style="text-align: center;">注意照片亮度均匀、图像清晰</p>
</van-dialog>
</div>
<div>
<van-dialog v-model="sfzshow.txiang" :before-close="closeOnClickOverlay1" :closeOnClickOverlay="true">
<h2 style="font-weight: 900;text-align: center;margin-top: 5%">拍摄正面自拍照</h2>
<p style="color: red;width: 80%;text-align: center;margin-left: 10%">(请打开摄像头拍摄自拍照上传,不要上传证件照)</p>
<img src="/picture/hhr/hand_idcard.png" style="width: 100%">
<p style="text-align: center;">请在光线较好的环境下拍摄,并露出人像五官,面部无遮挡。</p>
</van-dialog>
</div>
<div v-show="false"><van-uploader id="upload_file" :after-read="afterRead" /> </div>
</div>
</template>
<script>
import area from "../../../utils/area";
import { Dialog } from 'vant';
export default {
name: "orderNewCar",
data(){
return{
Agree: false,
kefushow:false,
list:[1,2],
value: '',
showArea: false,
areaList: area, // 数据格式见 Area 组件文档
fileList: [
{ url: 'https://img.yzcdn.cn/vant/leaf.jpg' },
// Uploader 根据文件后缀来判断是否为图片文件
// 如果图片 URL 中不包含类型信息,可以添加 isImage 标记来声明
{ url: 'https://cloud-image', isImage: true }
],
sfzshow:{
zmian:false,
fmina:false,
txiang:false
},
uploadFileshow:{
zmian:false,
fmina:false,
txiang:false
},
uploadstatu:0
}
}
,
methods:{
readagreeurl(){
this.$router.push({path: 'readAgree'})
},
// 选择文件
afterRead(file) {
let imgurl="img_imgfile"
if (this.uploadstatu==1){
this.uploadFileshow.zmian = true
imgurl=imgurl+'zmian'
}
if (this.uploadstatu==2){
this.uploadFileshow.fmina= true
imgurl=imgurl+'fmina'
}
if (this.uploadstatu==3){
this.uploadFileshow.txiang = true
imgurl=imgurl+'txiang'
}
var img = document.getElementById(imgurl);
var reader = new FileReader();
reader.onload = function (evt) {
img.src = evt.target.result;
}
reader.readAsDataURL(file.file);
},
showPopup(){
this.kefushow=true
}
,onConfirm(values) {
this.value = values.map(item => item.name).join('/');
this.showArea = false;
},
tips(val){
if (val==1){
this.sfzshow.zmian=true
this.uploadstatu=1
}if (val==2){
this.sfzshow.fmina=true
this.uploadstatu=2
}
if (val==3){
this.sfzshow.txiang=true
this.uploadstatu=3
}
},
closeOnClickOverlay1(val,done){
for (let keyName in this.sfzshow) {
if (this.sfzshow[keyName] == true) {
this.sfzshow[keyName] = false
break
}
}
if (val=='confirm'){
done();
document.getElementById("upload_file").click();
}
}
}
}
</script>
<style scoped>
</style>
<template>
<body>
<div><h1 style=":15pt; margin:0pt; text-align:center"><span
style="background-color:#ffffff; color:#666666; font-family:等线; font-size:15pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">(中国电信股份有限公司广州分公司)</span>
</h1>
<h2 style=":16pt; margin:0pt; text-align:center"><span
style="background-color:#ffffff; color:#666666; font-family:方正黑体_GBK; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">业务服务协议</span>
</h2>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">为维护双方权益,根据相关法律、法规的规定,在平等、自愿、公平、诚实信用的基础上,客户与中国电信股份有限公司广州分公司(以下简称</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">“电信公司”)就电信业务服务的相关事宜达成</span>
</p>
<p style=":12.6pt; margin:0pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">如下协议:</span>
</p>
<h3 style=":36pt; margin:0pt; text-align:center; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">第一条</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">服务范围</span>
</h3>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">1.1电信公司在其通信网络与设施覆盖范围内向客户提供其所选择的电信业务服务,客户按照本协议约定的条件接受服务。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">1.2电信公司在国家核准范围内经营通信业务及其他相关业务,并根据不同业务性质制定相关业务条款与业务规则,客户自愿申请开通电信公司提供的业务并经电信公司受理确认后,双方均受相关业务条款及业务规则的约束。</span>
</p>
<h3 style=":36pt; margin:0pt; text-align:center; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">第二条</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">业务登记</span>
</h3>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">2.1客户进行业务登记时,应提交以下资料:</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">2.1.1个人客户:提供真实有效的本人身份证件原件。委托他人办理业务的,代办人应同时提供委托人、代办人的有效身份证件原件;代办人在此种情况应对代办事务承担连带责任。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">2.1.2单位客户:提供真实有效的本单位注册登记证照资料(复印件应加盖单位公章),并提供经办人有效身份证件原件。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">2.1.3电信公司合理要求的其他有效资料。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">2.2客户使用客户密码通过10000号客户服务热线、网上营业厅、自助服务终端等办理业务时,可以不提供第2·1条中的资料,另有约定除外。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">2.3客户户籍所在地或注册登记地不在本地的,客户应按电信公司要求办理相应担保手续,或者持有效证件办理预付费方式的业务。</span>
</p>
<h3 style=":36pt; margin:0pt; text-align:center; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">第三条</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">客户资料</span>
</h3>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">3.1客户登记办理业务时,应向电信公司提供真实、有效的客户资料,本协议有效期内客户资料变更时应及时按电信公司业务流程规定通知电信公司。若客户提供的资料不真实或无效,则电信公司有权立即终止服务,并解除本协议及根据此类客户资料签订的其他业务协议。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">3.2电信公司对客户资料依法保密,但为建立与客户沟通渠道、改善服务工作、推介业务等,电信公司可以适当使用本协议涉及的客户资料。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">3.3客户密码是客户依据电信公司相关规则设定并用于在10000、营业厅和网上营业厅等渠道办理相关业务的身份确认凭证,凡使用客户密码定制、变更电信业务的行为均被视为客户或客户授权的行为。客户密码是客户的重要资料,客户应及时修改初始密码,并注意保密。客户密码遗失或被盗时,应及时进行修改或挂失。因客户原因造成的客户密码丢失或被他人获取造成的损失,由客户自行承。</span>
</p>
<h3 style=":36pt; margin:0pt; text-align:center; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">第四条</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">业务使用</span>
</h3>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">4.1客户有权自主选择使用电信公司提供的各类电信业务,有权自主选择取得入网许可、与所选择的电信业务相匹配的客户端设备。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">4.2客户使用电信业务时,应遵守国家法律、法规、规章等相关规定。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">4.3未经电信公司同意并办理有关手续,客户将本协议的全部或部分转让给第三方的,对电信公司不发生法律效力。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">4.4本协议终止后,电信公司有权收回客户原使用的业务号码,并在一定期限后分配给其他客户使用。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">4.5客户可自愿订购或退订第三方通过电信公司的通信服务网络平台提供的增值电信应用服务(包括但不限于信息服务)。若客户通过电信公司网络平台定制、收发第三方提供的增值电信应用服务,客户同意电信公司根据该第三方的授权,向客户代收信息费等服务费用。若客户对收取的服务费用有异议,电信公司可协助客户与该第三方协商解决。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">4.6电信公司适时公布客户</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">消费积分及使用业务规则,客户可根据当时业务规则规定享受积分服务和差异化服务。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">4.7电信公司提供客户租用的通信终端设备所有权归电信公司,电信公司提供与业务使用期一致的维护保修服务,客户在使用期间应妥善保护,如有人为损坏,须承担赔偿责任。客户在办理终端设备换装业务或注销所有与该设备相关业务时,应向电信公司归还原终端设备,如归还的终端设备配件不齐全、损坏或不能正常使用,需按相应终端设备的成本价支付违约金。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">4.8山于通信技术特点,通信终端设备在电力中断时无法运行,客户需提供电源保证设备正常使用,以便电信公司提供电话、宽带等相应通信服务。</span>
</p>
<h3 style=":36pt; margin:0pt; text-align:center; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">第五条</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">费用标准和费用交纳</span>
</h3>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">5.1电信公司按照依法确定的资费标准向客户收取电信费用,客户应按约定方式按时、足额支付各项电信费用。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">5.2客户接受服务所产生的各项电信费用由电信公司获入网许可的计费系统实时记录,并作为双方资费结算的依据。话费及相关通信服务费以人民币结算。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">5.3根据选择的电信业务种类,客户按预付费或后付费方式支付电信费用。除特殊约定外,后付费方式下客户按月支付电信费用,计费周期为一个月,根据客户办理入网的情况约定每个计费周期起算时间,具体的计费周期以客户确认的业务受理登记单为准;在当个计费周期内发生的通话、信息、数据通信及其他服务和代收费服务,如因结算时间的延误,未能在当个计费周期内结算的,将顺延到之后的计费周期中结算;计费周期起算之后第5日起的一个月内支付上一计费周期的费用。预付费方式下客户需预存金额,当账户余额不足以支付客户拟使用业务的电信费用时,需及时充值方可使用。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">5.4电信公司可根据客户的电话消费情况约定其话费信用额度,并由电信公司在客户办理电话入网手续时明示或另行告知,客户累计未付的通信费用达到或超出信用额度时,应及时通过付费卡充值、现金交纳或银行划扣分次结算等方式支付通信费用,否则电信公司有权暂停服务(不受约定缴费期限的限制)。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">5.5客户如选择或终止银行托收、银行代扣等方式支付电信费用时,需到银行等托收机构或电信公司营业厅办理相应手续,并将视为电信公司取得客户的合法授权,委托开户银行从客户登记的单位账户或个人银行结算账户(含卡类账户)内以自动转账方式支付客户在电信公司消费的电信费用。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">5.6客户逾期不交纳电信费用的,电信公司有权要求补交,并可以按照所欠费用每日加收3‰的违约金。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">5.7客户在欠费情况下,应补交欠费和相应的违约金后才能办理其它业务。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">5.8如遇国家或电信公司统一调整费用标准的,自国家或电信公司规定的调整时间起按新标准执行。</span>
</p>
<h3 style=":36pt; margin:0pt; text-align:center; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">第六条</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">服务质量与客户服务</span>
</h3>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">6.1电信公司在承诺的网络覆盖范围内,按照国家规定的标准和服务规范向客户提供服务。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">6.2电信公司在营业场所公布电信业务的服务项目、服务时限、服务范围、资费标准、使用规则、交费规定等内容。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">6.3电信公司通过10000号客户服务热线、营业厅、网上营业厅等多种渠道提供业务受理、咨询、查询、障碍申告等服务。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">6.4电信公司负责其提供的网络的安装调测和维护,客户负责自带入网终端设备的安装、调测和维护。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">6.5电信公司在本协议外以公告等书面形式公开做出的服务承诺,自动成为本协议的组成部分,但为客户设定义务或不合理地加重责任的除外。</span>
</p>
<h3 style=":36pt; margin:0pt; text-align:center; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">第七条</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">协议中止和解除</span>
</h3>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">7.1除另有约定外,客户在清偿所有电信费用及相应的违约金后,可以办理业务暂停、注销或过户手续。业务暂停期间需支付有关费用,业务注销、过户后本协议相应解除。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">7.2客户有下列情形之一的,电信公司可以暂停向客户提供本协议约定的部分或全部服务,并收取暂停期间发生的费用:不具备相应法定资格或条件的;提供客户资料不真实或无效的;客户所提供或接入的设备未取得入网许可,或可能影响网络安全或网络服务质量的;未办理相关手续,自行改变电信业务使用性质的;除法律另有规定外,对于后付费业务,未按期足额交纳电信费用的;对于预付费业务,帐户余额低于0元,或超过约定有效期的;以及法律法规规定或电信公司依法确定的、可以暂停服务的其他情形。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">7.3客户有下列情形之一的,电信公司可以终止服务并终止本协议:以担保等方式取得使用权的客户,违反保证条款或有确切证据证明担保人无能力履行保证义务的;擅自利用电信业务非法进行电信业务经营的;移动业务超过收费约定期限30日仍不交纳电信费用的;使用充值卡拨打的固定电话连续超过90日零话务的;新装电信业务超过收费约定期限90日的;客户对需外线施工的电信业务提出暂缓装机超过60日的;其他电信业务出现7.2所述情形,暂停服务超过60日的;以及法律法规规定或电信公司依法确定的、可以终止服务的其他情形。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">7.4客户在电信业务使用过程中如有违反相关法律、法规、规章规定的行为,或按政府管理部门提出相应要求的,电信公司将暂停或终止提供电信服务。</span>
</p>
<h3 style=":36pt; margin:0pt; text-align:center; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">第八条</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">不可抗力及免责</span>
</h3>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">8.1如由于战争、骚乱、恐怖主义、自然灾害、罢工、政府行为、国家法律法规或规章变动、网络安全、网络无法覆盖、停电、通信线路被人为破坏,导致本协议无法继续履行的,受影响方无须承担违约责任,但应尽快通知对方。</span>
</p>
<h3 style=":36pt; margin:0pt; text-align:center; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">第九条</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">争议解决</span>
</h3>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">9.1凡因本合同引起的或与本合同有关的任何争议,双方应协商解决,协商不成的,任何一方可采用以下第()种方式来解决争议:</span>
</p>
<p style=":12.6pt; margin:0pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">(1)提请广州仲裁委员会按照仲裁规则进行仲裁;</span>
</p>
<p style=":12.6pt; margin:0pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">(2)</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-decoration:underline; text-transform:none; vertical-align:baseline">&#xa0;</span>
</p>
<h3 style=":36pt; margin:0pt; text-align:center; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">第十条</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">&#xa0;</span><span
style="background-color:#ffffff; color:#666666; font-family:微软雅黑; font-size:16pt; font-style:normal; font-weight:bold; text-transform:none; vertical-align:baseline">附则</span>
</h3>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">10.1业务登记单、补充协议为本协议的组成部分。业务登记单或补充协议内容与本协议内容冲突时,以业务登记单或补充协议为准;当业务登记单与补充协议内容冲突时,以最新签署的内容为准。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">10.2电信公司保留因技术进步或国家政策变动等原因对电信业务的服务功能、操作方法、业务号码等做出调整的权利,但调整时应提前告知客户并提供相应解决方案。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">10.3客户新增、变更服务项目时,新填写的业务登记单为本协议之补充协议,新登记单未明确事项适用本协议相关约定。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">10.4除本协议另有约定外,一方对因本协议项下违约行为而导致的另一方可得利益损失、商业信誉损失以及数据丢失等损失不承担责任。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">10.5电信公司可以采用电话、广播、短信、电视、公开张贴、信函、报纸或互联网等方式进行业务公告及业务通知。</span>
</p>
<p style=":12.6pt; margin:0pt; text-indent:21pt"><span
style="background-color:#ffffff; color:#666666; font-family:宋体-简; font-size:12pt; font-style:normal; text-transform:none; vertical-align:baseline">10.6本协议自双方在业务登记单上签字或盖章之日起生效。</span>
</p>
<p style="font-size:10.5pt; :115%; margin:0pt 0pt 10pt; orphans:0; text-align:justify; widows:0">
<span style="font-family:Calibri; font-size:10.5pt">&#xa0;</span></p></div>
<div style="width: 100%;position: fixed;bottom: 0%;background-color: white" @click="agreefun">
<van-button :round="true" size="large" type="info">同意</van-button>
</div>
<div class="cnzz" style="display: none;">
</div>
</body>
</template>
<script>
export default {
name: "readAgree",
methods:{
agreefun(){
this.$router.push({path: 'orderNewCar'})
}
}
}
</script>
<template>
<div style="position:relative ">
<img src="/picture/hhr/yrym-ruanyan-adv-bg.jpg" style="width: 100%; float: right">
<img src="/picture/hhr/kefu.png" style="width: 10%;position:fixed ;right: 15px;top: 15px" @click="showPopup">
<div style="font-size: 28px;text-align: center;background: white;position:fixed ;bottom: 0px;width: 100%" class="van-hairline--surround">
<div v-show="inQuery">
<van-button loading type="info" loading-text="查询中..." />
</div>
<div style="width: 90%;margin-left: 5%">
<van-cell-group >
<van-field v-model="value" placeholder="身份证/手机号/宽带账号"/>
</van-cell-group>
</div>
<div style="width: 90%;margin-left: 5%">
<van-button round block type="info" native-type="submit" @click="selectPackage">优惠查询</van-button>
</div>
</div>
<div v-show="kefushow">
<van-popup v-model="kefushow"
style="width: 90%;height: 45%; display: flex; align-items: center;justify-content: center;">
<div style="border: 1px solid #e2e2e2;width: 92%;height: 90%;position: fixed;display: flex; align-items: center;justify-content: center;">
<div style="font-size: 20px; color: black;text-align: center;position: fixed;top: 3px">您的专属客服</div>
<img src="/picture/hhr/service-qrcode.jpg" style="width:55%;">
</div>
</van-popup>
</div>
<div v-show="show">
<van-popup v-model="show" style="width: 70%;height: 16%; display: flex; align-items: center;justify-content: center;">
<div style=" background-image: url('./picture/hhr/div-tips-dialog.png');
background-repeat: no-repeat;
background-size: 100%;
width: 100%;
height: 100%;font-size: 22px;padding-top: 10px;text-align: center;">
<span style="">一大波优惠正在赶来中!<br> 敬请期待!</span>
</div>
</van-popup>
</div>
<div v-show="duanxing" >
<van-popup v-model="duanxing"
style="width: 80%;height: 30%; display: flex; align-items: center;justify-content: center;">
<div>
<div style="font-size: 20px; color: black;text-align: center;position: fixed;top: 3px;margin: 0px 0px 20px 0px;">{{phone}}</div>
<div style="margin: 50px 0px 0px 0px;width: 90%;margin-left: 5%">
<van-field
center
clearable
placeholder="请输入短信验证码"
style="width: 100%;height: 30%;"
v-model="yanzhengma"
>
<van-button slot="button" size="small" type="info"
@click.stop.prevent="getCode"
>{{codeMsg}}
</van-button>
</van-field>
<div v-show="prompt" style="color:red;font-size: 20px; color: red;text-align: center;">
验证码有误
</div>
<van-button round block type="info" native-type="submit" @click="welfareScheme">
确认
</van-button>
</div>
</div>
</van-popup>
</div>
</div>
</template>
<script>
import {selectPackage,sendVerificationCode} from "@/api/app/package"
import Vue from 'vue';
import {Field} from 'vant';
export default {
name: "packageUpgrade",
data() {
return {
inQuery:false,
prompt:false,
value: '',
countdown: 0,// 倒计时秒数
codeMsg: '获取验证码', // 按钮上的文字
timer: null,// 定时器
labelCol: {
xs: { span: 24 },
sm: { span: 5 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 10 },
},
yanzhengma: '',
phone: '',
kefushow: false,
show: false,
duanxing: false
};
},
methods: {
getCode() {
let selectOrder = this.value;
// 验证码60秒倒计时
if (!this.timer) {
sendVerificationCode({selectOrder}).then(res => {
if (res.state == 'error'){
console.log()
}else {
console.log()
}
})
//初始化倒计时
this.countdown=60;
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 = 0;
this.timer = null;
}
}
}, 1000)
}
},
selectPackage() {
this.kefushow=false;
if (this.value == "") {
return;
} else {
this.inQuery=true
let selectOrder = this.value;
if(this.countdown!=0){
this.inQuery=false
this.duanxing = true;
}else {
sendVerificationCode({selectOrder}).then(res => {
this.inQuery=false
if (res.state == 'error'){
this.show=true;
}else {
this.duanxing = true;
this.phone=res.data
//初始化倒计时
this.countdown=60;
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 = 0;
this.timer = null;
}
}
}, 1000)
}
})}
}
},
showPopup() {
if(this.kefushow == true){
this.kefushow = false
}else {
this.kefushow = true
}
},
welfareScheme(){
if(this.yanzhengma==''){
return;
}
let selectOrder = this.value;
let verificationCode = this.yanzhengma
selectPackage({selectOrder,verificationCode}).then(res => {
if (res.state == 'error'){
this.prompt=true;
}else {
this.$router.push({
path: 'welfareScheme',
})
}
})
}
}
}
</script>
<style scoped>
</style>
<template>
<div style="background-image: url('./picture/hhr/01.jpg');
background-repeat: no-repeat;
background-size: 100%;
width: 100%;
height: 150%; position:relative">
<div style="height:70px"></div>
<img src="/picture/hhr/kefu.png" style="width: 10%;position:fixed ;right: 15px;top: 15px" @click="showPopup">
<div style="background: white;" >
<div style="padding-top:20px">
<van-divider :style="{ borderColor: '#1989fa', padding: '0 16px' }">
<div style="font-size: 22px"> 福利方案</div>
</van-divider>
</div>
<div style="text-align: center;height:100%;margin: 10px 10px 10px 10px;background-color: rgba(128, 128, 128, 0.09);background:#adadad">
<div style=" border-bottom:2px solid green;font-size: 22px">
<van-row>
<van-col span="8"></van-col>
<van-col span="8">原套餐<br>(daiding)</van-col>
<van-col span="8">新套餐<br>(daiding)</van-col>
</van-row>
</div>
<div style=" border-bottom:2px solid green;font-size: 22px">
<van-row>
<van-col span="8">月租</van-col>
<van-col span="8">{{package}}</van-col>
<van-col span="8">(daiding)</van-col>
</van-row>
</div>
<div style=" border-bottom:2px solid green;font-size: 22px">
<van-row>
<van-col span="8">套餐</van-col>
<van-col span="8">(daiding)</van-col>
<van-col span="8">(daiding)</van-col>
</van-row>
</div>
<div style=" border-bottom:2px solid green;font-size: 22px">
<van-row>
<van-col span="8">语音</van-col>
<van-col span="8">(daiding)</van-col>
<van-col span="8">(daiding)</van-col>
</van-row>
</div>
<div style=" border-bottom:2px solid green;font-size: 22px">
<div style="margin: 10px 10px 10px 10px;">
<van-checkbox v-model="checked" shape="square">复选框</van-checkbox>
</div>
</div>
</div>
</div>
<div style="font-size: 28px;text-align: center;background: white;position:fixed ;bottom: 0px;width: 100%" class="van-hairline--surround">
<div style="width: 90%;margin-left: 5%;margin: 20px 5% 20px 5%;">
<van-button round block type="info" native-type="submit" @click="selectPackage">马上办理</van-button>
</div>
</div>
<div v-show="kefushow">
<van-popup v-model="kefushow"
style="width: 90%;height: 45%; display: flex; align-items: center;justify-content: center;">
<div style="border: 1px solid #e2e2e2;width: 92%;height: 90%;position: fixed;display: flex; align-items: center;justify-content: center;">
<div style="font-size: 20px; color: black;text-align: center;position: fixed;top: 3px">您的专属客服</div>
<img src="/picture/hhr/service-qrcode.jpg" style="width:55%;">
</div>
</van-popup>
</div>
</div>
</template>
<script>
import {selectPackage,sendVerificationCode} from "@/api/app/package"
import Vue from 'vue';
import {Field} from 'vant';
export default {
name: "packageUpgrade",
package:'',
data() {
return {
phone: '',
kefushow: false,
};
},
methods: {
selectPackage() {
},
showPopup() {
if(this.kefushow == true){
this.kefushow = false
}else {
this.kefushow = true
}
},
}
}
</script>
<style scoped>
</style>
<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>
...@@ -23,13 +23,14 @@ ...@@ -23,13 +23,14 @@
<span class="table-page-search-submitButtons" style="float: left; overflow: hidden;"> <span class="table-page-search-submitButtons" style="float: left; overflow: hidden;">
<a-col :md="6" :sm="24"> <a-col :md="6" :sm="24">
<a-button @click="search()" type="primary">查询</a-button> <a-button @click="search()" type="primary">查询</a-button>
<a-button @click="openAddUser()" style="margin-left: 8px" icon="plus" type="primary">新增</a-button>
</a-col> </a-col>
</span> </span>
</a-row> </a-row>
</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>
...@@ -39,35 +40,163 @@ ...@@ -39,35 +40,163 @@
</template> </template>
</s-table> </s-table>
<!--新增用户--弹框-->
<a-modal :title="titleName" :visible="addUser" @ok="createOk" @cancel="createCancel" html-type="submit" width="720px">
<a-form :form="addFormtable" autocomplete="off">
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="账号" >
<a-input placeholder="请输入账号" v-decorator="[ 'account', {rules: [{ required: true, message: '账号不能为空!' ,whitespace:true}]} ]"></a-input>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="电话" >
<a-input placeholder="请输入电话" v-decorator="[ 'phone', {rules: [{ required: true, message: '电话不能为空!' ,whitespace:true}]} ]"></a-input>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="姓名" >
<a-input placeholder="请输入姓名" v-decorator="[ 'name', {rules: [{ required: true, message: '姓名不能为空!' ,whitespace:true}]} ]"></a-input>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="身份证号" >
<a-input placeholder="请输入身份证号" v-decorator="[ 'idCard', {rules: [{ required: true, message: '身份证号不能为空!' ,whitespace:true}]} ]"></a-input>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="性别">
<a-select placeholder="请选择" v-decorator="[ 'sex', {rules: [{ required: true, message: '性别不能为空!' ,whitespace:true}]} ]">
<a-select-option key="">请选择</a-select-option>
<a-select-option key="1"></a-select-option>
<a-select-option key="2"></a-select-option>
</a-select>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="年级">
<a-select placeholder="请选择" v-decorator="[ 'grade', {rules: [{ required: true, message: '年级不能为空!' ,whitespace:true}]} ]">
<a-select-option key="">请选择</a-select-option>
<a-select-option key="20级">20级</a-select-option>
<a-select-option key="19级">19级</a-select-option>
<a-select-option key="18级">18级</a-select-option>
<a-select-option key="17级">17级</a-select-option>
<a-select-option key="16级">16级</a-select-option>
</a-select>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="密码">
<a-input placeholder="请输入密码" type="password" v-decorator="[ 'password', {rules: [{ required: true, message: '密码不能为空!' ,whitespace:true}]} ]"></a-input>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="重复密码">
<a-input placeholder="请再次输入密码" type="password" v-decorator="[ 'repassword', {rules: [{ required: true, message: '重复密码不能为空!' ,whitespace:true}]} ]"></a-input>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="县分">
<a-select placeholder="请选择" @change="changeSubst(1)" v-model="addForm.subName" >
<a-select-option key="">请选择</a-select-option>
<a-select-option v-for="data in subNameList" :value="data">
{{ data}}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="学校名称">
<a-select placeholder="请选择" v-decorator="[ 'schoolId', {rules: [{ required: true, type: 'number',message: '学校不能为空!' ,whitespace:true}]} ]">
<a-select-option key="">请选择</a-select-option>
<a-select-option v-for="data in schoolList" :value="data.id">
{{ data.school_name}}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="学子公司职位">
<a-select placeholder="请选择" v-model="addForm.position" @change="changePosition(1)">
<a-select-option key="">非学子公司成员</a-select-option>
<a-select-option key="督导">督导</a-select-option>
<a-select-option key="楼长">楼长</a-select-option>
<a-select-option key="成员">成员</a-select-option>
</a-select>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :style="leaderDisplay" :wrapperCol="{span: 8, offset: 1}" label="学子公司上级">
<a-select placeholder="请选择" v-decorator="[ 'parentId', {rules: [{ required: false, message: '学子公司上级不能为空!' ,whitespace:true}]} ]">
<a-select-option key="">请选择</a-select-option>
<a-select-option v-for="data in xzUserList" :value="data.id">
{{ data.name}}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="角色" >
<!-- <a-input placeholder="请输入部门" v-model="modelData.content" @click="handelDepartment"></a-input> -->
<treecheck ref="tree1" @selectcheck="contentSelectCheck1" :treeCheckable="true" :createFun="userRoleTreeList"></treecheck>
</a-form-item>
</a-form>
</a-modal>
<!--编辑----弹框--> <!--编辑----弹框-->
<a-modal :title="titleName" :visible="modifyvisible" @ok="createfunctionOk" @cancel="createfunctionCancel" html-type="submit" width="720px"> <a-modal :title="titleName" :visible="modifyvisible" @ok="createfunctionOk" @cancel="createfunctionCancel" html-type="submit" width="720px">
<a-form :form="Formtable"> <a-form :form="Formtable">
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="合伙人电话号码"> <a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="电话号码">
<a-input placeholder="合伙人电话号码" v-decorator="[ 'phoneNum', {rules: [{ required: true, message: '合伙人电话号码不能为空!' ,whitespace:true}]} ]"></a-input> <a-input placeholder="电话号码" v-decorator="[ 'phone', {rules: [{ required: true, message: '电话号码不能为空!' ,whitespace:true}]} ]"></a-input>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="学校">
<a-input placeholder="学校" v-decorator="[ 'school', {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="账号">
<a-input placeholder="合伙人姓名" v-decorator="[ 'name', {rules: [{ required: true, message: '合伙人姓名不能为空!' ,whitespace:true}]} ]"></a-input> <a-input placeholder="账号" v-decorator="[ 'account', {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="姓名">
<a-input placeholder="合伙人账号" v-decorator="[ 'account', {rules: [{ required: true, message: '合伙人账号不能为空!' ,whitespace:true}]} ]"></a-input> <a-input placeholder="姓名" v-decorator="[ 'name', {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="身份证">
<a-input placeholder="合伙人身份证" v-decorator="[ 'idCard', {rules: [{ required: true, message: '合伙人身份证不能为空!' ,whitespace:true}]} ]"></a-input> <a-input placeholder="身份证" v-decorator="[ 'idCard', {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="性别">
<a-radio-group v-decorator="['gender', {rules: [{ required: true, message: '合伙人身份证不能为空!' ,whitespace:true}]} ]" > <a-radio-group v-decorator="['sex', {rules: [{ required: true, message: '性别不能为空!' ,whitespace:true}]} ]" >
<a-radio value="1"></a-radio> <a-radio value="1"></a-radio>
<a-radio value="2"></a-radio> <a-radio value="2"></a-radio>
</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-select placeholder="请选择" v-decorator="[ 'grade', {rules: [{ required: true, message: '年级不能为空!' ,whitespace:true}]} ]">
<a-select-option key="">请选择</a-select-option>
<a-select-option key="20级">20级</a-select-option>
<a-select-option key="19级">19级</a-select-option>
<a-select-option key="18级">18级</a-select-option>
<a-select-option key="17级">17级</a-select-option>
<a-select-option key="16级">16级</a-select-option>
</a-select>
</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="县分">
<a-input placeholder="县分" v-decorator="[ 'area', {rules: [{ required: true, message: '县分不能为空!' ,whitespace:true}]} ]"></a-input> <a-select placeholder="请选择" @change="changeSubst(2)" v-model="modifyForm.subName" >
<a-select-option key="">请选择</a-select-option>
<a-select-option v-for="data in subNameList" :value="data">
{{ data}}
</a-select-option>
</a-select>
</a-form-item> </a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="合伙人对应的微信账号">
<a-input placeholder="合伙人对应的微信账号" v-decorator="[ 'wxId' ]"></a-input> <a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="学校名称">
<a-select placeholder="请选择" v-model="modifyForm.schoolId">
<a-select-option key="">请选择</a-select-option>
<a-select-option v-for="data in schoolList" :value="data.id">
{{ data.school_name}}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="学子公司职位">
<a-select placeholder="请选择" v-model="modifyForm.position" @change="changePosition(2)">
<a-select-option key="">非学子公司成员</a-select-option>
<a-select-option key="督导">督导</a-select-option>
<a-select-option key="楼长">楼长</a-select-option>
<a-select-option key="成员">成员</a-select-option>
</a-select>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :style="leaderDisplay" :wrapperCol="{span: 8, offset: 1}" label="学子公司上级">
<a-select placeholder="请选择" v-model="modifyForm.parentId">
<a-select-option key="">请选择</a-select-option>
<a-select-option v-for="data in xzUserList" :value="data.id">
{{ data.name}}
</a-select-option>
</a-select>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="角色" >
<!-- <a-input placeholder="请输入部门" v-model="modelData.content" @click="handelDepartment"></a-input> -->
<treecheck ref="tree2" @selectcheck="contentSelectCheck2" :treeCheckable="true" :createFun="userRoleTreeList"></treecheck>
</a-form-item> </a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 12, offset: 1}" label="通过预实名账号"> <a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 12, offset: 1}" label="通过预实名账号">
<a-radio-group v-decorator="['ysm']" > <a-radio-group v-decorator="['ysm']" >
...@@ -82,44 +211,92 @@ ...@@ -82,44 +211,92 @@
<script> <script>
import STable from '@/components/table'; import STable from '@/components/table';
import {findByList,modify,getlistysm} from "@/api/school-center/PartnerManagementAPI" import {
import {cloneObject} from '@/utils/util'; findByList,modify,getlistysm,
addPartner,getSubstList,getSchoolList,getXzUserList
} from "@/api/school-center/PartnerManagementAPI"
import {cloneObject} from '@/utils/util'
import treecheck from '@/components/sysmanage/treeCheck'
import treeList from '@/components/sysmanage/treeList'
import {
getList,
tabList,
getUserInfo,
deleteList,
resetPass,
getAddUser,
userRoleTreeList,
getEditUser,
userFreeze,
userUnFreeze,
changeOtherPwd
} from '@/api/system';
export default { export default {
name: "PartnerManagement", name: "PartnerManagement",
components: { components: {
STable, STable,
treeList,
treecheck,
}, },
data: function () { data: function () {
return { return {
emptyText: {emptyText: '暂无数据'},
Formtable: this.$form.createForm(this, {name: 'Formtable'}), Formtable: this.$form.createForm(this, {name: 'Formtable'}),
addFormtable: this.$form.createForm(this, {name: 'addFormtable'}),
queryParam: { queryParam: {
name: '', name: '',
area:'', area:'',
school:'' school:''
}, },
addForm: {
account: '',
phone:'',
name:'',
idCard: '',
sex: '',
grade: '',
password: '',
repassword: '',
subName: '',
substName: '',
schoolId: '',
roleId: '',
position:'',
parentId:'',
parentIds:'',
},
leaderDisplay:'display:none',
modifyvisible:false, modifyvisible:false,
modifyForm: { modifyForm: {
id:"", id:"",
phoneNum: '', phone: '',
school:'', school:'',
name: '', name: '',
account: '', account: '',
idCard: '', idCard: '',
gender: '', sex: '',
grade: '',
area: '', area: '',
wxId: '',
ysm: '', ysm: '',
schoolId: '',
roleId: '',
position:'',
parentId:'',
}, },
autoCompleteResult:[], autoCompleteResult:[],
subNameList: [],
schoolList:[],
xzUserList:[],
addSubName:'',
columns: [ columns: [
{dataIndex: 'name', width: 100, title: '姓名 ', align: "center"}, {dataIndex: 'name', width: 100, title: '姓名 ', align: "center"},
{dataIndex: 'phoneNum', width: 200, title: '电话', align: "center"}, {dataIndex: 'phone', width: 200, title: '电话', align: "center"},
{dataIndex: 'school', width: 200, title: '学校 ', align: "center"}, {dataIndex: 'school', width: 200, title: '学校 ', align: "center"},
{dataIndex: 'idCard', width: 200, title: '身份证 ', align: "center"}, {dataIndex: 'idCard', width: 200, title: '身份证 ', align: "center"},
{dataIndex: 'account', width: 200, title: '账号 ', align: "center"}, {dataIndex: 'account', width: 200, title: '账号 ', align: "center"},
{dataIndex: 'gender', width: 100, title: '性别 ', align: "center",scopedSlots: {customRender: 'genderoperation'},}, {dataIndex: 'sex', width: 100, title: '性别 ', align: "center",scopedSlots: {customRender: 'genderoperation'},},
{dataIndex: 'area', width: 100, title: '县分 ', align: "center"}, {dataIndex: 'area', width: 100, title: '县分 ', align: "center"},
{dataIndex: 'wxId', width: 100, title: '微信 ', align: "center"},
{ {
dataIndex: 'operation', dataIndex: 'operation',
width: 100, width: 100,
...@@ -134,11 +311,23 @@ ...@@ -134,11 +311,23 @@
pageNo: parameter.pageNo, pageNo: parameter.pageNo,
pageSize: parameter.pageSize pageSize: parameter.pageSize
} }
//表示 //表示
let obj = cloneObject(this.queryParam) let obj = cloneObject(this.queryParam)
// 获取县分下拉清单
getSubstList(Object.assign(params,obj)).then(res => {
if (res.state == 'success') {
res.data.forEach((key)=>{
this.subNameList.push(key.sub_name)
})
}
})
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,
...@@ -155,7 +344,11 @@ ...@@ -155,7 +344,11 @@
} }
return data return data
}) })
} },
keyRecord: '',
recordId: '',
addUser: false,
userRoleTreeList:userRoleTreeList,
} }
}, },
methods:{ methods:{
...@@ -168,16 +361,23 @@ ...@@ -168,16 +361,23 @@
this.modifyvisible = true this.modifyvisible = true
setTimeout(() => { setTimeout(() => {
this.Formtable.setFieldsValue({ this.Formtable.setFieldsValue({
phoneNum: data.phoneNum, phone: data.phone,
school: data.school, schoolId: data.schoolId,
name: data.name, name: data.name,
account: data.account, account: data.account,
idCard: data.idCard, idCard: data.idCard,
gender: data.gender, sex: 2,
area: data.area, grade: '18级',
wxId: data.wxId,
ysm: data.ysm, ysm: data.ysm,
}) })
this.modifyForm.subName = data.area;
this.modifyForm.roleId = data.roleid;
this.modifyForm.position = data.position;
this.recordId = data.parentId;
this.changeSchool(data.schoolId);
this.changePosition(2);
this.$refs.tree2.setValue2(data.roleid);
}, 0) }, 0)
getlistysm().then(res => { getlistysm().then(res => {
if (res.state == "success") { if (res.state == "success") {
...@@ -187,22 +387,35 @@ ...@@ -187,22 +387,35 @@
}, },
//提交表单 //提交表单
createfunctionOk(){ createfunctionOk(){
this.Formtable.validateFields(['school', 'name',"account","idCard", 'gender',"area", 'wxId',"ysm" ,'phoneNum'], {force: true}, (err, values)=>{ this.Formtable.validateFields(["account",'phone','name',"idCard", 'sex','schoolId', 'roleid','ysm'], {force: true}, (err, values)=>{
if (!err){ if (!err){
this.modifyForm.school=values.school
this.modifyForm.name=values.name
this.modifyForm.account=values.account this.modifyForm.account=values.account
this.modifyForm.phone=values.phone
this.modifyForm.name=values.name
this.modifyForm.idCard=values.idCard this.modifyForm.idCard=values.idCard
this.modifyForm.gender=values.gender this.modifyForm.sex=values.sex
this.modifyForm.area=values.area
this.modifyForm.wxId=values.wxId
this.modifyForm.ysm=values.ysm this.modifyForm.ysm=values.ysm
this.modifyForm.phoneNum=values.phoneNum
if(this.modifyForm.idCard.length != 18){
this.$message.error( '身份证不合法', 5);
return null;
}
if(this.modifyForm.roleId == null || this.modifyForm.roleId == ''){
this.$message.error( '角色不能为空', 5);
return null;
}
if(this.modifyForm.roleId.substring(0,2) == '0,'){
// 剔除 '0,'
this.addForm.roleId = this.addForm.roleId.substring(2);
}
//修改数据 //修改数据
modify(this.modifyForm).then(res=>{ modify(this.modifyForm).then(res=>{
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);
...@@ -215,18 +428,261 @@ ...@@ -215,18 +428,261 @@
this.modifyvisible=false this.modifyvisible=false
this.autoCompleteResult=[] this.autoCompleteResult=[]
this.Formtable.setFieldsValue({ this.Formtable.setFieldsValue({
phoneNum: '', account: '',
school:'', phone: '',
name: '', name: '',
idCard: '',
sex: '',
grade: '',
password: '',
repassword: '',
schoolId: '',
parentId: '',
ysm: '',
})
this.addForm.subName = '';
this.addForm.position = '';
this.addForm.parentIds = '';
},
openAddUser() {
this.titleName = "新增"
this.addUser = true;
this.addFormtable.setFieldsValue({
account: '', account: '',
phone: '',
name: '',
idCard: '', idCard: '',
gender: '', sex: '',
area: '', grade: '',
wxId: '', password: '',
repassword: '',
schoolId: '',
parentId: '',
ysm: '',
})
this.addForm.subName = '';
this.addForm.position = '';
this.addForm.parentIds = '';
},
createOk(){
this.addFormtable.validateFields(["account", 'phone', "name", "idCard", "sex", 'grade',"password", 'repassword','schoolId','role','position','parentId'], {force: true}, (err, values)=>{
if (!err){
this.addForm.account=values.account
this.addForm.phone=values.phone
this.addForm.name=values.name
this.addForm.idCard=values.idCard
this.addForm.sex=values.sex
this.addForm.grade=values.grade
this.addForm.password=values.password
this.addForm.repassword=values.repassword
this.addForm.schoolId=values.schoolId
this.addForm.postion=values.position
this.addForm.parentId=values.parentId
this.addForm.substName=""
if(this.addForm.idCard.length != 18){
this.$message.error( '身份证不合法', 5);
return null;
}
if(this.addForm.password.length != 8){
this.$message.error( '密码长度不对', 5);
return null;
}
if(this.addForm.password != this.addForm.repassword){
this.$message.error( '两次密码必须一致', 5);
return null;
}
if(this.addForm.roleId == null || this.addForm.roleId == ''){
this.$message.error( '角色不能为空', 5);
return null;
}
if(this.addForm.parentId == undefined){
this.addForm.parentId = ''
this.addForm.parentIds = ''
}else{
this.xzUserList.forEach((key) => {
if(this.addForm.parentId == key.id){
if(this.addForm.position == '楼长'){
this.addForm.parentIds = key.id + ',';
}else{
this.addForm.parentIds = key.parentIds + key.id + ',';
}
}
})
}
if(this.addForm.roleId.substring(0,2) == '0,'){
// 剔除 '0,'
this.addForm.roleId = this.addForm.roleId.substring(2);
}
//修改数据
addPartner(this.addForm).then(res=>{
if (res.state=="success") {
this.$message.success(res.data ? res.data : '修改成功!', 5);
this.search();
this.addUser = false;
return null;
}
this.$message.error(res.data ? res.data : '修改失败!', 5);
})
}
})
},
createCancel(){
this.addUser=false;
this.addFormtable.setFieldsValue({
account: '',
phone: '',
name: '',
idCard: '',
sex: '',
grade: '',
password: '',
repassword: '',
schoolId: '',
parentId: '',
ysm: '', ysm: '',
}) })
this.addForm.subName = '';
this.addForm.position = '';
this.addForm.parentIds = '';
},
contentSelectCheck1(data){
let list = data.list;
let textlist = new Array();
let pObj = {};
list.forEach(element => {
/*if(element.plist){
element.plist.forEach(item2 =>{
textlist.push(item2);
})
}*/
if(element !== undefined){
if(!pObj[element.pId]){
pObj[element.pId] = {len:element.plen,list:[element.id]}
}else{
pObj[element.pId].list.push(element.id)
} }
} }
//textlist.push(element.id);
});
for (let name in pObj) {
if(pObj[name].len === pObj[name].list.length){
textlist.push(name)
textlist = [...textlist,...pObj[name].list];
}else{
textlist = [...textlist,...pObj[name].list];
}
}
this.addForm.roleId = textlist.join(",");
},
contentSelectCheck2(data){
let list = data.list;
let textlist = new Array();
let pObj = {};
list.forEach(element => {
/*if(element.plist){
element.plist.forEach(item2 =>{
textlist.push(item2);
})
}*/
if(!pObj[element.pId]){
pObj[element.pId] = {len:element.plen,list:[element.id]}
}else{
pObj[element.pId].list.push(element.id)
}
//textlist.push(element.id);
});
for (let name in pObj) {
if(pObj[name].len === pObj[name].list.length){
textlist.push(name)
textlist = [...textlist,...pObj[name].list];
}else{
textlist = [...textlist,...pObj[name].list];
}
}
this.modifyForm.roleId = textlist.join(",");
},
changeSubst(type){
let schoolParams = {};
if(type == 1){
schoolParams.subName = this.addForm.subName;
}else{
schoolParams.subName = this.modifyForm.subName;
}
this.schoolList = [];
getSchoolList(schoolParams).then(res => {
if (res.state == 'success') {
res.data.forEach((key) => {
this.schoolList.push(key)
})
}
})
},
changeSchool(schoolId){
let schoolParams = {};
schoolParams.subName = this.modifyForm.subName;
this.schoolList = [];
getSchoolList(schoolParams).then(res => {
if (res.state == 'success') {
res.data.forEach((key) => {
this.schoolList.push(key)
})
this.modifyForm.schoolId = schoolId;
}
})
},
changePosition(type){
let params = {};
if(type == 1){
params.position = this.addForm.position;
}else{
params.position = this.modifyForm.position;
}
this.addForm.parentIds = '';
if(params.position != '' && params.position != '督导'){
this.leaderDisplay = '';
if(params.position == '楼长'){
params.position = '督导'
}else{
params.position = '楼长'
}
this.xzUserList = [];
getXzUserList(params).then(res => {
if (res.state == 'success') {
this.keyRecord = ''
res.data.forEach((key) => {
this.xzUserList.push(key)
})
if(type == 1){
this.addForm.parentId = '';
}else{
if(this.recordId != ''){
this.modifyForm.parentId = this.recordId;
}
}
}
})
}else {
this.leaderDisplay = 'display:none';
this.addForm.parentId = '';
this.modifyForm.parentId = '';
}
},
}
} }
</script> </script>
......
<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-input placeholder="活动标题" v-model="queryParam.title"></a-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="12">
<a-form-item :labelCol="{span: 5}" :wrapperCol="{span: 18, offset: 1}" label="活动类型">
<a-select placeholder="请选择" v-model="queryParam.activityType">
<a-select-option key="">请选择</a-select-option>
<a-select-option key="1">个人活动</a-select-option>
<a-select-option key="2">团队活动</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="6" :sm="12">
<a-form-item :labelCol="{span: 5}" :wrapperCol="{span: 18, offset: 1}" label="活动小类">
<a-select placeholder="请选择" v-model="queryParam.subclass">
<a-select-option key="">请选择</a-select-option>
<a-select-option key="部长考核">部长考核</a-select-option>
<a-select-option key="前置营销">前置营销</a-select-option>
<a-select-option key="线上活动">线上活动</a-select-option>
<a-select-option key="线下活动">线下活动</a-select-option>
</a-select>
</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-divider type="vertical"/>
<a-button @click="add()" type="primary">添加</a-button>
</a-col>
</span>
</a-row>
</a-form>
</div>
<!--列表-->
<s-table :locale="emptyText" :columns="columns" :data="rowdata" bordered ref="table" size="small" class="flex-filling">
<template slot="operation" slot-scope="text,record">
<a @click="modifyfunction(record)">编辑</a>
</template>
</s-table>
<!--编辑----弹框-->
<a-modal :title="titleName" :visible="modifyvisible" @ok="createfunctionOk" @cancel="createfunctionCancel" html-type="submit" width="840px">
<a-form :form="Formtable">
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="活动标题">
<a-input placeholder="活动标题" v-decorator="[ 'title', {rules: [{ required: true, message: '活动标题不能为空!' ,whitespace:true}]} ]"></a-input>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="活动详情">
<a-input placeholder="活动详情" v-decorator="[ 'desc', {rules: [{ required: true, message: '活动详情不能为空!' ,whitespace:true}]} ]"></a-input>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="活动积分">
<a-input placeholder="活动积分" v-decorator="[ 'integral', {rules: [{ required: true, message: '活动积分不能为空!' ,whitespace:true}]} ]"></a-input>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="活动类型">
<a-radio-group v-decorator="['activityType', {rules: [{ required: true, message: '活动类型不能为空!'}]} ]">
<a-radio value="个人活动">个人活动</a-radio>
<a-radio value="团队活动">团队活动</a-radio>
</a-radio-group>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="活动小类">
<a-select placeholder="请选择" v-decorator="[ 'subclass', {rules: [{ required: true, message: '活动小类不能为空!' ,whitespace:true}]} ]">
<a-select-option key="">请选择</a-select-option>
<a-select-option key="部长考核">部长考核</a-select-option>
<a-select-option key="前置营销">前置营销</a-select-option>
<a-select-option key="线上活动">线上活动</a-select-option>
<a-select-option key="线下活动">线下活动</a-select-option>
</a-select>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="排序号">
<a-input v-decorator="[ 'sort', {rules: [{ required: true, message: '活动小类不能为空!' ,whitespace:true}]} ]"></a-input>
</a-form-item>
</a-form>
</a-modal>
</div>
</template>
<script>
import STable from '@/components/table';
import {getList,addActivity,updateActivity,deleteActivity} from "@/api/school-center/activityAPI"
import {cloneObject} from '@/utils/util';
export default {
name: "activity",
components: {
STable,
},
data: function () {
return {
emptyText: {emptyText: '暂无数据'},
previewVisible: false,
previewImage: '',
fileList: [
],
fileid:{},
brackgroundurl:"manager/ciop/school/schoolManagement/qrcodeUpload",
// form
Formtable: this.$form.createForm(this, {name: 'Formtable'}),
titleName:"",
modifyForm: {
id: '',
title: '',
desc: '',
integral: '',
activityType: '',
subclass: '',
imageUrl: '',
range: '',
sort: '',
},
subNameList: [],
packageName:[],
chosePages:[],
products:[],
//输入框列表
queryParam: {
title: '',
activityType: '',
subclass: '',
status: '',
},
modifyvisible: false,
columns: [
{dataIndex: 'title', width: 200, title: '活动标题', align: "center"},
{dataIndex: 'desc', width: 200, title: '活动详情', align: "center"},
{dataIndex: 'integral', width: 200, title: '活动积分', align: "center"},
{dataIndex: 'activityType', width: 200, title: '活动类型', align: "center"},
{dataIndex: 'subclass', width: 200, title: '活动小类', align: "center"},
{dataIndex: 'creator', width: 200, title: '创建人', align: "center"},
{dataIndex: 'createTime', width: 200, title: '创建时间', align: "center"},
{
dataIndex: 'operation',
width: 200,
title: '操作',
align: "center",
scopedSlots: {customRender: 'operation'},
fixed: "right"
}]
,
rowdata: parameter => {
let params = {
pageNo: parameter.pageNo,
pageSize: parameter.pageSize
}
//表示
let obj = cloneObject(this.queryParam)
return getList(Object.assign(params, obj)).then(res => {
let data = {}
if (res.state !== 'success') {
this.emptyText.emptyText = '查询失败!'
this.$message.error("查询失败!", 5);
data = {
data: [],
pageSize: parameter.pageSize,
pageNo: 1,
totalCount: 0
}
} else {
if (res.data.records.length==0){
return data
}
data = {
data: res.data.records,
pageSize: parameter.pageSize,
pageNo: parameter.pageNo,
totalCount: res.data.total
}
}
return data
})
}
}
},
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){
let status=0;
if(deletdata.status==0){
status=1
}
let parent = {
id: deletdata.id,
status: status
}
hidestatus(parent).then(res=>{
if (res.state=="success"){
this.$message.success(res.data ? res.data : '修改成功!', 5);
this.search();
return null
}
this.$message.error(res.data ? res.data : '修改失败!', 5);
})
},
chosePagesfunction(data){
this.chosePages=data
},
search() {
this.$refs.table.refresh({search: true})
},
add(){
this.titleName="添加"
setTimeout(()=>{
this.Formtable.setFieldsValue({
id: '',
title: '',
desc: '',
integral: '',
activityType: '',
subclass: '',
imageUrl: '',
range: '',
sort: '',
})
},0)
this.modifyvisible=true;
},
modifyfunction(data){
//初始化
this.titleName="编辑"
let choosepagespare={
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
// //查询中间表
// choosepages(choosepagespare).then(res=>{
// if (res.state == 'success'){
// let d= res.data.choosepages
// for (let i = 0; i <d.length ; i++) {
// this.chosePages.push(d[i])
// }
// }
// })
// let showband="0"
// if (data.isShowband=="1"){
// showband=data.isShowband
// }
// let isShowrh="0"
// if (data.isShowrh=="1"){
// isShowrh=data.isShowrh
// }
setTimeout(()=>{
this.Formtable.setFieldsValue({
title: data.title,
desc: data.title,
integral: data.title,
activityType: data.title,
subclass: data.title,
imageUrl: data.title,
range: data.title,
sort:"",
})
},0)
this.customimg="./img/custom"+data.serviceQrcode
this.modifyvisible=true;
},
//提交表单
createfunctionOk(){
this.Formtable.validateFields(['title', 'desc',"integral","activityType", 'subclass', 'sort',"range" ], {force: true}, (err, values)=>{
if (!err){
this.modifyForm.title=values.title
this.modifyForm.desc=values.desc
this.modifyForm.integral=values.integral
this.modifyForm.activityType=values.activityType
this.modifyForm.subclass=values.subclass
this.modifyForm.sort=values.sort
this.modifyForm.range=values.range
this.chosePages.forEach(value => {
if (value!=undefined){
this.modifyForm.chosePages=value+","+this.modifyForm.chosePages
}
})
//插入数据
if (this.modifyForm.id==""){
for (let key in this.modifyForm) {
if (this.modifyForm[key]==undefined){
this.modifyForm[key]=""
}
}
addActivity(this.modifyForm).then(res=>{
if (res.state=="success") {
this.$message.success(res.data ? res.data : '添加成功!', 5);
this.search();
this.modifyvisible=false
return null;
}
this.$message.error(res.data ? res.data : '添加失败!', 5);
})
return null;
}
//修改数据
updateActivity(this.modifyForm).then(res=>{
if (res.state=="success") {
this.$message.success(res.data ? res.data : '修改成功!', 5);
this.search();
this.modifyvisible=false
return null;
}
this.$message.error(res.data ? res.data : '修改失败!', 5);
})
}
})
},
createfunctionCancel(){
this.Formtable.setFieldsValue({
id: '',
title: '',
desc: '',
integral: '',
activityType: '',
subclass: '',
imageUrl: '',
range: '',
sort: '',
})
this.fileList=[]
this.modifyForm.id=""
this.modifyForm.chosePages=""
this.chosePages.splice(0,this.chosePages.length)
this.modifyvisible=false;
}
}
}
</script>
<style scoped>
</style>
<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
...@@ -6,6 +6,11 @@ ...@@ -6,6 +6,11 @@
<a-form layout="inline"> <a-form layout="inline">
<a-row :gutter="24"> <a-row :gutter="24">
<a-col :md="4" :sm="12"> <a-col :md="4" :sm="12">
<a-form-item label="网点名称:">
<a-input placeholder="网点名称" v-model="queryParam.networkName"></a-input>
</a-form-item>
</a-col>
<a-col :md="4" :sm="12">
<a-form-item label="县分:"> <a-form-item label="县分:">
<a-input placeholder="县分" v-model="queryParam.subName"></a-input> <a-input placeholder="县分" v-model="queryParam.subName"></a-input>
</a-form-item> </a-form-item>
...@@ -36,7 +41,7 @@ ...@@ -36,7 +41,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'">
...@@ -68,6 +73,12 @@ ...@@ -68,6 +73,12 @@
<!--编辑----弹框--> <!--编辑----弹框-->
<a-modal :title="titleName" :visible="modifyvisible" @ok="createfunctionOk" @cancel="createfunctionCancel" html-type="submit" width="840px"> <a-modal :title="titleName" :visible="modifyvisible" @ok="createfunctionOk" @cancel="createfunctionCancel" html-type="submit" width="840px">
<a-form :form="Formtable"> <a-form :form="Formtable">
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="网点编码">
<a-input placeholder="网点编码" v-decorator="[ 'networkCode']"></a-input>
</a-form-item>
<a-form-item :labelCol="{span: 6}" :wrapperCol="{span: 8, offset: 1}" label="网点名称">
<a-input placeholder="网点名称" v-decorator="[ 'networkName']"></a-input>
</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="县分">
<a-select placeholder="请选择" v-decorator="[ 'subName', {rules: [{ required: true, message: '县分不能为空!' ,whitespace:true}]} ]"> <a-select placeholder="请选择" v-decorator="[ 'subName', {rules: [{ required: true, message: '县分不能为空!' ,whitespace:true}]} ]">
<a-select-option key="">请选择</a-select-option> <a-select-option key="">请选择</a-select-option>
...@@ -119,7 +130,25 @@ ...@@ -119,7 +130,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 +163,9 @@ ...@@ -134,6 +163,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,12 +176,24 @@ ...@@ -144,12 +176,24 @@
}, },
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:"",
customimg:"", customimg:"",
modifyForm: { modifyForm: {
id:"", id:"",
networkCode: '',
networkName: '',
subName:"", subName:"",
schoolName:"", schoolName:"",
netId:"", netId:"",
...@@ -167,13 +211,16 @@ ...@@ -167,13 +211,16 @@
products:[], products:[],
//输入框列表 //输入框列表
queryParam: { queryParam: {
networkName: '',
subName: '', subName: '',
status: '', status: '',
schoolName: '', schoolName: '',
}, },
modifyvisible: false, modifyvisible: false,
columns: [ columns: [
{dataIndex: 'subName', width: 200, title: '县分', align: "center"}, {dataIndex: 'networkCode', width: 200, title: '网点编码', align: "center"},
{dataIndex: 'networkName', width: 200, title: '网点名称', align: "center"},
{dataIndex: 'subName', width: 100, title: '县分', align: "center"},
{dataIndex: 'schoolName', width: 200, title: '学校名称', align: "center"}, {dataIndex: 'schoolName', width: 200, title: '学校名称', align: "center"},
{ {
dataIndex: 'status', dataIndex: 'status',
...@@ -199,8 +246,10 @@ ...@@ -199,8 +246,10 @@
//表示 //表示
let obj = cloneObject(this.queryParam) let obj = cloneObject(this.queryParam)
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 +294,43 @@ ...@@ -245,6 +294,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 +373,19 @@ ...@@ -287,6 +373,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=>{
...@@ -323,8 +422,10 @@ ...@@ -323,8 +422,10 @@
}, },
//提交表单 //提交表单
createfunctionOk(){ createfunctionOk(){
this.Formtable.validateFields(['schoolName', 'bandproductId',"subName","lzgh", 'netId',"isShowband", 'isShowrh',"netPhone" ,'isRecv'], {force: true}, (err, values)=>{ this.Formtable.validateFields(['networkCode','networkName','schoolName', 'bandproductId',"subName","lzgh", 'netId',"isShowband", 'isShowrh',"netPhone" ,'isRecv'], {force: true}, (err, values)=>{
if (!err){ if (!err){
this.modifyForm.networkCode=values.networkCode
this.modifyForm.networkName=values.networkName
this.modifyForm.subName=values.subName this.modifyForm.subName=values.subName
this.modifyForm.schoolName=values.schoolName this.modifyForm.schoolName=values.schoolName
this.modifyForm.netId=values.netId this.modifyForm.netId=values.netId
...@@ -352,6 +453,7 @@ ...@@ -352,6 +453,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 +465,7 @@ ...@@ -363,6 +465,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 +487,7 @@ ...@@ -384,6 +487,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)
......
<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>
<a-col :md="4" :sm="12">
<a-form-item label="客户类型:">
<a-select v-model="queryParam.userType" style="width: 120px">
<a-select-option value>全部客户</a-select-option>
<a-select-option value="1">老用户办理</a-select-option>
<a-select-option value="0">新用户办理</a-select-option>
<a-select-option value="2">老用户续约</a-select-option>
<a-select-option value="3">融合办理</a-select-option>
<a-select-option value="4">抽奖业务</a-select-option>
<a-select-option value="5">单宽业务</a-select-option>
<a-select-option value="6">羊城通业务</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="4" :sm="12">
<a-form-item label="订单编号:">
<a-input placeholder="订单编号" v-model="queryParam.orderNumber"></a-input>
</a-form-item>
</a-col>
<a-col :md="4" :sm="12">
<a-form-item label="客户姓名:">
<a-input placeholder="客户姓名" v-model="queryParam.customerName"></a-input>
</a-form-item>
</a-col>
<a-col :md="4" :sm="12">
<a-form-item label="办理号码:">
<a-input placeholder="办理号码" v-model="queryParam.businessNumber"></a-input>
</a-form-item>
</a-col>
<a-col :md="4" :sm="12">
<a-form-item label="联系号码:">
<a-input placeholder="联系号码" v-model="queryParam.contactNumber"></a-input>
</a-form-item>
</a-col>
<a-col :md="4" :sm="12">
<a-form-item label="合伙人姓名:">
<a-input placeholder="合伙人姓名" v-model="queryParam.hehuorenName"></a-input>
</a-form-item>
</a-col>
<a-col :md="4" :sm="12">
<a-form-item label="合伙人学校:">
<a-input placeholder="合伙人学校" v-model="queryParam.hehuorenSchool"></a-input>
</a-form-item>
</a-col>
<a-col :md="4" :sm="12">
<a-form-item label="状态:">
<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="待选号">待选号</a-select-option>
<a-select-option value="待识别">待识别</a-select-option>
<a-select-option value="待活体">待活体</a-select-option>
<a-select-option value="审核中">审核中</a-select-option>
<a-select-option value="待审核">待配送</a-select-option>
<a-select-option value="待审核">待审核</a-select-option>
<a-select-option value="待受理">待受理</a-select-option>
<a-select-option value="已发货">已发货</a-select-option>
<a-select-option value="已完成">已完成</a-select-option>
<a-select-option value="异常单">异常单</a-select-option>
<a-select-option value="待派奖">待派奖</a-select-option>
<a-select-option value="已派奖">已派奖</a-select-option>
<a-select-option value="重新下单">重新下单</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="6" :sm="12">
<a-button @click="search()" type="primary">查询</a-button>
<a-button @click="handleSubmit" style="margin-left: 10px">导出</a-button>
<a-dropdown>
<a-menu slot="overlay" @click="handleMenuClick">
<a-menu-item key="1">
<a-icon type="arrow-up" />受理单
</a-menu-item>
<a-menu-item key="2">
<a-icon type="arrow-up" />快递
</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px">
导入
<a-icon type="down" />
</a-button>
</a-dropdown>
</a-col>
</a-row>
</a-form>
</div>
<!--列表-->
<s-table
:columns="columns"
:data="rowdata"
bordered
ref="table"
size="small"
class="flex-filling"
:locale="emptyText"
>
<!--拦截器-->
<template slot="productLastUpdateTime" slot-scope="text">{{ text | dayjs}}</template>
<!--拦截器-->
<template slot="productCreateTime" slot-scope="text">{{ text | dayjs}}</template>
<template slot="text" slot-scope="text">
<p style="white-space: pre-line;">{{text}}</p>
</template>
<template slot="userType" slot-scope="text">
<p v-if="text=='1'">老用户办理</p>
<p v-if="text=='0'">新用户办理</p>
<p v-if="text=='2'">老用户续约</p>
<p v-if="text=='3'">融合办理</p>
<p v-if="text=='4'">抽奖业务</p>
<p v-if="text=='5'">单宽业务</p>
<p v-if="text=='6'">羊城通业务</p>
</template>
<template slot="studentCardCheckStatus" slot-scope="text">
<p v-if="text=='0'">未审核</p>
<p v-if="text=='1'">已审核</p>
</template>
<template slot="operation" slot-scope="text, record">
<span>
<a @click="showDrawer(record)">查看</a>
<a-divider type="vertical" />
<a @click="abnormal(record.id)">设为异常单</a>
<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-col :span="6">
<p>订单完成时间:{{ orderInfo.successTime | dayjs }}</p>
</a-col>
<a-col :span="6">
<p>学号:{{ orderInfo.studentNumber }}</p>
</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-col :span="6">
<p>联系电话:{{ orderInfo.contactNumber }}</p>
</a-col>
<a-col :span="6">
<p>身份证号:{{ orderInfo.idCard }}</p>
</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-col :span="6">
<p>地址:{{ orderInfo.address }}</p>
</a-col>
<a-col :span="6">
<p>省市县:{{ orderInfo.site }}</p>
</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-col :span="12">
<p>备注:{{ orderInfo.remarks }}</p>
</a-col>
<a-col :span="12">
<p>错误原因:{{ orderInfo.checkFail }}</p>
</a-col>
</a-row>
<a-row>
<a-col :span="6">
<p>宽带账号:{{ orderInfo.netNumber }}</p>
</a-col>
<a-col :span="6">
<p>宽带密码:{{ orderInfo.netPassword }}</p>
</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-col :span="6">
<p>学生证审核状态:{{ orderInfo.studentCardCheckStatus }}</p>
</a-col>
<a-col :span="6">
<p>宽带订单id:{{ orderInfo.kdOrderId }}</p>
</a-col>
<a-col :span="6">
<p>智能平台订单号:{{ orderInfo.orderId }}</p>
</a-col>
<a-col :span="6">
<p>智能平台订单状态:{{ orderInfo.thStatus }}</p>
</a-col>
</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-col :span="6">
<p>客户名称 :{{ orderInfo.customerName }}</p>
</a-col>
<a-col :span="6">
<p>联系电话 :{{ orderInfo.contactNumber }}</p>
</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-col :span="6">
<p>受理人:{{ orderInfo.acceptName }}</p>
</a-col>
<a-col :span="6">
<p>受理结果 :{{ orderInfo.acceptResult }}</p>
</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-tab-pane>
<a-tab-pane tab="操作日志" key="3">
<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-modal
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>
<script>
import STable from "@/components/table";
import {
orderList,
download,
abnormal,
selectOrderHis,
downloadMoBan,
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: 120, title: "客户姓名", fixed: "left" },
{ dataIndex: "orderNumber", width: 180, title: "订单编号", fixed: "left" },
{ dataIndex: "orderStatus", width: 100, title: "订单状态" },
{
dataIndex: "studentCardCheckStatus",
width: 100,
title: "学生证状态",
scopedSlots: { customRender: "studentCardCheckStatus" }
},
{ dataIndex: "businessPackage", width: 180, title: "升级套餐" },
{
dataIndex: "userType",
width: 100,
title: "订单类型",
scopedSlots: { customRender: "userType" }
},
{ dataIndex: "contactNumber", width: 200, title: "联系号码" },
{ dataIndex: "businessNumber", width: 200, title: "办理号码" },
{ dataIndex: "kapin", width: 200, title: "办理套餐" },
{ dataIndex: "hehuorenSchool", width: 220, title: "合伙人学校" },
{ dataIndex: "hehuorenName", width: 150, title: "合伙人姓名" },
{ dataIndex: "hehuorenPhone", width: 150, title: "合伙人手机" },
{
dataIndex: "operation",
width: 200,
title: "操作",
scopedSlots: { customRender: "operation" },
fixed: "right"
}
],
rowdata: parameter => {
const env = process.env.NODE_ENV; //获取当前环境
if(env === 'development'){ //测试环境默认添加前缀
this.apis = '/api/';
}
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") {
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,
handleMenuClick(e) {
if (e.key == "1") {
this.handleSubmit1();
}
if (e.key == "2") {
this.handleSubmit2();
}
},
reviewStudentIdCard(res) {
this.reviewStudentImg =this.apis + res.studenCard;
/*this.reviewStudentImg =this.baseUrl+'abstract0'+1+'.jpg'*/
this.reviewStudent.studentCardCheckStatus = res.studentCardCheckStatus;
this.reviewStudent.checkFail = res.checkFail;
this.reviewStudent.id = res.id;
this.review = true;
},
reviewOk() {
if (this.reviewStudent.studentCardCheckStatus == "0") {
if (
this.reviewStudent.checkFail == "" ||
this.reviewStudent.checkFail == undefined
) {
this.$notification.error({
message: "审核不通过必须填写不通过原因!",
description: "",
duration: 4
});
}
} else {
if (
this.reviewStudent.checkFail != "" &&
this.reviewStudent.checkFail != undefined
) {
this.$notification.error({
message: "审核通过无须填写不通过原因!",
description: "",
duration: 4
});
}
}
if (
this.reviewStudent.checkFail == "" ||
this.reviewStudent.checkFail == undefined
) {
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>
<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>
...@@ -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({
......
...@@ -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,27 @@ ...@@ -192,16 +235,27 @@
}) })
}, },
modifyfunction(data){ modifyfunction(data){
universitySchool().then(res => {
this.universitySchool=res.data
res.data.forEach(value=>{
if(data.universityId == value.universityId){
this.chouti = value
}
})
console.log(this.universitySchool)
})
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 +263,24 @@ ...@@ -209,18 +263,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 +324,11 @@ ...@@ -264,10 +324,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,
......
...@@ -17,7 +17,6 @@ ...@@ -17,7 +17,6 @@
</a-form-item> </a-form-item>
</a-col> </a-col>
<a-col :md="6" :sm="24"> <a-col :md="6" :sm="24">
<a-form-item label="电话"> <a-form-item label="电话">
<a-input v-model="queryParams.phone" placeholder="请输入" /> <a-input v-model="queryParams.phone" placeholder="请输入" />
...@@ -91,12 +90,30 @@ ...@@ -91,12 +90,30 @@
<!-- 修改密码 --> <!-- 修改密码 -->
<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-input placeholder="用户密码" v-decorator="['glyPwd',{rules: [{ required: true, message: '用户密码不能为空!' }]}]" type="password"></a-input>
</a-form-item>
<a-form-item label="新密码" > <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="确认密码" >
<a-input placeholder="确认密码" v-decorator="['editrepassword',{rules: [{ required: true, message: '确认密码不能为空' }, { validator: this.compareToFirstPassword,}]}]" type="password"></a-input> <a-input placeholder="确认密码" v-decorator="['editrepassword',{rules: [{ required: true, message: '确认密码不能为空' }, { validator: this.compareToFirstPassword,}]}]" type="password"></a-input>
</a-form-item> </a-form-item>
<a-form-item label="验证码">
<a-input style="width:350px;margin-right: 10px"
v-decorator="['inputCode',{rules: [{ required: true, message: '验证码不能为空!' }]}]"
type="text"
placeholder="请输入验证码">
</a-input>
<a-button
type="primary"
htmlType="submit"
@click.stop.prevent="getCode"
>{{codeMsg}}
</a-button>
</a-form-item>
</a-form> </a-form>
</a-modal> </a-modal>
<!-- 添加用户 --> <!-- 添加用户 -->
...@@ -220,6 +237,7 @@ import treeList from '@/components/sysmanage/treeList' ...@@ -220,6 +237,7 @@ import treeList from '@/components/sysmanage/treeList'
import treecheck from '@/components/sysmanage/treeCheck' import treecheck from '@/components/sysmanage/treeCheck'
import JDate from '@/components/jeecg/JDate' import JDate from '@/components/jeecg/JDate'
import {notification} from 'ant-design-vue' import {notification} from 'ant-design-vue'
import { postAction } from '@/api/manage'
import { unique } from '@/utils/util' import { unique } from '@/utils/util'
import { import {
getList, getList,
...@@ -247,6 +265,10 @@ export default { ...@@ -247,6 +265,10 @@ export default {
}, },
data() { data() {
return { return {
countdown: 60,// 倒计时秒数
codeMsg: '获取验证码', // 按钮上的文字
timer: null,// 定时器
title:"修改密码",
EditPassFrom: this.$form.createForm(this, { name: 'modify'},), EditPassFrom: this.$form.createForm(this, { name: 'modify'},),
EditPassMess:"不能为空!", EditPassMess:"不能为空!",
//修改密码窗口 //修改密码窗口
...@@ -255,6 +277,8 @@ export default { ...@@ -255,6 +277,8 @@ export default {
newPwd:"", newPwd:"",
rePwd:"", rePwd:"",
changeId:"", changeId:"",
glyPwd:'',
inputCode:''
}, },
settings:{ y: 500,x:2000 }, settings:{ y: 500,x:2000 },
advanced:false,//控制菜单展开 advanced:false,//控制菜单展开
...@@ -338,10 +362,41 @@ export default { ...@@ -338,10 +362,41 @@ export default {
resetPassw: false, resetPassw: false,
add_user: false, add_user: false,
Department: false, Department: false,
reol: false reol: false,
url: "auth/ciop/mgr/changeOtherPwd",
codeurl:"auth/ciop/mgr/codemessage",
} }
}, },
methods: { methods: {
getCode() {
// 验证码60秒倒计时
if (!this.timer) {
postAction(this.codeurl).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;
}
}
}, 1000)
}
},
//密码加密 //密码加密
getPass(text){ getPass(text){
/*let keyss = setMaxDigits(130); /*let keyss = setMaxDigits(130);
...@@ -356,20 +411,29 @@ export default { ...@@ -356,20 +411,29 @@ export default {
}, },
//提交密码修改 //提交密码修改
editPassword() { editPassword() {
let mima = (/^(?![A-Za-z]+$)(?![A-Z\d]+$)(?![A-Z\W]+$)(?![a-z\d]+$)(?![a-z\W]+$)(?![\d\W]+$)\S{8,}$/);
if(mima.test(this.EditPassFrom.getFieldValue('editpassword'))==false){
this.$message.error("密码强制等级低,必须要数字、小写英文字母、大写英文字母或特殊字符混合组成,长度至少8位!", 5);
return
}
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.rePwd=this.editpasswordfrom.newPwd this.editpasswordfrom.rePwd=this.editpasswordfrom.newPwd
this.editpasswordfrom.glyPwd=encodeURIComponent(this.getPass(this.EditPassFrom.getFieldValue('glyPwd')))
this.editpasswordfrom.inputCode=encodeURIComponent(this.getPass(this.EditPassFrom.getFieldValue('inputCode')))
changeOtherPwd(this.editpasswordfrom).then(res => { changeOtherPwd(this.editpasswordfrom).then(res => {
if (res.code == 200) { if (res.code == 200) {
this.EditPassFrom.setFieldsValue({editpassword:""}); this.EditPassFrom.setFieldsValue({editpassword:""});
this.EditPassFrom.setFieldsValue({editrepassword:""}); this.EditPassFrom.setFieldsValue({editrepassword:""});
this.EditPassFrom.setFieldsValue({glyPwd:""});
this.EditPassFrom.setFieldsValue({inputCode:""});
if(res.message==undefined){ if(res.message==undefined){
this.$message.success(res.data != "" ? res.data : "修改成功", 5); this.$message.success(res.data != "" ? res.data : "修改成功", 5);
}else { }else {
this.$message.success(res.message != "" ? res.message : "修改成功", 5); this.$message.success(res.message != "" ? res.message : "修改成功", 5);
} }
this.editpaswordmodel = false
}else{ }else{
if(res.message==undefined){ if(res.message==undefined){
this.$message.error(res.data != "" ? res.data : "失败修改", 5); this.$message.error(res.data != "" ? res.data : "失败修改", 5);
...@@ -377,7 +441,7 @@ export default { ...@@ -377,7 +441,7 @@ export default {
this.$message.error(res.message != "" ? res.message : "失败修改", 5); this.$message.error(res.message != "" ? res.message : "失败修改", 5);
} }
} }
this.editpaswordmodel = false
}) })
} }
}) })
...@@ -386,7 +450,9 @@ export default { ...@@ -386,7 +450,9 @@ export default {
this.editpaswordmodel=false this.editpaswordmodel=false
this.EditPassFrom.setFieldsValue({ this.EditPassFrom.setFieldsValue({
editpassword:'', editpassword:'',
editrepassword:'' editrepassword:'',
glyPwd:'',
inputCode:''
}) })
}, },
compareToFirstPassword (rule, value, callback) { compareToFirstPassword (rule, value, callback) {
......
...@@ -75,7 +75,7 @@ ...@@ -75,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
...@@ -125,6 +125,7 @@ export default { ...@@ -125,6 +125,7 @@ export default {
requiredTwoStepCaptcha: false, requiredTwoStepCaptcha: false,
stepCaptchaVisible: false, stepCaptchaVisible: false,
form: this.$form.createForm(this), form: this.$form.createForm(this),
updateTime:'',
formLogin: { formLogin: {
username: "", username: "",
password: "", password: "",
...@@ -216,7 +217,9 @@ export default { ...@@ -216,7 +217,9 @@ export default {
loginParams.remember = that.formLogin.remember; loginParams.remember = that.formLogin.remember;
loginParams.phonecode=encodeURIComponent(this.getPass(values.phonecode)); loginParams.phonecode=encodeURIComponent(this.getPass(values.phonecode));
//console.log(loginParams); //console.log(loginParams);
that.Login(loginParams).then(() => { that.Login(loginParams).then((res) => {
this.updateTime = res.updateTime
console.log(res.updateTime)
this.departConfirm({}); this.departConfirm({});
}).catch((err) => { }).catch((err) => {
that.requestFailed(err); that.requestFailed(err);
......
...@@ -99,7 +99,6 @@ import {timeFix} from "@/utils/util" ...@@ -99,7 +99,6 @@ import {timeFix} from "@/utils/util"
import Vue from 'vue' import Vue from 'vue'
import {ACCESS_TOKEN} from "@/store/mutation-types" import {ACCESS_TOKEN} from "@/store/mutation-types"
import JGraphicCode from '@/components/jeecg/JGraphicCode' import JGraphicCode from '@/components/jeecg/JGraphicCode'
import {setMaxDigits , RSAKeyPair , encryptedString} from '@/utils/RSA'
import { import {
register,registercode register,registercode
} from '@/api/system' } from '@/api/system'
...@@ -165,17 +164,17 @@ export default { ...@@ -165,17 +164,17 @@ export default {
// 验证码60秒倒计时 // 验证码60秒倒计时
if (!this.timer) { if (!this.timer) {
let data={ let data={
account:this.form.getFieldValue("username") username:this.form.getFieldValue("username")
} }
registercode(data).then(res=>{ registercode(data).then(res=>{
if (res.code==200){ if (res.code==200){
this.$notification.success({ this.$notification.success({
message: res.data, message: res.message,
}); });
return null; return null;
} }
this.$notification.error({ this.$notification.error({
message: res.data, message: res.message,
}); });
}) })
this.timer = setInterval(() => { this.timer = setInterval(() => {
......
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