提交 da5ace33 编写于 作者: JEECG低代码平台's avatar JEECG低代码平台

JeecgBoot2.4.3版本发布——企业级低代码平台

上级 46740970
NODE_ENV=production NODE_ENV=production
VUE_APP_PLATFORM_NAME=JeecgBoot 企业级快速开发平台 VUE_APP_PLATFORM_NAME=JeecgBoot 企业级低代码平台
VUE_APP_SSO=false VUE_APP_SSO=false
\ No newline at end of file
Ant Design Jeecg Vue Ant Design Jeecg Vue
==== ====
当前最新版本: 2.4.2(发布日期:20210126 当前最新版本: 2.4.3(发布日期:20210322
Overview Overview
---- ----
基于 [Ant Design of Vue](https://vuecomponent.github.io/ant-design-vue/docs/vue/introduce-cn/) 实现的 Ant Design Pro Vue 版 基于 [Ant Design of Vue](https://vuecomponent.github.io/ant-design-vue/docs/vue/introduce-cn/) 实现的 Ant Design Pro Vue 版
Jeecg-boot 的前段UI框架,采用前后端分离方案,提供强大代码生成器的快速开发平台。 Jeecg-boot 的前段UI框架,采用前后端分离方案,提供强大代码生成器的低代码平台。
前端页面代码和后端功能代码一键生成,不需要写任何代码,保持jeecg一贯的强大!! 前端页面代码和后端功能代码一键生成,不需要写任何代码,保持jeecg一贯的强大!!
......
{ {
"name": "vue-antd-jeecg", "name": "vue-antd-jeecg",
"version": "2.4.2", "version": "2.4.3",
"private": true, "private": true,
"scripts": { "scripts": {
"pre": "cnpm install || yarn --registry https://registry.npm.taobao.org || npm install --registry https://registry.npm.taobao.org ", "pre": "cnpm install || yarn --registry https://registry.npm.taobao.org || npm install --registry https://registry.npm.taobao.org ",
...@@ -10,8 +10,8 @@ ...@@ -10,8 +10,8 @@
"lint": "vue-cli-service lint" "lint": "vue-cli-service lint"
}, },
"dependencies": { "dependencies": {
"@jeecg/antd-online-mini": "2.4.22-beta",
"ant-design-vue": "^1.7.2", "ant-design-vue": "^1.7.2",
"@jeecg/antd-online-mini": "2.4.3-RC",
"@antv/data-set": "^0.11.4", "@antv/data-set": "^0.11.4",
"viser-vue": "^2.4.8", "viser-vue": "^2.4.8",
"axios": "^0.18.0", "axios": "^0.18.0",
......
...@@ -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>JeecgBoot 企业级快速开发平台</title> <title>JeecgBoot 企业级低代码平台</title>
<link rel="icon" href="<%= BASE_URL %>logo.png"> <link rel="icon" href="<%= BASE_URL %>logo.png">
<script src="<%= BASE_URL %>cdn/babel-polyfill/polyfill_7_2_5.js"></script> <script src="<%= BASE_URL %>cdn/babel-polyfill/polyfill_7_2_5.js"></script>
<style> <style>
...@@ -251,7 +251,7 @@ ...@@ -251,7 +251,7 @@
<div id="loader"></div> <div id="loader"></div>
<div class="loader-section section-left"></div> <div class="loader-section section-left"></div>
<div class="loader-section section-right"></div> <div class="loader-section section-right"></div>
<div class="load_title">正在加载 JeecgBoot 快速开发平台,请耐心等待 <div class="load_title">正在加载 JeecgBoot 低代码平台,请耐心等待
</div> </div>
</div> </div>
......
...@@ -38,6 +38,7 @@ const queryPermissionRule = (params)=>getAction("/sys/permission/queryPermission ...@@ -38,6 +38,7 @@ const queryPermissionRule = (params)=>getAction("/sys/permission/queryPermission
// 部门管理 // 部门管理
const queryDepartTreeList = (params)=>getAction("/sys/sysDepart/queryTreeList",params); const queryDepartTreeList = (params)=>getAction("/sys/sysDepart/queryTreeList",params);
const queryDepartTreeSync = (params)=>getAction("/sys/sysDepart/queryDepartTreeSync",params);
const queryIdTree = (params)=>getAction("/sys/sysDepart/queryIdTree",params); const queryIdTree = (params)=>getAction("/sys/sysDepart/queryIdTree",params);
const queryParentName = (params)=>getAction("/sys/sysDepart/queryParentName",params); const queryParentName = (params)=>getAction("/sys/sysDepart/queryParentName",params);
const searchByKeywords = (params)=>getAction("/sys/sysDepart/searchBy",params); const searchByKeywords = (params)=>getAction("/sys/sysDepart/searchBy",params);
...@@ -52,7 +53,6 @@ const saveDeptRolePermission = (params)=>postAction("/sys/sysDepartPermission/sa ...@@ -52,7 +53,6 @@ const saveDeptRolePermission = (params)=>postAction("/sys/sysDepartPermission/sa
const queryMyDepartTreeList = (params)=>getAction("/sys/sysDepart/queryMyDeptTreeList",params); const queryMyDepartTreeList = (params)=>getAction("/sys/sysDepart/queryMyDeptTreeList",params);
//日志管理 //日志管理
//const getLogList = (params)=>getAction("/sys/log/list",params);
const deleteLog = (params)=>deleteAction("/sys/log/delete",params); const deleteLog = (params)=>deleteAction("/sys/log/delete",params);
const deleteLogList = (params)=>deleteAction("/sys/log/deleteBatch",params); const deleteLogList = (params)=>deleteAction("/sys/log/deleteBatch",params);
...@@ -69,7 +69,7 @@ export const ajaxGetDictItems = (code, params)=>getAction(`/sys/dict/getDictItem ...@@ -69,7 +69,7 @@ export const ajaxGetDictItems = (code, params)=>getAction(`/sys/dict/getDictItem
function getDictItemsFromCache(dictCode) { function getDictItemsFromCache(dictCode) {
if (Vue.ls.get(UI_CACHE_DB_DICT_DATA) && Vue.ls.get(UI_CACHE_DB_DICT_DATA)[dictCode]) { if (Vue.ls.get(UI_CACHE_DB_DICT_DATA) && Vue.ls.get(UI_CACHE_DB_DICT_DATA)[dictCode]) {
let dictItems = Vue.ls.get(UI_CACHE_DB_DICT_DATA)[dictCode]; let dictItems = Vue.ls.get(UI_CACHE_DB_DICT_DATA)[dictCode];
console.log("-----------getDictItemsFromCache----------dictCode="+dictCode+"---- dictItems=",dictItems) //console.log("-----------getDictItemsFromCache----------dictCode="+dictCode+"---- dictItems=",dictItems)
return dictItems; return dictItems;
} }
} }
...@@ -101,6 +101,8 @@ export const transitRESTful = { ...@@ -101,6 +101,8 @@ export const transitRESTful = {
} }
export { export {
// imgView,
// doMian,
addRole, addRole,
editRole, editRole,
checkRoleCode, checkRoleCode,
...@@ -124,6 +126,7 @@ export { ...@@ -124,6 +126,7 @@ export {
getPermissionRuleList, getPermissionRuleList,
queryPermissionRule, queryPermissionRule,
queryDepartTreeList, queryDepartTreeList,
queryDepartTreeSync,
queryIdTree, queryIdTree,
queryParentName, queryParentName,
searchByKeywords, searchByKeywords,
......
...@@ -12,13 +12,13 @@ export default class Area { ...@@ -12,13 +12,13 @@ export default class Area {
let arr = [] let arr = []
const province = pcaa['86'] const province = pcaa['86']
Object.keys(province).map(key=>{ Object.keys(province).map(key=>{
arr.push({id:key, text:province[key], pid:'86'}); arr.push({id:key, text:province[key], pid:'86', index:1});
const city = pcaa[key]; const city = pcaa[key];
Object.keys(city).map(key2=>{ Object.keys(city).map(key2=>{
arr.push({id:key2, text:city[key2], pid:key}); arr.push({id:key2, text:city[key2], pid:key, index:2});
const qu = pcaa[key2]; const qu = pcaa[key2];
Object.keys(qu).map(key3=>{ Object.keys(qu).map(key3=>{
arr.push({id:key3, text:qu[key3], pid:key2}); arr.push({id:key3, text:qu[key3], pid:key2, index:3});
}) })
}) })
}) })
...@@ -45,33 +45,35 @@ export default class Area { ...@@ -45,33 +45,35 @@ export default class Area {
return '' return ''
} }
let arr = [] let arr = []
this.getAreaBycode(code,arr); this.getAreaBycode(code, arr, 3);
return arr.join('/') return arr.join('/')
} }
getRealCode(code){ getRealCode(code){
let arr = [] let arr = []
this.getPcode(code, arr) this.getPcode(code, arr, 3)
return arr; return arr;
} }
getPcode(id, arr){ getPcode(id, arr, index){
for(let item of this.all){ for(let item of this.all){
if(item.id === id){ if(item.id === id && item.index == index){
arr.unshift(id) arr.unshift(id)
if(item.pid != '86'){ if(item.pid != '86'){
this.getPcode(item.pid,arr) this.getPcode(item.pid, arr, --index)
} }
} }
} }
} }
getAreaBycode(code,arr){ getAreaBycode(code, arr, index){
//console.log("this.all.length",this.all)
for(let item of this.all){ for(let item of this.all){
if(item.id === code){ if(item.id === code && item.index == index){
arr.unshift(item.text); arr.unshift(item.text);
this.getAreaBycode(item.pid,arr) if(item.pid != '86'){
this.getAreaBycode(item.pid, arr, --index)
}
} }
} }
} }
......
...@@ -128,6 +128,9 @@ ...@@ -128,6 +128,9 @@
this.reload() this.reload()
} }
}) })
//update--begin--autor:liusq-----date:20210316------for:富文本编辑器tab父组件可能导致的赋值问题------
this.reload()
//update--end--autor:liusq-----date:20210316------for:富文本编辑器tab父组件可能导致的赋值问题------
}else{ }else{
//update--begin--autor:wangshuai-----date:20200724------for:富文本编辑器切换tab无法修改------ //update--begin--autor:wangshuai-----date:20200724------for:富文本编辑器切换tab无法修改------
let tabLayout = getVmParentByName(this, 'TabLayout') let tabLayout = getVmParentByName(this, 'TabLayout')
......
...@@ -8,10 +8,11 @@ ...@@ -8,10 +8,11 @@
v-on="$listeners" v-on="$listeners"
@ok="handleOk" @ok="handleOk"
@cancel="handleCancel" @cancel="handleCancel"
destroyOnClose
> >
<slot></slot> <slot></slot>
<!--有设置标题-->
<template v-if="!isNoTitle" slot="title"> <template v-if="!isNoTitle" slot="title">
<a-row class="j-modal-title-row" type="flex"> <a-row class="j-modal-title-row" type="flex">
<a-col class="left"> <a-col class="left">
...@@ -22,6 +23,14 @@ ...@@ -22,6 +23,14 @@
</a-col> </a-col>
</a-row> </a-row>
</template> </template>
<!--没有设置标题-->
<template v-else slot="title">
<a-row class="j-modal-title-row" type="flex">
<a-col v-if="switchFullscreen" class="right" @click="toggleFullscreen">
<a-button class="ant-modal-close ant-modal-close-x" ghost type="link" :icon="fullscreenButtonIcon"/>
</a-col>
</a-row>
</template>
<!-- 处理 scopedSlots --> <!-- 处理 scopedSlots -->
<template v-for="slotName of scopedSlotsKeys" :slot="slotName"> <template v-for="slotName of scopedSlotsKeys" :slot="slotName">
...@@ -161,7 +170,6 @@ ...@@ -161,7 +170,6 @@
<style lang="less"> <style lang="less">
.j-modal-box { .j-modal-box {
&.fullscreen { &.fullscreen {
top: 0; top: 0;
left: 0; left: 0;
...@@ -190,7 +198,6 @@ ...@@ -190,7 +198,6 @@
height: calc(100% - 55px); height: calc(100% - 55px);
} }
} }
&.no-title.no-footer { &.no-title.no-footer {
.ant-modal-body { .ant-modal-body {
height: 100%; height: 100%;
...@@ -217,6 +224,12 @@ ...@@ -217,6 +224,12 @@
} }
} }
} }
&.no-title{
.ant-modal-header {
padding: 0px 24px;
border-bottom: 0px !important;
}
}
} }
@media (max-width: 767px) { @media (max-width: 767px) {
......
...@@ -298,7 +298,11 @@ export function dispatchEvent({cell, $event}, className, handler) { ...@@ -298,7 +298,11 @@ export function dispatchEvent({cell, $event}, className, handler) {
handler(element[0]) handler(element[0])
} else { } else {
// 模拟触发点击事件 // 模拟触发点击事件
element[0].dispatchEvent($event) console.log($event)
if($event){
console.log("$event===>",$event)
element[0].dispatchEvent($event)
}
} }
} }
}, 10) }, 10)
......
...@@ -141,6 +141,33 @@ export async function validateFormAndTables(form, cases, autoJumpTab) { ...@@ -141,6 +141,33 @@ export async function validateFormAndTables(form, cases, autoJumpTab) {
return dataMap return dataMap
} }
/**
* 一次性验证主表单和所有的次表单
* @param form 主表单 form 对象
* @param cases 接收一个数组,每项都是一个JVxeTable实例
* @param autoJumpTab
* @returns {Promise<any>}
* @author sunjianlei
*/
export async function validateFormModelAndTables(form,formData, cases, autoJumpTab) {
if (!(form && typeof form.validate === 'function')) {
throw `form 参数需要的是一个form对象,而传入的却是${typeof form}`
}
let dataMap = {}
let values = await new Promise((resolve, reject) => {
// 验证主表表单
form.validate((valid,obj) => {
valid ?resolve(formData): reject({error: VALIDATE_FAILED, originError: valid})
})
})
Object.assign(dataMap, {formValue: values})
// 验证所有子表的表单
let subData = await validateTables(cases, autoJumpTab)
// 合并最终数据
dataMap = Object.assign(dataMap, {tablesValue: subData})
return dataMap
}
/** /**
* 验证并获取一个或多个表格的所有值 * 验证并获取一个或多个表格的所有值
* *
......
...@@ -342,7 +342,13 @@ ...@@ -342,7 +342,13 @@
combineRowKey(record){ combineRowKey(record){
let res = '' let res = ''
Object.keys(record).forEach(key=>{ Object.keys(record).forEach(key=>{
res+=record[key] //update-begin---author:liusq Date:20210203 for:pop选择器列主键问题 issues/I29P9Q------------
if(key=='id'){
res=record[key]+res
}else{
res+=record[key]
}
//update-end---author:liusq Date:20210203 for:pop选择器列主键问题 issues/I29P9Q------------
}) })
if(res.length>50){ if(res.length>50){
res = res.substring(0,50) res = res.substring(0,50)
......
...@@ -95,7 +95,6 @@ ...@@ -95,7 +95,6 @@
}).join(',') }).join(',')
} }
//update-end-author:lvdandan date:20200513 for:TESTA-438 部门选择组件自定义返回值,数据无法回填 //update-end-author:lvdandan date:20200513 for:TESTA-438 部门选择组件自定义返回值,数据无法回填
this.backDeparInfo()
}, },
//返回选中的部门信息 //返回选中的部门信息
backDeparInfo(){ backDeparInfo(){
...@@ -128,6 +127,7 @@ ...@@ -128,6 +127,7 @@
this.departIds = idstr this.departIds = idstr
} }
this.$emit("change", value) this.$emit("change", value)
this.backDeparInfo()
}, },
getDepartNames(){ getDepartNames(){
return this.departNames return this.departNames
......
...@@ -167,7 +167,9 @@ ...@@ -167,7 +167,9 @@
if(!this.checkedKeys || this.checkedKeys.length==0){ if(!this.checkedKeys || this.checkedKeys.length==0){
this.$emit("ok",'') this.$emit("ok",'')
}else{ }else{
this.$emit("ok",this.checkedRows,this.checkedKeys.join(",")) let checkRow = this.getCheckedRows(this.checkedKeys)
let keyStr = this.checkedKeys.join(",")
this.$emit("ok", checkRow, keyStr)
} }
this.handleClear() this.handleClear()
}, },
......
...@@ -171,7 +171,7 @@ ...@@ -171,7 +171,7 @@
// update-begin-author:sunjianlei date:20200120 for: 动态更改页面标题 // update-begin-author:sunjianlei date:20200120 for: 动态更改页面标题
changeTitle(title) { changeTitle(title) {
let projectTitle = "Jeecg-Boot 企业级快速开发平台" let projectTitle = "Jeecg-Boot 企业级低代码平台"
// 首页特殊处理 // 首页特殊处理
if (this.$route.path === indexKey) { if (this.$route.path === indexKey) {
document.title = projectTitle document.title = projectTitle
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
</a> </a>
</div> </div>
<div class="desc"> <div class="desc">
Jeecg Boot 是中国最具影响力的 企业级 快速开发平台 Jeecg Boot 是中国最具影响力的 企业级 低代码平台
</div> </div>
</div> </div>
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
:type="collapsed ? 'menu-unfold' : 'menu-fold'" :type="collapsed ? 'menu-unfold' : 'menu-fold'"
@click="toggle"/> @click="toggle"/>
<span v-if="device === 'desktop'">欢迎进入 Jeecg-Boot 企业级快速开发平台</span> <span v-if="device === 'desktop'">欢迎进入 Jeecg-Boot 企业级低代码平台</span>
<span v-else>Jeecg-Boot</span> <span v-else>Jeecg-Boot</span>
<user-menu :theme="theme"/> <user-menu :theme="theme"/>
...@@ -50,7 +50,6 @@ ...@@ -50,7 +50,6 @@
import UserMenu from '../tools/UserMenu' import UserMenu from '../tools/UserMenu'
import SMenu from '../menu/' import SMenu from '../menu/'
import Logo from '../tools/Logo' import Logo from '../tools/Logo'
import { mixin } from '@/utils/mixin.js' import { mixin } from '@/utils/mixin.js'
export default { export default {
......
...@@ -20,7 +20,6 @@ import 'ant-design-vue/dist/antd.less'; // or 'ant-design-vue/dist/antd.less' ...@@ -20,7 +20,6 @@ import 'ant-design-vue/dist/antd.less'; // or 'ant-design-vue/dist/antd.less'
import '@/permission' // permission control import '@/permission' // permission control
import '@/utils/filter' // base filter import '@/utils/filter' // base filter
import Print from 'vue-print-nb-jeecg' import Print from 'vue-print-nb-jeecg'
/*import '@babel/polyfill'*/
import preview from 'vue-photo-preview' import preview from 'vue-photo-preview'
import 'vue-photo-preview/dist/skin.css' import 'vue-photo-preview/dist/skin.css'
import SSO from '@/cas/sso.js' import SSO from '@/cas/sso.js'
...@@ -47,7 +46,9 @@ import '@/assets/less/JAreaLinkage.less' ...@@ -47,7 +46,9 @@ import '@/assets/less/JAreaLinkage.less'
import VueAreaLinkage from 'vue-area-linkage' import VueAreaLinkage from 'vue-area-linkage'
import '@/components/jeecg/JVxeTable/install' import '@/components/jeecg/JVxeTable/install'
import '@/components/JVxeCells/install' import '@/components/JVxeCells/install'
//表单验证
import { rules } from '@/utils/rules'
Vue.prototype.rules = rules
Vue.config.productionTip = false Vue.config.productionTip = false
Vue.use(Storage, config.storageOptions) Vue.use(Storage, config.storageOptions)
Vue.use(Antd) Vue.use(Antd)
......
import JEditableTable from '@/components/jeecg/JEditableTable'
import { VALIDATE_NO_PASSED, getRefPromise,validateFormModelAndTables} from '@/utils/JEditableTableUtil'
import { httpAction, getAction } from '@/api/manage'
export const JEditableTableModelMixin = {
components: {
JEditableTable
},
data() {
return {
title: '操作',
visible: false,
confirmLoading: false,
model:{},
labelCol: {
xs: { span: 24 },
sm: { span: 6 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 18 }
}
}
},
methods: {
/** 获取所有的editableTable实例 */
getAllTable() {
if (!(this.refKeys instanceof Array)) {
throw this.throwNotArray('refKeys')
}
let values = this.refKeys.map(key => getRefPromise(this, key))
return Promise.all(values)
},
/** 遍历所有的JEditableTable实例 */
eachAllTable(callback) {
// 开始遍历
this.getAllTable().then(tables => {
tables.forEach((item, index) => {
if (typeof callback === 'function') {
callback(item, index)
}
})
})
},
/** 当点击新增按钮时调用此方法 */
add() {
//update-begin-author:lvdandan date:20201113 for:LOWCOD-1049 JEditaTable,子表默认添加一条数据,addDefaultRowNum设置无效 #1930
return new Promise((resolve) => {
this.tableReset();
resolve();
}).then(() => {
// 默认新增空数据
let rowNum = this.addDefaultRowNum
if (typeof rowNum !== 'number') {
rowNum = 1
console.warn('由于你没有在 data 中定义 addDefaultRowNum 或 addDefaultRowNum 不是数字,所以默认添加一条空数据,如果不想默认添加空数据,请将定义 addDefaultRowNum 为 0')
}
this.eachAllTable((item) => {
item.add(rowNum)
})
if (typeof this.addAfter === 'function') this.addAfter(this.model)
this.edit(this.model)
})
//update-end-author:lvdandan date:20201113 for:LOWCOD-1049 JEditaTable,子表默认添加一条数据,addDefaultRowNum设置无效 #1930
},
/** 当点击了编辑(修改)按钮时调用此方法 */
edit(record) {
if(record && '{}'!=JSON.stringify(record)&&record.id){
this.tableReset();
}
if (typeof this.editBefore === 'function') this.editBefore(record)
this.visible = true
this.activeKey = this.refKeys[0]
this.$refs.form.resetFields()
this.model = Object.assign({}, record)
if (typeof this.editAfter === 'function') this.editAfter(this.model)
},
/** 关闭弹窗,并将所有JEditableTable实例回归到初始状态 */
close() {
this.visible = false
this.$emit('close')
},
//清空子表table的数据
tableReset(){
this.eachAllTable((item) => {
item.clearRow()
})
},
/** 查询某个tab的数据 */
requestSubTableData(url, params, tab, success) {
tab.loading = true
getAction(url, params).then(res => {
let { result } = res
let dataSource = []
if (result) {
if (Array.isArray(result)) {
dataSource = result
} else if (Array.isArray(result.records)) {
dataSource = result.records
}
}
tab.dataSource = dataSource
typeof success === 'function' ? success(res) : ''
}).finally(() => {
tab.loading = false
})
},
/** 发起请求,自动判断是执行新增还是修改操作 */
request(formData) {
let url = this.url.add, method = 'post'
if (this.model.id) {
url = this.url.edit
method = 'put'
}
this.confirmLoading = true
httpAction(url, formData, method).then((res) => {
if (res.success) {
this.$message.success(res.message)
this.$emit('ok')
this.close()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.confirmLoading = false
})
},
/* --- handle 事件 --- */
/** ATab 选项卡切换事件 */
handleChangeTabs(key) {
// 自动重置scrollTop状态,防止出现白屏
getRefPromise(this, key).then(editableTable => {
editableTable.resetScrollTop()
})
},
/** 关闭按钮点击事件 */
handleCancel() {
this.close()
},
/** 确定按钮点击事件 */
handleOk() {
/** 触发表单验证 */
this.getAllTable().then(tables => {
/** 一次性验证主表和所有的次表 */
return validateFormModelAndTables(this.$refs.form,this.model, tables)
}).then(allValues => {
/** 一次性验证一对一的所有子表 */
return this.validateSubForm(allValues)
}).then(allValues => {
if (typeof this.classifyIntoFormData !== 'function') {
throw this.throwNotFunction('classifyIntoFormData')
}
let formData = this.classifyIntoFormData(allValues)
// 发起请求
return this.request(formData)
}).catch(e => {
if (e.error === VALIDATE_NO_PASSED) {
// 如果有未通过表单验证的子表,就自动跳转到它所在的tab
//update--begin--autor:liusq-----date:20210316------for:未通过表单验证跳转tab问题------
this.activeKey = e.index == null ? this.activeKey : (e.paneKey?e.paneKey:this.refKeys[e.index])
//update--end--autor:liusq-----date:20210316------for:未通过表单验证跳转tab问题------
} else {
console.error(e)
}
})
},
//校验所有子表表单
validateSubForm(allValues){
return new Promise((resolve) => {
resolve(allValues)
})
},
/* --- throw --- */
/** not a function */
throwNotFunction(name) {
return `${name} 未定义或不是一个函数`
},
/** not a array */
throwNotArray(name) {
return `${name} 未定义或不是一个数组`
}
}
}
\ No newline at end of file
...@@ -52,10 +52,13 @@ export const JVxeTableMixin = { ...@@ -52,10 +52,13 @@ export const JVxeTableMixin = {
rowNum = 1 rowNum = 1
console.warn('由于你没有在 data 中定义 addDefaultRowNum 或 addDefaultRowNum 不是数字,所以默认添加一条空数据,如果不想默认添加空数据,请将定义 addDefaultRowNum 为 0') console.warn('由于你没有在 data 中定义 addDefaultRowNum 或 addDefaultRowNum 不是数字,所以默认添加一条空数据,如果不想默认添加空数据,请将定义 addDefaultRowNum 为 0')
} }
//update-begin-author:taoyan date:20210315 for: 一对多jvex 默认几行不好使了 LOWCOD-1349
this.eachAllTable((item) => { this.eachAllTable((item) => {
item.addRows() setTimeout(()=>{
//item.add(rowNum) item.addRows()
}, 30)
}) })
//update-end-author:taoyan date:20210315 for: 一对多jvex 默认几行不好使了 LOWCOD-1349
if (typeof this.addAfter === 'function') this.addAfter(this.model) if (typeof this.addAfter === 'function') this.addAfter(this.model)
this.edit({}) this.edit({})
}, },
......
import { VALIDATE_FAILED, getRefPromise, validateFormAndTables,validateFormModelAndTables} from '@/components/jeecg/JVxeTable/utils/vxeUtils.js'
import { httpAction, getAction } from '@/api/manage'
export const JVxeTableModelMixin = {
data() {
return {
title: '操作',
visible: false,
confirmLoading: false,
scrolling: true,
model: {},
labelCol: {
xs: { span: 24 },
sm: { span: 6 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 18 }
}
}
},
methods: {
/** 获取所有的JVxeTable实例 */
getAllTable() {
if (!(this.refKeys instanceof Array)) {
throw this.throwNotArray('refKeys')
}
let values = this.refKeys.map(key => getRefPromise(this, key))
return Promise.all(values)
},
/** 遍历所有的JVxeTable实例 */
eachAllTable(callback) {
// 开始遍历
this.getAllTable().then(tables => {
console.log("tables",tables)
tables.forEach((item, index) => {
if (typeof callback === 'function') {
callback(item, index)
}
})
})
},
/** 当点击新增按钮时调用此方法 */
add() {
if (typeof this.addBefore === 'function') this.addBefore()
// 默认新增空数据
let rowNum = this.addDefaultRowNum
if (typeof rowNum !== 'number') {
rowNum = 1
console.warn('由于你没有在 data 中定义 addDefaultRowNum 或 addDefaultRowNum 不是数字,所以默认添加一条空数据,如果不想默认添加空数据,请将定义 addDefaultRowNum 为 0')
}
this.eachAllTable((item) => {
//update-begin-author:taoyan date:20210315 for: 一对多jvex 默认几行不好使了 LOWCOD-1349
setTimeout(()=>{
item.addRows()
}, 30)
//update-end-author:taoyan date:20210315 for: 一对多jvex 默认几行不好使了 LOWCOD-1349
})
if (typeof this.addAfter === 'function') this.addAfter(this.model)
this.edit(this.model)
},
/** 当点击了编辑(修改)按钮时调用此方法 */
edit(record) {
if (typeof this.editBefore === 'function') this.editBefore(record)
this.visible = true
this.activeKey = this.refKeys[0]
this.$refs.form.resetFields()
this.model = Object.assign({}, record)
if (typeof this.editAfter === 'function') this.editAfter(this.model)
},
/** 关闭弹窗,并将所有JVxeTable实例回归到初始状态 */
close() {
this.visible = false
this.eachAllTable((item) => {
item._remove()
})
this.$emit('close')
},
/** 查询某个tab的数据 */
requestSubTableData(url, params, tab, success) {
tab.loading = true
getAction(url, params).then(res => {
let { result } = res
let dataSource = []
if (result) {
if (Array.isArray(result)) {
dataSource = result
} else if (Array.isArray(result.records)) {
dataSource = result.records
}
}
tab.dataSource = dataSource
typeof success === 'function' ? success(res) : ''
}).finally(() => {
tab.loading = false
})
},
/** 发起请求,自动判断是执行新增还是修改操作 */
request(formData) {
let url = this.url.add, method = 'post'
if (this.model.id) {
url = this.url.edit
method = 'put'
}
this.confirmLoading = true
console.log("formData===>",formData);
httpAction(url, formData, method).then((res) => {
if (res.success) {
this.$message.success(res.message)
this.$emit('ok')
this.close()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.confirmLoading = false
})
},
/* --- handle 事件 --- */
/** ATab 选项卡切换事件 */
handleChangeTabs(key) {
// 自动重置scrollTop状态,防止出现白屏
getRefPromise(this, key).then(vxeTable => {
vxeTable.resetScrollTop()
})
},
/** 关闭按钮点击事件 */
handleCancel() {
this.close()
},
/** 确定按钮点击事件 */
handleOk() {
/** 触发表单验证 */
this.getAllTable().then(tables => {
/** 一次性验证主表和所有的次表 */
return validateFormModelAndTables(this.$refs.form,this.model, tables)
}).then(allValues => {
/** 一次性验证一对一的所有子表 */
return this.validateSubForm(allValues)
}).then(allValues => {
if (typeof this.classifyIntoFormData !== 'function') {
throw this.throwNotFunction('classifyIntoFormData')
}
let formData = this.classifyIntoFormData(allValues)
// 发起请求
return this.request(formData)
}).catch(e => {
if (e.error === VALIDATE_FAILED) {
// 如果有未通过表单验证的子表,就自动跳转到它所在的tab
this.activeKey = e.index == null ? this.activeKey : this.refKeys[e.index]
} else {
console.error(e)
}
})
},
//校验所有子表表单
validateSubForm(allValues){
return new Promise((resolve) => {
resolve(allValues)
})
},
/* --- throw --- */
/** not a function */
throwNotFunction(name) {
return `${name} 未定义或不是一个函数`
},
/** not a array */
throwNotArray(name) {
return `${name} 未定义或不是一个数组`
}
}
}
\ No newline at end of file
...@@ -66,7 +66,7 @@ export const JeecgListMixin = { ...@@ -66,7 +66,7 @@ export const JeecgListMixin = {
let head = {'X-Access-Token': Vue.ls.get(ACCESS_TOKEN)} let head = {'X-Access-Token': Vue.ls.get(ACCESS_TOKEN)}
let tenantid = Vue.ls.get(TENANT_ID) let tenantid = Vue.ls.get(TENANT_ID)
if(tenantid){ if(tenantid){
head['tenant_id'] = tenantid head['tenant-id'] = tenantid
} }
return head; return head;
} }
...@@ -177,6 +177,8 @@ export const JeecgListMixin = { ...@@ -177,6 +177,8 @@ export const JeecgListMixin = {
that.loading = true; that.loading = true;
deleteAction(that.url.deleteBatch, {ids: ids}).then((res) => { deleteAction(that.url.deleteBatch, {ids: ids}).then((res) => {
if (res.success) { if (res.success) {
//重新计算分页问题
that.reCalculatePage(that.selectedRowKeys.length)
that.$message.success(res.message); that.$message.success(res.message);
that.loadData(); that.loadData();
that.onClearSelected(); that.onClearSelected();
...@@ -198,6 +200,8 @@ export const JeecgListMixin = { ...@@ -198,6 +200,8 @@ export const JeecgListMixin = {
var that = this; var that = this;
deleteAction(that.url.delete, {id: id}).then((res) => { deleteAction(that.url.delete, {id: id}).then((res) => {
if (res.success) { if (res.success) {
//重新计算分页问题
that.reCalculatePage(1)
that.$message.success(res.message); that.$message.success(res.message);
that.loadData(); that.loadData();
} else { } else {
...@@ -205,6 +209,17 @@ export const JeecgListMixin = { ...@@ -205,6 +209,17 @@ export const JeecgListMixin = {
} }
}); });
}, },
reCalculatePage(count){
//总数量-count
let total=this.ipagination.total-count;
//获取删除后的分页数
let currentIndex=Math.ceil(total/this.ipagination.pageSize);
//删除后的分页数<所在当前页
if(currentIndex<this.ipagination.current){
this.ipagination.current=currentIndex;
}
console.log('currentIndex',currentIndex)
},
handleEdit: function (record) { handleEdit: function (record) {
this.$refs.modalForm.edit(record); this.$refs.modalForm.edit(record);
this.$refs.modalForm.title = "编辑"; this.$refs.modalForm.title = "编辑";
...@@ -218,6 +233,7 @@ export const JeecgListMixin = { ...@@ -218,6 +233,7 @@ export const JeecgListMixin = {
handleTableChange(pagination, filters, sorter) { handleTableChange(pagination, filters, sorter) {
//分页、排序、筛选变化时触发 //分页、排序、筛选变化时触发
//TODO 筛选 //TODO 筛选
console.log(pagination)
if (Object.keys(sorter).length > 0) { if (Object.keys(sorter).length > 0) {
this.isorter.column = sorter.field; this.isorter.column = sorter.field;
this.isorter.order = "ascend" == sorter.order ? "asc" : "desc" this.isorter.order = "ascend" == sorter.order ? "asc" : "desc"
......
...@@ -76,6 +76,36 @@ export function validateFormAndTables(form, cases) { ...@@ -76,6 +76,36 @@ export function validateFormAndTables(form, cases) {
return Promise.reject(error) return Promise.reject(error)
}) })
}
/**
* 一次性验证主表单和所有的次表单(新版本)
* @param form 主表单 form 对象
* @param cases 接收一个数组,每项都是一个JEditableTable实例
* @returns {Promise<any>}
* @author sunjianlei
*/
export function validateFormModelAndTables(form,values, cases) {
if (!(form && typeof form.validate === 'function')) {
throw `form 参数需要的是一个form对象,而传入的却是${typeof form}`
}
let options = {}
return new Promise((resolve, reject) => {
// 验证主表表单
form.validate((valid,obj) => {
valid ?resolve(values):reject({ error: VALIDATE_NO_PASSED })
})
}).then(values => {
Object.assign(options, { formValue: values })
// 验证所有子表的表单
return validateTables(cases)
}).then(all => {
Object.assign(options, { tablesValue: all })
return Promise.resolve(options)
}).catch(error => {
return Promise.reject(error)
})
} }
/** /**
......
...@@ -9,10 +9,10 @@ export function disabledAuthFilter(code,formData) { ...@@ -9,10 +9,10 @@ export function disabledAuthFilter(code,formData) {
} }
function nodeDisabledAuth(code,formData){ function nodeDisabledAuth(code,formData){
console.log("页面权限禁用--NODE--开始"); //console.log("页面权限禁用--NODE--开始");
let permissionList = []; let permissionList = [];
try { try {
console.log("页面权限禁用--NODE--开始",formData); //console.log("页面权限禁用--NODE--开始",formData);
if (formData) { if (formData) {
let bpmList = formData.permissionList; let bpmList = formData.permissionList;
permissionList = bpmList.filter(item=>item.type=='2') permissionList = bpmList.filter(item=>item.type=='2')
...@@ -53,7 +53,7 @@ function nodeDisabledAuth(code,formData){ ...@@ -53,7 +53,7 @@ function nodeDisabledAuth(code,formData){
} }
function globalDisabledAuth(code){ function globalDisabledAuth(code){
console.log("全局页面禁用权限--Global--开始"); //console.log("全局页面禁用权限--Global--开始");
let permissionList = []; let permissionList = [];
let allPermissionList = []; let allPermissionList = [];
...@@ -106,7 +106,7 @@ function globalDisabledAuth(code){ ...@@ -106,7 +106,7 @@ function globalDisabledAuth(code){
}else{ }else{
for (let item2 of permissionList) { for (let item2 of permissionList) {
if(code === item2.action){ if(code === item2.action){
console.log("全局页面权限解除禁用--Global--生效"); //console.log("全局页面权限解除禁用--Global--生效");
gFlag = false; gFlag = false;
} }
} }
......
...@@ -5,7 +5,7 @@ const hasPermission = { ...@@ -5,7 +5,7 @@ const hasPermission = {
//console.log(options); //console.log(options);
Vue.directive('has', { Vue.directive('has', {
inserted: (el, binding, vnode)=>{ inserted: (el, binding, vnode)=>{
console.log("页面权限控制----"); //console.log("页面权限控制----");
//console.time() //console.time()
//节点权限处理,如果命中则不进行全局权限处理 //节点权限处理,如果命中则不进行全局权限处理
if(!filterNodePermission(el, binding, vnode)){ if(!filterNodePermission(el, binding, vnode)){
...@@ -68,7 +68,7 @@ export function filterNodePermission(el, binding, vnode) { ...@@ -68,7 +68,7 @@ export function filterNodePermission(el, binding, vnode) {
* 全局权限控制 * 全局权限控制
*/ */
export function filterGlobalPermission(el, binding, vnode) { export function filterGlobalPermission(el, binding, vnode) {
console.log("全局页面权限--Global--"); //console.log("全局页面权限--Global--");
let permissionList = []; let permissionList = [];
let allPermissionList = []; let allPermissionList = [];
......
...@@ -104,7 +104,7 @@ service.interceptors.request.use(config => { ...@@ -104,7 +104,7 @@ service.interceptors.request.use(config => {
if (!tenantid) { if (!tenantid) {
tenantid = 0; tenantid = 0;
} }
config.headers[ 'tenant_id' ] = tenantid config.headers[ 'tenant-id' ] = tenantid
//update-end-author:taoyan date:2020707 for:多租户 //update-end-author:taoyan date:2020707 for:多租户
if(config.method=='get'){ if(config.method=='get'){
if(config.url.indexOf("sys/dict/getDictItems")<0){ if(config.url.indexOf("sys/dict/getDictItems")<0){
......
const validateMobile = (rule, value, callback) => {
let reg = /^1(3|4|5|7|8)\d{9}$/
if (!reg.test(value)) {
callback('请输入正确手机号')
} else {
callback()
}
}
const validateEn = (rule, value, callback) => {
let reg = /^[_a-zA-Z0-9]+$/
let reg2 = /^.{4,18}$/
// 长度为6到18个字符
if (value !== '' && !reg.test(value)) {
callback('只允许字母、数字、下划线')
} else if (value !== '' && !reg2.test(value)) {
callback('长度6到18个字符')
} else {
callback()
}
}
export const rules = {
mobile: [{
required: true,
message: '请输入手机号',
trigger: 'blur'
}, { validator: validateMobile, trigger: 'blur' }],
userName: [{
required: true, message: '请输入用户名', trigger: 'blur'
}, { validator: validateEn }],
email: [
{ required: false, type: 'email', message: '邮箱格式不正确', trigger: 'blur' }
],
// 验证自然数
naturalNumber: /^(([0-9]*[1-9][0-9]*)|(0+))$/,
naturalNumberMsg: '请输入自然数',
// 英文
english: /^.[A-Za-z]+$/,
englishMsg: '请输入英文字符',
// 座机
telephone: /^\d{3}-\d{7,8}|\d{4}-\d{7,8}$/,
telephoneMsg: '请输入正确的座机号',
// 银行卡号码
bankCard: /^[1-9]\d{9,19}$/,
bankCardMsg: '请输入正确的银行卡号码',
// 证件号码
IDNumber: /^[a-z0-9A-Z]{0,50}$/,
IDNumberMsg: '请输入正确的证件号码',
// 身份证号码,包括15位和18位的
IDCard: /(^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|(^[1-9]\d{7}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}$)/,
IDCardMsg: '请输入正确的身份证号码',
// QQ号码
qq: /^[1-9]\d{4,11}$/,
qqMsg: '请输入正确的QQ号码',
// 网址, 仅支持http和https开头的
url: /^(http|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-.,@?^=%&:/~+#]*[\w\-@?^=%&/~+#])?$/,
urlMsg: '请输入以http和https开头的网址',
// 0到20位的英文字符和数字
enNum0to20: /^[a-z0-9A-Z]{0,20}$/,
enNum0to20Msg: '请输入20位以内的英文字符和数字',
// 2到100位的中英文字符和空格
cnEnSpace2to100: /^[a-zA-Z\u4E00-\u9FA5\s*]{2,100}$/,
cnEnSpace2to100Msg: '请输入2到100位的中英文字符和空格',
// 数字和换行符
numLinefeed: /^[0-9\n*]+$/,
numLinefeedMsg: '请输入数字和换行符',
// 255位以内的字符
char0to255: /^.{0,255}$/,
char0to255Msg: '请输入255位以内的字符',
required: function(min, max) {
let rule = [{ required: true, message: '', trigger: 'blur' }]
if (min) {
let r = { min: min, message: '最小长度' + min + '位字符' }
rule.push(r)
}
if (max) {
let m = { max: max, message: '最大长度' + max + '位字符' }
rule.push(m)
}
return rule
},
select: function() {
let rule = [{ required: true, message: '', trigger: 'change' }]
return rule
},
checked: function(min, max) {
let rule = [{ required: true, type: 'array', message: '', trigger: 'change' }]
if (min) {
let r = { type: 'array', min: min, message: '最少选择' + min + '' }
rule.push(r)
}
if (max) {
let m = { type: 'array', max: max, message: '最多选择' + max + '' }
rule.push(m)
}
return rule
}
}
/**
* @description 排序值验证,排序值不可以大于255
*/
export const validateOrder = function(rule, value, callback) {
if (parseInt(value) > 255) {
return callback(new Error('排序值不可以大于255'))
} else {
callback()
}
}
...@@ -145,7 +145,6 @@ function generateChildRouters (data) { ...@@ -145,7 +145,6 @@ function generateChildRouters (data) {
component: componentPath, component: componentPath,
//component: resolve => require(['@/' + component+'.vue'], resolve), //component: resolve => require(['@/' + component+'.vue'], resolve),
hidden:item.hidden, hidden:item.hidden,
//component:()=> import(`@/views/${item.component}.vue`),
meta: { meta: {
title:item.meta.title , title:item.meta.title ,
icon: item.meta.icon, icon: item.meta.icon,
......
...@@ -8,6 +8,10 @@ ...@@ -8,6 +8,10 @@
<a-tab-pane tab="高级示例" key="2" forceRender> <a-tab-pane tab="高级示例" key="2" forceRender>
<j-vxe-demo2/> <j-vxe-demo2/>
</a-tab-pane>
<a-tab-pane tab="联动示例" key="3" forceRender>
<j-vxe-demo3/>
</a-tab-pane> </a-tab-pane>
</a-tabs> </a-tabs>
...@@ -17,10 +21,11 @@ ...@@ -17,10 +21,11 @@
<script> <script>
import JVxeDemo1 from '@views/jeecg/JVxeDemo/JVxeDemo1' import JVxeDemo1 from '@views/jeecg/JVxeDemo/JVxeDemo1'
import JVxeDemo2 from '@views/jeecg/JVxeDemo/JVxeDemo2' import JVxeDemo2 from '@views/jeecg/JVxeDemo/JVxeDemo2'
import JVxeDemo3 from '@views/jeecg/JVxeDemo/JVxeDemo3'
export default { export default {
name: 'JVXETableDemo', name: 'JVXETableDemo',
components: {JVxeDemo2, JVxeDemo1}, components: {JVxeDemo2, JVxeDemo1,JVxeDemo3},
data() { data() {
return {} return {}
}, },
......
<template>
<j-vxe-table
ref="vTable"
toolbar
row-number
row-selection
keep-source
:height="484"
:dataSource="dataSource"
:columns="columns"
@valueChange="handleValueChange"
/>
</template>
<script>
import moment from 'moment'
import { randomNumber, randomUUID } from '@/utils/util'
import { JVXETypes } from '@/components/jeecg/JVxeTable'
export default {
name: 'JVxeDemo2',
data() {
return {
columns: [
{
title: '省/直辖市/自治区',
key: 's1',
type: JVXETypes.select,
width: '240px',
options: [],
placeholder: '请选择${title}'
},
{
title: '',
key: 's2',
type: JVXETypes.select,
width: '240px',
options: [],
placeholder: '请选择${title}'
},
{
title: '县/区',
key: 's3',
type: JVXETypes.select,
width: '240px',
options: [],
placeholder: '请选择${title}'
}
],
dataSource: [],
mockData: [
{ text: '北京市', value: '110000', parent: null },
{ text: '天津市', value: '120000', parent: null },
{ text: '河北省', value: '130000', parent: null },
{ text: '上海市', value: '310000', parent: null },
{ text: '北京市', value: '110100', parent: '110000' },
{ text: '天津市市', value: '120100', parent: '120000' },
{ text: '石家庄市', value: '130100', parent: '130000' },
{ text: '唐山市', value: '130200', parent: '130000' },
{ text: '秦皇岛市', value: '130300', parent: '130000' },
{ text: '上海市', value: '310100', parent: '310000' },
{ text: '东城区', value: '110101', parent: '110100' },
{ text: '西城区', value: '110102', parent: '110100' },
{ text: '朝阳区', value: '110105', parent: '110100' },
{ text: '和平区', value: '120101', parent: '120100' },
{ text: '河东区', value: '120102', parent: '120100' },
{ text: '河西区', value: '120103', parent: '120100' },
{ text: '黄浦区', value: '310101', parent: '310100' },
{ text: '徐汇区', value: '310104', parent: '310100' },
{ text: '长宁区', value: '310105', parent: '310100' },
{ text: '长安区', value: '130102', parent: '130100' },
{ text: '桥西区', value: '130104', parent: '130100' },
{ text: '新华区', value: '130105', parent: '130100' },
{ text: '路南区', value: '130202', parent: '130200' },
{ text: '路北区', value: '130203', parent: '130200' },
{ text: '古冶区', value: '130204', parent: '130200' },
{ text: '海港区', value: '130302', parent: '130300' },
{ text: '山海关区', value: '130303', parent: '130300' },
{ text: '北戴河区', value: '130304', parent: '130300' },
]
}
},
created() {
// 初始化数据
this.columns[0].options = this.request(null)
},
methods: {
request(parentId) {
return this.mockData.filter(i => i.parent === parentId)
},
/** 当选项被改变时,联动其他组件 */
handleValueChange(event) {
const { type, row, column, value, target } = event
console.log("event",event)
if (type === JVXETypes.select) {
// 第一列
if (column.key === 's1') {
// 设置第二列的 options
console.log('this.request(value)::',this.request(value))
target.$refs.vxe.columns[3].options = this.request(value)
// 清空后两列的数据
target.setValues([{
rowKey: row.id,
values: { s2: '', s3: '' }
}])
target.$refs.vxe.columns[4].options = []
} else
// 第二列
if (column.key === 's2') {
target.$refs.vxe.columns[4].options = this.request(value)
target.setValues([{
rowKey: row.id,
values: { s3: '' }
}])
}
}
}
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
<template>
<a-card :bordered="false">
<!-- 查询区域 -->
<div class="table-page-search-wrapper">
<a-form layout="inline">
<a-row :gutter="24">
<a-col :md="6" :sm="24">
<a-form-item label="订单号">
<a-input placeholder="请输入订单号" v-model="queryParam.orderCode"></a-input>
</a-form-item>
</a-col>
<a-col :md="6" :sm="24">
<a-form-item label="订单类型">
<a-select placeholder="请输入订单类型" v-model="queryParam.ctype">
<a-select-option value="1">国内订单</a-select-option>
<a-select-option value="2">国际订单</a-select-option>
</a-select>
</a-form-item>
</a-col>
<a-col :md="6" :sm="24">
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-button type="primary" @click="searchQuery" icon="search">查询</a-button>
<a-button type="primary" @click="searchReset" icon="reload" style="margin-left: 8px">重置</a-button>
</span>
</a-col>
</a-row>
</a-form>
</div>
<!-- 操作按钮区域 -->
<div class="table-operator">
<a-button @click="handleAdd" type="primary" icon="plus">新增</a-button>
<a-dropdown v-if="selectedRowKeys.length > 0">
<a-menu slot="overlay">
<a-menu-item key="1" @click="batchDel">
<a-icon type="delete"/>
删除
</a-menu-item>
</a-menu>
<a-button style="margin-left: 8px"> 批量操作
<a-icon type="down"/>
</a-button>
</a-dropdown>
</div>
<!-- table区域-begin -->
<div>
<div class="ant-alert ant-alert-info" style="margin-bottom: 16px;">
<i class="anticon anticon-info-circle ant-alert-icon"></i>
<span>已选择</span>
<a style="font-weight: 600">
{{ selectedRowKeys.length }}
</a>
<span></span>
<a style="margin-left: 24px" @click="onClearSelected">清空</a>
</div>
<a-table
ref="table"
size="middle"
bordered
rowKey="id"
:columns="columns"
:dataSource="dataSource"
:pagination="ipagination"
:loading="loading"
:rowSelection="{selectedRowKeys: selectedRowKeys, onChange: onSelectChange}"
@change="handleTableChange">
<span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical"/>
<a-dropdown>
<a class="ant-dropdown-link">更多 <a-icon type="down"/></a>
<a-menu slot="overlay">
<a-menu-item>
<a-popconfirm title="确定删除吗?" @confirm="() => handleDelete(record.id)">
<a>删除</a>
</a-popconfirm>
</a-menu-item>
</a-menu>
</a-dropdown>
</span>
</a-table>
</div>
<!-- table区域-end -->
<!-- 表单区域 -->
<jeecg-order-modal-for-j-vextable ref="modalForm" @ok="modalFormOk"></jeecg-order-modal-for-j-vextable>
</a-card>
</template>
<script>
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
import JeecgOrderModalForJVextable from './modules/JeecgOrderModalForJVexTable'
export default {
name: 'JeecgOrderMainListForJVxeTable',
mixins: [JeecgListMixin],
components: {
JeecgOrderModalForJVextable
},
data() {
return {
description: '订单管理页面',
// 请求参数
url: {
list: '/test/jeecgOrderMain/list',
delete: '/test/jeecgOrderMain/delete',
deleteBatch: '/test/jeecgOrderMain/deleteBatch'
},
// 表头
columns: [
{
title: '#',
dataIndex: '',
key: 'rowIndex',
width: 60,
align: 'center',
customRender: function(t, r, index) {
return parseInt(index) + 1
}
},
{
title: '订单号',
align: 'center',
dataIndex: 'orderCode'
},
{
title: '订单类型',
align: 'center',
dataIndex: 'ctype',
customRender: (text) => {
let re = ''
if (text === '1') {
re = '国内订单'
} else if (text === '2') {
re = '国际订单'
}
return re
}
},
{
title: '订单日期',
align: 'center',
dataIndex: 'orderDate'
},
{
title: '订单金额',
align: 'center',
dataIndex: 'orderMoney'
},
{
title: '订单备注',
align: 'center',
dataIndex: 'content'
},
{
title: '操作',
dataIndex: 'action',
align: 'center',
scopedSlots: { customRender: 'action' }
}
]
}
},
methods: {
initDictConfig() {
}
}
}
</script>
<style scoped>
.ant-card-body .table-operator {
margin-bottom: 18px;
}
.ant-table-tbody .ant-table-row td {
padding-top: 15px;
padding-bottom: 15px;
}
.anty-row-operator button {
margin: 0 5px
}
.ant-btn-danger {
background-color: #ffffff
}
.ant-modal-cust-warp {
height: 100%
}
.ant-modal-cust-warp .ant-modal-body {
height: calc(100% - 110px) !important;
overflow-y: auto
}
.ant-modal-cust-warp .ant-modal-content {
height: 90% !important;
overflow-y: hidden
}
</style>
\ No newline at end of file
...@@ -7,80 +7,47 @@ ...@@ -7,80 +7,47 @@
@ok="handleOk" @ok="handleOk"
@cancel="handleCancel" @cancel="handleCancel"
cancelText="关闭"> cancelText="关闭">
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form"> <a-form-model ref="form" :label-col="labelCol" :wrapper-col="wrapperCol" :model="model" :rules="validatorRules">
<a-form-model-item label="姓名" required prop="name" hasFeedback>
<a-form-item <a-input v-model="model.name" placeholder="请输入姓名"/>
:labelCol="labelCol" </a-form-model-item>
:wrapperCol="wrapperCol"
label="姓名" <a-form-model-item label="关键词" prop="keyWord" hasFeedback>
hasFeedback > <a-input v-model="model.keyWord" placeholder="请输入关键词"/>
<a-input placeholder="请输入姓名" v-decorator="['name', {}]" /> </a-form-model-item>
</a-form-item>
<a-form-item <a-form-model-item label="打卡时间" prop="punchTime" hasFeedback>
:labelCol="labelCol" <a-date-picker showTime valueFormat="YYYY-MM-DD HH:mm:ss" v-model="model.punchTime" />
:wrapperCol="wrapperCol" </a-form-model-item>
label="关键词"
hasFeedback > <a-form-model-item label="性别" prop="sex" hasFeedback>
<a-input placeholder="请输入关键词" v-decorator="['keyWord', {}]" /> <j-dict-select-tag type="radio" v-model="model.sex" :trigger-change="true" dictCode="sex"/>
</a-form-item> </a-form-model-item>
<a-form-item
:labelCol="labelCol" <a-form-model-item label="年龄" prop="age" hasFeedback>
:wrapperCol="wrapperCol" <a-input placeholder="请输入年龄" v-model="model.age"/>
label="打卡时间" </a-form-model-item>
hasFeedback >
<a-date-picker showTime format="YYYY-MM-DD HH:mm:ss" v-decorator="[ 'punchTime', {}]" /> <a-form-model-item label="生日" prop="age" hasFeedback>
</a-form-item> <a-date-picker valueFormat="YYYY-MM-DD" v-model="model.birthday"/>
<a-form-item </a-form-model-item>
:labelCol="labelCol"
:wrapperCol="wrapperCol" <a-form-model-item label="邮箱" prop="email" hasFeedback >
label="性别"> <a-input placeholder="请输入邮箱" v-model="model.email"/>
<!-- <a-select v-decorator="['sex', {}]" placeholder="请选择性别"> </a-form-model-item>
<a-select-option value="">请选择</a-select-option>
<a-select-option value="1"></a-select-option> <a-form-model-item label="个人简介" prop="content" hasFeedback>
<a-select-option value="2"></a-select-option> <a-input type="textarea" placeholder="请输入个人简介" v-model="model.content"/>
</a-select>--> </a-form-model-item>
<j-dict-select-tag type="radio" v-decorator="['sex', {}]" :trigger-change="true" dictCode="sex"/>
</a-form-item> </a-form-model>
<a-form-item
:labelCol="labelCol"
:wrapperCol="wrapperCol"
label="年龄"
hasFeedback >
<a-input placeholder="请输入年龄" v-decorator="['age', {}]" />
</a-form-item>
<a-form-item
:labelCol="labelCol"
:wrapperCol="wrapperCol"
label="生日"
hasFeedback >
<a-date-picker v-decorator="[ 'birthday', {}]" />
</a-form-item>
<a-form-item
:labelCol="labelCol"
:wrapperCol="wrapperCol"
label="邮箱"
hasFeedback >
<a-input placeholder="请输入邮箱" v-decorator="['email', {}]" />
</a-form-item>
<a-form-item
:labelCol="labelCol"
:wrapperCol="wrapperCol"
label="个人简介"
hasFeedback >
<a-input placeholder="请输入个人简介" v-decorator="['content', {}]" />
</a-form-item>
</a-form>
</a-spin> </a-spin>
</a-modal> </a-modal>
</template> </template>
<script> <script>
import { httpAction } from '@/api/manage' import { httpAction } from '@/api/manage'
import pick from 'lodash.pick'
import moment from "moment"
export default { export default {
name: "JeecgDemoModal", name: "JeecgDemoModal",
...@@ -89,18 +56,28 @@ ...@@ -89,18 +56,28 @@
title:"操作", title:"操作",
visible: false, visible: false,
model: {}, model: {},
layout: {
labelCol: { span: 3 },
wrapperCol: { span: 14 },
},
labelCol: { labelCol: {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 5 }, sm: { span: 3 },
}, },
wrapperCol: { wrapperCol: {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 16 }, sm: { span: 16 },
}, },
confirmLoading: false, confirmLoading: false,
form: this.$form.createForm(this), form: this.$form.createForm(this),
validatorRules:{ validatorRules:{
name: [
{ required: true, message: '请输入姓名!' },
{ min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' }
],
email: [
{ required: false, type: 'email', message: '邮箱格式不正确', trigger: 'blur' }
]
}, },
url: { url: {
add: "/test/jeecgDemo/add", add: "/test/jeecgDemo/add",
...@@ -115,26 +92,19 @@ ...@@ -115,26 +92,19 @@
this.edit({}); this.edit({});
}, },
edit (record) { edit (record) {
this.form.resetFields();
this.model = Object.assign({}, record); this.model = Object.assign({}, record);
this.visible = true; this.visible = true;
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.model,'name','keyWord','sex','age','email','content'))
//时间格式化
this.form.setFieldsValue({punchTime:this.model.punchTime?moment(this.model.punchTime,'YYYY-MM-DD HH:mm:ss'):null})
this.form.setFieldsValue({birthday:this.model.birthday?moment(this.model.birthday):null})
});
}, },
close () { close () {
this.$refs.form.resetFields();
this.$emit('close'); this.$emit('close');
this.visible = false; this.visible = false;
}, },
handleOk () { handleOk () {
const that = this; const that = this;
// 触发表单验证 // 触发表单验证
this.form.validateFields((err, values) => { this.$refs.form.validate(valid => {
if (!err) { if (valid) {
that.confirmLoading = true; that.confirmLoading = true;
let httpurl = ''; let httpurl = '';
let method = ''; let method = '';
...@@ -145,13 +115,7 @@ ...@@ -145,13 +115,7 @@
httpurl+=this.url.edit; httpurl+=this.url.edit;
method = 'put'; method = 'put';
} }
let formData = Object.assign(this.model, values); httpAction(httpurl,this.model,method).then((res)=>{
//时间格式化
formData.punchTime = formData.punchTime?formData.punchTime.format('YYYY-MM-DD HH:mm:ss'):null;
formData.birthday = formData.birthday?formData.birthday.format():null;
console.log(formData)
httpAction(httpurl,formData,method).then((res)=>{
if(res.success){ if(res.success){
that.$message.success(res.message); that.$message.success(res.message);
that.$emit('ok'); that.$emit('ok');
...@@ -162,17 +126,12 @@ ...@@ -162,17 +126,12 @@
that.confirmLoading = false; that.confirmLoading = false;
that.close(); that.close();
}) })
} }
}) })
}, },
handleCancel () { handleCancel () {
this.close() this.close()
}, }
} }
} }
</script> </script>
......
...@@ -63,7 +63,7 @@ ...@@ -63,7 +63,7 @@
<a-table :columns="columns" :dataSource="data" :pagination="false" size="middle"> <a-table :columns="columns" :dataSource="data" :pagination="false" size="middle">
<template v-for="(col, i) in ['name', 'workId', 'department']" :slot="col" slot-scope="text, record, index"> <template v-for="(col, i) in ['name', 'workId', 'department']" :slot="col" slot-scope="text, record, index">
<a-tooltip title="必填项" :defaultVisible="false" overlayStyle="{ color: 'red' }"> <a-tooltip title="必填项" :defaultVisible="false" :overlayStyle="{ color: 'red' }">
<a-input :key="col" v-if="record.editable" style="margin: -5px 0" :value="text" :placeholder="columns[i].title" @change="e => handlerRowChange(e.target.value, record.key, col)"/> <a-input :key="col" v-if="record.editable" style="margin: -5px 0" :value="text" :placeholder="columns[i].title" @change="e => handlerRowChange(e.target.value, record.key, col)"/>
<template v-else>{{ text }}</template> <template v-else>{{ text }}</template>
</a-tooltip> </a-tooltip>
......
...@@ -8,53 +8,38 @@ ...@@ -8,53 +8,38 @@
@cancel="handleCancel"> @cancel="handleCancel">
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form"> <a-form-model ref="form" :label-col="labelCol" :wrapper-col="wrapperCol" :model="orderMainModel" :rules="validatorRules">
<!-- 主表单区域 --> <!-- 主表单区域 -->
<a-row class="form-row" :gutter="16"> <a-row class="form-row" :gutter="16">
<a-col :lg="8"> <a-col :lg="8">
<a-form-item <a-form-model-item label="订单号" required prop="orderCode">
:labelCol="labelCol" <a-input v-model="orderMainModel.orderCode" placeholder="请输入订单号"/>
:wrapperCol="wrapperCol" </a-form-model-item>
label="订单号">
<a-input placeholder="请输入订单号" v-decorator="['orderCode', {rules: [{ required: true, message: '请输入订单号!' }]}]" />
</a-form-item>
</a-col> </a-col>
<a-col :lg="8"> <a-col :lg="8">
<a-form-item <a-form-model-item label="订单类型" prop="ctype">
:labelCol="labelCol" <a-select placeholder="请选择订单类型" v-model="orderMainModel.ctype" >
:wrapperCol="wrapperCol"
label="订单类型">
<a-select placeholder="请输入订单类型" v-decorator="['ctype',{}]">
<a-select-option value="1">国内订单</a-select-option> <a-select-option value="1">国内订单</a-select-option>
<a-select-option value="2">国际订单</a-select-option> <a-select-option value="2">国际订单</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-model-item>
</a-col> </a-col>
<a-col :lg="8"> <a-col :lg="8">
<a-form-item <a-form-model-item label="订单日期" prop="orderDate">
:labelCol="labelCol" <a-date-picker showTime valueFormat="YYYY-MM-DD HH:mm:ss" v-model="orderMainModel.orderDate"/>
:wrapperCol="wrapperCol" </a-form-model-item>
label="订单日期">
<a-date-picker showTime format="YYYY-MM-DD HH:mm:ss" v-decorator="[ 'orderDate',{}]"/>
</a-form-item>
</a-col> </a-col>
</a-row> </a-row>
<a-row class="form-row" :gutter="16"> <a-row class="form-row" :gutter="16">
<a-col :lg="8"> <a-col :lg="8">
<a-form-item <a-form-model-item label="订单金额" prop="orderMoney">
:labelCol="labelCol" <a-input-number style="width: 200px" v-model="orderMainModel.orderMoney"/>
:wrapperCol="wrapperCol" </a-form-model-item>
label="订单金额">
<a-input-number style="width: 200px" v-decorator="[ 'orderMoney', {}]" />
</a-form-item>
</a-col> </a-col>
<a-col :lg="8"> <a-col :lg="8">
<a-form-item <a-form-model-item label="订单备注" prop="content">
:labelCol="labelCol" <a-input placeholder="请输入订单备注" v-model="orderMainModel.content" />
:wrapperCol="wrapperCol" </a-form-model-item>
label="订单备注">
<a-input placeholder="请输入订单备注" v-decorator="['content', {}]" />
</a-form-item>
</a-col> </a-col>
</a-row> </a-row>
...@@ -65,47 +50,49 @@ ...@@ -65,47 +50,49 @@
<a-row type="flex" style="margin-bottom:10px" :gutter="16"> <a-row type="flex" style="margin-bottom:10px" :gutter="16">
<a-col :span="5">客户名</a-col> <a-col :span="5">客户名</a-col>
<a-col :span="5">性别</a-col> <a-col :span="5">性别</a-col>
<a-col :span="5">身份证号码</a-col> <a-col :span="6">身份证号码</a-col>
<a-col :span="5">手机号</a-col> <a-col :span="6">手机号</a-col>
<a-col :span="4">操作</a-col> <a-col :span="2">操作</a-col>
</a-row> </a-row>
<a-row type="flex" style="margin-bottom:10px" :gutter="16" v-for="(item, index) in orderMainModel.jeecgOrderCustomerList" :key="index"> <a-row type="flex" style="margin-bottom:10px" :gutter="16" v-for="(item, index) in orderMainModel.jeecgOrderCustomerList" :key="index">
<a-col :span="6" style="display: none"> <a-col :span="6" style="display: none">
<a-form-item> <a-form-model-item>
<a-input placeholder="id" v-decorator="['jeecgOrderCustomerList['+index+'].id', {'initialValue':item.id}]" /> <a-input placeholder="id" v-model="item.id" />
</a-form-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="5"> <a-col :span="5">
<a-form-item> <a-form-model-item>
<a-input placeholder="客户名" v-decorator="['jeecgOrderCustomerList['+index+'].name', {'initialValue':item.name,rules: [{ required: true, message: '请输入用户名!' }]}]" /> <a-input placeholder="客户名" v-model="item.name" />
</a-form-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="5"> <a-col :span="5">
<a-form-item> <a-form-model-item>
<a-select placeholder="性别" v-decorator="['jeecgOrderCustomerList['+index+'].sex', {'initialValue':item.sex}]"> <a-select placeholder="性别" v-model="item.sex" >
<a-select-option value="1"></a-select-option> <a-select-option value="1"></a-select-option>
<a-select-option value="2"></a-select-option> <a-select-option value="2"></a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="5"> <a-col :span="6">
<a-form-item> <a-form-model-item :prop="'jeecgOrderCustomerList.' + index + '.idcard'" :rules="[{required: true,message: '请输入身份证号',trigger: 'blur'},{ pattern: rules.IDCard, message: '身份证号格式不对!' }]">
<a-input placeholder="身份证号" v-decorator="['jeecgOrderCustomerList['+index+'].idcard', {'initialValue':item.idcard,rules: [{ pattern: '^\\d{6}(18|19|20)?\\d{2}(0[1-9]|1[012])(0[1-9]|[12]\\d|3[01])\\d{3}(\\d|[xX])$', message: '身份证号格式不对!' }]}]"/> <a-input placeholder="身份证号" v-model="item.idcard" />
</a-form-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="5"> <a-col :span="6">
<a-form-item> <a-form-model-item :prop="'jeecgOrderCustomerList.' + index + '.telphone'" :rules="rules.mobile">
<a-input placeholder="手机号" v-decorator="['jeecgOrderCustomerList['+index+'].telphone', {'initialValue':item.telphone,rules: [{ pattern: '^1(3|4|5|7|8)\\d{9}$', message: '手机号格式不对!' }]}]"/> <a-input placeholder="手机号" v-model="item.telphone"/>
</a-form-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="4"> <a-col :span="2">
<a-form-item> <a-form-model-item>
<a-button @click="addRowCustom" icon="plus"></a-button>&nbsp; <a-icon type="minus-circle" @click="delRowCustom(index)" style="fontSize :20px"/>
<a-button @click="delRowCustom(index)" icon="minus"></a-button> </a-form-model-item>
</a-form-item>
</a-col> </a-col>
</a-row> </a-row>
<a-button type="dashed" style="width: 98%;margin-top: 10px" @click="addRowCustom">
<a-icon type="plus" /> 添加客户信息
</a-button>
</div> </div>
</a-tab-pane> </a-tab-pane>
...@@ -118,32 +105,34 @@ ...@@ -118,32 +105,34 @@
</a-row> </a-row>
<a-row type="flex" style="margin-bottom:10px" :gutter="16" v-for="(item, index) in orderMainModel.jeecgOrderTicketList" :key="index"> <a-row type="flex" style="margin-bottom:10px" :gutter="16" v-for="(item, index) in orderMainModel.jeecgOrderTicketList" :key="index">
<a-col :span="6" style="display: none"> <a-col :span="6" style="display: none">
<a-form-item> <a-form-model-item>
<a-input placeholder="id" v-decorator="['jeecgOrderTicketList['+index+'].id', {'initialValue':item.id}]" /> <a-input placeholder="id" v-model="item.id" />
</a-form-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="6">
<a-form-item> <a-form-model-item :prop="'jeecgOrderTicketList.' + index + '.ticketCode'" :rules="{required: true,message: '请输入航班号',trigger: 'blur'}">
<a-input placeholder="航班号" v-decorator="['jeecgOrderTicketList['+index+'].ticketCode', {'initialValue':item.ticketCode,rules: [{ required: true, message: '请输入航班号!' }]}]" /> <a-input placeholder="航班号" v-model="item.ticketCode"/>
</a-form-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="6">
<a-form-item> <a-form-model-item>
<j-date placeholder="航班时间" :trigger-change="true" v-decorator="['jeecgOrderTicketList['+index+'].tickectDate', {'initialValue':item.tickectDate}]"></j-date> <a-date-picker placeholder="航班时间" valueFormat="YYYY-MM-DD" v-model="item.tickectDate" />
</a-form-item> </a-form-model-item>
</a-col> </a-col>
<a-col :span="6"> <a-col :span="6">
<a-form-item> <a-form-model-item>
<a-button @click="addRowTicket" icon="plus"></a-button>&nbsp; <a-icon type="minus-circle" @click="delRowTicket(index)" style="fontSize :20px"/>
<a-button @click="delRowTicket(index)" icon="minus"></a-button> </a-form-model-item>
</a-form-item>
</a-col> </a-col>
</a-row> </a-row>
<a-button type="dashed" style="width: 98%;margin-top: 10px" @click="addRowTicket">
<a-icon type="plus" /> 添加机票信息
</a-button>
</div> </div>
</a-tab-pane> </a-tab-pane>
</a-tabs> </a-tabs>
</a-form> </a-form-model>
</a-spin> </a-spin>
</a-modal> </a-modal>
</template> </template>
...@@ -151,9 +140,6 @@ ...@@ -151,9 +140,6 @@
<script> <script>
import { httpAction,getAction } from '@/api/manage' import { httpAction,getAction } from '@/api/manage'
import JDate from '@/components/jeecg/JDate' import JDate from '@/components/jeecg/JDate'
import pick from 'lodash.pick'
import moment from "moment"
export default { export default {
name: "JeecgOrderMainModal", name: "JeecgOrderMainModal",
components: { components: {
...@@ -163,8 +149,10 @@ ...@@ -163,8 +149,10 @@
return { return {
title:"操作", title:"操作",
visible: false, visible: false,
orderMainModel: {jeecgOrderCustomerList: [{}], orderMainModel: {
jeecgOrderTicketList: [{}]}, jeecgOrderCustomerList: [{}],
jeecgOrderTicketList: [{}]
},
labelCol: { labelCol: {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 5 }, sm: { span: 5 },
...@@ -173,10 +161,11 @@ ...@@ -173,10 +161,11 @@
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 16 }, sm: { span: 16 },
}, },
confirmLoading: false, confirmLoading: false,
form: this.$form.createForm(this),
validatorRules:{ validatorRules:{
orderCode: [
{ required: true, message: '订单号不能为空', trigger: 'blur' }
]
}, },
url: { url: {
add: "/test/jeecgOrderMain/add", add: "/test/jeecgOrderMain/add",
...@@ -193,10 +182,10 @@ ...@@ -193,10 +182,10 @@
this.edit({}); this.edit({});
}, },
edit (record) { edit (record) {
this.form.resetFields(); this.orderMainModel = Object.assign({
this.orderMainModel = Object.assign({}, record); jeecgOrderCustomerList: [{}],
this.orderMainModel.jeecgOrderCustomerList = [{}]; jeecgOrderTicketList: [{}]
this.orderMainModel.jeecgOrderTicketList = [{}]; }, record);
//-------------------------------------------------------- //--------------------------------------------------------
//初始化明细表数据 //初始化明细表数据
console.log(this.orderMainModel.id) console.log(this.orderMainModel.id)
...@@ -217,12 +206,7 @@ ...@@ -217,12 +206,7 @@
} }
}) })
} }
//--------------------------------------------------------
this.visible = true; this.visible = true;
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.orderMainModel,'orderCode','ctype','orderMoney','content'))
this.form.setFieldsValue({orderDate:this.orderMainModel.orderDate?moment(this.orderMainModel.orderDate):null}) //时间格式化
});
}, },
close () { close () {
this.$emit('close'); this.$emit('close');
...@@ -231,8 +215,8 @@ ...@@ -231,8 +215,8 @@
handleOk () { handleOk () {
const that = this; const that = this;
// 触发表单验证 // 触发表单验证
this.form.validateFields((err, values) => { this.$refs.form.validate(valid => {
if (!err) { if (valid) {
that.confirmLoading = true; that.confirmLoading = true;
let httpurl = ''; let httpurl = '';
let method = ''; let method = '';
...@@ -241,18 +225,9 @@ ...@@ -241,18 +225,9 @@
method = 'post'; method = 'post';
}else{ }else{
httpurl+=this.url.edit; httpurl+=this.url.edit;
method = 'put'; method = 'put';
}
let orderMainData = Object.assign(this.orderMainModel, values);
//时间格式化
orderMainData.orderDate = orderMainData.orderDate?orderMainData.orderDate.format('YYYY-MM-DD HH:mm:ss'):null;
let formData = {
...orderMainData,
jeecgOrderCustomerList: orderMainData.jeecgOrderCustomerList,
jeecgOrderTicketList: orderMainData.jeecgOrderTicketList
} }
console.log(formData) httpAction(httpurl,this.orderMainModel,method).then((res)=>{
httpAction(httpurl,formData,method).then((res)=>{
if(res.success){ if(res.success){
that.$message.success(res.message); that.$message.success(res.message);
that.$emit('ok'); that.$emit('ok');
...@@ -276,9 +251,8 @@ ...@@ -276,9 +251,8 @@
}, },
delRowCustom (index) { delRowCustom (index) {
console.log(index) console.log(index)
let all = this.form.getFieldsValue() let all = this.orderMainModel
all['jeecgOrderCustomerList'].splice(index,1); all['jeecgOrderCustomerList'].splice(index,1);
this.form.setFieldsValue(all)
this.orderMainModel.jeecgOrderCustomerList.splice(index,1); this.orderMainModel.jeecgOrderCustomerList.splice(index,1);
this.$forceUpdate(); this.$forceUpdate();
}, },
...@@ -289,9 +263,8 @@ ...@@ -289,9 +263,8 @@
}, },
delRowTicket (index) { delRowTicket (index) {
console.log(index) console.log(index)
let all = this.form.getFieldsValue() let all = this.orderMainModel
all['jeecgOrderTicketList'].splice(index,1); all['jeecgOrderTicketList'].splice(index,1);
this.form.setFieldsValue(all)
this.orderMainModel.jeecgOrderTicketList.splice(index,1); this.orderMainModel.jeecgOrderTicketList.splice(index,1);
this.$forceUpdate(); this.$forceUpdate();
}, },
......
...@@ -9,58 +9,41 @@ ...@@ -9,58 +9,41 @@
@cancel="handleCancel"> @cancel="handleCancel">
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form"> <a-form-model ref="form" :label-col="labelCol" :wrapper-col="wrapperCol" :model="model" >
<!-- 主表单区域 --> <!-- 主表单区域 -->
<a-row class="form-row" :gutter="0"> <a-row class="form-row" :gutter="0">
<a-col :lg="8"> <a-col :lg="8">
<a-form-item <a-form-model-item label="订单号" prop="orderCode" :rules="[{ required: true, message: '请输入订单号!' }]">
:labelCol="labelCol" <a-input placeholder="请输入订单号" v-model="model.orderCode"/>
:wrapperCol="wrapperCol" </a-form-model-item>
label="订单号">
<a-input
placeholder="请输入订单号"
v-decorator="['orderCode', {rules: [{ required: true, message: '请输入订单号!' }]}]"/>
</a-form-item>
</a-col> </a-col>
<a-col :lg="8"> <a-col :lg="8">
<a-form-item <a-form-model-item label="订单类型">
:labelCol="labelCol" <a-select placeholder="请选择订单类型" v-model="model.ctype">
:wrapperCol="wrapperCol"
label="订单类型">
<a-select placeholder="请选择订单类型" v-decorator="['ctype',{}]">
<a-select-option value="1">国内订单</a-select-option> <a-select-option value="1">国内订单</a-select-option>
<a-select-option value="2">国际订单</a-select-option> <a-select-option value="2">国际订单</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-model-item>
</a-col> </a-col>
<a-col :lg="8"> <a-col :lg="8">
<a-form-item <a-form-model-item label="订单日期">
:labelCol="labelCol" <a-date-picker showTime valueFormat="YYYY-MM-DD HH:mm:ss" style="width: 100%" v-model="model.orderDate"/>
:wrapperCol="wrapperCol" </a-form-model-item>
label="订单日期">
<a-date-picker showTime format="YYYY-MM-DD HH:mm:ss" style="width: 100%" v-decorator="[ 'orderDate',{}]"/>
</a-form-item>
</a-col> </a-col>
</a-row> </a-row>
<a-row class="form-row" :gutter="0"> <a-row class="form-row" :gutter="0">
<a-col :lg="8"> <a-col :lg="8">
<a-form-item <a-form-model-item label="订单金额">
:labelCol="labelCol" <a-input-number placeholder="请输入订单金额" style="width: 100%" v-model="model.orderMoney"/>
:wrapperCol="wrapperCol" </a-form-model-item>
label="订单金额">
<a-input-number placeholder="请输入订单金额" style="width: 100%" v-decorator="[ 'orderMoney', {}]"/>
</a-form-item>
</a-col> </a-col>
<a-col :lg="8"> <a-col :lg="8">
<a-form-item <a-form-model-item label="订单备注">
:labelCol="labelCol" <a-input placeholder="请输入订单备注" v-model="model.content"/>
:wrapperCol="wrapperCol" </a-form-model-item>
label="订单备注">
<a-input placeholder="请输入订单备注" v-decorator="['content', {}]"/>
</a-form-item>
</a-col> </a-col>
</a-row> </a-row>
</a-form> </a-form-model>
<!-- 子表单区域 --> <!-- 子表单区域 -->
<a-tabs v-model="activeKey" @change="handleChangeTabs"> <a-tabs v-model="activeKey" @change="handleChangeTabs">
...@@ -100,11 +83,9 @@ ...@@ -100,11 +83,9 @@
<script> <script>
import JEditableTable from '@/components/jeecg/JEditableTable' import JEditableTable from '@/components/jeecg/JEditableTable'
import { FormTypes, VALIDATE_NO_PASSED, getRefPromise, validateFormAndTables } from '@/utils/JEditableTableUtil' import { FormTypes, VALIDATE_NO_PASSED, getRefPromise, validateFormModelAndTables } from '@/utils/JEditableTableUtil'
import { httpAction, getAction } from '@/api/manage' import { httpAction, getAction } from '@/api/manage'
import JDate from '@/components/jeecg/JDate' import JDate from '@/components/jeecg/JDate'
import pick from 'lodash.pick'
import moment from 'moment'
export default { export default {
name: 'JeecgOrderModalForJEditableTable', name: 'JeecgOrderModalForJEditableTable',
...@@ -115,7 +96,6 @@ ...@@ -115,7 +96,6 @@
return { return {
title: '操作', title: '操作',
visible: false, visible: false,
form: this.$form.createForm(this),
confirmLoading: false, confirmLoading: false,
model: {}, model: {},
labelCol: { labelCol: {
...@@ -235,15 +215,7 @@ ...@@ -235,15 +215,7 @@
edit(record) { edit(record) {
this.visible = true this.visible = true
this.activeKey = '1' this.activeKey = '1'
this.form.resetFields()
this.model = Object.assign({}, record) this.model = Object.assign({}, record)
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.model, 'orderCode', 'ctype', 'orderMoney', 'content'))
//时间格式化
this.form.setFieldsValue({ orderDate: this.model.orderDate ? moment(this.model.orderDate) : null })
})
// 加载子表数据 // 加载子表数据
if (this.model.id) { if (this.model.id) {
let params = { id: this.model.id } let params = { id: this.model.id }
...@@ -259,6 +231,7 @@ ...@@ -259,6 +231,7 @@
editableTables[1].initialize() editableTables[1].initialize()
}) })
this.$emit('close') this.$emit('close')
this.$refs.form.resetFields();
}, },
/** 查询某个tab的数据 */ /** 查询某个tab的数据 */
requestTableData(url, params, tab) { requestTableData(url, params, tab) {
...@@ -286,7 +259,7 @@ ...@@ -286,7 +259,7 @@
validateFields() { validateFields() {
this.getAllTable().then(tables => { this.getAllTable().then(tables => {
/** 一次性验证主表和所有的次表 */ /** 一次性验证主表和所有的次表 */
return validateFormAndTables(this.form, tables) return validateFormModelAndTables(this.$refs.form,this.model, tables)
}).then(allValues => { }).then(allValues => {
let formData = this.classifyIntoFormData(allValues) let formData = this.classifyIntoFormData(allValues)
// 发起请求 // 发起请求
...@@ -303,8 +276,6 @@ ...@@ -303,8 +276,6 @@
/** 整理成formData */ /** 整理成formData */
classifyIntoFormData(allValues) { classifyIntoFormData(allValues) {
let orderMain = Object.assign(this.model, allValues.formValue) let orderMain = Object.assign(this.model, allValues.formValue)
//时间格式化
orderMain.orderDate = orderMain.orderDate ? orderMain.orderDate.format('YYYY-MM-DD HH:mm:ss') : null
return { return {
...orderMain, // 展开 ...orderMain, // 展开
jeecgOrderCustomerList: allValues.tablesValue[0].values, jeecgOrderCustomerList: allValues.tablesValue[0].values,
......
<template>
<a-modal
:title="title"
:width="1200"
:visible="visible"
:destroyOnClose="true"
:maskClosable="false"
:confirmLoading="confirmLoading"
@ok="handleOk"
@cancel="handleCancel">
<a-spin :spinning="confirmLoading">
<a-form-model ref="form" :label-col="labelCol" :wrapper-col="wrapperCol" :model="model" >
<!-- 主表单区域 -->
<a-row class="form-row" :gutter="0">
<a-col :lg="8">
<a-form-model-item label="订单号" prop="orderCode" :rules="[{ required: true, message: '请输入订单号!' }]">
<a-input placeholder="请输入订单号" v-model="model.orderCode"/>
</a-form-model-item>
</a-col>
<a-col :lg="8">
<a-form-model-item label="订单类型">
<a-select placeholder="请选择订单类型" v-model="model.ctype">
<a-select-option value="1">国内订单</a-select-option>
<a-select-option value="2">国际订单</a-select-option>
</a-select>
</a-form-model-item>
</a-col>
<a-col :lg="8">
<a-form-model-item label="订单日期">
<a-date-picker showTime valueFormat="YYYY-MM-DD HH:mm:ss" style="width: 100%" v-model="model.orderDate"/>
</a-form-model-item>
</a-col>
</a-row>
<a-row class="form-row" :gutter="0">
<a-col :lg="8">
<a-form-model-item label="订单金额">
<a-input-number placeholder="请输入订单金额" style="width: 100%" v-model="model.orderMoney"/>
</a-form-model-item>
</a-col>
<a-col :lg="8">
<a-form-model-item label="订单备注">
<a-input placeholder="请输入订单备注" v-model="model.content"/>
</a-form-model-item>
</a-col>
</a-row>
</a-form-model>
<!-- 子表单区域 -->
<a-tabs v-model="activeKey" @change="handleChangeTabs">
<a-tab-pane tab="客户信息" key="1" :forceRender="true">
<j-vxe-table
ref="editableTable1"
toolbar
row-number
row-selection
keep-source
:height="300"
:loading="table1.loading"
:dataSource="table1.dataSource"
:columns="table1.columns"
style="margin-top: 8px;"/>
</a-tab-pane>
<a-tab-pane tab="机票信息" key="2" :forceRender="true">
<j-vxe-table
ref="editableTable2"
toolbar
row-number
row-selection
keep-source
:height="300"
:loading="table2.loading"
:dataSource="table2.dataSource"
:columns="table2.columns"
style="margin-top: 8px;"/>
</a-tab-pane>
</a-tabs>
</a-spin>
</a-modal>
</template>
<script>
import JEditableTable from '@/components/jeecg/JEditableTable'
import { VALIDATE_FAILED, getRefPromise, validateFormModelAndTables } from '@/components/jeecg/JVxeTable/utils/vxeUtils'
import { httpAction, getAction } from '@/api/manage'
import { JVXETypes } from '@/components/jeecg/JVxeTable'
import JDate from '@/components/jeecg/JDate'
export default {
name: 'JeecgOrderModalForJvexTable',
components: {
JDate, JEditableTable
},
data() {
return {
title: '操作',
visible: false,
confirmLoading: false,
model: {},
labelCol: {
xs: { span: 24 },
sm: { span: 6 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 24 - 6 }
},
activeKey: '1',
// 客户信息
table1: {
loading: false,
dataSource: [],
columns: [
{
title: '客户名',
key: 'name',
width: '24%',
type: JVXETypes.input,
defaultValue: '',
placeholder: '请输入${title}',
validateRules: [{ required: true, message: '${title}不能为空' }]
},
{
title: '性别',
key: 'sex',
width: '18%',
type: JVXETypes.select,
options: [ // 下拉选项
{ title: '', value: '1' },
{ title: '', value: '2' }
],
defaultValue: '',
placeholder: '请选择${title}'
},
{
title: '身份证号',
key: 'idcard',
width: '24%',
type: JVXETypes.input,
defaultValue: '',
placeholder: '请输入${title}',
validateRules: [{
pattern: '^\\d{6}(18|19|20)?\\d{2}(0[1-9]|1[012])(0[1-9]|[12]\\d|3[01])\\d{3}(\\d|[xX])$',
message: '${title}格式不正确'
}]
},
{
title: '手机号',
key: 'telphone',
width: '24%',
type: JVXETypes.input,
defaultValue: '',
placeholder: '请输入${title}',
validateRules: [{
pattern: '^1(3|4|5|7|8)\\d{9}$',
message: '${title}格式不正确'
}]
}
]
},
// 机票信息
table2: {
loading: false,
dataSource: [],
columns: [
{
title: '航班号',
key: 'ticketCode',
width: '40%',
type: JVXETypes.input,
defaultValue: '',
placeholder: '请输入${title}',
validateRules: [{ required: true, message: '${title}不能为空' }]
},
{
title: '航班时间',
key: 'tickectDate',
width: '30%',
type: JVXETypes.date,
placeholder: '请选择${title}',
defaultValue: ''
}
]
},
url: {
add: '/test/jeecgOrderMain/add',
edit: '/test/jeecgOrderMain/edit',
orderCustomerList: '/test/jeecgOrderMain/queryOrderCustomerListByMainId',
orderTicketList: '/test/jeecgOrderMain/queryOrderTicketListByMainId'
}
}
},
created() {
},
methods: {
// 获取所有的editableTable实例
getAllTable() {
return Promise.all([
getRefPromise(this, 'editableTable1'),
getRefPromise(this, 'editableTable2')
])
},
add() {
// 默认新增一条数据
this.getAllTable().then(editableTables => {
//editableTables[0].add()
//editableTables[1].add()
})
this.edit({})
},
edit(record) {
this.visible = true
this.activeKey = '1'
this.model = Object.assign({}, record)
// 加载子表数据
if (this.model.id) {
let params = { id: this.model.id }
this.requestTableData(this.url.orderCustomerList, params, this.table1)
this.requestTableData(this.url.orderTicketList, params, this.table2)
}
},
close() {
this.visible = false
this.getAllTable().then(editableTables => {
this.table1.dataSource=[];
this.table2.dataSource=[];
})
this.$emit('close')
},
/** 查询某个tab的数据 */
requestTableData(url, params, tab) {
tab.loading = true
getAction(url, params).then(res => {
tab.dataSource = res.result || []
}).finally(() => {
tab.loading = false
})
},
handleOk() {
this.validateFields()
},
handleCancel() {
this.close()
},
/** ATab 选项卡切换事件 */
handleChangeTabs(key) {
getRefPromise(this, `editableTable${key}`).then(editableTable => {
editableTable.resetScrollTop()
})
},
/** 触发表单验证 */
validateFields() {
this.getAllTable().then(tables => {
/** 一次性验证主表和所有的次表 */
return validateFormModelAndTables(this.$refs.form,this.model, tables)
}).then(allValues => {
let formData = this.classifyIntoFormData(allValues)
// 发起请求
return this.requestAddOrEdit(formData)
}).catch(e => {
if (e.error === VALIDATE_FAILED) {
// 如果有未通过表单验证的子表,就自动跳转到它所在的tab
this.activeKey = e.index == null ? this.activeKey : (e.index + 1).toString()
} else {
console.error(e)
}
})
},
/** 整理成formData */
classifyIntoFormData(allValues) {
let orderMain = Object.assign(this.model, allValues.formValue)
return {
...orderMain, // 展开
jeecgOrderCustomerList: allValues.tablesValue[0].tableData,
jeecgOrderTicketList: allValues.tablesValue[1].tableData
}
},
/** 发起新增或修改的请求 */
requestAddOrEdit(formData) {
let url = this.url.add, method = 'post'
if (this.model.id) {
url = this.url.edit
method = 'put'
}
this.confirmLoading = true
httpAction(url, formData, method).then((res) => {
if (res.success) {
this.$message.success(res.message)
this.$emit('ok')
this.close()
} else {
this.$message.warning(res.message)
}
}).finally(() => {
this.confirmLoading = false
})
}
}
}
</script>
<style scoped>
</style>
\ No newline at end of file
...@@ -11,64 +11,64 @@ ...@@ -11,64 +11,64 @@
<!-- 编辑 --> <!-- 编辑 -->
<a-spin :spinning="confirmLoading" v-if="editStatus"> <a-spin :spinning="confirmLoading" v-if="editStatus">
<a-form :form="form"> <a-form-model ref="form" :model="model" :rules="validatorRules">
<a-form-model-item
<a-form-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="客户姓名" label="客户姓名"
prop="name"
required
hasFeedback> hasFeedback>
<a-input placeholder="请输入客户姓名" v-decorator="['name', {rules: [{ required: true, message: '请输入客户姓名!' }]}]" <a-input placeholder="请输入客户姓名" v-model="model.name" :readOnly="disableSubmit"/>
:readOnly="disableSubmit"/> </a-form-model-item>
</a-form-item> <a-form-model-item
<a-form-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="性别" label="性别"
hasFeedback> hasFeedback>
<a-select v-decorator="['sex', {}]" placeholder="请选择性别"> <a-select v-model="model.sex" placeholder="请选择性别">
<a-select-option value="1">男性</a-select-option> <a-select-option value="1">男性</a-select-option>
<a-select-option value="2">女性</a-select-option> <a-select-option value="2">女性</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="身份证号码" label="身份证号码"
prop="idcard"
hasFeedback> hasFeedback>
<a-input placeholder="请输入身份证号码" v-decorator="['idcard', validatorRules.idcard]" :readOnly="disableSubmit"/> <a-input placeholder="请输入身份证号码" v-model="model.idcard" :readOnly="disableSubmit"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="身份证扫描件" label="身份证扫描件"
hasFeedback> hasFeedback>
<j-image-upload text="上传" v-model="fileList" :isMultiple="true"></j-image-upload> <j-image-upload text="上传" v-model="fileList" :isMultiple="true"></j-image-upload>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="联系方式" label="联系方式"
prop="telphone"
hasFeedback> hasFeedback>
<a-input v-decorator="[ 'telphone', validatorRules.telphone]" :readOnly="disableSubmit"/> <a-input v-model="model.telphone" :readOnly="disableSubmit"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="订单号码" label="订单号码"
v-model="this.orderId"
:hidden="hiding" :hidden="hiding"
hasFeedback> hasFeedback>
<a-input v-decorator="[ 'orderId', {}]" disabled="disabled"/> <a-input v-model="model.orderId" disabled="disabled"/>
</a-form-item> </a-form-model-item>
</a-form> </a-form-model>
</a-spin> </a-spin>
</a-modal> </a-modal>
</template> </template>
<script> <script>
import {httpAction} from '@/api/manage' import {httpAction} from '@/api/manage'
import pick from 'lodash.pick'
import Vue from 'vue' import Vue from 'vue'
import {ACCESS_TOKEN} from "@/store/mutation-types" import {ACCESS_TOKEN} from "@/store/mutation-types"
import JImageUpload from '../../../../components/jeecg/JImageUpload' import JImageUpload from '../../../../components/jeecg/JImageUpload'
...@@ -89,59 +89,6 @@ ...@@ -89,59 +89,6 @@
xs: {span: 24}, xs: {span: 24},
sm: {span: 16}, sm: {span: 16},
}, },
// 表头
columns: [
{
title: '客户名',
align: "center",
dataIndex: 'name',
},
{
title: '性别',
align: "center",
dataIndex: 'sex',
},
{
title: '身份证号码',
align: "center",
dataIndex: 'idcard',
},
{
title: '身份证扫描件',
align: "center",
dataIndex: 'idcardPic',
},
{
title: '电话',
dataIndex: 'telphone',
align: "center",
},
{
title: '订单号码',
dataIndex: 'orderId',
align: "center",
},
{
title: '创建人',
dataIndex: 'createBy',
align: "center",
},
{
title: '创建时间',
dataIndex: 'createTime',
align: "center",
},
{
title: '更新时间',
dataIndex: 'updateBy',
align: "center",
},
{
title: '更新人',
dataIndex: 'updateTime',
align: "center",
},
],
fileList: [], fileList: [],
disableSubmit: false, disableSubmit: false,
selectedRowKeys: [], selectedRowKeys: [],
...@@ -155,7 +102,6 @@ ...@@ -155,7 +102,6 @@
addStatus: false, addStatus: false,
editStatus: false, editStatus: false,
confirmLoading: false, confirmLoading: false,
form: this.$form.createForm(this),
url: { url: {
add: "/test/order/addCustomer", add: "/test/order/addCustomer",
edit: "/test/order/editCustomer", edit: "/test/order/editCustomer",
...@@ -163,8 +109,9 @@ ...@@ -163,8 +109,9 @@
getOrderCustomerList: "/test/order/listOrderCustomerByMainId", getOrderCustomerList: "/test/order/listOrderCustomerByMainId",
}, },
validatorRules: { validatorRules: {
telphone: {rules: [{validator: this.validateMobile}]}, name :[{required: true, message: '请输入客户姓名!'}],
idcard: {rules: [{validator: this.validateIdCard}]} telphone: [{validator: this.validateMobile}],
idcard: [{validator: this.validateIdCard}]
}, },
} }
}, },
...@@ -181,7 +128,6 @@ ...@@ -181,7 +128,6 @@
add(orderId) { add(orderId) {
this.hiding = true; this.hiding = true;
if (orderId) { if (orderId) {
this.orderId = orderId;
this.edit({orderId}, ''); this.edit({orderId}, '');
} else { } else {
this.$message.warning("请选择一个客户信息"); this.$message.warning("请选择一个客户信息");
...@@ -201,17 +147,12 @@ ...@@ -201,17 +147,12 @@
this.hiding = true; this.hiding = true;
this.disableSubmit = false; this.disableSubmit = false;
} }
this.form.resetFields();
this.orderId = record.orderId;
this.model = Object.assign({}, record); this.model = Object.assign({}, record);
if (record.id) { if (record.id) {
this.hiding = false; this.hiding = false;
this.addStatus = false; this.addStatus = false;
this.editStatus = true; this.editStatus = true;
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.model, 'id', 'name', 'sex', 'idcard','telphone', 'orderId', 'createBy', 'createTime', 'updateBy', 'updateTime'))
});
setTimeout(() => { setTimeout(() => {
this.fileList = record.idcardPic this.fileList = record.idcardPic
}, 5) }, 5)
...@@ -226,12 +167,13 @@ ...@@ -226,12 +167,13 @@
this.visible = false; this.visible = false;
this.picUrl = ""; this.picUrl = "";
this.fileList=[]; this.fileList=[];
this.$refs.form.resetFields();
}, },
handleOk() { handleOk() {
const that = this; const that = this;
// 触发表单验证 // 触发表单验证
this.form.validateFields((err, values) => { this.$refs.form.validate(valid => {
if (!err) { if (valid) {
that.confirmLoading = true; that.confirmLoading = true;
let httpurl = ''; let httpurl = '';
let method = ''; let method = '';
...@@ -242,9 +184,7 @@ ...@@ -242,9 +184,7 @@
httpurl += this.url.edit; httpurl += this.url.edit;
method = 'put'; method = 'put';
} }
let formData = Object.assign(this.model, values); let formData = Object.assign({}, this.model);
console.log(formData);
formData.orderId = this.orderId;
if(this.fileList != '') { if(this.fileList != '') {
formData.idcardPic = this.fileList; formData.idcardPic = this.fileList;
}else{ }else{
...@@ -261,6 +201,8 @@ ...@@ -261,6 +201,8 @@
that.confirmLoading = false; that.confirmLoading = false;
that.close(); that.close();
}) })
}else{
return false;
} }
}) })
}, },
......
...@@ -8,46 +8,45 @@ ...@@ -8,46 +8,45 @@
@cancel="handleCancel"> @cancel="handleCancel">
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form"> <a-form-model ref="form" :model="orderMainModel" :rules="validatorRules">
<!-- 主表单区域 --> <!-- 主表单区域 -->
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="orderCode"
label="订单号" label="订单号"
required
hasFeedback> hasFeedback>
<a-input <a-input placeholder="请输入订单号" v-model="orderMainModel.orderCode" />
placeholder="请输入订单号" </a-form-model-item>
v-decorator="['orderCode', {rules: [{ required: true, message: '请输入订单号!' }]}]" <a-form-model-item
/>
</a-form-item>
<a-form-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="订单类型"> label="订单类型">
<a-select placeholder="请输入订单类型" v-decorator="['ctype',{}]"> <a-select placeholder="请输入订单类型" v-model="orderMainModel.ctype">
<a-select-option value="1">国内订单</a-select-option> <a-select-option value="1">国内订单</a-select-option>
<a-select-option value="2">国际订单</a-select-option> <a-select-option value="2">国际订单</a-select-option>
</a-select> </a-select>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="订单日期"> label="订单日期">
<a-date-picker showTime format='YYYY-MM-DD HH:mm:ss' v-decorator="[ 'orderDate',{}]"/> <a-date-picker showTime valueFormat='YYYY-MM-DD HH:mm:ss' v-model="orderMainModel.orderDate"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="订单金额"> label="订单金额">
<a-input-number style="width: 200px" v-decorator="[ 'orderMoney', {}]"/> <a-input-number style="width: 200px" v-model="orderMainModel.orderMoney" />
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="订单备注"> label="订单备注">
<a-input placeholder="请输入订单备注" v-decorator="['content', {}]"/> <a-input placeholder="请输入订单备注" v-model="orderMainModel.content"/>
</a-form-item> </a-form-model-item>
</a-form> </a-form-model>
</a-spin> </a-spin>
</a-modal> </a-modal>
</template> </template>
...@@ -80,8 +79,11 @@ ...@@ -80,8 +79,11 @@
sm: {span: 16}, sm: {span: 16},
}, },
confirmLoading: false, confirmLoading: false,
form: this.$form.createForm(this), validatorRules: {
validatorRules: {}, orderCode: [
{ required: true, message: '请输入订单号!' }
]
},
url: { url: {
add: "/test/order/add", add: "/test/order/add",
edit: "/test/order/edit", edit: "/test/order/edit",
...@@ -95,26 +97,21 @@ ...@@ -95,26 +97,21 @@
this.edit({}); this.edit({});
}, },
edit(record) { edit(record) {
this.form.resetFields();
this.orderMainModel = Object.assign({}, record); this.orderMainModel = Object.assign({}, record);
console.log(this.orderMainModel)
//初始化明细表数据 //初始化明细表数据
console.log(this.orderMainModel.id)
this.visible = true; this.visible = true;
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.orderMainModel, 'orderCode', 'ctype', 'orderMoney', 'content'))
this.form.setFieldsValue({orderDate: this.orderMainModel.orderDate ? moment(this.orderMainModel.orderDate) : null}) //时间格式化
});
console.log(this.orderMainModel)
}, },
close() { close() {
this.$emit('close'); this.$emit('close');
this.visible = false; this.visible = false;
this.$refs.form.resetFields();
}, },
handleOk() { handleOk() {
const that = this; const that = this;
// 触发表单验证 // 触发表单验证
this.form.validateFields((err, values) => { this.$refs.form.validate(valid => {
if (!err) { if (valid) {
that.confirmLoading = true; that.confirmLoading = true;
let httpurl = ''; let httpurl = '';
let method = ''; let method = '';
...@@ -125,15 +122,8 @@ ...@@ -125,15 +122,8 @@
httpurl += this.url.edit; httpurl += this.url.edit;
method = 'put'; method = 'put';
} }
let orderMainData = Object.assign(this.orderMainModel, values);
//时间格式化 httpAction(httpurl, this.orderMainModel, method).then((res) => {
orderMainData.orderDate = orderMainData.orderDate ? orderMainData.orderDate.format('YYYY-MM-DD HH:mm:ss') : null;
let formData = {
...orderMainData
}
console.log(formData)
httpAction(httpurl, formData, method).then((res) => {
if (res.success) { if (res.success) {
that.$message.success(res.message); that.$message.success(res.message);
that.$emit('ok'); that.$emit('ok');
...@@ -144,6 +134,8 @@ ...@@ -144,6 +134,8 @@
that.confirmLoading = false; that.confirmLoading = false;
that.close(); that.close();
}) })
}else{
return false;
} }
}) })
}, },
......
...@@ -10,58 +10,56 @@ ...@@ -10,58 +10,56 @@
cancelText="关闭"> cancelText="关闭">
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form"> <a-form-model ref="form" :model="model" :rules="validatorRules">
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="航班号" label="航班号"
prop="ticketCode"
hasFeedback> hasFeedback>
<a-input <a-input placeholder="请输入航班号" :readOnly="disableSubmit" v-model="model.ticketCode"></a-input>
placeholder="请输入航班号" </a-form-model-item>
:readOnly="disableSubmit" <a-form-model-item
v-decorator="['ticketCode', {rules:[{ required: true,message: '请输入航班号!'}]}]"/>
</a-form-item>
<a-form-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="航班时间" label="航班时间"
prop="tickectDate"
hasFeedback> hasFeedback>
<j-date :trigger-change="true" v-decorator="['tickectDate',{rules:[{ required: true,message: '请输入航班号!'}]}]"></j-date> <j-date v-model="model.tickectDate"></j-date>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="订单号码" label="订单号码"
v-model="this.orderId" v-model="this.orderId"
:hidden="hiding" :hidden="hiding"
hasFeedback> hasFeedback>
<a-input v-decorator="[ 'orderId', {}]" disabled="disabled"/> <a-input v-model="model.orderId" disabled="disabled"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="创建人" label="创建人"
:hidden="hiding" :hidden="hiding"
hasFeedback> hasFeedback>
<a-input v-decorator="[ 'createBy', {}]" :readOnly="disableSubmit"/> <a-input v-model="model.createBy" :readOnly="disableSubmit"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="创建时间" label="创建时间"
:hidden="hiding" :hidden="hiding"
hasFeedback> hasFeedback>
<a-input v-decorator="[ 'createTime', {}]" :readOnly="disableSubmit"/> <a-input v-model="model.createTime" :readOnly="disableSubmit"/>
</a-form-item> </a-form-model-item>
</a-form> </a-form-model>
</a-spin> </a-spin>
</a-modal> </a-modal>
</template> </template>
<script> <script>
import {httpAction} from '@/api/manage' import {httpAction} from '@/api/manage'
import pick from 'lodash.pick'
import moment from 'moment' import moment from 'moment'
import JDate from '@/components/jeecg/JDate' import JDate from '@/components/jeecg/JDate'
...@@ -89,8 +87,10 @@ ...@@ -89,8 +87,10 @@
orderId: '', orderId: '',
hiding: false, hiding: false,
confirmLoading: false, confirmLoading: false,
form: this.$form.createForm(this), validatorRules: {
validatorRules: {}, ticketCode:[{required : true, message: '请输入航班号!'}],
tickectDate:[{required : true, message: '请输入航班时间!'}]
},
url: { url: {
add: '/test/order/addTicket', add: '/test/order/addTicket',
edit: '/test/order/editTicket' edit: '/test/order/editTicket'
...@@ -121,23 +121,19 @@ ...@@ -121,23 +121,19 @@
this.hiding = true; this.hiding = true;
this.disableSubmit = false; this.disableSubmit = false;
} }
this.form.resetFields();
this.orderId = record.orderId;
this.model = Object.assign({}, record); this.model = Object.assign({}, record);
this.visible = true; this.visible = true;
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.model, 'ticketCode', 'tickectDate', 'orderId', 'createBy', 'createTime', 'updateBy', 'updateTime'))
})
}, },
close() { close() {
this.$emit('close'); this.$emit('close');
this.visible = false; this.visible = false;
this.$refs.form.resetFields();
}, },
handleOk() { handleOk() {
const that = this; const that = this;
// 触发表单验证 // 触发表单验证
this.form.validateFields((err, values) => { this.$refs.form.validate(valid => {
if (!err) { if (valid) {
that.confirmLoading = true; that.confirmLoading = true;
let httpurl = ''; let httpurl = '';
let method = ''; let method = '';
...@@ -148,9 +144,8 @@ ...@@ -148,9 +144,8 @@
httpurl += this.url.edit; httpurl += this.url.edit;
method = 'put'; method = 'put';
} }
let formData = Object.assign(this.model, values); this.model.mainId = this.model.orderId;
formData.mainId = this.orderId; httpAction(httpurl, this.model, method).then((res) => {
httpAction(httpurl, formData, method).then((res) => {
if (res.success) { if (res.success) {
that.$message.success(res.message); that.$message.success(res.message);
that.$emit('ok') that.$emit('ok')
...@@ -161,6 +156,8 @@ ...@@ -161,6 +156,8 @@
that.confirmLoading = false; that.confirmLoading = false;
that.close(); that.close();
}) })
}else{
return false;
} }
}) })
}, },
......
...@@ -74,14 +74,11 @@ ...@@ -74,14 +74,11 @@
<a-tabs defaultActiveKey="1"> <a-tabs defaultActiveKey="1">
<a-tab-pane tab="基本信息" key="1" > <a-tab-pane tab="基本信息" key="1" >
<a-card :bordered="false" v-if="selectedKeys.length>0"> <a-card :bordered="false" v-if="selectedKeys.length>0">
<a-form :form="form"> <a-form-model ref="form" :model="model" :rules="validatorRules">
<a-form-item <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="departName" label="机构名称">
:labelCol="labelCol" <a-input placeholder="请输入机构/部门名称" v-model="model.departName" />
:wrapperCol="wrapperCol" </a-form-model-item>
label="机构名称"> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="上级部门">
<a-input placeholder="请输入机构/部门名称" v-decorator="['departName', validatorRules.departName ]"/>
</a-form-item>
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="上级部门">
<a-tree-select <a-tree-select
style="width:100%" style="width:100%"
:dropdownStyle="{maxHeight:'200px',overflow:'auto'}" :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
...@@ -90,26 +87,20 @@ ...@@ -90,26 +87,20 @@
v-model="model.parentId" v-model="model.parentId"
placeholder="无"> placeholder="无">
</a-tree-select> </a-tree-select>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orgCode" label="机构编码">
:labelCol="labelCol" <a-input disabled placeholder="请输入机构编码" v-model="model.orgCode" />
:wrapperCol="wrapperCol" </a-form-model-item>
label="机构编码"> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" prop="orgCategory" label="机构类型">
<a-input disabled placeholder="请输入机构编码" v-decorator="['orgCode', validatorRules.orgCode ]"/>
</a-form-item>
<a-form-item
:labelCol="labelCol"
:wrapperCol="wrapperCol"
label="机构类型">
<template v-if="orgCategoryDisabled"> <template v-if="orgCategoryDisabled">
<a-radio-group v-decorator="['orgCategory',validatorRules.orgCategory]" placeholder="请选择机构类型"> <a-radio-group v-model="model.orgCategory" placeholder="请选择机构类型">
<a-radio value="1"> <a-radio value="1">
公司 公司
</a-radio> </a-radio>
</a-radio-group> </a-radio-group>
</template> </template>
<template v-else> <template v-else>
<a-radio-group v-decorator="['orgCategory',validatorRules.orgCategory]" placeholder="请选择机构类型"> <a-radio-group v-model="model.orgCategory" placeholder="请选择机构类型">
<a-radio value="2"> <a-radio value="2">
部门 部门
</a-radio> </a-radio>
...@@ -118,32 +109,20 @@ ...@@ -118,32 +109,20 @@
</a-radio> </a-radio>
</a-radio-group> </a-radio-group>
</template> </template>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="排序">
:labelCol="labelCol" <a-input-number v-model="model.departOrder" />
:wrapperCol="wrapperCol" </a-form-model-item>
label="排序"> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="手机号">
<a-input-number v-decorator="[ 'departOrder',{'initialValue':0}]"/> <a-input placeholder="请输入手机号" v-model="model.mobile" />
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="地址">
:labelCol="labelCol" <a-input placeholder="请输入地址" v-model="model.address"/>
:wrapperCol="wrapperCol" </a-form-model-item>
label="手机号"> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="备注">
<a-input placeholder="请输入手机号" v-decorator="['mobile', {'initialValue':''}]"/> <a-textarea placeholder="请输入备注" v-model="model.memo"/>
</a-form-item> </a-form-model-item>
<a-form-item </a-form-model>
:labelCol="labelCol"
:wrapperCol="wrapperCol"
label="地址">
<a-input placeholder="请输入地址" v-decorator="['address', {'initialValue':''}]"/>
</a-form-item>
<a-form-item
:labelCol="labelCol"
:wrapperCol="wrapperCol"
label="备注">
<a-textarea placeholder="请输入备注" v-decorator="['memo', {'initialValue':''}]"/>
</a-form-item>
</a-form>
<div class="anty-form-btn"> <div class="anty-form-btn">
<a-button @click="emptyCurrForm" type="default" htmlType="button" icon="sync">重置</a-button> <a-button @click="emptyCurrForm" type="default" htmlType="button" icon="sync">重置</a-button>
<a-button @click="submitCurrForm" type="primary" htmlType="button" icon="form">保存</a-button> <a-button @click="submitCurrForm" type="primary" htmlType="button" icon="form">保存</a-button>
...@@ -166,7 +145,6 @@ ...@@ -166,7 +145,6 @@
</template> </template>
<script> <script>
import DepartModal from './modules/DepartModal' import DepartModal from './modules/DepartModal'
import pick from 'lodash.pick'
import {queryDepartTreeList, searchByKeywords, deleteByDepartId} from '@/api/api' import {queryDepartTreeList, searchByKeywords, deleteByDepartId} from '@/api/api'
import {httpAction, deleteAction} from '@/api/manage' import {httpAction, deleteAction} from '@/api/manage'
import {JeecgListMixin} from '@/mixins/JeecgListMixin' import {JeecgListMixin} from '@/mixins/JeecgListMixin'
...@@ -240,11 +218,8 @@ ...@@ -240,11 +218,8 @@
selectedKeys: [], selectedKeys: [],
autoIncr: 1, autoIncr: 1,
currSelected: {}, currSelected: {},
allTreeKeys:[], allTreeKeys:[],
checkStrictly: true, checkStrictly: true,
form: this.$form.createForm(this),
labelCol: { labelCol: {
xs: {span: 24}, xs: {span: 24},
sm: {span: 5} sm: {span: 5}
...@@ -258,10 +233,10 @@ ...@@ -258,10 +233,10 @@
edges: [] edges: []
}, },
validatorRules: { validatorRules: {
departName: {rules: [{required: true, message: '请输入机构/部门名称!'}]}, departName: [{required: true, message: '请输入机构/部门名称!'}],
orgCode: {rules: [{required: true, message: '请输入机构编码!'}]}, orgCode: [{required: true, message: '请输入机构编码!'}],
orgCategory: {rules: [{required: true, message: '请输入机构类型!'}]}, orgCategory:[{required: true, message: '请输入机构类型!'}],
mobile: {rules: [{validator: this.validateMobile}]} mobile:[{validator: this.validateMobile}]
}, },
url: { url: {
delete: '/sys/sysDepart/delete', delete: '/sys/sysDepart/delete',
...@@ -323,8 +298,6 @@ ...@@ -323,8 +298,6 @@
}, },
onExpand(expandedKeys) { onExpand(expandedKeys) {
console.log('onExpand', expandedKeys) console.log('onExpand', expandedKeys)
// if not set autoExpandParent to false, if children expanded, parent can not collapse.
// or, you can remove all expanded children keys.
this.iExpandedKeys = expandedKeys this.iExpandedKeys = expandedKeys
this.autoExpandParent = false this.autoExpandParent = false
}, },
...@@ -337,7 +310,7 @@ ...@@ -337,7 +310,7 @@
this.dropTrigger = '' this.dropTrigger = ''
} }
}, },
// 右键店家下拉关闭下拉框 // 右键下拉关闭下拉框
closeDrop() { closeDrop() {
this.dropTrigger = '' this.dropTrigger = ''
}, },
...@@ -402,14 +375,13 @@ ...@@ -402,14 +375,13 @@
onCheck(checkedKeys, info) { onCheck(checkedKeys, info) {
console.log('onCheck', checkedKeys, info) console.log('onCheck', checkedKeys, info)
this.hiding = false this.hiding = false
//this.checkedKeys = checkedKeys.checked //---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------
// <!---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------>
if(this.checkStrictly){ if(this.checkStrictly){
this.checkedKeys = checkedKeys.checked; this.checkedKeys = checkedKeys.checked;
}else{ }else{
this.checkedKeys = checkedKeys this.checkedKeys = checkedKeys
} }
// <!---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------> //---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------
}, },
onSelect(selectedKeys, e) { onSelect(selectedKeys, e) {
console.log('selected', selectedKeys, e) console.log('selected', selectedKeys, e)
...@@ -431,10 +403,6 @@ ...@@ -431,10 +403,6 @@
}else{ }else{
this.orgCategoryDisabled = false; this.orgCategoryDisabled = false;
} }
this.$nextTick(() => {
this.form.getFieldDecorator('fax', {initialValue: ''})
this.form.setFieldsValue(pick(record, 'departName','orgCategory', 'orgCode', 'departOrder', 'mobile', 'fax', 'address', 'memo'))
})
}, },
getCurrSelectedTitle() { getCurrSelectedTitle() {
return !this.currSelected.title ? '' : this.currSelected.title return !this.currSelected.title ? '' : this.currSelected.title
...@@ -443,7 +411,6 @@ ...@@ -443,7 +411,6 @@
this.hiding = true this.hiding = true
this.checkedKeys = [] this.checkedKeys = []
this.currSelected = {} this.currSelected = {}
this.form.resetFields()
this.selectedKeys = [] this.selectedKeys = []
this.$refs.departAuth.departId = '' this.$refs.departAuth.departId = ''
}, },
...@@ -457,16 +424,14 @@ ...@@ -457,16 +424,14 @@
this.currSelected.receiptTriggerType = value this.currSelected.receiptTriggerType = value
}, },
submitCurrForm() { submitCurrForm() {
this.form.validateFields((err, values) => { this.$refs.form.validate(valid => {
if (!err) { if (valid) {
if (!this.currSelected.id) { if (!this.currSelected.id) {
this.$message.warning('请点击选择要修改部门!') this.$message.warning('请点击选择要修改部门!')
return return
} }
let formData = Object.assign(this.currSelected, values) httpAction(this.url.edit, this.currSelected, 'put').then((res) => {
console.log('Received values of form: ', formData)
httpAction(this.url.edit, formData, 'put').then((res) => {
if (res.success) { if (res.success) {
this.$message.success('保存成功!') this.$message.success('保存成功!')
this.loadTree() this.loadTree()
...@@ -478,12 +443,13 @@ ...@@ -478,12 +443,13 @@
}) })
}, },
emptyCurrForm() { emptyCurrForm() {
this.form.resetFields() this.$refs.form.resetFields();
this.model={}
}, },
nodeSettingFormSubmit() { nodeSettingFormSubmit() {
this.form.validateFields((err, values) => { this.$refs.form.validate(valid => {
if (!err) { if (valid) {
console.log('Received values of form: ', values) console.log('Received values of form: ', this.model)
} }
}) })
}, },
...@@ -520,7 +486,7 @@ ...@@ -520,7 +486,7 @@
that.$message.success('删除成功!') that.$message.success('删除成功!')
that.loadTree() that.loadTree()
//删除后同步清空右侧基本信息内容 //删除后同步清空右侧基本信息内容
let orgCode=that.form.getFieldValue("orgCode"); let orgCode=that.model.orgCode;
if(orgCode && orgCode === that.rightClickSelectedOrgCode){ if(orgCode && orgCode === that.rightClickSelectedOrgCode){
that.onClearSelected() that.onClearSelected()
} }
...@@ -552,7 +518,7 @@ ...@@ -552,7 +518,7 @@
} }
} }
}, },
// <!---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------> //---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------
expandAll () { expandAll () {
this.iExpandedKeys = this.allTreeKeys this.iExpandedKeys = this.allTreeKeys
}, },
...@@ -583,7 +549,7 @@ ...@@ -583,7 +549,7 @@
} }
} }
} }
// <!---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------> //---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------
}, },
created() { created() {
......
...@@ -214,9 +214,8 @@ ...@@ -214,9 +214,8 @@
}, },
handleAddSub(record) { handleAddSub(record) {
this.$refs.modalForm.title = "添加子菜单"; this.$refs.modalForm.title = "添加子菜单";
this.$refs.modalForm.localMenuType = 1;
this.$refs.modalForm.disableSubmit = false; this.$refs.modalForm.disableSubmit = false;
this.$refs.modalForm.edit({status:'1',permsType:'1',route:true,'parentId':record.id}); this.$refs.modalForm.edit({status:'1',permsType:'1',route:true,'parentId':record.id,menuType:1});
}, },
handleExpandedRowsChange(expandedRows) { handleExpandedRowsChange(expandedRows) {
this.expandedRowKeys = expandedRows this.expandedRowKeys = expandedRows
......
...@@ -181,9 +181,8 @@ ...@@ -181,9 +181,8 @@
}, },
handleAddSub(record) { handleAddSub(record) {
this.$refs.modalForm.title = "添加子菜单"; this.$refs.modalForm.title = "添加子菜单";
this.$refs.modalForm.localMenuType = 1;
this.$refs.modalForm.disableSubmit = false; this.$refs.modalForm.disableSubmit = false;
this.$refs.modalForm.edit({status:'1',permsType:'1',route:true,'parentId':record.id}); this.$refs.modalForm.edit({status:'1',permsType:'1',route:true,'parentId':record.id,menuType:1});
}, },
handleExpandedRowsChange(expandedRows) { handleExpandedRowsChange(expandedRows) {
this.expandedRowKeys = expandedRows this.expandedRowKeys = expandedRows
......
...@@ -384,11 +384,8 @@ ...@@ -384,11 +384,8 @@
this.$message.error('请选择一个角色!') this.$message.error('请选择一个角色!')
} else { } else {
this.$refs.modalForm2.roleDisabled = true this.$refs.modalForm2.roleDisabled = true
this.$refs.modalForm2.selectedRole = [this.currentRoleId]
this.$refs.modalForm2.add()
this.$refs.modalForm2.title = '新增' this.$refs.modalForm2.title = '新增'
this.$refs.modalForm2.edit({activitiSync:'1',userIdentity:1,selectedroles:this.currentRoleId})
} }
}, },
modalFormOk2() { modalFormOk2() {
......
...@@ -150,14 +150,16 @@ ...@@ -150,14 +150,16 @@
}) })
}, },
getDataByResult(result){ getDataByResult(result){
return result.map(item=>{ if(result && result.length>0){
//判断是否标记了带有子节点 return result.map(item=>{
if(item[this.hasChildrenField]=='1'){ //判断是否标记了带有子节点
let loadChild = { id: item.id+'_loadChild', name: 'loading...', isLoading: true } if(item[this.hasChildrenField]=='1'){
item.children = [loadChild] let loadChild = { id: item.id+'_loadChild', name: 'loading...', isLoading: true }
} item.children = [loadChild]
return item }
}) return item
})
}
}, },
handleExpand(expanded, record){ handleExpand(expanded, record){
// 判断是否是展开状态 // 判断是否是展开状态
......
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
<!-- 操作按钮区域 --> <!-- 操作按钮区域 -->
<div class="table-operator" style="border-top: 5px"> <div class="table-operator" style="border-top: 5px">
<a-button @click="handleAdd" type="primary" icon="plus" >添加用户</a-button> <a-button @click="handleAdd" type="primary" icon="plus">添加用户</a-button>
<a-button type="primary" icon="download" @click="handleExportXls('用户信息')">导出</a-button> <a-button type="primary" icon="download" @click="handleExportXls('用户信息')">导出</a-button>
<a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel"> <a-upload name="file" :showUploadList="false" :multiple="false" :headers="tokenHeader" :action="importExcelUrl" @change="handleImportExcel">
<a-button type="primary" icon="import">导入</a-button> <a-button type="primary" icon="import">导入</a-button>
...@@ -120,7 +120,7 @@ ...@@ -120,7 +120,7 @@
</template> </template>
<span slot="action" slot-scope="text, record"> <span slot="action" slot-scope="text, record">
<a @click="handleEdit(record)" >编辑</a> <a @click="handleEdit(record)">编辑</a>
<a-divider type="vertical"/> <a-divider type="vertical"/>
......
...@@ -11,16 +11,17 @@ ...@@ -11,16 +11,17 @@
cancelText="关闭"> cancelText="关闭">
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form"> <a-form-model ref="form" :model="model" :rules="validatorRules">
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="机构名称" label="机构名称"
prop="departName"
:hidden="false" :hidden="false"
hasFeedback > hasFeedback >
<a-input id="departName" placeholder="请输入机构/部门名称" v-decorator="['departName', validatorRules.departName ]"/> <a-input id="departName" placeholder="请输入机构/部门名称" v-model="model.departName"/>
</a-form-item> </a-form-model-item>
<a-form-item :labelCol="labelCol" :wrapperCol="wrapperCol" :hidden="seen" label="上级部门" hasFeedback> <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" :hidden="seen" label="上级部门" hasFeedback>
<a-tree-select <a-tree-select
style="width:100%" style="width:100%"
:dropdownStyle="{maxHeight:'200px',overflow:'auto'}" :dropdownStyle="{maxHeight:'200px',overflow:'auto'}"
...@@ -29,20 +30,20 @@ ...@@ -29,20 +30,20 @@
placeholder="请选择上级部门" placeholder="请选择上级部门"
:disabled="condition"> :disabled="condition">
</a-tree-select> </a-tree-select>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="机构类型"> label="机构类型">
<template v-if="seen"> <template v-if="seen">
<a-radio-group v-decorator="['orgCategory',validatorRules.orgCategory]" placeholder="请选择机构类型"> <a-radio-group v-model="model.orgCategory" placeholder="请选择机构类型">
<a-radio value="1"> <a-radio value="1">
公司 公司
</a-radio> </a-radio>
</a-radio-group> </a-radio-group>
</template> </template>
<template v-else> <template v-else>
<a-radio-group v-decorator="['orgCategory',validatorRules.orgCategory]" placeholder="请选择机构类型"> <a-radio-group v-model="model.orgCategory" placeholder="请选择机构类型">
<a-radio value="2"> <a-radio value="2">
部门 部门
</a-radio> </a-radio>
...@@ -50,40 +51,41 @@ ...@@ -50,40 +51,41 @@
岗位 岗位
</a-radio> </a-radio>
</a-radio-group> </a-radio-group>
</template> </template>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="mobile"
label="电话"> label="电话">
<a-input placeholder="请输入电话" v-decorator="['mobile',validatorRules.mobile]" /> <a-input placeholder="请输入电话" v-model="model.mobile"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="传真"> label="传真">
<a-input placeholder="请输入传真" v-decorator="['fax', {}]" /> <a-input placeholder="请输入传真" v-model="model.fax"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="地址"> label="地址">
<a-input placeholder="请输入地址" v-decorator="['address', {}]" /> <a-input placeholder="请输入地址" v-model="model.address"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="排序"> label="排序">
<a-input-number v-decorator="[ 'departOrder',{'initialValue':0}]" /> <a-input-number v-model="model.departOrder"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="备注"> label="备注">
<a-textarea placeholder="请输入备注" v-decorator="['memo', {}]" /> <a-textarea placeholder="请输入备注" v-model="model.memo"/>
</a-form-item> </a-form-model-item>
</a-form> </a-form-model>
</a-spin> </a-spin>
</a-modal> </a-modal>
</template> </template>
...@@ -107,7 +109,10 @@ ...@@ -107,7 +109,10 @@
visible: false, visible: false,
condition:true, condition:true,
disableSubmit:false, disableSubmit:false,
model: {}, model: {
departOrder:0,
orgCategory:'1'
},
menuhidden:false, menuhidden:false,
menuusing:true, menuusing:true,
labelCol: { labelCol: {
...@@ -120,11 +125,11 @@ ...@@ -120,11 +125,11 @@
}, },
confirmLoading: false, confirmLoading: false,
form: this.$form.createForm(this),
validatorRules:{ validatorRules:{
departName:{rules: [{ required: true, message: '请输入机构/部门名称!' }]}, departName:[{ required: true, message: '请输入机构/部门名称!' }],
orgCode:{rules: [{ required: true, message: '请输入机构编码!' }]}, orgCode:[{ required: true, message: '请输入机构编码!' }],
mobile:{rules: [{validator:this.validateMobile}]} mobile: [{validator:this.validateMobile}],
orgCategory:[{required: true, message: '请输入机构类型!'}]
}, },
url: { url: {
add: "/sys/sysDepart/add", add: "/sys/sysDepart/add",
...@@ -159,35 +164,28 @@ ...@@ -159,35 +164,28 @@
this.edit(depart); this.edit(depart);
}, },
edit (record) { edit (record) {
this.form.resetFields();
this.model = Object.assign({}, {});
this.visible = true; this.visible = true;
this.loadTreeData(); this.loadTreeData();
this.model.parentId = record!=null?record.toString():null; this.model.parentId = record!=null?record.toString():null;
if(this.seen){ if(this.seen){
this.model.orgCategory = '1'; this.model.orgCategory = '1';
}else{ }else{
this.model.orgCategory = '2'; this.model.orgCategory = '2';
} }
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.model,'orgCategory','departName','departNameEn','departNameAbbr','departOrder','description','orgType','orgCode','mobile','fax','address','memo','status','delFlag'))
});
}, },
close () { close () {
this.$emit('close'); this.$emit('close');
this.disableSubmit = false; this.disableSubmit = false;
this.visible = false; this.visible = false;
this.$refs.form.resetFields();
}, },
handleOk () { handleOk () {
const that = this; const that = this;
// 触发表单验证 // 触发表单验证
this.form.validateFields((err, values) => { this.$refs.form.validate(valid => {
if (!err) { if (valid) {
that.confirmLoading = true; that.confirmLoading = true;
let formData = Object.assign(this.model, values); httpAction(this.url.add,this.model,"post").then((res)=>{
//时间格式化
console.log(formData)
httpAction(this.url.add,formData,"post").then((res)=>{
if(res.success){ if(res.success){
that.$message.success(res.message); that.$message.success(res.message);
that.loadTreeData(); that.loadTreeData();
...@@ -200,6 +198,8 @@ ...@@ -200,6 +198,8 @@
that.close(); that.close();
}) })
}else{
return false;
} }
}) })
}, },
......
...@@ -38,11 +38,9 @@ ...@@ -38,11 +38,9 @@
import pick from 'lodash.pick' import pick from 'lodash.pick'
import { getAction } from '@/api/manage' import { getAction } from '@/api/manage'
import { queryIdTree } from '@/api/api' import { queryIdTree } from '@/api/api'
import userModal from './UserModal'
export default { export default {
name: "DepartWindow", name: "DepartWindow",
components: { components: {
userModal,
}, },
data () { data () {
return { return {
......
...@@ -10,11 +10,6 @@ ...@@ -10,11 +10,6 @@
<a-input placeholder="请输入账号" v-model="queryParam.username"></a-input> <a-input placeholder="请输入账号" v-model="queryParam.username"></a-input>
</a-form-item> </a-form-item>
</a-col> </a-col>
<!--<a-col :md="8" :sm="8">-->
<!--<a-form-item label="用户名称" :labelCol="{span: 5}" :wrapperCol="{span: 18, offset: 1}">-->
<!--<a-input placeholder="请输入名称查询" v-model="queryParam.realname"></a-input>-->
<!--</a-form-item>-->
<!--</a-col>-->
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons"> <span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
<a-col :md="6" :sm="24"> <a-col :md="6" :sm="24">
<a-button type="primary" @click="searchQuery" icon="search" style="margin-left: 18px">查询</a-button> <a-button type="primary" @click="searchQuery" icon="search" style="margin-left: 18px">查询</a-button>
...@@ -76,7 +71,7 @@ ...@@ -76,7 +71,7 @@
</a> </a>
<a-menu slot="overlay"> <a-menu slot="overlay">
<a-menu-item> <a-menu-item>
<a href="javascript:;" @click="handleDeptRole(record)">分配部门角色</a> <a href="javascript:;" @click="handleDeptRole(record)">部门角色</a>
</a-menu-item> </a-menu-item>
<a-menu-item> <a-menu-item>
...@@ -294,12 +289,9 @@ ...@@ -294,12 +289,9 @@
} else { } else {
this.$refs.modalForm.departDisabled = true; this.$refs.modalForm.departDisabled = true;
//初始化负责部门 //初始化负责部门
this.$refs.modalForm.userDepartModel.departIdList = [this.currentDeptId]; //传入一个部门id this.$refs.modalForm.nextDepartOptions=[{value:this.currentDept.key,label:this.currentDept.title}]
this.$refs.modalForm.add();
//update-begin---author:liusq Date:20210223 for:https://gitee.com/jeecg/jeecg-boot/issues/I2SDU1------------
this.$refs.modalForm.resultDepartOptions=[{key:this.currentDept.key,title:this.currentDept.title}]
//update-end---author:liusq Date:20210223 for:https://gitee.com/jeecg/jeecg-boot/issues/I2SDU1------------
this.$refs.modalForm.title = "新增"; this.$refs.modalForm.title = "新增";
this.$refs.modalForm.edit({activitiSync:'1',userIdentity:1,selecteddeparts:this.currentDeptId})
} }
}, },
selectOK(data) { selectOK(data) {
......
...@@ -9,46 +9,48 @@ ...@@ -9,46 +9,48 @@
cancelText="关闭" cancelText="关闭"
> >
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form"> <a-form-model ref="form" :model="model" :rules="validatorRules">
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="itemText"
label="名称"> label="名称">
<a-input placeholder="请输入名称" v-decorator.trim="['itemText', validatorRules.itemText]"/> <a-input placeholder="请输入名称" v-model="model.itemText"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="itemValue"
label="数据值"> label="数据值">
<a-input placeholder="请输入数据值" v-decorator.trim="['itemValue', validatorRules.itemValue]"/> <a-input placeholder="请输入数据值" v-model="model.itemValue" />
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="描述"> label="描述">
<a-input v-decorator="['description']"/> <a-input v-model="model.description" />
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="排序值"> label="排序值">
<a-input-number :min="1" v-decorator="['sortOrder',{'initialValue':1}]"/> <a-input-number :min="1" v-model="model.sortOrder" />
值越小越靠前,支持小数 值越小越靠前
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="是否启用" label="是否启用"
hasFeedback> hasFeedback>
<a-switch checkedChildren="启用" unCheckedChildren="禁用" @change="onChose" v-model="visibleCheck"/> <a-switch checkedChildren="启用" unCheckedChildren="禁用" @change="onChose" v-model="visibleCheck"/>
</a-form-item> </a-form-model-item>
</a-form> </a-form-model>
</a-spin> </a-spin>
</a-modal> </a-modal>
</template> </template>
...@@ -77,10 +79,9 @@ ...@@ -77,10 +79,9 @@
sm: {span: 16}, sm: {span: 16},
}, },
confirmLoading: false, confirmLoading: false,
form: this.$form.createForm(this),
validatorRules: { validatorRules: {
itemText: {rules: [{required: true, message: '请输入名称!'}]}, itemText: [{required: true, message: '请输入名称!'}],
itemValue: {rules: [{required: true, message: '请输入数据值!'},{validator: this.validateItemValue}]}, itemValue: [{required: true, message: '请输入数据值!'},{validator: this.validateItemValue}],
}, },
} }
}, },
...@@ -89,22 +90,19 @@ ...@@ -89,22 +90,19 @@
methods: { methods: {
add(dictId) { add(dictId) {
this.dictId = dictId; this.dictId = dictId;
this.edit({}); //初始化默认值
this.edit({sortOrder:1,status:1});
}, },
edit(record) { edit(record) {
if (record.id) { if (record.id) {
this.dictId = record.dictId; this.dictId = record.dictId;
this.status = record.status;
this.visibleCheck = (record.status == 1) ? true : false;
} }
this.form.resetFields(); this.status = record.status;
this.visibleCheck = (record.status == 1) ? true : false;
this.model = Object.assign({}, record); this.model = Object.assign({}, record);
this.model.dictId = this.dictId; this.model.dictId = this.dictId;
this.model.status = this.status; this.model.status = this.status;
this.visible = true; this.visible = true;
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.model, 'itemText', 'itemValue', 'description', 'sortOrder'))
});
}, },
onChose(checked) { onChose(checked) {
if (checked) { if (checked) {
...@@ -119,19 +117,18 @@ ...@@ -119,19 +117,18 @@
handleOk() { handleOk() {
const that = this; const that = this;
// 触发表单验证 // 触发表单验证
this.form.validateFields((err, values) => { this.$refs.form.validate(valid => {
if (!err) { if (valid) {
that.confirmLoading = true; that.confirmLoading = true;
values.itemText = (values.itemText || '').trim() this.model.itemText = (this.model.itemText || '').trim()
values.itemValue = (values.itemValue || '').trim() this.model.itemValue = (this.model.itemValue || '').trim()
values.description = (values.description || '').trim() this.model.description = (this.model.description || '').trim()
let formData = Object.assign(this.model, values); this.model.status = this.status;
formData.status = this.status;
let obj; let obj;
if (!this.model.id) { if (!this.model.id) {
obj = addDictItem(formData); obj = addDictItem(this.model);
} else { } else {
obj = editDictItem(formData); obj = editDictItem(this.model);
} }
obj.then((res) => { obj.then((res) => {
if (res.success) { if (res.success) {
...@@ -144,6 +141,8 @@ ...@@ -144,6 +141,8 @@
that.confirmLoading = false; that.confirmLoading = false;
that.close(); that.close();
}) })
}else{
return false;
} }
}) })
}, },
...@@ -154,6 +153,7 @@ ...@@ -154,6 +153,7 @@
close() { close() {
this.$emit('close'); this.$emit('close');
this.visible = false; this.visible = false;
this.$refs.form.resetFields();
}, },
validateItemValue(rule, value, callback){ validateItemValue(rule, value, callback){
let param = { let param = {
......
...@@ -9,30 +9,34 @@ ...@@ -9,30 +9,34 @@
cancelText="关闭" cancelText="关闭"
> >
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form"> <a-form-model ref="form" :model="model" :rules="validatorRules">
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="dictName"
required
label="字典名称"> label="字典名称">
<a-input placeholder="请输入字典名称" v-decorator.trim="[ 'dictName', validatorRules.dictName]"/> <a-input placeholder="请输入字典名称" v-model="model.dictName"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="dictCode"
required
label="字典编码"> label="字典编码">
<a-input placeholder="请输入字典编码" v-decorator.trim="[ 'dictCode', validatorRules.dictCode]"/> <a-input placeholder="请输入字典编码" v-model="model.dictCode"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="描述"> label="描述">
<a-input v-decorator="[ 'description']"/> <a-input v-model="model.description"/>
</a-form-item> </a-form-model-item>
</a-form> </a-form-model>
</a-spin> </a-spin>
</a-modal> </a-modal>
</template> </template>
...@@ -58,14 +62,12 @@ ...@@ -58,14 +62,12 @@
sm: { span: 16 } sm: { span: 16 }
}, },
confirmLoading: false, confirmLoading: false,
form: this.$form.createForm(this),
validatorRules: { validatorRules: {
dictName: { rules: [{ required: true, message: '请输入字典名称!' }] }, dictName: [{ required: true, message: '请输入字典名称!' }],
dictCode: { dictCode: [
rules: [{ required: true, message: '请输入字典编码!' }, { required: true, message: '请输入字典编码!' },
{ validator: this.validateDictCode }] { validator: this.validateDictCode }]
} }
}
} }
}, },
created() { created() {
...@@ -99,30 +101,24 @@ ...@@ -99,30 +101,24 @@
} else { } else {
this.visiblekey = false this.visiblekey = false
} }
this.form.resetFields()
this.model = Object.assign({}, record) this.model = Object.assign({}, record)
this.visible = true this.visible = true
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.model, 'dictName', 'dictCode', 'description'))
})
}, },
// 确定 // 确定
handleOk() { handleOk() {
const that = this const that = this
// 触发表单验证 // 触发表单验证
this.form.validateFields((err, values) => { this.$refs.form.validate(valid => {
if (!err) { if (valid) {
that.confirmLoading = true that.confirmLoading = true
values.dictName = (values.dictName || '').trim() this.model.dictName = (this.model.dictName || '').trim()
values.dictCode = (values.dictCode || '').trim() this.model.dictCode = (this.model.dictCode || '').trim()
values.description = (values.description || '').trim() this.model.description = (this.model.description || '').trim()
let formData = Object.assign(this.model, values)
let obj let obj
console.log(formData)
if (!this.model.id) { if (!this.model.id) {
obj = addDict(formData) obj = addDict(this.model)
} else { } else {
obj = editDict(formData) obj = editDict(this.model)
} }
obj.then((res) => { obj.then((res) => {
if (res.success) { if (res.success) {
...@@ -135,6 +131,8 @@ ...@@ -135,6 +131,8 @@
that.confirmLoading = false that.confirmLoading = false
that.close() that.close()
}) })
}else{
return false;
} }
}) })
}, },
...@@ -145,6 +143,7 @@ ...@@ -145,6 +143,7 @@
close() { close() {
this.$emit('close') this.$emit('close')
this.visible = false this.visible = false
this.$refs.form.resetFields();
} }
} }
} }
......
...@@ -9,51 +9,54 @@ ...@@ -9,51 +9,54 @@
cancelText="关闭"> cancelText="关闭">
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form"> <a-form-model ref="form" :model="model" :rules="validatorRules">
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="ruleName"
label="规则名称"> label="规则名称">
<a-input placeholder="请输入规则名称" v-decorator="['ruleName', validatorRules.ruleName]"/> <a-input placeholder="请输入规则名称" v-model="model.ruleName"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
v-show="showRuleColumn" v-show="showRuleColumn"
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="ruleColumn"
label="规则字段"> label="规则字段">
<a-input placeholder="请输入规则字段" v-decorator="['ruleColumn', validatorRules.ruleColumn]"/> <a-input placeholder="请输入规则字段" v-model.trim="model.ruleColumn"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="ruleConditions"
label="条件规则"> label="条件规则">
<j-dict-select-tag @change="handleChangeRuleCondition" v-decorator="['ruleConditions', validatorRules.ruleConditions]" placeholder="请输入条件规则" :triggerChange="true" dictCode="rule_conditions"/> <j-dict-select-tag @input="handleChangeRuleCondition" v-model="model.ruleConditions" placeholder="请输入条件规则" dictCode="rule_conditions"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="ruleValue"
label="规则值"> label="规则值">
<a-input placeholder="请输入规则值" v-decorator="['ruleValue', validatorRules.ruleValue]"/> <a-input placeholder="请输入规则值" v-model.trim="model.ruleValue"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="状态"> label="状态">
<a-radio-group buttonStyle="solid" v-decorator="['status',{initialValue:'1'}]"> <a-radio-group buttonStyle="solid" v-model="model.status">
<a-radio-button value="1">有效</a-radio-button> <a-radio-button value="1">有效</a-radio-button>
<a-radio-button value="0">无效</a-radio-button> <a-radio-button value="0">无效</a-radio-button>
</a-radio-group> </a-radio-group>
</a-form-item> </a-form-model-item>
</a-form> </a-form-model>
</a-spin> </a-spin>
</a-modal> </a-modal>
</template> </template>
<script> <script>
import { httpAction } from '@/api/manage' import { httpAction } from '@/api/manage'
import pick from 'lodash.pick'
export default { export default {
name: 'PermissionDataRuleModal', name: 'PermissionDataRuleModal',
...@@ -73,13 +76,12 @@ ...@@ -73,13 +76,12 @@
sm: {span: 16} sm: {span: 16}
}, },
confirmLoading: false, confirmLoading: false,
form: this.$form.createForm(this),
permissionId: '', permissionId: '',
validatorRules: { validatorRules: {
ruleConditions: {rules: [{required: true, message: '请选择条件!'}]}, ruleConditions: [{required: true, message: '请选择条件!'}],
ruleName: {rules: [{required: true, message: '请输入规则名称!'}]}, ruleName:[{required: true, message: '请输入规则名称!'}],
ruleValue: {rules: [{required: true, message: '请输入规则值!'}]}, ruleValue: [{required: true, message: '请输入规则值!'}],
ruleColumn: {rules: []} ruleColumn: []
}, },
url: { url: {
list: '/sys/dictItem/list', list: '/sys/dictItem/list',
...@@ -94,10 +96,10 @@ ...@@ -94,10 +96,10 @@
methods: { methods: {
add(permId) { add(permId) {
this.permissionId = permId this.permissionId = permId
this.edit({}) //初始化默认值
this.edit({status:'1'})
}, },
edit(record) { edit(record) {
this.form.resetFields()
this.model = Object.assign({}, record) this.model = Object.assign({}, record)
if (record.permissionId) { if (record.permissionId) {
this.model.permissionId = record.permissionId this.model.permissionId = record.permissionId
...@@ -106,19 +108,17 @@ ...@@ -106,19 +108,17 @@
} }
this.visible = true this.visible = true
this.initRuleCondition() this.initRuleCondition()
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.model, 'status','ruleName', 'ruleColumn', 'ruleConditions', 'ruleValue'))
})
}, },
close() { close() {
this.$emit('close') this.$emit('close')
this.visible = false this.visible = false
this.$refs.form.resetFields()
}, },
handleOk() { handleOk() {
const that = this const that = this
// 触发表单验证 // 触发表单验证
this.form.validateFields((err, values) => { this.$refs.form.validate(valid => {
if (!err) { if (valid) {
that.confirmLoading = true that.confirmLoading = true
let httpurl = '' let httpurl = ''
let method = '' let method = ''
...@@ -129,14 +129,7 @@ ...@@ -129,14 +129,7 @@
httpurl += this.url.edit httpurl += this.url.edit
method = 'put' method = 'put'
} }
let formData = Object.assign(this.model, values) httpAction(httpurl, this.model, method).then((res) => {
if(formData.ruleColumn && formData.ruleColumn.length>0){
formData.ruleColumn = formData.ruleColumn.trim()
}
if(formData.ruleValue && formData.ruleValue.length>0){
formData.ruleValue = formData.ruleValue.trim()
}
httpAction(httpurl, formData, method).then((res) => {
if (res.success) { if (res.success) {
that.$message.success(res.message) that.$message.success(res.message)
that.$emit('ok') that.$emit('ok')
...@@ -147,6 +140,8 @@ ...@@ -147,6 +140,8 @@
that.confirmLoading = false that.confirmLoading = false
that.close() that.close()
}) })
}else{
return false;
} }
}) })
}, },
...@@ -162,9 +157,7 @@ ...@@ -162,9 +157,7 @@
}, },
handleChangeRuleCondition(val){ handleChangeRuleCondition(val){
if(val=='USE_SQL_RULES'){ if(val=='USE_SQL_RULES'){
this.form.setFieldsValue({ this.model.ruleColumn=''
ruleColumn:''
})
this.showRuleColumn = false this.showRuleColumn = false
}else{ }else{
this.showRuleColumn = true this.showRuleColumn = true
......
...@@ -8,27 +8,28 @@ ...@@ -8,27 +8,28 @@
<div :style="{width: '100%',border: '1px solid #e9e9e9',padding: '10px 16px',background: '#fff',}"> <div :style="{width: '100%',border: '1px solid #e9e9e9',padding: '10px 16px',background: '#fff',}">
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form"> <a-form-model ref="form" :model="model" :rules="validatorRules">
<a-form-item label="菜单类型" :labelCol="labelCol" :wrapperCol="wrapperCol" > <a-form-model-item label="菜单类型" :labelCol="labelCol" :wrapperCol="wrapperCol" >
<a-radio-group @change="onChangeMenuType" v-decorator="['menuType',{'initialValue':localMenuType}]"> <a-radio-group @change="onChangeMenuType" v-model="model.menuType">
<a-radio :value="0">一级菜单</a-radio> <a-radio :value="0">一级菜单</a-radio>
<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-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
:label="menuLabel" :label="menuLabel"
prop="name"
hasFeedback > hasFeedback >
<a-input placeholder="请输入菜单名称" v-decorator="[ 'name', validatorRules.name]" :readOnly="disableSubmit"/> <a-input placeholder="请输入菜单名称" v-model="model.name" :readOnly="disableSubmit"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
v-show="localMenuType!=0" v-show="model.menuType!=0"
label="上级菜单" label="上级菜单"
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
...@@ -45,58 +46,61 @@ ...@@ -45,58 +46,61 @@
:disabled="disableSubmit" :disabled="disableSubmit"
@change="handleParentIdChange"> @change="handleParentIdChange">
</a-tree-select> </a-tree-select>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="url"
label="菜单路径"> label="菜单路径">
<a-input placeholder="请输入菜单路径" v-decorator="[ 'url',validatorRules.url]" :readOnly="disableSubmit"/> <a-input placeholder="请输入菜单路径" v-model="model.url" :readOnly="disableSubmit"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
v-show="show" v-show="show"
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="component"
label="前端组件"> label="前端组件">
<a-input placeholder="请输入前端组件" v-decorator="[ 'component',validatorRules.component]" :readOnly="disableSubmit"/> <a-input placeholder="请输入前端组件" v-model="model.component" :readOnly="disableSubmit"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
v-show="localMenuType==0" v-show="model.menuType==0"
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="默认跳转地址"> label="默认跳转地址">
<a-input placeholder="请输入路由参数 redirect" v-decorator="[ 'redirect',{}]" :readOnly="disableSubmit"/> <a-input placeholder="请输入路由参数 redirect" v-model="model.redirect" :readOnly="disableSubmit"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
v-show="!show" v-show="!show"
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="perms"
label="授权标识"> label="授权标识">
<a-input placeholder="请输入授权标识, 如: user:list" v-decorator="[ 'perms', {rules:[{ required: false, message: '请输入授权标识!' },{validator: this.validatePerms }]}]" :readOnly="disableSubmit"/> <a-input placeholder="请输入授权标识, 如: user:list" v-model="model.perms" :readOnly="disableSubmit"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
v-show="!show" v-show="!show"
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="授权策略"> label="授权策略">
<j-dict-select-tag v-decorator="['permsType', {}]" placeholder="请选择授权策略" :type="'radio'" :triggerChange="true" dictCode="global_perms_type"/> <j-dict-select-tag v-model="model.permsType" placeholder="请选择授权策略" :type="'radio'" dictCode="global_perms_type"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
v-show="!show" v-show="!show"
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="状态"> label="状态">
<j-dict-select-tag v-decorator="['status', {}]" placeholder="请选择状态" :type="'radio'" :triggerChange="true" dictCode="valid_status"/> <j-dict-select-tag v-model="model.status" placeholder="请选择状态" :type="'radio'" dictCode="valid_status"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
v-show="show" v-show="show"
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
...@@ -104,61 +108,59 @@ ...@@ -104,61 +108,59 @@
<a-input placeholder="点击选择图标" v-model="model.icon" :readOnly="disableSubmit"> <a-input placeholder="点击选择图标" v-model="model.icon" :readOnly="disableSubmit">
<a-icon slot="addonAfter" type="setting" @click="selectIcons" /> <a-icon slot="addonAfter" type="setting" @click="selectIcons" />
</a-input> </a-input>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
v-show="show" v-show="show"
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="sortNo"
label="排序"> label="排序">
<a-input-number placeholder="请输入菜单排序" style="width: 200px" v-decorator="[ 'sortNo',validatorRules.sortNo]" :readOnly="disableSubmit"/> <a-input-number placeholder="请输入菜单排序" v-model="model.sortNo" style="width: 200px" :readOnly="disableSubmit"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
v-show="show" v-show="show"
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="是否路由菜单"> label="是否路由菜单">
<a-switch checkedChildren="是" unCheckedChildren="否" v-model="routeSwitch"/> <a-switch checkedChildren="是" unCheckedChildren="否" v-model="model.route"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
v-show="show" v-show="show"
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="隐藏路由"> label="隐藏路由">
<a-switch checkedChildren="是" unCheckedChildren="否" v-model="menuHidden"/> <a-switch checkedChildren="是" unCheckedChildren="否" v-model="model.hidden"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
v-show="show" v-show="show"
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="是否缓存路由"> label="是否缓存路由">
<a-switch checkedChildren="是" unCheckedChildren="否" v-model="isKeepalive"/> <a-switch checkedChildren="是" unCheckedChildren="否" v-model="model.keepAlive"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
v-show="show" v-show="show"
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="聚合路由"> label="聚合路由">
<a-switch checkedChildren="是" unCheckedChildren="否" v-model="alwaysShow"/> <a-switch checkedChildren="是" unCheckedChildren="否" v-model="model.alwaysShow"/>
</a-form-item> </a-form-model-item>
<!--update_begin author:wuxianquan date:20190908 for:增加组件,外链打开方式可选 --> <a-form-model-item
<a-form-item
v-show="show" v-show="show"
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
label="打开方式"> label="打开方式">
<a-switch checkedChildren="外部" unCheckedChildren="内部" v-model="internalOrExternal"/> <a-switch checkedChildren="外部" unCheckedChildren="内部" v-model="model.internalOrExternal"/>
</a-form-item> </a-form-model-item>
<!--update_end author:wuxianquan date:20190908 for:增加组件,外链打开方式可选 -->
</a-form-model>
</a-form>
<!-- 选择图标 --> <!-- 选择图标 -->
<icons @choose="handleIconChoose" @close="handleIconCancel" :iconChooseVisible="iconChooseVisible"></icons> <icons @choose="handleIconChoose" @close="handleIconCancel" :iconChooseVisible="iconChooseVisible"></icons>
...@@ -176,7 +178,6 @@ ...@@ -176,7 +178,6 @@
<script> <script>
import {addPermission,editPermission,queryTreeList, duplicateCheck} from '@/api/api' import {addPermission,editPermission,queryTreeList, duplicateCheck} from '@/api/api'
import Icons from './icon/Icons' import Icons from './icon/Icons'
import pick from 'lodash.pick'
export default { export default {
name: "PermissionModal", name: "PermissionModal",
...@@ -185,22 +186,12 @@ ...@@ -185,22 +186,12 @@
return { return {
drawerWidth:700, drawerWidth:700,
treeData:[], treeData:[],
treeValue: '0-0-4',
title:"操作", title:"操作",
visible: false, visible: false,
disableSubmit:false, disableSubmit:false,
model: {}, model: {},
localMenuType:0,
alwaysShow:false,//表单元素-聚合路由
menuHidden:false,//表单元素-隐藏路由
routeSwitch:true, //是否路由菜单
/*update_begin author:wuxianquan date:20190908 for:定义变量,初始值代表内部打开*/
internalOrExternal:false,//菜单打开方式
/*update_end author:wuxianquan date:20190908 for:定义变量,初始值代表内部打开*/
isKeepalive:true, //是否缓存路由
show:true,//根据菜单类型,动态显示隐藏表单元素 show:true,//根据菜单类型,动态显示隐藏表单元素
menuLabel:'菜单名称', menuLabel:'菜单名称',
isRequrie:true, // 是否需要验证
labelCol: { labelCol: {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 5 }, sm: { span: 5 },
...@@ -209,10 +200,7 @@ ...@@ -209,10 +200,7 @@
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 16 }, sm: { span: 16 },
}, },
confirmLoading: false, confirmLoading: false,
form: this.$form.createForm(this),
iconChooseVisible: false, iconChooseVisible: false,
validateStatus:"" validateStatus:""
} }
...@@ -220,23 +208,21 @@ ...@@ -220,23 +208,21 @@
computed:{ computed:{
validatorRules:function() { validatorRules:function() {
return { return {
name:{rules: [{ required: true, message: '请输入菜单标题!' }]}, name:[{ required: true, message: '请输入菜单标题!' }],
component:{rules: [{ required: this.show, message: '请输入前端组件!' }]}, component:[{ required: this.show, message: '请输入前端组件!' }],
url:{rules: [{ required: this.show, message: '请输入菜单路径!' }]}, url: [{ required: this.show, message: '请输入菜单路径!' }],
permsType:{rules: [{ required: true, message: '请输入授权策略!' }]}, permsType: [{ required: true, message: '请输入授权策略!' }],
sortNo:{initialValue:1.0}, perms:[{ required: false, message: '请输入授权标识!' },{validator: this.validatePerms }]
} }
} }
}, },
created () { created () {
this.initDictConfig();
}, },
methods: { methods: {
loadTree(){ loadTree(){
var that = this; var that = this;
queryTreeList().then((res)=>{ queryTreeList().then((res)=>{
if(res.success){ if(res.success){
console.log('----queryTreeList---')
console.log(res) console.log(res)
that.treeData = []; that.treeData = [];
let treeList = res.result.treeList let treeList = res.result.treeList
...@@ -249,76 +235,33 @@ ...@@ -249,76 +235,33 @@
}); });
}, },
add () { add () {
// 默认值 //初始化默认值
this.edit({status:'1',permsType:'1',route:true}); this.edit({status:'1', permsType:'1', sortNo:1.0, route:true, menuType:0 });
}, },
edit (record) { edit (record) {
this.resetScreenSize(); // 调用此方法,根据屏幕宽度自适应调整抽屉的宽度 this.resetScreenSize(); // 调用此方法,根据屏幕宽度自适应调整抽屉的宽度
this.form.resetFields();
this.model = Object.assign({}, record); this.model = Object.assign({}, record);
//--------------------------------------------------------------------------------------------------
//根据菜单类型,动态展示页面字段
console.log(record)
this.alwaysShow = !record.alwaysShow?false:true;
this.menuHidden = !record.hidden?false:true;
if(record.route!=null){
this.routeSwitch = record.route?true:false;
}
if(record.keepAlive!=null){ //根据菜单类型,动态展示页面字段
this.isKeepalive = record.keepAlive?true:false; console.log('record: ',record)
}else{
this.isKeepalive = false; // 升级兼容 如果没有(后台没有传过来、或者是新建)默认为false
}
/*update_begin author:wuxianquan date:20190908 for:编辑初始化数据*/
if(record.internalOrExternal!=null){
this.internalOrExternal = record.internalOrExternal?true:false;
}else{
this.internalOrExternal = false;
}
/*update_end author:wuxianquan date:20190908 for:编辑初始化数据*/
//console.log('record.menuType', record.menuType);
this.show = record.menuType==2?false:true; this.show = record.menuType==2?false:true;
this.menuLabel = record.menuType==2?'按钮/权限':'菜单名称'; this.menuLabel = record.menuType==2?'按钮/权限':'菜单名称';
if(this.model.parentId){
this.localMenuType = 1;
}else{
this.localMenuType = 0;
}
//----------------------------------------------------------------------------------------------
this.visible = true; this.visible = true;
this.loadTree(); this.loadTree();
let fieldsVal = pick(this.model,'name','perms','permsType','component','redirect','url','sortNo','menuType','status');
this.$nextTick(() => {
this.form.setFieldsValue(fieldsVal)
});
}, },
close () { close () {
this.$emit('close'); this.$emit('close');
this.disableSubmit = false; this.disableSubmit = false;
this.visible = false; this.visible = false;
this.$refs.form.resetFields();
}, },
handleOk () { handleOk () {
const that = this; const that = this;
// 触发表单验证 // 触发表单验证
this.form.validateFields((err, values) => { this.$refs.form.validate(valid => {
if (!err) { if (valid) {
this.model.alwaysShow = this.alwaysShow; if ((this.model.menuType == 1 || this.model.menuType == 2) && !this.model.parentId) {
this.model.hidden = this.menuHidden;
this.model.route = this.routeSwitch;
this.model.keepAlive = this.isKeepalive;
/*update_begin author:wuxianquan date:20190908 for:获取值*/
this.model.internalOrExternal = this.internalOrExternal;
/*update_end author:wuxianquan date:20190908 for:获取值*/
let formData = Object.assign(this.model, values);
if ((formData.menuType == 1 || formData.menuType == 2) && !formData.parentId) {
that.validateStatus = 'error'; that.validateStatus = 'error';
that.$message.error("请检查你填的类型以及信息是否正确!"); that.$message.error("请检查你填的类型以及信息是否正确!");
return; return;
...@@ -326,12 +269,11 @@ ...@@ -326,12 +269,11 @@
that.validateStatus = 'success'; that.validateStatus = 'success';
} }
that.confirmLoading = true; that.confirmLoading = true;
console.log(formData);
let obj; let obj;
if (!this.model.id) { if (!this.model.id) {
obj = addPermission(formData); obj = addPermission(this.model);
} else { } else {
obj = editPermission(formData); obj = editPermission(this.model);
} }
obj.then((res) => { obj.then((res) => {
if (res.success) { if (res.success) {
...@@ -344,6 +286,8 @@ ...@@ -344,6 +286,8 @@
that.confirmLoading = false; that.confirmLoading = false;
that.close(); that.close();
}); });
}else{
return false;
} }
}) })
}, },
...@@ -378,9 +322,7 @@ ...@@ -378,9 +322,7 @@
} }
}, },
onChangeMenuType(e) { onChangeMenuType(e) {
//console.log('localMenuType checked', e.target.value) if(this.model.menuType == 2){
this.localMenuType=e.target.value
if(e.target.value == 2){
this.show = false; this.show = false;
this.menuLabel = '按钮/权限'; this.menuLabel = '按钮/权限';
}else{ }else{
...@@ -388,7 +330,7 @@ ...@@ -388,7 +330,7 @@
this.menuLabel = '菜单名称'; this.menuLabel = '菜单名称';
} }
this.$nextTick(() => { this.$nextTick(() => {
this.form.validateFields(['url','component'], { force: true }); this.$refs.form.validateField(['url','component']);
}); });
}, },
selectIcons(){ selectIcons(){
...@@ -400,7 +342,6 @@ ...@@ -400,7 +342,6 @@
handleIconChoose (value) { handleIconChoose (value) {
console.log(value) console.log(value)
this.model.icon = value this.model.icon = value
this.form.icon = value
this.iconChooseVisible = false this.iconChooseVisible = false
}, },
// 根据屏幕变化,设置抽屉尺寸 // 根据屏幕变化,设置抽屉尺寸
...@@ -412,8 +353,6 @@ ...@@ -412,8 +353,6 @@
this.drawerWidth = 700; this.drawerWidth = 700;
} }
}, },
initDictConfig() {
},
handleParentIdChange(value){ handleParentIdChange(value){
if(!value){ if(!value){
this.validateStatus="error" this.validateStatus="error"
......
...@@ -9,35 +9,37 @@ ...@@ -9,35 +9,37 @@
cancelText="关闭"> cancelText="关闭">
<a-spin :spinning="confirmLoading"> <a-spin :spinning="confirmLoading">
<a-form :form="form"> <a-form-model ref="form" :model="model" :rules="validatorRules">
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="roleName"
label="部门角色名称"> label="部门角色名称">
<a-input placeholder="请输入部门角色名称" v-decorator="['roleName', validatorRules.roleName]" /> <a-input placeholder="请输入部门角色名称" v-model="model.roleName"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="roleCode"
label="部门角色编码"> label="部门角色编码">
<a-input placeholder="请输入部门角色编码" v-decorator="['roleCode', validatorRules.roleCode]" /> <a-input placeholder="请输入部门角色编码" v-model="model.roleCode"/>
</a-form-item> </a-form-model-item>
<a-form-item <a-form-model-item
:labelCol="labelCol" :labelCol="labelCol"
:wrapperCol="wrapperCol" :wrapperCol="wrapperCol"
prop="description"
label="描述"> label="描述">
<a-input placeholder="请输入描述" v-decorator="['description', validatorRules.description]" /> <a-input placeholder="请输入描述" v-model="model.description"/>
</a-form-item> </a-form-model-item>
</a-form> </a-form-model>
</a-spin> </a-spin>
</a-modal> </a-modal>
</template> </template>
<script> <script>
import { httpAction } from '@/api/manage' import { httpAction } from '@/api/manage'
import pick from 'lodash.pick'
import {duplicateCheck } from '@/api/api' import {duplicateCheck } from '@/api/api'
export default { export default {
...@@ -55,25 +57,20 @@ ...@@ -55,25 +57,20 @@
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 16 }, sm: { span: 16 },
}, },
confirmLoading: false, confirmLoading: false,
form: this.$form.createForm(this),
validatorRules:{ validatorRules:{
roleName:{ roleName:[
rules: [
{ required: true, message: '请输入部门角色名称!' }, { required: true, message: '请输入部门角色名称!' },
{ min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' } { min: 2, max: 30, message: '长度在 2 到 30 个字符', trigger: 'blur' }
]}, ],
roleCode:{ roleCode: [
rules: [
{ required: true, message: '请输入部门角色编码!'}, { required: true, message: '请输入部门角色编码!'},
{ min: 0, max: 64, message: '长度不超过 64 个字符', trigger: 'blur' }, { min: 0, max: 64, message: '长度不超过 64 个字符', trigger: 'blur' },
{ validator: this.validateRoleCode} { validator: this.validateRoleCode}
]}, ],
description:{ description: [
rules: [
{ min: 0, max: 126, message: '长度不超过 126 个字符', trigger: 'blur' } { min: 0, max: 126, message: '长度不超过 126 个字符', trigger: 'blur' }
]} ]
}, },
url: { url: {
add: "/sys/sysDepartRole/add", add: "/sys/sysDepartRole/add",
...@@ -89,22 +86,19 @@ ...@@ -89,22 +86,19 @@
}, },
edit (record,departId) { edit (record,departId) {
this.departId = departId; this.departId = departId;
this.form.resetFields();
this.model = Object.assign({}, record); this.model = Object.assign({}, record);
this.visible = true; this.visible = true;
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.model,'roleName','roleCode','description'))
});
}, },
close () { close () {
this.$emit('close'); this.$emit('close');
this.visible = false; this.visible = false;
this.$refs.form.resetFields()
}, },
handleOk () { handleOk () {
const that = this; const that = this;
// 触发表单验证 // 触发表单验证
this.form.validateFields((err, values) => { this.$refs.form.validate(valid => {
if (!err) { if (valid) {
that.confirmLoading = true; that.confirmLoading = true;
let httpurl = ''; let httpurl = '';
let method = ''; let method = '';
...@@ -115,9 +109,8 @@ ...@@ -115,9 +109,8 @@
httpurl+=this.url.edit; httpurl+=this.url.edit;
method = 'put'; method = 'put';
} }
let formData = Object.assign(this.model, values); this.model.departId = this.departId;
formData.departId = this.departId; httpAction(httpurl,this.model,method).then((res)=>{
httpAction(httpurl,formData,method).then((res)=>{
if(res.success){ if(res.success){
that.$message.success(res.message); that.$message.success(res.message);
that.$emit('ok'); that.$emit('ok');
...@@ -128,6 +121,8 @@ ...@@ -128,6 +121,8 @@
that.confirmLoading = false; that.confirmLoading = false;
that.close(); that.close();
}) })
}else{
return false;
} }
}) })
}, },
......
...@@ -13,7 +13,6 @@ ...@@ -13,7 +13,6 @@
</template> </template>
<script> <script>
import TenantForm from './TenantForm' import TenantForm from './TenantForm'
export default { export default {
name: "TenantModal", name: "TenantModal",
...@@ -32,13 +31,13 @@ ...@@ -32,13 +31,13 @@
add () { add () {
this.visible=true this.visible=true
this.$nextTick(()=>{ this.$nextTick(()=>{
this.$refs.realForm.add(); this.$refs.realForm.show();
}) })
}, },
edit (record) { edit (record) {
this.visible=true this.visible=true
this.$nextTick(()=>{ this.$nextTick(()=>{
this.$refs.realForm.edit(record); this.$refs.realForm.show(record);
}) })
}, },
close () { close () {
......
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册