1695b7c4 by tianhaohao@pashanhoo.com

Merge branch 'dev' of http://yun.pashanhoo.com:9090/bdc/bdcdj-web into dev

2 parents 5c3473de 5d390fda
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
18 "diagram-js": "^6.8.2", 18 "diagram-js": "^6.8.2",
19 "js-cookie": "2.2.0", 19 "js-cookie": "2.2.0",
20 "lodash": "^4.17.21", 20 "lodash": "^4.17.21",
21 "mxdraw": "^0.1.157",
21 "node-sass": "^4.14.1", 22 "node-sass": "^4.14.1",
22 "normalize.css": "7.0.0", 23 "normalize.css": "7.0.0",
23 "nprogress": "0.2.0", 24 "nprogress": "0.2.0",
......
1 { 1 {
2 "TITLE": "不动产登记系统", 2 "TITLE": "不动产登记系统",
3 "SERVERAPI": "/bdcdj" 3 "SERVERAPI": "/bdcdj",
4 "ip": "http://192.168.2.38"
4 } 5 }
...\ No newline at end of file ...\ No newline at end of file
......
1 { 1 {
2 "TITLE": "不动产登记系统", 2 "TITLE": "不动产登记系统",
3 "SERVERAPI": "/bdcdj" 3 "SERVERAPI": "/bdcdj",
4 "ip": "http://192.168.2.38"
4 } 5 }
...\ No newline at end of file ...\ No newline at end of file
......
1 { 1 {
2 "TITLE": "不动产登记系统", 2 "TITLE": "不动产登记系统",
3 "SERVERAPI": "service-bdcdj-th" 3 "SERVERAPI": "service-bdcdj-th",
4 "ip": "http://192.168.2.38"
4 } 5 }
...\ No newline at end of file ...\ No newline at end of file
......
1 <!-- 1 <!--
2 * @Description: 2 * @Description:
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-05-16 09:50:40 4 * @LastEditTime: 2023-05-31 16:04:35
5 --> 5 -->
6 <!DOCTYPE html> 6 <!DOCTYPE html>
7 <html> 7 <html>
...@@ -19,7 +19,19 @@ ...@@ -19,7 +19,19 @@
19 </head> 19 </head>
20 <script> 20 <script>
21 window.baseUrl = location.origin || location.protocol + '//' + location.host 21 window.baseUrl = location.origin || location.protocol + '//' + location.host
22 const authorization = "bearer ATT-6-80pnPMkrvVc-i1qIGQrdkjKIPc-cH1mD" 22 window._config = {
23 // 是否微服务模式,业务系统根据需要读取
24 cloudEnable: false,
25 // 是否启用单点登录
26 casEnable: true,
27 // cas 基地址
28 casBaseURL: 'http://192.168.2.38/cas',
29 services: {
30 // 配置到 contextPath 前一级
31 management: 'http://192.168.2.38',
32 business: 'http://localhost:7001'
33 }
34 }
23 fetch('<%= BASE_URL %>config.json') 35 fetch('<%= BASE_URL %>config.json')
24 .then(response => response.json()) 36 .then(response => response.json())
25 .then(config => { 37 .then(config => {
......
...@@ -231,5 +231,31 @@ export function getZjgcdyList (data) { ...@@ -231,5 +231,31 @@ export function getZjgcdyList (data) {
231 }) 231 })
232 } 232 }
233 233
234 // 数据上报推送查询
235 export function getSjsbPushList (data) {
236 return request({
237 url: SERVER.SERVERAPI + '/rest/system/sysPushRecord/list',
238 method: 'post',
239 data
240 })
241 }
242
243 // 数据上报推送
244 export function pushSjsbRecord (data) {
245 return request({
246 url: SERVER.SERVERAPI + '/rest/system/sysPushRecord/push',
247 method: 'post',
248 data
249 })
250 }
251
252 // 数据上报推送
253 export function detail (bsm) {
254 return request({
255 url: SERVER.SERVERAPI + '/rest/system/sysPushRecord/detail?bsm=' + bsm,
256 method: 'get'
257 })
258 }
259
234 260
235 261
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
27 </div> 27 </div>
28 </template> 28 </template>
29 <script> 29 <script>
30 import axios from 'axios'
30 import { mapGetters } from 'vuex' 31 import { mapGetters } from 'vuex'
31 import NoticeBar from '@/components/NoticeBar/index' 32 import NoticeBar from '@/components/NoticeBar/index'
32 import { 33 import {
...@@ -72,9 +73,20 @@ ...@@ -72,9 +73,20 @@
72 }) 73 })
73 }, 74 },
74 logout () { 75 logout () {
75 const url = baseUrl + "/sso-logout?redirect_uri=" + baseUrl + "/bdcdj"; 76 axios.post(this.BASE_API.ip + "/management/logout").then(() => {
76 window.open(url, "_self"); 77 localStorage.removeItem('token')
77 sessionStorage.removeItem("navList"); 78 if (window._config.casEnable) {
79 window.location.href = window._config.casBaseURL + '/logout?service=' + encodeURIComponent(window.location.href);
80 } else {
81 this.$router.push({
82 path: '/login',
83 replace: true,
84 query: {
85 redirect: router.currentRoute.value.fullPath
86 }
87 })
88 }
89 })
78 }, 90 },
79 91
80 themeChange (val) { 92 themeChange (val) {
......
1 /* 1 /*
2 * @Description: 2 * @Description:
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-05-06 09:14:47 4 * @LastEditTime: 2023-05-30 15:28:52
5 */ 5 */
6 import Vue from 'vue' 6 import Vue from 'vue'
7 import App from './App' 7 import App from './App'
...@@ -60,7 +60,7 @@ Object.keys(filters).forEach(key => { ...@@ -60,7 +60,7 @@ Object.keys(filters).forEach(key => {
60 }) 60 })
61 Vue.config.productionTip = false 61 Vue.config.productionTip = false
62 62
63 axios.get("./config.json") 63 axios.get("/config.json")
64 .then((res) => { 64 .then((res) => {
65 Vue.prototype.BASE_API = res.data 65 Vue.prototype.BASE_API = res.data
66 localStorage.setItem('ApiUrl', JSON.stringify(res.data)); 66 localStorage.setItem('ApiUrl', JSON.stringify(res.data));
......
1 /* 1 /*
2 * @Description: 项目权限 2 * @Description: 项目权限
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-05-16 14:10:26 4 * @LastEditTime: 2023-05-31 15:55:14
5 */ 5 */
6 import Vue from 'vue' 6 import Vue from 'vue'
7 import router from './router' 7 import router from './router'
8 import store from './store' 8 import store from './store'
9 import axios from 'axios'
9 import { getMenuInfo } from '@/api/user' 10 import { getMenuInfo } from '@/api/user'
11 import { getUrlParam } from '@/utils/operation'
10 import NProgress from 'nprogress' // progress bar 12 import NProgress from 'nprogress' // progress bar
11 import 'nprogress/nprogress.css' // progress bar style 13 import 'nprogress/nprogress.css' // progress bar style
12 import getPageTitle from '@/utils/get-page-title' 14 import getPageTitle from '@/utils/get-page-title'
...@@ -19,24 +21,78 @@ router.beforeEach(async (to, from, next) => { ...@@ -19,24 +21,78 @@ router.beforeEach(async (to, from, next) => {
19 document.title = getPageTitle(to.meta.title) 21 document.title = getPageTitle(to.meta.title)
20 let hasAddDict = store.state.dict.addDict 22 let hasAddDict = store.state.dict.addDict
21 let hasAddRoute = store.state.permission.addRoutes 23 let hasAddRoute = store.state.permission.addRoutes
22 if (!hasAddDict) { 24 // cas操作
23 store.dispatch('dict/generateDic') 25 const token = localStorage.getItem("token")
26 if (to.path === '/login') {
27 if (token) {
28 next('/')
29 } else {
30 next()
31 }
32 return
24 } 33 }
25 if (hasAddRoute) { 34 if (window._config.casEnable === true) {
26 next() 35 let locationUrl = window.location.protocol + '//' + window.location.host + window.location.pathname;
27 // next({ ...to, replace: true }) 36 if (!token) {
28 } else { 37 let ticket = getUrlParam('ticket');
29 const { result: getMenuData } = await getMenuInfo() 38 if (ticket) {
30 const accessRoutes = await store.dispatch('permission/generateRoutes', getMenuData) 39 axios.get(Vue.prototype.BASE_API.ip + "/management/cas/validate", {
31 // 获取用户信息 40 params: {
32 await store.dispatch('user/getUserInfo') 41 'ticket': ticket,
33 router.addRoutes([...accessRoutes, { path: '*', redirect: '/404', hidden: true }]) 42 'service': locationUrl
34 const routeTo = Cookies.get('routerTo') 43 }
35 if (routeTo && routeTo !== '/') { 44 }).then(async (res) => {
36 next({ ...to, replace: true }) 45 localStorage.setItem('token', res.data.content.accessToken)
46 window.location.href = localStorage.getItem('location')
47
48 }).catch(e => {
49 console.log(e)
50 })
51 } else {
52 localStorage.setItem("location", window.location.href)
53 window.location.href = window._config.casBaseURL + '/login?service=' + encodeURIComponent(locationUrl);
54 permission()
55 }
37 } else { 56 } else {
38 next('/home') 57 permission()
39 } 58 }
59 async function permission () {
60 if (!hasAddDict) {
61 store.dispatch('dict/generateDic')
62 }
63 if (hasAddRoute) {
64 next()
65 // next({ ...to, replace: true })
66 } else {
67 const { result: getMenuData } = await getMenuInfo()
68 const accessRoutes = await store.dispatch('permission/generateRoutes', getMenuData)
69 // 获取用户信息
70 await store.dispatch('user/getUserInfo')
71 router.addRoutes([...accessRoutes, { path: '*', redirect: '/404', hidden: true }])
72 const routeTo = Cookies.get('routerTo')
73 if (routeTo && routeTo !== '/') {
74 next({ ...to, replace: true })
75 } else {
76 next('/home')
77 }
78 }
79 }
80 } else {
81 if (!token) {
82 const redirectData = {
83 path: '/login',
84 replace: true,
85 }
86 if (to.path) {
87 redirectData.query = {
88 ...redirectData.query,
89 redirect: to.path,
90 };
91 }
92 next(redirectData)
93 return
94 }
95 next()
40 } 96 }
41 NProgress.done() 97 NProgress.done()
42 }) 98 })
......
1 /* 1 /*
2 * @Description: 全局路由 2 * @Description: 全局路由
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-05-16 14:09:37 4 * @LastEditTime: 2023-05-26 17:11:19
5 */ 5 */
6 import Vue from 'vue' 6 import Vue from 'vue'
7 import Router from 'vue-router' 7 import Router from 'vue-router'
......
1 @import "~@/styles/mixin.scss"; 1 @import "~@/styles/mixin.scss";
2 .dialogBox { 2 .dialogBox {
3 border-radius: 8px; 3 border-radius: 4px;
4 overflow: hidden; 4 overflow: hidden;
5 background: #FFFFFF; 5 background: #FFFFFF;
6 box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.10); 6 box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.10);
...@@ -8,15 +8,33 @@ ...@@ -8,15 +8,33 @@
8 .dialog_title { 8 .dialog_title {
9 display: flex; 9 display: flex;
10 position: relative; 10 position: relative;
11 top: -2px; 11 top: -4px;
12 12
13 b { 13 b {
14 @include flex-center; 14 display: flex;
15 justify-content:left;
16 align-items: center;
15 flex: 1; 17 flex: 1;
16 width: 100%; 18 width: 100%;
19 margin-left: 10px;
20 width: 79px;
21 height: 12px;
22 font-size: 16px;
23 font-family: AlibabaPuHuiTi_2_65_Medium;
24 color: #31333C;
25 line-height: 10px;
17 } 26 }
18 } 27 }
19 28 .dialog_title::before{
29 content: "";
30 display: block;
31 width: 4px;
32 height: 18px;
33 background: #2E74D8;
34 position: absolute;
35 top: -4px;
36 left: 0px;
37 }
20 .dialog_full { 38 .dialog_full {
21 position: absolute; 39 position: absolute;
22 top: 0; 40 top: 0;
...@@ -46,10 +64,7 @@ ...@@ -46,10 +64,7 @@
46 } 64 }
47 65
48 .el-dialog__header { 66 .el-dialog__header {
49 margin-bottom: 10px; 67 background: linear-gradient(270deg, #F2F3FB 0%, #5C95E5 100%);
50 color: #FFFFFF;
51 background-color: #FCFDFD;
52 border-bottom: 1px solid #E4EBF4;
53 } 68 }
54 69
55 .el-dialog__body { 70 .el-dialog__body {
...@@ -87,4 +102,4 @@ ...@@ -87,4 +102,4 @@
87 top: 50% !important; 102 top: 50% !important;
88 left: 50% !important; 103 left: 50% !important;
89 transform: translate(-50%, -50%) !important; 104 transform: translate(-50%, -50%) !important;
90 }
...\ No newline at end of file ...\ No newline at end of file
105 }
......
...@@ -179,7 +179,7 @@ ...@@ -179,7 +179,7 @@
179 // margin: 0 10px; 179 // margin: 0 10px;
180 // border-radius: 6px; 180 // border-radius: 6px;
181 span { 181 span {
182 margin-left: 10px; 182 margin-left: 5px;
183 } 183 }
184 } 184 }
185 } 185 }
......
...@@ -22,7 +22,7 @@ $menuHover:#249af4; ...@@ -22,7 +22,7 @@ $menuHover:#249af4;
22 $subMenuBg:#202B3D; 22 $subMenuBg:#202B3D;
23 $subMenuHover:#0e6fba; 23 $subMenuHover:#0e6fba;
24 24
25 $sideBarWidth: 170px; 25 $sideBarWidth: 180px;
26 $sideBarFontSize:15px; 26 $sideBarFontSize:15px;
27 27
28 // border颜色 28 // border颜色
......
...@@ -110,3 +110,26 @@ export function down (index, data) { ...@@ -110,3 +110,26 @@ export function down (index, data) {
110 data.splice(index, 0, downData); 110 data.splice(index, 0, downData);
111 } 111 }
112 } 112 }
113
114
115 export function getUrlParam (paraName) {
116 let url = document.location.toString();
117 let arrObj = url.split('?');
118
119 if (arrObj.length > 1) {
120 let arrPara = arrObj[1].split('&');
121 let arr;
122
123 for (let i = 0; i < arrPara.length; i++) {
124 arr = arrPara[i].split('=');
125
126 if (arr != null && arr[0] === paraName) {
127 const index = arr[1].indexOf("#");
128 return arr[1].substring(0, index);
129 }
130 }
131 return '';
132 } else {
133 return '';
134 }
135 }
......
1 /* 1 /*
2 * @Description: 此文件主要创建 axios 实例,然后添加请求拦截器和响应拦截器 2 * @Description: 此文件主要创建 axios 实例,然后添加请求拦截器和响应拦截器
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-05-16 14:07:58 4 * @LastEditTime: 2023-05-31 15:30:02
5 */ 5 */
6 import axios from 'axios' 6 import axios from 'axios'
7 import { Message } from 'element-ui' 7 import { Message } from 'element-ui'
...@@ -10,9 +10,9 @@ import { endLoadingSubCount } from './requestLoading' ...@@ -10,9 +10,9 @@ import { endLoadingSubCount } from './requestLoading'
10 // create an axios instance 10 // create an axios instance
11 const service = axios.create({ 11 const service = axios.create({
12 baseURL: 12 baseURL:
13 process.env.NODE_ENV == "development" 13 process.env.NODE_ENV == "development"
14 ? process.env.VUE_APP_BASE_API 14 ? process.env.VUE_APP_BASE_API
15 : window.baseUrl + "/", 15 : window.baseUrl + "/",
16 withCredentials: true, //是否允许跨域 16 withCredentials: true, //是否允许跨域
17 headers: { 17 headers: {
18 'Content-Type': 'application/json; charset=utf-8' 18 'Content-Type': 'application/json; charset=utf-8'
...@@ -23,13 +23,14 @@ const service = axios.create({ ...@@ -23,13 +23,14 @@ const service = axios.create({
23 // request interceptor 23 // request interceptor
24 service.interceptors.request.use( 24 service.interceptors.request.use(
25 config => { 25 config => {
26 // do something before request is sent 26 const token = localStorage.getItem('token')
27 if (process.env.NODE_ENV === "production") { 27 // 添加请求头
28 return config; 28 if (token) {
29 config.headers['Authorization'] = "Bearer " + token
29 } else { 30 } else {
30 config.headers.Authorization = authorization; 31 config.headers.delete('Authorization')
31 return config;
32 } 32 }
33 return config;
33 }, 34 },
34 error => { 35 error => {
35 // do something with request error 36 // do something with request error
...@@ -55,13 +56,35 @@ service.interceptors.response.use( ...@@ -55,13 +56,35 @@ service.interceptors.response.use(
55 }, 56 },
56 error => { 57 error => {
57 endLoadingSubCount() 58 endLoadingSubCount()
58 // 对响应错误做点什么 59 if (error.response.status === 401) {
59 Message({ 60 //todo: 需要解决 一个页面多个请求,刷新后此处会触发多次
60 message: '服务器异常,请联系管理员', 61 if (window.__isNeedLogin) {
61 type: 'error', 62 window.__isNeedLogin = false
62 duration: 5 * 1000, 63 this.$message.error('token失效,请重新登录');
63 customClass: 'messageIndex' 64 let locationUrl = window.location.protocol + '//' + window.location.host + window.location.pathname;
64 }) 65 localStorage.removeItem('token')
66 if (window._config.casEnable) {
67 window.location.href = window._config.casBaseURL + '/logout?service=' + encodeURIComponent(locationUrl);
68 } else {
69 router.replace({
70 path: '/login',
71 query: {
72 redirect: router.currentRoute.value.fullPath
73 }
74 })
75 return false
76 }
77 }
78
79 } else {
80 // 对响应错误做点什么
81 Message({
82 message: '服务器异常,请联系管理员',
83 type: 'error',
84 duration: 5 * 1000,
85 customClass: 'messageIndex'
86 })
87 }
65 return Promise.reject(error); 88 return Promise.reject(error);
66 } 89 }
67 ) 90 )
......
1 <!--
2 * @Description:
3 * @Autor: renchao
4 * @LastEditTime: 2023-05-26 15:40:23
5 -->
6 <template>
7 <div class="loadingtext">
8 <el-input
9 type="textarea"
10 :rows="8"
11 v-model="formData.json">
12 </el-input>
13 <div class="text-center pt-10">
14 <el-button type="primary" @click="pushRecord">推送</el-button>
15 </div>
16 </div>
17 </template>
18 <script>
19 import { pushSjsbRecord } from "@/api/zhcx.js";
20 export default {
21 props: {
22 formData: {
23 type: Object,
24 default: () => {
25 return {}
26 }
27 }
28 },
29 methods: {
30 pushRecord () {
31 this.$startLoading()
32 pushSjsbRecord(this.formData).then((res) => {
33 this.$endLoading()
34 if (res.code === 200) {
35 this.$message.success("推送成功");
36 } else {
37 this.$message.warning(res.message);
38 }
39 this.$popupCacel()
40 })
41 }
42 }
43 }
44 </script>
1 import filter from '@/utils/filter.js'
2 let vm = null
3
4 const sendThis = (_this) => {
5 vm = _this
6 }
7 class data extends filter {
8 constructor() {
9 super()
10 }
11 columns () {
12 return [
13 {
14 label: '序号',
15 type: 'index',
16 width: '50',
17 render: (h, scope) => {
18 return (
19 <div>
20 {(vm.pageData.currentPage - 1) * vm.pageData.pageSize + scope.$index + 1}
21 </div>
22 )
23 }
24 },
25 {
26 prop: "ywh",
27 label: "业务号",
28 // width: '110',
29 },
30 {
31 label: "权属状态",
32 // width: '80',
33 render: (h, scope) => {
34 let obj = {
35 "0": {
36 text: '成功',
37 color: '#4BD863'
38 },
39 "1": {
40 text: '失败',
41 color: 'red'
42 }
43 }
44 let textName = obj[scope.row.status]?.text || ''
45 let colorName = obj[scope.row.status]?.color || ''
46 return (
47 <div>
48 <span style={`color:${colorName}`}>&nbsp;</span>
49 <span >{textName}</span>
50 </div>
51 )
52 }
53 },
54 {
55 prop: "createtime",
56 label: "创建时间",
57 // width: '180',
58 },
59 {
60 label: '操作',
61 width: '130',
62 render: (h, scope) => {
63 return (
64 <div>
65 <el-button type="text" icon="el-icon-edit-outline" onClick={() => { vm.detail(scope.row) }}>详情</el-button>
66 </div>
67 )
68 }
69 }
70 ]
71 }
72
73 }
74 let datas = new data()
75 export {
76 datas,
77 sendThis
78 }
1 <template>
2 <div class="from-clues">
3 <!-- 表单部分 -->
4 <div class="from-clues-header">
5 <el-form :model="queryForm" ref="queryForm" @submit.native.prevent label-width="70px">
6 <el-row>
7 <el-col :span="5">
8 <el-form-item label="业务号">
9 <el-input placeholder="请输入业务号" v-model="queryForm.ywh" clearable class="width100">
10 </el-input>
11 </el-form-item>
12 </el-col>
13
14 <el-col :span="4" class="btnColRight">
15 <el-form-item>
16 <el-button type="primary" native-type="submit" @click="handleSearch">查询</el-button>
17 </el-form-item>
18 </el-col>
19 </el-row>
20 </el-form>
21 </div>
22 <!-- 表格 -->
23 <div class="from-clues-content">
24 <lb-table :page-size="pageData.size" class="loadingtext"
25 :current-page.sync="pageData.current" :total="tableData.total" @size-change="handleSizeChange"
26 @p-current-change="handleCurrentChange" :column="tableData.columns" :data="tableData.data">
27 </lb-table>
28 </div>
29 </div>
30 </template>
31 <script>
32 import { mapGetters } from "vuex";
33 import table from "@/utils/mixin/table";
34 import { datas, sendThis } from "./djbcxdata";
35 import { getSjsbPushList, detail } from "@/api/zhcx.js";
36
37 export default {
38 name: "djbcx",
39 mixins: [table],
40 mounted () {
41 sendThis(this);
42 this.queryClick()
43 },
44 data () {
45 return {
46 queryForm: {
47 qllx: "",
48 bdcdyh: "",
49 bdcqzh: "",
50 ywh: "",
51 },
52 pageData: {
53 current: 1,
54 size: 10,
55 total: 0,
56 },
57 tableData: {
58 columns: datas.columns(),
59 data: [],
60 }
61 }
62 },
63 computed: {
64 ...mapGetters(["dictData"])
65 },
66 methods: {
67 // 初始化数据
68 queryClick () {
69 this.$startLoading()
70 getSjsbPushList({ ...this.queryForm, ...this.pageData }).then((res) => {
71 this.$endLoading()
72 if (res.code === 200) {
73 let { total, records } = res.result;
74 this.tableData.data = records;
75 this.tableData.total = total;
76 }
77 });
78 },
79 openDialog (scroll) {
80 const h = this.$createElement;
81 this.$msgbox({
82 title: '推送',
83 message: h('p', null, [
84 h('span', null, '是否推送 '),
85 h('i', { style: 'color: teal' }, scroll.ywh),
86 h('span', null, ' 记录')
87 ]),
88 showCancelButton: true,
89 confirmButtonText: '确定',
90 cancelButtonText: '取消',
91 beforeClose: (action, instance, done) => {
92 if (action === 'confirm') {
93 this.pushRecord(scroll, done);
94 } else {
95 done();
96 }
97 }
98 }).then(action => { });
99 },
100 detail (row) {
101 detail(row.bsm).then((res) => {
102 this.$endLoading()
103 if (res.code === 200) {
104 this.$popupDialog("详情", "sjgx/sbxtsjts/dialog/detail", res.result, "60%")
105 } else {
106 this.$message.warning(res.message);
107 }
108 })
109 }
110 }
111 }
112 </script>
113 <style scoped lang="scss">
114 @import "~@/styles/public.scss";
115
116 .icon-circle {
117 position: relative;
118 }
119
120 .icon-circle::before {
121 content: "";
122 width: 4px;
123 height: 4px;
124 border-radius: 50%;
125 background: #000;
126 top: 0px;
127 left: 0px;
128 }
129 </style>
...@@ -46,8 +46,8 @@ class data extends filter { ...@@ -46,8 +46,8 @@ class data extends filter {
46 label: '登记情形编码', 46 label: '登记情形编码',
47 render: (h, scope) => { 47 render: (h, scope) => {
48 return ( 48 return (
49 <el-input placeholder="登记情形编码" class={{ repeat: scope.row.repeat }} value={scope.row[scope.column.property]} 49 <el-input placeholder="登记情形编码" value={scope.row[scope.column.property]}
50 onInput={(val) => { scope.row[scope.column.property] = val; orderNoChange() }} maxlength="8"> 50 onInput={(val) => { scope.row[scope.column.property] = val; vm.orderNoChange() }} maxlength="8">
51 </el-input> 51 </el-input>
52 ) 52 )
53 } 53 }
...@@ -58,7 +58,7 @@ class data extends filter { ...@@ -58,7 +58,7 @@ class data extends filter {
58 render: (h, scope) => { 58 render: (h, scope) => {
59 return ( 59 return (
60 <el-input placeholder="登记情形名称" value={scope.row[scope.column.property]} 60 <el-input placeholder="登记情形名称" value={scope.row[scope.column.property]}
61 onInput={(val) => { scope.row[scope.column.property] = val; orderNoChange() }}> 61 onInput={(val) => { scope.row[scope.column.property] = val; vm.orderNoChange() }}>
62 </el-input> 62 </el-input>
63 ) 63 )
64 } 64 }
......
...@@ -153,7 +153,9 @@ ...@@ -153,7 +153,9 @@
153 activeName: "1", 153 activeName: "1",
154 form: { 154 form: {
155 bsmSqyw: '', 155 bsmSqyw: '',
156 ywDetail: {} 156 ywDetail: {},
157 djqx: [],
158 clxx: []
157 }, 159 },
158 djqxCol: datas.djqxCol(), 160 djqxCol: datas.djqxCol(),
159 clxxCol: datas.clxxCol(), 161 clxxCol: datas.clxxCol(),
...@@ -205,15 +207,16 @@ ...@@ -205,15 +207,16 @@
205 }, 207 },
206 //获取业务具体明细内容 208 //获取业务具体明细内容
207 getDetail (bsmSqyw) { 209 getDetail (bsmSqyw) {
210 let _this = this
208 getSqdjywDetail(bsmSqyw).then((res) => { 211 getSqdjywDetail(bsmSqyw).then((res) => {
209 if (res.code === 200) { 212 if (res.code === 200) {
210 // this.form.bsmSqyw = res.result.bsmSqyw 213 _this.form.bsmSqyw = res.result.bsmSqyw
211 // this.form.ywDetail = res.result.ywDetail 214 _this.form.ywDetail = res.result.ywDetail
212 this.$set(this.form, 'djqx', res.result.djqx) 215 _this.$set(_this.form, 'djqx', res.result.djqx)
213 // this.$set(this.form, 'sxql', res.result.sxql) 216 _this.$set(_this.form, 'sxql', res.result.sxql)
214 this.$set(this.form, 'clxx', res.result.clxx) 217 _this.$set(_this.form, 'clxx', res.result.clxx)
215 // this.$set(this.form, 'sxzt', res.result.sxzt) 218 _this.$set(_this.form, 'sxzt', res.result.sxzt)
216 // this.$set(this.form, 'ywDetail', res.result.ywDetail) 219 _this.$set(_this.form, 'ywDetail', res.result.ywDetail)
217 } else { 220 } else {
218 this.$alert(res.message) 221 this.$alert(res.message)
219 } 222 }
...@@ -289,7 +292,6 @@ ...@@ -289,7 +292,6 @@
289 .el-radio-group { 292 .el-radio-group {
290 white-space: nowrap; 293 white-space: nowrap;
291 } 294 }
292
293 .form { 295 .form {
294 background: #eee; 296 background: #eee;
295 padding: 0 10px; 297 padding: 0 10px;
......
No preview for this file type
1 <!-- 1 <!--
2 * @Description: 2 * @Description:
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-05-17 10:40:23 4 * @LastEditTime: 2023-05-31 16:04:44
5 --> 5 -->
6 <template> 6 <template>
7 <div class="from-clues loadingtext" v-Loading="loading" element-loading-text="拼命加载中..." style="height:720px"> 7 <div class="from-clues loadingtext" v-Loading="loading" element-loading-text="拼命加载中..." style="height:720px">
...@@ -11,7 +11,8 @@ ...@@ -11,7 +11,8 @@
11 v-for="(item, index) in headTabBdcqz" :key="index"></el-tab-pane> 11 v-for="(item, index) in headTabBdcqz" :key="index"></el-tab-pane>
12 </el-tabs> 12 </el-tabs>
13 <div class="no-data" v-if="headTabBdcqz.length == 0">暂无数据</div> 13 <div class="no-data" v-if="headTabBdcqz.length == 0">暂无数据</div>
14 <img :src="previewImage" class="imgClass"> 14 <!-- <img :src="previewImage" class="imgClass"> -->
15 <canvas ref="canvas" :width="canvasWidth" :height="canvasHeight"></canvas>
15 </div> 16 </div>
16 </template> 17 </template>
17 18
...@@ -20,8 +21,6 @@ ...@@ -20,8 +21,6 @@
20 import { getSlsqBdcqzList, bdcqzPreview } from "@/api/bdcqz.js" 21 import { getSlsqBdcqzList, bdcqzPreview } from "@/api/bdcqz.js"
21 export default { 22 export default {
22 name: "zsyl", 23 name: "zsyl",
23 components: {
24 },
25 props: { 24 props: {
26 formData: { 25 formData: {
27 type: Object, 26 type: Object,
...@@ -30,6 +29,10 @@ ...@@ -30,6 +29,10 @@
30 }, 29 },
31 data () { 30 data () {
32 return { 31 return {
32 imgSrc: require('@/image/bdcqz/bdcqzs2.jpg'),
33 canvasWidth: 1018,
34 canvasHeight: 720,
35
33 loading: false, 36 loading: false,
34 //印刷序列号集合 37 //印刷序列号集合
35 ysxlh: [], 38 ysxlh: [],
...@@ -79,28 +82,54 @@ ...@@ -79,28 +82,54 @@
79 this.activeName = res.result[0].bsmBdcqz 82 this.activeName = res.result[0].bsmBdcqz
80 this.bdcqz = res.result[0] 83 this.bdcqz = res.result[0]
81 this.headTabBdcqz = res.result 84 this.headTabBdcqz = res.result
82 this.getBdcqzPreview(); 85 this.drawTextOnImage();
83 } else {
84 this.loading = false
85 } 86 }
86 } 87 }
87 88 this.loading = false
88 }) 89 })
89 }, 90 },
90 //tab表头切换方法 91 //tab表头切换方法
91 handleClick (e) { 92 handleClick (e) {
92 this.bdcqz = this.headTabBdcqz[e.index - 0] 93 this.bdcqz = this.headTabBdcqz[e.index - 0]
93 this.activeName = this.headTabBdcqz.bsmBdcqz 94 this.activeName = this.headTabBdcqz.bsmBdcqz
94 this.getBdcqzPreview(); 95 // this.getBdcqzPreview();
95 }, 96 this.drawTextOnImage()
96 getBdcqzPreview () {
97 bdcqzPreview(this.bdcqz).then(res => {
98 this.loading = false
99 let blob = new Blob([res]);
100 let url = window.URL.createObjectURL(blob);
101 this.previewImage = url;
102 })
103 }, 97 },
98 // getBdcqzPreview () {
99 // bdcqzPreview(this.bdcqz).then(res => {
100 // this.loading = false
101 // let blob = new Blob([res]);
102 // let url = window.URL.createObjectURL(blob);
103 // this.previewImage = url;
104 // this.drawTextOnImage()
105 // })
106 // },
107 drawTextOnImage () {
108 const canvas = this.$refs.canvas;
109 const context = canvas.getContext('2d');
110 const image = new Image();
111 image.onload = () => {
112 context.drawImage(image, 0, 0);
113 context.font = '15px 楷体';
114 context.fillStyle = '#000000';
115 context.fillText(this.bdcqz.sjjc ? this.bdcqz.sjjc : '', 60, 56);
116 context.fillText(this.bdcqz.djnd ? this.bdcqz.djnd : '', 113, 56);
117 context.fillText(this.bdcqz.sxqc ? this.bdcqz.sxqc : '', 180, 56);
118 context.fillText(this.bdcqz.sxh ? this.bdcqz.sxh : '', 370, 56);
119 context.fillText(this.bdcqz.qlr ? this.bdcqz.qlr : '', 138, 97);
120 context.fillText(this.bdcqz.gyqk ? this.bdcqz.gyqk : '', 138, 138);
121 context.fillText(this.bdcqz.zl ? this.bdcqz.zl : '', 138, 180);
122 context.fillText(this.bdcqz.bdcdyh ? this.bdcqz.bdcdyh : '', 138, 223);
123 context.fillText(this.bdcqz.qllx ? this.bdcqz.qllx : '', 138, 263);
124 context.fillText(this.bdcqz.qlxz ? this.bdcqz.qlxz : '', 138, 303);
125 context.fillText(this.bdcqz.yt ? this.bdcqz.yt : '', 138, 346);
126 context.fillText(this.bdcqz.mj ? this.bdcqz.mj : '', 138, 386);
127 context.fillText(this.bdcqz.syqx ? this.bdcqz.syqx : '', 138, 429);
128 context.fillText(this.bdcqz.qlqtzk ? this.bdcqz.qlqtzk : '', 138, 469);
129 context.fillText(this.bdcqz.fj ? this.bdcqz.fj : '', 580, 100);
130 }
131 image.src = this.imgSrc;
132 }
104 } 133 }
105 } 134 }
106 </script> 135 </script>
......
1 <!--
2 功能:初始化功能描述
3 作者:calliope
4 -->
5 <template>
6 <canvas id="mxcad">
7 </canvas>
8 </template>
9 <script>
10 import Mx from "mxdraw"
11 export default {
12 mounted () {
13 // 动态加载 js库核心代码
14 Mx.loadCoreCode().then(() => {
15 // Mx.MxFun.setMxServer("ws://localhost:5090") // 开启socket通信 可编辑图纸
16 // 创建控件对象
17 Mx.MxFun.createMxObject({
18 canvasId: "mxcad", // canvas元素的id
19 cadFile: "./cad.dwg", // http方式(预览): 加载public/demo文件夹下转换后的图纸
20 // cadFile: "test2.dwg", // socket通信方式请直接提供图纸名称 如:text.dwg
21 callback: (mxDraw, {
22 canvas,
23 canvasParent
24 }) => {
25 // 可以拿到canvas元素和它的父级元素
26 console.log(canvas, canvasParent)
27 console.log(mxDraw)
28 // 拿到图层数据
29 mxDraw.addEvent('uiSetLayerData', (listLayer) => {
30 console.log(listLayer)
31 })
32 },
33 isNewFile: true // 是否新建文件
34 })
35 })
36 }
37 }
38 </script>
39 <style scoped lang='scss'>
40 #cad-container {
41 width: 100%;
42 height: 100%;
43 }
44 </style>
...\ No newline at end of file ...\ No newline at end of file
1 /* 1 /*
2 * @Description: 2 * @Description:
3 * @Autor: renchao 3 * @Autor: renchao
4 * @LastEditTime: 2023-05-17 10:38:37 4 * @LastEditTime: 2023-05-29 14:39:11
5 */ 5 */
6 //流程环节操作按钮 6 //流程环节操作按钮
7 export function getForm (tabName, djywbm) { 7 export function getForm (tabName, djywbm) {
...@@ -86,6 +86,9 @@ export function getForm (tabName, djywbm) { ...@@ -86,6 +86,9 @@ export function getForm (tabName, djywbm) {
86 case "fzxx": 86 case "fzxx":
87 form = require("@/views/workflow/components/fzxx.vue"); 87 form = require("@/views/workflow/components/fzxx.vue");
88 break; 88 break;
89 case "zdt":
90 form = require("@/views/workflow/components/zdt.vue");
91 break;
89 default: 92 default:
90 form = require("@/views/error-page/404.vue"); 93 form = require("@/views/error-page/404.vue");
91 break; 94 break;
......
...@@ -6,7 +6,6 @@ function resolve (dir) { ...@@ -6,7 +6,6 @@ function resolve (dir) {
6 return path.join(__dirname, dir) 6 return path.join(__dirname, dir)
7 } 7 }
8 8
9 const name = defaultSettings.title
10 const port = process.env.port || process.env.npm_config_port || 8888 // dev port 9 const port = process.env.port || process.env.npm_config_port || 8888 // dev port
11 10
12 // All configuration item explanations can be find in https://cli.vuejs.org/config/ 11 // All configuration item explanations can be find in https://cli.vuejs.org/config/
...@@ -19,7 +18,7 @@ module.exports = { ...@@ -19,7 +18,7 @@ module.exports = {
19 * Detail: https://cli.vuejs.org/config/#publicpath 18 * Detail: https://cli.vuejs.org/config/#publicpath
20 */ 19 */
21 // 加载资源的路径 20 // 加载资源的路径
22 publicPath: '/bdcdj/', 21 publicPath: '/dj/',
23 // 设置项目打包生成的文件的存储目录,可以是静态路径也可以是相对路径 22 // 设置项目打包生成的文件的存储目录,可以是静态路径也可以是相对路径
24 outputDir: 'dist', 23 outputDir: 'dist',
25 // 设置放置打包生成的静态资源 (js、css、img、fonts) 的目录 24 // 设置放置打包生成的静态资源 (js、css、img、fonts) 的目录
...@@ -60,7 +59,6 @@ module.exports = { ...@@ -60,7 +59,6 @@ module.exports = {
60 }, 59 },
61 // configureWebpack通过操作对象的形式,来修改默认的webpack配置 60 // configureWebpack通过操作对象的形式,来修改默认的webpack配置
62 configureWebpack: { 61 configureWebpack: {
63 name: name,
64 entry: { 62 entry: {
65 app: './src/main.js' 63 app: './src/main.js'
66 }, 64 },
...@@ -69,7 +67,7 @@ module.exports = { ...@@ -69,7 +67,7 @@ module.exports = {
69 '@': resolve('src') 67 '@': resolve('src')
70 } 68 }
71 }, 69 },
72 devtool: '#eval-source-map' //测试 70 devtool: process.env.NODE_ENV === 'development' ? '#eval-source-map' : false
73 }, 71 },
74 // chainWebpack通过链式编程的形式,来修改默认的webpack配置 72 // chainWebpack通过链式编程的形式,来修改默认的webpack配置
75 chainWebpack (config) { 73 chainWebpack (config) {
...@@ -83,8 +81,8 @@ module.exports = { ...@@ -83,8 +81,8 @@ module.exports = {
83 include: 'initial' 81 include: 'initial'
84 } 82 }
85 ]) 83 ])
86 config.plugins.delete('prefetch')
87 // when there are many pages, it will cause too many meaningscss requests 84 // when there are many pages, it will cause too many meaningscss requests
85 config.plugins.delete('prefetch')
88 config.module 86 config.module
89 .rule('svg') 87 .rule('svg')
90 .exclude.add(resolve('src/image/icons')) 88 .exclude.add(resolve('src/image/icons'))
......