代码修改

master
toesbieya 6 years ago
parent b145efcaa9
commit 5030e3db57
  1. 5
      vue/src/asset/style/element-ui.scss
  2. 5
      vue/src/asset/style/index.scss
  3. 1
      vue/src/component/abstract/Pagination/index.vue
  4. 126
      vue/src/component/form/Search/index.vue
  5. 24
      vue/src/component/form/Search/item.vue
  6. 7
      vue/src/component/form/ValidateInfo/index.vue
  7. 3
      vue/src/config/index.js
  8. 6
      vue/src/globalMethod/Guide/main.vue
  9. 4
      vue/src/globalMethod/Verify/main.vue
  10. 4
      vue/src/main.js
  11. 3
      vue/src/mixin/chart/logic.js
  12. 31
      vue/src/mixin/docTableMixin.js
  13. 0
      vue/src/util/element-ui/elForm.js
  14. 21
      vue/src/util/element-ui/elTree.js
  15. 15
      vue/src/util/errorLog.js
  16. 2
      vue/src/util/file.js
  17. 3
      vue/src/util/secret.js
  18. 14
      vue/src/util/tree.js
  19. 38
      vue/src/view/app/common/ListPage/index.vue
  20. 6
      vue/src/view/app/login/LoginForm.vue
  21. 2
      vue/src/view/app/login/RegisterForm.vue
  22. 2
      vue/src/view/message/manage/EditDialog.vue
  23. 72
      vue/src/view/message/manage/indexPage.vue
  24. 2
      vue/src/view/message/user/MessageStream.vue
  25. 30
      vue/src/view/purchase/inbound/indexPage.vue
  26. 38
      vue/src/view/purchase/order/indexPage.vue
  27. 38
      vue/src/view/sell/order/indexPage.vue
  28. 30
      vue/src/view/sell/outbound/indexPage.vue
  29. 19
      vue/src/view/stock/current/indexPage.vue
  30. 4
      vue/src/view/system/customer/EditDialog.vue
  31. 93
      vue/src/view/system/customer/indexPage.vue
  32. 18
      vue/src/view/system/department/component/EditDialog.vue
  33. 20
      vue/src/view/system/department/indexPage.vue
  34. 6
      vue/src/view/system/menu/indexPage.vue
  35. 17
      vue/src/view/system/role/EditDialog.vue
  36. 81
      vue/src/view/system/role/indexPage.vue
  37. 4
      vue/src/view/system/supplier/EditDialog.vue
  38. 93
      vue/src/view/system/supplier/indexPage.vue
  39. 13
      vue/src/view/system/user/component/EditDialog.vue
  40. 91
      vue/src/view/system/user/indexPage.vue
  41. 2
      vue/src/view/userCenter/component/Account.vue

@ -181,12 +181,15 @@
}
.el-pagination {
padding-top: 20px;
text-align: right;
.el-pagination__editor.el-input {
margin: 0 5px;
}
.el-table + & {
padding-top: 20px;
}
}
.el-scrollbar {

@ -1,3 +1,4 @@
@import "~normalize.css/normalize.css";
@import "./variables";
@import "~element-ui/packages/theme-chalk/src/index";
@import "~@ele/style/index.scss";
@ -54,7 +55,7 @@ a:hover {
&-thumb {
width: 6px;
border-radius: 5px;
//border-radius: 5px;
background-color: rgba($--color-primary, 0.8);
&:hover {
@ -79,6 +80,7 @@ a:hover {
align-content: space-between;
}
/*----------路由页面的最大高度开始----------*/
$page-header-offsetHeight: $page-header-line-height + #{$page-view-margin * 2};
@ -112,6 +114,7 @@ $page-header-offsetHeight: $page-header-line-height + #{$page-view-margin * 2};
/*----------路由页面的最大高度结束----------*/
.table-container {
margin-top: 10px;
}

@ -19,7 +19,6 @@ export default {
current-page={page}
page-size={pageSize}
total={total}
hide-on-single-page
layout="total, prev, pager, next, jumper"
{...context.data}
/>

@ -4,14 +4,11 @@ import {getElementInnerWidth} from '@/util/browser'
export default {
name: "SearchForm",
provide() {
return {
searchForm: this
}
},
props: {
model: Object,
labelWidth: {type: String, default: '120px'},
/*每个宽度下,一行能有多少个控件,需要是24的因数*/
xs: {type: Number, default: 1}, // <768px
sm: {type: Number, default: 2}, // >=768px
md: {type: Number, default: 3}, // >=998px
@ -20,10 +17,10 @@ export default {
data() {
return {
showCollapse: false,
collapse: true,
num: 0,
width: 'auto'
showCollapse: false, //
collapse: true, //
num: 0, //
span: 8 //24
}
},
@ -32,6 +29,18 @@ export default {
this.collapse = !this.collapse
},
handleSearch() {
this.$emit('search')
},
handleReset() {
if (!this.initialModel || !this.model) {
return
}
this.$emit('reset')
},
getElementNumInRow() {
const vw = getElementInnerWidth(this.$el.parentNode)
@ -43,13 +52,49 @@ export default {
resize() {
const num = this.getElementNumInRow()
this.num = num
this.width = `${100 / num}%`
this.showCollapse = num < this.$slots.default.length
this.span = 24 / num
//
this.num = num === 1 ? num : num - 1
this.showCollapse = this.num < this.$slots.default.length
},
renderChildren(children, hide) {
return children.map(child => (
<el-col span={this.span} class={{hide}}>{child}</el-col>
))
},
renderAction() {
const ctrl = this.collapse
? {i: 'el-icon-arrow-down', t: '展开'}
: {i: 'el-icon-arrow-up', t: '收起'}
return (
<div class="search-form-action">
<el-button type="primary" size="small" on-click={this.handleSearch}> </el-button>
<el-button type="dashed" size="small" plain on-click={this.handleReset}> </el-button>
{this.showCollapse && (
<el-button
type="text"
size="small"
style="padding-left: 0"
on-click={this.handleCollapse}
>
{ctrl.t}
<v-icon icon={ctrl.i} style="margin-left: 0.5em"/>
</el-button>
)}
</div>
)
}
},
mounted() {
//
this.initialModel = this.model
this.resize()
this.resizeObserver = new ResizeObserver(() => this.resize())
this.resizeObserver.observe(this.$el.parentNode)
@ -63,50 +108,24 @@ export default {
},
render() {
const slots = this.$slots.default
const collapseChildren = []
if (this.showCollapse) {
//el-row使v-show
collapseChildren.push(
<el-collapse-transition>
<div v-show={!this.collapse}>
<el-row gutter={20}>
{slots.slice(this.num)}
</el-row>
</div>
</el-collapse-transition>
)
const collapseSlot = this.$scopedSlots.collapse
const slots = this.$slots.default, collapse = this.showCollapse && this.collapse
collapseChildren.push(
collapseSlot ?
collapseSlot({collapse: this.collapse, handle: this.handleCollapse})
:
<div class="searchForm__collapse">
<el-button
type="text"
size="mini"
icon={this.collapse ? 'el-icon-arrow-down' : 'el-icon-arrow-up'}
on-click={this.handleCollapse}
>
{this.collapse ? '展开' : '收起'}
</el-button>
</div>
)
}
const display = collapse ? slots.slice(0, this.num) : slots
const hidden = collapse ? slots.slice(this.num) : []
return (
<el-form
class="searchForm"
class="search-form"
label-position="right"
label-width={this.labelWidth}
label-suffix=""
label-suffix=":"
size="small"
>
<el-row gutter={20}>
{this.num > slots.length ? slots : slots.slice(0, this.num)}
{this.renderChildren(display)}
{this.renderChildren(hidden, true)}
{this.renderAction()}
</el-row>
{this.showCollapse && collapseChildren}
</el-form>
)
}
@ -114,8 +133,10 @@ export default {
</script>
<style lang="scss">
.searchForm {
margin-bottom: -15px;
.search-form {
&-action {
margin-left: auto;
}
> .el-row {
display: flex;
@ -123,11 +144,8 @@ export default {
flex-wrap: wrap;
}
.searchForm__collapse {
position: relative;
bottom: 20px;
margin: 0 auto;
text-align: center;
.hide {
display: none;
}
}
</style>

@ -1,24 +0,0 @@
<script type="text/jsx">
export default {
name: "SearchFormItem",
inject: {
searchForm: {
default: () => ({width: 'auto'})
}
},
props: {label: String},
render() {
const {width} = this.searchForm
return (
<el-col style={{width}} span={100}>
<el-form-item label={this.label}>
{this.$slots.default}
</el-form-item>
</el-col>
)
}
}
</script>

@ -58,12 +58,7 @@ export default {
},
getFormRef() {
let ref = this.form
if (!ref) return
if (typeof ref === 'function') {
ref = ref()
}
return ref
return typeof this.form === 'function' ? this.form() : this.form
},
findFormItem(prop) {

@ -23,9 +23,6 @@ module.exports = {
//侧边栏顶上的logo地址
sidebarLogoUrl: 'https://wpimg.wallstcn.com/69a1c46c-eb1c-4b46-8bd4-e9e686ef5251.png',
//是否使用错误日志捕捉,暂时没啥用
errorLog: true,
//路由配置
route: {
//路由模式,['hash','history']

@ -122,7 +122,7 @@ export default {
if (this.beforeExit) {
const result = this.beforeExit(this.hasDone)
if (result && result.then) {
result.then(() => this.$_clear())
result.then(this.$_clear)
}
else result !== false && this.$_clear()
return
@ -138,7 +138,7 @@ export default {
if (this.step.onPrevious) {
const result = this.step.onPrevious()
if (result && result.then) {
result.then(() => this.$_movePrevious())
result.then(this.$_movePrevious)
}
else result !== false && this.$_movePrevious()
}
@ -152,7 +152,7 @@ export default {
if (this.step.onNext) {
const result = this.step.onNext()
if (result && result.then) {
result.then(() => this.$_moveNext())
result.then(this.$_moveNext)
}
else result !== false && this.$_moveNext()
}

@ -140,7 +140,7 @@ export default {
},
refresh() {
this.initImage().then(() => this.initCanvas())
this.initImage().then(this.initCanvas)
},
initCanvas() {
@ -322,7 +322,7 @@ export default {
},
mounted() {
this.initImage().then(() => this.initCanvas())
this.refresh()
},
}
</script>

@ -1,13 +1,11 @@
import Vue from 'vue'
import 'normalize.css/normalize.css' // a modern alternative to CSS resets
import Element from 'element-ui'
import ElementPersonal from '@ele'
import '@/asset/style/index.scss' // global css
import '@/asset/style/index.scss'
import App from '@/App'
import store from '@/store'
import router from '@/router'
import '@/asset/icon'
import '@/util/errorLog'
import '@/directive'
import filters from './filter'
import globalMethod from '@/globalMethod'

@ -14,8 +14,7 @@ export default {
data() {
return {
loading: false,
chart: null
loading: false
}
},

@ -1,5 +1,4 @@
import tableMixin from '@/mixin/tablePageMixin'
import SearchFormItem from "@/component/form/Search/item"
import LinerProgress from '@/component/LinerProgress'
import ListPage from '@/view/app/common/ListPage'
import {isEmpty} from "@/util"
@ -35,7 +34,7 @@ export const commonMethods = {
export default {
mixins: [tableMixin],
components: {SearchFormItem, LinerProgress, ListPage},
components: {LinerProgress, ListPage},
data() {
return {
@ -69,24 +68,26 @@ export default {
return auth(this.api.exportExcel.url)
},
buttonGroup() {
return [
{icon: 'el-icon-search', type: 'primary', e: this.search, content: '查 询'},
this.canAdd && {icon: 'el-icon-plus', type: 'primary', e: this.add, content: '添 加'},
{icon: 'el-icon-view', type: 'primary', e: this.see, content: '查 看'},
this.canUpdate && {icon: 'el-icon-edit', type: 'primary', e: this.edit, content: '编 辑'},
this.canDel && {icon: 'el-icon-delete', type: 'danger', e: this.del, content: '删 除'},
this.canExport && {icon: 'el-icon-download', type: 'info', e: this.downloadExcel, content: '导 出'}
]
},
listPageConfig() {
return {
loading: this.config.loading,
tableConfig: {
pageLoading: this.config.operating,
buttons: [
this.canAdd && {icon: 'el-icon-plus', e: this.add, content: '添 加'},
{icon: 'el-icon-view', e: this.see, content: '查 看'},
this.canUpdate && {icon: 'el-icon-edit', e: this.edit, content: '编 辑'},
this.canDel && {icon: 'el-icon-delete', e: this.del, content: '删 除'},
this.canExport && {icon: 'el-icon-download', e: this.downloadExcel, content: '导 出'}
],
dataLoading: this.config.loading,
search: {
props: {model: this.searchForm},
on: {search: this.search}
},
table: {
props: {data: this.tableData},
on: {'row-click': this.rowClick, 'expand-change': this.getSubList}
},
paginationConfig: {
pagination: {
props: {model: this.searchForm},
on: {'current-change': this.pageChange}
}

@ -0,0 +1,21 @@
/**
* @desc el-tree展开折叠控制
* @param ref el-tree实例
* @param action 'expand' | 'collapse'
* @param level 展开的节点最大深度为0时匹配全部节点
* @param func 自定义展开的函数传入一个node优先使用
*/
export function expandControl(ref, action = 'expand', level = 1, func) {
const handler = function () {
if (typeof func === 'function') {
return node => func(node)
}
const expand = action === 'expand'
const forAll = level === 0
return node => node.expanded = forAll || node.level <= level ? expand : !expand
}()
ref.store._getAllNodes().forEach(handler)
}

@ -1,15 +0,0 @@
import Vue from 'vue'
import {errorLog} from '@/config'
if (errorLog) {
Vue.config.errorHandler = function (err, vm, info, a) {
//忽略image-viewer错误
if (err.message === `Cannot read property 'complete' of undefined`) return
/*store.commit('errorLog/ADD_ERROR_LOG', {
err,
info,
url: window.location.href
})*/
console.error('这是vue捕捉到的异常', err, info)
}
}

@ -63,6 +63,6 @@ export function upload(blob, filename, options = {}) {
//自动补全附件链接前缀
export function autoCompleteUrl(url) {
if (isEmpty(url)) return ''
if (['http', 'https'].some(i => url.startsWith(i))) return url
if (url.startsWith('http')) return url
return fileConfig.storePrefix + url
}

@ -1,4 +1,7 @@
import pako from 'pako'
import md5 from 'js-md5'
export {md5}
export function unzip(b64Data) {
let strData = atob(b64Data)

@ -132,20 +132,6 @@ export function calc(node, valueKey = 'value', childrenKey = 'children') {
return value
}
/**
* el-tree展开收缩
* 有兴趣的可以研究下怎么平滑展开收缩
* @param ref el-tree实例
* @param action expand | collapse
* @param level 展开的节点最大深度为0时匹配全部节点
*/
export function elTreeControl(ref, action = 'expand', level = 1) {
ref.store._getAllNodes().forEach(node => {
const value = action === 'expand'
node.expanded = level === 0 || node.level <= level ? value : !value
})
}
export function getNodeId(arr) {
if (!arr) return []

@ -2,18 +2,32 @@
import AbstractTable from "@/component/abstract/Table"
import AbstractPagination from "@/component/abstract/Pagination"
import SearchForm from "@/component/form/Search"
import {isEmpty} from "@/util"
const renderSearchForm = (h, slot) => {
return slot && <SearchForm>{slot()}</SearchForm>
const renderSearchForm = (h, config, slot) => {
return slot && <SearchForm {...config}>{slot()}</SearchForm>
}
const renderButtons = (h, buttons) => {
if (buttons.length > 0 && isEmpty(buttons[0].type)) {
buttons[0].type = 'primary'
}
return (
<el-row class="button-group">
{buttons.map(button => {
if (!button) return
const {icon, type, content, e} = button
return <el-button icon={icon} size="small" type={type} on-click={e}>{content}</el-button>
return (
<el-button
icon={icon}
size="small"
plain={isEmpty(type)}
type={type || 'dashed'}
on-click={e}
>
{content}
</el-button>
)
})}
</el-row>
)
@ -34,19 +48,23 @@ export default {
functional: true,
props: {
loading: Boolean,
buttons: {type: Array, default: () => []},
list: Object
data: Object
},
render(h, context) {
const {props: {loading, buttons, list}, scopedSlots} = context
const {props: {data: {pageLoading, buttons, dataLoading, search, table, pagination}}, scopedSlots} = context
return (
<el-card v-loading={loading}>
{renderSearchForm(h, scopedSlots.searchForm)}
<el-card v-loading={pageLoading}>
{renderSearchForm(h, search, scopedSlots.searchForm)}
{renderButtons(h, buttons)}
{renderList(h, {...list, tableColumn: scopedSlots.tableColumn})}
{renderList(h, {
loading: dataLoading,
tableConfig: table,
tableColumn: scopedSlots.tableColumn,
paginationConfig: pagination
})}
{scopedSlots.default && scopedSlots.default()}
</el-card>
)
}

@ -54,9 +54,9 @@
</template>
<script>
import md5 from "js-md5"
import {elSuccess} from "@/util/message"
import {isEmpty} from "@/util"
import {elSuccess} from "@/util/message"
import {md5} from "@/util/secret"
export default {
name: "LoginForm",
@ -94,7 +94,7 @@ export default {
...this.form,
password: md5(this.form.password)
}))
.then(() => this.success())
.then(this.success)
.catch(() => this.loading = false)
})
},

@ -53,10 +53,10 @@
</template>
<script>
import md5 from "js-md5"
import {register, checkLoginName, checkNickName} from "@/api/account"
import {debounce} from "@/util"
import {elSuccess} from "@/util/message"
import {md5} from "@/util/secret"
export default {
name: "RegisterForm",

@ -71,7 +71,7 @@ export default {
components: {AbstractForm, AbstractFormItem, AbstractDialog, RichTextEditor, UserSelector},
props: {
value: {type: Boolean, default: false},
value: Boolean,
type: {type: String, default: 'see'},
data: {type: Object, default: () => ({})}
},

@ -1,34 +1,25 @@
<template>
<el-card v-loading="config.operating">
<search-form>
<search-form-item label="标 题">
<list-page :data="listPageConfig">
<template v-slot:searchForm>
<el-form-item label="标 题">
<el-input v-model="searchForm.title" clearable maxlength="100"/>
</search-form-item>
<search-form-item label="消息类型">
</el-form-item>
<el-form-item label="消息类型">
<el-select v-model="searchForm.type" clearable @clear="searchForm.type=null">
<el-option :value="0" label="通知提醒"/>
<el-option :value="1" label="系统公告"/>
</el-select>
</search-form-item>
<search-form-item label="状 态">
</el-form-item>
<el-form-item label="状 态">
<el-select v-model="searchForm.status" clearable @clear="searchForm.status=null">
<el-option :value="0" label="拟定"/>
<el-option :value="1" label="已发布"/>
<el-option :value="2" label="已撤回"/>
</el-select>
</search-form-item>
</search-form>
</el-form-item>
</template>
<el-row class="button-group">
<el-button icon="el-icon-search" size="small" type="primary" @click="search"> </el-button>
<el-button v-if="canAdd" icon="el-icon-plus" size="small" type="primary" @click="add"> </el-button>
<el-button icon="el-icon-view" size="small" type="primary" @click="see"> </el-button>
<el-button v-if="canUpdate" icon="el-icon-edit" size="small" type="primary" @click="edit"> </el-button>
<el-button v-if="canDel" icon="el-icon-delete" size="small" type="danger" @click="del"> </el-button>
</el-row>
<el-row v-loading="config.loading" class="table-container">
<abstract-table :data="tableData" @row-click="rowClick">
<template v-slot:tableColumn>
<el-table-column align="center" label="#" type="index" width="80"/>
<el-table-column align="center" label="标 题" prop="title" show-overflow-tooltip/>
<el-table-column align="center" label="类 型" show-overflow-tooltip>
@ -44,23 +35,19 @@
<el-table-column align="center" label="发布时间" width="150">
<template v-slot="{row}">{{ row.ptime | timestamp2Date }}</template>
</el-table-column>
</abstract-table>
<abstract-pagination :model="searchForm" @current-change="pageChange"/>
</el-row>
</template>
<edit-dialog v-model="editDialog" :data="row" :type.sync="type" @search="search"/>
</el-card>
</list-page>
</template>
<script>
import tableMixin from '@/mixin/tablePageMixin'
import EditDialog from './EditDialog'
import SearchForm from "@/component/form/Search"
import SearchFormItem from "@/component/form/Search/item"
import ListPage from '@/view/app/common/ListPage'
import {search, add, update, del} from "@/api/message/manage"
import {isEmpty} from '@/util'
import {auth} from "@/util/auth"
import {wic} from "@/util/auth"
import {elConfirm, elError, elSuccess} from "@/util/message"
export default {
@ -68,7 +55,7 @@ export default {
mixins: [tableMixin],
components: {EditDialog, SearchForm, SearchFormItem},
components: {EditDialog, ListPage},
data() {
return {
@ -84,14 +71,31 @@ export default {
},
computed: {
canAdd() {
return auth(add.url)
...wic({add, update, del}),
listPageConfig() {
return {
pageLoading: this.config.operating,
buttons: [
this.canAdd && {icon: 'el-icon-plus', e: this.add, content: '添 加'},
{icon: 'el-icon-view', e: this.see, content: '查 看'},
this.canUpdate && {icon: 'el-icon-edit', e: this.edit, content: '编 辑'},
this.canDel && {icon: 'el-icon-delete', e: this.del, content: '删 除'}
],
dataLoading: this.config.loading,
search: {
props: {model: this.searchForm},
on: {search: this.search}
},
canUpdate() {
return auth(update.url)
table: {
props: {data: this.tableData},
on: {'row-click': this.rowClick}
},
canDel() {
return auth(del.url)
pagination: {
props: {model: this.searchForm},
on: {'current-change': this.pageChange}
}
}
}
},

@ -132,7 +132,7 @@ export default {
},
readAll() {
readAll.request().then(() => this.search())
readAll.request().then(this.search)
},
transformType(type) {

@ -1,16 +1,16 @@
<template>
<list-page :loading="config.operating" :buttons="buttonGroup" :list="listPageConfig">
<list-page :data="listPageConfig">
<template v-slot:searchForm>
<search-form-item label="单 号">
<el-form-item label="单 号">
<el-input v-model="searchForm.idFuzzy" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="采购订单">
</el-form-item>
<el-form-item label="采购订单">
<el-input v-model="searchForm.pidFuzzy" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="创建人">
</el-form-item>
<el-form-item label="创建人">
<el-input v-model="searchForm.cname" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="创建时间">
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="temp.ctime"
format="yyyy-MM-dd"
@ -18,11 +18,11 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
<search-form-item label="审核人">
</el-form-item>
<el-form-item label="审核人">
<el-input v-model="searchForm.vname" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="审核时间">
</el-form-item>
<el-form-item label="审核时间">
<el-date-picker
v-model="temp.vtime"
format="yyyy-MM-dd"
@ -30,14 +30,14 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
<search-form-item label="状 态">
</el-form-item>
<el-form-item label="状 态">
<el-select v-model="temp.status" clearable multiple>
<el-option :value="0" label="拟定"/>
<el-option :value="1" label="待审核"/>
<el-option :value="2" label="已审核"/>
</el-select>
</search-form-item>
</el-form-item>
</template>
<template v-slot:tableColumn>
<el-table-column align="center" type="expand">

@ -1,16 +1,16 @@
<template>
<list-page :loading="config.operating" :buttons="buttonGroup" :list="listPageConfig">
<list-page :data="listPageConfig">
<template v-slot:searchForm>
<search-form-item label="单 号">
<el-form-item label="单 号">
<el-input v-model="searchForm.idFuzzy" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="供应商">
</el-form-item>
<el-form-item label="供应商">
<el-input v-model="searchForm.sname" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="创建人">
</el-form-item>
<el-form-item label="创建人">
<el-input v-model="searchForm.cname" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="创建时间">
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="temp.ctime"
format="yyyy-MM-dd"
@ -18,11 +18,11 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
<search-form-item label="审核人">
</el-form-item>
<el-form-item label="审核人">
<el-input v-model="searchForm.vname" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="审核时间">
</el-form-item>
<el-form-item label="审核时间">
<el-date-picker
v-model="temp.vtime"
format="yyyy-MM-dd"
@ -30,22 +30,22 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
<search-form-item label="状 态">
</el-form-item>
<el-form-item label="状 态">
<el-select v-model="temp.status" clearable multiple>
<el-option :value="0" label="拟定"/>
<el-option :value="1" label="待审核"/>
<el-option :value="2" label="已审核"/>
</el-select>
</search-form-item>
<search-form-item label="完成情况">
</el-form-item>
<el-form-item label="完成情况">
<el-select v-model="temp.finish" clearable multiple>
<el-option :value="0" label="未开始"/>
<el-option :value="1" label="进行中"/>
<el-option :value="2" label="已完成"/>
</el-select>
</search-form-item>
<search-form-item label="结束时间">
</el-form-item>
<el-form-item label="结束时间">
<el-date-picker
v-model="temp.ftime"
format="yyyy-MM-dd"
@ -53,7 +53,7 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
</el-form-item>
</template>
<template v-slot:tableColumn>
<el-table-column align="center" type="expand">

@ -1,16 +1,16 @@
<template>
<list-page :loading="config.operating" :buttons="buttonGroup" :list="listPageConfig">
<list-page :data="listPageConfig">
<template v-slot:searchForm>
<search-form-item label="单 号">
<el-form-item label="单 号">
<el-input v-model="searchForm.idFuzzy" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="客 户">
</el-form-item>
<el-form-item label="客 户">
<el-input v-model="searchForm.customerName" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="创建人">
</el-form-item>
<el-form-item label="创建人">
<el-input v-model="searchForm.cname" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="创建时间">
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="temp.ctime"
format="yyyy-MM-dd"
@ -18,11 +18,11 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
<search-form-item label="审核人">
</el-form-item>
<el-form-item label="审核人">
<el-input v-model="searchForm.vname" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="审核时间">
</el-form-item>
<el-form-item label="审核时间">
<el-date-picker
v-model="temp.vtime"
format="yyyy-MM-dd"
@ -30,22 +30,22 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
<search-form-item label="状 态">
</el-form-item>
<el-form-item label="状 态">
<el-select v-model="temp.status" clearable multiple>
<el-option :value="0" label="拟定"/>
<el-option :value="1" label="待审核"/>
<el-option :value="2" label="已审核"/>
</el-select>
</search-form-item>
<search-form-item label="完成情况">
</el-form-item>
<el-form-item label="完成情况">
<el-select v-model="temp.finish" clearable multiple>
<el-option :value="0" label="未开始"/>
<el-option :value="1" label="进行中"/>
<el-option :value="2" label="已完成"/>
</el-select>
</search-form-item>
<search-form-item label="结束时间">
</el-form-item>
<el-form-item label="结束时间">
<el-date-picker
v-model="temp.ftime"
format="yyyy-MM-dd"
@ -53,7 +53,7 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
</el-form-item>
</template>
<template v-slot:tableColumn>
<el-table-column align="center" type="expand">

@ -1,16 +1,16 @@
<template>
<list-page :loading="config.operating" :buttons="buttonGroup" :list="listPageConfig">
<list-page :data="listPageConfig">
<template v-slot:searchForm>
<search-form-item label="单 号">
<el-form-item label="单 号">
<el-input v-model="searchForm.idFuzzy" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="销售订单">
</el-form-item>
<el-form-item label="销售订单">
<el-input v-model="searchForm.pidFuzzy" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="创建人">
</el-form-item>
<el-form-item label="创建人">
<el-input v-model="searchForm.cname" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="创建时间">
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="temp.ctime"
format="yyyy-MM-dd"
@ -18,11 +18,11 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
<search-form-item label="审核人">
</el-form-item>
<el-form-item label="审核人">
<el-input v-model="searchForm.vname" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="审核时间">
</el-form-item>
<el-form-item label="审核时间">
<el-date-picker
v-model="temp.vtime"
format="yyyy-MM-dd"
@ -30,14 +30,14 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
<search-form-item label="状 态">
</el-form-item>
<el-form-item label="状 态">
<el-select v-model="temp.status" clearable multiple>
<el-option :value="0" label="拟定"/>
<el-option :value="1" label="待审核"/>
<el-option :value="2" label="已审核"/>
</el-select>
</search-form-item>
</el-form-item>
</template>
<template v-slot:tableColumn>
<el-table-column align="center" type="expand">

@ -15,16 +15,16 @@
</template>
<search-form>
<search-form-item label="商品分类">
<el-form-item label="商品分类">
<el-input :value="temp.cname" maxlength="100" clearable @clear="clearCidSearch"/>
</search-form-item>
<search-form-item label="采购订单">
</el-form-item>
<el-form-item label="采购订单">
<el-input v-model="searchForm.cgddid" maxlength="100" clearable/>
</search-form-item>
<search-form-item label="采购入库单">
</el-form-item>
<el-form-item label="采购入库单">
<el-input v-model="searchForm.cgrkid" maxlength="100" clearable/>
</search-form-item>
<search-form-item label="入库时间">
</el-form-item>
<el-form-item label="入库时间">
<el-date-picker
v-model="temp.ctime"
format="yyyy-MM-dd"
@ -32,7 +32,7 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
</el-form-item>
</search-form>
<el-row class="button-group">
@ -69,7 +69,6 @@ import CategoryTree from '@/component/biz/CategoryTree'
import DetailDialog from "./DetailDialog"
import ExtraArea from '@/component/ExtraArea'
import SearchForm from "@/component/form/Search"
import SearchFormItem from "@/component/form/Search/item"
import {search} from "@/api/stock/current"
import {isEmpty, debounce} from "@/util"
import {exportExcel} from "@/util/excel"
@ -81,7 +80,7 @@ export default {
mixins: [tableMixin],
components: {CategoryTree, DetailDialog, ExtraArea, SearchForm, SearchFormItem},
components: {CategoryTree, DetailDialog, ExtraArea, SearchForm},
data() {
return {

@ -1,6 +1,6 @@
<template>
<abstract-dialog :loading="loading" :title="title" :value="value" @close="cancel" @open="open">
<abstract-form :model="form" :rules="rules" size="">
<abstract-form :model="form" :rules="rules">
<el-form-item label="名 称" prop="name">
<el-input v-model="form.name" :readonly="!canEdit" maxlength="20"/>
</el-form-item>
@ -63,7 +63,7 @@ export default {
components: {AbstractForm, AbstractDialog, RegionSelector},
props: {
value: {type: Boolean, default: false},
value: Boolean,
type: {type: String, default: 'see'},
data: {
type: Object,

@ -1,10 +1,10 @@
<template>
<el-card v-loading="config.operating">
<search-form>
<search-form-item label="客 户">
<list-page :data="listPageConfig">
<template v-slot:searchForm>
<el-form-item label="客 户">
<el-input v-model="searchForm.name" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="行政区域">
</el-form-item>
<el-form-item label="行政区域">
<region-selector
:value="temp.regionName"
limit
@ -13,23 +13,23 @@
@clear="clearSidSearch"
@select="selectRegion"
/>
</search-form-item>
<search-form-item label="地 址">
</el-form-item>
<el-form-item label="地 址">
<el-input v-model="searchForm.address" clearable maxlength="100"/>
</search-form-item>
<search-form-item label="联系人">
</el-form-item>
<el-form-item label="联系人">
<el-input v-model="searchForm.linkman" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="联系电话">
</el-form-item>
<el-form-item label="联系电话">
<el-input v-model="searchForm.linkphone" clearable maxlength="20"/>
</search-form-item>
<search-form-item label="状 态">
</el-form-item>
<el-form-item label="状 态">
<el-select v-model="searchForm.enable" clearable @clear="searchForm.enable = null">
<el-option :value="true" label="启用"/>
<el-option :value="false" label="禁用"/>
</el-select>
</search-form-item>
<search-form-item label="创建时间">
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="temp.ctime"
format="yyyy-MM-dd"
@ -37,18 +37,10 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
</search-form>
<el-row class="button-group">
<el-button icon="el-icon-search" size="small" type="primary" @click="search"> </el-button>
<el-button v-if="canAdd" icon="el-icon-plus" size="small" type="primary" @click="add"> </el-button>
<el-button v-if="canUpdate" icon="el-icon-edit" size="small" type="primary" @click="edit"> </el-button>
<el-button v-if="canDel" icon="el-icon-delete" size="small" type="danger" @click="del"> </el-button>
</el-row>
<el-row v-loading="config.loading" class="table-container">
<abstract-table :data="tableData" @row-click="rowClick">
</el-form-item>
</template>
<template v-slot:tableColumn>
<el-table-column align="center" label="#" type="index" width="80"/>
<el-table-column align="center" label="客 户" prop="name" show-overflow-tooltip/>
<el-table-column align="center" label="行政区域" prop="regionName" show-overflow-tooltip/>
@ -64,21 +56,17 @@
<span>{{ row.enable ? '启用' : '禁用' }}</span>
</template>
</el-table-column>
</abstract-table>
<abstract-pagination :model="searchForm" @current-change="pageChange"/>
</el-row>
</template>
<edit-dialog v-model="editDialog" :data="row" :type="type" @success="success"/>
</el-card>
</list-page>
</template>
<script>
import tableMixin from '@/mixin/tablePageMixin'
import ListPage from '@/view/app/common/ListPage'
import EditDialog from './EditDialog'
import RegionSelector from "@/component/RegionSelector"
import SearchForm from "@/component/form/Search"
import SearchFormItem from "@/component/form/Search/item"
import {add, update, del, search, getLimitRegion} from "@/api/system/customer"
import {isEmpty} from '@/util'
import {wic} from "@/util/auth"
@ -89,7 +77,7 @@ export default {
mixins: [tableMixin],
components: {EditDialog, RegionSelector, SearchForm, SearchFormItem},
components: {ListPage, EditDialog, RegionSelector},
data() {
return {
@ -109,7 +97,34 @@ export default {
}
},
computed: wic({add, update, del}),
computed: {
...wic({add, update, del}),
listPageConfig() {
return {
pageLoading: this.config.operating,
buttons: [
this.canAdd && {icon: 'el-icon-plus', e: this.add, content: '添 加'},
{icon: 'el-icon-view', e: this.see, content: '查 看'},
this.canUpdate && {icon: 'el-icon-edit', e: this.edit, content: '编 辑'},
this.canDel && {icon: 'el-icon-delete', e: this.del, content: '删 除'}
],
dataLoading: this.config.loading,
search: {
props: {model: this.searchForm},
on: {search: this.search}
},
table: {
props: {data: this.tableData},
on: {'row-click': this.rowClick}
},
pagination: {
props: {model: this.searchForm},
on: {'current-change': this.pageChange}
}
}
}
},
methods: {
getLimitRegion() {
@ -153,6 +168,12 @@ export default {
this.editDialog = true
},
see() {
if (isEmpty(this.row)) return elError('请选择要查看的客户')
this.type = 'see'
this.editDialog = true
},
edit() {
if (isEmpty(this.row)) return elError('请选择要编辑的客户')
this.type = 'edit'

@ -1,6 +1,6 @@
<template>
<abstract-dialog :loading="loading" :title="title" :value="value" @close="cancel" @open="open">
<abstract-form :model="form" :rules="rules" size="">
<abstract-form :model="form" :rules="rules">
<el-form-item v-show="parentName" label="上级部门">
<el-input :value="parentName" readonly/>
</el-form-item>
@ -17,7 +17,7 @@
<template v-slot:footer>
<el-button plain size="small" @click="closeDialog"> </el-button>
<el-button size="small" type="primary" @click="confirm"> </el-button>
<el-button v-if="canEdit" size="small" type="primary" @click="confirm"> </el-button>
</template>
</abstract-dialog>
</template>
@ -27,7 +27,7 @@ import dialogMixin from "@/mixin/dialogMixin"
import AbstractForm from "@/component/abstract/Form"
import AbstractDialog from '@/component/abstract/Dialog'
import {add, update} from "@/api/system/department"
import {isEmpty} from '@/util'
import {isEmpty, mergeObj} from '@/util'
import {elConfirm, elSuccess} from "@/util/message"
export default {
@ -38,7 +38,7 @@ export default {
components: {AbstractForm, AbstractDialog},
props: {
value: {type: Boolean, default: false},
value: Boolean,
type: {type: String, default: 'add'},
data: {type: Object, default: () => ({})},
},
@ -81,6 +81,10 @@ export default {
}
},
canEdit() {
return ['add', 'edit'].includes(this.type)
},
parentName() {
if (!this.data) return ''
if (this.type === 'add') return this.data.fullname
@ -91,10 +95,8 @@ export default {
methods: {
open() {
this.$nextTick(() => {
if (this.type === 'edit') {
Object
.keys(this.data)
.forEach(key => key in this.form && (this.form[key] = this.data[key]))
if (this.type !== 'add') {
mergeObj(this.form, this.data)
}
else this.form.pid = this.data.id
})

@ -83,13 +83,12 @@ export default {
...wic({add, update, del}),
contextMenuItems() {
const items=[]
this.canAdd&&items.push({content:'添加部门',click:this.add})
this.canUpdate&&items.push({content:'编辑部门',click:this.update})
this.canDel&&items.push({content:'删除部门',click:this.del})
return items
return [
this.canAdd && {content: '添 加', click: this.add},
{content: '查 看', click: this.see},
this.canUpdate && {content: '编 辑', click: this.edit},
this.canDel && {content: '删 除', click: this.del}
]
},
realZoom() {
@ -131,7 +130,12 @@ export default {
this.editDialog = true
},
update() {
see() {
this.type = 'see'
this.editDialog = true
},
edit() {
this.type = 'edit'
this.editDialog = true
},

@ -150,9 +150,9 @@ import AbstractForm from "@/component/abstract/Form"
import JsonEditor from "@/component/editor/JsonEditor"
import {add, update, del} from '@/api/system/resource'
import {isEmpty, mergeObj, resetObj} from "@/util"
import {elSuccess, elError, elConfirm} from "@/util/message"
import {elTreeControl} from "@/util/tree"
import {wic} from "@/util/auth"
import {expandControl} from "@/util/element-ui/elTree"
import {elSuccess, elError, elConfirm} from "@/util/message"
import {nodeType, getNodeInfo, getNodeTitle} from "./common"
export default {
@ -312,7 +312,7 @@ export default {
},
more({action, level}) {
if (this.loading) return
elTreeControl(this.$refs.tree, action, level)
expandControl(this.$refs.tree, action, level)
},
init() {

@ -1,6 +1,6 @@
<template>
<abstract-dialog :loading="loading" :title="title" :value="value" width="40%" @close="cancel" @open="open">
<abstract-form :model="form" :rules="rules" size="">
<abstract-form :model="form" :rules="rules">
<el-form-item label="名 称" prop="name">
<el-input v-model="form.name" maxlength="20"/>
</el-form-item>
@ -56,7 +56,7 @@
</el-dropdown-menu>
</el-dropdown>
<el-button plain size="small" @click="closeDialog"> </el-button>
<el-button size="small" type="primary" @click="confirm"> </el-button>
<el-button v-if="canEdit" size="small" type="primary" @click="confirm"> </el-button>
</template>
</abstract-dialog>
</template>
@ -68,7 +68,8 @@ import AbstractDialog from '@/component/abstract/Dialog'
import {get as getDepartments} from "@/api/system/department"
import {add, update} from "@/api/system/role"
import {isEmpty, mergeObj} from '@/util'
import {createTreeByWorker, elTreeControl} from '@/util/tree'
import {expandControl} from "@/util/element-ui/elTree"
import {createTreeByWorker} from '@/util/tree'
import {getNodeTitle, getNodeInfo} from "@/view/system/menu/common"
export default {
@ -79,7 +80,7 @@ export default {
components: {AbstractForm, AbstractDialog},
props: {
value: {type: Boolean, default: false},
value: Boolean,
type: {type: String, default: 'add'},
data: {type: Object, default: () => ({})},
},
@ -127,6 +128,10 @@ export default {
resourceTree() {
return this.$store.state.resource.resourceTree
},
canEdit() {
return ['add', 'edit'].includes(this.type)
}
},
@ -134,10 +139,10 @@ export default {
getNodeInfo,
getNodeTitle,
treeCommand({action, level}) {
elTreeControl(this.$refs.perm, action, level)
expandControl(this.$refs.perm, action, level)
},
open() {
if (this.type !== 'edit') return
if (this.type === 'add') return
this.$nextTick(() => {
mergeObj(this.form, this.data)
this.$refs.perm.setCheckedKeys(this.form.resourceId)

@ -1,19 +1,19 @@
<template>
<el-card v-loading="config.operating">
<search-form>
<search-form-item label="角色名">
<list-page :data="listPageConfig">
<template v-slot:searchForm>
<el-form-item label="角色名">
<el-input v-model="searchForm.name" clearable maxlength="100"/>
</search-form-item>
<search-form-item label="创建人">
</el-form-item>
<el-form-item label="创建人">
<el-input v-model="searchForm.cname" clearable maxlength="100"/>
</search-form-item>
<search-form-item label="状 态">
</el-form-item>
<el-form-item label="状 态">
<el-select v-model="searchForm.enable" clearable @clear="searchForm.enable = null">
<el-option :value="true" label="启用"/>
<el-option :value="false" label="禁用"/>
</el-select>
</search-form-item>
<search-form-item label="创建时间">
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="temp.ctime"
format="yyyy-MM-dd"
@ -21,18 +21,10 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
</search-form>
<el-row class="button-group">
<el-button icon="el-icon-search" size="small" type="primary" @click="search"> </el-button>
<el-button v-if="canAdd" icon="el-icon-plus" size="small" type="primary" @click="add"> </el-button>
<el-button v-if="canUpdate" icon="el-icon-edit" size="small" type="primary" @click="edit"> </el-button>
<el-button v-if="canDel" icon="el-icon-delete" size="small" type="danger" @click="del"> </el-button>
</el-row>
<el-row v-loading="config.loading" class="table-container">
<abstract-table :data="tableData" @row-click="rowClick">
</el-form-item>
</template>
<template v-slot:tableColumn>
<el-table-column align="center" label="#" type="index" width="80"/>
<el-table-column align="center" label="角色名" prop="name" show-overflow-tooltip/>
<el-table-column align="center" label="创建人" prop="cname" show-overflow-tooltip/>
@ -45,20 +37,16 @@
<span>{{ row.enable ? '启用' : '禁用' }}</span>
</template>
</el-table-column>
</abstract-table>
<abstract-pagination :model="searchForm" @current-change="pageChange"/>
</el-row>
</template>
<edit-dialog v-model="editDialog" :data="row" :type="type" @success="success"/>
</el-card>
</list-page>
</template>
<script>
import tableMixin from '@/mixin/tablePageMixin'
import ListPage from '@/view/app/common/ListPage'
import EditDialog from './EditDialog'
import SearchForm from "@/component/form/Search"
import SearchFormItem from "@/component/form/Search/item"
import {add, update, del, search} from "@/api/system/role"
import {isEmpty} from '@/util'
import {wic} from "@/util/auth"
@ -69,7 +57,7 @@ export default {
mixins: [tableMixin],
components: {EditDialog, SearchForm, SearchFormItem},
components: {ListPage, EditDialog},
data() {
return {
@ -85,7 +73,34 @@ export default {
}
},
computed: wic({add, update, del}),
computed: {
...wic({add, update, del}),
listPageConfig() {
return {
pageLoading: this.config.operating,
buttons: [
this.canAdd && {icon: 'el-icon-plus', e: this.add, content: '添 加'},
{icon: 'el-icon-view', e: this.see, content: '查 看'},
this.canUpdate && {icon: 'el-icon-edit', e: this.edit, content: '编 辑'},
this.canDel && {icon: 'el-icon-delete', e: this.del, content: '删 除'}
],
dataLoading: this.config.loading,
search: {
props: {model: this.searchForm},
on: {search: this.search}
},
table: {
props: {data: this.tableData},
on: {'row-click': this.rowClick}
},
pagination: {
props: {model: this.searchForm},
on: {'current-change': this.pageChange}
}
}
}
},
methods: {
mergeSearchForm() {
@ -125,6 +140,12 @@ export default {
this.editDialog = true
},
see() {
if (isEmpty(this.row)) return elError('请选择要查看的角色')
this.type = 'see'
this.editDialog = true
},
edit() {
if (!this.row) return elError('请选择要编辑的角色')
this.type = 'edit'

@ -1,6 +1,6 @@
<template>
<abstract-dialog :loading="loading" :title="title" :value="value" @close="cancel" @open="open">
<abstract-form :model="form" :rules="rules" size="">
<abstract-form :model="form" :rules="rules">
<el-form-item label="名 称" prop="name">
<el-input v-model="form.name" :readonly="!canEdit" maxlength="20"/>
</el-form-item>
@ -63,7 +63,7 @@ export default {
components: {AbstractForm, AbstractDialog, RegionSelector},
props: {
value: {type: Boolean, default: false},
value: Boolean,
type: {type: String, default: 'see'},
data: {
type: Object,

@ -1,10 +1,10 @@
<template>
<el-card v-loading="config.operating">
<search-form>
<search-form-item label="供应商">
<list-page :data="listPageConfig">
<template v-slot:searchForm>
<el-form-item label="供应商">
<el-input v-model="searchForm.name" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="行政区域">
</el-form-item>
<el-form-item label="行政区域">
<region-selector
:value="temp.regionName"
limit
@ -13,23 +13,23 @@
@clear="clearSidSearch"
@select="selectRegion"
/>
</search-form-item>
<search-form-item label="地 址">
</el-form-item>
<el-form-item label="地 址">
<el-input v-model="searchForm.address" clearable maxlength="100"/>
</search-form-item>
<search-form-item label="联系人">
</el-form-item>
<el-form-item label="联系人">
<el-input v-model="searchForm.linkman" clearable maxlength="50"/>
</search-form-item>
<search-form-item label="联系电话">
</el-form-item>
<el-form-item label="联系电话">
<el-input v-model="searchForm.linkphone" clearable maxlength="20"/>
</search-form-item>
<search-form-item label="状 态">
</el-form-item>
<el-form-item label="状 态">
<el-select v-model="searchForm.enable" clearable @clear="searchForm.enable = null">
<el-option :value="true" label="启用"/>
<el-option :value="false" label="禁用"/>
</el-select>
</search-form-item>
<search-form-item label="创建时间">
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="temp.ctime"
format="yyyy-MM-dd"
@ -37,18 +37,10 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
</search-form>
<el-row class="button-group">
<el-button icon="el-icon-search" size="small" type="primary" @click="search"> </el-button>
<el-button v-if="canAdd" icon="el-icon-plus" size="small" type="primary" @click="add"> </el-button>
<el-button v-if="canUpdate" icon="el-icon-edit" size="small" type="primary" @click="edit"> </el-button>
<el-button v-if="canDel" icon="el-icon-delete" size="small" type="danger" @click="del"> </el-button>
</el-row>
<el-row v-loading="config.loading" class="table-container">
<abstract-table :data="tableData" @row-click="rowClick">
</el-form-item>
</template>
<template v-slot:tableColumn>
<el-table-column align="center" label="#" type="index" width="80"/>
<el-table-column align="center" label="供应商" prop="name" show-overflow-tooltip/>
<el-table-column align="center" label="行政区域" prop="regionName" show-overflow-tooltip/>
@ -64,21 +56,17 @@
<span>{{ row.enable ? '启用' : '禁用' }}</span>
</template>
</el-table-column>
</abstract-table>
<abstract-pagination :model="searchForm" @current-change="pageChange"/>
</el-row>
</template>
<edit-dialog v-model="editDialog" :data="row" :type="type" @success="success"/>
</el-card>
</list-page>
</template>
<script>
import tableMixin from '@/mixin/tablePageMixin'
import ListPage from '@/view/app/common/ListPage'
import EditDialog from './EditDialog'
import RegionSelector from "@/component/RegionSelector"
import SearchForm from "@/component/form/Search"
import SearchFormItem from "@/component/form/Search/item"
import {add, update, del, getLimitRegion, search} from "@/api/system/supplier"
import {isEmpty} from '@/util'
import {wic} from "@/util/auth"
@ -89,7 +77,7 @@ export default {
mixins: [tableMixin],
components: {EditDialog, RegionSelector, SearchForm, SearchFormItem},
components: {ListPage,EditDialog, RegionSelector},
data() {
return {
@ -109,7 +97,34 @@ export default {
}
},
computed: wic({add, update, del}),
computed: {
...wic({add, update, del}),
listPageConfig() {
return {
pageLoading: this.config.operating,
buttons: [
this.canAdd && {icon: 'el-icon-plus', e: this.add, content: '添 加'},
{icon: 'el-icon-view', e: this.see, content: '查 看'},
this.canUpdate && {icon: 'el-icon-edit', e: this.edit, content: '编 辑'},
this.canDel && {icon: 'el-icon-delete', e: this.del, content: '删 除'}
],
dataLoading: this.config.loading,
search: {
props: {model: this.searchForm},
on: {search: this.search}
},
table: {
props: {data: this.tableData},
on: {'row-click': this.rowClick}
},
pagination: {
props: {model: this.searchForm},
on: {'current-change': this.pageChange}
}
}
}
},
methods: {
getLimitRegion() {
@ -153,6 +168,12 @@ export default {
this.editDialog = true
},
see() {
if (isEmpty(this.row)) return elError('请选择要查看的供应商')
this.type = 'see'
this.editDialog = true
},
edit() {
if (isEmpty(this.row)) return elError('请选择要编辑的供应商')
this.type = 'edit'

@ -1,6 +1,6 @@
<template>
<abstract-dialog :loading="loading" :title="title" :value="value" @close="cancel" @open="open">
<abstract-form :model="form" :rules="rules" label-width="90px" size="">
<abstract-form :model="form" :rules="rules" label-width="90px">
<el-form-item label="登录名" prop="loginName">
<el-input v-model="form.loginName" :readonly="!!form.id || !canEdit" maxlength="20"/>
</el-form-item>
@ -46,8 +46,7 @@ import AbstractDialog from '@/component/abstract/Dialog'
import RoleSelector from './RoleSelector'
import {checkLoginName, checkNickName} from "@/api/account"
import {add, update} from "@/api/system/user"
import {isEmpty, debounce} from '@/util'
import {elConfirm} from "@/util/message"
import {isEmpty, debounce, mergeObj} from '@/util'
export default {
name: "EditDialog",
@ -57,7 +56,7 @@ export default {
components: {AbstractForm, DepartmentSelector, AbstractDialog, RoleSelector},
props: {
value: {type: Boolean, default: false},
value: Boolean,
type: {type: String, default: 'see'},
data: {type: Object, default: () => ({})},
},
@ -134,10 +133,8 @@ export default {
methods: {
open() {
this.$nextTick(() => {
if (this.type === 'edit') {
Object
.keys(this.data)
.forEach(key => key in this.form && (this.form[key] = this.data[key]))
if (this.type !== 'add') {
mergeObj(this.form,this.data)
}
})
},

@ -1,22 +1,22 @@
<template>
<el-card v-loading="config.operating">
<search-form>
<search-form-item label="用户名">
<list-page :data="listPageConfig">
<template v-slot:searchForm>
<el-form-item label="用户名">
<el-input v-model="searchForm.loginName" clearable maxlength="20"/>
</search-form-item>
<search-form-item label="昵 称">
</el-form-item>
<el-form-item label="昵 称">
<el-input v-model="searchForm.nickName" clearable maxlength="100"/>
</search-form-item>
<search-form-item label="角 色">
</el-form-item>
<el-form-item label="角 色">
<role-selector v-model="searchForm.role"/>
</search-form-item>
<search-form-item label="状 态">
</el-form-item>
<el-form-item label="状 态">
<el-select v-model="searchForm.enable" clearable @clear="searchForm.enable = null">
<el-option :value="true" label="启用"/>
<el-option :value="false" label="禁用"/>
</el-select>
</search-form-item>
<search-form-item label="创建时间">
</el-form-item>
<el-form-item label="创建时间">
<el-date-picker
v-model="temp.ctime"
format="yyyy-MM-dd"
@ -24,22 +24,10 @@
type="daterange"
value-format="timestamp"
/>
</search-form-item>
</search-form>
<el-row class="button-group">
<el-button icon="el-icon-search" size="small" type="primary" @click="search"> </el-button>
<el-button v-if="canAdd" icon="el-icon-plus" size="small" type="primary" @click="add"> </el-button>
<el-button v-if="canUpdate" icon="el-icon-edit" size="small" type="primary" @click="edit"> </el-button>
<el-button v-if="canResetPwd" icon="el-icon-edit" size="small" type="dashed" plain @click="resetPwd">重置密码
</el-button>
<el-button v-if="canDel" icon="el-icon-delete" size="small" type="danger" @click="del"> </el-button>
<el-button v-if="canKick" icon="el-icon-warning-outline" size="small" type="danger" @click="kick">
</el-button>
</el-row>
<el-row v-loading="config.loading" class="table-container">
<abstract-table :data="tableData" @row-click="rowClick">
</el-form-item>
</template>
<template v-slot:tableColumn>
<el-table-column align="center" label="#" type="index" width="80"/>
<el-table-column align="center" label="头像" width="100">
<img
@ -73,21 +61,17 @@
<span>{{ row.enable ? '启用' : '禁用' }}</span>
</template>
</el-table-column>
</abstract-table>
<abstract-pagination :model="searchForm" @current-change="pageChange"/>
</el-row>
</template>
<edit-dialog v-model="editDialog" :data="row" :type="type" @success="success"/>
</el-card>
</list-page>
</template>
<script>
import tableMixin from '@/mixin/tablePageMixin'
import ListPage from '@/view/app/common/ListPage'
import EditDialog from './component/EditDialog'
import RoleSelector from './component/RoleSelector'
import SearchForm from "@/component/form/Search"
import SearchFormItem from "@/component/form/Search/item"
import {search, add, update, del, kick, resetPwd} from "@/api/system/user"
import {isEmpty} from '@/util'
import {wic} from "@/util/auth"
@ -99,7 +83,7 @@ export default {
mixins: [tableMixin],
components: {EditDialog, RoleSelector, SearchForm, SearchFormItem},
components: {ListPage, EditDialog, RoleSelector},
data() {
return {
@ -114,7 +98,36 @@ export default {
}
},
computed: wic({add, update, del, kick, resetPwd}),
computed: {
...wic({add, update, del, kick, resetPwd}),
listPageConfig() {
return {
pageLoading: this.config.operating,
buttons: [
this.canAdd && {icon: 'el-icon-plus', e: this.add, content: '添 加'},
{icon: 'el-icon-view', e: this.see, content: '查 看'},
this.canUpdate && {icon: 'el-icon-edit', e: this.edit, content: '编 辑'},
this.canDel && {icon: 'el-icon-delete', e: this.del, content: '删 除'},
this.canResetPwd && {icon: 'el-icon-delete', e: this.resetPwd, content: '重置密码'},
this.canKick && {icon: 'el-icon-delete', e: this.kick, content: '踢 出'}
],
dataLoading: this.config.loading,
search: {
props: {model: this.searchForm},
on: {search: this.search}
},
table: {
props: {data: this.tableData},
on: {'row-click': this.rowClick}
},
pagination: {
props: {model: this.searchForm},
on: {'current-change': this.pageChange}
}
}
}
},
methods: {
mergeSearchForm() {
@ -145,6 +158,12 @@ export default {
this.editDialog = true
},
see() {
if (isEmpty(this.row)) return elError('请选择要查看的用户')
this.type = 'see'
this.editDialog = true
},
edit() {
if (isEmpty(this.row)) return elError('请选择要编辑的用户')
this.type = 'edit'

@ -17,12 +17,12 @@
</template>
<script>
import md5 from "js-md5"
import dialogMixin from "@/mixin/dialogMixin"
import AbstractForm from "@/component/abstract/Form"
import AbstractDialog from '@/component/abstract/Dialog'
import {updateUserPwd} from "@/api/account"
import {elSuccess} from "@/util/message"
import {md5} from "@/util/secret"
export default {
mixins: [dialogMixin],

Loading…
Cancel
Save