Browse Source

代码提交

master
parent
commit
36fb1bdc30
  1. 4
      .env.development
  2. 4
      .env.production
  3. 4
      .env.staging
  4. 8
      package.json
  5. 9
      src/api/dhc/area.js
  6. 25
      src/api/system/role.js
  7. 534
      src/views/dhc/area/index.vue
  8. 10
      src/views/index1.vue
  9. 2
      src/views/login.vue
  10. 2
      src/views/register.vue
  11. 2
      vue.config.js

4
.env.development

@ -1,10 +1,10 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 若依管理系统 VUE_APP_TITLE = 国际供应链产销协同系统
# 开发环境配置 # 开发环境配置
ENV = 'development' ENV = 'development'
# 若依管理系统/开发环境 # 国际供应链产销协同系统/开发环境
VUE_APP_BASE_API = '/dev-api' VUE_APP_BASE_API = '/dev-api'
# 路由懒加载 # 路由懒加载

4
.env.production

@ -1,8 +1,8 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 若依管理系统 VUE_APP_TITLE = 国际供应链产销协同系统
# 生产环境配置 # 生产环境配置
ENV = 'production' ENV = 'production'
# 若依管理系统/生产环境 # 国际供应链产销协同系统/生产环境
VUE_APP_BASE_API = '/prod-api' VUE_APP_BASE_API = '/prod-api'

4
.env.staging

@ -1,10 +1,10 @@
# 页面标题 # 页面标题
VUE_APP_TITLE = 若依管理系统 VUE_APP_TITLE = 国际供应链产销协同系统
NODE_ENV = production NODE_ENV = production
# 测试环境配置 # 测试环境配置
ENV = 'staging' ENV = 'staging'
# 若依管理系统/测试环境 # 国际供应链产销协同系统/测试环境
VUE_APP_BASE_API = '/stage-api' VUE_APP_BASE_API = '/stage-api'

8
package.json

@ -1,8 +1,8 @@
{ {
"name": "ruoyi", "name": "ruoyi",
"version": "3.8.8", "version": "3.8.8",
"description": "若依管理系统", "description": "国际供应链产销协同系统",
"author": "若依", "author": "DHC",
"license": "MIT", "license": "MIT",
"scripts": { "scripts": {
"dev": "vue-cli-service serve", "dev": "vue-cli-service serve",
@ -58,7 +58,9 @@
"vue-meta": "2.4.0", "vue-meta": "2.4.0",
"vue-router": "3.4.9", "vue-router": "3.4.9",
"vuedraggable": "2.24.3", "vuedraggable": "2.24.3",
"vuex": "3.6.0" "vuex": "3.6.0",
"less": "4.2.0",
"less-loader": "7.x"
}, },
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "4.4.6", "@vue/cli-plugin-babel": "4.4.6",

9
src/api/dhc/area.js

@ -38,8 +38,8 @@ export function updateArea(data) {
// 删除区域 // 删除区域
export function delArea(areaId) { export function delArea(areaId) {
return request({ return request({
url: '/dhc/area/' + areaId, url: '/dhc/area/del/' + areaId,
method: 'delete' method: 'get'
}) })
} }
@ -52,10 +52,11 @@ export function queryArealist(data) {
}) })
} }
// 查询区域下拉树结构 // 查询区域下拉树结构
export function areaTreeSelect() { export function areaTreeSelect(query) {
return request({ return request({
url: '/dhc/area/areaTree', url: '/dhc/area/areaTree',
method: 'get' method: 'get',
params: query
}) })
} }

25
src/api/system/role.js

@ -117,3 +117,28 @@ export function deptTreeSelect(roleId) {
method: 'get' method: 'get'
}) })
} }
// 批量取消角色权限控制点
export function cancelAuthNodes(data) {
return request({
url: '/system/role/authUser/cancelAuthNodes',
method: 'put',
params: data
})
}
// 批量选择角色控制点
export function selectRoleAuthNode(data) {
return request({
url: '/system/role/authUser/selectRoleAuthNode',
method: 'put',
params: data
})
}
// 根据角色ID查询部门树结构
export function getRoleAuthNodes(roleId) {
return request({
url: '/system/role/getRoleAuthNodes/' + roleId,
method: 'get'
})
}

534
src/views/dhc/area/index.vue

@ -1,10 +1,10 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form ref="form1" :model="form" :rules="rules" label-width="100px">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="8" :xs="24"> <el-col :span="8" :xs="24">
<el-form-item label="产品线" prop="productLineCode"> <el-form-item label="产品线" prop="productLineCode">
<el-select v-model="form.productLineCode" placeholder="产品线" <el-select v-model="productLineCode" placeholder="产品线"
@change="setAreaType" clearable> @change="setAreaType" clearable>
<el-option <el-option
v-for="line in dict.type.product_line" v-for="line in dict.type.product_line"
@ -17,7 +17,7 @@
</el-col> </el-col>
<el-col :span="8" :xs="24"> <el-col :span="8" :xs="24">
<el-form-item label="区域类型" prop="areaType"> <el-form-item label="区域类型" prop="areaType">
<el-select v-model="form.areaType" <el-select v-model="areaType"
@change="setAreaLevel" placeholder="区域类型" clearable> @change="setAreaLevel" placeholder="区域类型" clearable>
<el-option <el-option
v-for="type in areaTypeList" v-for="type in areaTypeList"
@ -29,42 +29,65 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-row>
<el-col :span="8" :xs="24">
<el-form-item>
<el-button type="primary" @click="addArea"> </el-button>
<el-button type="primary" @click="delArea"> </el-button>
</el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
<el-row :gutter="20"> <el-row :gutter="20">
<!--区域树--> <!--区域树-->
<el-col :span="8" :xs="24"> <el-col :span="8" :xs="24">
<div class="head-container"> <div class="head-container">
<el-tree <!-- <el-tree
:data="areaOptions" :data="areaOptions"
:props="defaultProps" node-key="id"
:expand-on-click-node="false" :filter-node-method="filterNode"
:filter-node-method="filterNode" :props="defaultProps"
ref="tree" :expand-on-click-node="false"
node-key="id" ref="tree"
default-expand-all default-expand-all
highlight-current highlight-current
@node-click="handleNodeClick" @node-click="handleNodeClick"
/> />-->
</div> <el-input placeholder="输入区域名称" v-model="filterText" class="search"/>
<el-tree
:data="treeData"
node-key="id"
default-expand-all
@node-click="handleLeftclick"
@node-drag-start="handleDragStart"
@node-drag-enter="handleDragEnter"
@node-drag-leave="handleDragLeave"
@node-drag-over="handleDragOver"
@node-drag-end="handleDragEnd"
@node-drop="handleDrop"
@node-contextmenu="rightClick"
:filter-node-method="filterNode"
draggable :allow-drop="allowDrop"
:allow-drag="allowDrag" ref="tree">
<span class="slot-t-node" slot-scope="{ node, data }">
<span :class="[data.id>= 99 ? 'slot-t-node--label' : '']">{{node.label}}</span>
</span>
</el-tree>
<el-card class="box-card" ref="card" v-show="menuVisible">
<div @click="addSameLevelNode()" v-show="firstLevel">
<i class="el-icon-circle-plus-outline"></i>&nbsp;&nbsp;同级增加
</div>
<div class="add" @click="addChildNode()">
<i class="el-icon-circle-plus-outline"></i>&nbsp;&nbsp;子级增加
</div>
<div class="delete" @click="deleteNode()">
<i class="el-icon-remove-outline"></i>&nbsp;&nbsp;删除节点
</div>
</el-card>
</div>
</el-col> </el-col>
<el-col :span="8" :xs="24"> <el-col :span="8" :xs="24">
<el-form ref="form" :model="form" :rules="rules" label-width="100px"> <el-form ref="form" :model="params" :rules="rules" label-width="100px">
<el-form-item label="区域编码" prop="areaCode"> <el-form-item label="区域编码" prop="areaCode">
<el-input v-model="form.areaCode" placeholder="请输入区域编码" /> <el-input v-model="params.areaCode" placeholder="请输入区域编码" maxlength="32"/>
</el-form-item> </el-form-item>
<el-form-item label="区域名称" prop="areaName"> <el-form-item label="区域名称" prop="areaName">
<el-input v-model="form.areaName" placeholder="请输入区域名称" /> <el-input v-model="params.areaName" placeholder="请输入区域名称" maxlength="64"/>
</el-form-item> </el-form-item>
<el-form-item label="区域层级" prop="areaLevel"> <el-form-item label="区域层级" prop="areaLevel">
<el-select v-model="form.areaLevel" placeholder="区域层级" clearable> <el-select v-model="params.areaLevel" placeholder="区域层级" clearable>
<el-option <el-option
v-for="level in areaLevelList" v-for="level in areaLevelList"
:key="level.value" :key="level.value"
@ -74,23 +97,23 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="上级区域" prop="parentName"> <el-form-item label="上级区域" prop="parentName">
<el-input v-model="form.parentName" placeholder="上级区域" disabled/> <el-input v-model="params.parentName" placeholder="上级区域" disabled/>
</el-form-item> </el-form-item>
<el-form-item label="区域状态" prop="status"> <el-form-item label="区域状态" prop="status">
<el-switch <el-switch
v-model="form.status" v-model="params.status"
active-value="1" active-value="1"
inactive-value="0" inactive-value="0"
></el-switch> ></el-switch>
</el-form-item> </el-form-item>
<el-form-item label="显示顺序" prop="orderNum"> <el-form-item label="显示顺序" prop="orderNum">
<el-input v-model="form.orderNum" placeholder="请输入显示顺序" /> <el-input-number v-model="params.orderNum" :min="1" :max="100" label="显示顺序"></el-input-number>
</el-form-item> </el-form-item>
<el-form-item label="区域说明" prop="areaDesc"> <el-form-item label="区域说明" prop="areaDesc">
<el-input v-model="form.areaDesc" type="textarea" placeholder="请输入内容" /> <el-input v-model="params.areaDesc" type="textarea" placeholder="请输入内容" maxlength="512"/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item v-show="btnFlag">
<el-button type="primary" @click="submitForm"> </el-button> <el-button key="submitBtn" type="primary" @click="submitForm"> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-col> </el-col>
@ -99,7 +122,7 @@
</template> </template>
<script> <script>
import {areaTreeSelect, getArea, addArea, updateArea} from "@/api/dhc/area"; import {areaTreeSelect, getArea, addArea, updateArea, delArea} from "@/api/dhc/area";
import {queryList} from "@/api/dhc/productLineArea"; import {queryList} from "@/api/dhc/productLineArea";
export default { export default {
name: "Area", name: "Area",
@ -108,6 +131,8 @@ export default {
return { return {
// //
loading: true, loading: true,
//
btnFlag: false,
// //
ids: [], ids: [],
// //
@ -128,40 +153,69 @@ export default {
title: "", title: "",
// //
open: false, open: false,
currentData: '',
currentNode: '',
menuVisible: false,
firstLevel: false,
filterText: '',
maxexpandId: 4,
productLineCode: '',
areaType: '',
areaId: 0,
// //
form: { params: {
areaId: 0, parentId: 0,
parentId: null, areaCode: '',
areaCode: null, areaName: '',
areaName: null, areaLevel: '',
areaType: null, orderNum: 1,
areaLevel: null, areaDesc: '',
orderNum: null, parentName: '',
areaDesc: null,
parentName: null,
productLineCode: null,
status: '1', status: '1',
}, },
form: {},
// //
areaOptions: undefined, treeData: undefined,
defaultProps: { defaultProps: {
children: "children", children: "children",
label: "label" label: "label"
}, },
// //
rules: { rules: {
areaCode: [
{ required: true, message: "区域编码不能为空", trigger: "blur" }
],
areaName: [
{ required: true, message: "区域名称不能为空", trigger: "blur" }
],
areaLevel: [
{ required: true, message: "区域层级不能为空", trigger: "blur" }
],
orderNum: [
{ required: true, message: "显示顺序不能为空", trigger: "blur" }
]
} }
}; };
}, },
created() { created() {
this.getAreaTree(); this.reset();
},
watch: {
filterText(val) {
this.$refs.tree.filter(val)
}
}, },
methods: { methods: {
/** 查询区域下拉树结构 */ /** 查询区域下拉树结构 */
getAreaTree() { getAreaTree() {
this.loading = true; let queryParams = {productLineCode:this.productLineCode, areaType:this.areaType}
areaTreeSelect(this.form).then(response => { areaTreeSelect(queryParams).then(response => {
this.areaOptions = response.data; this.treeData = response.data;
if (this.treeData.length == 0) {
this.btnFlag = true;
} else {
this.btnFlag = false;
}
}); });
}, },
// //
@ -169,84 +223,378 @@ export default {
if (!value) return true; if (!value) return true;
return data.label.indexOf(value) !== -1; return data.label.indexOf(value) !== -1;
}, },
//
handleNodeClick(data) {
this.form.areaId = data.id;
this.getArea();
},
/** 修改按钮操作 */
getArea(row) {
this.reset();
const areaId = this.form.areaId;
getArea(areaId).then(response => {
this.form = response.data;
});
},
// //
reset() { reset() {
this.form = { this.params = {
areaId: 0, parentId: 0,
parentId: null, areaCode: '',
areaCode: null, areaName: '',
areaName: null, areaLevel: '',
areaType: null, orderNum: 1,
areaLevel: null, areaDesc: '',
orderNum: null, parentName: '',
areaDesc: null,
parentName: null,
productLineCode: null,
status: '1', status: '1',
}; };
}, },
// //
setAreaType() { setAreaType() {
let params = {productLineCode:this.form.productLineCode, areaType:'', type:'areaType'} let queryParams = {productLineCode:this.productLineCode, areaType:'', type:'areaType'}
this.form.areaType = null; this.areaType = null;
this.form.areaLevel = null; this.params.areaLevel = null;
this.params.productLineCode = this.productLineCode;
this.treeData = [];
this.areaTypeList = []; this.areaTypeList = [];
this.areaLevelList = []; this.areaLevelList = [];
queryList(params).then(response => { queryList(queryParams).then(response => {
this.areaTypeList = response; this.areaTypeList = response;
}); });
this.getAreaTree();
}, },
// //
setAreaLevel() { setAreaLevel() {
let params = {productLineCode:this.form.productLineCode, areaType:this.form.areaType, type:'areaLevel'} let queryParams = {productLineCode:this.productLineCode, areaType:this.areaType, type:'areaLevel'}
this.form.areaLevel = null; this.params.areaLevel = null;
this.params.areaType = this.areaType;
this.treeData = [];
this.areaLevelList = []; this.areaLevelList = [];
queryList(params).then(response => { queryList(queryParams).then(response => {
this.areaLevelList = response; this.areaLevelList = response;
}); });
this.getAreaTree();
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm() { submitForm() {
this.$refs["form"].validate(valid => { this.$refs["form"].validate(valid => {
if (valid) { if (valid) {
if (this.form.areaId != null && this.form.areaId != 0) { this.params.areaId = this.areaId;
updateArea(this.form).then(response => { this.params.areaType = this.areaType;
this.params.productLineCode = this.productLineCode;
if (this.areaId != null && this.areaId != 0) {
updateArea(this.params).then(response => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");
this.open = false; this.btnFlag = false;
this.getAreaTree(); this.getAreaTree();
}); });
} else { } else {
addArea(this.form).then(response => { addArea(this.params).then(response => {
this.$modal.msgSuccess("新增成功"); this.$modal.msgSuccess("新增成功");
this.open = false; this.btnFlag = false;
this.getAreaTree(); this.getAreaTree();
}); });
} }
} }
}); });
}, },
/** 新增按钮操作 */ NodeBlur(Node, data) {
addArea() { console.log(Node, data)
if (data.label.length === 0) {
this.$message.error('菜单名不可为空!')
return false
} else {
if (data.isEdit) {
this.$set(data, 'isEdit', false)
console.log(data.isEdit)
}
this.$nextTick(() => {
this.$refs['slotTreeInput' + data.id].$refs.input.focus()
})
}
},
allowDrop(draggingNode, dropNode, type) {
if (dropNode.data.label === '二级 3-1') {
return type !== 'inner'
} else {
return true
}
},
allowDrag(draggingNode) {
return draggingNode.data.label.indexOf('三级 3-2-2') === -1
},
//
rightClick(event, object, Node, element) {
this.currentData = object
this.currentNode = Node
if (Node.level === 1) {
this.firstLevel = true
} else {
this.firstLevel = false
}
this.menuVisible = true
// let menu = document.querySelector('#card')
// /* */
// menu.style.left = event.clientX + 'px'
// menu.style.top = event.clientY + 'px'
document.addEventListener('click', this.foo)
this.$refs.card.$el.style.left = event.clientX - 140 + 'px'
this.$refs.card.$el.style.top = event.clientY - 140 + 'px'
},
//
handleLeftclick(data, node) {
if (data.id != 0) {
getArea(data.id).then(response => {
this.areaId = response.data.areaId;
this.params = response.data;
});
} else {
this.reset();
this.areaId = 0;
this.params.areaName = '新增区域';
if (node.level > 1) {
this.params.parentId = node.parent.data.id;
this.params.parentName = node.parent.data.label;
}
}
this.btnFlag = true;
this.foo()
}, },
/** 删除按钮操作 */ //
delArea() { foo() {
this.menuVisible = false
// alert
document.removeEventListener('click', this.foo)
},
//
addSameLevelNode() {
this.reset();
/*let id = Math.ceil(Math.random() * 100)*/
this.btnFlag = false;
let data = { id: 0, label: '新增区域' }
this.$refs.tree.append(data, this.currentNode.parent)
},
//
addChildNode() {
if (this.currentNode.level >= 3) {
this.$message.error('最多只支持三级!')
return false
}
this.reset();
this.btnFlag = false;
// let id = Math.ceil(Math.random() * 100)
let data = { id: 0, label: '新增区域' }
this.$refs.tree.append(data, this.currentNode)
},
//
deleteNode() {
let that = this;
if (this.areaId == 0) {
that.$modal.msgSuccess("请选择要删除的区域");
return;
}
if (that.currentNode.label == '新增区域') {
that.$refs.tree.remove(this.currentNode)
return;
}
const areaId = this.areaId;
that.$modal.confirm('是否确认删除区域编号为"' + that.params.areaName + '"的数据项?').then(function() {
delArea(areaId).then(response => {
that.$modal.msgSuccess("删除成功");
that.btnFlag = false;
that.getAreaTree();
});
});
},
//
editNode(data) {
this.currentData = data ? data : this.currentData
if (!this.currentData.isEdit) {
this.$set(this.currentData, 'isEdit', true)
}
//
this.$nextTick(() => {
this.$refs['slotTreeInput' + this.currentData.id].focus()
})
},
handleDragStart(node, ev) {
console.log('drag start', node)
},
handleDragEnter(draggingNode, dropNode, ev) {
console.log('tree drag enter: ', dropNode.label)
},
handleDragLeave(draggingNode, dropNode, ev) {
console.log('tree drag leave: ', dropNode.label)
},
handleDragOver(draggingNode, dropNode, ev) {
console.log('tree drag over: ', dropNode.label)
},
handleDragEnd(draggingNode, dropNode, dropType, ev) {
console.log('tree drag end: ', dropNode && dropNode.label, dropType)
},
handleDrop(draggingNode, dropNode, dropType, ev) {
console.log('tree drop: ', dropNode.label, dropType)
} }
} }
}; };
</script> </script>
<style scoped lang="less">
/* 点击节点时的选中颜色 */
.tree-container /deep/.el-tree-node.is-current > .el-tree-node__content {
color: blue !important;
}
.tree-container /deep/ .el-tree-node__expand-icon.expanded {
-webkit-transform: rotate(90deg);
transform: rotate(90deg);
}
.tree-container /deep/ .el-icon-caret-right:before {
content: "\e791";
font-size: 18px;
}
.tree-container /deep/ .el-tree-node__expand-icon {
margin-left: 15px;
padding: 0px;
}
.tree-container /deep/ .el-tree-node__expand-icon.is-leaf {
margin-left: 0px;
}
.tree-container /deep/ .el-tree-node {
position: relative;
padding-left: 16px;
}
.tree-container /deep/ .el-tree-node__children {
padding-left: 16px;
}
.tree-container /deep/ .el-tree > .el-tree-node:before {
border-left: none;
}
.tree-container /deep/ .el-tree > .el-tree-node:after {
border-top: none;
}
.tree-container /deep/ .el-tree > .el-tree-node:before {
border-left: none;
}
.tree-container /deep/ .el-tree > .el-tree-node:after {
border-top: none;
}
.tree-container /deep/ .el-tree-node:before {
content: "";
left: 10px;
position: absolute;
right: auto;
border-width: 1px;
}
.tree-container /deep/ .el-tree-node:after {
content: "";
left: 10px;
position: absolute;
right: auto;
border-width: 1px;
}
.tree-container /deep/ .el-tree-node:before {
border-left: 1px dashed #ccc;
bottom: 0px;
height: 100%;
top: -19px;
width: 1px;
}
.tree-container /deep/ .el-tree-node:after {
border-top: 1px dashed #ccc;
height: 25px;
top: 20px;
width: 20px;
}
.el-tree-node :last-child:before {
height: 40px;
}
.tree-container {
margin: 10px;
}
.tree-container /deep/ .el-tree .el-tree-node {
position: relative;
}
.tree-container /deep/ .el-tree-node .el-tree-node__content {
height: 34px;
padding-left: 0px !important;
border: none;
}
.tree-container /deep/ .el-tree-node .el-tree-node__content::before {
border-left: 1px dashed #ccc;
height: 100%;
top: 0;
width: 1px;
margin-left: 1px;
margin-top: 0px;
z-index: 8;
}
.tree-container
/deep/
.el-tree-node
.el-tree-node__children
.el-tree-node__content::before {
border-left: 0px dashed #ccc;
height: 100%;
top: 0;
width: 1px;
margin-left: 1px;
margin-top: 0px;
z-index: 8;
}
.tree-container /deep/ .el-tree-node .el-tree-node__content::after {
border-top: 1px dashed #ccc;
height: 1px;
top: 18px;
width: 13px;
margin-left: 1px;
z-index: 8;
}
.tree-container
/deep/
.el-tree-node
.el-tree-node__children
.el-tree-node__content::after {
border-top: 0px dashed #ccc;
}
.tree-container .el-tree-node .el-tree-node__content::before,
.tree-container .el-tree-node .el-tree-node__content::after {
content: "";
position: absolute;
right: auto;
}
/deep/.el-table__placeholder {
padding-left: 8px;
}
/deep/.el-card__body {
padding: 10px !important;
> div {
padding-bottom: 10px;
border-bottom: 1px solid #ccc;
&:hover {
color: blue;
}
}
}
.text {
font-size: 14px;
}
.el-tree {
width: 80%;
margin-top: 10px;
}
.search {
width: 60%;
}
.item {
padding: 18px 0;
}
.add {
cursor: pointer;
margin-top: 10px;
}
.delete {
margin: 10px 0;
cursor: pointer;
}
.edit {
margin-bottom: 10px;
cursor: pointer;
}
.search {
cursor: pointer;
}
.box-card {
width: 150px;
position: absolute;
z-index: 1000;
}
</style>

10
src/views/index1.vue

@ -39,9 +39,9 @@
</el-row> </el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :sm="24" :lg="12" style="padding-left: 20px"> <el-col :sm="24" :lg="12" style="padding-left: 20px">
<h2>若依后台管理框架</h2> <h2>国际供应链产销协同系统框架</h2>
<p> <p>
一直想做一款后台管理系统看了很多优秀的开源项目但是发现没有合适自己的于是利用空闲休息时间开始自己写一套后台系统如此有了若依管理系统她可以用于所有的Web应用程序如网站管理后台网站会员中心CMSCRMOA等等当然您也可以对她进行深度定制以做出更强系统所有前端后台代码封装过后十分精简易上手出错概率低同时支持移动客户端访问系统会陆续更新一些实用功能 一直想做一款后台管理系统看了很多优秀的开源项目但是发现没有合适自己的于是利用空闲休息时间开始自己写一套后台系统如此有了国际供应链产销协同系统她可以用于所有的Web应用程序如网站管理后台网站会员中心CMSCRMOA等等当然您也可以对她进行深度定制以做出更强系统所有前端后台代码封装过后十分精简易上手出错概率低同时支持移动客户端访问系统会陆续更新一些实用功能
</p> </p>
<p> <p>
<b>当前版本:</b> <span>v{{ version }}</span> <b>当前版本:</b> <span>v{{ version }}</span>
@ -128,14 +128,14 @@
<p> <p>
<i class="el-icon-chat-dot-round"></i> 微信<a <i class="el-icon-chat-dot-round"></i> 微信<a
href="javascript:;" href="javascript:;"
>/ *</a >/ *DHC</a
> >
</p> </p>
<p> <p>
<i class="el-icon-money"></i> 支付宝<a <i class="el-icon-money"></i> 支付宝<a
href="javascript:;" href="javascript:;"
class="支付宝信息" class="支付宝信息"
>/ *</a >/ *DHC</a
> >
</p> </p>
</div> </div>
@ -987,7 +987,7 @@
</el-collapse-item> </el-collapse-item>
<el-collapse-item title="v1.0.0 - 2019-10-08"> <el-collapse-item title="v1.0.0 - 2019-10-08">
<ol> <ol>
<li>若依前后端分离系统正式发布</li> <li>国际供应链产销协同系统系统正式发布</li>
</ol> </ol>
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>

2
src/views/login.vue

@ -1,7 +1,7 @@
<template> <template>
<div class="login"> <div class="login">
<el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form"> <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
<h3 class="title">若依后台管理系统</h3> <h3 class="title">国际供应链产销协同系统</h3>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input <el-input
v-model="loginForm.username" v-model="loginForm.username"

2
src/views/register.vue

@ -1,7 +1,7 @@
<template> <template>
<div class="register"> <div class="register">
<el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form"> <el-form ref="registerForm" :model="registerForm" :rules="registerRules" class="register-form">
<h3 class="title">若依后台管理系统</h3> <h3 class="title">国际供应链产销协同系统</h3>
<el-form-item prop="username"> <el-form-item prop="username">
<el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号"> <el-input v-model="registerForm.username" type="text" auto-complete="off" placeholder="账号">
<svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" /> <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />

2
vue.config.js

@ -7,7 +7,7 @@ function resolve(dir) {
const CompressionPlugin = require('compression-webpack-plugin') const CompressionPlugin = require('compression-webpack-plugin')
const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题 const name = process.env.VUE_APP_TITLE || '国际供应链产销协同系统' // 网页标题
const port = process.env.port || process.env.npm_config_port || 80 // 端口 const port = process.env.port || process.env.npm_config_port || 80 // 端口

Loading…
Cancel
Save