123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680 |
- <template xmlns:background-color="http://www.w3.org/1999/xhtml">
- <a-row :gutter="10">
- <a-col :md="12" :sm="24">
- <a-card :bordered="false">
- <!-- 按钮操作区域 -->
- <a-row style="margin: 0 0 0 14px" class="table-operator">
- <a-button @click="handleAdd(1)" type="primary">添加部门</a-button>
- <a-button @click="handleAdd(2)" type="primary">添加下级</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-button type="primary" icon="import">导入</a-button>
- </a-upload>
- <j-third-app-button biz-type="depart" :selected-row-keys="selectedRowKeys" syncToApp @sync-finally="onSyncFinally"/>
- <a-button title="删除多条数据" @click="batchDel" type="default">批量删除</a-button>
- </a-row>
- <div style="background: #fff;padding-left:16px;height: 100%; margin-top: 5px">
- <a-alert type="info" :showIcon="true">
- <div slot="message">
- 当前选择:<span v-if="this.currSelected.title">{{ getCurrSelectedTitle() }}</span>
- <a v-if="this.currSelected.title" style="margin-left: 10px" @click="onClearSelected">取消选择</a>
- </div>
- </a-alert>
- <a-input-search @search="onSearch" style="width:100%;margin-top: 10px" placeholder="请输入部门名称"/>
- <!-- 树-->
- <a-col :md="10" :sm="24">
- <template>
- <a-dropdown :trigger="[this.dropTrigger]" @visibleChange="dropStatus">
- <span style="user-select: none">
- <a-tree
- v-if="loading"
- checkable
- multiple
- @select="onSelect"
- @check="onCheck"
- @rightClick="rightHandle"
- :selectedKeys="selectedKeys"
- :checkedKeys="checkedKeys"
- :treeData="departTree"
- :checkStrictly="checkStrictly"
- :expandedKeys.sync="iExpandedKeys"
- :load-data="loadSubTree"
- @expand="onExpand"/>
- </span>
- <a-menu slot="overlay">
- <a-menu-item @click="handleAdd(3)" key="1">添加</a-menu-item>
- <a-menu-item @click="handleDelete" key="2">删除</a-menu-item>
- <a-menu-item @click="closeDrop" key="3">取消</a-menu-item>
- </a-menu>
- </a-dropdown>
- </template>
- </a-col>
- </div>
- </a-card>
- <!---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------>
- <div class="drawer-bootom-button">
- <a-dropdown :trigger="['click']" placement="topCenter">
- <a-menu slot="overlay">
- <a-menu-item key="1" @click="switchCheckStrictly(1)">父子关联</a-menu-item>
- <a-menu-item key="2" @click="switchCheckStrictly(2)">取消关联</a-menu-item>
- <a-menu-item key="3" @click="checkALL">全部勾选</a-menu-item>
- <a-menu-item key="4" @click="cancelCheckALL">取消全选</a-menu-item>
- <a-menu-item key="5" @click="expandAll">展开所有</a-menu-item>
- <a-menu-item key="6" @click="closeAll">合并所有</a-menu-item>
- </a-menu>
- <a-button>
- 树操作 <a-icon type="up" />
- </a-button>
- </a-dropdown>
- </div>
- <!---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------>
- </a-col>
- <a-col :md="12" :sm="24">
- <a-tabs defaultActiveKey="1">
- <a-tab-pane tab="基本信息" key="1" >
- <a-card :bordered="false" v-if="selectedKeys.length>0">
- <a-form-model ref="form" :model="model" :rules="validatorRules">
- <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="机构名称" prop="departName" >
- <a-input placeholder="请输入机构/部门名称" v-model="model.departName"/>
- </a-form-model-item>
- <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="上级部门" prop="parentId">
- <a-tree-select style="width:100%" :dropdownStyle="{maxHeight:'200px',overflow:'auto'}" :treeData="treeData" :disabled="disable" v-model="model.parentId" placeholder="无">
- </a-tree-select>
- </a-form-model-item>
- <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="机构编码" prop="orgCode">
- <a-input disabled placeholder="请输入机构编码" v-model="model.orgCode"/>
- </a-form-model-item>
- <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="机构类型" prop="orgCategory">
- <template v-if="orgCategoryDisabled">
- <a-radio-group v-model="model.orgCategory" placeholder="请选择机构类型">
- <a-radio value="1">
- 公司
- </a-radio>
- </a-radio-group>
- </template>
- <template v-else>
- <a-radio-group v-model="model.orgCategory" placeholder="请选择机构类型">
- <a-radio value="2">
- 部门
- </a-radio>
- <a-radio value="3">
- 岗位
- </a-radio>
- </a-radio-group>
- </template>
- </a-form-model-item>
- <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="排序" prop="departOrder">
- <a-input v-model="model.departOrder"/>
- </a-form-model-item>
- <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="手机号" prop="mobile">
- <a-input placeholder="请输入手机号" v-model="model.mobile"/>
- </a-form-model-item>
- <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="地址" prop="address">
- <a-input placeholder="请输入地址" v-model="model.address"/>
- </a-form-model-item>
- <a-form-model-item :labelCol="labelCol" :wrapperCol="wrapperCol" label="备注" prop="memo">
- <a-textarea placeholder="请输入备注" v-model="model.memo"/>
- </a-form-model-item>
- </a-form-model>
- <div class="anty-form-btn">
- <a-button @click="emptyCurrForm" type="default" htmlType="button" icon="sync">重置</a-button>
- <a-button @click="submitCurrForm" type="primary" htmlType="button" icon="form">保存</a-button>
- </div>
- </a-card>
- <a-card v-else >
- <a-empty>
- <span slot="description"> 请先选择一个部门! </span>
- </a-empty>
- </a-card>
- </a-tab-pane>
- <a-tab-pane tab="部门权限" key="2" forceRender>
- <depart-auth-modal ref="departAuth"/>
- </a-tab-pane>
- </a-tabs>
- </a-col>
- <depart-modal ref="departModal" @ok="loadTree"></depart-modal>
- </a-row>
- </template>
- <script>
- import DepartModal from './modules/DepartModal'
- import { deleteByDepartId, queryDepartTreeSync, searchByKeywords } from '@/api/api'
- import { deleteAction, httpAction } from '@/api/manage'
- import { JeecgListMixin } from '@/mixins/JeecgListMixin'
- import DepartAuthModal from './modules/DepartAuthModal'
- import { cloneObject } from '@/utils/util'
- import JThirdAppButton from '@comp/jeecgbiz/thirdApp/JThirdAppButton'
- // 表头
- const columns = [
- {
- title: '机构名称',
- dataIndex: 'departName'
- },
- {
- title: '机构类型',
- align: 'center',
- dataIndex: 'orgType'
- },
- {
- title: '机构编码',
- dataIndex: 'orgCode',
- },
- {
- title: '手机号',
- dataIndex: 'mobile'
- },
- {
- title: '传真',
- dataIndex: 'fax'
- },
- {
- title: '地址',
- dataIndex: 'address'
- },
- {
- title: '排序',
- align: 'center',
- dataIndex: 'departOrder'
- },
- {
- title: '操作',
- align: 'center',
- dataIndex: 'action',
- scopedSlots: {customRender: 'action'}
- }
- ]
- export default {
- name: 'DepartList',
- mixins: [JeecgListMixin],
- components: {
- JThirdAppButton,
- DepartAuthModal,
- DepartModal
- },
- data() {
- return {
- iExpandedKeys: [],
- loading: true,
- autoExpandParent: false,
- currFlowId: '',
- currFlowName: '',
- disable: true,
- treeData: [],
- visible: false,
- departTree: [],
- departTreeAll: [],
- loadedKeys: [],
- allIds: [],
- rightClickSelectedKey: '',
- rightClickSelectedOrgCode: '',
- hiding: true,
- model: {},
- dropTrigger: '',
- depart: {},
- columns: columns,
- disableSubmit: false,
- checkedKeys: [],
- selectedKeys: [],
- autoIncr: 1,
- currSelected: {},
- allTreeKeys:[],
- loadTreeKeys:[],
- checkStrictly: true,
- labelCol: {
- xs: {span: 24},
- sm: {span: 5}
- },
- wrapperCol: {
- xs: {span: 24},
- sm: {span: 16}
- },
- graphDatasource: {
- nodes: [],
- edges: []
- },
- validatorRules: {
- departName: [{required: true, message: '请输入机构/部门名称!'}],
- orgCode: [{required: true, message: '请输入机构编码!'}],
- orgCategory: [{required: true, message: '请输入机构类型!'}],
- mobile: [{validator: this.validateMobile}]
- },
- url: {
- delete: '/sys/sysDepart/delete',
- edit: '/sys/sysDepart/edit',
- deleteBatch: '/sys/sysDepart/deleteBatch',
- exportXlsUrl: "sys/sysDepart/exportXls",
- importExcelUrl: "sys/sysDepart/importExcel",
- },
- orgCategoryDisabled:false,
- }
- },
- computed: {
- importExcelUrl: function () {
- return `${window._CONFIG['domianURL']}/${this.url.importExcelUrl}`;
- }
- },
- methods: {
- loadData() {
- this.refresh();
- },
- loadTree() {
- var that = this
- //上级部门树信息
- that.treeData = []
- //保存的树信息,搜索是需要用到
- that.departTreeAll = []
- //所有的树信息
- that.departTree = []
- //所有的树节点key信息
- that.allIds = []
-
- that.iExpandedKeys = []
-
- that.loading = false
- queryDepartTreeSync().then((res) => {
- if (res.success) {
- this.allTreeKeys = [];
- for (let i = 0; i < res.result.length; i++) {
- let temp = res.result[i]
- that.treeData.push(temp)
- that.departTreeAll.push(temp)
- that.departTree.push(temp)
- that.allIds.push(temp.key)
- that.allTreeKeys.push(temp.key)
- if(that.loadTreeKeys.indexOf(temp.key)>=0){
- that.iExpandedKeys.push(temp.key)
- }
- }
- that.$nextTick(()=>{
- that.loading = true
- })
- }
- })
- },
- loadSubTree(treeNode) {
- var that = this;
- return new Promise(resolve => {
- queryDepartTreeSync({pid:treeNode.dataRef.id}).then((res) => {
- if (res.success) {
- //判断chidlren是否为空,并修改isLeaf属性值
- if(res.result.length == 0){
- treeNode.dataRef['isLeaf']=true
- return;
- }else{
- treeNode.dataRef['children']= res.result;
- }
- for (let i = 0; i < res.result.length; i++) {
- let temp = res.result[i]
- that.allIds.push(temp.key)
- if(that.loadTreeKeys.indexOf(temp.key)>0){
- that.iExpandedKeys.push(temp.key)
- }
- }
- }
- })
- resolve();
- });
- //保存全部部门信息,方便后面搜索使用
- that.departTreeAll=that.departTree
- },
- refresh() {
- this.loading = true
- this.loadTree()
- },
- // 右键操作方法
- rightHandle(node) {
- this.dropTrigger = 'contextmenu'
- console.log(node.node.eventKey)
- this.rightClickSelectedKey = node.node.eventKey
- this.rightClickSelectedOrgCode = node.node.dataRef.orgCode
- },
- onExpand(expandedKeys) {
- console.log('onExpand', expandedKeys)
- this.iExpandedKeys = expandedKeys
- this.autoExpandParent = false
- this.allTreeKeys=expandedKeys
- this.loadTreeKeys=expandedKeys
- },
- backFlowList() {
- this.$router.back(-1)
- },
- // 右键点击下拉框改变事件
- dropStatus(visible) {
- if (visible == false) {
- this.dropTrigger = ''
- }
- },
- // 右键店家下拉关闭下拉框
- closeDrop() {
- this.dropTrigger = ''
- },
- addRootNode() {
- this.$refs.nodeModal.add(this.currFlowId, '')
- },
- batchDel: function () {
- console.log(this.checkedKeys)
- if (this.checkedKeys.length <= 0) {
- this.$message.warning('请选择一条记录!')
- } else {
- var ids = ''
- for (var a = 0; a < this.checkedKeys.length; a++) {
- ids += this.checkedKeys[a]+ ','
- }
- var that = this
- this.$confirm({
- title: '确认删除',
- content: '确定要删除所选中的 ' + this.checkedKeys.length + ' 条数据,以及子节点数据吗?',
- onOk: function () {
- deleteAction(that.url.deleteBatch, {ids: ids}).then((res) => {
- if (res.success) {
- that.$message.success(res.message)
- that.loadTree()
- that.onClearSelected()
- } else {
- that.$message.warning(res.message)
- }
- })
- }
- })
- }
- },
- onSearch(value) {
- let that = this
- if (value) {
- searchByKeywords({keyWord: value}).then((res) => {
- if (res.success) {
- that.departTree = []
- for (let i = 0; i < res.result.length; i++) {
- let temp = res.result[i]
- that.departTree.push(temp)
- }
- } else {
- that.$message.warning(res.message)
- }
- })
- } else {
- that.departTree=that.departTreeAll
- }
- },
- nodeModalOk() {
- this.loadTree()
- },
- nodeModalClose() {
- },
- hide() {
- this.visible = false
- },
- onCheck(checkedKeys, info) {
- console.log('onCheck', checkedKeys, info)
- this.hiding = false
- //this.checkedKeys = checkedKeys.checked
- // <!---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------>
- if(this.checkStrictly){
- this.checkedKeys = checkedKeys.checked;
- }else{
- this.checkedKeys = checkedKeys
- }
- // <!---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------>
- },
- onSelect(selectedKeys, e) {
- console.log('selected', selectedKeys, e)
- this.hiding = false
- let record = e.node.dataRef
- console.log('onSelect-record', record)
- this.currSelected = Object.assign({}, record)
- this.model = this.currSelected
- this.selectedKeys = [record.key]
- this.model.parentId = record.parentId
- this.setValuesToForm(record)
- this.$refs.departAuth.show(record.id);
- },
- // 触发onSelect事件时,为部门树右侧的form表单赋值
- setValuesToForm(record) {
- if(record.orgCategory == '1'){
- this.orgCategoryDisabled = true;
- }else{
- this.orgCategoryDisabled = false;
- }
- this.$nextTick(() => {
- this.model = cloneObject(record)
- })
- },
- getCurrSelectedTitle() {
- return !this.currSelected.title ? '' : this.currSelected.title
- },
- onClearSelected() {
- this.hiding = true
- this.checkedKeys = []
- this.currSelected = {}
- this.model = cloneObject(this.currSelected)
- this.selectedKeys = []
- this.$refs.departAuth.departId = ''
- },
- handleNodeTypeChange(val) {
- this.currSelected.nodeType = val
- },
- notifyTriggerTypeChange(value) {
- this.currSelected.notifyTriggerType = value
- },
- receiptTriggerTypeChange(value) {
- this.currSelected.receiptTriggerType = value
- },
- submitCurrForm() {
- this.$refs.form.validate((ok, err) => {
- if (ok) {
- if (!this.currSelected.id) {
- this.$message.warning('请点击选择要修改部门!')
- return
- }
- let formData = Object.assign(this.currSelected, this.model)
- console.log('Received values of form: ', formData)
- httpAction(this.url.edit, formData, 'put').then((res) => {
- if (res.success) {
- this.$message.success('保存成功!')
- this.loadTree()
- } else {
- this.$message.error(res.message)
- }
- })
- }
- })
- },
- emptyCurrForm() {
- this.model = this.currSelected
- },
- nodeSettingFormSubmit() {
- this.$refs.form.validate((ok, err) => {
- if (ok) {
- console.log('Received values of form: ', this.model)
- }
- })
- },
- openSelect() {
- this.$refs.sysDirectiveModal.show()
- },
- handleAdd(num) {
- if (num == 1) {
- this.$refs.departModal.add()
- this.$refs.departModal.title = '新增'
- } else if (num == 2) {
- let key = this.currSelected.key
- if (!key) {
- this.$message.warning('请先点击选中上级部门!')
- return false
- }
- this.$refs.departModal.add(this.selectedKeys[0])
- this.$refs.departModal.title = '新增'
- } else {
- this.$refs.departModal.add(this.rightClickSelectedKey)
- this.$refs.departModal.title = '新增'
- }
- },
- handleDelete() {
- var that = this
- this.$confirm({
- title: '确认删除',
- content: '确定要删除此部门以及子节点数据吗?',
- onOk: function () {
- deleteByDepartId({id: that.rightClickSelectedKey}).then((resp) => {
- if (resp.success) {
- //删除成功后,去除已选中中的数据
- that.checkedKeys.splice(that.checkedKeys.findIndex(key => key === that.rightClickSelectedKey), 1);
- that.$message.success('删除成功!')
- that.loadTree()
- //删除后同步清空右侧基本信息内容
- let orgCode = that.model.orgCode
- if(orgCode && orgCode === that.rightClickSelectedOrgCode){
- that.onClearSelected()
- }
- } else {
- that.$message.warning('删除失败!')
- }
- })
- }
- })
- },
- selectDirectiveOk(record) {
- console.log('选中指令数据', record)
- this.nodeSettingForm.setFieldsValue({directiveCode: record.directiveCode})
- this.currSelected.sysCode = record.sysCode
- },
- getFlowGraphData(node) {
- this.graphDatasource.nodes.push({
- id: node.id,
- text: node.flowNodeName
- })
- if (node.children.length > 0) {
- for (let a = 0; a < node.children.length; a++) {
- let temp = node.children[a]
- this.graphDatasource.edges.push({
- source: node.id,
- target: temp.id
- })
- this.getFlowGraphData(temp)
- }
- }
- },
- // <!---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------>
- expandAll () {
- this.iExpandedKeys = this.allTreeKeys
- //this.loadTree()
- },
- closeAll () {
- this.iExpandedKeys = []
- },
- checkALL () {
- this.checkStriccheckStrictlytly = false
- //this.checkedKeys = this.allTreeKeys
- this.checkedKeys = this.allIds
- },
- cancelCheckALL () {
- //this.checkedKeys = this.defaultCheckedKeys
- this.checkedKeys = []
- },
- switchCheckStrictly (v) {
- if(v==1){
- this.checkStrictly = false
- }else if(v==2){
- this.checkStrictly = true
- }
- },
- getAllKeys(node) {
- // console.log('node',node);
- this.allTreeKeys.push(node.key)
- if (node.children && node.children.length > 0) {
- for (let a = 0; a < node.children.length; a++) {
- this.getAllKeys(node.children[a])
- }
- }
- },
- // <!---- author:os_chengtgen -- date:20190827 -- for:切换父子勾选模式 =======------>
- // 验证手机号
- validateMobile(rule,value,callback){
- if (!value || new RegExp(/^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/).test(value)){
- callback();
- }else{
- callback("您的手机号码格式不正确!");
- }
- },
- onSyncFinally({isToLocal}) {
- // 同步到本地时刷新下数据
- if (isToLocal) {
- this.loadData()
- }
- },
- },
- created() {
- this.currFlowId = this.$route.params.id
- this.currFlowName = this.$route.params.name
- // this.loadTree()
- },
- }
- </script>
- <style scoped>
- @import '~@assets/less/common.less';
- </style>
- <style scoped>
- .ant-card-body .table-operator {
- margin: 15px;
- }
- .anty-form-btn {
- width: 100%;
- text-align: center;
- }
- .anty-form-btn button {
- margin: 0 5px;
- }
- .anty-node-layout .ant-layout-header {
- padding-right: 0
- }
- .header {
- padding: 0 8px;
- }
- .header button {
- margin: 0 3px
- }
- .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
- }
- #app .desktop {
- height: auto !important;
- }
- /** Button按钮间距 */
- .drawer-bootom-button {
- /*position: absolute;*/
- bottom: 0;
- width: 100%;
- border-top: 1px solid #e8e8e8;
- padding: 10px 16px;
- text-align: left;
- left: 0;
- background: #fff;
- border-radius: 0 0 2px 2px;
- }
- </style>
|