master
editor 1 year ago
commit b10b206173

@ -0,0 +1,233 @@
.NETCORE敏捷开发平台
后台VS2019、VS2022、.NetCore3.1、.Net6 、EFCore3.1/6、JWT、Dapper、Autofac、SqlServer/MySql/PGSql/Oracle、Redis(可选)
前端VSCode、Vue2.0webpack、node.js,没有环境的搜:vue webpack npm)、Vuex、axios、promise、IView、Element-ui
系统操作说明
使用代码生成器可实现的功能
代码生成器可自动完成基本功能的实现,不需要写代码,包括:
单表/主从表:查询、删除、新增、修改、导入、导出、审核、表单/table数据源自动绑定
单表/主从表自动生成前端及后台代码,不需要写任何代码,并支持前后端扩展实现复杂的功能
一对多暂未实现,需要自己写扩展
使用代码生成器前需要准备的工作
先在数据库创建表,必须有主键,只能是自增Id或GuidMySql数据库使用Guid请将字段设置为char长度36位
表最好包括创建(修改)人、时间等字段,在新增或编辑时,框架会自动给这几个字段设置值
字段格式要求参照后台项目appsettings.json中属性CreateMember、ModifyMember的说明
参照项目启动,把项目跑起来
主从(明细)表生成代码需要注意
明细表的外键必须是主表的主键字段,可参照SellOrder的明细表SellOrderList的外建
主从表代码生成步骤都是一样,在生成主表前需要先将从表按现有步骤生成
在主表生成配置页面填上【明细表名】与【明细表中文名】,点击生成vue页面、model、业务类即可完成主从页面代码的生成
代码生成器中可以不用生成从表vue页面
1、创建mysql表只有字段类型是guid时设置成char(36),其他字段的长度都不要设置成长度36否则会替换成guid类型
2、数据库字段不要设置类型bit(bool)请用int或byte替代
生成代码时项目启动(必看)
1、按项目启动文档启动项目即可
2、后台请运行 ../VOL.WebApi/builder_run.bat命令如果不需要生成业务类运行dev_run.bat即可(第一次生成某张表代码时候才需要运行builder_run.bat)
生成代码后查询框或弹出编辑框是空的请看代码生成第3步说明
生成代码后打开页面异常请看代码生成第6步说明
生成代码
1、选择菜单在线代生成器->Vue+后台代码生成
点击新建,弹出选择框,如果只是做修改跳过此步,直接修改页面配置后点保存,再点各种生成操作
2、填写需要生成表或视图的信息
点击确认,自动从后台加载表结构信息(如果只是生成空菜单,里面就随便填)
项目命名空间:代码生成时所放在类库(现框架采用一个模块为一个类库,可自行决定是否需要增加类库)
项目文件夹:生成的文件放在文件夹,此文件夹由代码生成器创建,不需要手动创建
表名:可以是视图或表,名字必须和数据库一样
如果只想创建一个空菜单,上面表名随便填写
3、配置表结构信息
根据需要配置下面表格中的查询与新建、编辑信息 (不设置编辑、新建行,编辑或查询时,弹出框是空白的)
表别名别名将替代原表名生成的Model与业务类。一个表只能有一个别名默认表名与别名相同。若用别名,必须将已经生成文件删除
点击保存、生成Vue页面、生成Model、生成业务类即可(每次修改信息后都需要点击保存)。
Vue视图绝对路径生成Vue页面必须指定此路径路径为当前Vue项目的views文件夹如E:/VOL.Vue/src/views
4、查看生成完的代码
生成完成后在vs中搜索当前表就能看到生成的代码了
vue代码也同时生成了,可在vscode中搜索当前文件(文件名都是以当前表名开头) 
5、菜单配置
Url:通过VsCode打开vue项目,找到router文件夹下viewGird.js找当前生成表的path属性/SellOrder就是配置菜单需要配置的url,直接复制过来即可
表名:在生成代码时填写的表名或视图名,必须一致,否则权限验证通不过
6、查看生成的页面
如果后台启动的是builder_run.bat请关掉后台(否则打开菜单后会提示未找到路径),点击目录 …/VOL.WebApi/dev_run.bat文件启动后台,
输入http://localhost:8080/sellOrder
代码生成器参数配置
字段
描述
Id
表Id
父级Id
表所放在位置
项目命名空间
将当前表生成的文件放在所选命名空间的类库中
表中文名
需要生成代码的表具体名
表别名
表别名如果不想暴露真实表名可以自行设置任何表别名表别名将替代原表名生成的Model与业务类。一个表只能有一个别名默认表名与别名相同如果想使用别名必须将已经生成过的文件删除
实际表名
用实际表名替换表名, 具体功能未开发
项目文件夹
将当前表生成的文件放在所选命名空间类库下的文件夹( 不需要人为创建)
明细表中文名
明细从表的中文名
明细表名
明细从表, 用于生成主从表关系及UI, 生成代码前, 必须先生成明细表代码
快捷编辑字段
设置[快捷编辑字段]后,前台界面表格点击此链接可快速查看详细信息  
排序字段
前台表格的排序字段,如果不是自增的主键,必须设置此值
Vue 视图绝对路径
生成Vue 页面存放的位置E:/project/views/ Vue 页面生成后会放在此路径下
代码生成器表结构配置
字段
描述
列中文名
表显示的中文名
列名
表列名
列最大长度
数据库设置的列长度 如果使用的mysql数据库并且主键使用的是Guid数据库字段类型应该设置为char 长度为36否则生成实体Model时会与数据库类型对应不上
数据类型
C# 属性的数据类型( 除非数据库字段类型发生变, 其他不需要修改)
table列显示类型
如果table的列存的是图片、excel或其他文件的路径就选择此列的配置,如:列存的是为图片就选择img如果是Excel文件的路径就选择excel这一列在table上点击文件名时会自动下载文件
可为空
表字段是否可为null, 此处会涉及前、后端验证规则,默认加载的是表结构
排序号
前端页面表格显示的顺序
数据源
如果字段对应的是下拉框或多选框,此处选择对应的数据源的字典编号, 在菜单:下拉框绑定设置中配置数据源,具体可参照现有配置
是否只读
编辑或新建时,如果此字段为只读,则不可修改
编辑行、编辑列
新建/编辑时,此字段所在的行与列,如行=1 ,列=2 则界面所在位置为第1 行第2 列(此配置直接决定表的编辑或新建字段,不在此配置中的字段,编辑或新建时都会被过滤移除) 编辑行修改后需要点击【生成model】,如果只想编辑界面不想显示编辑行设置为0
编辑类型
新建/ 编辑时标签的类型如日期标签下拉框text 等
colSize
编辑、新建、查看时此字段显示的长度如果设置的是12 则此字段独占一行可选值1-12
查询行、查询列
查询时,此字段所在的行与列,如行=1 ,列=2 则界面所在位置为第1 行第2 列
查询类型
查询时标签的类型如日期标签下拉框text 等
导入列、Api 输入列是否可为空、api 输出列
具体业务未实现
主键
设置是否为主键,必须一个主键
二、基础设置
1、物料类别新增、编辑
2、物料类别编辑界面
3、物料表编辑界面
4、物料表查询界面
5、会计科目可新增、编辑正式使用时可导入
6、客户资料
7、供应商资料、部门资料、银行资料使用方法与上述一致
三、采购管理
1、采购计划可以自行新增、也可以从MRP转单
2、采购订单
当采购计划确认后,采购员可自行安排采购订单,操作方法参考上述
3、采购入库退货
(注意:数量录入负数,即代表退货,所有进销存单据都一样)
四、计划管理
1、按月或按周计划员自行添加相应的销售计划
五、销售管理
1、销售订单编辑界面
2、销售出货退回
六、生产管理
1、生产领料退料
(可以选择来源“生产组装单”,也可以自行新增)
2、生产入库退回
(操作方法与上述一致)
七、质检管理
1、质检单
八、库存管理
1、其它入库单
2、其它出库单
(操作方法与其它入库单相同
3、调拨单选择调入调出仓库
4、库存明细账
九、财务管理
1、凭证管理新增、编辑
2、明细分类账
3、科目余额表
十、物流管理
1、物流档案
2、物流记录单按订单记录物流信息
十一、店铺管理
1、店铺档案
十二、物料需求计划
1、MRP运算方案
(可选择3种不同的运算方式
2、选择MRP的来源单据
3、MRP运算
(按来源单据,运算出需要生产、采购的数量,并且提供参考运算时的库存、预计入库、预计出库的信息)
作者: NET2015
如需获得该源码的视频、更新等更多资料请访问: https://www.51aspx.com/Code/Rapiddevelopment
------------------------------------------------------------------------------------------------
源码服务专家
官网: https://www.51aspx.com
讨论圈: https://club.51aspx.com/
平台声明:
1.51Aspx平台上提供下载的资源为免费、共享、商业三类源码,其中免费和共享源码仅供个人学习和研究使用,商业源码请在相应的授权许可条件下使用;
2.51Aspx平台对提供下载的软件及其它资源不拥有任何权利,其版权归属源码合法拥有者所有;
3.著作权人发现本网站载有侵害其合法权益的内容或作品,请与我们联系( 登录官网与客服反馈或发送邮件到support@51Aspx.com
4.51Aspx平台不保证提供的下载资源的准确性、安全性和完整性;
友情提示:
一般数据库文件默认在 DB_51Aspx 文件夹下
默认账号密码一般均为51Aspx
关于源码使用常见问题及解决方案,请参阅: https://www.51aspx.com/Help

@ -0,0 +1,7 @@
1<EFBFBD><EFBFBD>mysql<EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ:The used command is not allowed with this MySQL version
<20><><EFBFBD><EFBFBD><EFBFBD><ECB7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ִ<EFBFBD><D6B4>:set global local_infile = 'ON';
2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>:To use MySq1Bu1kLoader. Loca1=true, set AllowLoadLocalInfile =true in the connection string.
<20><><EFBFBD><EFBFBD><EFBFBD><ECB7A8><EFBFBD>ں<EFBFBD>̨<EFBFBD><CCA8>Ŀappsettings.json<6F><6E><EFBFBD>ҵ<EFBFBD>mysql<71><6C><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD>AllowLoadLocalInfile =true

@ -0,0 +1,15 @@
/*
Navicat Premium Data Transfer
Source Server : 120
Source Server Type : MySQL
Source Server Version : 50729
Source Host : 120.53.251.208:3306
Source Schema : netcoredev1
Target Server Type : MySQL
Target Server Version : 50729
File Encoding : 65001
Date: 27/07/2021 10:20:20
*/

@ -0,0 +1,15 @@
/*
Navicat Premium Data Transfer
Source Server : pgsql
Source Server Type : PostgreSQL
Source Server Version : 100013
Source Host : 132.232.2.109:5432
Source Catalog : netcoredev
Source Schema : public
Target Server Type : PostgreSQL
Target Server Version : 100013
File Encoding : 65001
Date: 07/08/2020 20:09:37

@ -0,0 +1,15 @@
USE [netcoredev]
GO
/****** Object: Table [dbo].[App_Appointment] Script Date: 2020/12/29 21:42:35 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[App_Appointment](
[Id] [uniqueidentifier] NOT NULL,
[CreateDate] [datetime] NULL,
[CreateID] [int] NULL,
[Creator] [nvarchar](30) NULL,
[Describe] [nvarchar](250) NOT NULL,
[Modifier] [nvarchar](30) NULL,

@ -0,0 +1,15 @@
// https://eslint.org/docs/user-guide/configuring
module.exports = {
root: true,
parserOptions: {
parser: 'babel-eslint'
},
env: {
browser: true,
},
extends: [
// https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
// consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
'plugin:vue/essential',
// https://github.com/standard/standard/blob/master/docs/RULES-en.md

@ -0,0 +1,10 @@
// https://github.com/michael-ciniawsky/postcss-load-config
module.exports = {
"plugins": {
"postcss-import": {},
"postcss-url": {},
// to edit target browsers: use "browserslist" field in package.json
"autoprefixer": {}
}
}

@ -0,0 +1,15 @@
'use strict'
require('./check-versions')()
process.env.NODE_ENV = 'production'
const ora = require('ora')
const rm = require('rimraf')
const path = require('path')
const chalk = require('chalk')
const webpack = require('webpack')
const config = require('../config')
const webpackConfig = require('./webpack.prod.conf')
const spinner = ora('building for production...')
spinner.start()

@ -0,0 +1,15 @@
'use strict'
const chalk = require('chalk')
const semver = require('semver')
const packageConfig = require('../package.json')
const shell = require('shelljs')
function exec (cmd) {
return require('child_process').execSync(cmd).toString().trim()
}
const versionRequirements = [
{
name: 'node',
currentVersion: semver.clean(process.version),
versionRequirement: packageConfig.engines.node

@ -0,0 +1,15 @@
'use strict'
const path = require('path')
const config = require('../config')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const packageConfig = require('../package.json')
exports.assetsPath = function (_path) {
const assetsSubDirectory = process.env.NODE_ENV === 'production'
? config.build.assetsSubDirectory
: config.dev.assetsSubDirectory
return path.posix.join(assetsSubDirectory, _path)
}
exports.cssLoaders = function (options) {

@ -0,0 +1,15 @@
'use strict'
const utils = require('./utils')
const config = require('../config')
const isProduction = process.env.NODE_ENV === 'production'
const sourceMapEnabled = isProduction
? config.build.productionSourceMap
: config.dev.cssSourceMap
module.exports = {
loaders: utils.cssLoaders({
sourceMap: sourceMapEnabled,
extract: isProduction
}),
cssSourceMap: sourceMapEnabled,
cacheBusting: config.dev.cacheBusting,

@ -0,0 +1,15 @@
'use strict'
const path = require('path')
const utils = require('./utils')
const config = require('../config')
const vueLoaderConfig = require('./vue-loader.conf')
function resolve (dir) {
return path.join(__dirname, '..', dir)
}
const createLintingRule = () => ({
test: /\.(js|vue)$/,
loader: 'eslint-loader',
enforce: 'pre',
include: [resolve('src'), resolve('test')],

@ -0,0 +1,15 @@
'use strict'
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const path = require('path')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')
const portfinder = require('portfinder')
const HOST = process.env.HOST
const PORT = process.env.PORT && Number(process.env.PORT)

@ -0,0 +1,15 @@
'use strict'
const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const CopyWebpackPlugin = require('copy-webpack-plugin')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const prod_version = new Date().getTime();
const env = process.env.NODE_ENV === 'testing'
? require('../config/test.env')

@ -0,0 +1,15 @@
let buttons = [{
name: "查 询",
value: 'Search',
icon: 'md-search',
class: 'dropdown',
type: 'info',
onClick: function () {
this.search();
}
},
// {
// name: "重 置",
// icon: 'md-refresh',
// class: '',

@ -0,0 +1,7 @@
'use strict'
const merge = require('webpack-merge')
const prodEnv = require('./prod.env')
module.exports = merge(prodEnv, {
NODE_ENV: '"development"'
})

@ -0,0 +1,15 @@
'use strict'
// Template version: 1.3.1
// see http://vuejs-templates.github.io/webpack for documentation.
const path = require('path')
module.exports = {
dev: {
// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',
proxyTable: {},
// Various Dev Server settings

@ -0,0 +1,4 @@
'use strict'
module.exports = {
NODE_ENV: '"production"'
}

@ -0,0 +1,7 @@
'use strict'
const merge = require('webpack-merge')
const devEnv = require('./dev.env')
module.exports = merge(devEnv, {
NODE_ENV: '"testing"'
})

@ -0,0 +1,15 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<body id="cnblogs_post_body">
<h2>
这是一个可支持对前端、后台基础业务代码扩展的快速发开框架,现框架可直上手开发这些功能
</h2>
<blockquote>

@ -0,0 +1,15 @@
<html><head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<body id="cnblogs_post_body">
<h2>后台相关</h2>
<p class="desc">后台扩展业务代码、数据库访问、缓存、权限等常用操作可参照netcore项目中VOL.Order->Services->Sell->Partial->SellOrderService.cs文件,根据实际需要添加扩展方法</p>
<p>&nbsp;</p>
</div>

@ -0,0 +1,15 @@
<html>
<head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<body id="cnblogs_post_body">
<h2>表单data属性</h2>
<p class="desc">在扩展组件、方法可直接使用这些属性,前端扩展业务代码编写参照vue项目中extension->order->SellOrder.js文件,根据实际需要添加扩展方法</p>
<div class="cnblogs_code">
<pre><span style="color: #000000;">data() {

@ -0,0 +1,15 @@
<html><head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
</head>
<body id="cnblogs_post_body">
<h2>使用代码生成器前需要准备的工作</h2>
<blockquote style=" background: #fbfbfb;">
<ul>
<li>在数据库创建一张表,必须有主键,可以是自增Id也可以是Guid如果使用的MySql数据库使用Guid请将字段设置为char长度36位</li>
<li>表最好包括创建人、时间/修改人、时间等字段在新增或编辑时框架会自动给这几个字段设置值字段格式要求参照后台项目appsettings.json中属性CreateMember、ModifyMember的说明</li>
<li>

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- <meta id="viewport" name="viewport"
content="width=device-width,initial-scale=1,minimum-scale=1,
maximum-scale=1,user-scalable=no,viewport-fit=cover"> -->
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>vol-vue</title>
<style type="text/css">
#v-loading-container {
position: absolute;
left: 0;
top: 0;

@ -0,0 +1,15 @@
{
"name": "vol-vue",
"version": "1.0.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@babel/code-frame": {
"version": "7.0.0-beta.44",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz",
"integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==",
"dev": true,
"requires": {
"@babel/highlight": "7.0.0-beta.44"
}
},

@ -0,0 +1,15 @@
{
"name": "vol-vue",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "jxx <283591387@qq.com>",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"unit": "jest --config test/unit/jest.conf.js --coverage",
"e2e": "node test/e2e/runner.js",
"test": "npm run unit && npm run e2e",
"lint": "eslint --ext .js,.vue src test/unit test/e2e/specs",
"build": "node build/build.js"
},

@ -0,0 +1,15 @@
import axios from 'axios'
import store from '../store/index'
axios.defaults.timeout = 50000;
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
import { Loading, Message } from 'element-ui';
let loadingInstance;
let loadingStatus = false;
if (process.env.NODE_ENV == 'development') {
axios.defaults.baseURL = 'http://127.0.0.1:9991/';
}
else if (process.env.NODE_ENV == 'debug') {
axios.defaults.baseURL = 'http://127.0.0.1:9991/';

@ -0,0 +1,15 @@
import http from '@/../src/api/http.js'
import buttons from '@/../config/buttons.js'
// let permission = {
// install(Vue, config) {
// Vue.prototype.permission = {
// }
// }
// }
//Vue.use(permission);
let $vue = null;
let permission = {
init(vue) {

@ -0,0 +1,9 @@
const tipxx = {
install: function (vue) {
alert(1);
vue.prototype.$tip = function () {
alert('测试use')
};
}
}
export default { tipxx }

@ -0,0 +1,2 @@
var test1 = function () { alert(11) }
export { test1 }

@ -0,0 +1,5 @@
//对vue参数进行扩展
var extend = function (param) {
console.log(param)
}
export { extend }

@ -0,0 +1,15 @@
//对vue参数进行扩展
var extend = function ($vueParam) {
$vueParam.methods.volBoxFrom = function () {
this.$Message.info("扩展js,增加弹出消息");
this.$refs.volBoxFrom.show();
}
//修改data属性:
let data = $vueParam.data();
data.formFileds['extend'] = "动态扩展字段";
data.formOptions.splice(0,0,{ filed: "extend", title: "动态增加字段", type: "text", required: true });
$vueParam.data = function () {
return data;
}
}
export { extend }

@ -0,0 +1,15 @@
//从表方法
let detailMethods = {
//查询从表前先做内部处理
loadInternalDetailTableBefore (param, callBack) {//加载明细表数据之前,需要设定查询的主表的ID
//每次只要加载明细表格数据就重置删除明细的值
if (this.detailOptions.delKeys.length > 0) {
this.detailOptions.delKeys = [];
}
let key = this.table.key;
if (this.currentRow && this.currentRow.hasOwnProperty(key)) {
param.value = this.currentRow[key];
}
return this.loadDetailTableBefore(param, callBack);
},
detailRowOnChange (row) {

@ -0,0 +1,15 @@
import detailMethods from "./detailMethods.js";
//业务处理方法,全部可以由开发覆盖
import serviceFilter from "./serviceFilter.js";
let methods = {
//当添加扩展组件gridHeader/gridBody/gridFooter及明细modelHeader/modelBody/modelFooter时
//如果要获取父级Vue对象,请使用此方法进行回调
parentCall(fun) {
if (typeof fun != "function") {
return console.log("扩展组件需要传入一个回调方法才能获取父级Vue对象");
}
fun(this);
},
getCurrentAction() {
if (this.currentReadonly) {
return "";

@ -0,0 +1,15 @@
let props = {
columns: {//当前表的配置信息
type: Array,
default: () => {
return [];
}
},
detail: {//从表明细配置
type: Object,
default: () => {
return {
columns: [],//从表列
sortName: ""//从表排序字段
};
}

@ -0,0 +1,4 @@
//界面查询相关方法
let search={
}

@ -0,0 +1,15 @@
let serviceFilter = {
onInit () { //对应created
console.log('Create执行前')
},
onInited () { //对应created在onInit与onInited中间会初始化界面数据对象
console.log('Create执行后')
},
mounted () {
console.log('mounted');
},
searchBefore (param) { //查询ViewGird表数据前,param查询参数
// console.log('表' + this.table.cnName + '触发loadTableBefore');
return true;

@ -0,0 +1,11 @@
export default {
name: "FormExpand",
functional: true,
props: {
render: Function,
},
render: (h, ctx) => {
return ctx.props.render(h, { tt: 11 }); //h();
}
};

@ -0,0 +1,15 @@
export default {
name: "TableExpand",
functional: true,
props: {
render: Function,
row: {},//当前行的数据
column: {},//当前行的配置信息
index: { type: Number, default: 0 }//当前所在行
},
render: (h, ctx) => {
const params = {
row: ctx.props.row, column: ctx.props.column, index: ctx.props.index
}
return ctx.props.render(h, params); //h();
}

@ -0,0 +1,15 @@
//通过render动态渲染表单内容
var $com;
var MyComponent = {
data() { return { time: "" } },
created() {
$com = this;
},
methods: {
btnClick() {
this.$message.info(JSON.stringify($this.editFormFields))
}
},
//创建自定义组件模板
template: ` <div style="margin-bottom: 17px;">

@ -0,0 +1,15 @@
import gridHeader from './App_Expert/App_ExpertGridHeader'
//声明vue对象
let $this;
let extension = {
components: {
gridHeader:``,
gridBody: { template: '<Alert type="success">复杂table内容适用于table列较多的情况可以将列合并在一起显示(代码生成后在对应js文件中设置合并显示信息)</Alert>'},
gridFooter: '',
modelHeader: '',
modelBody: '',
modelFooter: ''
}, //动态扩充组件或组件路径
buttons: {
view: []

@ -0,0 +1,15 @@
let extension = {
components: {//动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader: () => import("./App_News/App_NewGirdHeader.vue"),
gridBody: {
template: `<div>
<Alert type="success" show-icon>
页面打开异常
<template
slot="desc"
>如果本地打开此页面提示异常,请在代码生成器找到静态页面发布->新闻列表点击:同步表结构->生成model->保存->生成vue页面</template>
</Alert>
</div>`},
gridFooter: '',

@ -0,0 +1,15 @@
let extension = {
components: {
gridHeader: "",
gridBody: {
template: '<Alert type="success" show-icon>\
使用代码生成器生成\
<template slot="desc">\ <p>\
1代码生成器编辑类型选择editor即可默认生成编辑器,2021.01.16更新basic组件与代码生成器才可使用</p>\
<p>2设置属性后textInline表格超出换行onInit(){ this.textInline = false}</p></template>\
</Alert>'},
gridFooter: '',
modelHeader: '',
modelBody: '',
modelFooter: ''

@ -0,0 +1,15 @@
import modelBody from "./App_ReportPrice/App_ReportPriceModelBody.vue"
let extension = {
components: {//动态扩充组件或组件路径
gridHeader: "",
gridBody: {
template: `<div>
<Alert type="success" show-icon> 一对多从表,主表由代码生成,从表自定义进行扩展,不限制从表数量与类型点击编辑或新建可查看效果
<template slot="desc"><span style="color:red;">一对多从表需要自己写扩展实现从表的数据加载与保存可参照本页面的App_ReportPrice.js与App_ReportPriceModelBody.vue实现方法</span></template></Alert></div>`},
gridFooter: '',
modelHeader: '',
//将自己写的App_ReportPriceModelBody.vue从表配置加载到弹出框中(此处可以同步加载,但会影响第一打开速度)
modelBody: modelBody,
modelFooter: ''
},
buttons: [],//扩展的按钮

@ -0,0 +1,15 @@
let extension = {
components: {//动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader: '',//{ template: "<div>扩展组xx件</div>" },
gridBody: {
template: '<Alert type="success" show-icon>\
查询默认/显示所有查询条件<template slot="desc"><p>1 onInit(){ this.setFiexdSearchForm(true); //设置固定显示所有查询条件}</p>\
2 设置默认查询值(下拉框默认日期)查询界面表高度等,具体见App_Transaction.js配置与说明</template>\
</Alert>' },
gridFooter: '',
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: '',
modelBody: '',
modelFooter: ''
},

@ -0,0 +1,15 @@
let extension = {
components: {//动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader: '',//{ template: "<div>扩展组xx件</div>" },
gridBody: '',
gridFooter: '',
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: '',
modelBody: '',
modelFooter: ''
},
text: "点击行或者点击表格的编辑即可开启编辑功能",
tableAction:'App_Transaction',
buttons: [],//扩展的按钮
methods: {//事件扩展

@ -0,0 +1,15 @@
let extension = {
components: {
//动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader: "", //{ template: "<div>扩展组xx件</div>" },
gridBody: "",
gridFooter: "",
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: "",
modelBody: "",
modelFooter: ""
},
text:
"下拉框的数据源不需要写代码,在代码生成器中配置。数据源在系统->下拉框绑定中设置",
buttons: [], //扩展的按钮

@ -0,0 +1,15 @@
let extension = {
components: {//动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader:'',//{ template: "<div>扩展组xx件</div>" },
gridBody: '',
gridFooter: '',
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: '',
modelBody: '',
modelFooter: ''
},
buttons: [],//扩展的按钮
methods: {//事件扩展
}

@ -0,0 +1,15 @@
let extension = {
components: {//动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader:'',//{ template: "<div>扩展组xx件</div>" },
gridBody: '',
gridFooter: '',
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: '',
modelBody: '',
modelFooter: ''
},
buttons: [],//扩展的按钮
methods: {//事件扩展
}

@ -0,0 +1,15 @@
// 扩充组件通过this.emit('header',($vueView)>{})回调方法来操作父组件
//父组件通过this.$refs.header调用子组件添加了扩展按钮需要弹出一个新的model
let extension = {
componentPath: {//动态扩充组件路径
},
buttons: { //扩展按钮
view: [//ViewGrid查询界面按钮
{
name: "测 试",
icon: 'md-create',
value: 'Edit',
class: '',
type: 'success',
index: 1,//显示的位置

@ -0,0 +1,15 @@
let extension = {
components: {//动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader: '',//{ template: "<div>扩展组xx件</div>" },
gridBody: {
template: '<Alert type="success" show-icon>\
表单高度自定义设置/显示所有查询条件<template slot="desc"><p>1 onInit(){ this.setFiexdSearchForm(true); //设置固定显示所有查询条件}</p>\
2 可在扩展js中的onInit方法设置this.tableHeight/tableMaxHeight属性指定table高度(默认自适应)如果设置 了tableMaxHeight属性tableHeight则不会生效</template>\
</Alert>' },
// gridFooter: () => ({ component: import("./App_Appointment/App_AppointmentGridFooter.vue"), loading: AsyncLoading }),
gridFooter: '',
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: '',

@ -0,0 +1,15 @@
//1、此文件中的代码都是对基础业务进行扩展也只能在此处编写代码其他地方编写的代码会被代码生成器生成的代码覆盖
//2、此文件中的方法会与serviceFilter.js进行合并终终执行的就是此文件中的方法
//3、components为扩展组件可自定义页面的头部、body及尾部的额外显示的内容分别对应的组件为:
//gridHeader、gridBody、gridFooter、modelHeader、modelBody、modelFooter共6个组件位置如果不需要扩展组件请忽略此处
//4、text为界面显示额外描述信息
//5、buttons->view/box/detail分别为查询界面、弹出框、弹出框明细表额外扩展的按钮
//6、methods为整个页面所有方法的业务代码扩展如果需要在界面上的操作前、后编写业务请覆盖此方法
//7、methods方法中可获取任意vue对象、方法、属性,可查看ViewGridConfig路径下的js文件及ViewGrid.vue的data属性
//如手动刷新表数据:this.search();
//获取表的列配置信息:this.columns 明细表表的配置信息this.detail.columns
//8、获取子组件gridHeader、gridBody、gridFooter、modelHeader、modelBody、modelFooter则使用
//this.$refs.gridHeader获取gridHeader为自己扩展的对象
//9、在子组件gridHeader、gridBody、gridFooter、modelHeader、modelBody、modelFooter的方法中调用并获得父组件
// this.$emit("parentCall", $vue => {}) //$vue为父组件对象具体使用参考order->GridHeaderExtend.vue文件

@ -0,0 +1,15 @@
import gridFooter from "./SellOrder2/SellOrder2GridFooter.vue"
//自定义从表选择数据源页面
import modelBody from "./SellOrder2/SellOrder2ModelBody.vue"
let extension = {
components: {//动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader: '',//{ template: "<div>扩展组xx件</div>" },
gridBody: {
template: `<div>
<Alert type="success" show-icon> <p style="color:red;">主表与弹出框部份由代码生成器生成点击主表行显示多个明细表数据直接扩展gridFooter位置的代码,具体代码见此示例(SellOrder2.js)</p></Alert></div>`},
gridFooter: gridFooter,
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: "",
modelBody: modelBody,

@ -0,0 +1,15 @@
import SellOrder3GridFooter from "./SellOrder3/SellOrder3GridFooter.vue"
let extension = {
components: {//动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader: '',//{ template: "<div>扩展组xx件</div>" },
gridBody: {
template: `<div>
<Alert type="success" show-icon> <p style="color:red;">主表与弹出框部份由代码生成器生成点击主表行显示多个明细表数据直接扩展gridFooter位置的代码,具体代码见此示例(SellOrder3.js),明细可以进行修改删除等操作</p></Alert></div>`},
gridFooter: SellOrder3GridFooter, //() => import("./SellOrder3/SellOrder3GridFooter.vue"),
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: "",
modelBody: '',
modelFooter: "", //() => import("./SellOrderComponents/ModelFooter.vue"),
},

@ -0,0 +1,15 @@
let extension = {
components: {//动态扩充组件或组件路径
gridHeader: '',
gridBody: {
template: `<div>
<Alert type="success" show-icon> <p style="color:red;">一对一从表编辑上传图片,点击编辑从表点击[上传图片]</p></Alert></div>`},
gridFooter: '',
modelHeader: "",
//点击上传图片的弹出框
modelBody: () => import("./vSellOrderImg/vSellOrderImgModelBody.vue"),
modelFooter: "",
},
text: "一对一从表编辑上传图片",
methods: {

@ -0,0 +1,15 @@
import test from "./test.vue";
let extension = {
components: { //动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
//扩展组件引入方式
///test
//() => import("./test.vue"),
//{ template: '<Alert type="success">A success prompt</Alert>'},//{ template: "<div>扩展组xx件</div>" },
gridHeader: '',
gridBody: test,
gridFooter: '',
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: '',
modelBody: '',
modelFooter: ''

@ -0,0 +1,15 @@
let extension = {
components: {//动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader:'',
gridbody:'',
gridFooter: '',
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: '',
modelBody: '',
modelFooter: ''
},
buttons: [],//扩展的按钮
methods: {//事件扩展

@ -0,0 +1,15 @@
import { Row } from "element-ui";
let extension = {
components: {
//动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader: "", //{ template: "<div>扩展组xx件</div>" },
gridBody: "",
gridFooter: "",
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: "",
modelBody: "",
modelFooter: ""
},
buttons: [], //扩展的按钮

@ -0,0 +1,15 @@
let extension = {
components: {//动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader: '',
gridBody: '',
gridFooter: '',
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: '',
modelBody: '',
modelFooter: ''
},
buttons: [],//扩展的按钮
methods: {//事件扩展

@ -0,0 +1,15 @@
let extension = {
components: {//动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader: '',
gridBody: {
template: '<Alert type="success" show-icon>\
关于TreeTable使用<template slot="desc">\
treetable同样全部代码自动生成页面生成后设置this.rowKe="xxx" tree主键字段,即可完成树形table配置,具体说明见Sys_Role1.js(<a target="_blank" href="http://www.volcore.xyz/document/log">升级方式见</a>)</template>\
</Alert>' },
gridFooter: '',
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: '',
modelBody: '',

@ -0,0 +1,15 @@
let extension = {
components: { //动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader: () =>
import ("./Sys_User/Sys_UserGridHeader.vue"),
gridBody: '',
gridFooter: '',
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: '',
modelBody: '',
modelFooter: ''
},
text: "只能看到当前角色下的所有帐号",
buttons: [], //扩展的按钮
methods: { //事件扩展

@ -0,0 +1,15 @@
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import iView from 'iview'
import 'iview/dist/styles/iview.css'
import router from './router'
import http from './api/http'
import permission from './api/permission'
import store from './store/index'
import base from './utilities/common'
// import NProgress from 'nprogress'
// import 'nprogress/nprogress.css'

@ -0,0 +1,15 @@
let charts=[
{
path: '/chart',
name: 'chart',
component: () => import('@/views/charts/chart.vue')
},
{
path: '/formChart',
name: 'formChart',
component: () => import('@/views/charts/formChart.vue')
},
{
path: '/flex',
name: 'flex',
component: () => import('@/views/charts/flex.vue')

@ -0,0 +1,15 @@
let documents=[{
path: '/document',
name: 'document',
component: () => import('@/views/document/document.vue'),
redirect: '/document/guide',
meta: {
anonymous: true
}
,
children: [{
path: '/document/guide',
name: '/document/guide',
component: () => import('@/views/document/guide.vue'),
meta: {
anonymous: true

@ -0,0 +1,15 @@
let exampleRouter = [{
path: '/store',
name: 'store',
component: () => import('@/views/example/store.vue')
}, {
path: '/icons',
name: 'icons',
component: () => import('@/views/example/icons.vue')
}, {
path: '/iview',
name: 'iview',
component: () => import('@/views/example/iview.vue')
}, {
path: '/tree',
name: 'tree',

@ -0,0 +1,15 @@
let form = [
{
path: '/form1',
name: 'form1',
component: () => import('@/views/forms/form1.vue')
},
{
path: '/form2',
name: 'form2',
component: () => import('@/views/forms/form2.vue')
},
{
path: '/form3',
name: 'form3',
component: () => import('@/views/forms/form3.vue')

@ -0,0 +1,15 @@
let formsMulti=[
{
path: '/multi1',
name: 'multi1',
component: () => import('@/views/formsMulti/multi1.vue')
},
{
path: '/multi2',
name: 'multi2',
component: () => import('@/views/formsMulti/multi2.vue')
},
{
path: '/multi3',
name: 'multi3',
component: () => import('@/views/formsMulti/multi3.vue')

@ -0,0 +1,15 @@
let h5 = [{
path: '/app',
name: 'app',
component: () => import('@/views/h5/index.vue'),
meta: {
anonymous: true
},
redirect: '/app/home',
children: [
{
path: '/app/home',
name: 'apphome',
meta: {
anonymous: true
},

@ -0,0 +1,15 @@
import Vue from 'vue'
import Router from 'vue-router'
import store from '@/store'
// import exampleRouter from './router/examplxe.js'
import exampleRouter from './example'
import redirect from './redirect'
import viewgird from './viewGird'
import h5 from './h5'
import form from './form'
import formsMulti from './formsMulti'
import charts from './charts'
import tables from './tables'
import documents from './documents'

@ -0,0 +1,15 @@
let redirect = [{
path: '/404',
name: '404',
component: () => import('@/views/redirect/404.vue'),
meta:{
anonymous:true
}
}, {
path: '/401',
name: '401',
component: () => import('@/views/redirect/401.vue')
}, {
path: '/coding',
name: 'coding',
component: () => import('@/views/redirect/coding.vue')

@ -0,0 +1,15 @@
let tables = [
{
path: '/table1',
name: 'table1',
component: () => import('@/views/tables/table1.vue')
},
{
path: '/table2',
name: 'table2',
component: () => import('@/views/tables/table2.vue')
},
{
path: '/table3',
name: 'table3',
component: () => import('@/views/tables/table3.vue')

@ -0,0 +1,15 @@
let viewgird = [
{
path: '/Sys_Log',
name: 'sys_Log',
component: () => import('@/views/system/Sys_Log.vue')
}
,{
path: '/Sys_User',
name: 'Sys_User',
component: () => import('@/views/system/Sys_User.vue')
} ,{
path: '/Sys_Dictionary',
name: 'Sys_Dictionary',
component: () => import('@/views/system/Sys_Dictionary.vue')
} ,{

@ -0,0 +1,7 @@
const workFlow = [
{
path: '/workFlow',
name: 'workFlow',
component: () => import('@/views/workFlow/WorkFlow.vue')
}]
export default workFlow;

@ -0,0 +1,15 @@
const data = {
state: {
data: {}
},
mutations: {
// setData(state, data) { //this.$store.commit('setData', data)
// state.data = data;
// },
clear(state) {
state.data = {};
}
}, getters: {
getData: (state) => () => { //调用方式 store.getters.getData()
return data;

@ -0,0 +1,15 @@
import Vue from 'vue'
import Vuex from 'vuex'
import { stat } from 'fs';
Vue.use(Vuex);
const moduleA = {
state: {
m: 123
}, mutations: {
}, getters: {
}, actions: {
toDo(context) {

@ -0,0 +1,15 @@
let base = {
isPhone (val) {
return /^[1][3,4,5,6,7,8,9][0-9]{9}$/.test(val)
},
isDecimal (val) {
return /(^[\-0-9][0-9]*(.[0-9]+)?)$/.test(val)
},
isNumber (val) {
return /(^[\-0-9][0-9]*([0-9]+)?)$/.test(val)
},
isMail (val) {
return /^(\w-*\.*)+@(\w-?)+(\.\w{2,})+$/.test(val)
},
isUrl (url) {
return this.checkUrl(url)

@ -0,0 +1,15 @@
let columnType = [{ "key": 1, "value": "img" },
{ "key": 2, "value": "excel" },
{ "key": 3, "value": "file" },
//2021.07.27增加table列显示类型date(自动格式化)
{ "key": 4, "value": "date" }
]
let dataType = [
{ "key": "text", "value": "input" },
{ "key": "textarea", "value": "textarea" },
{ "key": "switch", "value": "switch" },
// { "key": "dropList", "value": "dropList" },
{ "key": "select", "value": "select" },
{ "key": "selectList", "value": "select多选" },
{ "key": "date", "value": "date" },

@ -0,0 +1,15 @@
var echarts = require("echarts");
let chartLeft1 = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "shadow"
}
},
grid: {
left: "0%",
top: "10px",
right: "0%",
bottom: "4%",
containLabel: true
},

@ -0,0 +1,15 @@
let options= {
bar: {
color: ["#3398DB"],
tooltip: {
trigger: "axis",
axisPointer: {
// 坐标轴指示器,坐标轴触发有效
type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
}
},
grid: {
left: "3%",
right: "4%",
bottom: "3%",
containLabel: true

@ -0,0 +1,15 @@
let formFileds1 = {
Variety: "",
AgeRange: "",
DateRange: [],
City: "",
AvgPrice: 8.88,
Date: "",
IsTop: "还没想好..."
}
let formRules1 = [
//两列的表单formRules数据格式为:[[{},{}]]
[
{
link:true,
dataKey: "city",

@ -0,0 +1,15 @@
let editTable = {
data: [ //表数据
{
ExpertId: 276,
NotNull: "还没想好",
LimitLenght: "baba",
UserImg:
"https://imgs-1256993465.cos.ap-chengdu.myqcloud.com/h5pic/x1.jpg",
LimitNumber: 3,
EventClick: "七秒钟的记忆",
FormatString: '2019-11-20',
BindKeyValue: "1",
Enable: 1,
ReallyName: "七秒的记忆",
filetest: "https://imgs-1256993465.cos.ap-chengdu.myqcloud.com/github/wordtest.docx",//也是设置为api服务器的文件地址如static/20191206/xx.xlsx

@ -0,0 +1,15 @@
import extendHeader from "./doc_viewGirdHeader.vue"
import extendModelBodyHeader from "./doc_viewGirdModelBody.vue"
let extension = {
components: {//动态扩充组件或组件路径
gridHeader: extendHeader,//自定义扩展查询界面header部份
gridBody: "",//扩展同上
gridFooter: "",//扩展同上
modelHeader: '',//扩展同上
modelBody: extendModelBodyHeader,//自定义扩展弹出框界面body部份
modelFooter: ''//扩展同上
},
tableAction:'SellOrder',//设置获取指定表的权限按钮
text: "此处为主从表扩展示例,doc_viewGird.vue与doc_viewGirdExtension.js可由代码生成,其他两个文件自己写的扩展", //查询界面文字描述

@ -0,0 +1,15 @@
const param = {
icons: {
attr: [],
methods: [{ name: "on-select", desc: "选中图标事件", param: "图标样式名" }]
},
form: {
attr: [{ name: "loadKey", desc: "是否自动绑定select/checkboxt等标签的数据源", type: "bool", default: "false" },
{ name: "width", desc: "表单宽度", type: "number", default: "100%" },
{ name: "labelWidth", desc: "左边标签宽度", type: "number", default: "100" },
{ name: "formFileds", desc: "表单字段key/value如:{name:'admin',age:''}", type: "json", default: "" },
{ name: "formFields", desc: "<span style='color:red;'>表单字段同上此属性用于兼容上面字段拼写错误的问题2020.09.13更新后才能使用)</span>", type: "json", default: "" },
{ name: "disabled", desc: "是否只读", type: "bool", default: "false" },
{ name: "placeholder", desc: "标签提示文字", type: "string", default: "" },
{ name: "colSize", desc: "每行列的宽度,可选值:12,8,6,如果是12标签会占100%宽度", type: "number", default: "" },
{ name: "表单配置参数", desc: "表单字段的参数配置说明(数组的元素个数决定了表单每行显示的标签个数),配置实例参照【查看代码】", type: "array", default: "[]" },

@ -0,0 +1,15 @@
var codeString = {
icons: `<div>
<div class="cnblogs_code">
<pre> &lt;template&gt;
&lt;div&gt;
&lt;Icons :on-select="onSelect"&gt;&lt;/Icons&gt;
&lt;/div&gt;
&lt;/template&gt;
&lt;script&gt;<span style="color: #000000;">
import Icons from </span>"@/components/basic/Icons.vue"<span style="color: #000000;">;
export </span><span style="color: #0000ff;">default</span><span style="color: #000000;"> {
data() {},
components: { Icons },
methods: {
onSelect(icon) {

@ -0,0 +1,15 @@
import table1 from "../multil1Extension/table1.vue"
let extension = {
components: {//动态扩充组件或组件路径
gridHeader:'',
gridBody: "",
gridFooter:table1,
modelHeader: '',
modelBody: '',
modelFooter: ''
},
text:"此处表单由代码生成也可引入单独ViewGrid.vue手动配置数据",
buttons: [],//扩展的按钮
methods: {//事件扩展
onInit() {

@ -0,0 +1,15 @@
import mtable from "../multil2Extension/mtable.vue"
let extension = {
components: {//动态扩充组件或组件路径
gridHeader:'',
gridBody: "",
gridFooter:mtable,
modelHeader: '',
modelBody: '',
modelFooter: ''
},
text:"此处表单由代码生成也可引入单独ViewGrid.vue手动配置数据",
buttons: [],//扩展的按钮
methods: {//事件扩展
onInit() {

@ -0,0 +1,15 @@
import comMulti from "../multil3Extension/comMulti.vue"
let extension = {
components: {//动态扩充组件或组件路径
gridHeader:'',
gridBody: "",
gridFooter:comMulti,
modelHeader: '',
modelBody: '',
modelFooter: ''
},
text:"此处表单由代码生成也可引入单独ViewGrid.vue手动配置数据",
buttons: [],//扩展的按钮
methods: {//事件扩展
onInit() {
this.tableMaxHeight=300;

@ -0,0 +1,15 @@
import form7 from "@/views/forms/form7.vue";
import mtable from "../multil2Extension/mtable.vue"
import comMulti4 from "../multil4Extension/comMulti4.vue"
let extension = {
components: {//动态扩充组件或组件路径
gridHeader: form7,
gridBody: "",
gridFooter: "",
modelHeader:'',
modelBody: comMulti4,
modelFooter: mtable
},
text: "点击编辑,可查看扩展的明细一对多",
buttons: [],//扩展的按钮
methods: {//事件扩展

@ -0,0 +1,15 @@
let options = {
formFileds1: {//表单配置
Variety: "",
AgeRange: "",
DateRange: [],
City: "",
AvgPrice: 8.88,
Date: "",
IsTop: "还没想好..."
}
, formRules1: [//表单配置
[
{
dataKey: "city",
title: "城市",

@ -0,0 +1,15 @@
var viewGridOptions = { //此处的权限是使用的当前页面的权限而不是App_Transaction表的权限
table: {
key: 'Id',
footer: "Foots",
cnName: 'table基础配置',
name: 'App_Transaction',
url: "/App_Transaction/",
sortName: "Id"
},
extend: {
text:"此组件配置与代码生成器生成的配置相同,自带基础操作,可任意扩展",
buttons: { //扩展按钮
view: [//ViewGrid查询界面按钮
{
name: "扩展按钮!",

@ -0,0 +1,15 @@
let extension = {
components: {//动态扩充组件或组件路径
//表单header、content、footer对应位置扩充的组件
gridHeader: '',
gridBody: {
template: `<Alert type="success" show-icon>
表单高度自定义设置<template slot="desc">
整个页面分为:左边树形菜单Tree.vue与右边Table.vue(代码生成的页面,复制过来即可)两部份,按照此格式配置即可
</template> </Alert>` },
gridFooter: '',
//弹出框(修改、编辑、查看)header、content、footer对应位置扩充的组件
modelHeader: '',
modelBody: '',

@ -0,0 +1,15 @@
let
options = {
tree: [
{ "id": 1, "parentId": 0, "text": "北京市" },
{ "id": 2, "parentId": 1, "text": "西城区" },
{ "id": 3, "parentId": 1, "text": "东城区" },
{ "id": 5, "parentId": 0, "text": "西藏自治区" },
{ "id": 6, "parentId": 5, "text": "拉萨市" },
{ "id": 7, "parentId": 5, "text": "昌都市" },
{ "id": 8, "parentId": 7, "text": "丁青县" }
],
//table数据
tableData: [
{
code: "001",

File diff suppressed because one or more lines are too long

@ -0,0 +1,15 @@
/*******************************************************************************
* KindEditor - WYSIWYG HTML Editor for Internet
* Copyright (C) 2006-2021 kindsoft.net
*
* @author Roddy <luolonghao@gmail.com>
* @website http://www.kindsoft.net/
* @licence http://www.kindsoft.net/license.php
* @version 4.1.12 (2021-05-26)
*******************************************************************************/
(function (window, undefined) {
if (window.KindEditor) {
return;
}

@ -0,0 +1,8 @@
import KindEditor from '../components/KindEditor'
const install = function (Vue) {
if (install.installed) return
install.installed = true
Vue.component('editor', KindEditor)
}
export default install

@ -0,0 +1,15 @@
/*******************************************************************************
* KindEditor - WYSIWYG HTML Editor for Internet
* Copyright (C) 2006-2011 kindsoft.net
*
* @author Roddy <luolonghao@gmail.com>
* @site http://www.kindsoft.net/
* @licence http://www.kindsoft.net/license.php
* Arabic Translation By daif alotaibi (http://daif.net/)
*******************************************************************************/
KindEditor.lang({
source : 'عرض المصدر',
preview : 'معاينة الصفحة',
undo : 'تراجع(Ctrl+Z)',
redo : 'إعادة التراجع(Ctrl+Y)',

@ -0,0 +1,15 @@
/*******************************************************************************
* KindEditor - WYSIWYG HTML Editor for Internet
* Copyright (C) 2006-2011 kindsoft.net
*
* @author Roddy <luolonghao@gmail.com>
* @site http://www.kindsoft.net/
* @licence http://www.kindsoft.net/license.php
*******************************************************************************/
KindEditor.lang({
source : 'Source',
preview : 'Preview',
undo : 'Undo(Ctrl+Z)',
redo : 'Redo(Ctrl+Y)',
cut : 'Cut(Ctrl+X)',

@ -0,0 +1,15 @@
/*******************************************************************************
* KindEditor - WYSIWYG HTML Editor for Internet
* Copyright (C) 2006-2011 kindsoft.net
*
* @author Composite <ukjinplant@gmail.com>
* @site http://www.kindsoft.net/
* @licence http://www.kindsoft.net/license.php
*******************************************************************************/
KindEditor.lang({
source : '소스',
preview : '미리보기',
undo : '작업취소(Ctrl+Z)',
redo : '작업재개(Ctrl+Y)',
cut : '잘라내기(Ctrl+X)',

@ -0,0 +1,15 @@
/*******************************************************************************
* KindEditor - WYSIWYG HTML Editor for Internet
* Copyright (C) 2006-2011 kindsoft.net
*
* @author Roddy <luolonghao@gmail.com>
* @site http://www.kindsoft.net/
* @licence http://www.kindsoft.net/license.php
* Translated to Russian by Valery Votintsev (http://codersclub.org/)
*******************************************************************************/
KindEditor.lang({
source : 'Source',
preview : 'Preview',
undo : 'Отмена(Ctrl+Z)',
redo : 'Повтор(Ctrl+Y)',

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save