欢迎使用体验平台!
要替换启动画面,当然要事先准备好替换用的图片了。系统对这个图片有比较特殊的要求,图片尺寸应为640×480像素,使用16色,文件名为Boot.bmp。
@@ -64,6 +72,10 @@
+
diff --git a/src/page/main/wel/news.vue b/src/page/main/wel/news.vue
new file mode 100644
index 0000000000000000000000000000000000000000..6618c94ef2637e98e8d3535e4207b09fe19fbcba
--- /dev/null
+++ b/src/page/main/wel/news.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
diff --git a/src/page/main/wel/taskForm.vue b/src/page/main/wel/taskForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..fdfa385bb1551844cc013a387a2a118c8dbff384
--- /dev/null
+++ b/src/page/main/wel/taskForm.vue
@@ -0,0 +1,320 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/page/main/wel/todo.vue b/src/page/main/wel/todo.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3060b228c30245a8e9c59571e1ce1c3f49e688e8
--- /dev/null
+++ b/src/page/main/wel/todo.vue
@@ -0,0 +1,163 @@
+
+
+
+
{{item.displayTitle ? item.title : ''}}
+
查看全部
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/plugin/assembly/assembly.js b/src/plugin/assembly/assembly.js
new file mode 100644
index 0000000000000000000000000000000000000000..d5ede48ddab0edf2d438e020b12962df4c57d208
--- /dev/null
+++ b/src/plugin/assembly/assembly.js
@@ -0,0 +1,12 @@
+export default class assembly {
+ constructor (type,label,span){
+ this.prop = type + new Date().getTime()
+ this.type = type
+ this.label = label
+ this.span = span
+ this.tips = {
+ text: "",
+ position: "right"
+ }
+ }
+ }
\ No newline at end of file
diff --git a/src/plugin/assembly/box.js b/src/plugin/assembly/box.js
new file mode 100644
index 0000000000000000000000000000000000000000..87e967091fba7483e3b663bff742d48ef5f4973b
--- /dev/null
+++ b/src/plugin/assembly/box.js
@@ -0,0 +1,25 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MBox extends assembly{
+ constructor (
+ type='box',
+ label='',
+ span=24,
+ prop='box'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','label','jurisdiction','span','text','contentposition','fontsize','textcolor','fontweight','sqlType'
+ ]
+ this.label = '描述框'
+ this.text = '这是一段描述'
+ this.contentposition = 'center'
+ this.fontsize = 18
+ this.textcolor = '#333'
+ this.fontweight = 'normal'
+ this.rules = []
+ this.fontweightOption = ['100','200','300','400','500','600','700','800','900','bold','bolder','lighter','normal','unset']
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/button.js b/src/plugin/assembly/button.js
new file mode 100644
index 0000000000000000000000000000000000000000..36f2abe81b4b7052078ce1f29a025270c0dad914
--- /dev/null
+++ b/src/plugin/assembly/button.js
@@ -0,0 +1,19 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MButton extends assembly{
+ constructor (
+ type='button',
+ label='按钮',
+ span=24,
+ prop='button'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','label','span','jurisdiction', 'text', 'disabled', 'style']
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ this.text = '按钮'
+ // 校验
+ this.rules = []
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/cascader.js b/src/plugin/assembly/cascader.js
new file mode 100644
index 0000000000000000000000000000000000000000..0184a0a819ffef1fc9e216958bd691f0fb19f3b3
--- /dev/null
+++ b/src/plugin/assembly/cascader.js
@@ -0,0 +1,21 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MCascader extends assembly{
+ constructor (
+ type='cascader',
+ label='级联选择',
+ span=24,
+ prop='cascader'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.multiple = false
+ this.showalllevels = true
+ this.collapsetags = false
+ this.emitPath = true
+ this.emitKey = 'uniqueName'
+ this.dictName = '' // 选择树形结构数据,分类字典名称
+ this.showFrom = ['label','span','multiple','prop','sqlType', 'showalllevels', 'collapsetags', 'emitPath', 'cascaderOption']
+ this.sqlType = 'array'
+ this.rules = []
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/checkbox.js b/src/plugin/assembly/checkbox.js
new file mode 100644
index 0000000000000000000000000000000000000000..45c00ebc68d07b9b4486183c284c2342e646fa7b
--- /dev/null
+++ b/src/plugin/assembly/checkbox.js
@@ -0,0 +1,55 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MCheckbox extends assembly{
+ constructor (
+ type='checkbox',
+ label='多选',
+ span=24,
+ prop='checkbox'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','sqlType',
+ 'disabled','checkboxtype','datatype','option','url','min','max','defaultValue','defaultUrl'
+ ]
+ this.linkbind = ''
+ // button
+ this.checkboxtype = 'fang'
+ this.disabled = false
+ this.min = 0
+ this.max = 2
+
+ // 数据类型 option 和 url
+ this.datatype = 'option'
+ // 请求接口
+ this.url = ''
+ // 下拉框的选项
+ this.dicData = [{
+ value: 'Beijing',
+ label: '北京'
+ }, {
+ value: 'Shanghai',
+ label: '上海'
+ }, {
+ value: 'Tianjin',
+ label: '天津'
+ }, {
+ value: 'ChongQing',
+ label: '重庆'
+ }]
+ this.defaultValue = ''
+ this.defaultUrl = ''
+ this.sqlType = 'array'
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+ }
+
+ deleteOption (index) {
+ this.dicData.splice(index, 1)
+ }
+ addoption () {
+ this.dicData.push({label: '新的选择', value: ('newValue' + this.option.length)})
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/chinaArea.js b/src/plugin/assembly/chinaArea.js
new file mode 100644
index 0000000000000000000000000000000000000000..61cc3a4266734bd441064d16522d3aeb8fb4ebf4
--- /dev/null
+++ b/src/plugin/assembly/chinaArea.js
@@ -0,0 +1,19 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MChinaArea extends assembly{
+ constructor (
+ type='chinaArea',
+ label='地区选择',
+ span=24,
+ prop='chinaArea'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.multiple = false
+ this.showalllevels = true
+ this.collapsetags = false
+ this.emitPath = true
+ this.showFrom = ['label','span','multiple','prop','sqlType', 'showalllevels', 'collapsetags', 'emitPath', 'emitKey']
+ this.sqlType = 'array'
+ this.rules = []
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/colorSelect.js b/src/plugin/assembly/colorSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..8cc7a668a66486d249ddf781305b96aad8dfd71d
--- /dev/null
+++ b/src/plugin/assembly/colorSelect.js
@@ -0,0 +1,19 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MColorSelect extends assembly{
+ constructor (
+ type='colorSelect',
+ label='颜色选择',
+ span=24,
+ prop='colorSelect'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','label','jurisdiction','span','fontweight','sqlType', // 'fontsize' // 'text','contentposition', ,'textcolor'
+ ]
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ // 校验
+ this.rules = []
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/datasource.js b/src/plugin/assembly/datasource.js
new file mode 100644
index 0000000000000000000000000000000000000000..2281e6690dbf437c3b352a0c7d5da29bef3dbeab
--- /dev/null
+++ b/src/plugin/assembly/datasource.js
@@ -0,0 +1,75 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MDatasource extends assembly{
+ constructor (
+ type='datasource',
+ label='自定义选择',
+ span=24,
+ prop='datasource'+ formatKey.numberToString(new Date().getTime()),
+ text='',
+ currVal=''
+ ) {
+ super(type,label,span,prop,text,currVal);
+ this.showFrom = ['label', 'span', 'prop','collapsetags','placeholder',
+ 'disabled','sqlType', 'sourceTable', 'multiple'
+ ]
+ this.hasChildren = false
+ this.multiple = false
+ this.collapsetags = false
+ this.disabled = false
+ this.filterable = true
+ this.allowcreate = false
+ this.placeholder = '请输入' + this.label
+ this.clearable = true
+ this.defaultValue = ''
+ this.defaultUrl = ''
+ this.sqlType = 'array'
+ this.parentKey = ''
+ // 数据类型 option 和 url
+ this.datatype = 'option'
+ // 请求接口
+ this.url = ''
+ // 下拉框的选项
+ this.dicData = [{
+ value: 'Beijing',
+ label: '北京'
+ }, {
+ value: 'Shanghai',
+ label: '上海'
+ }, {
+ value: 'Tianjin',
+ label: '天津'
+ }, {
+ value: 'ChongQing',
+ label: '重庆'
+ }]
+ this.text = text
+ this.currVal = currVal
+ this.linkbind = ''
+
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+
+ // 字典的label value配置
+ this.props = {
+ label: '',
+ value: ''
+ }
+
+ this.changeHandle = (val) => {
+ this.currVal = val
+ // this.$emit('changeValHandle', val)
+ // console.log(val,'change...')
+ }
+ }
+
+ deleteOption (index) {
+ this.dicData.splice(index, 1)
+ }
+ addoption () {
+ this.dicData.push({label: '新的选择', value: ('newValue' + this.dicData.length)})
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/datePicker.js b/src/plugin/assembly/datePicker.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f9fe862ef8c59098fc8ba7aeb7a648abd904523
--- /dev/null
+++ b/src/plugin/assembly/datePicker.js
@@ -0,0 +1,35 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MDatePicker extends assembly{
+ constructor (
+ type='datePicker',
+ label='日期',
+ span=24,
+ prop='datePicker'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','disabled','placeholder','clearable','startLimit',
+ 'prefixicon','datetype','startplaceholder','endplaceholder','rangeseparator','endLimit','sqlType'
+ ]
+ this.placeholder = '请输入' + this.label
+ this.clearable = false
+ this.disabled = false
+ this.prefixicon = 'el-icon-time'
+ this.datetype = 'date'
+ this.startplaceholder = '开始时间'
+ this.endplaceholder = '结束时间'
+ this.rangeseparator = '至'
+ this.startLimit = ''
+ this.endLimit = ''
+ this.defaultValue = '' //new Date()
+ this.sqlType = 'date'
+ this.linkbind = ''
+
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' }
+ ]
+ }
+
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/department.js b/src/plugin/assembly/department.js
new file mode 100644
index 0000000000000000000000000000000000000000..e315c1332d497d8caed86d0138d1d4a7bc60099c
--- /dev/null
+++ b/src/plugin/assembly/department.js
@@ -0,0 +1,19 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MDepartment extends assembly{
+ constructor (
+ type='department',
+ label='部门选择',
+ span=24,
+ prop='department'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.multiple = false
+ this.showalllevels = true
+ this.collapsetags = false
+ this.emitPath = true
+ this.showFrom = ['label','span','multiple','prop','sqlType', 'showalllevels', 'collapsetags', 'emitPath']
+ this.sqlType = 'array'
+ this.rules = []
+ }
+}
diff --git a/src/plugin/assembly/divider.js b/src/plugin/assembly/divider.js
new file mode 100644
index 0000000000000000000000000000000000000000..631b1d83deaa8e45052d23597ed1f879a12ded6b
--- /dev/null
+++ b/src/plugin/assembly/divider.js
@@ -0,0 +1,21 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MDivider extends assembly{
+ constructor (
+ type='divider',
+ label='',
+ span=24,
+ prop='divider'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['span','text','contentposition','sqlType'
+ ]
+ this.text = ''
+ this.contentposition = 'center'
+ this.sqlType = 'varchar'
+ this.rules = [
+ ]
+ this.linkbind = ''
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/file.js b/src/plugin/assembly/file.js
new file mode 100644
index 0000000000000000000000000000000000000000..e28b23114230c96222731ae9dbd7ee643a70221a
--- /dev/null
+++ b/src/plugin/assembly/file.js
@@ -0,0 +1,20 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MFile extends assembly{
+ constructor (
+ type='file',
+ label='文件',
+ span=24,
+ prop='file'+ formatKey.numberToString(new Date().getTime()),
+ fileList = [{name: '', url: ''}]
+ ) {
+ super(type,label,span,prop,fileList);
+ this.showFrom = ['label', 'span', 'prop','jurisdiction','sqlType']
+ this.fileList = fileList
+ this.rules = []
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'array'
+ this.linkbind = ''
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/fileUpload.js b/src/plugin/assembly/fileUpload.js
new file mode 100644
index 0000000000000000000000000000000000000000..67ece95fd8545044a68e582a816e4987595d636e
--- /dev/null
+++ b/src/plugin/assembly/fileUpload.js
@@ -0,0 +1,68 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MFileUpload extends assembly{
+ constructor (
+ type='fileUpload',
+ label='上传文件',
+ span=24,
+ prop='fileUpload'+ formatKey.numberToString(new Date().getTime()),
+ action='',
+ multipleUpload = false,
+ limit= 1,
+ fileList=[],
+ headers={},
+ headersStr=''
+ ) {
+ super(type,label,span,prop,action,multipleUpload,fileList,limit,headers);
+ this.showFrom = ['label', 'span', 'prop', 'multipleUpload','action','limit','headers','headersStr','sqlType']
+ // 校验
+ this.rules = []
+ this.action = action
+ this.multipleUpload = multipleUpload
+ this.fileList = fileList
+ this.limit = limit
+ this.headersStr = headersStr
+ this.headers = headersStr && JSON.parse(headersStr) || {}
+ this.sqlType = 'array'
+ this.linkbind = ''
+
+ this.handleSuccess = (response, file, fileList) => {
+ if(response.code === 0){
+ let obj = {
+ name: file.name,
+ url: response.data.previewUrl
+ }
+ // this.fileList.push(obj)
+ let temp = {
+ key: this.key,
+ fileList: this.fileList
+ }
+ // this.$emit('file', temp)
+ }
+ // console.log(response)
+ // this.fileList = fileList
+ }
+ this.handleError = (err, file, fileList) => {
+ console.log(err)
+ }
+
+ this.handleRemove = (file, fileList) => {
+ console.log(file, fileList);
+ this.fileList = fileList
+ let temp = {
+ key: this.key,
+ fileList: this.fileList
+ }
+ // this.$emit('file', temp)
+ }
+ // this.setRequestHeaderHandle = () => {
+ // if(this.headersStr) {
+ // let obj = JSON.parse(this.headersStr)
+ // if(obj.constructor === Object){
+ // this.headers = obj
+ // }
+ // }
+ // }
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/format.js b/src/plugin/assembly/format.js
new file mode 100644
index 0000000000000000000000000000000000000000..9592e0545dcf5033f935577493a1ea03fe57ce26
--- /dev/null
+++ b/src/plugin/assembly/format.js
@@ -0,0 +1,25 @@
+
+export default class fromat{
+ static numberToString(str) {
+ const converToArray = number => [...`${number}`].map(el => parseInt(el))
+ let temp = []
+ temp = converToArray(str)
+ for(let i in temp) {
+ switch(temp[i]) {
+ case 0: temp[i] = 'a';break;
+ case 1: temp[i] = 'b';break;
+ case 2: temp[i] = 'c';break;
+ case 3: temp[i] = 'd';break;
+ case 4: temp[i] = 'e';break;
+ case 5: temp[i] = 'f';break;
+ case 6: temp[i] = 'g';break;
+ case 7: temp[i] = 'h';break;
+ case 8: temp[i] = 'i';break;
+ case 9: temp[i] = 'j';break;
+ default : temp[i] = 'k';break;
+ }
+ }
+ temp[0] = temp[0].toUpperCase()
+ return temp.join('')
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/htmlEditor.js b/src/plugin/assembly/htmlEditor.js
new file mode 100644
index 0000000000000000000000000000000000000000..4b0e062b78a4da4770de73049561698fed7fa820
--- /dev/null
+++ b/src/plugin/assembly/htmlEditor.js
@@ -0,0 +1,18 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MHtmlEditor extends assembly{
+ constructor (
+ type='htmlEditor',
+ label='富文本',
+ span=24,
+ prop='htmlEditor'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','label','jurisdiction']
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ // 校验
+ this.rules = []
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/iconSelect.js b/src/plugin/assembly/iconSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..5815b2d63153a9ca6e9da3a6c82a2cca7fc5bfc3
--- /dev/null
+++ b/src/plugin/assembly/iconSelect.js
@@ -0,0 +1,19 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MIconSelect extends assembly{
+ constructor (
+ type='iconSelect',
+ label='图标选择',
+ span=24,
+ prop='iconSelect'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','label','jurisdiction', 'span','fontsize','fontweight','sqlType', // , 'text' ,'textcolor' ,'contentposition'
+ ]
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ // 校验
+ this.rules = []
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/iframe.js b/src/plugin/assembly/iframe.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b96176daf4becc78023b61e2b9c47a0b1c4397c
--- /dev/null
+++ b/src/plugin/assembly/iframe.js
@@ -0,0 +1,19 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MIframe extends assembly{
+ constructor (
+ type='iframe',
+ label='',
+ span=24,
+ prop='iframe'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['jurisdiction','span','iframeheight','iframeurl','sqlType']
+ this.iframeheight = ''
+ this.iframeurl = ''
+ this.showJurisdiction = ['所有用户']
+ this.rules = []
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/image.js b/src/plugin/assembly/image.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f63ed2382a59259cf6074f7e973d96d00377654
--- /dev/null
+++ b/src/plugin/assembly/image.js
@@ -0,0 +1,31 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MImage extends assembly{
+ constructor (
+ type='image',
+ label='图片',
+ span=24,
+ prop='image'+ formatKey.numberToString(new Date().getTime()),
+ fileList = [],
+ dialogVisible = false,
+ dialogImageUrl = '',
+ ) {
+ super(type,label,span,prop,fileList,dialogImageUrl,dialogVisible,fileList);
+ this.showFrom = ['label', 'span', 'prop','url','fit','jurisdiction','sqlType']
+ this.url = ''
+ this.fit = ''
+ this.fileList = fileList
+ this.rules = []
+ this.dialogImageUrl = dialogImageUrl
+ this.dialogVisible = dialogVisible
+ this.sqlType = 'array'
+ this.linkbind = ''
+
+ this.handlePictureCardPreview = (url) => {
+ this.dialogImageUrl = url;
+ this.dialogVisible = true;
+ }
+ this.showJurisdiction = ['所有用户']
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/imageUpload.js b/src/plugin/assembly/imageUpload.js
new file mode 100644
index 0000000000000000000000000000000000000000..54a5f63daeded9d5c016841b0816dc17a9a0f265
--- /dev/null
+++ b/src/plugin/assembly/imageUpload.js
@@ -0,0 +1,76 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MImageUpload extends assembly{
+ constructor (
+ type='imageUpload',
+ label='上传图片',
+ span=24,
+ prop='imageUpload'+ formatKey.numberToString(new Date().getTime()),
+ action='',
+ dialogVisible = false,
+ dialogImageUrl = '',
+ multipleUpload = false,
+ limit= 1,
+ fileList=[],
+ headers={},
+ headersStr=''
+ ) {
+ super(type,label,span,prop,action,dialogVisible,dialogImageUrl,multipleUpload,fileList,limit,headers);
+ this.showFrom = ['label', 'span', 'prop', 'multipleUpload','action','limit','headers','headersStr','sqlType']
+ this.linkbind = ''
+ // 校验
+ this.rules = []
+ this.action = action
+ this.multipleUpload = multipleUpload
+ this.fileList = fileList
+ this.limit = limit
+ this.dialogImageUrl = dialogImageUrl
+ this.dialogVisible = dialogVisible
+ this.headersStr = headersStr
+ this.headers = headersStr && JSON.parse(headersStr) || {}
+ this.sqlType = 'array'
+
+ this.handleSuccess = (response, file, fileList) => {
+ if(response.code === 0){
+ console.log(response)
+ let obj = {
+ name: file.name,
+ url: response.data.previewUrl
+ }
+ this.fileList.push(obj)
+ let temp = {
+ key: this.key,
+ fileList: this.fileList
+ }
+ this.$emit('file', temp)
+ }
+ // console.log(response)
+ // this.fileList = fileList
+ }
+ this.handleError = (err, file, fileList) => {
+ console.log(err)
+ }
+ this.handlePictureCardPreview = (file) => {
+ this.dialogImageUrl = file.url;
+ this.dialogVisible = true;
+ }
+ this.handleRemove = (file, fileList) => {
+ console.log(file, fileList);
+ this.fileList = fileList
+ let temp = {
+ key: this.key,
+ fileList: this.fileList
+ }
+ this.$emit('file', temp)
+ }
+ // this.setRequestHeaderHandle = () => {
+ // if(this.headersStr) {
+ // let obj = JSON.parse(this.headersStr)
+ // if(obj.constructor === Object){
+ // this.headers = obj
+ // }
+ // }
+ // }
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/input.js b/src/plugin/assembly/input.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b543d83a1ae37b0e765c6945203c0da8b861c23
--- /dev/null
+++ b/src/plugin/assembly/input.js
@@ -0,0 +1,37 @@
+import assembly from './assembly'
+import formatKey from './format'
+
+export default class MInput extends assembly{
+ constructor (
+ type='input',
+ label='文本框',
+ span=24,
+ prop='input'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','minlength','maxlength','showwordlimit','placeholder','sqlType',
+ 'clearable','showpassword','disabled','prefixicon','suffixicon','prepend','append','defaultValue','regular','defaultUrl'
+ ]
+ this.linkbind = ''
+ this.minlength = 0
+ this.maxlength = 100
+ this.showwordlimit = true
+ this.placeholder = '请输入' + this.label
+ this.clearable = true
+ this.showpassword = false
+ this.disabled = false
+ this.prefixicon = 'el-icon-edit'
+ this.suffixicon = ''
+ this.prepend = ''
+ this.append = ''
+ this.defaultValue = ''
+ this.regularExpression = ''
+ this.regularMessage = ''
+ this.defaultUrl = ''
+ this.sqlType = 'varchar'
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' }
+ ]
+ }
+ }
\ No newline at end of file
diff --git a/src/plugin/assembly/inputNumber.js b/src/plugin/assembly/inputNumber.js
new file mode 100644
index 0000000000000000000000000000000000000000..8dc1b0f753a177171340785248411cfe35204f67
--- /dev/null
+++ b/src/plugin/assembly/inputNumber.js
@@ -0,0 +1,32 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MInputNumber extends assembly{
+ constructor (
+ type='inputNumber',
+ label='计数器',
+ span=24,
+ prop='inputNumber'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','min','max','sqlType',
+ 'step','stepstrictly','precision','disabled','controlsposition','placeholder','defaultValue','defaultUrl'
+ ]
+ this.linkbind = ''
+ this.min = 0
+ this.max = 10000
+ this.step = 1
+ this.stepstrictly = false
+ this.precision = 1
+ this.disabled = false
+ this.controlsposition = 'right'
+ this.placeholder = '请输入' + this.label
+ this.defaultValue = null
+ this.defaultUrl = ''
+ this.sqlType = 'double'
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/inputreadonly.js b/src/plugin/assembly/inputreadonly.js
new file mode 100644
index 0000000000000000000000000000000000000000..2beff1c78b6cf78bc8a9f6c79efe0b20a3c13d1a
--- /dev/null
+++ b/src/plugin/assembly/inputreadonly.js
@@ -0,0 +1,21 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MInputReadOnly extends assembly{
+ constructor (
+ type='inputReadOnly',
+ label='文本框',
+ span=24,
+ prop='inputReadOnly'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','jurisdiction','sqlType']
+ this.placeholder = '.........'
+ this.disabled = true
+ // 校验
+ this.rules = []
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/link.js b/src/plugin/assembly/link.js
new file mode 100644
index 0000000000000000000000000000000000000000..745cca9878f05f3b2eabc7a9a2f2e2c0d2fb3da3
--- /dev/null
+++ b/src/plugin/assembly/link.js
@@ -0,0 +1,28 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MLink extends assembly{
+ constructor (
+ type='link',
+ label='',
+ span=24,
+ prop='link'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','label','jurisdiction','span','text','contentposition','fontsize','textcolor','fontweight','textdecoration','openType','sqlType'
+ ]
+ this.label = '链接'
+ this.text = '显示文字'
+ this.contentposition = 'center'
+ this.fontsize = 16
+ this.textcolor = '#409EFF'
+ this.fontweight = 'normal'
+ this.textdecoration = 'none'
+ this.openType = '_blank'
+ this.rules = []
+ this.fontweightOption = ['100','200','300','400','500','600','700','800','900','bold','bolder','lighter','normal','unset']
+ this.textdecorationOption = ['blink','dashed','dotted','double','inherit','initial','line-through','none','overline','solid','underline','unset','wavy']
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/p.js b/src/plugin/assembly/p.js
new file mode 100644
index 0000000000000000000000000000000000000000..3b6c3c5a59a4b5d3ffcf219be0e032d108489f0f
--- /dev/null
+++ b/src/plugin/assembly/p.js
@@ -0,0 +1,23 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MP extends assembly{
+ constructor (
+ type='p',
+ label='',
+ span=24,
+ prop='p'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','span','text','contentposition','fontsize','textcolor','sqlType'
+ ]
+ this.linkbind = ''
+ this.text = '某某表单'
+ this.contentposition = 'center'
+ this.fontsize = 18
+ this.textcolor = '#333'
+ this.sqlType = 'varchar'
+ this.rules = [
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/post.js b/src/plugin/assembly/post.js
new file mode 100644
index 0000000000000000000000000000000000000000..62de650492c63c96bc07c61ad5c876ccff9ff9f3
--- /dev/null
+++ b/src/plugin/assembly/post.js
@@ -0,0 +1,16 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MRole extends assembly{
+ constructor (
+ type='post',
+ label='岗位选择',
+ span=24,
+ prop='post'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.multiple = true
+ this.showFrom = ['label','span','multiple','prop','sqlType']
+ this.rules = []
+ this.sqlType = 'array'
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/radio.js b/src/plugin/assembly/radio.js
new file mode 100644
index 0000000000000000000000000000000000000000..12023c471f0047cf4702dbed03b8a091b17c2d5b
--- /dev/null
+++ b/src/plugin/assembly/radio.js
@@ -0,0 +1,66 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MRadio extends assembly{
+ constructor (
+ type='radio',
+ label='单选',
+ span=24,
+ prop='radio'+ formatKey.numberToString(new Date().getTime()),
+ children=[],
+ text='',
+ currVal=''
+ ) {
+ super(type,label,span,prop,children,text,currVal);
+ this.showFrom = ['label', 'span', 'prop', 'sqlType',
+ 'disabled','radiotype','datatype','option','url','defaultValue','defaultUrl','hasChildren'
+ ]
+ // button
+ this.hasChildren = false
+ this.linkbind = ''
+ this.radiotype = 'yuan'
+ this.disabled = false
+ this.children = children
+ this.text = text
+ this.currVal = currVal
+ this.defaultValue = ''
+ this.defaultUrl = ''
+ this.sqlType = 'varchar'
+ this.parentKey = ''
+
+ // 数据类型 option 和 url
+ this.datatype = 'option'
+ // 请求接口
+ this.url = ''
+ // 下拉框的选项
+ this.dicData = [{
+ value: 'Beijing',
+ label: '北京'
+ }, {
+ value: 'Shanghai',
+ label: '上海'
+ }, {
+ value: 'Tianjin',
+ label: '天津'
+ }, {
+ value: 'ChongQing',
+ label: '重庆'
+ }]
+ // 校验
+ this.rules = [
+ { required: false, message: '请选择' + this.label , trigger: 'change' },
+ ]
+ this.changeHandle = (val) => {
+ this.currVal = val
+ // this.$emit('changeValHandle', val)
+ // console.log(val,'change...')
+ }
+ }
+
+ deleteOption (index) {
+ this.dicData.splice(index, 1)
+ }
+ addoption () {
+ this.dicData.push({label: '新的选择', value: ('newValue' + this.dicData.length)})
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/role.js b/src/plugin/assembly/role.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f2c014b08d75ab569dabd8ad47269136967901f
--- /dev/null
+++ b/src/plugin/assembly/role.js
@@ -0,0 +1,16 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MRole extends assembly{
+ constructor (
+ type='role',
+ label='角色选择',
+ span=24,
+ prop='role'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.multiple = true
+ this.showFrom = ['label','span','multiple','prop','sqlType']
+ this.rules = []
+ this.sqlType = 'array'
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/select.js b/src/plugin/assembly/select.js
new file mode 100644
index 0000000000000000000000000000000000000000..fbee3b029bee86edeeb1ae6b6b4882c0f5f41c11
--- /dev/null
+++ b/src/plugin/assembly/select.js
@@ -0,0 +1,77 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MSelect extends assembly{
+ constructor (
+ type='select',
+ label='下拉框',
+ span=24,
+ prop='select'+ formatKey.numberToString(new Date().getTime()),
+ text='',
+ currVal='',
+ children=[]
+ ) {
+ super(type,label,span,prop,children,text,currVal);
+ this.showFrom = ['label', 'span', 'prop','multiple','collapsetags','placeholder','defaultUrl',
+ 'clearable','disabled','filterable','allowcreate','datatype','option','url','defaultValue','sqlType','hasChildren'
+ ]
+ this.hasChildren = false
+ this.children = children
+ this.multiple = true
+ this.collapsetags = false
+ this.disabled = false
+ this.filterable = true
+ this.allowcreate = false
+ this.placeholder = '请输入' + this.label
+ this.clearable = true
+ this.defaultValue = ''
+ this.defaultUrl = ''
+ this.sqlType = 'array'
+ this.parentKey = ''
+ // 数据类型 option 和 url
+ this.datatype = 'option'
+ // 请求接口
+ this.url = ''
+ // 下拉框的选项
+ this.dicData = [{
+ value: 'Beijing',
+ label: '北京'
+ }, {
+ value: 'Shanghai',
+ label: '上海'
+ }, {
+ value: 'Tianjin',
+ label: '天津'
+ }, {
+ value: 'ChongQing',
+ label: '重庆'
+ }]
+ this.text = text
+ this.currVal = currVal
+ this.linkbind = ''
+
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+
+ // 字典的label value配置
+ this.props = {
+ label: '',
+ value: ''
+ }
+
+ this.changeHandle = (val) => {
+ this.currVal = val
+ // this.$emit('changeValHandle', val)
+ // console.log(val,'change...')
+ }
+ }
+
+ deleteOption (index) {
+ this.dicData.splice(index, 1)
+ }
+ addoption () {
+ this.dicData.push({label: '新的选择', value: ('newValue' + this.dicData.length)})
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/slider.js b/src/plugin/assembly/slider.js
new file mode 100644
index 0000000000000000000000000000000000000000..d4bd0bdd51a61e71857e7e108e991c05ade7808f
--- /dev/null
+++ b/src/plugin/assembly/slider.js
@@ -0,0 +1,34 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MSlider extends assembly{
+ constructor (
+ type='slider',
+ label='滑块',
+ span=24,
+ prop='slider'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','min','max','defaultUrl',
+ 'disabled','step','showstops','showinput','range','defaultValue','sqlType'
+ ]
+ this.linkbind = ''
+ this.min = 0
+ this.max = 100
+ this.disabled = false
+ this.step = 1
+ this.showstops = false
+ this.showinput = false
+ // 多选
+ this.range = false
+ this.defaultValue = null
+ this.defaultUrl = ''
+ this.sqlType = 'double'
+
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+ }
+
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/switch.js b/src/plugin/assembly/switch.js
new file mode 100644
index 0000000000000000000000000000000000000000..083af600b52009766129b5274400cc0617bc31cd
--- /dev/null
+++ b/src/plugin/assembly/switch.js
@@ -0,0 +1,33 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MSwitch extends assembly{
+ constructor (
+ type='switch',
+ label='开关',
+ span=24,
+ prop='switch'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','disabled','activetext','inactivetext',
+ 'activecolor','inactivecolor','defaultValue','defaultUrl','sqlType','hasChildren'
+ ]
+ this.linkbind = ''
+ this.hasChildren = false
+ this.children = []
+ this.disabled = false
+ this.activetext = '开'
+ this.inactivetext = '关'
+ this.activecolor = '#409EFF'
+ this.inactivecolor = '#C0CCDA'
+ this.defaultValue = false
+ this.defaultUrl = ''
+ this.sqlType = 'bit'
+
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+ }
+
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/tab.js b/src/plugin/assembly/tab.js
new file mode 100644
index 0000000000000000000000000000000000000000..3d5bea300ed26064338bd75d73f91c6b1e6f0f5f
--- /dev/null
+++ b/src/plugin/assembly/tab.js
@@ -0,0 +1,85 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MTab extends assembly{
+ constructor (
+ type='tab',
+ label='选项卡',
+ span=24,
+ prop='tab'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','url','datatype','dicData','jurisdiction','sqlType', 'option']
+ // 数据类型 option 和 url
+ this.datatype = 'option'
+ // 请求接口
+ this.url = ''
+ // 下拉框的选项
+ this.dicData = [{
+ label: '选项一',
+ name: 'first'
+ }, {
+ label: '选项二',
+ name: 'second'
+ }, {
+ label: '选项三',
+ name: 'third'
+ }]
+
+ this.activeName = this.dicData[0].name
+ this.column = {} // 选项对应的表单项
+ // 校验
+ this.rules = []
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'object'
+ this.linkbind = ''
+ }
+ addcolumn (key,data) {
+ if(!this.column[key]) {
+ this.column[key] = []
+ }
+ this.column[key].push(data)
+ // let index = 0
+ // for(let i in this.dicData){
+ // if(this.dicData[i].value === key){
+ // index = i
+ // }
+ // }
+ // if(!this.column[index]){
+ // let obj = {}
+ // obj[this.dicData[index].value] = []
+ // this.column[index] = obj
+ // }
+ // if(!this.column[index][this.dicData[index].value]) {
+ // this.column[index][this.dicData[index].value] = []
+ // }
+ // console.log(this.column[index][this.dicData[index].value])
+ // this.column[index][this.dicData[index].value].push(data)
+ }
+ deletecolumn (key,prop) {
+ this.column[key] = this.column[key].filter(item => item.prop != prop)
+ // let index = 0
+ // for(let i in this.dicData){
+ // if(this.dicData[i].value === key){
+ // index = i
+ // }
+ // }
+ // this.column[index][this.dicData[index].value] = this.column[index][this.dicData[index].value].filter(item => item.prop != prop)
+ console.log(this.column)
+ }
+ deletedicData (index) {
+ this.dicData.splice(index, 1)
+ }
+ adddicData () {
+ let obj = {}
+ let key = 'newValue' + this.dicData.length
+ obj[key] = []
+ this.column[key] = obj
+ this.dicData.push({label: '新的选择', value: ('newValue' + this.dicData.length)})
+ }
+ handleClick(activeName) {
+ // console.log(activeName)
+ if(activeName || activeName === 0 || activeName === false) {
+ this.activeName = activeName
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/tableform.js b/src/plugin/assembly/tableform.js
new file mode 100644
index 0000000000000000000000000000000000000000..62c418c429b6d19bc3b8b9f5f5478145b1eb23d4
--- /dev/null
+++ b/src/plugin/assembly/tableform.js
@@ -0,0 +1,32 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+import Minput from './input'
+export default class MTableForm extends assembly{
+ constructor (
+ type='tableForm',
+ label='表格',
+ col=24,
+ prop='tableForm'+ formatKey.numberToString(new Date().getTime()),
+ tableColumn=[]
+ ) {
+ super(type,label,col,prop,tableColumn);
+ this.showFrom = ['label', 'col', 'prop','border','stripe','sqlType']
+
+ this.border = true
+ this.stripe = false
+ this.sqlType = 'array'
+ // 表格的校验在内部的组件中
+ this.rules = []
+ // 表单表头
+ this.tableColumn = [new Minput()]
+ // { key: 'name', type: 'input',label: '名称', rules:[{ required: true, message: '名称不能为空', trigger: 'change'}] },
+ // { key: 'name2', type: 'input',label: '名称2', rules:[{ required: true, message: '名称不能为空', trigger: 'change'}] },
+ }
+ addcolumn (data) {
+ this.tableColumn.push(data)
+ }
+ deletecolumn (id) {
+ this.tableColumn = this.tableColumn.filter(item => item.id != id)
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/textarea.js b/src/plugin/assembly/textarea.js
new file mode 100644
index 0000000000000000000000000000000000000000..3940111245b073bdadd0af98a2aa2744d5e41a7d
--- /dev/null
+++ b/src/plugin/assembly/textarea.js
@@ -0,0 +1,31 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MTextarea extends assembly{
+ constructor (
+ type='textarea',
+ label='文本域',
+ span=24,
+ prop='textarea'+ formatKey.numberToString(new Date().getTime()),
+ rows=1
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','rows','minlength','maxlength','showwordlimit','placeholder',
+ 'clearable','disabled','defaultValue','sqlType'
+ ]
+ this.linkbind = ''
+ this.rows = rows
+ this.minlength = 0
+ this.maxlength = 100
+ this.showwordlimit = true
+ this.placeholder = '请输入' + this.label
+ this.clearable = true
+ this.disabled = false
+ this.defaultValue = ''
+ this.sqlType = 'varchar'
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/textareareadonly.js b/src/plugin/assembly/textareareadonly.js
new file mode 100644
index 0000000000000000000000000000000000000000..66568c5765334be63ded505f9fb9dbe0717ade84
--- /dev/null
+++ b/src/plugin/assembly/textareareadonly.js
@@ -0,0 +1,22 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MTextareaReadOnly extends assembly{
+ constructor (
+ type='textareaReadOnly',
+ label='文本域',
+ span=24,
+ prop='textareaReadOnly'+ formatKey.numberToString(new Date().getTime()),
+ rows=1
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','jurisdiction', 'sqlType']
+ this.disabled = true
+ this.placeholder = '.........'
+ // 校验
+ this.rules = []
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/timepicker.js b/src/plugin/assembly/timepicker.js
new file mode 100644
index 0000000000000000000000000000000000000000..ff377197a5202cd947b0cf618233a54a730cb6dc
--- /dev/null
+++ b/src/plugin/assembly/timepicker.js
@@ -0,0 +1,39 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MTimepicker extends assembly{
+ constructor (
+ type='timePicker',
+ label='任意时间',
+ span=24,
+ prop='timepicker'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','disabled','placeholder','clearable','pickeroptions',
+ 'prefixicon','isrange','startplaceholder','endplaceholder','rangeseparator','sqlType'
+ ]
+ this.linkbind = ''
+ this.disabled = false
+ this.placeholder = '请输入' + this.label
+ this.clearable = false
+ this.prefixicon = 'el-icon-time'
+
+ this.isrange = false
+ this.startplaceholder = '开始时间'
+ this.endplaceholder = '结束时间'
+ this.rangeseparator = '至'
+ this.defaultValue = new Date()
+ this.sqlType = 'date'
+ this.pickeroptions = {
+ start: '09:00',
+ end: '18:00',
+ step: ''
+ }
+
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+ }
+
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/timeselect.js b/src/plugin/assembly/timeselect.js
new file mode 100644
index 0000000000000000000000000000000000000000..545eab05d35b37a518a18f491d7758ac2ea15f79
--- /dev/null
+++ b/src/plugin/assembly/timeselect.js
@@ -0,0 +1,35 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MTimepicker extends assembly{
+ constructor (
+ type='timeSelect',
+ label='固定时间',
+ span=24,
+ prop='timeselect'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','disabled','placeholder','pickeroptions','clearable','sqlType',
+ 'prefixicon'
+ ]
+ this.linkbind = ''
+ this.disabled = false
+ this.placeholder = '请输入' + this.label
+ this.clearable = false
+ this.prefixicon = 'el-icon-time'
+
+ this.pickeroptions = {
+ start: '09:00',
+ end: '18:00',
+ step: '00:15'
+ }
+ this.defaultValue = this.pickeroptions.start
+ this.sqlType = 'date'
+
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+ }
+
+}
\ No newline at end of file
diff --git a/src/plugin/assembly/user.js b/src/plugin/assembly/user.js
new file mode 100644
index 0000000000000000000000000000000000000000..2e4a6ae12400eea9732622aa0bd7c2e6ad881e5e
--- /dev/null
+++ b/src/plugin/assembly/user.js
@@ -0,0 +1,17 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MUser extends assembly{
+ constructor (
+ type='user',
+ label='用户选择',
+ span=24,
+ prop='user'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.multiple = false
+ this.allowinput = false
+ this.showFrom = ['label','span','multiple','prop','sqlType', 'allowinput']
+ this.rules = []
+ this.sqlType = 'array'
+ }
+}
\ No newline at end of file
diff --git a/src/plugin/components/dialogInfo.vue b/src/plugin/components/dialogInfo.vue
new file mode 100644
index 0000000000000000000000000000000000000000..85d7a546473afa788caec846eece2ec531c7308f
--- /dev/null
+++ b/src/plugin/components/dialogInfo.vue
@@ -0,0 +1,389 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/router/axios.js b/src/router/axios.js
index a4ac25e017a5d5c2ca81c51ec262c0012c7b2463..391f4011152f514d6357e315c7b43f765deaa75c 100644
--- a/src/router/axios.js
+++ b/src/router/axios.js
@@ -38,6 +38,8 @@ axios.interceptors.request.use(
// config.headers["tenantId"] = tenantId;
// }
}
+ // 添加请求头 固定参数
+ // config.headers["jvs-rule-ua"] = encodeURI('肖辉') // encodeURI('郭静')
// headers中配置serialize为true开启序列化
if (config.methods === "post" && config.headers.serialize) {
config.data = serialize(config.data);
diff --git a/src/router/children.js b/src/router/children.js
index a0d990dc6147fef414ab5b5b1c36f7873a8a4e48..c32f90c296b86cdd58bf4d53f6f521bff48b0b95 100644
--- a/src/router/children.js
+++ b/src/router/children.js
@@ -1,3 +1,10 @@
import upmsRouter from "@/views/upms/router";
+import pageRouter from "@/views/page/router"
+import chartRouter from "@/views/chart/router"
+import ruleRouter from "@/views/rule/router"
+import flowableRouter from "@/views/flowable/router"
+import docRouter from "@/views/document/router"
+import weixinMPRouter from "@/views/weixin-mp/router"
+import reportRouter from "@/views/report/router"
import iconRouter from '@/views/iconmanage/router'
-export default [...upmsRouter, ...iconRouter]
+export default [...upmsRouter, ...pageRouter, ...chartRouter, ...ruleRouter, ...flowableRouter, ...docRouter, ...weixinMPRouter, ...reportRouter, ...iconRouter]
diff --git a/src/router/page/index.js b/src/router/page/index.js
index 7e216ce0d3b4fa7f33ccf4f8e4d9f480f879bfae..03376778a83538b2d13c9042693b6fe1cd5c0c35 100644
--- a/src/router/page/index.js
+++ b/src/router/page/index.js
@@ -10,6 +10,18 @@ export default [{
isAuth: false
}
},
+ {
+ path: '/authorize',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ '@/page/main/authorize/index'),
+ name: '授权页',
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+
+ },
{
path: '/404',
component: () =>
diff --git a/src/store/index.js b/src/store/index.js
index c1cb6c5219e2981606050ec0c0b17af4d187e59e..0b359a59a64208bafd939f36c9e77cbeaa881e3b 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -4,6 +4,7 @@ import user from './modules/user'
import common from './modules/common'
import tags from './modules/tags'
import getters from './getters'
+import flow from './modules/flow'
import iconLib from './modules/icon'
import * as globalTypes from './types/global'
@@ -58,6 +59,7 @@ const store = new Vuex.Store({
user,
common,
tags,
+ flow,
iconLib
},
getters,
diff --git a/src/store/modules/flow.js b/src/store/modules/flow.js
new file mode 100644
index 0000000000000000000000000000000000000000..5690933ab24142b341c332a878fd01544413cddb
--- /dev/null
+++ b/src/store/modules/flow.js
@@ -0,0 +1,79 @@
+import {nodeType, getDefaultNodeProps} from '@/views/flowable/views/design/common/enumConst'
+const defaultProcess = {
+ type: nodeType.ROOT,
+ name: '发起人',
+ id: '10000',
+ props: getDefaultNodeProps()
+}
+const flow = {
+ state: {
+ parentMap: new Map(),
+ isEdit: null,
+ selectedNode: {},
+ template: {
+ baseSetup: {
+ icon: 'el-icon-s-custom',
+ background: '#718dff',
+ name: '新的审批',
+ group: null,
+ remark: '',
+ sign: false,
+ whoCommit: {
+ names: [],
+ values: []
+ },
+ whoEdit: {
+ names: [],
+ values: []
+ },
+ whoExport: [],
+ notify: {
+ types: [],
+ title: ''
+ }
+ },
+ // 条件
+ form: [],
+ process: defaultProcess
+ }
+ },
+ mutations: {
+ setwhoCommit(state, val) {
+ state.template.baseSetup.whoCommit = val
+ },
+ setwhoEdit(state, val) {
+ state.template.baseSetup.whoEdit = val
+ },
+ setwhoExport(state, val) {
+ state.template.baseSetup.whoExport = val
+ },
+ setTemplate(state, val) {
+ state.template = val
+ },
+ clearTemplate(state) {
+ state.template = {}
+ },
+ selectedNode(state, val) {
+ state.selectedNode = val
+ },
+ selectedApprover(state, val) {
+ state.selectedNode.props.targetObj.objs = val
+ },
+ selectedRole(state, val) {
+ state.selectedNode.props.targetObj.roles = val
+ },
+ setCondition(state, val) {
+ state.selectedNode.condition = val
+ },
+ setConditionRootUser(state, val) {
+ state.selectedNode.condition = val
+ },
+ setIsEdit(state, val){
+ state.isEdit = val
+ }
+ },
+ getters: {},
+ actions: {},
+ modules: {}
+};
+export default flow;
diff --git a/src/views/chart/api/chart.js b/src/views/chart/api/chart.js
new file mode 100644
index 0000000000000000000000000000000000000000..8606df124fae9c36a28385d5991513547f30fd31
--- /dev/null
+++ b/src/views/chart/api/chart.js
@@ -0,0 +1,175 @@
+import request from '@/router/axios'
+
+// 获取列表
+export const getChartList= (data) => {
+ return request({
+ url: `/mgr/jvs-design/page/page`,
+ method: 'get',
+ params: data
+ })
+}
+
+// 通过id获取页面数据(设计/预览)
+export const previewChartDesign = (id, params) => {
+ return request({
+ url: `/mgr/jvs-design/page/design/${id}`,
+ method: 'post',
+ data: params
+ })
+}
+// 获取部署的页面详情
+export const getUseChart = (id, params) => {
+ return request({
+ url: `/mgr/jvs-design/use/chart/${id}`,
+ method: 'get',
+ params: params
+ })
+}
+// 新建页面
+export const createPage = (data) => {
+ return request({
+ url: `/mgr/jvs-design/page`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 编辑页面
+export const editPage = (data) => {
+ return request({
+ url: `/mgr/jvs-design/page/baseInfo`,
+ method: 'put',
+ data: data
+ })
+}
+
+// 获取列表页类型
+export const getChartTypes= (data) => {
+ return request({
+ url: `/mgr/jvs-design/page/types`,
+ method: 'get',
+ params: data
+ })
+}
+
+// 根据ID获取设计
+export const getChartDesign= (id) => {
+ return request({
+ url: `/mgr/jvs-design/page/design/by/${id}`,
+ method: 'post'
+ })
+}
+
+// 部署
+export const deployPage = (data) => {
+ return request({
+ url: `/mgr/jvs-design/page/deploy/${data.id}`,
+ method: 'post',
+ // data: data
+ })
+}
+
+// 删除
+export const deletePage = (id) => {
+ return request({
+ url: `/mgr/jvs-design/page/${id}`,
+ method: 'delete'
+ })
+}
+
+// 禁用
+export const disablePage = (id) => {
+ return request({
+ url: `/mgr/jvs-design/page/unload/${id}`,
+ method: 'put'
+ })
+}
+
+// 获取菜单
+export const saveChart = (data) => {
+ return request({
+ url: `/mgr/jvs-design/page`,
+ method: 'put',
+ data: data
+ })
+}
+
+// 获取数据源
+export const getSource = (str) => {
+ return request({
+ url: `/mgr/jvs-design/data/source/${str}`,
+ method: 'get',
+ })
+}
+
+// 测试数据
+export const testData = (data) => {
+ return request({
+ url: `/mgr/jvs-design/test`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 发布版本
+export const publish = (id) => {
+ return request({
+ url: `/mgr/jvs-design/page/publish/${id}`,
+ method: 'put'
+ })
+}
+
+// 根据id获取设计
+export const getVersionData = (id) => {
+ return request({
+ url: `/mgr/jvs-design/page/design/by/${id}`,
+ method: 'get',
+ })
+}
+
+// 获取图片列表
+export const getImageList = (params) => {
+ return request({
+ // url: `/api/file/files/${params.bucketName}/${params.current}/${params.size}`,
+ url: `/mgr/jvs-design//file/list`,
+ method: 'get',
+ params
+ })
+}
+
+// 获取标签集
+export const getLabelList = (params) => {
+ return request({
+ // url: `/api/file/files/${params.bucketName}/${params.current}/${params.size}`,
+ url: `/mgr/jvs-design//fileLabel`,
+ method: 'get',
+ params
+ })
+}
+
+// 预览图片(单个)
+export const previewImage = (params, query) => {
+ return request({
+ url: `/api/file/filelink/${params.bucketName}`,
+ method: 'get',
+ params: query
+ })
+}
+
+// 获取图片集合
+export const getImages = (data) => {
+ return request({
+ url: `/api/file/filelinks`,
+ method: 'post',
+ data: data
+ })
+}
+
+// // 执行逻辑
+// export const getImages = (data) => {
+// return request({
+// url: `/api/file/filelinks`,
+// method: 'post',
+// data: data
+// })
+// }
diff --git a/src/views/chart/assets/json/baseArea.json b/src/views/chart/assets/json/baseArea.json
new file mode 100644
index 0000000000000000000000000000000000000000..eeb504bd31415459ddc440e70633e6a9f5da2c0d
--- /dev/null
+++ b/src/views/chart/assets/json/baseArea.json
@@ -0,0 +1 @@
+[{"time":"2009/6/12 2:00","flow":0.97,"rain":0},{"time":"2009/6/12 3:00","flow":0.96,"rain":0},{"time":"2009/6/12 4:00","flow":0.96,"rain":0},{"time":"2009/6/12 5:00","flow":0.95,"rain":0},{"time":"2009/6/12 6:00","flow":0.95,"rain":0},{"time":"2009/6/12 7:00","flow":0.94,"rain":0},{"time":"2009/6/12 8:00","flow":0.94,"rain":0},{"time":"2009/6/12 9:00","flow":0.94,"rain":0},{"time":"2009/6/12 10:00","flow":0.94,"rain":0},{"time":"2009/6/12 11:00","flow":0.94,"rain":0},{"time":"2009/6/12 12:00","flow":0.94,"rain":0},{"time":"2009/6/12 13:00","flow":0.94,"rain":0},{"time":"2009/6/12 14:00","flow":0.94,"rain":0},{"time":"2009/6/12 15:00","flow":0.94,"rain":0},{"time":"2009/6/12 16:00","flow":0.94,"rain":0},{"time":"2009/6/12 17:00","flow":0.94,"rain":0},{"time":"2009/6/12 18:00","flow":0.94,"rain":0},{"time":"2009/6/12 19:00","flow":0.94,"rain":0},{"time":"2009/6/12 20:00","flow":0.94,"rain":0},{"time":"2009/6/12 21:00","flow":0.94,"rain":0},{"time":"2009/6/12 22:00","flow":0.94,"rain":0},{"time":"2009/6/12 23:00","flow":0.94,"rain":0},{"time":"2009/6/13 0:00","flow":0.94,"rain":0},{"time":"2009/6/13 1:00","flow":0.94,"rain":0},{"time":"2009/6/13 2:00","flow":0.94,"rain":0},{"time":"2009/6/13 3:00","flow":0.94,"rain":0},{"time":"2009/6/13 4:00","flow":0.94,"rain":0},{"time":"2009/6/13 5:00","flow":0.94,"rain":0},{"time":"2009/6/13 6:00","flow":0.94,"rain":0},{"time":"2009/6/13 7:00","flow":0.94,"rain":0},{"time":"2009/6/13 8:00","flow":0.94,"rain":0},{"time":"2009/6/13 9:00","flow":0.94,"rain":0},{"time":"2009/6/13 10:00","flow":0.94,"rain":0},{"time":"2009/6/13 11:00","flow":0.94,"rain":0.005},{"time":"2009/6/13 12:00","flow":0.94,"rain":0.017},{"time":"2009/6/13 13:00","flow":0.94,"rain":0.017},{"time":"2009/6/13 14:00","flow":0.94,"rain":0.017},{"time":"2009/6/13 15:00","flow":0.94,"rain":0.017},{"time":"2009/6/13 16:00","flow":0.94,"rain":0.011},{"time":"2009/6/13 17:00","flow":0.94,"rain":0},{"time":"2009/6/13 18:00","flow":0.94,"rain":0},{"time":"2009/6/13 19:00","flow":0.94,"rain":0},{"time":"2009/6/13 20:00","flow":0.94,"rain":0},{"time":"2009/6/13 21:00","flow":0.94,"rain":0},{"time":"2009/6/13 22:00","flow":0.94,"rain":0},{"time":"2009/6/13 23:00","flow":0.94,"rain":0},{"time":"2009/6/14 0:00","flow":0.94,"rain":0},{"time":"2009/6/14 1:00","flow":0.94,"rain":0},{"time":"2009/6/14 2:00","flow":0.94,"rain":0},{"time":"2009/6/14 3:00","flow":0.94,"rain":0},{"time":"2009/6/14 4:00","flow":0.94,"rain":0},{"time":"2009/6/14 5:00","flow":0.94,"rain":0},{"time":"2009/6/14 6:00","flow":0.94,"rain":0},{"time":"2009/6/14 7:00","flow":0.94,"rain":0},{"time":"2009/6/14 8:00","flow":0.94,"rain":0},{"time":"2009/6/14 9:00","flow":0.94,"rain":0},{"time":"2009/6/14 10:00","flow":0.94,"rain":0},{"time":"2009/6/14 11:00","flow":0.94,"rain":0},{"time":"2009/6/14 12:00","flow":0.94,"rain":0},{"time":"2009/6/14 13:00","flow":0.94,"rain":0},{"time":"2009/6/14 14:00","flow":0.94,"rain":0},{"time":"2009/6/14 15:00","flow":0.94,"rain":0},{"time":"2009/6/14 16:00","flow":0.94,"rain":0},{"time":"2009/6/14 17:00","flow":0.94,"rain":0},{"time":"2009/6/14 18:00","flow":0.94,"rain":0},{"time":"2009/6/14 19:00","flow":0.94,"rain":0},{"time":"2009/6/14 20:00","flow":0.94,"rain":0},{"time":"2009/6/14 21:00","flow":0.94,"rain":0},{"time":"2009/6/14 22:00","flow":0.94,"rain":0},{"time":"2009/6/14 23:00","flow":0.94,"rain":0},{"time":"2009/6/15 0:00","flow":0.94,"rain":0},{"time":"2009/6/15 1:00","flow":0.94,"rain":0},{"time":"2009/6/15 2:00","flow":0.94,"rain":0},{"time":"2009/6/15 3:00","flow":0.94,"rain":0},{"time":"2009/6/15 4:00","flow":0.94,"rain":0},{"time":"2009/6/15 5:00","flow":0.94,"rain":0},{"time":"2009/6/15 6:00","flow":0.94,"rain":0},{"time":"2009/6/15 7:00","flow":0.94,"rain":0},{"time":"2009/6/15 8:00","flow":0.94,"rain":0},{"time":"2009/6/15 9:00","flow":0.94,"rain":0},{"time":"2009/6/15 10:00","flow":0.94,"rain":0},{"time":"2009/6/15 11:00","flow":0.94,"rain":0},{"time":"2009/6/15 12:00","flow":0.94,"rain":0},{"time":"2009/6/15 13:00","flow":0.94,"rain":0},{"time":"2009/6/15 14:00","flow":0.94,"rain":0},{"time":"2009/6/15 15:00","flow":0.94,"rain":0},{"time":"2009/6/15 16:00","flow":0.94,"rain":0},{"time":"2009/6/15 17:00","flow":0.94,"rain":0},{"time":"2009/6/15 18:00","flow":0.94,"rain":0},{"time":"2009/6/15 19:00","flow":0.94,"rain":0},{"time":"2009/6/15 20:00","flow":0.94,"rain":0},{"time":"2009/6/15 21:00","flow":0.94,"rain":0},{"time":"2009/6/15 22:00","flow":0.94,"rain":0},{"time":"2009/6/15 23:00","flow":0.94,"rain":0},{"time":"2009/6/15 0:00","flow":0.94,"rain":0},{"time":"2009/6/16 1:00","flow":0.94,"rain":0},{"time":"2009/6/16 2:00","flow":0.94,"rain":0},{"time":"2009/6/16 3:00","flow":0.94,"rain":0},{"time":"2009/6/16 4:00","flow":0.94,"rain":0},{"time":"2009/6/16 5:00","flow":0.94,"rain":0},{"time":"2009/6/16 6:00","flow":0.94,"rain":0},{"time":"2009/6/16 7:00","flow":0.94,"rain":0},{"time":"2009/6/16 8:00","flow":0.94,"rain":0},{"time":"2009/6/16 9:00","flow":0.94,"rain":0},{"time":"2009/6/16 10:00","flow":0.94,"rain":0},{"time":"2009/6/16 11:00","flow":0.94,"rain":0},{"time":"2009/6/16 12:00","flow":0.94,"rain":0.021},{"time":"2009/6/16 13:00","flow":0.94,"rain":0.026},{"time":"2009/6/16 14:00","flow":0.94,"rain":0.03},{"time":"2009/6/16 15:00","flow":0.94,"rain":0.036},{"time":"2009/6/16 16:00","flow":0.94,"rain":0.036},{"time":"2009/6/16 17:00","flow":0.94,"rain":0.195},{"time":"2009/6/16 18:00","flow":0.94,"rain":0.221},{"time":"2009/6/16 19:00","flow":0.94,"rain":0.019},{"time":"2009/6/16 20:00","flow":0.94,"rain":0.013},{"time":"2009/6/16 21:00","flow":0.94,"rain":0.017},{"time":"2009/6/16 22:00","flow":0.94,"rain":0.03},{"time":"2009/6/16 23:00","flow":0.94,"rain":0.03},{"time":"2009/6/15 0:00","flow":0.94,"rain":0.03},{"time":"2009/6/17 1:00","flow":0.94,"rain":0.046},{"time":"2009/6/17 2:00","flow":0.94,"rain":0.045},{"time":"2009/6/17 3:00","flow":0.94,"rain":0.038},{"time":"2009/6/17 4:00","flow":0.94,"rain":0.084},{"time":"2009/6/17 5:00","flow":0.94,"rain":0.045},{"time":"2009/6/17 6:00","flow":0.94,"rain":0.045},{"time":"2009/6/17 7:00","flow":0.94,"rain":0.037},{"time":"2009/6/17 8:00","flow":0.94,"rain":0.034},{"time":"2009/6/17 9:00","flow":0.94,"rain":0.035},{"time":"2009/6/17 10:00","flow":0.94,"rain":0.036},{"time":"2009/6/17 11:00","flow":0.93,"rain":0.044},{"time":"2009/6/17 12:00","flow":0.92,"rain":0.052},{"time":"2009/6/17 13:00","flow":0.91,"rain":0.048},{"time":"2009/6/17 14:00","flow":0.9,"rain":0.109},{"time":"2009/6/17 15:00","flow":0.89,"rain":0.033},{"time":"2009/6/17 16:00","flow":0.88,"rain":0.029},{"time":"2009/6/17 17:00","flow":0.87,"rain":0.04},{"time":"2009/6/17 18:00","flow":0.87,"rain":0.042},{"time":"2009/6/17 19:00","flow":0.86,"rain":0.042},{"time":"2009/6/17 20:00","flow":0.86,"rain":0.042},{"time":"2009/6/17 21:00","flow":0.86,"rain":0.073},{"time":"2009/6/17 22:00","flow":0.86,"rain":0.076},{"time":"2009/6/17 23:00","flow":0.86,"rain":0.062},{"time":"2009/6/18 0:00","flow":0.86,"rain":0.066},{"time":"2009/6/18 1:00","flow":0.86,"rain":0.066},{"time":"2009/6/18 2:00","flow":0.86,"rain":0.075},{"time":"2009/6/18 3:00","flow":0.86,"rain":0.096},{"time":"2009/6/18 4:00","flow":0.86,"rain":0.128},{"time":"2009/6/18 5:00","flow":0.86,"rain":0.121},{"time":"2009/6/18 6:00","flow":0.86,"rain":0.128},{"time":"2009/6/18 7:00","flow":0.86,"rain":0.14},{"time":"2009/6/18 8:00","flow":0.86,"rain":0.226},{"time":"2009/6/18 9:00","flow":0.86,"rain":0.143},{"time":"2009/6/18 10:00","flow":0.86,"rain":0.097},{"time":"2009/6/18 11:00","flow":0.86,"rain":0.018},{"time":"2009/6/18 12:00","flow":0.86,"rain":0},{"time":"2009/6/18 13:00","flow":0.86,"rain":0},{"time":"2009/6/18 14:00","flow":0.86,"rain":0},{"time":"2009/6/18 15:00","flow":0.86,"rain":0},{"time":"2009/6/18 16:00","flow":0.86,"rain":0},{"time":"2009/6/18 17:00","flow":0.86,"rain":0.018},{"time":"2009/6/18 18:00","flow":0.86,"rain":0.047},{"time":"2009/6/18 19:00","flow":0.86,"rain":0.054},{"time":"2009/6/18 20:00","flow":0.86,"rain":0.054},{"time":"2009/6/18 21:00","flow":0.87,"rain":0.054},{"time":"2009/6/18 22:00","flow":0.88,"rain":0.036},{"time":"2009/6/18 23:00","flow":0.9,"rain":0.185},{"time":"2009/6/15 0:00","flow":0.93,"rain":0.009},{"time":"2009/6/19 1:00","flow":0.96,"rain":0.038},{"time":"2009/6/19 2:00","flow":0.99,"rain":0.061},{"time":"2009/6/19 3:00","flow":1.03,"rain":0.077},{"time":"2009/6/19 4:00","flow":1.06,"rain":0.091},{"time":"2009/6/19 5:00","flow":1.1,"rain":0.126},{"time":"2009/6/19 6:00","flow":1.14,"rain":0.69},{"time":"2009/6/19 7:00","flow":1.17,"rain":0.182},{"time":"2009/6/19 8:00","flow":1.2,"rain":0.349},{"time":"2009/6/19 9:00","flow":1.23,"rain":0.231},{"time":"2009/6/19 10:00","flow":1.26,"rain":0.146},{"time":"2009/6/19 11:00","flow":1.29,"rain":0.128},{"time":"2009/6/19 12:00","flow":1.33,"rain":0.167},{"time":"2009/6/19 13:00","flow":1.36,"rain":0.1},{"time":"2009/6/19 14:00","flow":1.4,"rain":0.075},{"time":"2009/6/19 15:00","flow":1.43,"rain":0.071},{"time":"2009/6/19 16:00","flow":1.45,"rain":0.071},{"time":"2009/6/19 17:00","flow":1.48,"rain":0.117},{"time":"2009/6/19 18:00","flow":1.49,"rain":0.01},{"time":"2009/6/19 19:00","flow":1.51,"rain":0.002},{"time":"2009/6/19 20:00","flow":1.51,"rain":0.002},{"time":"2009/6/19 21:00","flow":1.5,"rain":0},{"time":"2009/6/19 22:00","flow":1.49,"rain":0},{"time":"2009/6/19 23:00","flow":1.47,"rain":0},{"time":"2009/6/20 0:00","flow":1.44,"rain":0},{"time":"2009/6/20 1:00","flow":1.41,"rain":0},{"time":"2009/6/20 2:00","flow":1.37,"rain":0},{"time":"2009/6/20 3:00","flow":1.34,"rain":0},{"time":"2009/6/20 4:00","flow":1.3,"rain":0},{"time":"2009/6/20 5:00","flow":1.27,"rain":0},{"time":"2009/6/20 6:00","flow":1.24,"rain":0},{"time":"2009/6/20 7:00","flow":1.22,"rain":0},{"time":"2009/6/20 8:00","flow":1.2,"rain":0},{"time":"2009/6/20 9:00","flow":1.19,"rain":0},{"time":"2009/6/20 10:00","flow":1.18,"rain":0},{"time":"2009/6/20 11:00","flow":1.16,"rain":0},{"time":"2009/6/20 12:00","flow":1.15,"rain":0},{"time":"2009/6/20 13:00","flow":1.14,"rain":0},{"time":"2009/6/20 14:00","flow":1.13,"rain":0},{"time":"2009/6/20 15:00","flow":1.12,"rain":0},{"time":"2009/6/20 16:00","flow":1.11,"rain":0},{"time":"2009/6/20 17:00","flow":1.11,"rain":0},{"time":"2009/6/20 18:00","flow":1.1,"rain":0},{"time":"2009/6/20 19:00","flow":1.1,"rain":0},{"time":"2009/6/20 20:00","flow":1.1,"rain":0},{"time":"2009/6/20 21:00","flow":1.1,"rain":0},{"time":"2009/6/20 22:00","flow":1.1,"rain":0},{"time":"2009/6/20 23:00","flow":1.1,"rain":0},{"time":"2009/6/21 0:00","flow":1.1,"rain":0},{"time":"2009/6/21 1:00","flow":1.1,"rain":0},{"time":"2009/6/21 2:00","flow":1.1,"rain":0},{"time":"2009/6/21 3:00","flow":1.1,"rain":0},{"time":"2009/6/21 4:00","flow":1.1,"rain":0},{"time":"2009/6/21 5:00","flow":1.1,"rain":0},{"time":"2009/6/21 6:00","flow":1.1,"rain":0},{"time":"2009/6/21 7:00","flow":1.1,"rain":0},{"time":"2009/6/21 8:00","flow":1.1,"rain":0},{"time":"2009/6/21 9:00","flow":1.1,"rain":0},{"time":"2009/6/21 10:00","flow":1.1,"rain":0},{"time":"2009/6/21 11:00","flow":1.09,"rain":0},{"time":"2009/6/21 12:00","flow":1.09,"rain":0},{"time":"2009/6/21 13:00","flow":1.08,"rain":0},{"time":"2009/6/21 14:00","flow":1.07,"rain":0},{"time":"2009/6/21 15:00","flow":1.06,"rain":0},{"time":"2009/6/21 16:00","flow":1.05,"rain":0},{"time":"2009/6/21 17:00","flow":1.04,"rain":0},{"time":"2009/6/21 18:00","flow":1.03,"rain":0},{"time":"2009/6/21 19:00","flow":1.03,"rain":0},{"time":"2009/6/21 20:00","flow":1.02,"rain":0},{"time":"2009/6/21 21:00","flow":1.01,"rain":0},{"time":"2009/6/21 22:00","flow":1.01,"rain":0},{"time":"2009/6/21 23:00","flow":1,"rain":0},{"time":"2009/6/22 0:00","flow":0.99,"rain":0},{"time":"2009/6/22 1:00","flow":0.98,"rain":0},{"time":"2009/6/22 2:00","flow":0.97,"rain":0},{"time":"2009/6/22 3:00","flow":0.96,"rain":0},{"time":"2009/6/22 4:00","flow":0.96,"rain":0},{"time":"2009/6/22 5:00","flow":0.95,"rain":0},{"time":"2009/6/22 6:00","flow":0.95,"rain":0},{"time":"2009/6/22 7:00","flow":0.94,"rain":0},{"time":"2009/6/22 8:00","flow":0.94,"rain":0},{"time":"2009/6/22 9:00","flow":0.94,"rain":0},{"time":"2009/6/22 10:00","flow":0.94,"rain":0},{"time":"2009/6/22 11:00","flow":0.94,"rain":0},{"time":"2009/6/22 12:00","flow":0.94,"rain":0},{"time":"2009/6/22 13:00","flow":0.94,"rain":0},{"time":"2009/6/22 14:00","flow":0.94,"rain":0},{"time":"2009/6/22 15:00","flow":0.94,"rain":0},{"time":"2009/6/22 16:00","flow":0.94,"rain":0},{"time":"2009/6/22 17:00","flow":0.94,"rain":0},{"time":"2009/6/22 18:00","flow":0.94,"rain":0},{"time":"2009/6/22 19:00","flow":0.94,"rain":0},{"time":"2009/6/22 20:00","flow":0.94,"rain":0},{"time":"2009/6/22 21:00","flow":0.94,"rain":0},{"time":"2009/6/22 22:00","flow":0.94,"rain":0},{"time":"2009/6/22 23:00","flow":0.94,"rain":0},{"time":"2009/6/23 0:00","flow":0.94,"rain":0},{"time":"2009/6/23 1:00","flow":0.94,"rain":0},{"time":"2009/6/23 2:00","flow":0.94,"rain":0},{"time":"2009/6/23 3:00","flow":0.94,"rain":0},{"time":"2009/6/23 4:00","flow":0.94,"rain":0},{"time":"2009/6/23 5:00","flow":0.94,"rain":0},{"time":"2009/6/23 6:00","flow":0.94,"rain":0},{"time":"2009/6/23 7:00","flow":0.94,"rain":0},{"time":"2009/6/23 8:00","flow":0.94,"rain":0},{"time":"2009/6/23 9:00","flow":0.94,"rain":0},{"time":"2009/6/23 10:00","flow":0.94,"rain":0},{"time":"2009/6/23 11:00","flow":0.94,"rain":0},{"time":"2009/6/23 12:00","flow":0.94,"rain":0},{"time":"2009/6/23 13:00","flow":0.94,"rain":0},{"time":"2009/6/23 14:00","flow":0.94,"rain":0},{"time":"2009/6/23 15:00","flow":0.94,"rain":0},{"time":"2009/6/23 16:00","flow":0.94,"rain":0},{"time":"2009/6/23 17:00","flow":0.94,"rain":0},{"time":"2009/6/23 18:00","flow":0.94,"rain":0},{"time":"2009/6/23 19:00","flow":0.94,"rain":0},{"time":"2009/6/23 20:00","flow":0.94,"rain":0},{"time":"2009/6/23 21:00","flow":0.94,"rain":0},{"time":"2009/6/23 22:00","flow":0.94,"rain":0},{"time":"2009/6/23 23:00","flow":0.93,"rain":0},{"time":"2009/6/24 0:00","flow":0.92,"rain":0},{"time":"2009/6/24 1:00","flow":0.91,"rain":0},{"time":"2009/6/24 2:00","flow":0.9,"rain":0},{"time":"2009/6/24 3:00","flow":0.89,"rain":0},{"time":"2009/6/24 4:00","flow":0.88,"rain":0},{"time":"2009/6/24 5:00","flow":0.87,"rain":0},{"time":"2009/6/24 6:00","flow":0.87,"rain":0},{"time":"2009/6/24 7:00","flow":0.86,"rain":0},{"time":"2009/6/24 8:00","flow":0.86,"rain":0},{"time":"2009/6/24 9:00","flow":0.86,"rain":0},{"time":"2009/6/24 10:00","flow":0.86,"rain":0},{"time":"2009/6/24 11:00","flow":0.86,"rain":0},{"time":"2009/6/24 12:00","flow":0.86,"rain":0},{"time":"2009/6/24 13:00","flow":0.86,"rain":0},{"time":"2009/6/24 14:00","flow":0.86,"rain":0},{"time":"2009/6/24 15:00","flow":0.86,"rain":0},{"time":"2009/6/24 16:00","flow":0.86,"rain":0},{"time":"2009/6/24 17:00","flow":0.86,"rain":0},{"time":"2009/6/24 18:00","flow":0.86,"rain":0},{"time":"2009/6/24 19:00","flow":0.86,"rain":0},{"time":"2009/6/24 20:00","flow":0.86,"rain":0},{"time":"2009/6/24 21:00","flow":0.86,"rain":0},{"time":"2009/6/24 22:00","flow":0.86,"rain":0},{"time":"2009/6/24 23:00","flow":0.86,"rain":0},{"time":"2009/6/25 0:00","flow":0.86,"rain":0},{"time":"2009/6/25 1:00","flow":0.86,"rain":0},{"time":"2009/6/25 2:00","flow":0.86,"rain":0},{"time":"2009/6/25 3:00","flow":0.86,"rain":0},{"time":"2009/6/25 4:00","flow":0.86,"rain":0},{"time":"2009/6/25 5:00","flow":0.86,"rain":0},{"time":"2009/6/25 6:00","flow":0.86,"rain":0},{"time":"2009/6/25 7:00","flow":0.86,"rain":0},{"time":"2009/6/25 8:00","flow":0.86,"rain":0},{"time":"2009/6/25 9:00","flow":0.86,"rain":0},{"time":"2009/6/25 10:00","flow":0.86,"rain":0},{"time":"2009/6/25 11:00","flow":0.86,"rain":0},{"time":"2009/6/25 12:00","flow":0.86,"rain":0},{"time":"2009/6/25 13:00","flow":0.86,"rain":0},{"time":"2009/6/25 14:00","flow":0.86,"rain":0},{"time":"2009/6/25 15:00","flow":0.86,"rain":0},{"time":"2009/6/25 16:00","flow":0.86,"rain":0},{"time":"2009/6/25 17:00","flow":0.86,"rain":0},{"time":"2009/6/25 18:00","flow":0.86,"rain":0},{"time":"2009/6/25 19:00","flow":0.86,"rain":0},{"time":"2009/6/25 20:00","flow":0.86,"rain":0},{"time":"2009/6/25 21:00","flow":0.86,"rain":0},{"time":"2009/6/25 22:00","flow":0.86,"rain":0},{"time":"2009/6/25 23:00","flow":0.86,"rain":0},{"time":"2009/6/26 0:00","flow":0.86,"rain":0},{"time":"2009/6/26 1:00","flow":0.86,"rain":0},{"time":"2009/6/26 2:00","flow":0.86,"rain":0},{"time":"2009/6/26 3:00","flow":0.86,"rain":0},{"time":"2009/6/26 4:00","flow":0.86,"rain":0},{"time":"2009/6/26 5:00","flow":0.86,"rain":0},{"time":"2009/6/26 6:00","flow":0.86,"rain":0},{"time":"2009/6/26 7:00","flow":0.86,"rain":0},{"time":"2009/6/26 8:00","flow":0.86,"rain":0},{"time":"2009/6/26 9:00","flow":0.86,"rain":0},{"time":"2009/6/26 10:00","flow":0.86,"rain":0},{"time":"2009/6/26 11:00","flow":0.86,"rain":0},{"time":"2009/6/26 12:00","flow":0.86,"rain":0},{"time":"2009/6/26 13:00","flow":0.86,"rain":0},{"time":"2009/6/26 14:00","flow":0.86,"rain":0},{"time":"2009/6/26 15:00","flow":0.86,"rain":0},{"time":"2009/6/26 16:00","flow":0.86,"rain":0},{"time":"2009/6/26 17:00","flow":0.86,"rain":0},{"time":"2009/6/26 18:00","flow":0.86,"rain":0},{"time":"2009/6/26 19:00","flow":0.86,"rain":0},{"time":"2009/6/26 20:00","flow":0.86,"rain":0},{"time":"2009/6/26 21:00","flow":0.86,"rain":0},{"time":"2009/6/26 22:00","flow":0.86,"rain":0},{"time":"2009/6/26 23:00","flow":0.85,"rain":0},{"time":"2009/6/27 0:00","flow":0.84,"rain":0},{"time":"2009/6/27 1:00","flow":0.83,"rain":0},{"time":"2009/6/27 2:00","flow":0.82,"rain":0},{"time":"2009/6/27 3:00","flow":0.81,"rain":0},{"time":"2009/6/27 4:00","flow":0.8,"rain":0},{"time":"2009/6/27 5:00","flow":0.8,"rain":0},{"time":"2009/6/27 6:00","flow":0.79,"rain":0},{"time":"2009/6/27 7:00","flow":0.78,"rain":0},{"time":"2009/6/27 8:00","flow":0.78,"rain":0},{"time":"2009/6/27 9:00","flow":0.78,"rain":0},{"time":"2009/6/27 10:00","flow":0.78,"rain":0},{"time":"2009/6/27 11:00","flow":0.78,"rain":0},{"time":"2009/6/27 12:00","flow":0.78,"rain":0},{"time":"2009/6/27 13:00","flow":0.78,"rain":0},{"time":"2009/6/27 14:00","flow":0.78,"rain":0},{"time":"2009/6/27 15:00","flow":0.78,"rain":0},{"time":"2009/6/27 16:00","flow":0.78,"rain":0},{"time":"2009/6/27 17:00","flow":0.78,"rain":0},{"time":"2009/6/27 18:00","flow":0.78,"rain":0},{"time":"2009/6/27 19:00","flow":0.78,"rain":0.005},{"time":"2009/6/27 20:00","flow":0.78,"rain":0.026},{"time":"2009/6/27 21:00","flow":0.78,"rain":0.038},{"time":"2009/6/27 22:00","flow":0.78,"rain":0.038},{"time":"2009/6/27 23:00","flow":0.78,"rain":0.038},{"time":"2009/6/28 0:00","flow":0.78,"rain":0.076},{"time":"2009/6/28 1:00","flow":0.78,"rain":0.086},{"time":"2009/6/28 2:00","flow":0.78,"rain":0.109},{"time":"2009/6/28 3:00","flow":0.78,"rain":0.213},{"time":"2009/6/28 4:00","flow":0.78,"rain":0.276},{"time":"2009/6/28 5:00","flow":0.78,"rain":0.288},{"time":"2009/6/28 6:00","flow":0.78,"rain":0.297},{"time":"2009/6/28 7:00","flow":0.78,"rain":0.642},{"time":"2009/6/28 8:00","flow":0.78,"rain":1.799},{"time":"2009/6/28 9:00","flow":0.78,"rain":1.236},{"time":"2009/6/28 10:00","flow":0.78,"rain":2.138},{"time":"2009/6/28 11:00","flow":0.78,"rain":0.921},{"time":"2009/6/28 12:00","flow":0.78,"rain":0.497},{"time":"2009/6/28 13:00","flow":0.78,"rain":0.685},{"time":"2009/6/28 14:00","flow":0.78,"rain":0.828},{"time":"2009/6/28 15:00","flow":0.78,"rain":0.41},{"time":"2009/6/28 16:00","flow":0.78,"rain":0},{"time":"2009/6/28 17:00","flow":0.78,"rain":0},{"time":"2009/6/28 18:00","flow":0.78,"rain":0},{"time":"2009/6/28 19:00","flow":0.78,"rain":0},{"time":"2009/6/28 20:00","flow":0.78,"rain":0},{"time":"2009/6/28 21:00","flow":0.78,"rain":0},{"time":"2009/6/28 22:00","flow":0.77,"rain":0},{"time":"2009/6/28 23:00","flow":0.75,"rain":0},{"time":"2009/6/29 0:00","flow":0.73,"rain":0},{"time":"2009/6/29 1:00","flow":0.71,"rain":0},{"time":"2009/6/29 2:00","flow":0.68,"rain":0},{"time":"2009/6/29 3:00","flow":0.65,"rain":0},{"time":"2009/6/29 4:00","flow":0.63,"rain":0},{"time":"2009/6/29 5:00","flow":0.61,"rain":0},{"time":"2009/6/29 6:00","flow":0.59,"rain":0},{"time":"2009/6/29 7:00","flow":0.58,"rain":0},{"time":"2009/6/29 8:00","flow":0.58,"rain":0},{"time":"2009/6/29 9:00","flow":0.58,"rain":0},{"time":"2009/6/29 10:00","flow":0.58,"rain":0},{"time":"2009/6/29 11:00","flow":0.58,"rain":0},{"time":"2009/6/29 12:00","flow":0.58,"rain":0},{"time":"2009/6/29 13:00","flow":0.58,"rain":0},{"time":"2009/6/29 14:00","flow":0.58,"rain":0},{"time":"2009/6/29 15:00","flow":0.58,"rain":0},{"time":"2009/6/29 16:00","flow":0.58,"rain":0},{"time":"2009/6/29 17:00","flow":0.58,"rain":0},{"time":"2009/6/29 18:00","flow":0.58,"rain":0},{"time":"2009/6/29 19:00","flow":0.58,"rain":0},{"time":"2009/6/29 20:00","flow":0.58,"rain":0},{"time":"2009/6/29 21:00","flow":0.58,"rain":0},{"time":"2009/6/29 22:00","flow":0.58,"rain":0},{"time":"2009/6/29 23:00","flow":0.58,"rain":0},{"time":"2009/6/30 0:00","flow":0.58,"rain":0},{"time":"2009/6/30 1:00","flow":0.58,"rain":0},{"time":"2009/6/30 2:00","flow":0.58,"rain":0},{"time":"2009/6/30 3:00","flow":0.58,"rain":0},{"time":"2009/6/30 4:00","flow":0.58,"rain":0},{"time":"2009/6/30 5:00","flow":0.58,"rain":0},{"time":"2009/6/30 6:00","flow":0.58,"rain":0},{"time":"2009/6/30 7:00","flow":0.58,"rain":0},{"time":"2009/6/30 8:00","flow":0.58,"rain":0},{"time":"2009/6/30 9:00","flow":0.58,"rain":0},{"time":"2009/6/30 10:00","flow":0.58,"rain":0},{"time":"2009/6/30 11:00","flow":0.58,"rain":0},{"time":"2009/6/30 12:00","flow":0.58,"rain":0},{"time":"2009/6/30 13:00","flow":0.58,"rain":0},{"time":"2009/6/30 14:00","flow":0.58,"rain":0},{"time":"2009/6/30 15:00","flow":0.58,"rain":0},{"time":"2009/6/30 16:00","flow":0.58,"rain":0},{"time":"2009/6/30 17:00","flow":0.58,"rain":0},{"time":"2009/6/30 18:00","flow":0.58,"rain":0},{"time":"2009/6/30 19:00","flow":0.58,"rain":0},{"time":"2009/6/30 20:00","flow":0.58,"rain":0},{"time":"2009/6/30 21:00","flow":0.58,"rain":0},{"time":"2009/6/30 22:00","flow":0.58,"rain":0},{"time":"2009/6/30 23:00","flow":0.58,"rain":0},{"time":"2009/7/1 0:00","flow":0.58,"rain":0},{"time":"2009/7/1 1:00","flow":0.58,"rain":0},{"time":"2009/7/1 2:00","flow":0.58,"rain":0},{"time":"2009/7/1 3:00","flow":0.58,"rain":0},{"time":"2009/7/1 4:00","flow":0.58,"rain":0},{"time":"2009/7/1 5:00","flow":0.58,"rain":0},{"time":"2009/7/1 6:00","flow":0.58,"rain":0},{"time":"2009/7/1 7:00","flow":0.58,"rain":0},{"time":"2009/7/1 8:00","flow":0.58,"rain":0},{"time":"2009/7/1 9:00","flow":0.58,"rain":0},{"time":"2009/7/1 10:00","flow":0.57,"rain":0},{"time":"2009/7/1 11:00","flow":0.57,"rain":0},{"time":"2009/7/1 12:00","flow":0.57,"rain":0},{"time":"2009/7/1 13:00","flow":0.56,"rain":0},{"time":"2009/7/1 14:00","flow":0.55,"rain":0},{"time":"2009/7/1 15:00","flow":0.55,"rain":0},{"time":"2009/7/1 16:00","flow":0.54,"rain":0},{"time":"2009/7/1 17:00","flow":0.54,"rain":0},{"time":"2009/7/1 18:00","flow":0.53,"rain":0},{"time":"2009/7/1 19:00","flow":0.52,"rain":0},{"time":"2009/7/1 20:00","flow":0.52,"rain":0},{"time":"2009/7/1 21:00","flow":0.51,"rain":0},{"time":"2009/7/1 22:00","flow":0.51,"rain":0},{"time":"2009/7/1 23:00","flow":0.5,"rain":0},{"time":"2009/7/2 0:00","flow":0.5,"rain":0},{"time":"2009/7/2 1:00","flow":0.49,"rain":0},{"time":"2009/7/2 2:00","flow":0.48,"rain":0},{"time":"2009/7/2 3:00","flow":0.48,"rain":0},{"time":"2009/7/2 4:00","flow":0.47,"rain":0},{"time":"2009/7/2 5:00","flow":0.47,"rain":0},{"time":"2009/7/2 6:00","flow":0.47,"rain":0},{"time":"2009/7/2 7:00","flow":0.46,"rain":0},{"time":"2009/7/2 8:00","flow":0.46,"rain":0},{"time":"2009/7/2 9:00","flow":0.46,"rain":0},{"time":"2009/7/2 10:00","flow":0.46,"rain":0},{"time":"2009/7/2 11:00","flow":0.46,"rain":0},{"time":"2009/7/2 12:00","flow":0.46,"rain":0},{"time":"2009/7/2 13:00","flow":0.46,"rain":0},{"time":"2009/7/2 14:00","flow":0.46,"rain":0},{"time":"2009/7/2 15:00","flow":0.46,"rain":0},{"time":"2009/7/2 16:00","flow":0.46,"rain":0},{"time":"2009/7/2 17:00","flow":0.46,"rain":0},{"time":"2009/7/2 18:00","flow":0.46,"rain":0},{"time":"2009/7/2 19:00","flow":0.46,"rain":0},{"time":"2009/7/2 20:00","flow":0.46,"rain":0},{"time":"2009/7/2 21:00","flow":0.46,"rain":0},{"time":"2009/7/2 22:00","flow":0.46,"rain":0},{"time":"2009/7/2 23:00","flow":0.46,"rain":0},{"time":"2009/7/3 0:00","flow":0.46,"rain":0},{"time":"2009/7/3 1:00","flow":0.46,"rain":0},{"time":"2009/7/3 2:00","flow":0.46,"rain":0},{"time":"2009/7/3 3:00","flow":0.46,"rain":0},{"time":"2009/7/3 4:00","flow":0.46,"rain":0},{"time":"2009/7/3 5:00","flow":0.46,"rain":0},{"time":"2009/7/3 6:00","flow":0.46,"rain":0},{"time":"2009/7/3 7:00","flow":0.46,"rain":0},{"time":"2009/7/3 8:00","flow":0.46,"rain":0},{"time":"2009/7/3 9:00","flow":0.46,"rain":0},{"time":"2009/7/3 10:00","flow":0.46,"rain":0},{"time":"2009/7/3 11:00","flow":0.46,"rain":0},{"time":"2009/7/3 12:00","flow":0.46,"rain":0},{"time":"2009/7/3 13:00","flow":0.46,"rain":0},{"time":"2009/7/3 14:00","flow":0.46,"rain":0},{"time":"2009/7/3 15:00","flow":0.46,"rain":0},{"time":"2009/7/3 16:00","flow":0.46,"rain":0},{"time":"2009/7/3 17:00","flow":0.46,"rain":0},{"time":"2009/7/3 18:00","flow":0.46,"rain":0},{"time":"2009/7/3 19:00","flow":0.46,"rain":0},{"time":"2009/7/3 20:00","flow":0.46,"rain":0},{"time":"2009/7/3 21:00","flow":0.52,"rain":0},{"time":"2009/7/3 22:00","flow":0.67,"rain":0},{"time":"2009/7/3 23:00","flow":0.9,"rain":0},{"time":"2009/7/4 0:00","flow":1.19,"rain":0},{"time":"2009/7/4 1:00","flow":1.52,"rain":0},{"time":"2009/7/4 2:00","flow":1.87,"rain":0},{"time":"2009/7/4 3:00","flow":2.22,"rain":0},{"time":"2009/7/4 4:00","flow":2.55,"rain":0},{"time":"2009/7/4 5:00","flow":2.84,"rain":0},{"time":"2009/7/4 6:00","flow":3.07,"rain":0},{"time":"2009/7/4 7:00","flow":3.22,"rain":0},{"time":"2009/7/4 8:00","flow":3.28,"rain":0},{"time":"2009/7/4 9:00","flow":3.28,"rain":0},{"time":"2009/7/4 10:00","flow":3.28,"rain":0},{"time":"2009/7/4 11:00","flow":3.28,"rain":0},{"time":"2009/7/4 12:00","flow":3.28,"rain":0},{"time":"2009/7/4 13:00","flow":3.28,"rain":0},{"time":"2009/7/4 14:00","flow":3.28,"rain":0},{"time":"2009/7/4 15:00","flow":3.28,"rain":0},{"time":"2009/7/4 16:00","flow":3.28,"rain":0},{"time":"2009/7/4 17:00","flow":3.28,"rain":0},{"time":"2009/7/4 18:00","flow":3.28,"rain":0},{"time":"2009/7/4 19:00","flow":3.28,"rain":0},{"time":"2009/7/4 20:00","flow":3.28,"rain":0},{"time":"2009/7/4 21:00","flow":3.24,"rain":0},{"time":"2009/7/4 22:00","flow":3.13,"rain":0},{"time":"2009/7/4 23:00","flow":2.97,"rain":0},{"time":"2009/7/5 0:00","flow":2.77,"rain":0},{"time":"2009/7/5 1:00","flow":2.54,"rain":0},{"time":"2009/7/5 2:00","flow":2.3,"rain":0},{"time":"2009/7/5 3:00","flow":2.05,"rain":0},{"time":"2009/7/5 4:00","flow":1.82,"rain":0},{"time":"2009/7/5 5:00","flow":1.62,"rain":0},{"time":"2009/7/5 6:00","flow":1.46,"rain":0},{"time":"2009/7/5 7:00","flow":1.35,"rain":0},{"time":"2009/7/5 8:00","flow":1.31,"rain":0},{"time":"2009/7/5 9:00","flow":1.31,"rain":0},{"time":"2009/7/5 10:00","flow":1.31,"rain":0},{"time":"2009/7/5 11:00","flow":1.31,"rain":0},{"time":"2009/7/5 12:00","flow":1.31,"rain":0},{"time":"2009/7/5 13:00","flow":1.31,"rain":0},{"time":"2009/7/5 14:00","flow":1.31,"rain":0},{"time":"2009/7/5 15:00","flow":1.31,"rain":0},{"time":"2009/7/5 16:00","flow":1.31,"rain":0},{"time":"2009/7/5 17:00","flow":1.31,"rain":0},{"time":"2009/7/5 18:00","flow":1.31,"rain":0},{"time":"2009/7/5 19:00","flow":1.31,"rain":0},{"time":"2009/7/5 20:00","flow":1.31,"rain":0},{"time":"2009/7/5 21:00","flow":1.31,"rain":0},{"time":"2009/7/5 22:00","flow":1.31,"rain":0},{"time":"2009/7/5 23:00","flow":1.31,"rain":0},{"time":"2009/7/6 0:00","flow":1.31,"rain":0},{"time":"2009/7/6 1:00","flow":1.31,"rain":0},{"time":"2009/7/6 2:00","flow":1.31,"rain":0},{"time":"2009/7/6 3:00","flow":1.31,"rain":0},{"time":"2009/7/6 4:00","flow":1.31,"rain":0},{"time":"2009/7/6 5:00","flow":1.31,"rain":0},{"time":"2009/7/6 6:00","flow":1.31,"rain":0},{"time":"2009/7/6 7:00","flow":1.31,"rain":0},{"time":"2009/7/6 8:00","flow":1.31,"rain":0},{"time":"2009/7/6 9:00","flow":1.31,"rain":0},{"time":"2009/7/6 10:00","flow":1.31,"rain":0},{"time":"2009/7/6 11:00","flow":1.31,"rain":0},{"time":"2009/7/6 12:00","flow":1.31,"rain":0},{"time":"2009/7/6 13:00","flow":1.31,"rain":0},{"time":"2009/7/6 14:00","flow":1.31,"rain":0},{"time":"2009/7/6 15:00","flow":1.31,"rain":0},{"time":"2009/7/6 16:00","flow":1.31,"rain":0},{"time":"2009/7/6 17:00","flow":1.31,"rain":0},{"time":"2009/7/6 18:00","flow":1.31,"rain":0},{"time":"2009/7/6 19:00","flow":1.31,"rain":0},{"time":"2009/7/6 20:00","flow":1.31,"rain":0},{"time":"2009/7/6 21:00","flow":1.3,"rain":0},{"time":"2009/7/6 22:00","flow":1.26,"rain":0},{"time":"2009/7/6 23:00","flow":1.21,"rain":0.018},{"time":"2009/7/7 0:00","flow":1.14,"rain":0.024},{"time":"2009/7/7 1:00","flow":1.06,"rain":0.024},{"time":"2009/7/7 2:00","flow":0.97,"rain":0.024},{"time":"2009/7/7 3:00","flow":0.89,"rain":0.024},{"time":"2009/7/7 4:00","flow":0.81,"rain":0.006},{"time":"2009/7/7 5:00","flow":0.74,"rain":0.003},{"time":"2009/7/7 6:00","flow":0.69,"rain":0.046},{"time":"2009/7/7 7:00","flow":0.65,"rain":0.046},{"time":"2009/7/7 8:00","flow":0.64,"rain":0.046},{"time":"2009/7/7 9:00","flow":0.64,"rain":0.046},{"time":"2009/7/7 10:00","flow":0.64,"rain":0.043},{"time":"2009/7/7 11:00","flow":0.64,"rain":0},{"time":"2009/7/7 12:00","flow":0.64,"rain":0},{"time":"2009/7/7 13:00","flow":0.64,"rain":0},{"time":"2009/7/7 14:00","flow":0.64,"rain":0},{"time":"2009/7/7 15:00","flow":0.64,"rain":0},{"time":"2009/7/7 16:00","flow":0.64,"rain":0},{"time":"2009/7/7 17:00","flow":0.64,"rain":0},{"time":"2009/7/7 18:00","flow":0.64,"rain":0},{"time":"2009/7/7 19:00","flow":0.64,"rain":0},{"time":"2009/7/7 20:00","flow":0.64,"rain":0},{"time":"2009/7/7 21:00","flow":0.64,"rain":0},{"time":"2009/7/7 22:00","flow":0.64,"rain":0},{"time":"2009/7/7 23:00","flow":0.64,"rain":0},{"time":"2009/7/8 0:00","flow":0.64,"rain":0},{"time":"2009/7/8 1:00","flow":0.64,"rain":0},{"time":"2009/7/8 2:00","flow":0.64,"rain":0},{"time":"2009/7/8 3:00","flow":0.64,"rain":0},{"time":"2009/7/8 4:00","flow":0.64,"rain":0},{"time":"2009/7/8 5:00","flow":0.64,"rain":0.204},{"time":"2009/7/8 6:00","flow":0.64,"rain":0.303},{"time":"2009/7/8 7:00","flow":0.64,"rain":1.028},{"time":"2009/7/8 8:00","flow":0.64,"rain":1.328},{"time":"2009/7/8 9:00","flow":0.64,"rain":1.524},{"time":"2009/7/8 10:00","flow":0.64,"rain":1.41},{"time":"2009/7/8 11:00","flow":0.64,"rain":1.362},{"time":"2009/7/8 12:00","flow":0.64,"rain":1.292},{"time":"2009/7/8 13:00","flow":0.64,"rain":1.191},{"time":"2009/7/8 14:00","flow":0.64,"rain":0.529},{"time":"2009/7/8 15:00","flow":0.64,"rain":0.501},{"time":"2009/7/8 16:00","flow":0.64,"rain":0.944},{"time":"2009/7/8 17:00","flow":0.64,"rain":1.81},{"time":"2009/7/8 18:00","flow":0.64,"rain":2.899},{"time":"2009/7/8 19:00","flow":0.64,"rain":0.859},{"time":"2009/7/8 20:00","flow":0.64,"rain":0.126},{"time":"2009/7/8 21:00","flow":0.64,"rain":0.087},{"time":"2009/7/8 22:00","flow":0.63,"rain":0.047},{"time":"2009/7/8 23:00","flow":0.63,"rain":0},{"time":"2009/7/9 0:00","flow":0.62,"rain":0},{"time":"2009/7/9 1:00","flow":0.62,"rain":0},{"time":"2009/7/9 2:00","flow":0.61,"rain":0},{"time":"2009/7/9 3:00","flow":0.6,"rain":0.011},{"time":"2009/7/9 4:00","flow":0.59,"rain":0.028},{"time":"2009/7/9 5:00","flow":0.59,"rain":0.028},{"time":"2009/7/9 6:00","flow":0.58,"rain":0.028},{"time":"2009/7/9 7:00","flow":0.58,"rain":0.028},{"time":"2009/7/9 8:00","flow":0.58,"rain":0.017},{"time":"2009/7/9 9:00","flow":0.58,"rain":0},{"time":"2009/7/9 10:00","flow":0.58,"rain":0},{"time":"2009/7/9 11:00","flow":0.58,"rain":0},{"time":"2009/7/9 12:00","flow":0.58,"rain":0},{"time":"2009/7/9 13:00","flow":0.58,"rain":0},{"time":"2009/7/9 14:00","flow":0.58,"rain":0},{"time":"2009/7/9 15:00","flow":0.58,"rain":0},{"time":"2009/7/9 16:00","flow":0.58,"rain":0},{"time":"2009/7/9 17:00","flow":0.58,"rain":0},{"time":"2009/7/9 18:00","flow":0.58,"rain":0},{"time":"2009/7/9 19:00","flow":0.58,"rain":0},{"time":"2009/7/9 20:00","flow":0.58,"rain":0},{"time":"2009/7/9 21:00","flow":0.58,"rain":0},{"time":"2009/7/9 22:00","flow":0.59,"rain":0},{"time":"2009/7/9 23:00","flow":0.61,"rain":0},{"time":"2009/7/10 0:00","flow":0.63,"rain":0},{"time":"2009/7/10 1:00","flow":0.65,"rain":0.099},{"time":"2009/7/10 2:00","flow":0.68,"rain":0.159},{"time":"2009/7/10 3:00","flow":0.71,"rain":0.297},{"time":"2009/7/10 4:00","flow":0.73,"rain":0.309},{"time":"2009/7/10 5:00","flow":0.75,"rain":0.309},{"time":"2009/7/10 6:00","flow":0.77,"rain":0.614},{"time":"2009/7/10 7:00","flow":0.78,"rain":0.818},{"time":"2009/7/10 8:00","flow":0.78,"rain":1.436},{"time":"2009/7/10 9:00","flow":0.78,"rain":1.195},{"time":"2009/7/10 10:00","flow":0.78,"rain":0.553},{"time":"2009/7/10 11:00","flow":0.78,"rain":0.542},{"time":"2009/7/10 12:00","flow":0.78,"rain":0.955},{"time":"2009/7/10 13:00","flow":0.78,"rain":0.898},{"time":"2009/7/10 14:00","flow":0.78,"rain":0.466},{"time":"2009/7/10 15:00","flow":0.78,"rain":0.386},{"time":"2009/7/10 16:00","flow":0.78,"rain":0.556},{"time":"2009/7/10 17:00","flow":0.78,"rain":0.388},{"time":"2009/7/10 18:00","flow":0.78,"rain":0.221},{"time":"2009/7/10 19:00","flow":0.78,"rain":0.192},{"time":"2009/7/10 20:00","flow":0.78,"rain":0.192},{"time":"2009/7/10 21:00","flow":0.78,"rain":0.187},{"time":"2009/7/10 22:00","flow":0.77,"rain":0.166},{"time":"2009/7/10 23:00","flow":0.75,"rain":0.18},{"time":"2009/7/11 0:00","flow":0.73,"rain":0.302},{"time":"2009/7/11 1:00","flow":0.71,"rain":0.158},{"time":"2009/7/11 2:00","flow":0.68,"rain":0.009},{"time":"2009/7/11 3:00","flow":0.65,"rain":0.009},{"time":"2009/7/11 4:00","flow":0.63,"rain":0.009},{"time":"2009/7/11 5:00","flow":0.61,"rain":0.009},{"time":"2009/7/11 6:00","flow":0.59,"rain":0.009},{"time":"2009/7/11 7:00","flow":0.58,"rain":0.007},{"time":"2009/7/11 8:00","flow":0.58,"rain":0},{"time":"2009/7/11 9:00","flow":0.58,"rain":0},{"time":"2009/7/11 10:00","flow":0.58,"rain":0},{"time":"2009/7/11 11:00","flow":0.58,"rain":0},{"time":"2009/7/11 12:00","flow":0.58,"rain":0},{"time":"2009/7/11 13:00","flow":0.58,"rain":0},{"time":"2009/7/11 14:00","flow":0.58,"rain":0},{"time":"2009/7/11 15:00","flow":0.58,"rain":0},{"time":"2009/7/11 16:00","flow":0.58,"rain":0},{"time":"2009/7/11 17:00","flow":0.58,"rain":0},{"time":"2009/7/11 18:00","flow":0.58,"rain":0},{"time":"2009/7/11 19:00","flow":0.58,"rain":0},{"time":"2009/7/11 20:00","flow":0.58,"rain":0},{"time":"2009/7/11 21:00","flow":0.58,"rain":0},{"time":"2009/7/11 22:00","flow":0.58,"rain":0},{"time":"2009/7/11 23:00","flow":0.59,"rain":0},{"time":"2009/7/12 0:00","flow":0.59,"rain":0},{"time":"2009/7/12 1:00","flow":0.6,"rain":0},{"time":"2009/7/12 2:00","flow":0.61,"rain":0},{"time":"2009/7/12 3:00","flow":0.62,"rain":0},{"time":"2009/7/12 4:00","flow":0.62,"rain":0},{"time":"2009/7/12 5:00","flow":0.63,"rain":0},{"time":"2009/7/12 6:00","flow":0.63,"rain":0},{"time":"2009/7/12 7:00","flow":0.64,"rain":0},{"time":"2009/7/12 8:00","flow":0.64,"rain":0},{"time":"2009/7/12 9:00","flow":0.64,"rain":0},{"time":"2009/7/12 10:00","flow":0.64,"rain":0},{"time":"2009/7/12 11:00","flow":0.64,"rain":0},{"time":"2009/7/12 12:00","flow":0.64,"rain":0},{"time":"2009/7/12 13:00","flow":0.64,"rain":0},{"time":"2009/7/12 14:00","flow":0.64,"rain":0},{"time":"2009/7/12 15:00","flow":0.64,"rain":0.004},{"time":"2009/7/12 16:00","flow":0.64,"rain":0.032},{"time":"2009/7/12 17:00","flow":0.64,"rain":0.032},{"time":"2009/7/12 18:00","flow":0.64,"rain":0.032},{"time":"2009/7/12 19:00","flow":0.64,"rain":0.032},{"time":"2009/7/12 20:00","flow":0.64,"rain":0.082},{"time":"2009/7/12 21:00","flow":0.64,"rain":0.149},{"time":"2009/7/12 22:00","flow":0.65,"rain":0.204},{"time":"2009/7/12 23:00","flow":0.66,"rain":0.247},{"time":"2009/7/13 0:00","flow":0.68,"rain":0.262},{"time":"2009/7/13 1:00","flow":0.69,"rain":0.49},{"time":"2009/7/13 2:00","flow":0.71,"rain":0.51},{"time":"2009/7/13 3:00","flow":0.73,"rain":0.533},{"time":"2009/7/13 4:00","flow":0.74,"rain":0.746},{"time":"2009/7/13 5:00","flow":0.76,"rain":0.847},{"time":"2009/7/13 6:00","flow":0.77,"rain":2.393},{"time":"2009/7/13 7:00","flow":0.78,"rain":1.188},{"time":"2009/7/13 8:00","flow":0.78,"rain":1.114},{"time":"2009/7/13 9:00","flow":0.78,"rain":0.475},{"time":"2009/7/13 10:00","flow":0.78,"rain":0.043},{"time":"2009/7/13 11:00","flow":0.78,"rain":0},{"time":"2009/7/13 12:00","flow":0.78,"rain":0},{"time":"2009/7/13 13:00","flow":0.78,"rain":0},{"time":"2009/7/13 14:00","flow":0.78,"rain":0},{"time":"2009/7/13 15:00","flow":0.78,"rain":0},{"time":"2009/7/13 16:00","flow":0.78,"rain":0},{"time":"2009/7/13 17:00","flow":0.78,"rain":0},{"time":"2009/7/13 18:00","flow":0.78,"rain":0},{"time":"2009/7/13 19:00","flow":0.78,"rain":0},{"time":"2009/7/13 20:00","flow":0.78,"rain":0},{"time":"2009/7/13 21:00","flow":0.78,"rain":0},{"time":"2009/7/13 22:00","flow":0.78,"rain":0},{"time":"2009/7/13 23:00","flow":0.78,"rain":0},{"time":"2009/7/14 0:00","flow":0.78,"rain":0},{"time":"2009/7/14 1:00","flow":0.78,"rain":0},{"time":"2009/7/14 2:00","flow":0.78,"rain":0},{"time":"2009/7/14 3:00","flow":0.78,"rain":0},{"time":"2009/7/14 4:00","flow":0.78,"rain":0},{"time":"2009/7/14 5:00","flow":0.78,"rain":0},{"time":"2009/7/14 6:00","flow":0.78,"rain":0},{"time":"2009/7/14 7:00","flow":0.78,"rain":0},{"time":"2009/7/14 8:00","flow":0.78,"rain":0},{"time":"2009/7/14 9:00","flow":0.78,"rain":0},{"time":"2009/7/14 10:00","flow":0.78,"rain":0},{"time":"2009/7/14 11:00","flow":0.78,"rain":0},{"time":"2009/7/14 12:00","flow":0.78,"rain":0},{"time":"2009/7/14 13:00","flow":0.78,"rain":0},{"time":"2009/7/14 14:00","flow":0.78,"rain":0},{"time":"2009/7/14 15:00","flow":0.78,"rain":0},{"time":"2009/7/14 16:00","flow":0.78,"rain":0},{"time":"2009/7/14 17:00","flow":0.78,"rain":0},{"time":"2009/7/14 18:00","flow":0.78,"rain":0},{"time":"2009/7/14 19:00","flow":0.78,"rain":0},{"time":"2009/7/14 20:00","flow":0.78,"rain":0},{"time":"2009/7/14 21:00","flow":0.78,"rain":0},{"time":"2009/7/14 22:00","flow":0.78,"rain":0},{"time":"2009/7/14 23:00","flow":0.78,"rain":0},{"time":"2009/7/15 0:00","flow":0.78,"rain":0},{"time":"2009/7/15 1:00","flow":0.78,"rain":0.017},{"time":"2009/7/15 2:00","flow":0.78,"rain":0.017},{"time":"2009/7/15 3:00","flow":0.78,"rain":0.021},{"time":"2009/7/15 4:00","flow":0.78,"rain":0.042},{"time":"2009/7/15 5:00","flow":0.78,"rain":0.079},{"time":"2009/7/15 6:00","flow":0.78,"rain":0.111},{"time":"2009/7/15 7:00","flow":0.78,"rain":0.126},{"time":"2009/7/15 8:00","flow":0.78,"rain":0.122},{"time":"2009/7/15 9:00","flow":0.78,"rain":0.133},{"time":"2009/7/15 10:00","flow":0.78,"rain":0.846},{"time":"2009/7/15 11:00","flow":0.78,"rain":0.102},{"time":"2009/7/15 12:00","flow":0.78,"rain":0.077},{"time":"2009/7/15 13:00","flow":0.78,"rain":0.067},{"time":"2009/7/15 14:00","flow":0.78,"rain":0.056},{"time":"2009/7/15 15:00","flow":0.78,"rain":0.005},{"time":"2009/7/15 16:00","flow":0.78,"rain":0},{"time":"2009/7/15 17:00","flow":0.78,"rain":0},{"time":"2009/7/15 18:00","flow":0.78,"rain":0},{"time":"2009/7/15 19:00","flow":0.78,"rain":0},{"time":"2009/7/15 20:00","flow":0.78,"rain":0},{"time":"2009/7/15 21:00","flow":0.78,"rain":0},{"time":"2009/7/15 22:00","flow":0.78,"rain":0},{"time":"2009/7/15 23:00","flow":0.78,"rain":0},{"time":"2009/7/16 0:00","flow":0.78,"rain":0},{"time":"2009/7/16 1:00","flow":0.78,"rain":0},{"time":"2009/7/16 2:00","flow":0.78,"rain":0},{"time":"2009/7/16 3:00","flow":0.78,"rain":0},{"time":"2009/7/16 4:00","flow":0.78,"rain":0},{"time":"2009/7/16 5:00","flow":0.78,"rain":0.011},{"time":"2009/7/16 6:00","flow":0.78,"rain":0.017},{"time":"2009/7/16 7:00","flow":0.78,"rain":0.017},{"time":"2009/7/16 8:00","flow":0.78,"rain":0.017},{"time":"2009/7/16 9:00","flow":0.78,"rain":0.017},{"time":"2009/7/16 10:00","flow":0.78,"rain":0.006},{"time":"2009/7/16 11:00","flow":0.78,"rain":0},{"time":"2009/7/16 12:00","flow":0.78,"rain":0},{"time":"2009/7/16 13:00","flow":0.78,"rain":0},{"time":"2009/7/16 14:00","flow":0.78,"rain":0},{"time":"2009/7/16 15:00","flow":0.78,"rain":0},{"time":"2009/7/16 16:00","flow":0.78,"rain":0.01},{"time":"2009/7/16 17:00","flow":0.78,"rain":0.03},{"time":"2009/7/16 18:00","flow":0.78,"rain":0.054},{"time":"2009/7/16 19:00","flow":0.78,"rain":0.067},{"time":"2009/7/16 20:00","flow":0.78,"rain":0.07},{"time":"2009/7/16 21:00","flow":0.78,"rain":0.25},{"time":"2009/7/16 22:00","flow":0.78,"rain":0.251},{"time":"2009/7/16 23:00","flow":0.78,"rain":0.494},{"time":"2009/7/17 0:00","flow":0.78,"rain":0.065},{"time":"2009/7/17 1:00","flow":0.78,"rain":0.054},{"time":"2009/7/17 2:00","flow":0.78,"rain":0.054},{"time":"2009/7/17 3:00","flow":0.78,"rain":0.064},{"time":"2009/7/17 4:00","flow":0.78,"rain":0.084},{"time":"2009/7/17 5:00","flow":0.78,"rain":0.077},{"time":"2009/7/17 6:00","flow":0.78,"rain":0.101},{"time":"2009/7/17 7:00","flow":0.78,"rain":0.132},{"time":"2009/7/17 8:00","flow":0.78,"rain":0.248},{"time":"2009/7/17 9:00","flow":0.78,"rain":0.069},{"time":"2009/7/17 10:00","flow":0.78,"rain":0.117},{"time":"2009/7/17 11:00","flow":0.78,"rain":0.115},{"time":"2009/7/17 12:00","flow":0.78,"rain":0.087},{"time":"2009/7/17 13:00","flow":0.78,"rain":0.326},{"time":"2009/7/17 14:00","flow":0.78,"rain":0.036},{"time":"2009/7/17 15:00","flow":0.78,"rain":0.009},{"time":"2009/7/17 16:00","flow":0.78,"rain":0.009},{"time":"2009/7/17 17:00","flow":0.78,"rain":0.009},{"time":"2009/7/17 18:00","flow":0.78,"rain":0.009},{"time":"2009/7/17 19:00","flow":0.78,"rain":0.009},{"time":"2009/7/17 20:00","flow":0.78,"rain":0.004},{"time":"2009/7/17 21:00","flow":0.78,"rain":0},{"time":"2009/7/17 22:00","flow":0.79,"rain":0},{"time":"2009/7/17 23:00","flow":0.81,"rain":0},{"time":"2009/7/18 0:00","flow":0.82,"rain":0},{"time":"2009/7/18 1:00","flow":0.84,"rain":0},{"time":"2009/7/18 2:00","flow":0.86,"rain":0},{"time":"2009/7/18 3:00","flow":0.88,"rain":0},{"time":"2009/7/18 4:00","flow":0.9,"rain":0},{"time":"2009/7/18 5:00","flow":0.92,"rain":0},{"time":"2009/7/18 6:00","flow":0.93,"rain":0},{"time":"2009/7/18 7:00","flow":0.94,"rain":0},{"time":"2009/7/18 8:00","flow":0.94,"rain":0},{"time":"2009/7/18 9:00","flow":0.94,"rain":0},{"time":"2009/7/18 10:00","flow":0.94,"rain":0},{"time":"2009/7/18 11:00","flow":0.94,"rain":0},{"time":"2009/7/18 12:00","flow":0.94,"rain":0},{"time":"2009/7/18 13:00","flow":0.94,"rain":0},{"time":"2009/7/18 14:00","flow":0.94,"rain":0},{"time":"2009/7/18 15:00","flow":0.94,"rain":0},{"time":"2009/7/18 16:00","flow":0.94,"rain":0},{"time":"2009/7/18 17:00","flow":0.94,"rain":0},{"time":"2009/7/18 18:00","flow":0.94,"rain":0},{"time":"2009/7/18 19:00","flow":0.94,"rain":0},{"time":"2009/7/18 20:00","flow":0.94,"rain":0},{"time":"2009/7/18 21:00","flow":0.94,"rain":0},{"time":"2009/7/18 22:00","flow":0.94,"rain":0},{"time":"2009/7/18 23:00","flow":0.93,"rain":0},{"time":"2009/7/19 0:00","flow":0.92,"rain":0},{"time":"2009/7/19 1:00","flow":0.91,"rain":0},{"time":"2009/7/19 2:00","flow":0.9,"rain":0},{"time":"2009/7/19 3:00","flow":0.89,"rain":0},{"time":"2009/7/19 4:00","flow":0.88,"rain":0},{"time":"2009/7/19 5:00","flow":0.87,"rain":0},{"time":"2009/7/19 6:00","flow":0.87,"rain":0},{"time":"2009/7/19 7:00","flow":0.86,"rain":0},{"time":"2009/7/19 8:00","flow":0.86,"rain":0},{"time":"2009/7/19 9:00","flow":0.86,"rain":0},{"time":"2009/7/19 10:00","flow":0.86,"rain":0},{"time":"2009/7/19 11:00","flow":0.86,"rain":0},{"time":"2009/7/19 12:00","flow":0.86,"rain":0},{"time":"2009/7/19 13:00","flow":0.86,"rain":0},{"time":"2009/7/19 14:00","flow":0.86,"rain":0},{"time":"2009/7/19 15:00","flow":0.86,"rain":0},{"time":"2009/7/19 16:00","flow":0.86,"rain":0},{"time":"2009/7/19 17:00","flow":0.86,"rain":0},{"time":"2009/7/19 18:00","flow":0.86,"rain":0},{"time":"2009/7/19 19:00","flow":0.86,"rain":0},{"time":"2009/7/19 20:00","flow":0.86,"rain":0},{"time":"2009/7/19 21:00","flow":0.86,"rain":0},{"time":"2009/7/19 22:00","flow":0.85,"rain":0.02},{"time":"2009/7/19 23:00","flow":0.84,"rain":0.039},{"time":"2009/7/20 0:00","flow":0.82,"rain":0.04},{"time":"2009/7/20 1:00","flow":0.8,"rain":0.04},{"time":"2009/7/20 2:00","flow":0.78,"rain":0.04},{"time":"2009/7/20 3:00","flow":0.76,"rain":0.229},{"time":"2009/7/20 4:00","flow":0.75,"rain":0.079},{"time":"2009/7/20 5:00","flow":0.73,"rain":0},{"time":"2009/7/20 6:00","flow":0.72,"rain":0},{"time":"2009/7/20 7:00","flow":0.71,"rain":0},{"time":"2009/7/20 8:00","flow":0.71,"rain":0},{"time":"2009/7/20 9:00","flow":0.71,"rain":0},{"time":"2009/7/20 10:00","flow":0.71,"rain":0},{"time":"2009/7/20 11:00","flow":0.71,"rain":0},{"time":"2009/7/20 12:00","flow":0.71,"rain":0},{"time":"2009/7/20 13:00","flow":0.71,"rain":0},{"time":"2009/7/20 14:00","flow":0.71,"rain":0},{"time":"2009/7/20 15:00","flow":0.71,"rain":0},{"time":"2009/7/20 16:00","flow":0.71,"rain":0},{"time":"2009/7/20 17:00","flow":0.71,"rain":0},{"time":"2009/7/20 18:00","flow":0.71,"rain":0},{"time":"2009/7/20 19:00","flow":0.71,"rain":0},{"time":"2009/7/20 20:00","flow":0.71,"rain":0},{"time":"2009/7/20 21:00","flow":0.71,"rain":0},{"time":"2009/7/20 22:00","flow":0.71,"rain":0},{"time":"2009/7/20 23:00","flow":0.71,"rain":0},{"time":"2009/7/21 0:00","flow":0.71,"rain":0},{"time":"2009/7/21 1:00","flow":0.71,"rain":0},{"time":"2009/7/21 2:00","flow":0.71,"rain":0},{"time":"2009/7/21 3:00","flow":0.71,"rain":0},{"time":"2009/7/21 4:00","flow":0.71,"rain":0},{"time":"2009/7/21 5:00","flow":0.71,"rain":0},{"time":"2009/7/21 6:00","flow":0.71,"rain":0},{"time":"2009/7/21 7:00","flow":0.71,"rain":0},{"time":"2009/7/21 8:00","flow":0.71,"rain":0},{"time":"2009/7/21 9:00","flow":0.71,"rain":0.023},{"time":"2009/7/21 10:00","flow":0.71,"rain":0.069},{"time":"2009/7/21 11:00","flow":0.71,"rain":0.082},{"time":"2009/7/21 12:00","flow":0.71,"rain":0.082},{"time":"2009/7/21 13:00","flow":0.71,"rain":0.082},{"time":"2009/7/21 14:00","flow":0.71,"rain":0.503},{"time":"2009/7/21 15:00","flow":0.71,"rain":0.774},{"time":"2009/7/21 16:00","flow":0.71,"rain":0.038},{"time":"2009/7/21 17:00","flow":0.71,"rain":0.012},{"time":"2009/7/21 18:00","flow":0.71,"rain":0.012},{"time":"2009/7/21 19:00","flow":0.71,"rain":0.012},{"time":"2009/7/21 20:00","flow":0.71,"rain":0.016},{"time":"2009/7/21 21:00","flow":0.71,"rain":0.02},{"time":"2009/7/21 22:00","flow":0.71,"rain":0.028},{"time":"2009/7/21 23:00","flow":0.71,"rain":0.051},{"time":"2009/7/22 0:00","flow":0.71,"rain":0.06},{"time":"2009/7/22 1:00","flow":0.71,"rain":0.064},{"time":"2009/7/22 2:00","flow":0.71,"rain":0.19},{"time":"2009/7/22 3:00","flow":0.71,"rain":0.15},{"time":"2009/7/22 4:00","flow":0.71,"rain":0.164},{"time":"2009/7/22 5:00","flow":0.71,"rain":0.139},{"time":"2009/7/22 6:00","flow":0.71,"rain":0.13},{"time":"2009/7/22 7:00","flow":0.71,"rain":0.085},{"time":"2009/7/22 8:00","flow":0.71,"rain":0.031},{"time":"2009/7/22 9:00","flow":0.71,"rain":0.023},{"time":"2009/7/22 10:00","flow":0.71,"rain":0.022},{"time":"2009/7/22 11:00","flow":0.71,"rain":0.007},{"time":"2009/7/22 12:00","flow":0.71,"rain":0.005},{"time":"2009/7/22 13:00","flow":0.71,"rain":0.005},{"time":"2009/7/22 14:00","flow":0.71,"rain":0.001},{"time":"2009/7/22 15:00","flow":0.71,"rain":0},{"time":"2009/7/22 16:00","flow":0.71,"rain":0.02},{"time":"2009/7/22 17:00","flow":0.71,"rain":0.048},{"time":"2009/7/22 18:00","flow":0.71,"rain":0.048},{"time":"2009/7/22 19:00","flow":0.71,"rain":0.053},{"time":"2009/7/22 20:00","flow":0.71,"rain":0.056},{"time":"2009/7/22 21:00","flow":0.71,"rain":0.036},{"time":"2009/7/22 22:00","flow":0.71,"rain":0.008},{"time":"2009/7/22 23:00","flow":0.71,"rain":0.008},{"time":"2009/7/23 0:00","flow":0.71,"rain":0.004},{"time":"2009/7/23 1:00","flow":0.71,"rain":0},{"time":"2009/7/23 2:00","flow":0.71,"rain":0},{"time":"2009/7/23 3:00","flow":0.71,"rain":0},{"time":"2009/7/23 4:00","flow":0.71,"rain":0},{"time":"2009/7/23 5:00","flow":0.71,"rain":0},{"time":"2009/7/23 6:00","flow":0.71,"rain":0},{"time":"2009/7/23 7:00","flow":0.71,"rain":0},{"time":"2009/7/23 8:00","flow":0.71,"rain":0},{"time":"2009/7/23 9:00","flow":0.71,"rain":0},{"time":"2009/7/23 10:00","flow":0.71,"rain":0},{"time":"2009/7/23 11:00","flow":0.71,"rain":0},{"time":"2009/7/23 12:00","flow":0.71,"rain":0},{"time":"2009/7/23 13:00","flow":0.71,"rain":0},{"time":"2009/7/23 14:00","flow":0.71,"rain":0},{"time":"2009/7/23 15:00","flow":0.71,"rain":0},{"time":"2009/7/23 16:00","flow":0.71,"rain":0},{"time":"2009/7/23 17:00","flow":0.71,"rain":0},{"time":"2009/7/23 18:00","flow":0.71,"rain":0},{"time":"2009/7/23 19:00","flow":0.71,"rain":0},{"time":"2009/7/23 20:00","flow":0.71,"rain":0},{"time":"2009/7/23 21:00","flow":0.71,"rain":0},{"time":"2009/7/23 22:00","flow":0.71,"rain":0},{"time":"2009/7/23 23:00","flow":0.71,"rain":0},{"time":"2009/7/24 0:00","flow":0.71,"rain":0},{"time":"2009/7/24 1:00","flow":0.71,"rain":0},{"time":"2009/7/24 2:00","flow":0.71,"rain":0},{"time":"2009/7/24 3:00","flow":0.71,"rain":0},{"time":"2009/7/24 4:00","flow":0.71,"rain":0},{"time":"2009/7/24 5:00","flow":0.71,"rain":0},{"time":"2009/7/24 6:00","flow":0.71,"rain":0},{"time":"2009/7/24 7:00","flow":0.71,"rain":0},{"time":"2009/7/24 8:00","flow":0.71,"rain":0},{"time":"2009/7/24 9:00","flow":0.71,"rain":0},{"time":"2009/7/24 10:00","flow":0.71,"rain":0},{"time":"2009/7/24 11:00","flow":0.71,"rain":0},{"time":"2009/7/24 12:00","flow":0.71,"rain":0},{"time":"2009/7/24 13:00","flow":0.71,"rain":0},{"time":"2009/7/24 14:00","flow":0.71,"rain":0},{"time":"2009/7/24 15:00","flow":0.71,"rain":0},{"time":"2009/7/24 16:00","flow":0.71,"rain":0},{"time":"2009/7/24 17:00","flow":0.71,"rain":0},{"time":"2009/7/24 18:00","flow":0.71,"rain":0},{"time":"2009/7/24 19:00","flow":0.71,"rain":0},{"time":"2009/7/24 20:00","flow":0.71,"rain":0},{"time":"2009/7/24 21:00","flow":0.71,"rain":0},{"time":"2009/7/24 22:00","flow":0.71,"rain":0},{"time":"2009/7/24 23:00","flow":0.71,"rain":0},{"time":"2009/7/25 0:00","flow":0.71,"rain":0},{"time":"2009/7/25 1:00","flow":0.71,"rain":0},{"time":"2009/7/25 2:00","flow":0.71,"rain":0},{"time":"2009/7/25 3:00","flow":0.71,"rain":0},{"time":"2009/7/25 4:00","flow":0.71,"rain":0},{"time":"2009/7/25 5:00","flow":0.71,"rain":0},{"time":"2009/7/25 6:00","flow":0.71,"rain":0},{"time":"2009/7/25 7:00","flow":0.71,"rain":0},{"time":"2009/7/25 8:00","flow":0.71,"rain":0},{"time":"2009/7/25 9:00","flow":0.71,"rain":0},{"time":"2009/7/25 10:00","flow":0.71,"rain":0},{"time":"2009/7/25 11:00","flow":0.71,"rain":0},{"time":"2009/7/25 12:00","flow":0.71,"rain":0},{"time":"2009/7/25 13:00","flow":0.71,"rain":0},{"time":"2009/7/25 14:00","flow":0.71,"rain":0},{"time":"2009/7/25 15:00","flow":0.71,"rain":0},{"time":"2009/7/25 16:00","flow":0.71,"rain":0},{"time":"2009/7/25 17:00","flow":0.71,"rain":0},{"time":"2009/7/25 18:00","flow":0.71,"rain":0},{"time":"2009/7/25 19:00","flow":0.71,"rain":0},{"time":"2009/7/25 20:00","flow":0.71,"rain":0},{"time":"2009/7/25 21:00","flow":0.71,"rain":0},{"time":"2009/7/25 22:00","flow":0.71,"rain":0},{"time":"2009/7/25 23:00","flow":0.71,"rain":0},{"time":"2009/7/26 0:00","flow":0.71,"rain":0},{"time":"2009/7/26 1:00","flow":0.71,"rain":0},{"time":"2009/7/26 2:00","flow":0.71,"rain":0},{"time":"2009/7/26 3:00","flow":0.71,"rain":0},{"time":"2009/7/26 4:00","flow":0.71,"rain":0.013},{"time":"2009/7/26 5:00","flow":0.71,"rain":0.017},{"time":"2009/7/26 6:00","flow":0.71,"rain":0.036},{"time":"2009/7/26 7:00","flow":0.71,"rain":0.068},{"time":"2009/7/26 8:00","flow":0.71,"rain":0.095},{"time":"2009/7/26 9:00","flow":0.71,"rain":0.233},{"time":"2009/7/26 10:00","flow":0.71,"rain":0.272},{"time":"2009/7/26 11:00","flow":0.71,"rain":0.377},{"time":"2009/7/26 12:00","flow":0.71,"rain":0.722},{"time":"2009/7/26 13:00","flow":0.71,"rain":1.494},{"time":"2009/7/26 14:00","flow":0.71,"rain":3.756},{"time":"2009/7/26 15:00","flow":0.71,"rain":0.954},{"time":"2009/7/26 16:00","flow":0.71,"rain":0.439},{"time":"2009/7/26 17:00","flow":0.71,"rain":0.442},{"time":"2009/7/26 18:00","flow":0.71,"rain":0.462},{"time":"2009/7/26 19:00","flow":0.71,"rain":0.373},{"time":"2009/7/26 20:00","flow":0.71,"rain":0.249},{"time":"2009/7/26 21:00","flow":0.71,"rain":0.214},{"time":"2009/7/26 22:00","flow":0.71,"rain":0.1},{"time":"2009/7/26 23:00","flow":0.72,"rain":0.044},{"time":"2009/7/27 0:00","flow":0.73,"rain":0.037},{"time":"2009/7/27 1:00","flow":0.74,"rain":0.023},{"time":"2009/7/27 2:00","flow":0.76,"rain":0.002},{"time":"2009/7/27 3:00","flow":0.78,"rain":0},{"time":"2009/7/27 4:00","flow":0.79,"rain":0},{"time":"2009/7/27 5:00","flow":0.82,"rain":0},{"time":"2009/7/27 6:00","flow":0.84,"rain":0},{"time":"2009/7/27 7:00","flow":0.86,"rain":0},{"time":"2009/7/27 8:00","flow":0.89,"rain":0},{"time":"2009/7/27 9:00","flow":0.91,"rain":0.02},{"time":"2009/7/27 10:00","flow":0.94,"rain":0.024},{"time":"2009/7/27 11:00","flow":0.97,"rain":0.024},{"time":"2009/7/27 12:00","flow":1,"rain":0.024},{"time":"2009/7/27 13:00","flow":1.02,"rain":0.024},{"time":"2009/7/27 14:00","flow":1.05,"rain":0.004},{"time":"2009/7/27 15:00","flow":1.08,"rain":0},{"time":"2009/7/27 16:00","flow":1.11,"rain":0},{"time":"2009/7/27 17:00","flow":1.14,"rain":0},{"time":"2009/7/27 18:00","flow":1.17,"rain":0},{"time":"2009/7/27 19:00","flow":1.19,"rain":0},{"time":"2009/7/27 20:00","flow":1.22,"rain":0},{"time":"2009/7/27 21:00","flow":1.25,"rain":0},{"time":"2009/7/27 22:00","flow":1.27,"rain":0},{"time":"2009/7/27 23:00","flow":1.29,"rain":0},{"time":"2009/7/28 0:00","flow":1.31,"rain":0},{"time":"2009/7/28 1:00","flow":1.33,"rain":0},{"time":"2009/7/28 2:00","flow":1.35,"rain":0},{"time":"2009/7/28 3:00","flow":1.36,"rain":0},{"time":"2009/7/28 4:00","flow":1.38,"rain":0},{"time":"2009/7/28 5:00","flow":1.39,"rain":0},{"time":"2009/7/28 6:00","flow":1.39,"rain":0},{"time":"2009/7/28 7:00","flow":1.4,"rain":0},{"time":"2009/7/28 8:00","flow":1.4,"rain":0},{"time":"2009/7/28 9:00","flow":1.4,"rain":0},{"time":"2009/7/28 10:00","flow":1.39,"rain":0},{"time":"2009/7/28 11:00","flow":1.37,"rain":0},{"time":"2009/7/28 12:00","flow":1.35,"rain":0},{"time":"2009/7/28 13:00","flow":1.32,"rain":0},{"time":"2009/7/28 14:00","flow":1.29,"rain":0},{"time":"2009/7/28 15:00","flow":1.26,"rain":0},{"time":"2009/7/28 16:00","flow":1.22,"rain":0},{"time":"2009/7/28 17:00","flow":1.18,"rain":0},{"time":"2009/7/28 18:00","flow":1.14,"rain":0},{"time":"2009/7/28 19:00","flow":1.1,"rain":0},{"time":"2009/7/28 20:00","flow":1.05,"rain":0},{"time":"2009/7/28 21:00","flow":1.01,"rain":0},{"time":"2009/7/28 22:00","flow":0.97,"rain":0},{"time":"2009/7/28 23:00","flow":0.93,"rain":0},{"time":"2009/7/29 0:00","flow":0.89,"rain":0},{"time":"2009/7/29 1:00","flow":0.85,"rain":0},{"time":"2009/7/29 2:00","flow":0.82,"rain":0},{"time":"2009/7/29 3:00","flow":0.78,"rain":0},{"time":"2009/7/29 4:00","flow":0.76,"rain":0},{"time":"2009/7/29 5:00","flow":0.74,"rain":0},{"time":"2009/7/29 6:00","flow":0.72,"rain":0},{"time":"2009/7/29 7:00","flow":0.71,"rain":0},{"time":"2009/7/29 8:00","flow":0.71,"rain":0},{"time":"2009/7/29 9:00","flow":0.71,"rain":0},{"time":"2009/7/29 10:00","flow":0.71,"rain":0},{"time":"2009/7/29 11:00","flow":0.71,"rain":0},{"time":"2009/7/29 12:00","flow":0.71,"rain":0},{"time":"2009/7/29 13:00","flow":0.71,"rain":0},{"time":"2009/7/29 14:00","flow":0.71,"rain":0},{"time":"2009/7/29 15:00","flow":0.71,"rain":0},{"time":"2009/7/29 16:00","flow":0.71,"rain":0},{"time":"2009/7/29 17:00","flow":0.71,"rain":0},{"time":"2009/7/29 18:00","flow":0.71,"rain":0},{"time":"2009/7/29 19:00","flow":0.71,"rain":0},{"time":"2009/7/29 20:00","flow":0.71,"rain":0},{"time":"2009/7/29 21:00","flow":0.71,"rain":0},{"time":"2009/7/29 22:00","flow":0.71,"rain":0},{"time":"2009/7/29 23:00","flow":0.72,"rain":0},{"time":"2009/7/30 0:00","flow":0.73,"rain":0},{"time":"2009/7/30 1:00","flow":0.74,"rain":0},{"time":"2009/7/30 2:00","flow":0.75,"rain":0},{"time":"2009/7/30 3:00","flow":0.77,"rain":0},{"time":"2009/7/30 4:00","flow":0.78,"rain":0},{"time":"2009/7/30 5:00","flow":0.8,"rain":0},{"time":"2009/7/30 6:00","flow":0.82,"rain":0},{"time":"2009/7/30 7:00","flow":0.84,"rain":0},{"time":"2009/7/30 8:00","flow":0.87,"rain":0},{"time":"2009/7/30 9:00","flow":0.89,"rain":0.008},{"time":"2009/7/30 10:00","flow":0.92,"rain":0.017},{"time":"2009/7/30 11:00","flow":0.94,"rain":0.017},{"time":"2009/7/30 12:00","flow":0.97,"rain":0.045},{"time":"2009/7/30 13:00","flow":0.99,"rain":0.186},{"time":"2009/7/30 14:00","flow":1.02,"rain":0.308},{"time":"2009/7/30 15:00","flow":1.05,"rain":0.241},{"time":"2009/7/30 16:00","flow":1.08,"rain":0.241},{"time":"2009/7/30 17:00","flow":1.1,"rain":0.893},{"time":"2009/7/30 18:00","flow":1.13,"rain":4.067},{"time":"2009/7/30 19:00","flow":1.16,"rain":4.494},{"time":"2009/7/30 20:00","flow":1.18,"rain":5.015},{"time":"2009/7/30 21:00","flow":1.21,"rain":3.494},{"time":"2009/7/30 22:00","flow":1.23,"rain":2.057},{"time":"2009/7/30 23:00","flow":1.26,"rain":1.411},{"time":"2009/7/31 0:00","flow":1.28,"rain":0.718},{"time":"2009/7/31 1:00","flow":1.3,"rain":0.407},{"time":"2009/7/31 2:00","flow":1.32,"rain":0.313},{"time":"2009/7/31 3:00","flow":1.34,"rain":0.339},{"time":"2009/7/31 4:00","flow":1.35,"rain":1.537},{"time":"2009/7/31 5:00","flow":1.37,"rain":1.105},{"time":"2009/7/31 6:00","flow":1.38,"rain":0.218},{"time":"2009/7/31 7:00","flow":1.39,"rain":0.136},{"time":"2009/7/31 8:00","flow":1.4,"rain":0.03},{"time":"2009/7/31 9:00","flow":1.41,"rain":0.005},{"time":"2009/7/31 10:00","flow":1.41,"rain":0},{"time":"2009/7/31 11:00","flow":1.42,"rain":0},{"time":"2009/7/31 12:00","flow":1.42,"rain":0},{"time":"2009/7/31 13:00","flow":1.43,"rain":0},{"time":"2009/7/31 14:00","flow":1.43,"rain":0},{"time":"2009/7/31 15:00","flow":1.43,"rain":0},{"time":"2009/7/31 16:00","flow":1.44,"rain":0},{"time":"2009/7/31 17:00","flow":1.44,"rain":0},{"time":"2009/7/31 18:00","flow":1.44,"rain":0},{"time":"2009/7/31 19:00","flow":1.44,"rain":0},{"time":"2009/7/31 20:00","flow":1.45,"rain":0},{"time":"2009/7/31 21:00","flow":1.45,"rain":0},{"time":"2009/7/31 22:00","flow":1.45,"rain":0},{"time":"2009/7/31 23:00","flow":1.46,"rain":0},{"time":"2009/8/1 0:00","flow":1.46,"rain":0},{"time":"2009/8/1 1:00","flow":1.46,"rain":0},{"time":"2009/8/1 2:00","flow":1.47,"rain":0},{"time":"2009/8/1 3:00","flow":1.47,"rain":0},{"time":"2009/8/1 4:00","flow":1.48,"rain":0.037},{"time":"2009/8/1 5:00","flow":1.48,"rain":0.448},{"time":"2009/8/1 6:00","flow":1.49,"rain":1.2},{"time":"2009/8/1 7:00","flow":1.5,"rain":1.309},{"time":"2009/8/1 8:00","flow":1.51,"rain":1.309},{"time":"2009/8/1 9:00","flow":1.54,"rain":1.425},{"time":"2009/8/1 10:00","flow":1.62,"rain":1.223},{"time":"2009/8/1 11:00","flow":1.73,"rain":0.471},{"time":"2009/8/1 12:00","flow":1.88,"rain":0.767},{"time":"2009/8/1 13:00","flow":2.05,"rain":0.423},{"time":"2009/8/1 14:00","flow":2.24,"rain":0.273},{"time":"2009/8/1 15:00","flow":2.45,"rain":0.412},{"time":"2009/8/1 16:00","flow":2.67,"rain":0.646},{"time":"2009/8/1 17:00","flow":2.89,"rain":0.481},{"time":"2009/8/1 18:00","flow":3.11,"rain":0.239},{"time":"2009/8/1 19:00","flow":3.31,"rain":0.131},{"time":"2009/8/1 20:00","flow":3.51,"rain":0},{"time":"2009/8/1 21:00","flow":3.69,"rain":0},{"time":"2009/8/1 22:00","flow":3.86,"rain":0},{"time":"2009/8/1 23:00","flow":4.03,"rain":0},{"time":"2009/8/2 0:00","flow":4.18,"rain":0},{"time":"2009/8/2 1:00","flow":4.33,"rain":0},{"time":"2009/8/2 2:00","flow":4.48,"rain":0},{"time":"2009/8/2 3:00","flow":4.62,"rain":0},{"time":"2009/8/2 4:00","flow":4.76,"rain":0},{"time":"2009/8/2 5:00","flow":4.89,"rain":0},{"time":"2009/8/2 6:00","flow":5.02,"rain":0},{"time":"2009/8/2 7:00","flow":5.16,"rain":0},{"time":"2009/8/2 8:00","flow":5.29,"rain":0},{"time":"2009/8/2 9:00","flow":5.43,"rain":0},{"time":"2009/8/2 10:00","flow":5.57,"rain":0},{"time":"2009/8/2 11:00","flow":5.71,"rain":0},{"time":"2009/8/2 12:00","flow":5.86,"rain":0},{"time":"2009/8/2 13:00","flow":6.02,"rain":0},{"time":"2009/8/2 14:00","flow":6.18,"rain":0},{"time":"2009/8/2 15:00","flow":6.36,"rain":0},{"time":"2009/8/2 16:00","flow":6.54,"rain":0},{"time":"2009/8/2 17:00","flow":6.73,"rain":0},{"time":"2009/8/2 18:00","flow":6.93,"rain":0},{"time":"2009/8/2 19:00","flow":7.15,"rain":0},{"time":"2009/8/2 20:00","flow":7.38,"rain":0},{"time":"2009/8/2 21:00","flow":7.62,"rain":0.044},{"time":"2009/8/2 22:00","flow":7.88,"rain":0.15},{"time":"2009/8/2 23:00","flow":8.16,"rain":0.223},{"time":"2009/8/3 0:00","flow":8.46,"rain":0.388},{"time":"2009/8/3 1:00","flow":8.77,"rain":0.513},{"time":"2009/8/3 2:00","flow":9.11,"rain":0.883},{"time":"2009/8/3 3:00","flow":9.46,"rain":2.828},{"time":"2009/8/3 4:00","flow":9.84,"rain":4.786},{"time":"2009/8/3 5:00","flow":10.24,"rain":5.959},{"time":"2009/8/3 6:00","flow":10.67,"rain":4.95},{"time":"2009/8/3 7:00","flow":11.12,"rain":6.434},{"time":"2009/8/3 8:00","flow":11.6,"rain":6.319},{"time":"2009/8/3 9:00","flow":12.3,"rain":3.35},{"time":"2009/8/3 10:00","flow":13.66,"rain":2.806},{"time":"2009/8/3 11:00","flow":16,"rain":4.204},{"time":"2009/8/3 12:00","flow":38.43,"rain":1.395},{"time":"2009/8/3 13:00","flow":82.21,"rain":1.015},{"time":"2009/8/3 14:00","flow":146.6,"rain":1.015},{"time":"2009/8/3 15:00","flow":218.7,"rain":0.836},{"time":"2009/8/3 16:00","flow":226,"rain":0.74},{"time":"2009/8/3 17:00","flow":225.23,"rain":0.72},{"time":"2009/8/3 18:00","flow":223.08,"rain":0.615},{"time":"2009/8/3 19:00","flow":219.78,"rain":0.477},{"time":"2009/8/3 20:00","flow":212,"rain":0.192},{"time":"2009/8/3 21:00","flow":199.82,"rain":0.046},{"time":"2009/8/3 22:00","flow":184.6,"rain":0.007},{"time":"2009/8/3 23:00","flow":168,"rain":0.007},{"time":"2009/8/4 0:00","flow":151.65,"rain":0.007},{"time":"2009/8/4 1:00","flow":137.21,"rain":0.007},{"time":"2009/8/4 2:00","flow":126.31,"rain":0.007},{"time":"2009/8/4 3:00","flow":119.94,"rain":0.007},{"time":"2009/8/4 4:00","flow":115.52,"rain":0.007},{"time":"2009/8/4 5:00","flow":112.06,"rain":0.008},{"time":"2009/8/4 6:00","flow":108.92,"rain":0.005},{"time":"2009/8/4 7:00","flow":105.44,"rain":0.005},{"time":"2009/8/4 8:00","flow":101,"rain":0.005},{"time":"2009/8/4 9:00","flow":94.56,"rain":0.005},{"time":"2009/8/4 10:00","flow":86.36,"rain":0},{"time":"2009/8/4 11:00","flow":77.67,"rain":0},{"time":"2009/8/4 12:00","flow":69.76,"rain":0},{"time":"2009/8/4 13:00","flow":63.9,"rain":0},{"time":"2009/8/4 14:00","flow":60.38,"rain":0},{"time":"2009/8/4 15:00","flow":57.41,"rain":0},{"time":"2009/8/4 16:00","flow":54.84,"rain":0},{"time":"2009/8/4 17:00","flow":52.57,"rain":0},{"time":"2009/8/4 18:00","flow":50.56,"rain":0},{"time":"2009/8/4 19:00","flow":48.71,"rain":0},{"time":"2009/8/4 20:00","flow":46.97,"rain":0},{"time":"2009/8/4 21:00","flow":45.25,"rain":0},{"time":"2009/8/4 22:00","flow":43.48,"rain":0},{"time":"2009/8/4 23:00","flow":41.6,"rain":0},{"time":"2009/8/5 0:00","flow":39.5,"rain":0},{"time":"2009/8/5 1:00","flow":37.19,"rain":0},{"time":"2009/8/5 2:00","flow":34.81,"rain":0},{"time":"2009/8/5 3:00","flow":32.46,"rain":0},{"time":"2009/8/5 4:00","flow":30.27,"rain":0},{"time":"2009/8/5 5:00","flow":28.36,"rain":0},{"time":"2009/8/5 6:00","flow":26.85,"rain":0},{"time":"2009/8/5 7:00","flow":25.86,"rain":0},{"time":"2009/8/5 8:00","flow":25.5,"rain":0},{"time":"2009/8/5 9:00","flow":25.5,"rain":0},{"time":"2009/8/5 10:00","flow":25.5,"rain":0},{"time":"2009/8/5 11:00","flow":25.5,"rain":0},{"time":"2009/8/5 12:00","flow":25.5,"rain":0},{"time":"2009/8/5 13:00","flow":25.5,"rain":0},{"time":"2009/8/5 14:00","flow":25.5,"rain":0},{"time":"2009/8/5 15:00","flow":25.5,"rain":0},{"time":"2009/8/5 16:00","flow":25.5,"rain":0},{"time":"2009/8/5 17:00","flow":25.5,"rain":0},{"time":"2009/8/5 18:00","flow":25.5,"rain":0},{"time":"2009/8/5 19:00","flow":25.5,"rain":0},{"time":"2009/8/5 20:00","flow":25.5,"rain":0},{"time":"2009/8/5 21:00","flow":25.27,"rain":0},{"time":"2009/8/5 22:00","flow":24.65,"rain":0},{"time":"2009/8/5 23:00","flow":23.7,"rain":0},{"time":"2009/8/6 0:00","flow":22.52,"rain":0},{"time":"2009/8/6 1:00","flow":21.17,"rain":0},{"time":"2009/8/6 2:00","flow":19.75,"rain":0},{"time":"2009/8/6 3:00","flow":18.33,"rain":0},{"time":"2009/8/6 4:00","flow":16.98,"rain":0},{"time":"2009/8/6 5:00","flow":15.8,"rain":0},{"time":"2009/8/6 6:00","flow":14.85,"rain":0},{"time":"2009/8/6 7:00","flow":14.23,"rain":0},{"time":"2009/8/6 8:00","flow":14,"rain":0},{"time":"2009/8/6 9:00","flow":14.02,"rain":0},{"time":"2009/8/6 10:00","flow":14.08,"rain":0},{"time":"2009/8/6 11:00","flow":14.17,"rain":0},{"time":"2009/8/6 12:00","flow":14.29,"rain":0},{"time":"2009/8/6 13:00","flow":14.44,"rain":0},{"time":"2009/8/6 14:00","flow":14.61,"rain":0},{"time":"2009/8/6 15:00","flow":14.8,"rain":0},{"time":"2009/8/6 16:00","flow":15.01,"rain":0},{"time":"2009/8/6 17:00","flow":15.23,"rain":0},{"time":"2009/8/6 18:00","flow":15.47,"rain":0},{"time":"2009/8/6 19:00","flow":15.71,"rain":0},{"time":"2009/8/6 20:00","flow":15.95,"rain":0},{"time":"2009/8/6 21:00","flow":16.19,"rain":0},{"time":"2009/8/6 22:00","flow":16.43,"rain":0},{"time":"2009/8/6 23:00","flow":16.67,"rain":0.001},{"time":"2009/8/7 0:00","flow":16.89,"rain":0.012},{"time":"2009/8/7 1:00","flow":17.1,"rain":0.012},{"time":"2009/8/7 2:00","flow":17.29,"rain":0.012},{"time":"2009/8/7 3:00","flow":17.46,"rain":0.012},{"time":"2009/8/7 4:00","flow":17.61,"rain":0.011},{"time":"2009/8/7 5:00","flow":17.73,"rain":0},{"time":"2009/8/7 6:00","flow":17.82,"rain":0},{"time":"2009/8/7 7:00","flow":17.88,"rain":0},{"time":"2009/8/7 8:00","flow":17.9,"rain":0},{"time":"2009/8/7 9:00","flow":17.63,"rain":0},{"time":"2009/8/7 10:00","flow":16.88,"rain":0},{"time":"2009/8/7 11:00","flow":15.75,"rain":0},{"time":"2009/8/7 12:00","flow":14.33,"rain":0},{"time":"2009/8/7 13:00","flow":12.71,"rain":0},{"time":"2009/8/7 14:00","flow":10.98,"rain":0},{"time":"2009/8/7 15:00","flow":9.23,"rain":0},{"time":"2009/8/7 16:00","flow":7.56,"rain":0},{"time":"2009/8/7 17:00","flow":6.05,"rain":0},{"time":"2009/8/7 18:00","flow":4.81,"rain":0},{"time":"2009/8/7 19:00","flow":3.92,"rain":0},{"time":"2009/8/7 20:00","flow":3.47,"rain":0},{"time":"2009/8/7 21:00","flow":3.28,"rain":0},{"time":"2009/8/7 22:00","flow":3.1,"rain":0},{"time":"2009/8/7 23:00","flow":2.93,"rain":0},{"time":"2009/8/8 0:00","flow":2.76,"rain":0},{"time":"2009/8/8 1:00","flow":2.61,"rain":0},{"time":"2009/8/8 2:00","flow":2.46,"rain":0},{"time":"2009/8/8 3:00","flow":2.32,"rain":0},{"time":"2009/8/8 4:00","flow":2.19,"rain":0},{"time":"2009/8/8 5:00","flow":2.07,"rain":0},{"time":"2009/8/8 6:00","flow":1.96,"rain":0},{"time":"2009/8/8 7:00","flow":1.85,"rain":0},{"time":"2009/8/8 8:00","flow":1.75,"rain":0},{"time":"2009/8/8 9:00","flow":1.66,"rain":0},{"time":"2009/8/8 10:00","flow":1.58,"rain":0},{"time":"2009/8/8 11:00","flow":1.51,"rain":0},{"time":"2009/8/8 12:00","flow":1.44,"rain":0},{"time":"2009/8/8 13:00","flow":1.39,"rain":0},{"time":"2009/8/8 14:00","flow":1.34,"rain":0},{"time":"2009/8/8 15:00","flow":1.29,"rain":0},{"time":"2009/8/8 16:00","flow":1.26,"rain":0},{"time":"2009/8/8 17:00","flow":1.23,"rain":0},{"time":"2009/8/8 18:00","flow":1.22,"rain":0},{"time":"2009/8/8 19:00","flow":1.2,"rain":0},{"time":"2009/8/8 20:00","flow":1.2,"rain":0},{"time":"2009/8/8 21:00","flow":1.2,"rain":0},{"time":"2009/8/8 22:00","flow":1.2,"rain":0},{"time":"2009/8/8 23:00","flow":1.2,"rain":0},{"time":"2009/8/9 0:00","flow":1.2,"rain":0},{"time":"2009/8/9 1:00","flow":1.21,"rain":0},{"time":"2009/8/9 2:00","flow":1.21,"rain":0.002},{"time":"2009/8/9 3:00","flow":1.21,"rain":0.012},{"time":"2009/8/9 4:00","flow":1.21,"rain":0.028},{"time":"2009/8/9 5:00","flow":1.22,"rain":0.028},{"time":"2009/8/9 6:00","flow":1.22,"rain":0.028},{"time":"2009/8/9 7:00","flow":1.22,"rain":0.138},{"time":"2009/8/9 8:00","flow":1.23,"rain":0.092},{"time":"2009/8/9 9:00","flow":1.23,"rain":0.082},{"time":"2009/8/9 10:00","flow":1.23,"rain":0.082},{"time":"2009/8/9 11:00","flow":1.24,"rain":0.096},{"time":"2009/8/9 12:00","flow":1.24,"rain":0.719},{"time":"2009/8/9 13:00","flow":1.25,"rain":0.155},{"time":"2009/8/9 14:00","flow":1.25,"rain":0.042},{"time":"2009/8/9 15:00","flow":1.25,"rain":0.047},{"time":"2009/8/9 16:00","flow":1.26,"rain":0.129},{"time":"2009/8/9 17:00","flow":1.26,"rain":0.021},{"time":"2009/8/9 18:00","flow":1.27,"rain":0.021},{"time":"2009/8/9 19:00","flow":1.27,"rain":0.014},{"time":"2009/8/9 20:00","flow":1.27,"rain":0.009},{"time":"2009/8/9 21:00","flow":1.28,"rain":0.029},{"time":"2009/8/9 22:00","flow":1.28,"rain":0.067},{"time":"2009/8/9 23:00","flow":1.28,"rain":0.088},{"time":"2009/8/10 0:00","flow":1.29,"rain":0.095},{"time":"2009/8/10 1:00","flow":1.29,"rain":0.095},{"time":"2009/8/10 2:00","flow":1.29,"rain":0.138},{"time":"2009/8/10 3:00","flow":1.29,"rain":0.091},{"time":"2009/8/10 4:00","flow":1.3,"rain":0.032},{"time":"2009/8/10 5:00","flow":1.3,"rain":0.025},{"time":"2009/8/10 6:00","flow":1.3,"rain":0.025},{"time":"2009/8/10 7:00","flow":1.3,"rain":0.003},{"time":"2009/8/10 8:00","flow":1.3,"rain":0},{"time":"2009/8/10 9:00","flow":1.3,"rain":0},{"time":"2009/8/10 10:00","flow":1.3,"rain":0},{"time":"2009/8/10 11:00","flow":1.3,"rain":0},{"time":"2009/8/10 12:00","flow":1.3,"rain":0},{"time":"2009/8/10 13:00","flow":1.3,"rain":0},{"time":"2009/8/10 14:00","flow":1.3,"rain":0},{"time":"2009/8/10 15:00","flow":1.29,"rain":0},{"time":"2009/8/10 16:00","flow":1.29,"rain":0},{"time":"2009/8/10 17:00","flow":1.29,"rain":0},{"time":"2009/8/10 18:00","flow":1.29,"rain":0},{"time":"2009/8/10 19:00","flow":1.28,"rain":0},{"time":"2009/8/10 20:00","flow":1.28,"rain":0.002},{"time":"2009/8/10 21:00","flow":1.28,"rain":0.045},{"time":"2009/8/10 22:00","flow":1.27,"rain":0.228},{"time":"2009/8/10 23:00","flow":1.27,"rain":0.297},{"time":"2009/8/11 0:00","flow":1.26,"rain":0.325},{"time":"2009/8/11 1:00","flow":1.25,"rain":0.339},{"time":"2009/8/11 2:00","flow":1.25,"rain":0.581},{"time":"2009/8/11 3:00","flow":1.24,"rain":1.244},{"time":"2009/8/11 4:00","flow":1.23,"rain":0.796},{"time":"2009/8/11 5:00","flow":1.23,"rain":0.517},{"time":"2009/8/11 6:00","flow":1.22,"rain":0.227},{"time":"2009/8/11 7:00","flow":1.21,"rain":0.053},{"time":"2009/8/11 8:00","flow":1.2,"rain":0.006},{"time":"2009/8/11 9:00","flow":1.16,"rain":0},{"time":"2009/8/11 10:00","flow":1.06,"rain":0},{"time":"2009/8/11 11:00","flow":0.95,"rain":0},{"time":"2009/8/11 12:00","flow":0.83,"rain":0},{"time":"2009/8/11 13:00","flow":0.74,"rain":0},{"time":"2009/8/11 14:00","flow":0.71,"rain":0},{"time":"2009/8/11 15:00","flow":0.71,"rain":0},{"time":"2009/8/11 16:00","flow":0.71,"rain":0},{"time":"2009/8/11 17:00","flow":0.71,"rain":0},{"time":"2009/8/11 18:00","flow":0.71,"rain":0.003},{"time":"2009/8/11 19:00","flow":0.71,"rain":0.005},{"time":"2009/8/11 20:00","flow":0.71,"rain":0.005},{"time":"2009/8/11 21:00","flow":0.71,"rain":0.005},{"time":"2009/8/11 22:00","flow":0.71,"rain":0.005},{"time":"2009/8/11 23:00","flow":0.71,"rain":0.081}]
diff --git a/src/views/chart/assets/json/bubble.json b/src/views/chart/assets/json/bubble.json
new file mode 100644
index 0000000000000000000000000000000000000000..0aef6f225470517b48edc93524a72d88a1e15f99
--- /dev/null
+++ b/src/views/chart/assets/json/bubble.json
@@ -0,0 +1 @@
+[{"continent": "Americas","Country": "Argentina","LifeExpectancy": 75.32,"GDP": 12779.37964,"Population": 40301927},{"continent": "Americas","Country": "Brazil","LifeExpectancy": 72.39,"GDP": 9065.800825,"Population": 190010647},{"continent": "Americas","Country": "Canada","LifeExpectancy": 80.653,"GDP": 36319.23501,"Population": 33390141},{"continent": "Americas","Country": "Chile","LifeExpectancy": 78.553,"GDP": 13171.63885,"Population": 16284741},{"continent": "Americas","Country": "Colombia","LifeExpectancy": 72.889,"GDP": 7006.580419,"Population": 44227550},{"continent": "Americas","Country": "Costa Rica","LifeExpectancy": 78.782,"GDP": 9645.06142,"Population": 4133884},{"continent": "Americas","Country": "Cuba","LifeExpectancy": 78.273,"GDP": 8948.102923,"Population": 11416987},{"continent": "Americas","Country": "Dominican Republic","LifeExpectancy": 72.235,"GDP": 6025.374752,"Population": 9319622},{"continent": "Americas","Country": "Ecuador","LifeExpectancy": 74.994,"GDP": 6873.262326,"Population": 13755680},{"continent": "Americas","Country": "El Salvador","LifeExpectancy": 71.878,"GDP": 5728.353514,"Population": 6939688},{"continent": "Americas","Country": "Guatemala","LifeExpectancy": 70.259,"GDP": 5186.050003,"Population": 12572928},{"continent": "Americas","Country": "Honduras","LifeExpectancy": 70.198,"GDP": 3548.330846,"Population": 7483763},{"continent": "Americas","Country": "Jamaica","LifeExpectancy": 72.567,"GDP": 7320.880262,"Population": 2780132},{"continent": "Americas","Country": "Mexico","LifeExpectancy": 76.195,"GDP": 11977.57496,"Population": 108700891},{"continent": "Americas","Country": "Nicaragua","LifeExpectancy": 72.899,"GDP": 2749.320965,"Population": 5675356},{"continent": "Americas","Country": "Panama","LifeExpectancy": 75.537,"GDP": 9809.185636,"Population": 3242173},{"continent": "Americas","Country": "Paraguay","LifeExpectancy": 71.752,"GDP": 4172.838464,"Population": 6667147},{"continent": "Americas","Country": "Peru","LifeExpectancy": 71.421,"GDP": 7408.905561,"Population": 28674757},{"continent": "Americas","Country": "Puerto Rico","LifeExpectancy": 78.746,"GDP": 19328.70901,"Population": 3942491},{"continent": "Americas","Country": "Trinidad and Tobago","LifeExpectancy": 69.819,"GDP": 18008.50924,"Population": 1056608},{"continent": "Americas","Country": "United States","LifeExpectancy": 78.242,"GDP": 42951.65309,"Population": 301139947},{"continent": "Americas","Country": "Uruguay","LifeExpectancy": 76.384,"GDP": 10611.46299,"Population": 3447496},{"continent": "Americas","Country": "Venezuela","LifeExpectancy": 73.747,"GDP": 11415.80569,"Population": 26084662},{"continent": "Asia","Country": "China","LifeExpectancy": 72.961,"GDP": 4959.114854,"Population": 1318683096},{"continent": "Asia","Country": "Hong Kong, China","LifeExpectancy": 82.208,"GDP": 39724.97867,"Population": 6980412},{"continent": "Asia","Country": "Japan","LifeExpectancy": 82.603,"GDP": 31656.06806,"Population": 127467972},{"continent": "Asia","Country": "Korea, Dem. Rep.","LifeExpectancy": 67.297,"GDP": 1593.06548,"Population": 23301725},{"continent": "Asia","Country": "Korea, Rep.","LifeExpectancy": 78.623,"GDP": 23348.13973,"Population": 49044790},{"continent": "Europe","Country": "Albania","LifeExpectancy": 76.423,"GDP": 5937.029526,"Population": 3600523},{"continent": "Europe","Country": "Austria","LifeExpectancy": 79.829,"GDP": 36126.4927,"Population": 8199783},{"continent": "Europe","Country": "Belgium","LifeExpectancy": 79.441,"GDP": 33692.60508,"Population": 10392226},{"continent": "Europe","Country": "Bosnia and Herzegovina","LifeExpectancy": 74.852,"GDP": 7446.298803,"Population": 4552198},{"continent": "Europe","Country": "Bulgaria","LifeExpectancy": 73.005,"GDP": 10680.79282,"Population": 7322858},{"continent": "Europe","Country": "Croatia","LifeExpectancy": 75.748,"GDP": 14619.22272,"Population": 4493312},{"continent": "Europe","Country": "Czech Republic","LifeExpectancy": 76.486,"GDP": 22833.30851,"Population": 10228744},{"continent": "Europe","Country": "Denmark","LifeExpectancy": 78.332,"GDP": 35278.41874,"Population": 5468120},{"continent": "Europe","Country": "Finland","LifeExpectancy": 79.313,"GDP": 33207.0844,"Population": 5238460},{"continent": "Europe","Country": "France","LifeExpectancy": 80.657,"GDP": 30470.0167,"Population": 61083916},{"continent": "Europe","Country": "Germany","LifeExpectancy": 79.406,"GDP": 32170.37442,"Population": 82400996},{"continent": "Europe","Country": "Greece","LifeExpectancy": 79.483,"GDP": 27538.41188,"Population": 10706290},{"continent": "Europe","Country": "Hungary","LifeExpectancy": 73.338,"GDP": 18008.94444,"Population": 9956108},{"continent": "Europe","Country": "Iceland","LifeExpectancy": 81.757,"GDP": 36180.78919,"Population": 301931},{"continent": "Europe","Country": "Ireland","LifeExpectancy": 78.885,"GDP": 40675.99635,"Population": 4109086},{"continent": "Europe","Country": "Italy","LifeExpectancy": 80.546,"GDP": 28569.7197,"Population": 58147733},{"continent": "Europe","Country": "Montenegro","LifeExpectancy": 74.543,"GDP": 9253.896111,"Population": 684736},{"continent": "Europe","Country": "Netherlands","LifeExpectancy": 79.762,"GDP": 36797.93332,"Population": 16570613},{"continent": "Europe","Country": "Norway","LifeExpectancy": 80.196,"GDP": 49357.19017,"Population": 4627926},{"continent": "Europe","Country": "Poland","LifeExpectancy": 75.563,"GDP": 15389.92468,"Population": 38518241},{"continent": "Europe","Country": "Portugal","LifeExpectancy": 78.098,"GDP": 20509.64777,"Population": 10642836},{"continent": "Europe","Country": "Romania","LifeExpectancy": 72.476,"GDP": 10808.47561,"Population": 22276056},{"continent": "Europe","Country": "Serbia","LifeExpectancy": 74.002,"GDP": 9786.534714,"Population": 10150265},{"continent": "Europe","Country": "Slovak Republic","LifeExpectancy": 74.663,"GDP": 18678.31435,"Population": 5447502},{"continent": "Europe","Country": "Slovenia","LifeExpectancy": 77.926,"GDP": 25768.25759,"Population": 2009245},{"continent": "Europe","Country": "Spain","LifeExpectancy": 80.941,"GDP": 28821.0637,"Population": 40448191},{"continent": "Europe","Country": "Sweden","LifeExpectancy": 80.884,"GDP": 33859.74835,"Population": 9031088},{"continent": "Europe","Country": "Switzerland","LifeExpectancy": 81.701,"GDP": 37506.41907,"Population": 7554661},{"continent": "Europe","Country": "Turkey","LifeExpectancy": 71.777,"GDP": 8458.276384,"Population": 71158647},{"continent": "Europe","Country": "United Kingdom","LifeExpectancy": 79.425,"GDP": 33203.26128,"Population": 60776238},{"continent": "Oceania","Country": "Australia","LifeExpectancy": 81.235,"GDP": 34435.36744,"Population": 20434176},{"continent": "Oceania","Country": "New Zealand","LifeExpectancy": 80.204,"GDP": 25185.00911,"Population": 4115771}]
diff --git a/src/views/chart/assets/json/lines.json b/src/views/chart/assets/json/lines.json
new file mode 100644
index 0000000000000000000000000000000000000000..fd5e2466e601e49c554c1572a3e12a3d1caa4092
--- /dev/null
+++ b/src/views/chart/assets/json/lines.json
@@ -0,0 +1 @@
+[{"name":14513,"carat":1.35,"cut":"Ideal","color":"J","clarity":"VS2","depth":61.4,"table":57,"price":5862,"x":7.1,"y":7.13,"z":4.37},{"name":28685,"carat":0.3,"cut":"Good","color":"G","clarity":"VVS1","depth":64,"table":57,"price":678,"x":4.23,"y":4.27,"z":2.72},{"name":50368,"carat":0.75,"cut":"Ideal","color":"F","clarity":"SI2","depth":59.2,"table":60,"price":2248,"x":5.87,"y":5.92,"z":3.49},{"name":7721,"carat":0.26,"cut":"Ideal","color":"F","clarity":"VS1","depth":60.9,"table":57,"price":580,"x":4.13,"y":4.11,"z":2.51},{"name":31082,"carat":0.33,"cut":"Premium","color":"H","clarity":"VVS1","depth":61.4,"table":59,"price":752,"x":4.42,"y":4.44,"z":2.72},{"name":26429,"carat":1.52,"cut":"Ideal","color":"G","clarity":"VVS1","depth":62.4,"table":55,"price":15959,"x":7.3,"y":7.39,"z":4.58},{"name":35900,"carat":0.32,"cut":"Ideal","color":"G","clarity":"IF","depth":61.3,"table":54,"price":918,"x":4.41,"y":4.47,"z":2.72},{"name":27015,"carat":2.25,"cut":"Ideal","color":"I","clarity":"SI2","depth":62.4,"table":57,"price":17143,"x":8.39,"y":8.32,"z":5.21},{"name":30760,"carat":0.25,"cut":"Premium","color":"E","clarity":"VVS2","depth":62.5,"table":59,"price":740,"x":4.04,"y":4.02,"z":2.52},{"name":2205,"carat":1.02,"cut":"Premium","color":"H","clarity":"I1","depth":62.5,"table":60,"price":3141,"x":6.39,"y":6.41,"z":4},{"name":25584,"carat":2.01,"cut":"Very-Good","color":"H","clarity":"SI2","depth":62.9,"table":55,"price":14426,"x":8.03,"y":8.09,"z":5.07},{"name":16788,"carat":0.9,"cut":"Ideal","color":"D","clarity":"VS2","depth":61.2,"table":56,"price":6689,"x":6.2,"y":6.26,"z":3.81},{"name":2468,"carat":0.71,"cut":"Ideal","color":"D","clarity":"VS1","depth":62.2,"table":55,"price":3192,"x":5.71,"y":5.74,"z":3.56},{"name":6508,"carat":1.01,"cut":"Very-Good","color":"G","clarity":"SI1","depth":62.3,"table":59,"price":4064,"x":6.34,"y":6.37,"z":3.96},{"name":44895,"carat":0.5,"cut":"Very-Good","color":"E","clarity":"VS2","depth":63.4,"table":58,"price":1629,"x":5.06,"y":5.04,"z":3.2},{"name":20653,"carat":1.26,"cut":"Ideal","color":"H","clarity":"VVS2","depth":61.8,"table":56,"price":8941,"x":6.9,"y":6.93,"z":4.28},{"name":38210,"carat":0.43,"cut":"Ideal","color":"F","clarity":"SI1","depth":61.7,"table":54,"price":1016,"x":4.9,"y":4.86,"z":3.01},{"name":13359,"carat":0.24,"cut":"Very-Good","color":"E","clarity":"VS2","depth":62.1,"table":59,"price":419,"x":3.98,"y":4.01,"z":2.48},{"name":3260,"carat":0.7,"cut":"Very-Good","color":"E","clarity":"VS1","depth":60.7,"table":57,"price":3358,"x":5.72,"y":5.75,"z":3.48},{"name":46272,"carat":0.54,"cut":"Ideal","color":"G","clarity":"VS1","depth":61.8,"table":54,"price":1754,"x":5.22,"y":5.24,"z":3.23},{"name":23875,"carat":2.03,"cut":"Very-Good","color":"J","clarity":"SI2","depth":61.7,"table":61,"price":11968,"x":8.04,"y":8.18,"z":5},{"name":17434,"carat":1.41,"cut":"Premium","color":"D","clarity":"SI2","depth":61.1,"table":56,"price":6988,"x":7.19,"y":7.15,"z":4.38},{"name":25,"carat":0.31,"cut":"Very-Good","color":"J","clarity":"SI1","depth":58.1,"table":62,"price":353,"x":4.44,"y":4.47,"z":2.59},{"name":22130,"carat":1.5,"cut":"Very-Good","color":"I","clarity":"VS1","depth":62.2,"table":59,"price":10164,"x":7.27,"y":7.3,"z":4.53},{"name":53295,"carat":0.3,"cut":"Very-Good","color":"I","clarity":"VVS1","depth":60.5,"table":60,"price":552,"x":4.32,"y":4.34,"z":2.62},{"name":44404,"carat":0.55,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.4,"table":56,"price":1584,"x":5.28,"y":5.31,"z":3.25},{"name":40387,"carat":0.42,"cut":"Ideal","color":"D","clarity":"VVS2","depth":61.7,"table":57,"price":1132,"x":4.8,"y":4.82,"z":2.97},{"name":11416,"carat":1.5,"cut":"Fair","color":"H","clarity":"SI2","depth":66,"table":64,"price":5000,"x":7.1,"y":6.97,"z":4.64},{"name":47315,"carat":0.23,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":61.5,"table":59,"price":530,"x":3.95,"y":3.98,"z":2.44},{"name":5724,"carat":0.25,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":63,"table":55,"price":575,"x":4,"y":4.03,"z":2.53},{"name":30624,"carat":0.3,"cut":"Premium","color":"D","clarity":"SI2","depth":60.2,"table":60,"price":447,"x":4.32,"y":4.35,"z":2.61},{"name":9803,"carat":0.9,"cut":"Very-Good","color":"D","clarity":"VS2","depth":63,"table":62,"price":4668,"x":6.06,"y":6.13,"z":3.84},{"name":46497,"carat":0.5,"cut":"Very-Good","color":"F","clarity":"VVS2","depth":60.4,"table":61,"price":1778,"x":5.12,"y":5.14,"z":3.1},{"name":45329,"carat":0.32,"cut":"Premium","color":"E","clarity":"SI1","depth":61.2,"table":58,"price":524,"x":4.37,"y":4.42,"z":2.69},{"name":22424,"carat":1.57,"cut":"Very-Good","color":"H","clarity":"SI1","depth":59.6,"table":58,"price":10447,"x":7.61,"y":7.65,"z":4.55},{"name":3143,"carat":0.7,"cut":"Ideal","color":"E","clarity":"SI1","depth":61.6,"table":56,"price":3330,"x":5.7,"y":5.72,"z":3.52},{"name":6815,"carat":1.01,"cut":"Fair","color":"E","clarity":"SI2","depth":64.7,"table":55,"price":4118,"x":6.37,"y":6.3,"z":4.1},{"name":5947,"carat":0.72,"cut":"Ideal","color":"E","clarity":"VS1","depth":61.1,"table":57,"price":3947,"x":5.78,"y":5.81,"z":3.54},{"name":9084,"carat":1.07,"cut":"Premium","color":"G","clarity":"SI2","depth":62,"table":59,"price":4523,"x":6.54,"y":6.5,"z":4.04},{"name":36793,"carat":0.34,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.6,"table":57,"price":956,"x":4.47,"y":4.45,"z":2.79},{"name":4943,"carat":0.76,"cut":"Ideal","color":"D","clarity":"SI1","depth":62.3,"table":55,"price":3732,"x":5.81,"y":5.84,"z":3.63},{"name":52525,"carat":0.8,"cut":"Ideal","color":"F","clarity":"SI2","depth":62.4,"table":57,"price":2529,"x":5.92,"y":5.97,"z":3.71},{"name":46417,"carat":0.55,"cut":"Ideal","color":"D","clarity":"VS2","depth":61,"table":56,"price":1768,"x":5.31,"y":5.28,"z":3.23},{"name":35997,"carat":0.42,"cut":"Very-Good","color":"G","clarity":"VS1","depth":59.4,"table":59,"price":921,"x":4.86,"y":4.9,"z":2.9},{"name":25539,"carat":1.5,"cut":"Very-Good","color":"G","clarity":"VVS1","depth":63.1,"table":62,"price":14361,"x":7.25,"y":7.23,"z":4.57},{"name":2361,"carat":0.9,"cut":"Ideal","color":"J","clarity":"VS1","depth":62.5,"table":55,"price":3175,"x":6.18,"y":6.14,"z":3.85},{"name":23147,"carat":1.02,"cut":"Premium","color":"E","clarity":"VVS1","depth":61.5,"table":59,"price":11163,"x":6.46,"y":6.41,"z":3.96},{"name":39674,"carat":0.42,"cut":"Ideal","color":"G","clarity":"VS2","depth":62.1,"table":56,"price":1087,"x":4.84,"y":4.79,"z":2.99},{"name":42947,"carat":0.3,"cut":"Very-Good","color":"F","clarity":"SI2","depth":63.4,"table":56,"price":506,"x":4.29,"y":4.26,"z":2.71},{"name":23762,"carat":1.51,"cut":"Premium","color":"F","clarity":"SI1","depth":61.4,"table":58,"price":11817,"x":7.43,"y":7.35,"z":4.54},{"name":47355,"carat":0.5,"cut":"Ideal","color":"E","clarity":"VS2","depth":63.8,"table":54,"price":1845,"x":5.07,"y":5.05,"z":3.23},{"name":35598,"carat":0.31,"cut":"Ideal","color":"H","clarity":"VVS1","depth":62.7,"table":54,"price":907,"x":4.38,"y":4.33,"z":2.73},{"name":43086,"carat":0.61,"cut":"Ideal","color":"I","clarity":"VS2","depth":62,"table":54,"price":1380,"x":5.44,"y":5.49,"z":3.39},{"name":15471,"carat":1.58,"cut":"Premium","color":"F","clarity":"SI2","depth":59.1,"table":59,"price":6194,"x":7.68,"y":7.59,"z":4.51},{"name":29072,"carat":0.34,"cut":"Premium","color":"D","clarity":"VS2","depth":59.3,"table":59,"price":687,"x":4.55,"y":4.59,"z":2.71},{"name":20868,"carat":1.27,"cut":"Premium","color":"E","clarity":"VS2","depth":61.2,"table":59,"price":9086,"x":7.02,"y":6.97,"z":4.28},{"name":51424,"carat":0.85,"cut":"Good","color":"J","clarity":"VS1","depth":63.6,"table":57,"price":2372,"x":6.01,"y":5.94,"z":3.8},{"name":27320,"carat":2.18,"cut":"Premium","color":"G","clarity":"SI2","depth":61.9,"table":60,"price":17841,"x":8.24,"y":8.29,"z":5.12},{"name":1128,"carat":0.73,"cut":"Premium","color":"G","clarity":"VVS2","depth":62.2,"table":56,"price":2919,"x":5.79,"y":5.75,"z":3.59},{"name":18182,"carat":1.2,"cut":"Very-Good","color":"G","clarity":"VS2","depth":63.1,"table":57,"price":7371,"x":6.69,"y":6.74,"z":4.24},{"name":669,"carat":0.77,"cut":"Premium","color":"E","clarity":"SI1","depth":62.9,"table":59,"price":2846,"x":5.84,"y":5.79,"z":3.66},{"name":47240,"carat":0.51,"cut":"Ideal","color":"E","clarity":"VS1","depth":62,"table":57,"price":1841,"x":5.11,"y":5.15,"z":3.18},{"name":14256,"carat":1,"cut":"Ideal","color":"D","clarity":"SI1","depth":60.6,"table":56,"price":5775,"x":6.5,"y":6.54,"z":3.95},{"name":20118,"carat":1.31,"cut":"Ideal","color":"H","clarity":"VS1","depth":61.5,"table":55,"price":8583,"x":7.05,"y":7.02,"z":4.33},{"name":53884,"carat":0.7,"cut":"Very-Good","color":"G","clarity":"VS1","depth":61.4,"table":55,"price":2748,"x":5.7,"y":5.74,"z":3.51},{"name":48410,"carat":0.72,"cut":"Very-Good","color":"H","clarity":"SI2","depth":62.9,"table":57,"price":1970,"x":5.64,"y":5.68,"z":3.56},{"name":48807,"carat":0.75,"cut":"Ideal","color":"J","clarity":"VS2","depth":62.3,"table":57,"price":2025,"x":5.84,"y":5.81,"z":3.63},{"name":42132,"carat":0.53,"cut":"Ideal","color":"F","clarity":"SI2","depth":63,"table":54,"price":1279,"x":5.24,"y":5.19,"z":3.29},{"name":25596,"carat":1.7,"cut":"Good","color":"G","clarity":"VS1","depth":63.5,"table":56,"price":14445,"x":7.53,"y":7.64,"z":4.82},{"name":23434,"carat":1.62,"cut":"Very-Good","color":"H","clarity":"VS2","depth":59.6,"table":59,"price":11427,"x":7.59,"y":7.67,"z":4.55},{"name":20160,"carat":1.21,"cut":"Ideal","color":"G","clarity":"VS1","depth":62.6,"table":56,"price":8616,"x":6.77,"y":6.81,"z":4.25},{"name":2174,"carat":0.73,"cut":"Ideal","color":"F","clarity":"VS1","depth":62.9,"table":56,"price":3135,"x":5.71,"y":5.77,"z":3.61},{"name":23377,"carat":0.33,"cut":"Ideal","color":"G","clarity":"SI1","depth":61.4,"table":57,"price":631,"x":4.48,"y":4.45,"z":2.74},{"name":14592,"carat":1.1,"cut":"Ideal","color":"H","clarity":"VS2","depth":61.3,"table":56,"price":5888,"x":6.64,"y":6.67,"z":4.08},{"name":11074,"carat":1.13,"cut":"Very-Good","color":"E","clarity":"SI1","depth":62.7,"table":57,"price":4922,"x":6.62,"y":6.65,"z":4.16},{"name":36627,"carat":0.24,"cut":"Very-Good","color":"D","clarity":"VVS2","depth":61.9,"table":58,"price":478,"x":4.02,"y":4.03,"z":2.49},{"name":8533,"carat":0.9,"cut":"Ideal","color":"H","clarity":"VS1","depth":62.2,"table":58,"price":4428,"x":6.14,"y":6.17,"z":3.83},{"name":2420,"carat":0.91,"cut":"Fair","color":"H","clarity":"SI1","depth":64.8,"table":57,"price":3180,"x":6.12,"y":6.07,"z":3.95},{"name":21758,"carat":1.53,"cut":"Very-Good","color":"I","clarity":"VS1","depth":59.3,"table":58,"price":9823,"x":7.5,"y":7.54,"z":4.46},{"name":9029,"carat":1.06,"cut":"Ideal","color":"H","clarity":"SI2","depth":60.1,"table":59,"price":4516,"x":6.58,"y":6.67,"z":3.98},{"name":53870,"carat":0.75,"cut":"Ideal","color":"F","clarity":"SI1","depth":62.3,"table":57,"price":2744,"x":5.82,"y":5.77,"z":3.61},{"name":25628,"carat":2.5,"cut":"Ideal","color":"J","clarity":"SI2","depth":64,"table":55,"price":14502,"x":8.56,"y":8.48,"z":5.46},{"name":20051,"carat":0.31,"cut":"Premium","color":"G","clarity":"VS1","depth":61.2,"table":60,"price":625,"x":4.37,"y":4.39,"z":2.68},{"name":26772,"carat":2.06,"cut":"Very-Good","color":"F","clarity":"SI2","depth":61.5,"table":56,"price":16603,"x":8.15,"y":8.18,"z":5.02},{"name":38208,"carat":0.43,"cut":"Ideal","color":"F","clarity":"SI1","depth":61.8,"table":56,"price":1016,"x":4.87,"y":4.84,"z":3},{"name":17039,"carat":1.3,"cut":"Ideal","color":"I","clarity":"VS1","depth":62.1,"table":57,"price":6806,"x":6.98,"y":7.04,"z":4.35},{"name":35184,"carat":0.31,"cut":"Ideal","color":"G","clarity":"IF","depth":61.7,"table":55,"price":891,"x":4.36,"y":4.39,"z":2.7},{"name":29861,"carat":0.3,"cut":"Ideal","color":"D","clarity":"VS2","depth":61.5,"table":55,"price":710,"x":4.3,"y":4.35,"z":2.66},{"name":2592,"carat":1,"cut":"Very-Good","color":"I","clarity":"SI2","depth":62.4,"table":63,"price":3217,"x":6.35,"y":6.44,"z":3.99},{"name":51705,"carat":0.7,"cut":"Very-Good","color":"F","clarity":"VS2","depth":61.2,"table":56,"price":2400,"x":5.72,"y":5.78,"z":3.52},{"name":16984,"carat":1.25,"cut":"Premium","color":"H","clarity":"SI1","depth":62.2,"table":57,"price":6783,"x":6.91,"y":6.85,"z":4.28},{"name":18724,"carat":1.75,"cut":"Premium","color":"I","clarity":"SI1","depth":60.8,"table":58,"price":7644,"x":7.83,"y":7.79,"z":4.75},{"name":12270,"carat":1,"cut":"Good","color":"H","clarity":"VS2","depth":56.9,"table":63,"price":5208,"x":6.6,"y":6.57,"z":3.75},{"name":34355,"carat":0.37,"cut":"Very-Good","color":"F","clarity":"VS1","depth":58.6,"table":65,"price":863,"x":4.68,"y":4.71,"z":2.75},{"name":1996,"carat":0.52,"cut":"Ideal","color":"E","clarity":"VVS1","depth":61.8,"table":55,"price":3097,"x":5.19,"y":5.2,"z":3.21},{"name":39442,"carat":0.41,"cut":"Ideal","color":"D","clarity":"VS2","depth":62.4,"table":54,"price":1076,"x":4.78,"y":4.74,"z":2.97},{"name":32035,"carat":0.32,"cut":"Ideal","color":"E","clarity":"VVS2","depth":61.3,"table":57,"price":779,"x":4.39,"y":4.42,"z":2.7},{"name":1257,"carat":0.73,"cut":"Premium","color":"D","clarity":"VS2","depth":60.9,"table":59,"price":2947,"x":5.82,"y":5.77,"z":3.53},{"name":35751,"carat":0.3,"cut":"Premium","color":"D","clarity":"VS2","depth":62.9,"table":58,"price":911,"x":4.26,"y":4.23,"z":2.67},{"name":17748,"carat":1.12,"cut":"Ideal","color":"D","clarity":"SI1","depth":61.2,"table":58,"price":7145,"x":6.65,"y":6.68,"z":4.08},{"name":52350,"carat":0.82,"cut":"Premium","color":"H","clarity":"SI2","depth":59.5,"table":62,"price":2499,"x":6.13,"y":6.07,"z":3.63},{"name":12512,"carat":1.01,"cut":"Premium","color":"H","clarity":"VS2","depth":61.9,"table":57,"price":5260,"x":6.42,"y":6.35,"z":3.95},{"name":30836,"carat":0.33,"cut":"Premium","color":"H","clarity":"VS1","depth":59.2,"table":58,"price":743,"x":4.55,"y":4.5,"z":2.68},{"name":17939,"carat":1.21,"cut":"Very-Good","color":"H","clarity":"VS1","depth":62.3,"table":58,"price":7246,"x":6.71,"y":6.74,"z":4.19},{"name":53151,"carat":0.7,"cut":"Ideal","color":"I","clarity":"SI1","depth":61.6,"table":56,"price":2623,"x":5.69,"y":5.71,"z":3.51},{"name":21427,"carat":1.5,"cut":"Ideal","color":"I","clarity":"VS1","depth":62.8,"table":57,"price":9533,"x":7.24,"y":7.28,"z":4.56},{"name":4025,"carat":0.73,"cut":"Ideal","color":"F","clarity":"VVS2","depth":61.7,"table":54,"price":3524,"x":5.76,"y":5.82,"z":3.57},{"name":10997,"carat":1.17,"cut":"Good","color":"H","clarity":"SI2","depth":63.8,"table":58,"price":4914,"x":6.73,"y":6.57,"z":4.24},{"name":37380,"carat":0.4,"cut":"Ideal","color":"G","clarity":"VVS2","depth":62.4,"table":56,"price":982,"x":4.64,"y":4.68,"z":2.91},{"name":32301,"carat":0.32,"cut":"Ideal","color":"D","clarity":"SI2","depth":61.7,"table":55,"price":454,"x":4.39,"y":4.42,"z":2.72},{"name":5986,"carat":0.71,"cut":"Premium","color":"D","clarity":"VVS1","depth":58.8,"table":58,"price":3952,"x":5.89,"y":5.81,"z":3.44},{"name":7062,"carat":0.33,"cut":"Premium","color":"I","clarity":"VVS2","depth":61,"table":59,"price":579,"x":4.41,"y":4.44,"z":2.7},{"name":6488,"carat":0.96,"cut":"Premium","color":"G","clarity":"SI2","depth":61.1,"table":59,"price":4059,"x":6.32,"y":6.28,"z":3.85},{"name":10508,"carat":1.02,"cut":"Ideal","color":"D","clarity":"SI1","depth":62.1,"table":53,"price":4798,"x":6.43,"y":6.38,"z":3.98},{"name":1143,"carat":0.71,"cut":"Very-Good","color":"E","clarity":"VS2","depth":63.3,"table":59,"price":2922,"x":5.62,"y":5.66,"z":3.57},{"name":40005,"carat":0.41,"cut":"Very-Good","color":"F","clarity":"VS2","depth":63.2,"table":57,"price":1107,"x":4.76,"y":4.74,"z":3},{"name":42200,"carat":0.56,"cut":"Premium","color":"G","clarity":"SI1","depth":61.1,"table":61,"price":1287,"x":5.31,"y":5.29,"z":3.24},{"name":46075,"carat":0.5,"cut":"Premium","color":"F","clarity":"VS2","depth":61.4,"table":59,"price":1736,"x":5.12,"y":5.1,"z":3.14},{"name":41028,"carat":0.41,"cut":"Ideal","color":"E","clarity":"VVS2","depth":61.1,"table":56,"price":1187,"x":4.8,"y":4.85,"z":2.95},{"name":7732,"carat":0.3,"cut":"Very-Good","color":"G","clarity":"VS1","depth":62.6,"table":56,"price":581,"x":4.29,"y":4.31,"z":2.69},{"name":20659,"carat":1.17,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61.7,"table":55,"price":8947,"x":6.74,"y":6.77,"z":4.17},{"name":42320,"carat":0.41,"cut":"Ideal","color":"D","clarity":"VVS2","depth":62.3,"table":57,"price":1295,"x":4.74,"y":4.76,"z":2.96},{"name":502,"carat":0.7,"cut":"Premium","color":"E","clarity":"VS2","depth":61.5,"table":59,"price":2822,"x":5.73,"y":5.68,"z":3.51},{"name":5786,"carat":0.72,"cut":"Very-Good","color":"E","clarity":"VVS1","depth":61.2,"table":58,"price":3903,"x":5.75,"y":5.79,"z":3.53},{"name":28008,"carat":0.3,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.6,"table":56,"price":658,"x":4.29,"y":4.34,"z":2.7},{"name":1319,"carat":0.72,"cut":"Good","color":"G","clarity":"VS1","depth":58,"table":57.8,"price":2958,"x":5.85,"y":5.87,"z":3.4},{"name":33956,"carat":0.23,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":60.2,"table":57,"price":465,"x":3.99,"y":4.05,"z":2.42},{"name":6983,"carat":1.03,"cut":"Premium","color":"J","clarity":"SI1","depth":61.7,"table":54,"price":4153,"x":6.56,"y":6.5,"z":4.03},{"name":5595,"carat":1.01,"cut":"Fair","color":"H","clarity":"SI1","depth":64.5,"table":59,"price":3869,"x":6.27,"y":6.23,"z":4.03},{"name":22168,"carat":1.56,"cut":"Ideal","color":"F","clarity":"SI2","depth":61.6,"table":56,"price":10210,"x":7.41,"y":7.45,"z":4.58},{"name":34991,"carat":0.34,"cut":"Premium","color":"D","clarity":"VS2","depth":59.3,"table":59,"price":881,"x":4.59,"y":4.55,"z":2.71},{"name":3246,"carat":0.81,"cut":"Ideal","color":"I","clarity":"VS2","depth":61.4,"table":55,"price":3355,"x":6.03,"y":6.06,"z":3.71},{"name":39872,"carat":0.36,"cut":"Premium","color":"E","clarity":"VVS2","depth":61.7,"table":59,"price":1102,"x":4.56,"y":4.52,"z":2.8},{"name":29982,"carat":0.31,"cut":"Ideal","color":"F","clarity":"VVS2","depth":61.2,"table":56,"price":716,"x":4.4,"y":4.43,"z":2.7},{"name":29194,"carat":0.38,"cut":"Ideal","color":"E","clarity":"SI1","depth":61,"table":56,"price":694,"x":4.68,"y":4.69,"z":2.86},{"name":41649,"carat":0.4,"cut":"Ideal","color":"E","clarity":"VVS2","depth":61.7,"table":55,"price":1238,"x":4.76,"y":4.74,"z":2.93},{"name":48035,"carat":0.6,"cut":"Ideal","color":"F","clarity":"VS2","depth":58.6,"table":60,"price":1923,"x":5.54,"y":5.62,"z":3.27},{"name":38063,"carat":0.3,"cut":"Ideal","color":"E","clarity":"IF","depth":61.1,"table":57,"price":1013,"x":4.31,"y":4.33,"z":2.64},{"name":23199,"carat":1.52,"cut":"Ideal","color":"H","clarity":"VS2","depth":60.7,"table":56,"price":11206,"x":7.49,"y":7.41,"z":4.52},{"name":14152,"carat":1.01,"cut":"Premium","color":"G","clarity":"VS2","depth":63,"table":58,"price":5741,"x":6.42,"y":6.37,"z":4.03},{"name":45512,"carat":0.51,"cut":"Ideal","color":"E","clarity":"SI1","depth":61.5,"table":57,"price":1682,"x":5.11,"y":5.16,"z":3.16},{"name":33630,"carat":0.33,"cut":"Very-Good","color":"H","clarity":"SI1","depth":63,"table":56,"price":463,"x":4.41,"y":4.42,"z":2.78},{"name":31484,"carat":0.34,"cut":"Ideal","color":"G","clarity":"VS2","depth":61.9,"table":55,"price":765,"x":4.53,"y":4.49,"z":2.79},{"name":4780,"carat":1.23,"cut":"Fair","color":"E","clarity":"I1","depth":67.4,"table":56,"price":3692,"x":6.76,"y":6.56,"z":4.49},{"name":1849,"carat":0.76,"cut":"Premium","color":"E","clarity":"VS2","depth":61.7,"table":62,"price":3064,"x":5.85,"y":5.82,"z":3.6},{"name":3200,"carat":0.92,"cut":"Very-Good","color":"I","clarity":"SI1","depth":63.7,"table":58,"price":3345,"x":6.12,"y":6.18,"z":3.92},{"name":18133,"carat":1.52,"cut":"Premium","color":"I","clarity":"SI2","depth":62.5,"table":56,"price":7341,"x":7.35,"y":7.33,"z":4.59},{"name":40938,"carat":0.23,"cut":"Very-Good","color":"E","clarity":"VVS1","depth":60.8,"table":56,"price":499,"x":3.94,"y":3.99,"z":2.41},{"name":33643,"carat":0.38,"cut":"Premium","color":"H","clarity":"VVS2","depth":62,"table":58,"price":833,"x":4.62,"y":4.64,"z":2.87},{"name":52241,"carat":0.73,"cut":"Ideal","color":"I","clarity":"VVS2","depth":63.3,"table":57,"price":2485,"x":5.77,"y":5.73,"z":3.64},{"name":10406,"carat":0.31,"cut":"Premium","color":"D","clarity":"SI2","depth":61.5,"table":60,"price":593,"x":4.34,"y":4.31,"z":2.66},{"name":51776,"carat":0.74,"cut":"Ideal","color":"F","clarity":"SI2","depth":61.6,"table":55,"price":2410,"x":5.81,"y":5.87,"z":3.6},{"name":31450,"carat":0.4,"cut":"Very-Good","color":"G","clarity":"SI2","depth":63.4,"table":59,"price":765,"x":4.66,"y":4.64,"z":2.95},{"name":21271,"carat":1.53,"cut":"Premium","color":"F","clarity":"SI2","depth":62.7,"table":60,"price":9424,"x":7.28,"y":7.34,"z":4.58},{"name":22716,"carat":1.01,"cut":"Premium","color":"D","clarity":"VVS2","depth":62.4,"table":58,"price":10732,"x":6.39,"y":6.44,"z":4},{"name":17977,"carat":1.1,"cut":"Very-Good","color":"F","clarity":"VS2","depth":62.7,"table":58.5,"price":7272,"x":6.5,"y":6.59,"z":4.1},{"name":18203,"carat":1.52,"cut":"Fair","color":"H","clarity":"SI2","depth":65,"table":57,"price":7388,"x":7.12,"y":7.09,"z":4.62},{"name":10318,"carat":1.03,"cut":"Premium","color":"D","clarity":"SI2","depth":61.3,"table":61,"price":4764,"x":6.49,"y":6.46,"z":3.97},{"name":28823,"carat":0.41,"cut":"Good","color":"H","clarity":"SI1","depth":63.8,"table":56,"price":683,"x":4.69,"y":4.74,"z":3.01},{"name":5145,"carat":0.9,"cut":"Very-Good","color":"I","clarity":"VS2","depth":62.8,"table":52,"price":3764,"x":6.19,"y":6.23,"z":3.9},{"name":37720,"carat":0.34,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61.1,"table":57,"price":995,"x":4.52,"y":4.48,"z":2.75},{"name":595,"carat":0.76,"cut":"Very-Good","color":"H","clarity":"SI1","depth":60.9,"table":55,"price":2838,"x":5.92,"y":5.94,"z":3.61},{"name":12362,"carat":0.26,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":61.5,"table":58,"price":597,"x":4.08,"y":4.12,"z":2.52},{"name":50151,"carat":0.71,"cut":"Good","color":"D","clarity":"SI2","depth":64.3,"table":56,"price":2215,"x":5.64,"y":5.59,"z":3.61},{"name":41669,"carat":0.4,"cut":"Ideal","color":"I","clarity":"VVS2","depth":61.4,"table":56,"price":1240,"x":4.76,"y":4.79,"z":2.93},{"name":4974,"carat":1.14,"cut":"Good","color":"I","clarity":"SI2","depth":60,"table":65,"price":3735,"x":6.8,"y":6.75,"z":4.06},{"name":47558,"carat":0.7,"cut":"Ideal","color":"J","clarity":"VS2","depth":62.4,"table":55,"price":1874,"x":5.68,"y":5.7,"z":3.55},{"name":52829,"carat":0.7,"cut":"Ideal","color":"G","clarity":"VS1","depth":61.4,"table":55,"price":2573,"x":5.74,"y":5.69,"z":3.51},{"name":3874,"carat":0.81,"cut":"Ideal","color":"F","clarity":"SI1","depth":62.3,"table":55,"price":3481,"x":5.96,"y":6,"z":3.72},{"name":22691,"carat":0.36,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.5,"table":55,"price":629,"x":4.57,"y":4.6,"z":2.82},{"name":28407,"carat":0.35,"cut":"Premium","color":"G","clarity":"SI1","depth":60.3,"table":60,"price":669,"x":4.59,"y":4.57,"z":2.76},{"name":27459,"carat":2.03,"cut":"Very-Good","color":"E","clarity":"SI2","depth":58.8,"table":59,"price":18115,"x":8.23,"y":8.28,"z":4.85},{"name":30473,"carat":0.31,"cut":"Ideal","color":"I","clarity":"VVS1","depth":62.1,"table":56,"price":732,"x":4.38,"y":4.35,"z":2.71},{"name":32370,"carat":0.3,"cut":"Ideal","color":"F","clarity":"VVS1","depth":62.4,"table":57,"price":790,"x":4.25,"y":4.28,"z":2.66},{"name":20135,"carat":1.57,"cut":"Premium","color":"J","clarity":"VS1","depth":61.3,"table":59,"price":8595,"x":7.44,"y":7.47,"z":4.57},{"name":50802,"carat":0.71,"cut":"Premium","color":"E","clarity":"SI2","depth":61.4,"table":59,"price":2306,"x":5.74,"y":5.7,"z":3.51},{"name":29439,"carat":0.42,"cut":"Premium","color":"D","clarity":"SI2","depth":60.1,"table":58,"price":700,"x":4.83,"y":4.88,"z":2.92},{"name":19544,"carat":1,"cut":"Premium","color":"E","clarity":"VS1","depth":59.1,"table":59,"price":8176,"x":6.56,"y":6.51,"z":3.86},{"name":16410,"carat":1,"cut":"Good","color":"F","clarity":"VS1","depth":57.8,"table":59,"price":6552,"x":6.57,"y":6.59,"z":3.8},{"name":41500,"carat":0.58,"cut":"Premium","color":"J","clarity":"VS2","depth":59.5,"table":62,"price":1233,"x":5.44,"y":5.41,"z":3.23},{"name":22107,"carat":1.66,"cut":"Very-Good","color":"H","clarity":"SI1","depth":62.8,"table":56,"price":10134,"x":7.53,"y":7.57,"z":4.74},{"name":37064,"carat":0.43,"cut":"Premium","color":"F","clarity":"VS2","depth":59.8,"table":58,"price":968,"x":4.94,"y":4.89,"z":2.94},{"name":27284,"carat":2.03,"cut":"Very-Good","color":"G","clarity":"SI2","depth":62.7,"table":55,"price":17752,"x":8.07,"y":8.14,"z":5.08},{"name":21724,"carat":1.86,"cut":"Good","color":"G","clarity":"SI2","depth":63.8,"table":55,"price":9791,"x":7.79,"y":7.73,"z":4.95},{"name":47369,"carat":0.52,"cut":"Very-Good","color":"D","clarity":"VS2","depth":62.9,"table":59,"price":1847,"x":5.11,"y":5.13,"z":3.22},{"name":34279,"carat":0.23,"cut":"Very-Good","color":"D","clarity":"VS1","depth":62.4,"table":56,"price":468,"x":3.93,"y":3.98,"z":2.46},{"name":28365,"carat":0.4,"cut":"Good","color":"D","clarity":"SI1","depth":60.3,"table":61,"price":667,"x":4.74,"y":4.78,"z":2.87},{"name":41811,"carat":0.54,"cut":"Good","color":"E","clarity":"SI2","depth":63.8,"table":54,"price":1250,"x":5.18,"y":5.17,"z":3.3},{"name":36655,"carat":0.3,"cut":"Very-Good","color":"E","clarity":"IF","depth":60.9,"table":59,"price":949,"x":4.29,"y":4.32,"z":2.62},{"name":4623,"carat":0.91,"cut":"Ideal","color":"E","clarity":"SI1","depth":60.7,"table":56,"price":3665,"x":6.26,"y":6.22,"z":3.79},{"name":12087,"carat":1.44,"cut":"Premium","color":"E","clarity":"I1","depth":61.1,"table":62,"price":5161,"x":7.23,"y":7.15,"z":4.39},{"name":7116,"carat":1.01,"cut":"Very-Good","color":"I","clarity":"SI2","depth":62.9,"table":55,"price":4171,"x":6.37,"y":6.42,"z":4.02},{"name":21908,"carat":1.71,"cut":"Very-Good","color":"H","clarity":"VS1","depth":63.5,"table":59,"price":9974,"x":7.59,"y":7.52,"z":4.8},{"name":50703,"carat":0.53,"cut":"Ideal","color":"F","clarity":"VVS2","depth":61.3,"table":55,"price":2291,"x":5.23,"y":5.27,"z":3.22},{"name":2069,"carat":0.32,"cut":"Premium","color":"G","clarity":"VS2","depth":61.5,"table":60,"price":561,"x":4.4,"y":4.42,"z":2.71},{"name":14758,"carat":1.01,"cut":"Ideal","color":"D","clarity":"SI1","depth":62,"table":57,"price":5939,"x":6.44,"y":6.37,"z":3.97},{"name":3516,"carat":0.71,"cut":"Ideal","color":"F","clarity":"VS1","depth":61.5,"table":57,"price":3404,"x":5.7,"y":5.74,"z":3.52},{"name":34464,"carat":0.31,"cut":"Ideal","color":"E","clarity":"VVS1","depth":61.3,"table":56,"price":865,"x":4.38,"y":4.4,"z":2.69},{"name":25285,"carat":2.09,"cut":"Ideal","color":"I","clarity":"SI2","depth":61.2,"table":57,"price":13933,"x":8.27,"y":8.19,"z":5.04},{"name":35783,"carat":0.32,"cut":"Ideal","color":"F","clarity":"VVS1","depth":61,"table":56,"price":912,"x":4.42,"y":4.43,"z":2.7},{"name":39495,"carat":0.41,"cut":"Ideal","color":"E","clarity":"VS1","depth":62,"table":55,"price":1079,"x":4.74,"y":4.77,"z":2.95},{"name":15922,"carat":1.52,"cut":"Premium","color":"J","clarity":"SI1","depth":61,"table":59,"price":6367,"x":7.41,"y":7.35,"z":4.5},{"name":40625,"carat":0.41,"cut":"Ideal","color":"E","clarity":"VS1","depth":61.9,"table":55,"price":1153,"x":4.8,"y":4.76,"z":2.96},{"name":8663,"carat":1.16,"cut":"Very-Good","color":"H","clarity":"SI2","depth":63.2,"table":57,"price":4455,"x":6.66,"y":6.7,"z":4.22},{"name":5613,"carat":0.92,"cut":"Very-Good","color":"F","clarity":"SI2","depth":62.8,"table":56,"price":3873,"x":6.19,"y":6.23,"z":3.9},{"name":52450,"carat":0.71,"cut":"Premium","color":"G","clarity":"VS2","depth":62.8,"table":58,"price":2515,"x":5.74,"y":5.69,"z":3.59},{"name":17352,"carat":1.11,"cut":"Premium","color":"D","clarity":"SI1","depth":62,"table":58,"price":6962,"x":6.68,"y":6.64,"z":4.13},{"name":51937,"carat":0.72,"cut":"Ideal","color":"F","clarity":"SI1","depth":62.1,"table":55,"price":2440,"x":5.73,"y":5.8,"z":3.58},{"name":5387,"carat":0.3,"cut":"Premium","color":"G","clarity":"SI1","depth":58.8,"table":60,"price":574,"x":4.39,"y":4.35,"z":2.57},{"name":12962,"carat":1,"cut":"Very-Good","color":"D","clarity":"SI1","depth":62.1,"table":58,"price":5390,"x":6.34,"y":6.45,"z":3.97},{"name":34751,"carat":0.41,"cut":"Premium","color":"H","clarity":"SI1","depth":62,"table":59,"price":876,"x":4.8,"y":4.78,"z":2.97},{"name":4364,"carat":0.9,"cut":"Good","color":"F","clarity":"SI1","depth":63.9,"table":58,"price":3604,"x":6.12,"y":6.08,"z":3.9},{"name":13164,"carat":1.24,"cut":"Ideal","color":"J","clarity":"VS2","depth":62.3,"table":56,"price":5443,"x":6.84,"y":6.91,"z":4.28},{"name":34488,"carat":0.43,"cut":"Premium","color":"G","clarity":"VS2","depth":61.2,"table":58,"price":867,"x":4.84,"y":4.9,"z":2.98},{"name":33762,"carat":0.4,"cut":"Very-Good","color":"G","clarity":"SI1","depth":63.4,"table":58,"price":840,"x":4.71,"y":4.66,"z":2.97},{"name":18486,"carat":1.31,"cut":"Premium","color":"H","clarity":"SI1","depth":62.4,"table":58,"price":7527,"x":7.02,"y":6.96,"z":4.36},{"name":53494,"carat":0.73,"cut":"Ideal","color":"D","clarity":"SI2","depth":62.4,"table":56,"price":2683,"x":5.74,"y":5.77,"z":3.59},{"name":45458,"carat":0.7,"cut":"Good","color":"I","clarity":"SI2","depth":63.5,"table":56,"price":1675,"x":5.59,"y":5.63,"z":3.56},{"name":34592,"carat":0.37,"cut":"Ideal","color":"J","clarity":"SI1","depth":61.4,"table":57,"price":469,"x":4.62,"y":4.66,"z":2.85},{"name":7984,"carat":0.92,"cut":"Ideal","color":"H","clarity":"SI1","depth":60.5,"table":57,"price":4325,"x":6.27,"y":6.32,"z":3.81},{"name":23251,"carat":1.7,"cut":"Premium","color":"I","clarity":"VS2","depth":61.2,"table":59,"price":11257,"x":7.55,"y":7.62,"z":4.64},{"name":34473,"carat":0.38,"cut":"Very-Good","color":"E","clarity":"VS2","depth":60.3,"table":58,"price":866,"x":4.67,"y":4.72,"z":2.83},{"name":6235,"carat":0.75,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":62.8,"table":57,"price":4005,"x":5.74,"y":5.78,"z":3.62},{"name":28202,"carat":0.4,"cut":"Very-Good","color":"E","clarity":"SI2","depth":62.9,"table":59,"price":666,"x":4.66,"y":4.69,"z":2.94},{"name":42691,"carat":0.5,"cut":"Ideal","color":"E","clarity":"SI1","depth":61.6,"table":57,"price":1337,"x":5.08,"y":5.11,"z":3.14},{"name":34013,"carat":0.43,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.4,"table":54,"price":848,"x":4.9,"y":4.93,"z":3.02},{"name":49461,"carat":0.6,"cut":"Ideal","color":"E","clarity":"VS2","depth":62,"table":56,"price":2112,"x":5.4,"y":5.43,"z":3.36},{"name":50401,"carat":0.71,"cut":"Ideal","color":"I","clarity":"SI1","depth":61.4,"table":56,"price":2255,"x":5.73,"y":5.77,"z":3.53},{"name":27056,"carat":0.28,"cut":"Premium","color":"H","clarity":"VVS1","depth":59.9,"table":62,"price":646,"x":4.28,"y":4.23,"z":2.55},{"name":47424,"carat":0.7,"cut":"Good","color":"F","clarity":"SI2","depth":64.1,"table":55,"price":1851,"x":5.58,"y":5.52,"z":3.56},{"name":38417,"carat":0.3,"cut":"Ideal","color":"G","clarity":"IF","depth":62.4,"table":55,"price":1025,"x":4.32,"y":4.3,"z":2.69},{"name":10216,"carat":1.26,"cut":"Ideal","color":"J","clarity":"SI2","depth":62.5,"table":53,"price":4742,"x":6.9,"y":6.86,"z":4.3},{"name":13031,"carat":0.26,"cut":"Premium","color":"H","clarity":"VVS1","depth":59.8,"table":59,"price":600,"x":4.17,"y":4.12,"z":2.48},{"name":22644,"carat":1.5,"cut":"Good","color":"H","clarity":"VS2","depth":63.9,"table":60,"price":10692,"x":7.17,"y":7.22,"z":4.6},{"name":31530,"carat":0.34,"cut":"Ideal","color":"E","clarity":"SI1","depth":62.9,"table":56,"price":765,"x":4.48,"y":4.45,"z":2.81},{"name":33600,"carat":0.37,"cut":"Ideal","color":"G","clarity":"VS2","depth":60.8,"table":57,"price":833,"x":4.66,"y":4.61,"z":2.82},{"name":40166,"carat":0.39,"cut":"Very-Good","color":"F","clarity":"VVS2","depth":58.2,"table":62,"price":1117,"x":4.77,"y":4.82,"z":2.79},{"name":6524,"carat":0.91,"cut":"Ideal","color":"D","clarity":"SI2","depth":62.6,"table":54,"price":4067,"x":6.22,"y":6.25,"z":3.9},{"name":2493,"carat":0.9,"cut":"Good","color":"I","clarity":"SI1","depth":63,"table":53,"price":3196,"x":6.08,"y":6.15,"z":3.85},{"name":53307,"carat":0.3,"cut":"Good","color":"D","clarity":"SI1","depth":63.4,"table":56,"price":552,"x":4.26,"y":4.29,"z":2.71},{"name":6661,"carat":1,"cut":"Premium","color":"G","clarity":"SI2","depth":62.7,"table":59,"price":4095,"x":6.3,"y":6.36,"z":3.97},{"name":143,"carat":0.7,"cut":"Very-Good","color":"D","clarity":"VS2","depth":61.8,"table":55,"price":2767,"x":5.68,"y":5.72,"z":3.52},{"name":51773,"carat":0.71,"cut":"Premium","color":"F","clarity":"SI2","depth":59.6,"table":59,"price":2409,"x":5.79,"y":5.75,"z":3.44},{"name":14482,"carat":1.2,"cut":"Premium","color":"F","clarity":"SI2","depth":62.6,"table":58,"price":5846,"x":6.79,"y":6.73,"z":4.23},{"name":33251,"carat":0.45,"cut":"Ideal","color":"I","clarity":"VS1","depth":61.9,"table":54,"price":825,"x":4.95,"y":4.97,"z":3.07},{"name":9911,"carat":1.01,"cut":"Premium","color":"E","clarity":"SI2","depth":62.9,"table":59,"price":4688,"x":6.37,"y":6.31,"z":3.99},{"name":259,"carat":0.83,"cut":"Ideal","color":"F","clarity":"SI2","depth":62.3,"table":55,"price":2790,"x":6.02,"y":6.05,"z":3.76},{"name":32882,"carat":0.4,"cut":"Ideal","color":"J","clarity":"VS1","depth":62.6,"table":55,"price":810,"x":4.75,"y":4.71,"z":2.96},{"name":31115,"carat":0.42,"cut":"Very-Good","color":"H","clarity":"SI1","depth":61.1,"table":57,"price":754,"x":4.84,"y":4.87,"z":2.96},{"name":20904,"carat":1.06,"cut":"Ideal","color":"F","clarity":"VVS2","depth":62.1,"table":57,"price":9118,"x":6.54,"y":6.5,"z":4.05},{"name":26198,"carat":1.7,"cut":"Premium","color":"G","clarity":"VS2","depth":62.6,"table":61,"price":15568,"x":7.64,"y":7.54,"z":4.75},{"name":2676,"carat":0.7,"cut":"Premium","color":"D","clarity":"VS1","depth":60.6,"table":58,"price":3239,"x":5.73,"y":5.75,"z":3.48},{"name":38697,"carat":0.37,"cut":"Ideal","color":"E","clarity":"VS2","depth":61.9,"table":53,"price":1041,"x":4.65,"y":4.62,"z":2.87},{"name":39651,"carat":0.5,"cut":"Very-Good","color":"I","clarity":"SI1","depth":63.2,"table":57,"price":1087,"x":5.07,"y":5.09,"z":3.21},{"name":16592,"carat":1.06,"cut":"Very-Good","color":"F","clarity":"VS2","depth":62.7,"table":55,"price":6627,"x":6.54,"y":6.5,"z":4.09},{"name":18088,"carat":1.22,"cut":"Premium","color":"H","clarity":"VS2","depth":60.8,"table":59,"price":7310,"x":6.93,"y":6.86,"z":4.19},{"name":48489,"carat":0.5,"cut":"Fair","color":"D","clarity":"VVS2","depth":67.6,"table":57,"price":1980,"x":4.95,"y":4.84,"z":3.31},{"name":6300,"carat":0.9,"cut":"Good","color":"G","clarity":"VS2","depth":63.6,"table":59,"price":4022,"x":6.1,"y":6.04,"z":3.86},{"name":2089,"carat":0.71,"cut":"Very-Good","color":"E","clarity":"VS1","depth":59.8,"table":58,"price":3112,"x":5.78,"y":5.82,"z":3.47},{"name":36243,"carat":0.54,"cut":"Ideal","color":"I","clarity":"SI2","depth":60.9,"table":57,"price":935,"x":5.26,"y":5.31,"z":3.22},{"name":53086,"carat":0.57,"cut":"Ideal","color":"G","clarity":"VVS1","depth":60.9,"table":56,"price":2612,"x":5.37,"y":5.41,"z":3.28},{"name":35614,"carat":0.3,"cut":"Premium","color":"I","clarity":"VS1","depth":59.1,"table":59,"price":473,"x":4.35,"y":4.38,"z":2.58},{"name":48148,"carat":0.53,"cut":"Premium","color":"D","clarity":"VS1","depth":62.4,"table":61,"price":1940,"x":5.25,"y":5.14,"z":3.24},{"name":27367,"carat":0.28,"cut":"Ideal","color":"E","clarity":"VVS2","depth":62.4,"table":56,"price":646,"x":4.16,"y":4.2,"z":2.61},{"name":38602,"carat":0.4,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.6,"table":57,"price":1038,"x":4.7,"y":4.68,"z":2.93},{"name":27118,"carat":2.05,"cut":"Premium","color":"E","clarity":"SI2","depth":62.5,"table":56,"price":17294,"x":8.17,"y":8.08,"z":5.08},{"name":33880,"carat":0.3,"cut":"Premium","color":"E","clarity":"VS2","depth":60.7,"table":59,"price":844,"x":4.33,"y":4.3,"z":2.62},{"name":27465,"carat":2.03,"cut":"Very-Good","color":"D","clarity":"SI2","depth":62.4,"table":59,"price":18120,"x":7.98,"y":8.04,"z":5},{"name":19752,"carat":1.02,"cut":"Ideal","color":"G","clarity":"VVS1","depth":61.5,"table":57,"price":8317,"x":6.47,"y":6.44,"z":3.97},{"name":20737,"carat":1.36,"cut":"Ideal","color":"G","clarity":"SI1","depth":60.9,"table":56,"price":8977,"x":7.15,"y":7.16,"z":4.36},{"name":20725,"carat":0.31,"cut":"Very-Good","color":"F","clarity":"VS2","depth":61.4,"table":55,"price":625,"x":4.32,"y":4.34,"z":2.66},{"name":53285,"carat":0.3,"cut":"Premium","color":"D","clarity":"SI1","depth":62.4,"table":60,"price":552,"x":4.23,"y":4.26,"z":2.65},{"name":25760,"carat":2.33,"cut":"Premium","color":"J","clarity":"SI1","depth":59.9,"table":59,"price":14711,"x":8.7,"y":8.65,"z":5.2},{"name":1993,"carat":0.91,"cut":"Premium","color":"F","clarity":"SI2","depth":62.1,"table":56,"price":3096,"x":6.26,"y":6.21,"z":3.87},{"name":13045,"carat":0.36,"cut":"Premium","color":"F","clarity":"SI1","depth":61.6,"table":60,"price":600,"x":4.54,"y":4.61,"z":2.82},{"name":19622,"carat":1,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61.2,"table":56,"price":8239,"x":6.47,"y":6.5,"z":3.97},{"name":32358,"carat":0.3,"cut":"Good","color":"G","clarity":"VVS1","depth":63.1,"table":56,"price":789,"x":4.25,"y":4.28,"z":2.69},{"name":26851,"carat":2.01,"cut":"Premium","color":"I","clarity":"VS2","depth":62.6,"table":59,"price":16778,"x":8.04,"y":8.01,"z":5.02},{"name":34059,"carat":0.36,"cut":"Ideal","color":"D","clarity":"SI1","depth":61.5,"table":56,"price":851,"x":4.64,"y":4.56,"z":2.83},{"name":14897,"carat":1.26,"cut":"Premium","color":"H","clarity":"SI2","depth":58.6,"table":59,"price":5998,"x":7.09,"y":7.04,"z":4.14},{"name":235,"carat":0.64,"cut":"Ideal","color":"D","clarity":"VS1","depth":61.5,"table":56,"price":2787,"x":5.54,"y":5.55,"z":3.41},{"name":4997,"carat":0.58,"cut":"Ideal","color":"D","clarity":"VVS1","depth":62.2,"table":56,"price":3741,"x":5.34,"y":5.36,"z":3.33},{"name":39946,"carat":0.24,"cut":"Good","color":"E","clarity":"VVS2","depth":65,"table":58,"price":492,"x":3.85,"y":3.9,"z":2.52},{"name":26147,"carat":2,"cut":"Premium","color":"H","clarity":"SI2","depth":59.7,"table":61,"price":15451,"x":8.2,"y":8.15,"z":4.88},{"name":17956,"carat":1.02,"cut":"Very-Good","color":"F","clarity":"VS1","depth":61.9,"table":59,"price":7257,"x":6.38,"y":6.44,"z":3.97},{"name":19885,"carat":1.2,"cut":"Very-Good","color":"F","clarity":"VS2","depth":61.1,"table":59,"price":8436,"x":6.81,"y":6.87,"z":4.18},{"name":37862,"carat":0.34,"cut":"Ideal","color":"F","clarity":"VVS2","depth":61,"table":56,"price":1003,"x":4.54,"y":4.57,"z":2.78},{"name":5256,"carat":1.01,"cut":"Very-Good","color":"I","clarity":"SI2","depth":61.4,"table":63,"price":3792,"x":6.33,"y":6.38,"z":3.9},{"name":16116,"carat":0.9,"cut":"Premium","color":"D","clarity":"VS1","depth":61.2,"table":58,"price":6441,"x":6.27,"y":6.25,"z":3.83},{"name":17009,"carat":1.33,"cut":"Ideal","color":"H","clarity":"SI2","depth":62.3,"table":55,"price":6791,"x":7.01,"y":7.08,"z":4.39},{"name":4428,"carat":1,"cut":"Good","color":"J","clarity":"SI1","depth":58.7,"table":62,"price":3614,"x":6.47,"y":6.51,"z":3.81},{"name":47942,"carat":0.55,"cut":"Ideal","color":"G","clarity":"VVS2","depth":62.2,"table":54,"price":1916,"x":5.23,"y":5.3,"z":3.27},{"name":34574,"carat":0.31,"cut":"Ideal","color":"G","clarity":"IF","depth":61.9,"table":56,"price":871,"x":4.33,"y":4.35,"z":2.68},{"name":11058,"carat":0.4,"cut":"Ideal","color":"H","clarity":"SI2","depth":61.9,"table":58,"price":596,"x":4.71,"y":4.73,"z":2.92},{"name":25643,"carat":2.15,"cut":"Ideal","color":"I","clarity":"SI1","depth":62.5,"table":57,"price":14534,"x":8.2,"y":8.16,"z":5.11},{"name":12593,"carat":1.27,"cut":"Ideal","color":"J","clarity":"VS2","depth":61.8,"table":54,"price":5285,"x":6.95,"y":6.98,"z":4.31},{"name":5579,"carat":0.9,"cut":"Very-Good","color":"E","clarity":"SI1","depth":63.6,"table":57,"price":3863,"x":6.08,"y":6.12,"z":3.88},{"name":9401,"carat":1.05,"cut":"Ideal","color":"H","clarity":"SI2","depth":61.9,"table":56,"price":4586,"x":6.56,"y":6.49,"z":4.04},{"name":20144,"carat":1.43,"cut":"Ideal","color":"G","clarity":"SI1","depth":62.8,"table":57,"price":8599,"x":7.17,"y":7.12,"z":4.49},{"name":52042,"carat":0.71,"cut":"Premium","color":"E","clarity":"SI2","depth":62.6,"table":58,"price":2450,"x":5.7,"y":5.67,"z":3.56},{"name":52908,"carat":0.64,"cut":"Ideal","color":"G","clarity":"VVS2","depth":60.7,"table":57,"price":2587,"x":5.58,"y":5.63,"z":3.4},{"name":32459,"carat":0.38,"cut":"Ideal","color":"H","clarity":"VVS2","depth":61.6,"table":56,"price":794,"x":4.67,"y":4.72,"z":2.89},{"name":41064,"carat":0.49,"cut":"Ideal","color":"H","clarity":"SI2","depth":60.7,"table":56,"price":1190,"x":5.13,"y":5.18,"z":3.13},{"name":47384,"carat":0.54,"cut":"Premium","color":"G","clarity":"VS1","depth":61.6,"table":56,"price":1847,"x":5.26,"y":5.23,"z":3.23},{"name":39278,"carat":0.34,"cut":"Ideal","color":"H","clarity":"SI1","depth":62.6,"table":56,"price":490,"x":4.46,"y":4.48,"z":2.8},{"name":21693,"carat":0.34,"cut":"Ideal","color":"I","clarity":"VVS1","depth":61.8,"table":56,"price":626,"x":4.47,"y":4.5,"z":2.77},{"name":18007,"carat":1.2,"cut":"Premium","color":"F","clarity":"SI1","depth":60.1,"table":59,"price":7282,"x":6.92,"y":6.85,"z":4.14},{"name":14160,"carat":1.31,"cut":"Premium","color":"I","clarity":"SI2","depth":60.5,"table":59,"price":5744,"x":7.11,"y":7.04,"z":4.28},{"name":29415,"carat":0.42,"cut":"Very-Good","color":"E","clarity":"SI2","depth":62.9,"table":56,"price":700,"x":4.77,"y":4.8,"z":3.01},{"name":43419,"carat":0.41,"cut":"Ideal","color":"D","clarity":"VVS1","depth":62.7,"table":56,"price":1413,"x":4.77,"y":4.74,"z":2.98},{"name":37822,"carat":0.31,"cut":"Ideal","color":"E","clarity":"IF","depth":61.3,"table":58,"price":1002,"x":4.37,"y":4.4,"z":2.69},{"name":28546,"carat":0.3,"cut":"Premium","color":"I","clarity":"VVS2","depth":61.8,"table":58,"price":675,"x":4.33,"y":4.28,"z":2.66},{"name":47739,"carat":0.7,"cut":"Premium","color":"I","clarity":"SI2","depth":62.4,"table":58,"price":1890,"x":5.68,"y":5.64,"z":3.53},{"name":40698,"carat":0.4,"cut":"Ideal","color":"E","clarity":"VVS2","depth":62.2,"table":56,"price":1158,"x":4.71,"y":4.78,"z":2.95},{"name":17406,"carat":1.1,"cut":"Ideal","color":"G","clarity":"VS2","depth":60.2,"table":56,"price":6972,"x":6.7,"y":6.74,"z":4.05},{"name":25732,"carat":1.51,"cut":"Good","color":"G","clarity":"IF","depth":62.8,"table":60,"price":14654,"x":7.18,"y":7.24,"z":4.53},{"name":53765,"carat":0.7,"cut":"Very-Good","color":"D","clarity":"SI1","depth":62.6,"table":57,"price":2726,"x":5.67,"y":5.7,"z":3.56},{"name":13811,"carat":1.06,"cut":"Very-Good","color":"H","clarity":"VS1","depth":61.9,"table":58,"price":5627,"x":6.57,"y":6.49,"z":4.04},{"name":13975,"carat":1.27,"cut":"Premium","color":"I","clarity":"SI1","depth":62.3,"table":56,"price":5690,"x":6.93,"y":6.85,"z":4.29},{"name":11498,"carat":1.12,"cut":"Ideal","color":"G","clarity":"SI2","depth":61.5,"table":57,"price":5018,"x":6.74,"y":6.68,"z":4.13},{"name":92,"carat":0.86,"cut":"Fair","color":"E","clarity":"SI2","depth":55.1,"table":69,"price":2757,"x":6.45,"y":6.33,"z":3.52},{"name":40130,"carat":0.41,"cut":"Premium","color":"F","clarity":"VVS2","depth":60.6,"table":58,"price":1115,"x":4.79,"y":4.84,"z":2.92},{"name":31089,"carat":0.33,"cut":"Very-Good","color":"G","clarity":"VVS2","depth":60,"table":63,"price":752,"x":4.45,"y":4.49,"z":2.68},{"name":12062,"carat":1.01,"cut":"Ideal","color":"F","clarity":"SI2","depth":62.4,"table":54,"price":5154,"x":6.41,"y":6.44,"z":4.01},{"name":10388,"carat":0.3,"cut":"Fair","color":"F","clarity":"VS1","depth":61.7,"table":66,"price":593,"x":4.25,"y":4.31,"z":2.64},{"name":46337,"carat":0.58,"cut":"Ideal","color":"G","clarity":"VS2","depth":61.9,"table":56,"price":1758,"x":5.38,"y":5.34,"z":3.32},{"name":41965,"carat":0.23,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":62.7,"table":55,"price":505,"x":3.9,"y":3.95,"z":2.46},{"name":44984,"carat":0.31,"cut":"Premium","color":"G","clarity":"SI2","depth":62.3,"table":57,"price":523,"x":4.37,"y":4.33,"z":2.71},{"name":10061,"carat":0.31,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.5,"table":56,"price":591,"x":4.36,"y":4.39,"z":2.69},{"name":1719,"carat":0.32,"cut":"Good","color":"G","clarity":"VS2","depth":63.3,"table":54,"price":561,"x":4.36,"y":4.39,"z":2.77},{"name":50486,"carat":0.7,"cut":"Premium","color":"G","clarity":"SI2","depth":58,"table":60,"price":2268,"x":5.91,"y":5.88,"z":3.42},{"name":39484,"carat":0.41,"cut":"Ideal","color":"E","clarity":"VS1","depth":61.7,"table":57,"price":1079,"x":4.76,"y":4.8,"z":2.95},{"name":50934,"carat":0.7,"cut":"Premium","color":"D","clarity":"SI2","depth":62.1,"table":60,"price":2319,"x":5.73,"y":5.71,"z":3.55},{"name":21951,"carat":1.26,"cut":"Very-Good","color":"G","clarity":"VVS2","depth":60.9,"table":56,"price":10020,"x":6.95,"y":7.01,"z":4.25},{"name":53149,"carat":0.8,"cut":"Very-Good","color":"E","clarity":"SI2","depth":62.4,"table":55,"price":2623,"x":5.88,"y":5.92,"z":3.68},{"name":36621,"carat":0.24,"cut":"Very-Good","color":"F","clarity":"VVS2","depth":62.1,"table":58,"price":478,"x":3.96,"y":4.03,"z":2.48},{"name":40481,"carat":0.55,"cut":"Very-Good","color":"G","clarity":"SI1","depth":60.7,"table":56,"price":1141,"x":5.32,"y":5.38,"z":3.25},{"name":30147,"carat":0.32,"cut":"Premium","color":"E","clarity":"SI1","depth":60.2,"table":60,"price":720,"x":4.44,"y":4.39,"z":2.66},{"name":47083,"carat":0.69,"cut":"Premium","color":"H","clarity":"SI1","depth":62.8,"table":58,"price":1822,"x":5.65,"y":5.62,"z":3.54},{"name":37623,"carat":0.44,"cut":"Premium","color":"I","clarity":"VVS1","depth":62.5,"table":60,"price":990,"x":4.87,"y":4.82,"z":3.03},{"name":2504,"carat":0.7,"cut":"Premium","color":"E","clarity":"VS2","depth":61,"table":59,"price":3199,"x":5.74,"y":5.7,"z":3.49},{"name":19150,"carat":1.55,"cut":"Premium","color":"J","clarity":"VS2","depth":60.7,"table":59,"price":7911,"x":7.47,"y":7.5,"z":4.54},{"name":14664,"carat":1.01,"cut":"Very-Good","color":"G","clarity":"VS2","depth":61.6,"table":58,"price":5919,"x":6.4,"y":6.45,"z":3.96},{"name":24538,"carat":1.62,"cut":"Ideal","color":"F","clarity":"SI1","depth":62.7,"table":56,"price":12828,"x":7.5,"y":7.44,"z":4.68},{"name":964,"carat":0.71,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.7,"table":56,"price":2891,"x":5.71,"y":5.75,"z":3.59},{"name":34414,"carat":0.3,"cut":"Ideal","color":"G","clarity":"IF","depth":60.7,"table":57,"price":863,"x":4.34,"y":4.39,"z":2.65},{"name":42804,"carat":0.52,"cut":"Ideal","color":"G","clarity":"SI1","depth":62.2,"table":54,"price":1352,"x":5.18,"y":5.2,"z":3.23},{"name":20646,"carat":1.58,"cut":"Premium","color":"H","clarity":"VS2","depth":60.5,"table":58,"price":8936,"x":7.57,"y":7.54,"z":4.57},{"name":52407,"carat":0.71,"cut":"Ideal","color":"E","clarity":"SI2","depth":59.5,"table":57,"price":2511,"x":5.87,"y":5.82,"z":3.48},{"name":51353,"carat":0.71,"cut":"Very-Good","color":"G","clarity":"SI1","depth":63.4,"table":56,"price":2364,"x":5.64,"y":5.68,"z":3.59},{"name":29106,"carat":0.34,"cut":"Ideal","color":"H","clarity":"VS2","depth":62.5,"table":54,"price":689,"x":4.54,"y":4.49,"z":2.82},{"name":19876,"carat":1.31,"cut":"Ideal","color":"H","clarity":"VS1","depth":61.5,"table":56,"price":8429,"x":7,"y":7.06,"z":4.32},{"name":26399,"carat":2.01,"cut":"Premium","color":"H","clarity":"SI2","depth":62.3,"table":58,"price":15917,"x":8.11,"y":8.06,"z":5.04},{"name":33362,"carat":0.41,"cut":"Very-Good","color":"G","clarity":"VS2","depth":62.9,"table":59,"price":827,"x":4.7,"y":4.75,"z":2.97},{"name":10156,"carat":1.01,"cut":"Very-Good","color":"D","clarity":"SI2","depth":61.9,"table":58,"price":4727,"x":6.43,"y":6.49,"z":4},{"name":19789,"carat":1.06,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61.7,"table":56,"price":8358,"x":6.59,"y":6.56,"z":4.06},{"name":36629,"carat":0.29,"cut":"Very-Good","color":"H","clarity":"VVS1","depth":62,"table":55,"price":478,"x":4.24,"y":4.27,"z":2.64},{"name":16819,"carat":1.21,"cut":"Premium","color":"H","clarity":"VS2","depth":58.8,"table":59,"price":6708,"x":7.01,"y":6.98,"z":4.11},{"name":15591,"carat":1.24,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.3,"table":57,"price":6254,"x":6.95,"y":6.89,"z":4.24},{"name":28931,"carat":0.3,"cut":"Premium","color":"G","clarity":"VVS2","depth":61.9,"table":59,"price":684,"x":4.25,"y":4.28,"z":2.64},{"name":45361,"carat":0.52,"cut":"Very-Good","color":"E","clarity":"VS2","depth":62.2,"table":56,"price":1665,"x":5.16,"y":5.17,"z":3.21},{"name":19714,"carat":1.51,"cut":"Fair","color":"I","clarity":"VS2","depth":64.6,"table":58,"price":8287,"x":7.19,"y":7.15,"z":4.63},{"name":1192,"carat":0.72,"cut":"Very-Good","color":"G","clarity":"VVS2","depth":62.2,"table":57,"price":2933,"x":5.67,"y":5.72,"z":3.54},{"name":17556,"carat":1.55,"cut":"Very-Good","color":"H","clarity":"SI1","depth":63.2,"table":57,"price":7066,"x":7.35,"y":7.31,"z":4.64},{"name":21432,"carat":1.51,"cut":"Good","color":"E","clarity":"SI1","depth":65.5,"table":56,"price":9539,"x":7.12,"y":7.16,"z":4.68},{"name":4090,"carat":0.9,"cut":"Very-Good","color":"D","clarity":"SI2","depth":63,"table":58,"price":3534,"x":6.12,"y":6.16,"z":3.87},{"name":29990,"carat":0.32,"cut":"Ideal","color":"F","clarity":"VS1","depth":61.6,"table":57,"price":716,"x":4.39,"y":4.42,"z":2.71},{"name":18058,"carat":0.34,"cut":"Ideal","color":"G","clarity":"VS2","depth":60.8,"table":56,"price":616,"x":4.53,"y":4.55,"z":2.76},{"name":44285,"carat":0.52,"cut":"Ideal","color":"G","clarity":"VS2","depth":62,"table":55,"price":1577,"x":5.19,"y":5.13,"z":3.2},{"name":10297,"carat":1.01,"cut":"Good","color":"F","clarity":"SI1","depth":63.5,"table":59,"price":4759,"x":6.3,"y":6.39,"z":4.03},{"name":44889,"carat":0.5,"cut":"Premium","color":"E","clarity":"VS2","depth":61.8,"table":59,"price":1629,"x":5.12,"y":5.08,"z":3.15},{"name":2845,"carat":0.56,"cut":"Ideal","color":"D","clarity":"VVS1","depth":61.8,"table":56,"price":3270,"x":5.28,"y":5.31,"z":3.27},{"name":1505,"carat":0.75,"cut":"Ideal","color":"E","clarity":"SI1","depth":61.1,"table":57,"price":2993,"x":5.83,"y":5.86,"z":3.57},{"name":29164,"carat":0.27,"cut":"Good","color":"D","clarity":"VVS2","depth":64.3,"table":55,"price":693,"x":4.14,"y":4.09,"z":2.65},{"name":37686,"carat":0.43,"cut":"Premium","color":"D","clarity":"SI1","depth":61,"table":57,"price":993,"x":4.88,"y":4.85,"z":2.97},{"name":8363,"carat":1.01,"cut":"Very-Good","color":"E","clarity":"SI1","depth":61,"table":56,"price":4399,"x":6.47,"y":6.54,"z":3.97},{"name":21925,"carat":1.23,"cut":"Very-Good","color":"G","clarity":"VVS2","depth":62.2,"table":57,"price":9999,"x":6.8,"y":6.87,"z":4.25},{"name":6997,"carat":1,"cut":"Good","color":"F","clarity":"SI2","depth":63.8,"table":58,"price":4155,"x":6.33,"y":6.28,"z":4.02},{"name":31546,"carat":0.3,"cut":"Ideal","color":"E","clarity":"VVS2","depth":62.1,"table":57,"price":766,"x":4.27,"y":4.3,"z":2.66},{"name":30660,"carat":0.42,"cut":"Very-Good","color":"G","clarity":"SI1","depth":62.9,"table":54,"price":737,"x":4.79,"y":4.81,"z":3.02},{"name":48380,"carat":0.58,"cut":"Ideal","color":"E","clarity":"VS1","depth":60.1,"table":57,"price":1965,"x":5.41,"y":5.47,"z":3.27},{"name":33793,"carat":0.4,"cut":"Premium","color":"I","clarity":"VVS1","depth":62.7,"table":59,"price":842,"x":4.67,"y":4.71,"z":2.94},{"name":44592,"carat":0.53,"cut":"Premium","color":"I","clarity":"VVS1","depth":63,"table":56,"price":1607,"x":5.19,"y":5.13,"z":3.25},{"name":10888,"carat":1.21,"cut":"Ideal","color":"I","clarity":"SI2","depth":60.7,"table":56,"price":4880,"x":6.86,"y":6.91,"z":4.18},{"name":49510,"carat":0.73,"cut":"Ideal","color":"J","clarity":"VS1","depth":62,"table":53,"price":2121,"x":5.78,"y":5.82,"z":3.6},{"name":22374,"carat":0.31,"cut":"Premium","color":"H","clarity":"VS2","depth":62.5,"table":60,"price":628,"x":4.36,"y":4.31,"z":2.71},{"name":6709,"carat":0.24,"cut":"Very-Good","color":"E","clarity":"VS1","depth":62.5,"table":55,"price":412,"x":3.96,"y":3.98,"z":2.48},{"name":16834,"carat":1.01,"cut":"Very-Good","color":"F","clarity":"VS2","depth":63.6,"table":59,"price":6714,"x":6.3,"y":6.34,"z":4.02},{"name":14128,"carat":1.13,"cut":"Premium","color":"H","clarity":"VS2","depth":61.7,"table":56,"price":5728,"x":6.73,"y":6.65,"z":4.13},{"name":48456,"carat":0.58,"cut":"Premium","color":"G","clarity":"VVS2","depth":61.4,"table":61,"price":1975,"x":5.43,"y":5.38,"z":3.32},{"name":52067,"carat":0.79,"cut":"Ideal","color":"G","clarity":"SI2","depth":60.8,"table":57,"price":2453,"x":5.99,"y":5.96,"z":3.63},{"name":46822,"carat":0.7,"cut":"Premium","color":"H","clarity":"SI2","depth":60.5,"table":61,"price":1808,"x":5.75,"y":5.72,"z":3.47},{"name":40311,"carat":0.4,"cut":"Premium","color":"E","clarity":"VS1","depth":62.5,"table":58,"price":1125,"x":4.72,"y":4.69,"z":2.94},{"name":3638,"carat":0.74,"cut":"Ideal","color":"G","clarity":"VS2","depth":61.2,"table":56,"price":3434,"x":5.82,"y":5.85,"z":3.57},{"name":37724,"carat":0.34,"cut":"Premium","color":"G","clarity":"VVS2","depth":61.6,"table":58,"price":995,"x":4.49,"y":4.44,"z":2.75},{"name":46074,"carat":0.5,"cut":"Ideal","color":"F","clarity":"VS2","depth":62.9,"table":55,"price":1736,"x":5.12,"y":5.08,"z":3.21},{"name":20574,"carat":1.24,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.7,"table":58,"price":8887,"x":6.79,"y":6.86,"z":4.28},{"name":46990,"carat":0.57,"cut":"Good","color":"G","clarity":"VS2","depth":58.2,"table":66,"price":1816,"x":5.34,"y":5.45,"z":3.14},{"name":2760,"carat":0.93,"cut":"Premium","color":"J","clarity":"VS2","depth":62.3,"table":60,"price":3250,"x":6.3,"y":6.23,"z":3.9},{"name":40891,"carat":0.5,"cut":"Fair","color":"E","clarity":"SI1","depth":65,"table":58,"price":1176,"x":4.98,"y":4.9,"z":3.21},{"name":27955,"carat":0.27,"cut":"Ideal","color":"I","clarity":"VS1","depth":62.5,"table":54,"price":432,"x":4.16,"y":4.19,"z":2.61},{"name":13867,"carat":1.01,"cut":"Ideal","color":"F","clarity":"SI1","depth":62.3,"table":58,"price":5646,"x":6.35,"y":6.42,"z":3.98},{"name":742,"carat":0.33,"cut":"Premium","color":"G","clarity":"SI2","depth":62.6,"table":58,"price":557,"x":4.42,"y":4.4,"z":2.76},{"name":34077,"carat":0.36,"cut":"Ideal","color":"D","clarity":"VS2","depth":61,"table":56,"price":852,"x":4.59,"y":4.63,"z":2.81},{"name":47862,"carat":0.56,"cut":"Premium","color":"D","clarity":"VS2","depth":61.5,"table":58,"price":1910,"x":5.28,"y":5.33,"z":3.26},{"name":31308,"carat":0.32,"cut":"Ideal","color":"D","clarity":"VS2","depth":62.6,"table":57,"price":758,"x":4.37,"y":4.41,"z":2.75},{"name":784,"carat":0.53,"cut":"Ideal","color":"F","clarity":"VVS1","depth":61.4,"table":57,"price":2860,"x":5.23,"y":5.2,"z":3.2},{"name":17276,"carat":1.07,"cut":"Ideal","color":"G","clarity":"VS1","depth":61.8,"table":57,"price":6917,"x":6.58,"y":6.52,"z":4.05},{"name":26631,"carat":2.22,"cut":"Good","color":"I","clarity":"SI2","depth":63.2,"table":57,"price":16398,"x":8.23,"y":8.28,"z":5.22},{"name":39297,"carat":0.3,"cut":"Ideal","color":"H","clarity":"VS2","depth":62.3,"table":57,"price":491,"x":4.27,"y":4.3,"z":2.67},{"name":31558,"carat":0.38,"cut":"Very-Good","color":"G","clarity":"VS2","depth":59.9,"table":58,"price":766,"x":4.72,"y":4.77,"z":2.84},{"name":10524,"carat":1.01,"cut":"Ideal","color":"D","clarity":"SI2","depth":63,"table":54,"price":4805,"x":6.43,"y":6.39,"z":4.04},{"name":19656,"carat":1.01,"cut":"Premium","color":"D","clarity":"VS1","depth":62.4,"table":58,"price":8265,"x":6.38,"y":6.41,"z":3.99},{"name":44163,"carat":0.5,"cut":"Very-Good","color":"D","clarity":"VS2","depth":61.1,"table":58,"price":1565,"x":5.09,"y":5.18,"z":3.14},{"name":15322,"carat":1.04,"cut":"Good","color":"G","clarity":"VS1","depth":58.9,"table":64,"price":6151,"x":6.6,"y":6.64,"z":3.9},{"name":33575,"carat":0.3,"cut":"Very-Good","color":"F","clarity":"VVS1","depth":62.2,"table":56,"price":832,"x":4.28,"y":4.3,"z":2.67},{"name":23208,"carat":1,"cut":"Very-Good","color":"E","clarity":"IF","depth":62.5,"table":55,"price":11214,"x":6.28,"y":6.39,"z":3.96},{"name":35938,"carat":0.41,"cut":"Very-Good","color":"D","clarity":"SI1","depth":60.3,"table":63,"price":920,"x":4.8,"y":4.78,"z":2.89},{"name":25815,"carat":1.62,"cut":"Premium","color":"F","clarity":"VS2","depth":61.1,"table":60,"price":14826,"x":7.56,"y":7.57,"z":4.62},{"name":36962,"carat":0.41,"cut":"Premium","color":"G","clarity":"VS1","depth":61.9,"table":60,"price":961,"x":4.76,"y":4.7,"z":2.93},{"name":22887,"carat":1.36,"cut":"Premium","color":"F","clarity":"VS2","depth":59.3,"table":60,"price":10929,"x":7.23,"y":7.2,"z":4.28},{"name":8411,"carat":0.9,"cut":"Ideal","color":"H","clarity":"VS2","depth":61.9,"table":58,"price":4403,"x":6.2,"y":6.24,"z":3.85},{"name":30964,"carat":0.36,"cut":"Ideal","color":"G","clarity":"VS1","depth":61.1,"table":55,"price":746,"x":4.63,"y":4.66,"z":2.84},{"name":11781,"carat":1.02,"cut":"Premium","color":"H","clarity":"SI1","depth":61.1,"table":58,"price":5084,"x":6.51,"y":6.46,"z":3.96},{"name":4269,"carat":1.02,"cut":"Premium","color":"H","clarity":"SI1","depth":62.2,"table":52,"price":3581,"x":6.47,"y":6.43,"z":4.01},{"name":2070,"carat":0.32,"cut":"Premium","color":"E","clarity":"SI1","depth":61.9,"table":59,"price":561,"x":4.36,"y":4.39,"z":2.71},{"name":3541,"carat":1.01,"cut":"Good","color":"I","clarity":"SI2","depth":64.1,"table":58,"price":3411,"x":6.31,"y":6.26,"z":4.03},{"name":21716,"carat":0.28,"cut":"Very-Good","color":"F","clarity":"VVS2","depth":60.2,"table":58,"price":628,"x":4.26,"y":4.28,"z":2.57},{"name":35949,"carat":0.3,"cut":"Ideal","color":"F","clarity":"SI1","depth":61.9,"table":54,"price":475,"x":4.33,"y":4.36,"z":2.69},{"name":26088,"carat":2.03,"cut":"Premium","color":"G","clarity":"SI1","depth":61.9,"table":59,"price":15322,"x":8.14,"y":8.09,"z":5.02},{"name":11169,"carat":1.07,"cut":"Premium","color":"D","clarity":"SI2","depth":62.6,"table":61,"price":4949,"x":6.49,"y":6.42,"z":4.04},{"name":25784,"carat":1.5,"cut":"Ideal","color":"F","clarity":"VS2","depth":62.6,"table":57,"price":14759,"x":7.27,"y":7.34,"z":4.57},{"name":47991,"carat":0.32,"cut":"Good","color":"F","clarity":"SI1","depth":63.2,"table":55,"price":533,"x":4.37,"y":4.4,"z":2.77},{"name":4390,"carat":0.31,"cut":"Ideal","color":"D","clarity":"SI1","depth":62.6,"table":57,"price":571,"x":4.3,"y":4.33,"z":2.7},{"name":38412,"carat":0.35,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61,"table":57,"price":1024,"x":4.58,"y":4.54,"z":2.78},{"name":28578,"carat":0.3,"cut":"Premium","color":"H","clarity":"VS1","depth":63,"table":59,"price":675,"x":4.27,"y":4.21,"z":2.67},{"name":20013,"carat":0.32,"cut":"Premium","color":"G","clarity":"SI2","depth":61.6,"table":59,"price":421,"x":4.35,"y":4.38,"z":2.69},{"name":29574,"carat":0.41,"cut":"Good","color":"F","clarity":"SI1","depth":63.7,"table":58,"price":705,"x":4.71,"y":4.74,"z":3.01},{"name":44447,"carat":0.51,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.9,"table":55,"price":1591,"x":5.11,"y":5.15,"z":3.18},{"name":22881,"carat":1.26,"cut":"Very-Good","color":"G","clarity":"VVS1","depth":60.2,"table":59,"price":10922,"x":6.98,"y":7.07,"z":4.23},{"name":35856,"carat":0.32,"cut":"Ideal","color":"D","clarity":"VVS1","depth":62.6,"table":57,"price":917,"x":4.34,"y":4.41,"z":2.74},{"name":52284,"carat":0.59,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":61.7,"table":59,"price":2494,"x":5.37,"y":5.36,"z":3.31},{"name":16038,"carat":0.3,"cut":"Very-Good","color":"I","clarity":"VS1","depth":63.3,"table":59,"price":608,"x":4.23,"y":4.2,"z":2.67},{"name":51853,"carat":0.7,"cut":"Ideal","color":"D","clarity":"SI2","depth":60.3,"table":56,"price":2423,"x":5.77,"y":5.73,"z":3.47},{"name":33738,"carat":0.3,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":62.9,"table":55,"price":840,"x":4.25,"y":4.27,"z":2.68},{"name":14498,"carat":0.9,"cut":"Good","color":"G","clarity":"IF","depth":61.8,"table":61,"price":5855,"x":6.12,"y":6.17,"z":3.8},{"name":33530,"carat":0.35,"cut":"Very-Good","color":"E","clarity":"VS1","depth":62.3,"table":60,"price":829,"x":4.5,"y":4.52,"z":2.81},{"name":39122,"carat":0.41,"cut":"Premium","color":"G","clarity":"VS2","depth":59.7,"table":59,"price":1061,"x":4.84,"y":4.81,"z":2.88},{"name":15622,"carat":1.01,"cut":"Very-Good","color":"F","clarity":"VS2","depth":63.1,"table":56,"price":6267,"x":6.41,"y":6.37,"z":4.03},{"name":14279,"carat":1.01,"cut":"Premium","color":"D","clarity":"SI1","depth":61.2,"table":60,"price":5780,"x":6.47,"y":6.41,"z":3.94},{"name":41635,"carat":0.32,"cut":"Ideal","color":"J","clarity":"VS2","depth":62.1,"table":54,"price":504,"x":4.44,"y":4.38,"z":2.74},{"name":1109,"carat":0.85,"cut":"Ideal","color":"G","clarity":"SI2","depth":62,"table":57,"price":2913,"x":6.1,"y":6.02,"z":3.76},{"name":15925,"carat":1.31,"cut":"Premium","color":"H","clarity":"VS2","depth":62.1,"table":58,"price":6368,"x":7.01,"y":6.86,"z":4.31},{"name":23645,"carat":3.65,"cut":"Fair","color":"H","clarity":"I1","depth":67.1,"table":53,"price":11668,"x":9.53,"y":9.48,"z":6.38},{"name":51650,"carat":0.26,"cut":"Very-Good","color":"G","clarity":"VVS1","depth":61.8,"table":57,"price":545,"x":4.06,"y":4.1,"z":2.52},{"name":32858,"carat":0.4,"cut":"Ideal","color":"H","clarity":"VS1","depth":61.8,"table":56,"price":807,"x":4.74,"y":4.78,"z":2.94},{"name":9462,"carat":0.9,"cut":"Very-Good","color":"G","clarity":"VS2","depth":62.5,"table":57,"price":4600,"x":6.12,"y":6.14,"z":3.83},{"name":28225,"carat":0.33,"cut":"Ideal","color":"F","clarity":"VS2","depth":62.1,"table":55,"price":666,"x":4.45,"y":4.47,"z":2.77},{"name":36301,"carat":0.32,"cut":"Ideal","color":"H","clarity":"VVS1","depth":60.4,"table":57,"price":936,"x":4.46,"y":4.42,"z":2.68},{"name":21272,"carat":1.2,"cut":"Ideal","color":"D","clarity":"VS2","depth":61.4,"table":55,"price":9424,"x":6.78,"y":6.87,"z":4.19},{"name":53353,"carat":1,"cut":"Good","color":"D","clarity":"I1","depth":57.8,"table":62,"price":2657,"x":6.51,"y":6.47,"z":3.75},{"name":19863,"carat":1.01,"cut":"Premium","color":"D","clarity":"VS1","depth":62.4,"table":58,"price":8416,"x":6.41,"y":6.38,"z":3.99},{"name":49842,"carat":0.71,"cut":"Premium","color":"H","clarity":"VS2","depth":61.3,"table":58,"price":2169,"x":5.76,"y":5.82,"z":3.55},{"name":12867,"carat":1.12,"cut":"Premium","color":"H","clarity":"SI1","depth":62.2,"table":60,"price":5363,"x":6.65,"y":6.59,"z":4.12},{"name":45455,"carat":0.5,"cut":"Very-Good","color":"E","clarity":"VS1","depth":62.7,"table":56,"price":1675,"x":5.09,"y":5.12,"z":3.2},{"name":17538,"carat":1,"cut":"Ideal","color":"F","clarity":"VS1","depth":61.7,"table":55,"price":7056,"x":6.42,"y":6.39,"z":3.95},{"name":50586,"carat":0.56,"cut":"Ideal","color":"F","clarity":"VVS2","depth":62.3,"table":54,"price":2281,"x":5.29,"y":5.34,"z":3.31},{"name":12350,"carat":1.14,"cut":"Premium","color":"F","clarity":"SI1","depth":62.5,"table":59,"price":5228,"x":6.67,"y":6.65,"z":4.16},{"name":24704,"carat":0.32,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.1,"table":55,"price":639,"x":4.39,"y":4.43,"z":2.74},{"name":39854,"carat":0.57,"cut":"Good","color":"J","clarity":"VS2","depth":63.3,"table":56,"price":1100,"x":5.24,"y":5.28,"z":3.33},{"name":40949,"carat":0.3,"cut":"Good","color":"F","clarity":"SI1","depth":63.5,"table":59,"price":500,"x":4.19,"y":4.22,"z":2.67},{"name":29620,"carat":0.3,"cut":"Ideal","color":"I","clarity":"SI1","depth":60.4,"table":59,"price":439,"x":4.33,"y":4.35,"z":2.62},{"name":15525,"carat":1.01,"cut":"Very-Good","color":"E","clarity":"VS2","depth":63,"table":60,"price":6221,"x":6.32,"y":6.35,"z":3.99},{"name":52886,"carat":0.7,"cut":"Good","color":"D","clarity":"SI2","depth":58.2,"table":63,"price":2583,"x":5.78,"y":5.83,"z":3.38},{"name":41653,"carat":0.59,"cut":"Very-Good","color":"H","clarity":"SI1","depth":61.8,"table":56,"price":1239,"x":5.39,"y":5.43,"z":3.35},{"name":22879,"carat":1.5,"cut":"Ideal","color":"H","clarity":"VS2","depth":62.3,"table":56,"price":10920,"x":7.34,"y":7.29,"z":4.56},{"name":13418,"carat":1.5,"cut":"Ideal","color":"I","clarity":"I1","depth":61.8,"table":57,"price":5510,"x":7.39,"y":7.31,"z":4.54},{"name":7283,"carat":1,"cut":"Premium","color":"E","clarity":"SI2","depth":62.8,"table":59,"price":4200,"x":6.34,"y":6.3,"z":3.97},{"name":19217,"carat":1.51,"cut":"Good","color":"I","clarity":"SI2","depth":63.6,"table":60,"price":7957,"x":7.27,"y":7.23,"z":4.61},{"name":11040,"carat":1.01,"cut":"Premium","color":"H","clarity":"VS2","depth":60.7,"table":61,"price":4921,"x":6.47,"y":6.39,"z":3.9},{"name":45136,"carat":0.5,"cut":"Ideal","color":"D","clarity":"VS2","depth":62.4,"table":55,"price":1653,"x":5.09,"y":5.1,"z":3.18},{"name":37894,"carat":0.41,"cut":"Very-Good","color":"G","clarity":"VVS2","depth":62.9,"table":56,"price":1007,"x":4.7,"y":4.74,"z":2.97},{"name":46392,"carat":0.37,"cut":"Ideal","color":"D","clarity":"VVS1","depth":61.3,"table":56,"price":1764,"x":4.6,"y":4.63,"z":2.83},{"name":28687,"carat":0.36,"cut":"Ideal","color":"G","clarity":"VS1","depth":62.3,"table":57,"price":678,"x":4.55,"y":4.57,"z":2.84},{"name":7453,"carat":0.9,"cut":"Premium","color":"H","clarity":"VS1","depth":62.7,"table":60,"price":4234,"x":6.12,"y":6.07,"z":3.82},{"name":17663,"carat":1.02,"cut":"Ideal","color":"D","clarity":"VS1","depth":62.7,"table":55,"price":7118,"x":6.49,"y":6.4,"z":4.04},{"name":50415,"carat":0.71,"cut":"Good","color":"F","clarity":"SI1","depth":64.3,"table":58,"price":2258,"x":5.61,"y":5.55,"z":3.59},{"name":32993,"carat":0.38,"cut":"Premium","color":"I","clarity":"VS2","depth":61.5,"table":58,"price":812,"x":4.62,"y":4.61,"z":2.84},{"name":29,"carat":0.23,"cut":"Very-Good","color":"D","clarity":"VS2","depth":60.5,"table":61,"price":357,"x":3.96,"y":3.97,"z":2.4},{"name":5320,"carat":0.9,"cut":"Good","color":"D","clarity":"SI2","depth":62.3,"table":58,"price":3806,"x":6.05,"y":6.27,"z":3.84},{"name":23642,"carat":1.51,"cut":"Premium","color":"F","clarity":"SI1","depth":62.8,"table":59,"price":11666,"x":7.31,"y":7.28,"z":4.58},{"name":17874,"carat":1.4,"cut":"Ideal","color":"H","clarity":"SI2","depth":61.2,"table":56,"price":7213,"x":7.23,"y":7.18,"z":4.41},{"name":51203,"carat":0.7,"cut":"Fair","color":"H","clarity":"VS2","depth":67.8,"table":56,"price":2351,"x":5.42,"y":5.38,"z":3.66},{"name":22743,"carat":1.51,"cut":"Ideal","color":"H","clarity":"VS2","depth":62.5,"table":55,"price":10763,"x":7.29,"y":7.34,"z":4.57},{"name":28569,"carat":0.3,"cut":"Good","color":"H","clarity":"VS1","depth":63.9,"table":55,"price":675,"x":4.28,"y":4.26,"z":2.73},{"name":51750,"carat":0.78,"cut":"Very-Good","color":"H","clarity":"SI2","depth":62.6,"table":59,"price":2405,"x":5.81,"y":5.85,"z":3.65},{"name":44363,"carat":0.56,"cut":"Ideal","color":"E","clarity":"SI1","depth":60.9,"table":56,"price":1580,"x":5.32,"y":5.35,"z":3.25},{"name":42559,"carat":0.42,"cut":"Ideal","color":"D","clarity":"VVS2","depth":62.1,"table":55,"price":1326,"x":4.78,"y":4.81,"z":2.98},{"name":32403,"carat":0.37,"cut":"Premium","color":"F","clarity":"SI1","depth":62.5,"table":58,"price":791,"x":4.57,"y":4.52,"z":2.84},{"name":15752,"carat":1.32,"cut":"Very-Good","color":"I","clarity":"SI2","depth":61.2,"table":58,"price":6300,"x":7.12,"y":7.06,"z":4.34},{"name":46703,"carat":0.55,"cut":"Ideal","color":"E","clarity":"VS2","depth":61.4,"table":56,"price":1792,"x":5.32,"y":5.26,"z":3.25},{"name":2555,"carat":0.93,"cut":"Very-Good","color":"J","clarity":"VS2","depth":63.3,"table":61,"price":3208,"x":6.19,"y":6.14,"z":3.9},{"name":11773,"carat":1.21,"cut":"Premium","color":"H","clarity":"SI2","depth":58.2,"table":59,"price":5082,"x":7.05,"y":7.03,"z":4.1},{"name":39085,"carat":0.41,"cut":"Good","color":"E","clarity":"VVS2","depth":63.1,"table":58,"price":1060,"x":4.72,"y":4.75,"z":2.99},{"name":53456,"carat":0.7,"cut":"Very-Good","color":"D","clarity":"SI1","depth":61.1,"table":57,"price":2677,"x":5.74,"y":5.66,"z":3.48},{"name":44088,"carat":0.5,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.1,"table":55,"price":1554,"x":5.11,"y":5.13,"z":3.18},{"name":8446,"carat":1.01,"cut":"Premium","color":"H","clarity":"VS2","depth":62.3,"table":58,"price":4412,"x":6.45,"y":6.36,"z":3.99},{"name":35862,"carat":0.4,"cut":"Ideal","color":"F","clarity":"VS1","depth":61.8,"table":54,"price":917,"x":4.75,"y":4.77,"z":2.94},{"name":49888,"carat":0.65,"cut":"Ideal","color":"H","clarity":"VVS1","depth":62.4,"table":54,"price":2177,"x":5.55,"y":5.57,"z":3.47},{"name":30460,"carat":0.4,"cut":"Premium","color":"H","clarity":"VS1","depth":62.7,"table":59,"price":731,"x":4.63,"y":4.71,"z":2.93},{"name":7842,"carat":0.91,"cut":"Very-Good","color":"D","clarity":"SI1","depth":62.8,"table":57,"price":4303,"x":6.12,"y":6.17,"z":3.86},{"name":36223,"carat":0.36,"cut":"Ideal","color":"D","clarity":"VS2","depth":60,"table":56,"price":933,"x":4.68,"y":4.66,"z":2.8},{"name":33553,"carat":0.3,"cut":"Ideal","color":"G","clarity":"IF","depth":62.3,"table":52.8,"price":830,"x":4.29,"y":4.33,"z":2.69},{"name":35961,"carat":0.3,"cut":"Very-Good","color":"D","clarity":"SI1","depth":62.6,"table":59,"price":476,"x":4.24,"y":4.26,"z":2.66},{"name":42011,"carat":0.51,"cut":"Premium","color":"E","clarity":"SI2","depth":61.8,"table":58,"price":1265,"x":5.11,"y":5.08,"z":3.15},{"name":9296,"carat":0.91,"cut":"Premium","color":"G","clarity":"VS1","depth":62.5,"table":61,"price":4570,"x":6.17,"y":6.05,"z":3.82},{"name":34989,"carat":0.34,"cut":"Ideal","color":"E","clarity":"VS1","depth":62,"table":57,"price":881,"x":4.49,"y":4.44,"z":2.77},{"name":51770,"carat":0.7,"cut":"Good","color":"F","clarity":"SI1","depth":58.7,"table":60,"price":2409,"x":5.75,"y":5.81,"z":3.39},{"name":10157,"carat":1.02,"cut":"Very-Good","color":"H","clarity":"SI1","depth":61.6,"table":58,"price":4727,"x":6.49,"y":6.54,"z":4.01},{"name":111,"carat":0.8,"cut":"Ideal","color":"F","clarity":"SI2","depth":61.4,"table":57,"price":2761,"x":5.96,"y":6,"z":3.67},{"name":42346,"carat":0.42,"cut":"Ideal","color":"H","clarity":"VS1","depth":61,"table":57,"price":1299,"x":4.85,"y":4.89,"z":2.97},{"name":16255,"carat":1.2,"cut":"Ideal","color":"G","clarity":"SI1","depth":61.2,"table":56,"price":6502,"x":6.92,"y":6.84,"z":4.21},{"name":33850,"carat":0.3,"cut":"Premium","color":"F","clarity":"VS1","depth":61.9,"table":59,"price":844,"x":4.3,"y":4.26,"z":2.65},{"name":11943,"carat":1.01,"cut":"Fair","color":"F","clarity":"SI1","depth":65,"table":61,"price":5131,"x":6.29,"y":6.23,"z":4.07},{"name":6954,"carat":0.93,"cut":"Very-Good","color":"G","clarity":"SI1","depth":62.3,"table":58,"price":4144,"x":6.2,"y":6.29,"z":3.9},{"name":51812,"carat":0.71,"cut":"Ideal","color":"F","clarity":"SI1","depth":61.6,"table":56,"price":2416,"x":5.71,"y":5.75,"z":3.53},{"name":5367,"carat":0.75,"cut":"Very-Good","color":"E","clarity":"VS2","depth":60.4,"table":56,"price":3817,"x":5.9,"y":5.96,"z":3.58},{"name":40884,"carat":0.38,"cut":"Ideal","color":"E","clarity":"VVS2","depth":61.6,"table":55,"price":1176,"x":4.66,"y":4.63,"z":2.86},{"name":28456,"carat":0.41,"cut":"Good","color":"G","clarity":"SI1","depth":63.4,"table":57,"price":671,"x":4.7,"y":4.73,"z":2.99},{"name":20701,"carat":0.31,"cut":"Very-Good","color":"G","clarity":"VS1","depth":62.9,"table":57,"price":625,"x":4.3,"y":4.32,"z":2.71},{"name":17288,"carat":1.12,"cut":"Very-Good","color":"F","clarity":"VS2","depth":62,"table":58,"price":6925,"x":6.63,"y":6.69,"z":4.13},{"name":31557,"carat":0.38,"cut":"Very-Good","color":"G","clarity":"VS2","depth":60.4,"table":57,"price":766,"x":4.67,"y":4.7,"z":2.83},{"name":47244,"carat":0.62,"cut":"Premium","color":"G","clarity":"VS2","depth":61.1,"table":59,"price":1841,"x":5.56,"y":5.5,"z":3.38},{"name":29351,"carat":0.31,"cut":"Ideal","color":"G","clarity":"VS2","depth":62,"table":57,"price":698,"x":4.37,"y":4.34,"z":2.7},{"name":29461,"carat":0.32,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.2,"table":56,"price":702,"x":4.37,"y":4.41,"z":2.73},{"name":52358,"carat":0.74,"cut":"Ideal","color":"E","clarity":"SI2","depth":61.7,"table":57,"price":2501,"x":5.78,"y":5.82,"z":3.58},{"name":37202,"carat":0.46,"cut":"Ideal","color":"I","clarity":"VVS1","depth":61.7,"table":57,"price":974,"x":4.96,"y":4.99,"z":3.07},{"name":41766,"carat":0.52,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.7,"table":55,"price":1245,"x":5.17,"y":5.21,"z":3.2},{"name":13395,"carat":0.32,"cut":"Good","color":"F","clarity":"VS2","depth":63.3,"table":57,"price":602,"x":4.34,"y":4.38,"z":2.76},{"name":15775,"carat":1.28,"cut":"Ideal","color":"I","clarity":"VS2","depth":61.4,"table":57,"price":6308,"x":7.04,"y":6.97,"z":4.3},{"name":30071,"carat":0.32,"cut":"Premium","color":"G","clarity":"VS2","depth":62.3,"table":60,"price":720,"x":4.4,"y":4.37,"z":2.73},{"name":35305,"carat":0.3,"cut":"Ideal","color":"I","clarity":"VS1","depth":61,"table":56,"price":473,"x":4.35,"y":4.37,"z":2.66},{"name":2839,"carat":0.96,"cut":"Premium","color":"J","clarity":"SI1","depth":60.3,"table":59,"price":3269,"x":6.4,"y":6.36,"z":3.85},{"name":5321,"carat":0.9,"cut":"Very-Good","color":"D","clarity":"SI2","depth":61,"table":59,"price":3806,"x":6.14,"y":6.18,"z":3.76},{"name":4166,"carat":0.71,"cut":"Ideal","color":"E","clarity":"VS2","depth":61.6,"table":56,"price":3553,"x":5.73,"y":5.77,"z":3.54},{"name":29995,"carat":0.43,"cut":"Ideal","color":"H","clarity":"SI1","depth":62.5,"table":57,"price":716,"x":4.79,"y":4.84,"z":3.01},{"name":44224,"carat":0.5,"cut":"Ideal","color":"D","clarity":"VS1","depth":63,"table":57,"price":1571,"x":5.06,"y":5,"z":3.17},{"name":17403,"carat":1.09,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.4,"table":56,"price":6970,"x":6.61,"y":6.64,"z":4.07},{"name":47978,"carat":0.38,"cut":"Ideal","color":"G","clarity":"SI2","depth":62,"table":55,"price":532,"x":4.66,"y":4.69,"z":2.9},{"name":13226,"carat":1.01,"cut":"Very-Good","color":"E","clarity":"SI1","depth":62.1,"table":56,"price":5461,"x":6.43,"y":6.48,"z":4.01},{"name":47074,"carat":0.52,"cut":"Ideal","color":"D","clarity":"VS2","depth":62.3,"table":56,"price":1822,"x":5.11,"y":5.16,"z":3.2},{"name":47372,"carat":0.54,"cut":"Ideal","color":"E","clarity":"VS2","depth":61.8,"table":55,"price":1847,"x":5.26,"y":5.24,"z":3.24},{"name":11837,"carat":1,"cut":"Good","color":"D","clarity":"SI1","depth":60.4,"table":64,"price":5096,"x":6.39,"y":6.3,"z":3.83},{"name":29997,"carat":0.43,"cut":"Premium","color":"D","clarity":"SI2","depth":62.6,"table":58,"price":716,"x":4.79,"y":4.82,"z":3.01},{"name":23705,"carat":0.4,"cut":"Good","color":"J","clarity":"VS1","depth":63.2,"table":57,"price":631,"x":4.7,"y":4.73,"z":2.98},{"name":32085,"carat":0.33,"cut":"Ideal","color":"D","clarity":"VS2","depth":60.9,"table":55,"price":781,"x":4.47,"y":4.5,"z":2.73},{"name":47038,"carat":0.55,"cut":"Ideal","color":"D","clarity":"SI1","depth":60.6,"table":56,"price":1819,"x":5.32,"y":5.27,"z":3.21},{"name":18340,"carat":1.29,"cut":"Ideal","color":"G","clarity":"SI1","depth":60.9,"table":59,"price":7463,"x":6.99,"y":7.04,"z":4.27},{"name":40778,"carat":0.5,"cut":"Very-Good","color":"D","clarity":"SI2","depth":61.9,"table":56,"price":1167,"x":5.09,"y":5.14,"z":3.16},{"name":17448,"carat":1.07,"cut":"Very-Good","color":"G","clarity":"VS1","depth":60.9,"table":55,"price":6998,"x":6.6,"y":6.64,"z":4.03},{"name":53543,"carat":0.78,"cut":"Fair","color":"H","clarity":"VS2","depth":54.7,"table":67,"price":2691,"x":6.25,"y":6.15,"z":3.4},{"name":33882,"carat":0.3,"cut":"Ideal","color":"E","clarity":"VS2","depth":61.5,"table":56,"price":844,"x":4.33,"y":4.29,"z":2.65},{"name":9332,"carat":0.9,"cut":"Very-Good","color":"E","clarity":"VS2","depth":62.2,"table":59,"price":4580,"x":6.13,"y":6.18,"z":3.83},{"name":52271,"carat":0.76,"cut":"Premium","color":"F","clarity":"SI2","depth":62.7,"table":55,"price":2491,"x":5.83,"y":5.74,"z":3.63},{"name":28016,"carat":0.3,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.3,"table":56,"price":658,"x":4.3,"y":4.34,"z":2.69},{"name":29765,"carat":0.35,"cut":"Premium","color":"H","clarity":"VS2","depth":61.8,"table":56,"price":709,"x":4.58,"y":4.54,"z":2.82},{"name":43461,"carat":0.55,"cut":"Very-Good","color":"E","clarity":"SI1","depth":64.2,"table":55,"price":1417,"x":5.18,"y":5.2,"z":3.33},{"name":11508,"carat":1.01,"cut":"Ideal","color":"I","clarity":"SI1","depth":62.5,"table":56,"price":5020,"x":6.4,"y":6.36,"z":3.99},{"name":19105,"carat":1.22,"cut":"Premium","color":"G","clarity":"VS2","depth":61.2,"table":58,"price":7870,"x":6.91,"y":6.81,"z":4.2},{"name":33733,"carat":0.39,"cut":"Ideal","color":"E","clarity":"VS2","depth":60.9,"table":55,"price":839,"x":4.73,"y":4.76,"z":2.89},{"name":22264,"carat":1.54,"cut":"Premium","color":"E","clarity":"SI1","depth":62.7,"table":58,"price":10314,"x":7.37,"y":7.3,"z":4.6},{"name":21692,"carat":0.34,"cut":"Good","color":"D","clarity":"SI1","depth":63.1,"table":57,"price":626,"x":4.44,"y":4.46,"z":2.81},{"name":4129,"carat":1.52,"cut":"Premium","color":"I","clarity":"I1","depth":61.2,"table":58,"price":3541,"x":7.43,"y":7.35,"z":4.52},{"name":49854,"carat":0.71,"cut":"Very-Good","color":"G","clarity":"SI2","depth":62.4,"table":54,"price":2171,"x":5.72,"y":5.76,"z":3.58},{"name":37817,"carat":0.36,"cut":"Very-Good","color":"G","clarity":"IF","depth":60.4,"table":62,"price":1002,"x":4.6,"y":4.64,"z":2.79},{"name":39821,"carat":0.3,"cut":"Premium","color":"E","clarity":"IF","depth":61.9,"table":58,"price":1097,"x":4.3,"y":4.26,"z":2.65},{"name":26386,"carat":1.23,"cut":"Very-Good","color":"E","clarity":"VVS1","depth":61.2,"table":59,"price":15878,"x":6.9,"y":6.98,"z":4.25},{"name":19879,"carat":1.12,"cut":"Good","color":"F","clarity":"VVS2","depth":57.9,"table":57,"price":8430,"x":6.86,"y":6.83,"z":3.96},{"name":1205,"carat":0.7,"cut":"Ideal","color":"D","clarity":"SI2","depth":62.6,"table":54,"price":2936,"x":5.69,"y":5.72,"z":3.57},{"name":53509,"carat":0.71,"cut":"Premium","color":"F","clarity":"VS2","depth":59.6,"table":59,"price":2686,"x":5.81,"y":5.77,"z":3.45},{"name":46313,"carat":0.3,"cut":"Ideal","color":"H","clarity":"VS1","depth":62.3,"table":55,"price":526,"x":4.29,"y":4.34,"z":2.69},{"name":21203,"carat":1.57,"cut":"Ideal","color":"J","clarity":"VVS2","depth":61.4,"table":57,"price":9346,"x":7.45,"y":7.5,"z":4.59},{"name":47536,"carat":0.51,"cut":"Very-Good","color":"G","clarity":"VVS1","depth":63.2,"table":59,"price":1871,"x":5.04,"y":5.09,"z":3.2},{"name":34885,"carat":0.38,"cut":"Ideal","color":"G","clarity":"VVS2","depth":62,"table":57,"price":879,"x":4.64,"y":4.66,"z":2.89},{"name":18260,"carat":1.55,"cut":"Ideal","color":"J","clarity":"VS2","depth":61.7,"table":57,"price":7416,"x":7.37,"y":7.42,"z":4.56},{"name":13936,"carat":1.25,"cut":"Ideal","color":"H","clarity":"SI2","depth":62.7,"table":56,"price":5670,"x":6.92,"y":6.87,"z":4.32},{"name":21943,"carat":1.51,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.3,"table":56,"price":10012,"x":7.44,"y":7.4,"z":4.55},{"name":13677,"carat":1.02,"cut":"Very-Good","color":"H","clarity":"VS1","depth":62.8,"table":59,"price":5598,"x":6.34,"y":6.47,"z":4.02},{"name":38367,"carat":0.43,"cut":"Premium","color":"D","clarity":"SI1","depth":62.4,"table":60,"price":1022,"x":4.82,"y":4.79,"z":3},{"name":28449,"carat":0.31,"cut":"Ideal","color":"H","clarity":"VVS1","depth":61.3,"table":56,"price":671,"x":4.36,"y":4.39,"z":2.68},{"name":17279,"carat":1.29,"cut":"Ideal","color":"J","clarity":"VVS1","depth":61.2,"table":56,"price":6918,"x":7.01,"y":7.05,"z":4.3},{"name":26427,"carat":2.01,"cut":"Ideal","color":"F","clarity":"SI2","depth":62.3,"table":58,"price":15955,"x":8.03,"y":8.01,"z":5},{"name":16905,"carat":1.03,"cut":"Premium","color":"G","clarity":"VS1","depth":62.2,"table":59,"price":6749,"x":6.46,"y":6.41,"z":4},{"name":51360,"carat":0.72,"cut":"Premium","color":"F","clarity":"SI2","depth":59.3,"table":57,"price":2364,"x":5.89,"y":5.85,"z":3.48},{"name":23591,"carat":1.02,"cut":"Ideal","color":"E","clarity":"IF","depth":62.6,"table":57,"price":11605,"x":6.47,"y":6.41,"z":4.03},{"name":39676,"carat":0.42,"cut":"Premium","color":"G","clarity":"VS2","depth":62.6,"table":57,"price":1087,"x":4.8,"y":4.76,"z":2.99},{"name":50879,"carat":0.7,"cut":"Premium","color":"G","clarity":"VS2","depth":62.1,"table":60,"price":2314,"x":5.71,"y":5.65,"z":3.53},{"name":50743,"carat":0.5,"cut":"Ideal","color":"E","clarity":"VVS2","depth":61.8,"table":53.6,"price":2297,"x":5.1,"y":5.13,"z":3.16},{"name":51754,"carat":0.72,"cut":"Premium","color":"G","clarity":"VS2","depth":62.3,"table":59,"price":2405,"x":5.77,"y":5.69,"z":3.57},{"name":34118,"carat":0.31,"cut":"Ideal","color":"E","clarity":"VVS1","depth":62.1,"table":55,"price":853,"x":4.34,"y":4.36,"z":2.7},{"name":27836,"carat":0.31,"cut":"Good","color":"H","clarity":"VS1","depth":59.2,"table":65,"price":651,"x":4.42,"y":4.33,"z":2.59},{"name":10935,"carat":0.9,"cut":"Very-Good","color":"F","clarity":"VS1","depth":62.1,"table":58,"price":4898,"x":6.15,"y":6.19,"z":3.83},{"name":51879,"carat":0.71,"cut":"Very-Good","color":"H","clarity":"VS2","depth":59.2,"table":63,"price":2428,"x":5.81,"y":5.85,"z":3.45},{"name":52880,"carat":0.78,"cut":"Ideal","color":"G","clarity":"SI1","depth":62.8,"table":56,"price":2583,"x":5.88,"y":5.84,"z":3.68},{"name":18591,"carat":1.51,"cut":"Premium","color":"G","clarity":"SI1","depth":61.3,"table":61,"price":7585,"x":7.41,"y":7.34,"z":4.52},{"name":41668,"carat":0.4,"cut":"Ideal","color":"I","clarity":"VVS2","depth":62,"table":56,"price":1240,"x":4.74,"y":4.77,"z":2.95},{"name":31414,"carat":0.3,"cut":"Ideal","color":"G","clarity":"VVS1","depth":62,"table":58,"price":764,"x":4.28,"y":4.3,"z":2.66},{"name":18767,"carat":1.22,"cut":"Very-Good","color":"H","clarity":"VS1","depth":62.4,"table":59,"price":7673,"x":6.91,"y":6.85,"z":4.29},{"name":170,"carat":0.71,"cut":"Good","color":"E","clarity":"VS2","depth":59.2,"table":61,"price":2772,"x":5.8,"y":5.88,"z":3.46},{"name":50007,"carat":0.7,"cut":"Very-Good","color":"F","clarity":"SI2","depth":60.7,"table":58,"price":2195,"x":5.73,"y":5.77,"z":3.49},{"name":17670,"carat":1.59,"cut":"Premium","color":"F","clarity":"SI2","depth":62.2,"table":58,"price":7123,"x":7.49,"y":7.45,"z":4.64},{"name":5549,"carat":1.02,"cut":"Premium","color":"I","clarity":"SI2","depth":62,"table":59,"price":3856,"x":6.45,"y":6.42,"z":3.99},{"name":21449,"carat":2,"cut":"Fair","color":"H","clarity":"SI2","depth":68.7,"table":55,"price":9549,"x":7.9,"y":7.67,"z":5.35},{"name":41066,"carat":0.52,"cut":"Premium","color":"F","clarity":"SI1","depth":61.5,"table":60,"price":1191,"x":5.15,"y":5.16,"z":3.17},{"name":18494,"carat":1.72,"cut":"Premium","color":"F","clarity":"I1","depth":60.1,"table":58,"price":7532,"x":7.77,"y":7.74,"z":4.66},{"name":27874,"carat":0.42,"cut":"Premium","color":"E","clarity":"SI2","depth":60.1,"table":58,"price":653,"x":4.87,"y":4.91,"z":2.94},{"name":19620,"carat":1.03,"cut":"Ideal","color":"F","clarity":"VS1","depth":62.8,"table":54,"price":8237,"x":6.48,"y":6.39,"z":4.05},{"name":45404,"carat":0.51,"cut":"Very-Good","color":"D","clarity":"VS2","depth":62.5,"table":58,"price":1668,"x":5.12,"y":5.18,"z":3.22},{"name":49824,"carat":0.7,"cut":"Good","color":"F","clarity":"SI1","depth":63.1,"table":64,"price":2167,"x":5.61,"y":5.58,"z":3.53},{"name":32115,"carat":0.43,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.9,"table":55,"price":783,"x":4.84,"y":4.88,"z":3.01},{"name":15385,"carat":0.32,"cut":"Very-Good","color":"G","clarity":"VVS2","depth":64,"table":55,"price":607,"x":4.31,"y":4.35,"z":2.77},{"name":46742,"carat":0.54,"cut":"Ideal","color":"F","clarity":"VS1","depth":62.2,"table":55,"price":1799,"x":5.23,"y":5.25,"z":3.26},{"name":45000,"carat":0.31,"cut":"Very-Good","color":"G","clarity":"SI2","depth":63.3,"table":54,"price":523,"x":4.34,"y":4.29,"z":2.73},{"name":43432,"carat":0.54,"cut":"Very-Good","color":"E","clarity":"SI2","depth":60.7,"table":56.5,"price":1415,"x":5.24,"y":5.28,"z":3.19},{"name":36115,"carat":0.42,"cut":"Premium","color":"E","clarity":"SI1","depth":61.5,"table":58,"price":926,"x":4.84,"y":4.78,"z":2.96},{"name":15582,"carat":1.22,"cut":"Good","color":"H","clarity":"SI2","depth":63.5,"table":56,"price":6250,"x":6.84,"y":6.77,"z":4.32},{"name":50665,"carat":0.31,"cut":"Very-Good","color":"E","clarity":"SI1","depth":62.7,"table":58,"price":544,"x":4.31,"y":4.33,"z":2.71},{"name":21280,"carat":1.06,"cut":"Very-Good","color":"F","clarity":"IF","depth":60.6,"table":56,"price":9433,"x":6.62,"y":6.69,"z":4.03},{"name":39346,"carat":0.38,"cut":"Ideal","color":"E","clarity":"VVS2","depth":62.2,"table":53.8,"price":1073,"x":4.62,"y":4.66,"z":2.88},{"name":53798,"carat":0.72,"cut":"Ideal","color":"E","clarity":"SI1","depth":61.3,"table":56,"price":2731,"x":5.77,"y":5.81,"z":3.55},{"name":15335,"carat":1.36,"cut":"Premium","color":"J","clarity":"VS2","depth":58.4,"table":59,"price":6157,"x":7.4,"y":7.27,"z":4.28},{"name":29219,"carat":0.34,"cut":"Ideal","color":"I","clarity":"IF","depth":61.6,"table":54,"price":695,"x":4.5,"y":4.53,"z":2.78},{"name":49795,"carat":0.53,"cut":"Ideal","color":"E","clarity":"VS2","depth":61.8,"table":55,"price":2163,"x":5.21,"y":5.24,"z":3.23},{"name":7118,"carat":0.73,"cut":"Ideal","color":"F","clarity":"VVS1","depth":61.1,"table":56,"price":4171,"x":5.83,"y":5.86,"z":3.57},{"name":47672,"carat":0.51,"cut":"Ideal","color":"D","clarity":"VS2","depth":61.7,"table":55,"price":1882,"x":5.14,"y":5.11,"z":3.16},{"name":22618,"carat":1.62,"cut":"Premium","color":"I","clarity":"VS2","depth":60.1,"table":59,"price":10669,"x":7.63,"y":7.6,"z":4.58},{"name":18267,"carat":1.51,"cut":"Premium","color":"J","clarity":"VS2","depth":62.3,"table":59,"price":7418,"x":7.31,"y":7.35,"z":4.57},{"name":4350,"carat":0.72,"cut":"Premium","color":"D","clarity":"VS1","depth":62.7,"table":56,"price":3601,"x":5.76,"y":5.69,"z":3.59},{"name":18997,"carat":1.01,"cut":"Premium","color":"E","clarity":"VS1","depth":60.8,"table":59,"price":7821,"x":6.42,"y":6.46,"z":3.92},{"name":1669,"carat":0.72,"cut":"Very-Good","color":"G","clarity":"VS1","depth":60.1,"table":63,"price":3024,"x":5.86,"y":5.82,"z":3.51},{"name":37291,"carat":0.32,"cut":"Good","color":"F","clarity":"VVS1","depth":63.8,"table":54,"price":977,"x":4.38,"y":4.31,"z":2.77},{"name":25360,"carat":0.31,"cut":"Very-Good","color":"G","clarity":"VVS1","depth":61.9,"table":55,"price":642,"x":4.36,"y":4.4,"z":2.71},{"name":44405,"carat":0.55,"cut":"Ideal","color":"H","clarity":"SI1","depth":60.8,"table":56,"price":1584,"x":5.3,"y":5.33,"z":3.23},{"name":50759,"carat":0.72,"cut":"Premium","color":"F","clarity":"SI2","depth":60.5,"table":59,"price":2298,"x":5.83,"y":5.8,"z":3.52},{"name":40304,"carat":0.4,"cut":"Ideal","color":"E","clarity":"VS1","depth":61.2,"table":57,"price":1125,"x":4.77,"y":4.74,"z":2.91},{"name":342,"carat":0.91,"cut":"Ideal","color":"D","clarity":"SI2","depth":62.2,"table":57,"price":2803,"x":6.21,"y":6.15,"z":3.85},{"name":28375,"carat":0.24,"cut":"Premium","color":"E","clarity":"VVS1","depth":60.6,"table":59,"price":668,"x":4.02,"y":4,"z":2.43},{"name":2939,"carat":0.9,"cut":"Premium","color":"I","clarity":"VS2","depth":63,"table":59,"price":3292,"x":6.1,"y":6.06,"z":3.83},{"name":33426,"carat":0.32,"cut":"Ideal","color":"H","clarity":"VVS2","depth":61.2,"table":56,"price":828,"x":4.43,"y":4.4,"z":2.7},{"name":1246,"carat":0.78,"cut":"Very-Good","color":"D","clarity":"SI1","depth":62.4,"table":58,"price":2945,"x":5.86,"y":5.9,"z":3.67},{"name":42039,"carat":0.54,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.1,"table":56,"price":1268,"x":5.25,"y":5.27,"z":3.21},{"name":51318,"carat":0.31,"cut":"Ideal","color":"H","clarity":"VS1","depth":61.1,"table":57,"price":544,"x":4.35,"y":4.39,"z":2.67},{"name":16702,"carat":0.3,"cut":"Ideal","color":"H","clarity":"SI1","depth":62.6,"table":55,"price":421,"x":4.28,"y":4.32,"z":2.69},{"name":48199,"carat":0.53,"cut":"Very-Good","color":"G","clarity":"VVS1","depth":61.7,"table":57,"price":1948,"x":5.19,"y":5.22,"z":3.21},{"name":12936,"carat":1.13,"cut":"Ideal","color":"H","clarity":"SI1","depth":62.3,"table":56,"price":5384,"x":6.66,"y":6.69,"z":4.16},{"name":42560,"carat":0.42,"cut":"Ideal","color":"D","clarity":"VVS2","depth":62.5,"table":57,"price":1326,"x":4.77,"y":4.8,"z":2.99},{"name":51354,"carat":0.72,"cut":"Premium","color":"F","clarity":"SI1","depth":62,"table":60,"price":2364,"x":5.74,"y":5.77,"z":3.57},{"name":22497,"carat":1.71,"cut":"Ideal","color":"H","clarity":"VS2","depth":63,"table":57,"price":10534,"x":7.57,"y":7.53,"z":4.76},{"name":41128,"carat":0.52,"cut":"Premium","color":"G","clarity":"SI2","depth":61.5,"table":59,"price":1196,"x":5.19,"y":5.15,"z":3.18},{"name":35047,"carat":0.42,"cut":"Ideal","color":"I","clarity":"VVS1","depth":62.7,"table":55,"price":884,"x":4.77,"y":4.8,"z":3},{"name":28537,"carat":0.3,"cut":"Very-Good","color":"G","clarity":"VS2","depth":63.5,"table":55,"price":675,"x":4.25,"y":4.22,"z":2.69},{"name":46474,"carat":0.51,"cut":"Ideal","color":"H","clarity":"VVS1","depth":61.8,"table":55,"price":1776,"x":5.15,"y":5.18,"z":3.19},{"name":28473,"carat":0.32,"cut":"Premium","color":"G","clarity":"VS2","depth":58.4,"table":57,"price":672,"x":4.53,"y":4.51,"z":2.64},{"name":5605,"carat":0.96,"cut":"Good","color":"F","clarity":"VS2","depth":63.7,"table":54,"price":3871,"x":6.24,"y":6.19,"z":3.96},{"name":30472,"carat":0.41,"cut":"Good","color":"G","clarity":"SI2","depth":63.7,"table":55,"price":732,"x":4.75,"y":4.7,"z":3.01},{"name":49406,"carat":0.5,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":59.1,"table":61,"price":2106,"x":5.19,"y":5.23,"z":3.08},{"name":12230,"carat":1,"cut":"Very-Good","color":"F","clarity":"SI1","depth":61.6,"table":61,"price":5197,"x":6.3,"y":6.37,"z":3.9},{"name":24964,"carat":1.5,"cut":"Premium","color":"D","clarity":"SI1","depth":61.6,"table":59,"price":13445,"x":7.4,"y":7.3,"z":4.53},{"name":20225,"carat":1.04,"cut":"Very-Good","color":"G","clarity":"IF","depth":60.7,"table":58,"price":8655,"x":6.52,"y":6.65,"z":4},{"name":42851,"carat":0.41,"cut":"Ideal","color":"F","clarity":"VVS1","depth":61.8,"table":57,"price":1356,"x":4.79,"y":4.75,"z":2.95},{"name":44114,"carat":0.46,"cut":"Ideal","color":"G","clarity":"IF","depth":61.6,"table":54,"price":1558,"x":4.97,"y":5,"z":3.07},{"name":43852,"carat":0.5,"cut":"Good","color":"D","clarity":"SI1","depth":60.5,"table":57,"price":1447,"x":5.1,"y":5.14,"z":3.1},{"name":28924,"carat":0.3,"cut":"Ideal","color":"H","clarity":"VVS1","depth":61.9,"table":55,"price":684,"x":4.32,"y":4.34,"z":2.68},{"name":37886,"carat":0.42,"cut":"Ideal","color":"D","clarity":"VS1","depth":61.4,"table":55,"price":1006,"x":4.8,"y":4.9,"z":2.98},{"name":27862,"carat":0.31,"cut":"Ideal","color":"I","clarity":"IF","depth":61.3,"table":57,"price":652,"x":4.34,"y":4.4,"z":2.68},{"name":11672,"carat":0.91,"cut":"Very-Good","color":"E","clarity":"VS1","depth":62.8,"table":60,"price":5057,"x":6.08,"y":6.11,"z":3.83},{"name":9250,"carat":1.07,"cut":"Premium","color":"F","clarity":"SI2","depth":61.8,"table":59,"price":4560,"x":6.53,"y":6.57,"z":4.05},{"name":23105,"carat":1.02,"cut":"Ideal","color":"E","clarity":"VVS1","depth":61.3,"table":57,"price":11128,"x":6.47,"y":6.54,"z":3.99},{"name":53587,"carat":0.8,"cut":"Ideal","color":"G","clarity":"SI1","depth":60.8,"table":57,"price":2699,"x":6.02,"y":6.05,"z":3.67},{"name":32473,"carat":0.33,"cut":"Very-Good","color":"G","clarity":"VVS1","depth":61.2,"table":57,"price":795,"x":4.47,"y":4.5,"z":2.74},{"name":2113,"carat":1.16,"cut":"Fair","color":"H","clarity":"SI2","depth":68.2,"table":55,"price":3118,"x":6.47,"y":6.37,"z":4.38},{"name":51281,"carat":0.7,"cut":"Very-Good","color":"I","clarity":"VS2","depth":60.8,"table":61,"price":2360,"x":5.72,"y":5.76,"z":3.49},{"name":26223,"carat":2.01,"cut":"Fair","color":"D","clarity":"SI2","depth":59.4,"table":66,"price":15627,"x":8.2,"y":8.17,"z":4.86},{"name":50152,"carat":0.71,"cut":"Premium","color":"G","clarity":"SI1","depth":62.8,"table":61,"price":2215,"x":5.64,"y":5.59,"z":3.53},{"name":16946,"carat":1.16,"cut":"Ideal","color":"F","clarity":"SI1","depth":62.6,"table":58,"price":6768,"x":6.68,"y":6.73,"z":4.2},{"name":46080,"carat":0.64,"cut":"Ideal","color":"G","clarity":"SI1","depth":61.6,"table":55,"price":1737,"x":5.55,"y":5.59,"z":3.43},{"name":42924,"carat":0.41,"cut":"Very-Good","color":"D","clarity":"VVS2","depth":61.2,"table":55,"price":1364,"x":4.79,"y":4.82,"z":2.95},{"name":16551,"carat":1.02,"cut":"Very-Good","color":"E","clarity":"VS2","depth":59.2,"table":58,"price":6612,"x":6.52,"y":6.58,"z":3.88},{"name":22487,"carat":1.5,"cut":"Premium","color":"D","clarity":"SI2","depth":59.9,"table":62,"price":10517,"x":7.4,"y":7.37,"z":4.42},{"name":30915,"carat":0.34,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.4,"table":55,"price":745,"x":4.48,"y":4.53,"z":2.81},{"name":3792,"carat":0.73,"cut":"Ideal","color":"H","clarity":"VVS2","depth":61.6,"table":56,"price":3463,"x":5.8,"y":5.82,"z":3.57},{"name":1845,"carat":0.7,"cut":"Very-Good","color":"E","clarity":"VS1","depth":62.2,"table":57,"price":3063,"x":5.63,"y":5.68,"z":3.52},{"name":51932,"carat":0.78,"cut":"Good","color":"H","clarity":"VS2","depth":63.7,"table":60,"price":2440,"x":5.77,"y":5.73,"z":3.66},{"name":35346,"carat":0.42,"cut":"Very-Good","color":"H","clarity":"SI1","depth":63.1,"table":57,"price":898,"x":4.78,"y":4.76,"z":3.01},{"name":15601,"carat":1.01,"cut":"Very-Good","color":"G","clarity":"VVS2","depth":61.9,"table":58,"price":6257,"x":6.38,"y":6.48,"z":3.98},{"name":52282,"carat":0.84,"cut":"Ideal","color":"J","clarity":"SI1","depth":61.8,"table":56,"price":2493,"x":6.04,"y":6.07,"z":3.74},{"name":31240,"carat":0.38,"cut":"Ideal","color":"G","clarity":"VS2","depth":61.9,"table":54.1,"price":757,"x":4.66,"y":4.69,"z":2.89},{"name":6245,"carat":1.03,"cut":"Ideal","color":"J","clarity":"SI2","depth":62.1,"table":54,"price":4008,"x":6.47,"y":6.51,"z":4.03},{"name":13751,"carat":1.1,"cut":"Premium","color":"D","clarity":"SI1","depth":58.8,"table":61,"price":5606,"x":6.73,"y":6.67,"z":3.94},{"name":16558,"carat":1.33,"cut":"Premium","color":"H","clarity":"VS2","depth":59.9,"table":60,"price":6614,"x":7.13,"y":7.09,"z":4.26},{"name":12471,"carat":1.08,"cut":"Premium","color":"H","clarity":"VS2","depth":62.1,"table":58,"price":5250,"x":6.63,"y":6.51,"z":4.08},{"name":48006,"carat":0.52,"cut":"Ideal","color":"D","clarity":"VS2","depth":62.6,"table":55,"price":1919,"x":5.14,"y":5.12,"z":3.21},{"name":46658,"carat":0.51,"cut":"Ideal","color":"D","clarity":"VS2","depth":61.6,"table":56,"price":1787,"x":5.15,"y":5.17,"z":3.18},{"name":22186,"carat":1.22,"cut":"Ideal","color":"G","clarity":"VVS2","depth":62.3,"table":56,"price":10221,"x":6.84,"y":6.81,"z":4.25},{"name":3612,"carat":0.9,"cut":"Ideal","color":"G","clarity":"SI2","depth":62.7,"table":55,"price":3428,"x":6.11,"y":6.17,"z":3.85},{"name":20791,"carat":1.52,"cut":"Good","color":"F","clarity":"SI2","depth":58.2,"table":60,"price":9028,"x":7.52,"y":7.63,"z":4.41},{"name":51092,"carat":0.73,"cut":"Ideal","color":"I","clarity":"VS2","depth":62.2,"table":54,"price":2335,"x":5.76,"y":5.78,"z":3.59},{"name":19807,"carat":1.5,"cut":"Ideal","color":"I","clarity":"SI1","depth":62.3,"table":56,"price":8371,"x":7.35,"y":7.41,"z":4.6},{"name":39840,"carat":0.52,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.9,"table":56,"price":1098,"x":5.16,"y":5.22,"z":3.2},{"name":14694,"carat":1,"cut":"Ideal","color":"D","clarity":"SI1","depth":59.9,"table":56,"price":5929,"x":6.51,"y":6.54,"z":3.91},{"name":48874,"carat":0.61,"cut":"Very-Good","color":"E","clarity":"VS2","depth":60,"table":57,"price":2036,"x":5.52,"y":5.55,"z":3.32},{"name":25599,"carat":2.14,"cut":"Good","color":"I","clarity":"SI2","depth":63.8,"table":57,"price":14452,"x":8.17,"y":8.14,"z":5.2},{"name":45086,"carat":0.5,"cut":"Very-Good","color":"D","clarity":"VS2","depth":61.1,"table":58,"price":1646,"x":5.07,"y":5.11,"z":3.11},{"name":10001,"carat":1,"cut":"Fair","color":"D","clarity":"SI1","depth":65.9,"table":54,"price":4704,"x":6.24,"y":6.2,"z":4.1},{"name":49271,"carat":0.64,"cut":"Ideal","color":"E","clarity":"SI1","depth":62,"table":56,"price":2089,"x":5.57,"y":5.53,"z":3.44},{"name":42549,"carat":0.59,"cut":"Very-Good","color":"E","clarity":"SI2","depth":60.5,"table":58,"price":1325,"x":5.43,"y":5.51,"z":3.31},{"name":52180,"carat":0.7,"cut":"Very-Good","color":"E","clarity":"SI1","depth":62.3,"table":58,"price":2476,"x":5.6,"y":5.67,"z":3.51},{"name":41354,"carat":0.53,"cut":"Ideal","color":"J","clarity":"VS1","depth":61.4,"table":55.2,"price":1218,"x":5.2,"y":5.22,"z":3.2},{"name":4748,"carat":0.92,"cut":"Premium","color":"F","clarity":"SI1","depth":62.6,"table":59,"price":3684,"x":6.23,"y":6.19,"z":3.89},{"name":18772,"carat":1.03,"cut":"Very-Good","color":"E","clarity":"VS1","depth":62.8,"table":55,"price":7677,"x":6.4,"y":6.52,"z":4.06},{"name":51178,"carat":0.75,"cut":"Very-Good","color":"F","clarity":"SI1","depth":63.1,"table":58,"price":2347,"x":5.7,"y":5.74,"z":3.61},{"name":2423,"carat":0.95,"cut":"Premium","color":"G","clarity":"SI2","depth":62.6,"table":58,"price":3181,"x":6.22,"y":6.18,"z":3.88},{"name":19659,"carat":1.4,"cut":"Very-Good","color":"D","clarity":"SI2","depth":61.8,"table":54,"price":8268,"x":7.16,"y":7.21,"z":4.44},{"name":45684,"carat":0.5,"cut":"Ideal","color":"F","clarity":"VS1","depth":61.2,"table":56,"price":1695,"x":5.13,"y":5.17,"z":3.15},{"name":25903,"carat":2.19,"cut":"Premium","color":"I","clarity":"SI2","depth":60.8,"table":60,"price":15032,"x":8.34,"y":8.38,"z":5.08},{"name":32989,"carat":0.38,"cut":"Ideal","color":"D","clarity":"SI2","depth":61.1,"table":56,"price":812,"x":4.71,"y":4.65,"z":2.86},{"name":47257,"carat":0.51,"cut":"Ideal","color":"G","clarity":"VVS2","depth":62,"table":57,"price":1842,"x":5.13,"y":5.1,"z":3.17},{"name":49516,"carat":0.75,"cut":"Premium","color":"I","clarity":"SI1","depth":62.5,"table":58,"price":2122,"x":5.77,"y":5.82,"z":3.62},{"name":24658,"carat":1.72,"cut":"Premium","color":"H","clarity":"SI1","depth":61.4,"table":59,"price":12998,"x":7.71,"y":7.64,"z":4.71},{"name":39746,"carat":0.53,"cut":"Ideal","color":"G","clarity":"SI2","depth":62.4,"table":56,"price":1093,"x":5.18,"y":5.14,"z":3.22},{"name":9185,"carat":1.1,"cut":"Very-Good","color":"J","clarity":"VS1","depth":60.9,"table":59,"price":4545,"x":6.65,"y":6.74,"z":4.08},{"name":44901,"carat":0.5,"cut":"Premium","color":"E","clarity":"VS2","depth":62.6,"table":60,"price":1629,"x":5.03,"y":5,"z":3.14},{"name":33962,"carat":0.4,"cut":"Very-Good","color":"D","clarity":"VS2","depth":63.3,"table":58,"price":845,"x":4.63,"y":4.66,"z":2.94},{"name":14450,"carat":1.31,"cut":"Premium","color":"I","clarity":"VS2","depth":60.4,"table":59,"price":5832,"x":7.16,"y":7.05,"z":4.29},{"name":40656,"carat":0.5,"cut":"Very-Good","color":"E","clarity":"SI2","depth":61.4,"table":58,"price":1154,"x":5.09,"y":5.11,"z":3.13},{"name":22254,"carat":1.18,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61.3,"table":55,"price":10308,"x":6.86,"y":6.81,"z":4.19},{"name":242,"carat":1.01,"cut":"Fair","color":"E","clarity":"I1","depth":64.5,"table":58,"price":2788,"x":6.29,"y":6.21,"z":4.03},{"name":36145,"carat":0.33,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.3,"table":55,"price":928,"x":4.46,"y":4.43,"z":2.77},{"name":36050,"carat":0.31,"cut":"Very-Good","color":"G","clarity":"IF","depth":61.6,"table":55,"price":924,"x":4.38,"y":4.42,"z":2.71},{"name":17226,"carat":1.22,"cut":"Premium","color":"F","clarity":"SI1","depth":61.8,"table":59,"price":6887,"x":6.86,"y":6.83,"z":4.23},{"name":35075,"carat":0.3,"cut":"Very-Good","color":"F","clarity":"IF","depth":62.4,"table":56,"price":886,"x":4.28,"y":4.31,"z":2.68},{"name":26131,"carat":2.14,"cut":"Premium","color":"I","clarity":"VS2","depth":59.3,"table":59,"price":15418,"x":8.39,"y":8.43,"z":5},{"name":11008,"carat":0.97,"cut":"Premium","color":"E","clarity":"SI1","depth":61,"table":61,"price":4915,"x":6.32,"y":6.28,"z":3.84},{"name":45652,"carat":0.38,"cut":"Ideal","color":"J","clarity":"SI1","depth":62,"table":54,"price":525,"x":4.67,"y":4.71,"z":2.91},{"name":45451,"carat":0.51,"cut":"Ideal","color":"D","clarity":"VS2","depth":61.5,"table":56,"price":1674,"x":5.21,"y":5.17,"z":3.19},{"name":49282,"carat":0.57,"cut":"Ideal","color":"D","clarity":"VS1","depth":61.7,"table":56,"price":2091,"x":5.31,"y":5.33,"z":3.28},{"name":7262,"carat":1.01,"cut":"Good","color":"F","clarity":"SI1","depth":64.2,"table":58,"price":4199,"x":6.31,"y":6.33,"z":4.06},{"name":28479,"carat":0.32,"cut":"Very-Good","color":"E","clarity":"SI1","depth":63.1,"table":54,"price":672,"x":4.41,"y":4.37,"z":2.77},{"name":38658,"carat":0.42,"cut":"Ideal","color":"D","clarity":"SI1","depth":62.4,"table":57,"price":1040,"x":4.84,"y":4.77,"z":3},{"name":40260,"carat":0.4,"cut":"Premium","color":"H","clarity":"VVS2","depth":60.6,"table":60,"price":1125,"x":4.79,"y":4.75,"z":2.89},{"name":8662,"carat":1.16,"cut":"Very-Good","color":"H","clarity":"SI2","depth":59.6,"table":59,"price":4455,"x":6.85,"y":6.87,"z":4.09},{"name":37789,"carat":0.3,"cut":"Ideal","color":"D","clarity":"VVS1","depth":61.3,"table":57,"price":1000,"x":4.29,"y":4.32,"z":2.64},{"name":5169,"carat":0.91,"cut":"Very-Good","color":"E","clarity":"SI2","depth":63,"table":56,"price":3772,"x":6.12,"y":6.16,"z":3.87},{"name":13961,"carat":1.51,"cut":"Premium","color":"I","clarity":"SI2","depth":61.2,"table":62,"price":5682,"x":7.28,"y":7.19,"z":4.43},{"name":3082,"carat":0.57,"cut":"Ideal","color":"F","clarity":"VVS1","depth":61.3,"table":56,"price":3313,"x":5.37,"y":5.4,"z":3.3},{"name":2546,"carat":0.7,"cut":"Ideal","color":"G","clarity":"VS1","depth":61.4,"table":55,"price":3206,"x":5.71,"y":5.76,"z":3.53},{"name":16242,"carat":1.01,"cut":"Premium","color":"G","clarity":"VS1","depth":62.6,"table":59,"price":6499,"x":6.38,"y":6.46,"z":4.02},{"name":1973,"carat":0.72,"cut":"Ideal","color":"E","clarity":"VS2","depth":60.8,"table":57,"price":3091,"x":5.79,"y":5.82,"z":3.53},{"name":548,"carat":0.75,"cut":"Premium","color":"E","clarity":"SI2","depth":61.9,"table":57,"price":2829,"x":5.88,"y":5.82,"z":3.62},{"name":8034,"carat":0.91,"cut":"Very-Good","color":"F","clarity":"SI2","depth":62.5,"table":58,"price":4334,"x":6.1,"y":6.16,"z":3.83},{"name":37127,"carat":0.52,"cut":"Ideal","color":"D","clarity":"I1","depth":61.1,"table":57,"price":971,"x":5.18,"y":5.2,"z":3.17},{"name":34755,"carat":0.41,"cut":"Premium","color":"H","clarity":"SI1","depth":60.9,"table":60,"price":876,"x":4.83,"y":4.79,"z":2.93},{"name":19801,"carat":1.71,"cut":"Premium","color":"I","clarity":"SI2","depth":59,"table":60,"price":8366,"x":7.86,"y":7.83,"z":4.63},{"name":28129,"carat":0.29,"cut":"Very-Good","color":"F","clarity":"VVS2","depth":62.7,"table":58,"price":664,"x":4.22,"y":4.26,"z":2.66},{"name":15985,"carat":1.02,"cut":"Premium","color":"G","clarity":"VS2","depth":62.1,"table":58,"price":6397,"x":6.5,"y":6.44,"z":4.02},{"name":45202,"carat":0.51,"cut":"Premium","color":"E","clarity":"VS2","depth":61.9,"table":59,"price":1656,"x":5.06,"y":5.11,"z":3.15},{"name":25904,"carat":1.83,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.5,"table":56,"price":15032,"x":7.87,"y":7.81,"z":4.82},{"name":51466,"carat":0.72,"cut":"Premium","color":"H","clarity":"SI1","depth":61.5,"table":59,"price":2376,"x":5.71,"y":5.67,"z":3.5},{"name":33422,"carat":0.32,"cut":"Ideal","color":"H","clarity":"VVS2","depth":61.7,"table":56,"price":828,"x":4.42,"y":4.37,"z":2.71},{"name":27707,"carat":0.36,"cut":"Premium","color":"I","clarity":"VS2","depth":61.6,"table":58,"price":648,"x":4.57,"y":4.52,"z":2.8},{"name":21334,"carat":1.53,"cut":"Premium","color":"G","clarity":"SI1","depth":58.4,"table":59,"price":9476,"x":7.62,"y":7.55,"z":4.43},{"name":21363,"carat":0.33,"cut":"Good","color":"D","clarity":"VS2","depth":63.6,"table":56,"price":625,"x":4.38,"y":4.42,"z":2.8},{"name":48897,"carat":0.52,"cut":"Very-Good","color":"G","clarity":"VVS1","depth":62.3,"table":55,"price":2040,"x":5.13,"y":5.15,"z":3.2},{"name":18390,"carat":0.32,"cut":"Very-Good","color":"D","clarity":"SI1","depth":60.1,"table":60,"price":619,"x":4.38,"y":4.4,"z":2.64},{"name":7304,"carat":1.05,"cut":"Good","color":"E","clarity":"SI2","depth":63.2,"table":59,"price":4204,"x":6.36,"y":6.43,"z":4.04},{"name":33212,"carat":0.36,"cut":"Very-Good","color":"G","clarity":"VS1","depth":60.7,"table":57.1,"price":821,"x":4.57,"y":4.65,"z":2.79},{"name":11747,"carat":1.06,"cut":"Premium","color":"H","clarity":"SI1","depth":61,"table":58,"price":5075,"x":6.61,"y":6.57,"z":4.02},{"name":31566,"carat":0.31,"cut":"Ideal","color":"D","clarity":"VVS2","depth":62,"table":56,"price":766,"x":4.34,"y":4.37,"z":2.7},{"name":19784,"carat":1.15,"cut":"Very-Good","color":"G","clarity":"VVS2","depth":58.4,"table":59,"price":8349,"x":6.84,"y":6.92,"z":4.02},{"name":2897,"carat":0.91,"cut":"Very-Good","color":"G","clarity":"SI2","depth":63.3,"table":57,"price":3282,"x":6.12,"y":6.08,"z":3.86},{"name":3884,"carat":1.01,"cut":"Good","color":"I","clarity":"VS1","depth":64.2,"table":60,"price":3484,"x":6.35,"y":6.27,"z":4.05},{"name":24333,"carat":1.54,"cut":"Premium","color":"G","clarity":"SI1","depth":61,"table":59,"price":12592,"x":7.43,"y":7.38,"z":4.52},{"name":40761,"carat":0.4,"cut":"Very-Good","color":"E","clarity":"VVS1","depth":63.4,"table":57,"price":1164,"x":4.64,"y":4.66,"z":2.95},{"name":17619,"carat":1.56,"cut":"Good","color":"J","clarity":"VS2","depth":57.6,"table":65,"price":7094,"x":7.62,"y":7.6,"z":4.38},{"name":17354,"carat":1.33,"cut":"Good","color":"I","clarity":"VS1","depth":63.7,"table":56,"price":6963,"x":6.92,"y":6.96,"z":4.42},{"name":47923,"carat":0.56,"cut":"Premium","color":"G","clarity":"VS1","depth":60.5,"table":59,"price":1915,"x":5.31,"y":5.26,"z":3.2},{"name":37149,"carat":0.32,"cut":"Ideal","color":"E","clarity":"VS1","depth":61.8,"table":55,"price":972,"x":4.43,"y":4.4,"z":2.73},{"name":27961,"carat":0.3,"cut":"Premium","color":"E","clarity":"VS2","depth":59.9,"table":59,"price":658,"x":4.33,"y":4.38,"z":2.61},{"name":1445,"carat":0.83,"cut":"Premium","color":"G","clarity":"SI1","depth":61.6,"table":59,"price":2975,"x":6.02,"y":5.99,"z":3.7},{"name":12764,"carat":1.21,"cut":"Ideal","color":"J","clarity":"VS1","depth":62.3,"table":55,"price":5324,"x":6.81,"y":6.86,"z":4.26},{"name":23038,"carat":0.33,"cut":"Premium","color":"D","clarity":"SI2","depth":59.5,"table":59,"price":631,"x":4.5,"y":4.48,"z":2.67},{"name":19647,"carat":1.52,"cut":"Premium","color":"J","clarity":"VS1","depth":62.4,"table":59,"price":8258,"x":7.36,"y":7.31,"z":4.58},{"name":34090,"carat":0.41,"cut":"Very-Good","color":"F","clarity":"SI1","depth":63.4,"table":58,"price":852,"x":4.75,"y":4.68,"z":2.99},{"name":8265,"carat":0.9,"cut":"Good","color":"D","clarity":"SI1","depth":63.5,"table":57,"price":4381,"x":6.11,"y":6.15,"z":3.89},{"name":38481,"carat":0.42,"cut":"Premium","color":"F","clarity":"VS1","depth":61.8,"table":59,"price":1031,"x":4.81,"y":4.83,"z":2.98},{"name":40980,"carat":0.41,"cut":"Premium","color":"D","clarity":"VVS2","depth":62.2,"table":58,"price":1181,"x":4.8,"y":4.78,"z":2.98},{"name":9617,"carat":1.01,"cut":"Fair","color":"F","clarity":"SI1","depth":65.5,"table":57,"price":4634,"x":6.12,"y":6.22,"z":4.04},{"name":12104,"carat":1.22,"cut":"Premium","color":"I","clarity":"SI2","depth":62.9,"table":56,"price":5165,"x":6.84,"y":6.79,"z":4.29},{"name":18829,"carat":1.27,"cut":"Very-Good","color":"H","clarity":"VS2","depth":62.6,"table":57,"price":7715,"x":6.91,"y":6.95,"z":4.34},{"name":3016,"carat":0.53,"cut":"Very-Good","color":"D","clarity":"VVS1","depth":61.2,"table":55,"price":3307,"x":5.21,"y":5.26,"z":3.21},{"name":20984,"carat":1.63,"cut":"Very-Good","color":"I","clarity":"SI1","depth":61.9,"table":60,"price":9199,"x":7.51,"y":7.55,"z":4.66},{"name":2226,"carat":0.7,"cut":"Ideal","color":"G","clarity":"SI1","depth":61.6,"table":55,"price":3145,"x":5.71,"y":5.76,"z":3.53},{"name":39260,"carat":0.3,"cut":"Ideal","color":"D","clarity":"VVS1","depth":61.3,"table":57,"price":1069,"x":4.32,"y":4.29,"z":2.64},{"name":52713,"carat":0.52,"cut":"Premium","color":"D","clarity":"VVS1","depth":58.8,"table":61,"price":2553,"x":5.31,"y":5.27,"z":3.11},{"name":1783,"carat":0.66,"cut":"Ideal","color":"D","clarity":"VVS2","depth":61.6,"table":57,"price":3049,"x":5.64,"y":5.57,"z":3.45},{"name":19774,"carat":1.52,"cut":"Premium","color":"F","clarity":"SI2","depth":62.3,"table":59,"price":8342,"x":7.37,"y":7.33,"z":4.58},{"name":17061,"carat":0.32,"cut":"Premium","color":"G","clarity":"SI1","depth":62,"table":55,"price":612,"x":4.43,"y":4.41,"z":2.74},{"name":30335,"carat":0.38,"cut":"Premium","color":"J","clarity":"VS2","depth":60.5,"table":60,"price":727,"x":4.68,"y":4.64,"z":2.82},{"name":47019,"carat":0.56,"cut":"Premium","color":"G","clarity":"VS1","depth":62.4,"table":58,"price":1819,"x":5.22,"y":5.3,"z":3.28},{"name":34634,"carat":0.31,"cut":"Premium","color":"E","clarity":"VS2","depth":60.3,"table":58,"price":872,"x":4.42,"y":4.37,"z":2.65},{"name":17141,"carat":1,"cut":"Very-Good","color":"F","clarity":"VS2","depth":63.8,"table":56.9,"price":6841,"x":6.29,"y":6.36,"z":4.04},{"name":51614,"carat":0.73,"cut":"Very-Good","color":"E","clarity":"SI2","depth":59.3,"table":57,"price":2395,"x":5.88,"y":5.95,"z":3.51},{"name":31682,"carat":0.26,"cut":"Ideal","color":"E","clarity":"VVS2","depth":62,"table":56,"price":769,"x":4.13,"y":4.1,"z":2.55},{"name":47056,"carat":0.61,"cut":"Ideal","color":"G","clarity":"VS2","depth":61.4,"table":55.7,"price":1821,"x":5.43,"y":5.53,"z":3.37},{"name":34323,"carat":0.4,"cut":"Ideal","color":"G","clarity":"VS2","depth":62.1,"table":58,"price":859,"x":4.68,"y":4.72,"z":2.92},{"name":19197,"carat":1.25,"cut":"Premium","color":"G","clarity":"VS2","depth":61.2,"table":57,"price":7948,"x":6.95,"y":6.91,"z":4.24},{"name":46802,"carat":0.52,"cut":"Ideal","color":"F","clarity":"VS2","depth":60,"table":62,"price":1806,"x":5.23,"y":5.19,"z":3.13},{"name":24274,"carat":2.3,"cut":"Premium","color":"J","clarity":"SI1","depth":59.6,"table":59,"price":12499,"x":8.61,"y":8.56,"z":5.12},{"name":11748,"carat":1.03,"cut":"Premium","color":"D","clarity":"SI2","depth":60.6,"table":60,"price":5076,"x":6.52,"y":6.46,"z":3.93},{"name":8951,"carat":1.19,"cut":"Premium","color":"I","clarity":"SI2","depth":59.5,"table":59,"price":4498,"x":6.95,"y":6.89,"z":4.12},{"name":23224,"carat":1.51,"cut":"Premium","color":"G","clarity":"SI1","depth":60.5,"table":59,"price":11230,"x":7.49,"y":7.41,"z":4.51},{"name":46517,"carat":0.53,"cut":"Ideal","color":"H","clarity":"VVS1","depth":60.8,"table":56,"price":1781,"x":5.24,"y":5.26,"z":3.19},{"name":5902,"carat":0.92,"cut":"Premium","color":"I","clarity":"VVS1","depth":62.4,"table":59,"price":3932,"x":6.17,"y":6.14,"z":3.84},{"name":13724,"carat":0.32,"cut":"Good","color":"G","clarity":"VS2","depth":56.7,"table":64,"price":603,"x":4.52,"y":4.55,"z":2.57},{"name":44842,"carat":0.42,"cut":"Ideal","color":"H","clarity":"VVS1","depth":61.3,"table":56,"price":1625,"x":4.83,"y":4.86,"z":2.97},{"name":32610,"carat":0.31,"cut":"Ideal","color":"H","clarity":"VVS2","depth":62.3,"table":55,"price":802,"x":4.37,"y":4.36,"z":2.72},{"name":32729,"carat":0.31,"cut":"Premium","color":"F","clarity":"VS2","depth":62,"table":60,"price":802,"x":4.34,"y":4.3,"z":2.68},{"name":40293,"carat":0.4,"cut":"Ideal","color":"H","clarity":"VVS2","depth":62.2,"table":56,"price":1125,"x":4.75,"y":4.7,"z":2.94},{"name":22281,"carat":1.56,"cut":"Ideal","color":"I","clarity":"VS2","depth":61.8,"table":56,"price":10333,"x":7.41,"y":7.45,"z":4.59},{"name":39900,"carat":0.42,"cut":"Ideal","color":"D","clarity":"VS2","depth":61.2,"table":56,"price":1103,"x":4.84,"y":4.8,"z":2.95},{"name":2657,"carat":0.7,"cut":"Premium","color":"G","clarity":"VVS1","depth":62.8,"table":58,"price":3234,"x":5.68,"y":5.62,"z":3.55},{"name":39750,"carat":0.5,"cut":"Premium","color":"H","clarity":"SI1","depth":62.3,"table":59,"price":1094,"x":5.02,"y":4.99,"z":3.12},{"name":8576,"carat":1,"cut":"Fair","color":"G","clarity":"VS2","depth":69.8,"table":54,"price":4435,"x":6.03,"y":5.94,"z":4.18},{"name":46613,"carat":0.51,"cut":"Ideal","color":"D","clarity":"VS2","depth":62.7,"table":55,"price":1787,"x":5.09,"y":5.12,"z":3.2},{"name":35533,"carat":0.36,"cut":"Premium","color":"F","clarity":"VS2","depth":59.4,"table":56,"price":905,"x":4.71,"y":4.69,"z":2.79},{"name":23870,"carat":1.63,"cut":"Ideal","color":"I","clarity":"VS2","depth":61.8,"table":56,"price":11963,"x":7.56,"y":7.59,"z":4.68},{"name":5281,"carat":0.82,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.5,"table":57,"price":3798,"x":6.01,"y":6.05,"z":3.71},{"name":45257,"carat":0.6,"cut":"Very-Good","color":"F","clarity":"SI1","depth":60.6,"table":57,"price":1661,"x":5.46,"y":5.5,"z":3.32},{"name":36946,"carat":0.23,"cut":"Good","color":"D","clarity":"VVS1","depth":64.8,"table":58,"price":478,"x":3.83,"y":3.85,"z":2.49},{"name":27120,"carat":2.35,"cut":"Premium","color":"I","clarity":"SI2","depth":61.1,"table":58,"price":17294,"x":8.63,"y":8.56,"z":5.25},{"name":20765,"carat":1.22,"cut":"Ideal","color":"G","clarity":"VS1","depth":60.7,"table":57,"price":9002,"x":6.93,"y":6.94,"z":4.21},{"name":35706,"carat":0.3,"cut":"Ideal","color":"D","clarity":"VS2","depth":62,"table":56,"price":911,"x":4.35,"y":4.33,"z":2.69},{"name":24232,"carat":2.02,"cut":"Premium","color":"J","clarity":"SI1","depth":61.6,"table":58,"price":12431,"x":8.14,"y":8.1,"z":5},{"name":20284,"carat":1.52,"cut":"Very-Good","color":"I","clarity":"SI1","depth":62.6,"table":60,"price":8703,"x":7.3,"y":7.33,"z":4.58},{"name":51292,"carat":0.75,"cut":"Premium","color":"E","clarity":"SI1","depth":59.8,"table":60,"price":2360,"x":5.9,"y":5.84,"z":3.51},{"name":13615,"carat":1,"cut":"Very-Good","color":"E","clarity":"SI1","depth":62.4,"table":59,"price":5571,"x":6.36,"y":6.42,"z":3.99},{"name":34302,"carat":0.4,"cut":"Very-Good","color":"E","clarity":"VS2","depth":62.9,"table":59,"price":858,"x":4.7,"y":4.75,"z":2.97},{"name":12363,"carat":0.26,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":62.6,"table":58,"price":597,"x":4.07,"y":4.11,"z":2.56},{"name":5119,"carat":1.01,"cut":"Premium","color":"I","clarity":"SI2","depth":60.5,"table":61,"price":3761,"x":6.47,"y":6.42,"z":3.9},{"name":48839,"carat":0.55,"cut":"Premium","color":"D","clarity":"VS2","depth":61.3,"table":60,"price":2030,"x":5.29,"y":5.28,"z":3.24},{"name":46340,"carat":0.51,"cut":"Premium","color":"E","clarity":"VS1","depth":62,"table":61,"price":1758,"x":5.14,"y":5.11,"z":3.18},{"name":41877,"carat":0.5,"cut":"Fair","color":"G","clarity":"VS1","depth":65.7,"table":63,"price":1257,"x":4.97,"y":4.87,"z":3.23},{"name":40539,"carat":0.36,"cut":"Premium","color":"G","clarity":"IF","depth":62.5,"table":60,"price":1148,"x":4.53,"y":4.49,"z":2.82},{"name":31176,"carat":0.35,"cut":"Ideal","color":"H","clarity":"VVS1","depth":62,"table":55,"price":756,"x":4.52,"y":4.54,"z":2.81},{"name":26640,"carat":2.03,"cut":"Very-Good","color":"E","clarity":"SI2","depth":63.7,"table":58,"price":16412,"x":7.91,"y":7.94,"z":5.05},{"name":41700,"carat":0.41,"cut":"Premium","color":"E","clarity":"VVS1","depth":61.2,"table":62,"price":1241,"x":4.78,"y":4.76,"z":2.92},{"name":45694,"carat":0.7,"cut":"Good","color":"H","clarity":"SI2","depth":64.2,"table":58,"price":1697,"x":5.56,"y":5.6,"z":3.58},{"name":40284,"carat":0.34,"cut":"Ideal","color":"I","clarity":"VS2","depth":61.1,"table":55,"price":495,"x":4.51,"y":4.55,"z":2.77},{"name":33029,"carat":0.3,"cut":"Ideal","color":"D","clarity":"VVS2","depth":60.7,"table":58,"price":814,"x":4.3,"y":4.33,"z":2.62},{"name":11496,"carat":1.03,"cut":"Ideal","color":"H","clarity":"SI1","depth":59.8,"table":57,"price":5018,"x":6.64,"y":6.57,"z":3.95},{"name":20438,"carat":1.51,"cut":"Ideal","color":"G","clarity":"SI2","depth":60.8,"table":57,"price":8794,"x":7.44,"y":7.39,"z":4.51},{"name":17076,"carat":1.24,"cut":"Premium","color":"H","clarity":"SI1","depth":60.2,"table":60,"price":6808,"x":6.94,"y":6.91,"z":4.17},{"name":16525,"carat":1.33,"cut":"Very-Good","color":"G","clarity":"SI2","depth":62,"table":59,"price":6603,"x":7.1,"y":7.04,"z":4.38},{"name":28064,"carat":0.31,"cut":"Ideal","color":"E","clarity":"SI1","depth":61.1,"table":56,"price":660,"x":4.39,"y":4.41,"z":2.69},{"name":21288,"carat":1.7,"cut":"Ideal","color":"H","clarity":"SI2","depth":61.2,"table":56,"price":9444,"x":7.71,"y":7.64,"z":4.7},{"name":40319,"carat":0.5,"cut":"Premium","color":"F","clarity":"SI2","depth":59.9,"table":60,"price":1125,"x":5.22,"y":5.16,"z":3.11},{"name":6229,"carat":0.9,"cut":"Very-Good","color":"F","clarity":"SI1","depth":63.3,"table":55,"price":4004,"x":6.05,"y":6.08,"z":3.84},{"name":20362,"carat":1.09,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61.8,"table":56,"price":8753,"x":6.58,"y":6.62,"z":4.08},{"name":27719,"carat":0.32,"cut":"Premium","color":"I","clarity":"VS1","depth":59.8,"table":60,"price":648,"x":4.46,"y":4.44,"z":2.66},{"name":13355,"carat":0.24,"cut":"Very-Good","color":"E","clarity":"VS2","depth":62.1,"table":58,"price":419,"x":4,"y":4.02,"z":2.49},{"name":23211,"carat":1.26,"cut":"Ideal","color":"G","clarity":"VVS1","depth":61.7,"table":56,"price":11218,"x":6.96,"y":6.98,"z":4.3},{"name":8072,"carat":0.74,"cut":"Good","color":"F","clarity":"VVS1","depth":58.4,"table":60,"price":4336,"x":6.03,"y":6.06,"z":3.53},{"name":50355,"carat":0.8,"cut":"Fair","color":"G","clarity":"SI2","depth":61.2,"table":58,"price":2246,"x":5.96,"y":5.93,"z":3.64},{"name":29236,"carat":0.43,"cut":"Ideal","color":"G","clarity":"SI2","depth":62.3,"table":53,"price":696,"x":4.84,"y":4.86,"z":3.02},{"name":15462,"carat":1.21,"cut":"Ideal","color":"D","clarity":"SI2","depth":62,"table":57,"price":6190,"x":6.81,"y":6.83,"z":4.23},{"name":37924,"carat":0.23,"cut":"Very-Good","color":"D","clarity":"VVS1","depth":61.7,"table":59,"price":485,"x":3.94,"y":3.97,"z":2.44},{"name":38438,"carat":0.49,"cut":"Premium","color":"G","clarity":"SI1","depth":62.5,"table":58,"price":1026,"x":5.03,"y":4.98,"z":3.13},{"name":53845,"carat":0.74,"cut":"Very-Good","color":"D","clarity":"SI2","depth":61.5,"table":59,"price":2740,"x":5.79,"y":5.82,"z":3.57},{"name":42942,"carat":0.3,"cut":"Premium","color":"F","clarity":"SI2","depth":61.3,"table":58,"price":506,"x":4.33,"y":4.28,"z":2.64},{"name":30233,"carat":0.33,"cut":"Ideal","color":"E","clarity":"VS2","depth":60.5,"table":56,"price":723,"x":4.48,"y":4.51,"z":2.72},{"name":12447,"carat":1.3,"cut":"Premium","color":"I","clarity":"VS2","depth":60.3,"table":60,"price":5242,"x":7.01,"y":6.99,"z":4.22},{"name":39528,"carat":0.4,"cut":"Very-Good","color":"I","clarity":"VVS1","depth":63.5,"table":57,"price":1080,"x":4.68,"y":4.65,"z":2.96},{"name":14827,"carat":1.21,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.2,"table":57,"price":5973,"x":6.86,"y":6.93,"z":4.22},{"name":23609,"carat":1.52,"cut":"Premium","color":"F","clarity":"SI1","depth":62.6,"table":59,"price":11637,"x":7.27,"y":7.36,"z":4.58},{"name":52759,"carat":0.72,"cut":"Very-Good","color":"E","clarity":"SI1","depth":62,"table":57,"price":2562,"x":5.73,"y":5.76,"z":3.56},{"name":38309,"carat":0.31,"cut":"Good","color":"I","clarity":"SI1","depth":64.3,"table":55,"price":488,"x":4.29,"y":4.27,"z":2.75},{"name":17027,"carat":1.02,"cut":"Ideal","color":"H","clarity":"VVS2","depth":62.1,"table":56,"price":6797,"x":6.5,"y":6.45,"z":4.02},{"name":17159,"carat":1.51,"cut":"Very-Good","color":"J","clarity":"SI1","depth":61.2,"table":62,"price":6851,"x":7.32,"y":7.36,"z":4.49},{"name":51702,"carat":0.7,"cut":"Very-Good","color":"F","clarity":"VS2","depth":62.9,"table":56,"price":2400,"x":5.66,"y":5.73,"z":3.58},{"name":16966,"carat":1.22,"cut":"Premium","color":"H","clarity":"SI1","depth":61.8,"table":57,"price":6776,"x":6.86,"y":6.82,"z":4.23},{"name":11068,"carat":0.34,"cut":"Ideal","color":"E","clarity":"SI1","depth":62,"table":57,"price":596,"x":4.46,"y":4.48,"z":2.77},{"name":28424,"carat":0.38,"cut":"Ideal","color":"J","clarity":"VVS2","depth":61.7,"table":54.6,"price":670,"x":4.65,"y":4.69,"z":2.89},{"name":28283,"carat":0.23,"cut":"Ideal","color":"G","clarity":"SI1","depth":62,"table":54,"price":364,"x":3.95,"y":3.99,"z":2.46},{"name":44763,"carat":0.52,"cut":"Very-Good","color":"G","clarity":"VS1","depth":59.5,"table":58,"price":1621,"x":5.21,"y":5.28,"z":3.12},{"name":47921,"carat":0.76,"cut":"Premium","color":"H","clarity":"SI1","depth":60.9,"table":59,"price":1915,"x":5.91,"y":5.86,"z":3.58},{"name":45809,"carat":0.52,"cut":"Good","color":"F","clarity":"VS1","depth":61.2,"table":62,"price":1710,"x":5.12,"y":5.05,"z":3.11},{"name":2789,"carat":0.81,"cut":"Ideal","color":"H","clarity":"VS1","depth":61.8,"table":58,"price":3257,"x":5.97,"y":6.04,"z":3.71},{"name":25299,"carat":2.08,"cut":"Good","color":"I","clarity":"SI2","depth":63.8,"table":58,"price":13956,"x":8.02,"y":8.1,"z":5.14},{"name":27405,"carat":1.93,"cut":"Fair","color":"F","clarity":"VS1","depth":58.9,"table":62,"price":17995,"x":8.17,"y":7.97,"z":4.75},{"name":18129,"carat":1.41,"cut":"Very-Good","color":"H","clarity":"SI2","depth":58.5,"table":57,"price":7339,"x":7.36,"y":7.44,"z":4.33},{"name":39532,"carat":0.4,"cut":"Good","color":"I","clarity":"VVS1","depth":63.9,"table":56,"price":1080,"x":4.68,"y":4.64,"z":2.98},{"name":674,"carat":0.76,"cut":"Premium","color":"D","clarity":"SI1","depth":61.1,"table":59,"price":2847,"x":5.93,"y":5.88,"z":3.61},{"name":53665,"carat":0.72,"cut":"Good","color":"G","clarity":"VS2","depth":63.1,"table":57,"price":2708,"x":5.71,"y":5.74,"z":3.61},{"name":14068,"carat":0.3,"cut":"Ideal","color":"G","clarity":"VS1","depth":62.6,"table":57,"price":605,"x":4.27,"y":4.29,"z":2.68},{"name":15754,"carat":1.29,"cut":"Ideal","color":"H","clarity":"SI2","depth":61.6,"table":54,"price":6300,"x":7,"y":7.02,"z":4.32},{"name":39855,"carat":0.33,"cut":"Ideal","color":"D","clarity":"VVS1","depth":61,"table":55,"price":1100,"x":4.47,"y":4.52,"z":2.74},{"name":47231,"carat":0.7,"cut":"Fair","color":"H","clarity":"SI1","depth":66,"table":56,"price":1840,"x":5.5,"y":5.53,"z":3.64},{"name":35265,"carat":0.34,"cut":"Ideal","color":"G","clarity":"VVS1","depth":62.1,"table":55,"price":895,"x":4.46,"y":4.49,"z":2.78},{"name":35740,"carat":0.3,"cut":"Premium","color":"D","clarity":"VS2","depth":61.1,"table":59,"price":911,"x":4.31,"y":4.26,"z":2.62},{"name":9811,"carat":1.21,"cut":"Premium","color":"I","clarity":"VS2","depth":61.6,"table":61,"price":4669,"x":6.86,"y":6.8,"z":4.21},{"name":16780,"carat":1.02,"cut":"Ideal","color":"G","clarity":"VS1","depth":62.2,"table":56,"price":6683,"x":6.46,"y":6.4,"z":4},{"name":9127,"carat":1.13,"cut":"Premium","color":"I","clarity":"SI1","depth":61.8,"table":59,"price":4536,"x":6.65,"y":6.68,"z":4.12},{"name":12726,"carat":0.9,"cut":"Premium","color":"E","clarity":"VS2","depth":59.5,"table":58,"price":5312,"x":6.33,"y":6.28,"z":3.75},{"name":25205,"carat":2.07,"cut":"Premium","color":"J","clarity":"VS2","depth":61.5,"table":59,"price":13800,"x":8.2,"y":8.16,"z":5.03},{"name":29275,"carat":0.31,"cut":"Premium","color":"I","clarity":"VVS2","depth":59.4,"table":59,"price":698,"x":4.44,"y":4.41,"z":2.63},{"name":18402,"carat":1.06,"cut":"Ideal","color":"F","clarity":"VS1","depth":61.9,"table":57,"price":7479,"x":6.55,"y":6.53,"z":4.05},{"name":42611,"carat":0.32,"cut":"Ideal","color":"H","clarity":"VS2","depth":62.1,"table":56,"price":505,"x":4.37,"y":4.42,"z":2.73},{"name":50928,"carat":0.71,"cut":"Ideal","color":"I","clarity":"SI1","depth":61.6,"table":55,"price":2319,"x":5.72,"y":5.74,"z":3.53},{"name":29951,"carat":0.33,"cut":"Premium","color":"I","clarity":"SI1","depth":61.3,"table":59,"price":445,"x":4.46,"y":4.51,"z":2.75},{"name":26314,"carat":2.34,"cut":"Premium","color":"I","clarity":"SI1","depth":61.7,"table":60,"price":15818,"x":8.59,"y":8.53,"z":5.28},{"name":3457,"carat":0.78,"cut":"Ideal","color":"D","clarity":"SI1","depth":62.2,"table":55,"price":3389,"x":5.92,"y":5.95,"z":3.69},{"name":49097,"carat":0.52,"cut":"Ideal","color":"G","clarity":"VVS1","depth":61.6,"table":55,"price":2063,"x":5.14,"y":5.18,"z":3.18},{"name":4156,"carat":0.72,"cut":"Ideal","color":"G","clarity":"VVS1","depth":61.7,"table":54.8,"price":3548,"x":5.73,"y":5.77,"z":3.55},{"name":9566,"carat":1.12,"cut":"Very-Good","color":"H","clarity":"SI2","depth":61.8,"table":58,"price":4624,"x":6.62,"y":6.68,"z":4.11},{"name":52609,"carat":0.7,"cut":"Very-Good","color":"G","clarity":"SI1","depth":62.5,"table":59,"price":2545,"x":5.69,"y":5.73,"z":3.57},{"name":17441,"carat":1.24,"cut":"Ideal","color":"G","clarity":"SI1","depth":60.5,"table":60,"price":6994,"x":6.97,"y":6.91,"z":4.2},{"name":7345,"carat":1.01,"cut":"Very-Good","color":"I","clarity":"SI1","depth":62.7,"table":56,"price":4212,"x":6.36,"y":6.43,"z":4.01},{"name":42696,"carat":0.46,"cut":"Ideal","color":"H","clarity":"VVS1","depth":62.4,"table":53.4,"price":1338,"x":4.95,"y":5.01,"z":3.1},{"name":47851,"carat":0.77,"cut":"Good","color":"J","clarity":"SI1","depth":63.3,"table":57,"price":1909,"x":5.79,"y":5.84,"z":3.68},{"name":25534,"carat":1.5,"cut":"Premium","color":"F","clarity":"VS2","depth":61,"table":58,"price":14352,"x":7.37,"y":7.31,"z":4.48},{"name":16092,"carat":1.32,"cut":"Ideal","color":"I","clarity":"SI1","depth":62.2,"table":57,"price":6431,"x":7.07,"y":7.01,"z":4.38},{"name":31166,"carat":0.41,"cut":"Premium","color":"E","clarity":"SI1","depth":60.1,"table":60,"price":755,"x":4.79,"y":4.83,"z":2.89},{"name":51790,"carat":0.7,"cut":"Ideal","color":"G","clarity":"SI1","depth":60.9,"table":57,"price":2415,"x":5.79,"y":5.77,"z":3.52},{"name":88,"carat":0.24,"cut":"Premium","color":"H","clarity":"VVS1","depth":60.8,"table":59,"price":554,"x":4.02,"y":4,"z":2.44},{"name":25451,"carat":1.51,"cut":"Very-Good","color":"D","clarity":"VS2","depth":63.1,"table":62,"price":14205,"x":7.24,"y":7.22,"z":4.56},{"name":31204,"carat":0.32,"cut":"Premium","color":"D","clarity":"SI1","depth":60.4,"table":58,"price":756,"x":4.47,"y":4.44,"z":2.69},{"name":31959,"carat":0.31,"cut":"Ideal","color":"I","clarity":"VS2","depth":62.3,"table":54,"price":452,"x":4.37,"y":4.4,"z":2.73},{"name":38340,"carat":0.32,"cut":"Ideal","color":"G","clarity":"IF","depth":61.8,"table":55,"price":1020,"x":4.43,"y":4.41,"z":2.73},{"name":2594,"carat":0.64,"cut":"Ideal","color":"F","clarity":"VVS2","depth":60.9,"table":56,"price":3217,"x":5.57,"y":5.59,"z":3.4},{"name":24570,"carat":1.01,"cut":"Ideal","color":"E","clarity":"IF","depth":61.4,"table":57,"price":12865,"x":6.53,"y":6.46,"z":3.99},{"name":53212,"carat":0.85,"cut":"Ideal","color":"H","clarity":"SI2","depth":61.8,"table":54,"price":2635,"x":6.07,"y":6.1,"z":3.76},{"name":39773,"carat":0.5,"cut":"Very-Good","color":"F","clarity":"SI2","depth":63.5,"table":58,"price":1094,"x":5.03,"y":4.98,"z":3.18},{"name":42305,"carat":0.5,"cut":"Very-Good","color":"F","clarity":"SI1","depth":61.4,"table":57,"price":1295,"x":5.08,"y":5.12,"z":3.13},{"name":39063,"carat":0.52,"cut":"Very-Good","color":"E","clarity":"SI2","depth":64,"table":55,"price":1059,"x":5.07,"y":5.11,"z":3.26},{"name":1060,"carat":0.31,"cut":"Very-Good","color":"I","clarity":"VS2","depth":63.2,"table":55,"price":558,"x":4.4,"y":4.3,"z":2.75},{"name":41268,"carat":0.31,"cut":"Ideal","color":"I","clarity":"VS1","depth":61.9,"table":54.5,"price":502,"x":4.33,"y":4.36,"z":2.69},{"name":13499,"carat":0.7,"cut":"Ideal","color":"D","clarity":"VVS2","depth":61.3,"table":56,"price":5539,"x":5.72,"y":5.76,"z":3.52},{"name":9650,"carat":1.12,"cut":"Premium","color":"H","clarity":"SI1","depth":61.2,"table":59,"price":4641,"x":6.69,"y":6.65,"z":4.08},{"name":46896,"carat":0.6,"cut":"Premium","color":"D","clarity":"SI1","depth":61.5,"table":52,"price":1814,"x":5.5,"y":5.43,"z":3.36},{"name":4117,"carat":0.79,"cut":"Premium","color":"G","clarity":"SI1","depth":61.2,"table":56,"price":3539,"x":6,"y":5.96,"z":3.66},{"name":39352,"carat":0.52,"cut":"Premium","color":"I","clarity":"SI1","depth":62.5,"table":59,"price":1073,"x":5.12,"y":5.06,"z":3.18},{"name":40808,"carat":0.5,"cut":"Very-Good","color":"G","clarity":"SI1","depth":62.8,"table":55,"price":1170,"x":5.03,"y":5.07,"z":3.17},{"name":17708,"carat":0.3,"cut":"Very-Good","color":"F","clarity":"VVS2","depth":64.2,"table":56,"price":613,"x":4.22,"y":4.26,"z":2.72},{"name":34501,"carat":0.42,"cut":"Good","color":"I","clarity":"VVS1","depth":59.2,"table":61,"price":867,"x":4.88,"y":4.91,"z":2.9},{"name":33837,"carat":0.3,"cut":"Ideal","color":"E","clarity":"VVS1","depth":62,"table":57,"price":844,"x":4.29,"y":4.32,"z":2.67},{"name":35374,"carat":0.41,"cut":"Very-Good","color":"G","clarity":"VS1","depth":62.4,"table":57,"price":899,"x":4.71,"y":4.74,"z":2.95},{"name":320,"carat":0.71,"cut":"Premium","color":"F","clarity":"VS2","depth":62.1,"table":58,"price":2801,"x":5.7,"y":5.67,"z":3.53},{"name":11930,"carat":0.93,"cut":"Ideal","color":"G","clarity":"SI1","depth":60.1,"table":57,"price":5126,"x":6.33,"y":6.41,"z":3.83},{"name":10079,"carat":0.32,"cut":"Ideal","color":"H","clarity":"VS1","depth":61.6,"table":56,"price":592,"x":4.42,"y":4.46,"z":2.73},{"name":15112,"carat":1,"cut":"Ideal","color":"D","clarity":"SI1","depth":62.7,"table":57,"price":6073,"x":6.34,"y":6.38,"z":3.99},{"name":49356,"carat":0.71,"cut":"Very-Good","color":"F","clarity":"SI2","depth":63.6,"table":56,"price":2098,"x":5.58,"y":5.67,"z":3.58},{"name":17755,"carat":1.33,"cut":"Ideal","color":"I","clarity":"VS2","depth":61.1,"table":54,"price":7148,"x":7.14,"y":7.15,"z":4.37},{"name":34192,"carat":0.33,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.6,"table":56,"price":854,"x":4.46,"y":4.44,"z":2.74},{"name":42409,"carat":0.42,"cut":"Ideal","color":"H","clarity":"VVS1","depth":61.1,"table":56,"price":1310,"x":4.86,"y":4.9,"z":2.98},{"name":37858,"carat":0.44,"cut":"Premium","color":"E","clarity":"VS2","depth":60.4,"table":58,"price":1003,"x":4.87,"y":4.93,"z":2.96},{"name":31467,"carat":0.34,"cut":"Premium","color":"I","clarity":"VVS2","depth":61.5,"table":60,"price":765,"x":4.49,"y":4.45,"z":2.75},{"name":39215,"carat":0.42,"cut":"Very-Good","color":"D","clarity":"VS1","depth":60.7,"table":60,"price":1066,"x":4.81,"y":4.88,"z":2.94},{"name":29220,"carat":0.34,"cut":"Ideal","color":"I","clarity":"IF","depth":61.9,"table":55,"price":695,"x":4.5,"y":4.52,"z":2.79},{"name":37440,"carat":0.33,"cut":"Ideal","color":"E","clarity":"VVS1","depth":61.7,"table":56,"price":984,"x":4.42,"y":4.46,"z":2.74},{"name":4536,"carat":0.76,"cut":"Very-Good","color":"F","clarity":"VVS2","depth":62.9,"table":58,"price":3640,"x":5.76,"y":5.85,"z":3.65},{"name":3091,"carat":0.93,"cut":"Premium","color":"F","clarity":"SI2","depth":61.3,"table":62,"price":3317,"x":6.26,"y":6.17,"z":3.81},{"name":8882,"carat":0.9,"cut":"Good","color":"G","clarity":"VVS2","depth":62.6,"table":63,"price":4485,"x":6.1,"y":6.14,"z":3.83},{"name":13302,"carat":1.05,"cut":"Very-Good","color":"E","clarity":"SI1","depth":62.2,"table":56,"price":5494,"x":6.49,"y":6.56,"z":4.06},{"name":43088,"carat":0.51,"cut":"Premium","color":"E","clarity":"SI1","depth":62.4,"table":59,"price":1381,"x":5.07,"y":5.12,"z":3.18},{"name":15091,"carat":1.21,"cut":"Premium","color":"E","clarity":"SI2","depth":58.8,"table":58,"price":6065,"x":7.07,"y":6.91,"z":4.11},{"name":52428,"carat":0.75,"cut":"Very-Good","color":"H","clarity":"VS1","depth":59.3,"table":59,"price":2513,"x":5.87,"y":6,"z":3.52},{"name":40412,"carat":0.55,"cut":"Ideal","color":"I","clarity":"SI1","depth":61.3,"table":55,"price":1134,"x":5.3,"y":5.33,"z":3.26},{"name":10498,"carat":1.02,"cut":"Fair","color":"D","clarity":"SI1","depth":66.4,"table":60,"price":4798,"x":6.29,"y":6.21,"z":4.15},{"name":36997,"carat":0.41,"cut":"Ideal","color":"G","clarity":"SI1","depth":61.6,"table":55,"price":964,"x":4.81,"y":4.84,"z":2.97},{"name":34210,"carat":0.33,"cut":"Premium","color":"F","clarity":"VS2","depth":62.1,"table":59,"price":854,"x":4.45,"y":4.4,"z":2.75},{"name":48645,"carat":0.27,"cut":"Ideal","color":"E","clarity":"VS2","depth":60.8,"table":56,"price":537,"x":4.25,"y":4.23,"z":2.58},{"name":20802,"carat":1.5,"cut":"Very-Good","color":"I","clarity":"VS1","depth":62.8,"table":58,"price":9033,"x":7.17,"y":7.23,"z":4.52},{"name":4618,"carat":0.9,"cut":"Premium","color":"I","clarity":"VS2","depth":60.1,"table":59,"price":3663,"x":6.37,"y":6.25,"z":3.79},{"name":10955,"carat":1.03,"cut":"Ideal","color":"G","clarity":"SI1","depth":61.6,"table":57,"price":4900,"x":6.53,"y":6.46,"z":4},{"name":3797,"carat":0.73,"cut":"Ideal","color":"D","clarity":"VS2","depth":61.6,"table":56,"price":3464,"x":5.78,"y":5.82,"z":3.57},{"name":16221,"carat":1.03,"cut":"Premium","color":"F","clarity":"VS2","depth":62,"table":58,"price":6484,"x":6.5,"y":6.46,"z":4.02},{"name":12627,"carat":1.25,"cut":"Ideal","color":"I","clarity":"SI2","depth":63.3,"table":56,"price":5292,"x":6.87,"y":6.83,"z":4.34},{"name":41967,"carat":0.23,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":61.1,"table":58,"price":505,"x":3.93,"y":3.99,"z":2.42},{"name":6493,"carat":1.06,"cut":"Good","color":"H","clarity":"SI1","depth":57.2,"table":60,"price":4060,"x":6.84,"y":6.74,"z":3.88},{"name":15854,"carat":1.02,"cut":"Ideal","color":"E","clarity":"SI1","depth":62.6,"table":57,"price":6342,"x":6.41,"y":6.44,"z":4.02},{"name":36269,"carat":0.32,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61.9,"table":57,"price":936,"x":4.41,"y":4.38,"z":2.72},{"name":7956,"carat":1.07,"cut":"Very-Good","color":"G","clarity":"SI2","depth":62.9,"table":59,"price":4321,"x":6.51,"y":6.58,"z":4.12},{"name":50816,"carat":0.75,"cut":"Premium","color":"D","clarity":"SI2","depth":60.3,"table":61,"price":2307,"x":5.88,"y":5.86,"z":3.54},{"name":33151,"carat":0.31,"cut":"Premium","color":"G","clarity":"VVS1","depth":61.4,"table":58,"price":816,"x":4.32,"y":4.35,"z":2.66},{"name":37024,"carat":0.33,"cut":"Premium","color":"G","clarity":"VVS2","depth":61.9,"table":58,"price":965,"x":4.43,"y":4.39,"z":2.73},{"name":6022,"carat":1.18,"cut":"Very-Good","color":"E","clarity":"I1","depth":63.3,"table":57,"price":3965,"x":6.7,"y":6.64,"z":4.22},{"name":31531,"carat":0.34,"cut":"Ideal","color":"E","clarity":"SI1","depth":62.2,"table":55,"price":765,"x":4.49,"y":4.45,"z":2.78},{"name":25949,"carat":1.51,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61.8,"table":57,"price":15118,"x":7.36,"y":7.31,"z":4.53},{"name":2426,"carat":0.95,"cut":"Premium","color":"G","clarity":"SI2","depth":59.8,"table":60,"price":3181,"x":6.36,"y":6.34,"z":3.8},{"name":35436,"carat":0.32,"cut":"Ideal","color":"E","clarity":"VS2","depth":62,"table":55,"price":900,"x":4.41,"y":4.39,"z":2.73},{"name":41220,"carat":0.43,"cut":"Ideal","color":"G","clarity":"VVS1","depth":61.5,"table":56,"price":1207,"x":4.85,"y":4.87,"z":2.99},{"name":33773,"carat":0.48,"cut":"Ideal","color":"I","clarity":"SI1","depth":61.9,"table":53,"price":841,"x":5.06,"y":5.08,"z":3.14},{"name":16566,"carat":1.01,"cut":"Premium","color":"G","clarity":"VS1","depth":62.8,"table":59,"price":6618,"x":6.37,"y":6.34,"z":3.99},{"name":9385,"carat":0.32,"cut":"Ideal","color":"D","clarity":"SI1","depth":61.5,"table":56,"price":589,"x":4.39,"y":4.42,"z":2.71},{"name":22896,"carat":1.56,"cut":"Ideal","color":"D","clarity":"SI1","depth":62.2,"table":58,"price":10934,"x":7.37,"y":7.42,"z":4.6},{"name":15350,"carat":1,"cut":"Good","color":"E","clarity":"VS2","depth":57.4,"table":58,"price":6160,"x":6.61,"y":6.57,"z":3.78},{"name":20496,"carat":1.2,"cut":"Very-Good","color":"F","clarity":"VS2","depth":62.4,"table":58,"price":8829,"x":6.75,"y":6.81,"z":4.23},{"name":26237,"carat":1.71,"cut":"Premium","color":"G","clarity":"VS2","depth":59.3,"table":60,"price":15671,"x":7.86,"y":7.81,"z":4.65},{"name":21635,"carat":1.02,"cut":"Very-Good","color":"F","clarity":"VVS2","depth":63.7,"table":59,"price":9728,"x":6.34,"y":6.38,"z":4.05},{"name":413,"carat":0.3,"cut":"Ideal","color":"G","clarity":"VS1","depth":62.3,"table":56,"price":555,"x":4.29,"y":4.31,"z":2.68},{"name":4229,"carat":0.74,"cut":"Ideal","color":"G","clarity":"VS1","depth":61.5,"table":56,"price":3572,"x":5.79,"y":5.82,"z":3.57},{"name":10579,"carat":1.23,"cut":"Ideal","color":"F","clarity":"SI2","depth":62.1,"table":57,"price":4819,"x":6.83,"y":6.8,"z":4.23},{"name":40264,"carat":0.33,"cut":"Ideal","color":"D","clarity":"SI2","depth":61.1,"table":57,"price":492,"x":4.47,"y":4.5,"z":2.74},{"name":19797,"carat":1.74,"cut":"Premium","color":"J","clarity":"VS2","depth":61.9,"table":62,"price":8364,"x":7.62,"y":7.54,"z":4.7},{"name":41748,"carat":0.52,"cut":"Good","color":"G","clarity":"SI1","depth":63.6,"table":56,"price":1244,"x":5.07,"y":5.09,"z":3.23},{"name":2696,"carat":0.9,"cut":"Very-Good","color":"G","clarity":"SI2","depth":63.4,"table":59,"price":3246,"x":6.08,"y":6.04,"z":3.84},{"name":13216,"carat":0.91,"cut":"Ideal","color":"E","clarity":"SI1","depth":61.9,"table":55,"price":5458,"x":6.21,"y":6.23,"z":3.85},{"name":6925,"carat":0.91,"cut":"Very-Good","color":"E","clarity":"SI1","depth":63.5,"table":57,"price":4138,"x":6.11,"y":6.07,"z":3.87},{"name":41236,"carat":0.39,"cut":"Premium","color":"E","clarity":"VVS2","depth":61.1,"table":59,"price":1207,"x":4.74,"y":4.68,"z":2.88},{"name":51977,"carat":0.26,"cut":"Very-Good","color":"E","clarity":"VVS1","depth":62.9,"table":61,"price":547,"x":4.01,"y":4.06,"z":2.54},{"name":44527,"carat":0.5,"cut":"Ideal","color":"G","clarity":"VS2","depth":62.2,"table":54.1,"price":1601,"x":5.07,"y":5.12,"z":3.17},{"name":442,"carat":0.89,"cut":"Premium","color":"H","clarity":"SI2","depth":60.2,"table":59,"price":2815,"x":6.26,"y":6.23,"z":3.76},{"name":6065,"carat":1.01,"cut":"Very-Good","color":"G","clarity":"SI2","depth":62.1,"table":61,"price":3966,"x":6.27,"y":6.38,"z":3.93},{"name":50812,"carat":0.54,"cut":"Ideal","color":"D","clarity":"VS2","depth":61.6,"table":55,"price":2307,"x":5.25,"y":5.27,"z":3.24},{"name":28616,"carat":0.3,"cut":"Premium","color":"E","clarity":"SI1","depth":62.5,"table":60,"price":675,"x":4.27,"y":4.24,"z":2.66},{"name":3714,"carat":0.9,"cut":"Very-Good","color":"G","clarity":"SI2","depth":63.1,"table":55,"price":3452,"x":6.16,"y":6.13,"z":3.88},{"name":48054,"carat":0.72,"cut":"Ideal","color":"I","clarity":"SI2","depth":60.7,"table":60,"price":1927,"x":5.75,"y":5.78,"z":3.5},{"name":31482,"carat":0.34,"cut":"Premium","color":"G","clarity":"VS2","depth":60.2,"table":58,"price":765,"x":4.55,"y":4.52,"z":2.73},{"name":43479,"carat":0.5,"cut":"Premium","color":"E","clarity":"VS2","depth":60.1,"table":61,"price":1420,"x":5.2,"y":5.15,"z":3.11},{"name":49421,"carat":0.55,"cut":"Ideal","color":"E","clarity":"VS1","depth":61.2,"table":57,"price":2107,"x":5.3,"y":5.28,"z":3.24},{"name":26852,"carat":2.01,"cut":"Premium","color":"I","clarity":"VS2","depth":61,"table":61,"price":16778,"x":8.15,"y":7.99,"z":4.92},{"name":50683,"carat":0.76,"cut":"Ideal","color":"H","clarity":"SI2","depth":63,"table":56,"price":2288,"x":5.81,"y":5.84,"z":3.67},{"name":51574,"carat":0.74,"cut":"Very-Good","color":"E","clarity":"SI2","depth":61.8,"table":60,"price":2391,"x":5.78,"y":5.8,"z":3.58},{"name":4490,"carat":1.01,"cut":"Good","color":"G","clarity":"SI2","depth":63.7,"table":58,"price":3626,"x":6.31,"y":6.35,"z":4.03},{"name":14321,"carat":1.18,"cut":"Premium","color":"H","clarity":"SI1","depth":61.8,"table":58,"price":5801,"x":6.79,"y":6.74,"z":4.18},{"name":32399,"carat":0.31,"cut":"Ideal","color":"E","clarity":"VVS2","depth":62,"table":54,"price":791,"x":4.38,"y":4.4,"z":2.72},{"name":48692,"carat":0.58,"cut":"Ideal","color":"H","clarity":"VVS1","depth":61.6,"table":56,"price":2006,"x":5.35,"y":5.39,"z":3.31},{"name":28458,"carat":0.32,"cut":"Very-Good","color":"G","clarity":"VVS2","depth":61.9,"table":57,"price":672,"x":4.39,"y":4.41,"z":2.73},{"name":15645,"carat":1,"cut":"Ideal","color":"G","clarity":"VS2","depth":62.3,"table":54,"price":6272,"x":6.42,"y":6.38,"z":3.99},{"name":30606,"carat":0.34,"cut":"Very-Good","color":"I","clarity":"SI1","depth":61.8,"table":57,"price":447,"x":4.46,"y":4.51,"z":2.77},{"name":8079,"carat":1.01,"cut":"Good","color":"D","clarity":"SI2","depth":57.6,"table":62,"price":4338,"x":6.66,"y":6.56,"z":3.81},{"name":50346,"carat":0.7,"cut":"Premium","color":"H","clarity":"VS1","depth":60.5,"table":58,"price":2245,"x":5.73,"y":5.77,"z":3.48},{"name":5859,"carat":0.91,"cut":"Premium","color":"H","clarity":"VS2","depth":59.6,"table":60,"price":3921,"x":6.25,"y":6.29,"z":3.74},{"name":6230,"carat":0.9,"cut":"Good","color":"F","clarity":"SI1","depth":58.8,"table":60,"price":4004,"x":6.22,"y":6.26,"z":3.67},{"name":33140,"carat":0.31,"cut":"Premium","color":"G","clarity":"VVS1","depth":62.1,"table":59,"price":816,"x":4.34,"y":4.39,"z":2.71},{"name":991,"carat":0.77,"cut":"Premium","color":"E","clarity":"SI1","depth":60.9,"table":58,"price":2896,"x":5.94,"y":5.88,"z":3.6},{"name":11591,"carat":1.07,"cut":"Premium","color":"F","clarity":"SI1","depth":61.7,"table":58,"price":5042,"x":6.54,"y":6.61,"z":4.06},{"name":1034,"carat":0.71,"cut":"Very-Good","color":"G","clarity":"VS2","depth":62.1,"table":58,"price":2905,"x":5.65,"y":5.71,"z":3.53},{"name":23396,"carat":0.36,"cut":"Premium","color":"E","clarity":"SI1","depth":60.9,"table":60,"price":631,"x":4.56,"y":4.61,"z":2.79},{"name":13821,"carat":1.26,"cut":"Premium","color":"H","clarity":"SI1","depth":61,"table":55,"price":5631,"x":7,"y":6.97,"z":4.26},{"name":4418,"carat":1.01,"cut":"Good","color":"E","clarity":"SI2","depth":63.9,"table":58,"price":3611,"x":6.37,"y":6.31,"z":4.05},{"name":110,"carat":0.59,"cut":"Ideal","color":"E","clarity":"VVS2","depth":62,"table":55,"price":2761,"x":5.38,"y":5.43,"z":3.35},{"name":46385,"carat":0.57,"cut":"Premium","color":"E","clarity":"VS2","depth":62,"table":58,"price":1763,"x":5.38,"y":5.33,"z":3.32},{"name":36517,"carat":0.3,"cut":"Premium","color":"F","clarity":"VVS2","depth":62.4,"table":58,"price":945,"x":4.28,"y":4.25,"z":2.66},{"name":50692,"carat":0.53,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.6,"table":56,"price":2290,"x":5.26,"y":5.23,"z":3.23},{"name":16356,"carat":0.3,"cut":"Premium","color":"H","clarity":"VS2","depth":62.6,"table":58,"price":608,"x":4.28,"y":4.22,"z":2.66},{"name":30090,"carat":0.32,"cut":"Premium","color":"H","clarity":"VS1","depth":60.5,"table":59,"price":720,"x":4.42,"y":4.41,"z":2.67},{"name":47490,"carat":0.72,"cut":"Ideal","color":"J","clarity":"SI1","depth":62.3,"table":56,"price":1864,"x":5.75,"y":5.78,"z":3.59},{"name":34950,"carat":0.31,"cut":"Ideal","color":"I","clarity":"SI2","depth":61,"table":56,"price":379,"x":4.39,"y":4.43,"z":2.69},{"name":19144,"carat":1.6,"cut":"Very-Good","color":"I","clarity":"SI2","depth":62.2,"table":59,"price":7906,"x":7.42,"y":7.46,"z":4.63},{"name":14123,"carat":1.05,"cut":"Ideal","color":"H","clarity":"VS2","depth":61.7,"table":57,"price":5728,"x":6.52,"y":6.55,"z":4.03},{"name":32105,"carat":0.33,"cut":"Ideal","color":"D","clarity":"VS2","depth":62.1,"table":55,"price":781,"x":4.43,"y":4.46,"z":2.76},{"name":18898,"carat":1.07,"cut":"Premium","color":"D","clarity":"VS2","depth":61.3,"table":59,"price":7751,"x":6.61,"y":6.53,"z":4.03},{"name":29023,"carat":0.31,"cut":"Ideal","color":"G","clarity":"VVS2","depth":62.4,"table":54,"price":687,"x":4.37,"y":4.38,"z":2.73},{"name":35086,"carat":0.3,"cut":"Ideal","color":"F","clarity":"IF","depth":61.1,"table":58,"price":886,"x":4.32,"y":4.36,"z":2.65},{"name":2621,"carat":0.74,"cut":"Very-Good","color":"F","clarity":"VS1","depth":61.7,"table":57,"price":3226,"x":5.79,"y":5.85,"z":3.59},{"name":50578,"carat":0.56,"cut":"Premium","color":"E","clarity":"VVS2","depth":61.5,"table":58,"price":2279,"x":5.3,"y":5.33,"z":3.27},{"name":27907,"carat":0.41,"cut":"Ideal","color":"D","clarity":"SI2","depth":62.6,"table":57,"price":656,"x":4.72,"y":4.77,"z":2.97},{"name":46212,"carat":0.51,"cut":"Very-Good","color":"F","clarity":"VS1","depth":62.5,"table":54,"price":1751,"x":5.13,"y":5.15,"z":3.21},{"name":27876,"carat":0.44,"cut":"Ideal","color":"H","clarity":"SI2","depth":62.3,"table":54,"price":654,"x":4.89,"y":4.93,"z":3.06},{"name":39269,"carat":0.38,"cut":"Premium","color":"G","clarity":"VS1","depth":61.9,"table":59,"price":1069,"x":4.67,"y":4.63,"z":2.88},{"name":25518,"carat":2.14,"cut":"Ideal","color":"I","clarity":"SI2","depth":61.9,"table":56,"price":14321,"x":8.22,"y":8.26,"z":5.1},{"name":32774,"carat":0.34,"cut":"Premium","color":"D","clarity":"SI1","depth":61.2,"table":58,"price":803,"x":4.49,"y":4.47,"z":2.74},{"name":44438,"carat":0.51,"cut":"Premium","color":"E","clarity":"VS2","depth":62.5,"table":60,"price":1590,"x":5.08,"y":5.1,"z":3.18},{"name":2369,"carat":0.9,"cut":"Good","color":"I","clarity":"SI1","depth":63.5,"table":59,"price":3176,"x":6.05,"y":6.1,"z":3.86},{"name":34537,"carat":0.33,"cut":"Ideal","color":"E","clarity":"VVS2","depth":61.7,"table":57,"price":868,"x":4.41,"y":4.44,"z":2.73},{"name":41755,"carat":0.5,"cut":"Ideal","color":"I","clarity":"VS2","depth":62.5,"table":55,"price":1244,"x":5.05,"y":5.09,"z":3.17},{"name":41188,"carat":0.5,"cut":"Very-Good","color":"G","clarity":"SI1","depth":60.6,"table":56,"price":1202,"x":5.13,"y":5.16,"z":3.12},{"name":38319,"carat":0.52,"cut":"Ideal","color":"I","clarity":"SI1","depth":62,"table":54,"price":1019,"x":5.17,"y":5.19,"z":3.21},{"name":13565,"carat":1.16,"cut":"Ideal","color":"H","clarity":"SI1","depth":62.2,"table":55,"price":5554,"x":6.79,"y":6.74,"z":4.21},{"name":3909,"carat":0.71,"cut":"Very-Good","color":"F","clarity":"VVS2","depth":60.6,"table":58,"price":3494,"x":5.76,"y":5.79,"z":3.5},{"name":48366,"carat":0.56,"cut":"Premium","color":"D","clarity":"VS2","depth":61.1,"table":58,"price":1963,"x":5.3,"y":5.34,"z":3.25},{"name":6629,"carat":0.8,"cut":"Ideal","color":"E","clarity":"VS1","depth":62.1,"table":56,"price":4086,"x":5.92,"y":5.97,"z":3.69},{"name":51713,"carat":0.78,"cut":"Very-Good","color":"G","clarity":"SI2","depth":63.7,"table":55.9,"price":2401,"x":5.82,"y":5.85,"z":3.72},{"name":11921,"carat":1.22,"cut":"Ideal","color":"I","clarity":"SI1","depth":62.5,"table":56,"price":5124,"x":6.82,"y":6.79,"z":4.25},{"name":30835,"carat":0.33,"cut":"Ideal","color":"H","clarity":"VS1","depth":60.2,"table":57,"price":743,"x":4.54,"y":4.5,"z":2.72},{"name":4295,"carat":0.82,"cut":"Ideal","color":"E","clarity":"SI1","depth":61.8,"table":55,"price":3588,"x":5.97,"y":6.01,"z":3.7},{"name":423,"carat":0.71,"cut":"Ideal","color":"D","clarity":"SI1","depth":62.4,"table":57,"price":2812,"x":5.69,"y":5.72,"z":3.56},{"name":22043,"carat":0.31,"cut":"Very-Good","color":"I","clarity":"VS1","depth":63.2,"table":56,"price":628,"x":4.33,"y":4.28,"z":2.72},{"name":53028,"carat":0.82,"cut":"Very-Good","color":"I","clarity":"SI1","depth":60.5,"table":58,"price":2602,"x":6.01,"y":6.08,"z":3.66},{"name":41363,"carat":0.52,"cut":"Very-Good","color":"H","clarity":"SI1","depth":63.1,"table":57,"price":1219,"x":5.14,"y":5.09,"z":3.23},{"name":2400,"carat":0.31,"cut":"Ideal","color":"G","clarity":"VS2","depth":61.7,"table":55,"price":562,"x":4.37,"y":4.39,"z":2.7},{"name":39296,"carat":0.3,"cut":"Ideal","color":"H","clarity":"VS2","depth":62.5,"table":57,"price":491,"x":4.26,"y":4.29,"z":2.67},{"name":13143,"carat":1.01,"cut":"Ideal","color":"E","clarity":"SI2","depth":61.5,"table":55,"price":5437,"x":6.44,"y":6.51,"z":3.98},{"name":44041,"carat":0.53,"cut":"Very-Good","color":"H","clarity":"VVS2","depth":61.3,"table":61,"price":1548,"x":5.15,"y":5.2,"z":3.17},{"name":38296,"carat":0.3,"cut":"Ideal","color":"G","clarity":"SI1","depth":60.6,"table":57,"price":487,"x":4.34,"y":4.37,"z":2.63},{"name":44394,"carat":0.51,"cut":"Ideal","color":"F","clarity":"VS2","depth":60.6,"table":57,"price":1583,"x":5.17,"y":5.2,"z":3.14},{"name":28735,"carat":0.31,"cut":"Ideal","color":"E","clarity":"VS2","depth":62,"table":56,"price":680,"x":4.34,"y":4.37,"z":2.7},{"name":14912,"carat":1.07,"cut":"Very-Good","color":"D","clarity":"SI1","depth":60.2,"table":55,"price":6002,"x":6.64,"y":6.68,"z":4.01},{"name":18648,"carat":1.03,"cut":"Ideal","color":"F","clarity":"VS1","depth":59,"table":55,"price":7613,"x":6.62,"y":6.67,"z":3.92},{"name":48841,"carat":0.55,"cut":"Ideal","color":"D","clarity":"VS2","depth":61.8,"table":54,"price":2030,"x":5.29,"y":5.26,"z":3.26},{"name":22540,"carat":2.02,"cut":"Ideal","color":"I","clarity":"SI2","depth":62.3,"table":55,"price":10577,"x":8.1,"y":8.06,"z":5.03},{"name":1752,"carat":0.81,"cut":"Good","color":"I","clarity":"VS1","depth":59.4,"table":56,"price":3042,"x":5.97,"y":6.11,"z":3.59},{"name":14997,"carat":1.07,"cut":"Premium","color":"G","clarity":"VS2","depth":62.2,"table":58,"price":6040,"x":6.54,"y":6.48,"z":4.05},{"name":8429,"carat":0.92,"cut":"Good","color":"E","clarity":"VS2","depth":58.9,"table":57,"price":4406,"x":6.35,"y":6.38,"z":3.75},{"name":43254,"carat":0.42,"cut":"Ideal","color":"E","clarity":"VVS1","depth":62.1,"table":55,"price":1400,"x":4.78,"y":4.81,"z":2.98},{"name":38577,"carat":0.4,"cut":"Premium","color":"G","clarity":"VS2","depth":62.8,"table":61,"price":1035,"x":4.67,"y":4.63,"z":2.92},{"name":45190,"carat":0.51,"cut":"Ideal","color":"G","clarity":"VS1","depth":62.5,"table":57,"price":1656,"x":5.07,"y":5.14,"z":3.19},{"name":28080,"carat":0.4,"cut":"Ideal","color":"J","clarity":"VVS2","depth":62.5,"table":53,"price":662,"x":4.74,"y":4.79,"z":2.98},{"name":14187,"carat":1.01,"cut":"Good","color":"G","clarity":"VS2","depth":58.9,"table":61,"price":5756,"x":6.46,"y":6.55,"z":3.83},{"name":18522,"carat":1.6,"cut":"Premium","color":"J","clarity":"SI1","depth":62.2,"table":58,"price":7550,"x":7.48,"y":7.54,"z":4.67},{"name":18046,"carat":0.3,"cut":"Very-Good","color":"E","clarity":"VS2","depth":62.6,"table":62,"price":614,"x":4.21,"y":4.25,"z":2.65},{"name":30370,"carat":0.36,"cut":"Very-Good","color":"H","clarity":"VS2","depth":63.5,"table":54,"price":729,"x":4.59,"y":4.55,"z":2.9},{"name":3507,"carat":0.76,"cut":"Ideal","color":"E","clarity":"SI1","depth":61.2,"table":56,"price":3401,"x":5.88,"y":5.91,"z":3.61},{"name":21699,"carat":0.34,"cut":"Premium","color":"D","clarity":"SI1","depth":62.4,"table":58,"price":626,"x":4.42,"y":4.46,"z":2.77},{"name":15698,"carat":0.35,"cut":"Ideal","color":"F","clarity":"SI1","depth":61.5,"table":54,"price":607,"x":4.57,"y":4.6,"z":2.82},{"name":44791,"carat":0.5,"cut":"Very-Good","color":"E","clarity":"VS2","depth":61.4,"table":59,"price":1624,"x":5.09,"y":5.13,"z":3.14},{"name":22790,"carat":1.62,"cut":"Premium","color":"H","clarity":"SI1","depth":61.3,"table":60,"price":10813,"x":7.48,"y":7.53,"z":4.6},{"name":19285,"carat":1.11,"cut":"Very-Good","color":"D","clarity":"VS2","depth":63.2,"table":57,"price":8006,"x":6.64,"y":6.61,"z":4.18},{"name":14736,"carat":1.25,"cut":"Ideal","color":"H","clarity":"SI2","depth":62.2,"table":55.4,"price":5932,"x":6.89,"y":6.94,"z":4.29},{"name":46196,"carat":0.5,"cut":"Ideal","color":"F","clarity":"VS2","depth":60.9,"table":57,"price":1749,"x":5.14,"y":5.16,"z":3.14},{"name":37954,"carat":0.41,"cut":"Very-Good","color":"F","clarity":"VS1","depth":58.6,"table":61,"price":1007,"x":4.83,"y":4.87,"z":2.84},{"name":48989,"carat":0.36,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.7,"table":54,"price":538,"x":4.56,"y":4.62,"z":2.83},{"name":29695,"carat":0.31,"cut":"Very-Good","color":"H","clarity":"VVS1","depth":63,"table":58,"price":707,"x":4.33,"y":4.37,"z":2.74},{"name":30585,"carat":0.31,"cut":"Ideal","color":"D","clarity":"VS2","depth":61.5,"table":56,"price":734,"x":4.34,"y":4.37,"z":2.68},{"name":28251,"carat":0.33,"cut":"Premium","color":"F","clarity":"VS2","depth":60.8,"table":58,"price":666,"x":4.44,"y":4.47,"z":2.71},{"name":18984,"carat":1.09,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.1,"table":57,"price":7813,"x":6.62,"y":6.56,"z":4.09},{"name":36046,"carat":0.34,"cut":"Very-Good","color":"G","clarity":"IF","depth":61,"table":56,"price":924,"x":4.5,"y":4.54,"z":2.76},{"name":3,"carat":0.23,"cut":"Good","color":"E","clarity":"VS1","depth":56.9,"table":65,"price":327,"x":4.05,"y":4.07,"z":2.31},{"name":33592,"carat":0.37,"cut":"Premium","color":"H","clarity":"VS1","depth":60.9,"table":60,"price":833,"x":4.63,"y":4.6,"z":2.81},{"name":20738,"carat":1.4,"cut":"Ideal","color":"H","clarity":"VS2","depth":63,"table":56,"price":8977,"x":7.13,"y":7.07,"z":4.47},{"name":10220,"carat":1,"cut":"Ideal","color":"E","clarity":"SI2","depth":61.8,"table":57,"price":4743,"x":6.39,"y":6.43,"z":3.96},{"name":41632,"carat":0.32,"cut":"Very-Good","color":"H","clarity":"SI2","depth":63.2,"table":55,"price":504,"x":4.36,"y":4.34,"z":2.75},{"name":41443,"carat":0.4,"cut":"Very-Good","color":"G","clarity":"IF","depth":61.4,"table":54,"price":1229,"x":4.76,"y":4.79,"z":2.93},{"name":2473,"carat":0.76,"cut":"Ideal","color":"E","clarity":"VS2","depth":61.5,"table":56,"price":3192,"x":5.92,"y":5.89,"z":3.63},{"name":22363,"carat":0.31,"cut":"Premium","color":"H","clarity":"VS2","depth":61.3,"table":60,"price":628,"x":4.36,"y":4.32,"z":2.66},{"name":2615,"carat":0.72,"cut":"Ideal","color":"E","clarity":"VS2","depth":61.3,"table":57,"price":3223,"x":5.76,"y":5.79,"z":3.54},{"name":49975,"carat":0.29,"cut":"Very-Good","color":"G","clarity":"VVS2","depth":60.9,"table":57,"price":541,"x":4.28,"y":4.32,"z":2.61},{"name":26857,"carat":2.1,"cut":"Premium","color":"E","clarity":"SI2","depth":62.9,"table":59,"price":16783,"x":8.18,"y":8.13,"z":5.13},{"name":5333,"carat":1.04,"cut":"Very-Good","color":"J","clarity":"SI2","depth":63.5,"table":59,"price":3810,"x":6.37,"y":6.42,"z":4.06},{"name":52202,"carat":0.67,"cut":"Good","color":"F","clarity":"VS1","depth":59.8,"table":60.3,"price":2479,"x":5.62,"y":5.69,"z":3.38},{"name":30749,"carat":0.34,"cut":"Ideal","color":"H","clarity":"VVS1","depth":62.2,"table":54,"price":740,"x":4.48,"y":4.53,"z":2.8},{"name":28454,"carat":0.41,"cut":"Ideal","color":"G","clarity":"SI1","depth":62.2,"table":56,"price":671,"x":4.75,"y":4.77,"z":2.96},{"name":20320,"carat":1.22,"cut":"Premium","color":"F","clarity":"VS2","depth":62,"table":58,"price":8733,"x":6.89,"y":6.86,"z":4.26},{"name":5571,"carat":1.08,"cut":"Fair","color":"E","clarity":"SI2","depth":64.9,"table":60,"price":3861,"x":6.43,"y":6.39,"z":4.16},{"name":41709,"carat":0.51,"cut":"Very-Good","color":"G","clarity":"SI1","depth":62.7,"table":59,"price":1243,"x":5.07,"y":5.13,"z":3.2},{"name":33087,"carat":0.46,"cut":"Very-Good","color":"F","clarity":"SI2","depth":62.6,"table":58,"price":815,"x":4.88,"y":4.96,"z":3.08},{"name":7344,"carat":1.18,"cut":"Premium","color":"D","clarity":"SI2","depth":61.8,"table":58,"price":4211,"x":6.83,"y":6.7,"z":4.19},{"name":1949,"carat":0.72,"cut":"Ideal","color":"F","clarity":"VS1","depth":62.4,"table":56,"price":3084,"x":5.76,"y":5.72,"z":3.58},{"name":46642,"carat":0.3,"cut":"Very-Good","color":"E","clarity":"SI1","depth":62.9,"table":57,"price":526,"x":4.25,"y":4.3,"z":2.69},{"name":38126,"carat":0.3,"cut":"Ideal","color":"G","clarity":"VVS1","depth":62.3,"table":54,"price":1013,"x":4.33,"y":4.31,"z":2.69},{"name":18465,"carat":1.07,"cut":"Very-Good","color":"F","clarity":"VS1","depth":62,"table":56,"price":7513,"x":6.51,"y":6.55,"z":4.05},{"name":31404,"carat":0.3,"cut":"Ideal","color":"G","clarity":"VVS1","depth":61.9,"table":57,"price":764,"x":4.28,"y":4.31,"z":2.66},{"name":31274,"carat":0.32,"cut":"Ideal","color":"I","clarity":"VS2","depth":61.6,"table":56,"price":449,"x":4.37,"y":4.39,"z":2.7},{"name":23938,"carat":1.5,"cut":"Premium","color":"D","clarity":"SI1","depth":62.4,"table":58,"price":12069,"x":7.27,"y":7.31,"z":4.55},{"name":14586,"carat":1.05,"cut":"Premium","color":"H","clarity":"VS1","depth":60.1,"table":57,"price":5886,"x":6.62,"y":6.59,"z":3.97},{"name":29105,"carat":0.34,"cut":"Ideal","color":"H","clarity":"VS2","depth":61.4,"table":57,"price":689,"x":4.55,"y":4.48,"z":2.77},{"name":35835,"carat":0.32,"cut":"Ideal","color":"F","clarity":"IF","depth":61.9,"table":55,"price":915,"x":4.38,"y":4.44,"z":2.73},{"name":42875,"carat":0.45,"cut":"Ideal","color":"G","clarity":"VVS1","depth":61.7,"table":56,"price":1358,"x":4.96,"y":4.93,"z":3.05},{"name":23957,"carat":1.44,"cut":"Ideal","color":"G","clarity":"VS1","depth":62.6,"table":57,"price":12093,"x":7.21,"y":7.19,"z":4.51},{"name":7756,"carat":1.05,"cut":"Fair","color":"I","clarity":"VS1","depth":58.9,"table":66,"price":4281,"x":6.71,"y":6.6,"z":3.92},{"name":28871,"carat":0.32,"cut":"Premium","color":"F","clarity":"SI1","depth":59.3,"table":58,"price":684,"x":4.5,"y":4.47,"z":2.66},{"name":47900,"carat":0.54,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61.7,"table":57,"price":1914,"x":5.23,"y":5.26,"z":3.23},{"name":5586,"carat":1,"cut":"Fair","color":"F","clarity":"SI2","depth":65.5,"table":54,"price":3864,"x":6.2,"y":6.16,"z":4.05},{"name":25711,"carat":2.11,"cut":"Premium","color":"I","clarity":"SI2","depth":58.4,"table":62,"price":14615,"x":8.43,"y":8.39,"z":4.91},{"name":33428,"carat":0.32,"cut":"Ideal","color":"G","clarity":"VS1","depth":61.3,"table":55,"price":828,"x":4.46,"y":4.42,"z":2.72},{"name":23684,"carat":1.55,"cut":"Premium","color":"H","clarity":"VS2","depth":60.7,"table":59,"price":11738,"x":7.46,"y":7.5,"z":4.54},{"name":8434,"carat":1.08,"cut":"Very-Good","color":"F","clarity":"SI2","depth":62.6,"table":56,"price":4407,"x":6.55,"y":6.61,"z":4.12},{"name":21746,"carat":1,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":59.1,"table":58,"price":9815,"x":6.5,"y":6.57,"z":3.86},{"name":8729,"carat":0.27,"cut":"Ideal","color":"E","clarity":"VVS1","depth":62,"table":56,"price":586,"x":4.16,"y":4.19,"z":2.59},{"name":2088,"carat":0.79,"cut":"Premium","color":"D","clarity":"SI1","depth":61.4,"table":59,"price":3112,"x":5.89,"y":5.96,"z":3.64},{"name":13055,"carat":1.03,"cut":"Premium","color":"D","clarity":"SI1","depth":60.5,"table":61,"price":5410,"x":6.47,"y":6.43,"z":3.9},{"name":35133,"carat":0.41,"cut":"Very-Good","color":"G","clarity":"VVS2","depth":59.1,"table":60,"price":889,"x":4.84,"y":4.87,"z":2.87},{"name":31658,"carat":0.32,"cut":"Ideal","color":"E","clarity":"VS2","depth":61.4,"table":56,"price":768,"x":4.45,"y":4.41,"z":2.72},{"name":48599,"carat":0.7,"cut":"Fair","color":"I","clarity":"VS2","depth":64.4,"table":55,"price":1996,"x":5.6,"y":5.55,"z":3.59},{"name":36281,"carat":0.32,"cut":"Good","color":"G","clarity":"SI1","depth":63.5,"table":56,"price":477,"x":4.35,"y":4.38,"z":2.77},{"name":35578,"carat":0.35,"cut":"Premium","color":"F","clarity":"VS2","depth":62,"table":59,"price":906,"x":4.55,"y":4.51,"z":2.81},{"name":11700,"carat":1.29,"cut":"Very-Good","color":"J","clarity":"VS2","depth":61.3,"table":60,"price":5068,"x":6.96,"y":6.98,"z":4.27},{"name":34365,"carat":0.41,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.1,"table":56,"price":863,"x":4.8,"y":4.83,"z":2.94},{"name":29341,"carat":0.31,"cut":"Premium","color":"G","clarity":"VS2","depth":59.2,"table":60,"price":698,"x":4.47,"y":4.42,"z":2.63},{"name":2854,"carat":0.73,"cut":"Ideal","color":"G","clarity":"VS1","depth":60.2,"table":56,"price":3273,"x":5.86,"y":5.9,"z":3.54},{"name":17409,"carat":1.36,"cut":"Ideal","color":"J","clarity":"VVS2","depth":61.9,"table":56,"price":6973,"x":7.16,"y":7.13,"z":4.42},{"name":34443,"carat":0.31,"cut":"Ideal","color":"E","clarity":"VVS2","depth":61.3,"table":55,"price":864,"x":4.34,"y":4.37,"z":2.67},{"name":52563,"carat":0.7,"cut":"Ideal","color":"I","clarity":"VVS1","depth":62.3,"table":55,"price":2536,"x":5.7,"y":5.64,"z":3.53},{"name":12988,"carat":1,"cut":"Ideal","color":"E","clarity":"SI1","depth":62.3,"table":55,"price":5396,"x":6.41,"y":6.34,"z":3.97},{"name":14853,"carat":1.07,"cut":"Ideal","color":"F","clarity":"SI1","depth":62.7,"table":56,"price":5982,"x":6.47,"y":6.53,"z":4.08},{"name":940,"carat":0.9,"cut":"Fair","color":"D","clarity":"SI2","depth":66.9,"table":57,"price":2885,"x":6.02,"y":5.9,"z":3.99},{"name":26708,"carat":0.32,"cut":"Very-Good","color":"G","clarity":"VS1","depth":61.8,"table":60,"price":645,"x":4.35,"y":4.36,"z":2.69},{"name":44127,"carat":0.5,"cut":"Ideal","color":"E","clarity":"VS2","depth":62,"table":56,"price":1559,"x":5.06,"y":5.1,"z":3.15},{"name":34450,"carat":0.4,"cut":"Premium","color":"G","clarity":"SI1","depth":61.7,"table":61,"price":864,"x":4.68,"y":4.63,"z":2.87},{"name":30140,"carat":0.32,"cut":"Premium","color":"G","clarity":"VS2","depth":62.6,"table":60,"price":720,"x":4.36,"y":4.33,"z":2.72},{"name":4853,"carat":0.71,"cut":"Ideal","color":"F","clarity":"VS1","depth":61.3,"table":56,"price":3710,"x":5.69,"y":5.75,"z":3.51},{"name":47541,"carat":0.58,"cut":"Very-Good","color":"G","clarity":"VVS2","depth":62.1,"table":58,"price":1872,"x":5.35,"y":5.4,"z":3.34},{"name":12751,"carat":1,"cut":"Very-Good","color":"D","clarity":"SI1","depth":63.2,"table":59,"price":5320,"x":6.29,"y":6.4,"z":4.01},{"name":34555,"carat":0.52,"cut":"Premium","color":"F","clarity":"I1","depth":63,"table":56,"price":870,"x":5.18,"y":5.11,"z":3.24},{"name":50137,"carat":0.7,"cut":"Very-Good","color":"H","clarity":"SI1","depth":62.1,"table":59,"price":2213,"x":5.62,"y":5.66,"z":3.5},{"name":25189,"carat":2.01,"cut":"Ideal","color":"I","clarity":"SI2","depth":62.5,"table":55,"price":13777,"x":8.12,"y":8.08,"z":5.06},{"name":34915,"carat":0.34,"cut":"Ideal","color":"F","clarity":"VS2","depth":62.9,"table":55,"price":880,"x":4.48,"y":4.46,"z":2.81},{"name":26431,"carat":2,"cut":"Good","color":"E","clarity":"SI2","depth":60.1,"table":54,"price":15962,"x":8.01,"y":8.15,"z":4.86},{"name":22682,"carat":0.38,"cut":"Ideal","color":"J","clarity":"VVS2","depth":62,"table":55,"price":629,"x":4.67,"y":4.69,"z":2.9},{"name":52236,"carat":0.57,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":60,"table":61,"price":2485,"x":5.36,"y":5.44,"z":3.24},{"name":32203,"carat":0.35,"cut":"Premium","color":"E","clarity":"SI1","depth":61.1,"table":59,"price":788,"x":4.56,"y":4.5,"z":2.77},{"name":7958,"carat":1,"cut":"Very-Good","color":"E","clarity":"SI2","depth":59.8,"table":58,"price":4321,"x":6.47,"y":6.53,"z":3.89},{"name":14904,"carat":1.01,"cut":"Very-Good","color":"G","clarity":"VS2","depth":59.2,"table":59,"price":5999,"x":6.52,"y":6.59,"z":3.88},{"name":18768,"carat":1.35,"cut":"Premium","color":"H","clarity":"SI1","depth":62.4,"table":58,"price":7673,"x":7.03,"y":6.95,"z":4.36},{"name":12175,"carat":1.18,"cut":"Ideal","color":"H","clarity":"SI2","depth":61.2,"table":57,"price":5182,"x":6.81,"y":6.86,"z":4.18},{"name":13522,"carat":1.01,"cut":"Good","color":"H","clarity":"SI1","depth":60.1,"table":61,"price":5544,"x":6.5,"y":6.47,"z":3.9},{"name":40220,"carat":0.4,"cut":"Ideal","color":"G","clarity":"VVS1","depth":62.4,"table":57,"price":1123,"x":4.74,"y":4.78,"z":2.97},{"name":324,"carat":1.04,"cut":"Premium","color":"G","clarity":"I1","depth":62.2,"table":58,"price":2801,"x":6.46,"y":6.41,"z":4},{"name":2955,"carat":0.83,"cut":"Very-Good","color":"E","clarity":"SI1","depth":63.8,"table":54,"price":3295,"x":5.96,"y":6.04,"z":3.83},{"name":38930,"carat":0.36,"cut":"Very-Good","color":"E","clarity":"IF","depth":59.5,"table":57,"price":1053,"x":4.68,"y":4.73,"z":2.8},{"name":903,"carat":0.72,"cut":"Very-Good","color":"H","clarity":"VS1","depth":62.2,"table":54,"price":2877,"x":5.74,"y":5.76,"z":3.57},{"name":35534,"carat":0.3,"cut":"Premium","color":"G","clarity":"VVS1","depth":62.4,"table":59,"price":905,"x":4.31,"y":4.25,"z":2.67},{"name":48135,"carat":0.6,"cut":"Very-Good","color":"F","clarity":"VS2","depth":59.5,"table":57.8,"price":1940,"x":5.48,"y":5.56,"z":3.28},{"name":15376,"carat":0.4,"cut":"Ideal","color":"J","clarity":"VS1","depth":61.3,"table":56,"price":606,"x":4.77,"y":4.79,"z":2.93},{"name":15711,"carat":0.24,"cut":"Very-Good","color":"F","clarity":"VVS1","depth":60.4,"table":56,"price":608,"x":4.05,"y":4.07,"z":2.45},{"name":49465,"carat":1,"cut":"Fair","color":"I","clarity":"I1","depth":65.4,"table":57,"price":2112,"x":6.28,"y":6.2,"z":4.08},{"name":25591,"carat":2,"cut":"Fair","color":"H","clarity":"SI1","depth":65.1,"table":56,"price":14430,"x":7.86,"y":7.77,"z":5.09},{"name":27807,"carat":0.3,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61.9,"table":57,"price":650,"x":4.3,"y":4.33,"z":2.66},{"name":45354,"carat":0.55,"cut":"Premium","color":"E","clarity":"VS2","depth":59.1,"table":62,"price":1664,"x":5.37,"y":5.32,"z":3.16},{"name":39716,"carat":0.5,"cut":"Good","color":"E","clarity":"SI1","depth":64,"table":56,"price":1090,"x":5.03,"y":4.97,"z":3.2},{"name":42245,"carat":0.52,"cut":"Ideal","color":"D","clarity":"SI2","depth":61.7,"table":55,"price":1292,"x":5.17,"y":5.2,"z":3.2},{"name":3519,"carat":0.81,"cut":"Ideal","color":"E","clarity":"SI1","depth":62.3,"table":57,"price":3404,"x":5.95,"y":5.99,"z":3.72},{"name":32008,"carat":0.37,"cut":"Ideal","color":"E","clarity":"SI1","depth":61.4,"table":56,"price":777,"x":4.65,"y":4.6,"z":2.84},{"name":15982,"carat":1.02,"cut":"Premium","color":"E","clarity":"VS2","depth":60.4,"table":58,"price":6397,"x":6.51,"y":6.47,"z":3.92},{"name":2392,"carat":0.32,"cut":"Ideal","color":"E","clarity":"SI1","depth":61.8,"table":55,"price":561,"x":4.42,"y":4.45,"z":2.74},{"name":5981,"carat":1.05,"cut":"Premium","color":"E","clarity":"SI2","depth":60.9,"table":61,"price":3951,"x":6.61,"y":6.55,"z":4.01},{"name":37131,"carat":0.37,"cut":"Premium","color":"E","clarity":"VVS2","depth":59.6,"table":60,"price":971,"x":4.75,"y":4.68,"z":2.81},{"name":19201,"carat":1.56,"cut":"Premium","color":"F","clarity":"SI2","depth":58.8,"table":59,"price":7950,"x":7.76,"y":7.61,"z":4.52},{"name":39933,"carat":0.3,"cut":"Premium","color":"H","clarity":"VS1","depth":62.1,"table":59,"price":491,"x":4.25,"y":4.28,"z":2.65},{"name":41555,"carat":0.5,"cut":"Very-Good","color":"G","clarity":"SI1","depth":62.1,"table":59,"price":1237,"x":5.09,"y":5.12,"z":3.17},{"name":31100,"carat":0.3,"cut":"Ideal","color":"G","clarity":"VVS1","depth":62.6,"table":55,"price":753,"x":4.27,"y":4.32,"z":2.69},{"name":50763,"carat":0.75,"cut":"Very-Good","color":"I","clarity":"SI1","depth":63.7,"table":56,"price":2300,"x":5.73,"y":5.77,"z":3.66},{"name":53179,"carat":0.71,"cut":"Ideal","color":"E","clarity":"VS2","depth":61.8,"table":57,"price":2630,"x":5.7,"y":5.73,"z":3.53},{"name":36142,"carat":0.33,"cut":"Premium","color":"E","clarity":"VS2","depth":61,"table":60,"price":928,"x":4.46,"y":4.43,"z":2.71},{"name":45935,"carat":0.51,"cut":"Very-Good","color":"D","clarity":"VS2","depth":63.2,"table":56,"price":1722,"x":5.04,"y":5.08,"z":3.2},{"name":39645,"carat":0.41,"cut":"Ideal","color":"F","clarity":"VS2","depth":62.4,"table":58,"price":1085,"x":4.77,"y":4.75,"z":2.97},{"name":24054,"carat":0.31,"cut":"Ideal","color":"I","clarity":"IF","depth":61.7,"table":55,"price":635,"x":4.36,"y":4.39,"z":2.7},{"name":6604,"carat":1,"cut":"Good","color":"F","clarity":"SI2","depth":62.7,"table":57,"price":4081,"x":6.29,"y":6.34,"z":3.96},{"name":35952,"carat":0.3,"cut":"Ideal","color":"F","clarity":"SI1","depth":61.9,"table":56,"price":475,"x":4.29,"y":4.33,"z":2.67},{"name":137,"carat":0.71,"cut":"Very-Good","color":"F","clarity":"VS1","depth":60.1,"table":62,"price":2765,"x":5.74,"y":5.77,"z":3.46},{"name":51854,"carat":0.7,"cut":"Premium","color":"D","clarity":"SI2","depth":59.5,"table":60,"price":2423,"x":5.78,"y":5.73,"z":3.43},{"name":26187,"carat":1.51,"cut":"Premium","color":"D","clarity":"VS2","depth":61.7,"table":58,"price":15531,"x":7.33,"y":7.29,"z":4.51},{"name":53325,"carat":0.78,"cut":"Ideal","color":"I","clarity":"VS2","depth":59.8,"table":58,"price":2652,"x":5.98,"y":6.02,"z":3.59},{"name":22143,"carat":1.01,"cut":"Good","color":"G","clarity":"VS2","depth":63.6,"table":56,"price":10181,"x":6.31,"y":6.24,"z":3.99},{"name":28418,"carat":0.43,"cut":"Good","color":"E","clarity":"SI2","depth":63.6,"table":55,"price":669,"x":4.8,"y":4.83,"z":3.06},{"name":30531,"carat":0.38,"cut":"Premium","color":"D","clarity":"SI1","depth":62.2,"table":58,"price":733,"x":4.57,"y":4.63,"z":2.86},{"name":32824,"carat":0.34,"cut":"Ideal","color":"D","clarity":"VS2","depth":62,"table":55,"price":805,"x":4.45,"y":4.49,"z":2.77},{"name":38499,"carat":0.42,"cut":"Ideal","color":"G","clarity":"VVS2","depth":62.2,"table":56,"price":1031,"x":4.77,"y":4.81,"z":2.98},{"name":45547,"carat":0.51,"cut":"Premium","color":"D","clarity":"SI1","depth":60.3,"table":59,"price":1687,"x":5.22,"y":5.2,"z":3.14},{"name":46473,"carat":0.53,"cut":"Very-Good","color":"E","clarity":"VS1","depth":63,"table":56,"price":1776,"x":5.13,"y":5.16,"z":3.24},{"name":16413,"carat":1,"cut":"Very-Good","color":"G","clarity":"VS1","depth":63.2,"table":58,"price":6552,"x":6.32,"y":6.27,"z":3.98},{"name":21297,"carat":1.5,"cut":"Very-Good","color":"E","clarity":"SI2","depth":63.5,"table":59,"price":9450,"x":7.28,"y":7.25,"z":4.61},{"name":17233,"carat":1.55,"cut":"Premium","color":"J","clarity":"SI2","depth":62.6,"table":57,"price":6890,"x":7.37,"y":7.32,"z":4.6},{"name":13247,"carat":1.2,"cut":"Premium","color":"I","clarity":"VS2","depth":62.1,"table":59,"price":5474,"x":6.77,"y":6.72,"z":4.19},{"name":45554,"carat":0.51,"cut":"Premium","color":"D","clarity":"SI1","depth":60.1,"table":60,"price":1687,"x":5.18,"y":5.14,"z":3.1},{"name":32388,"carat":0.32,"cut":"Very-Good","color":"D","clarity":"VVS2","depth":60.1,"table":58,"price":791,"x":4.41,"y":4.44,"z":2.66},{"name":11905,"carat":1,"cut":"Very-Good","color":"H","clarity":"VS2","depth":62.9,"table":57,"price":5121,"x":6.31,"y":6.35,"z":3.98},{"name":43427,"carat":0.53,"cut":"Very-Good","color":"E","clarity":"SI1","depth":59.7,"table":59,"price":1415,"x":5.27,"y":5.29,"z":3.15},{"name":32366,"carat":0.32,"cut":"Ideal","color":"E","clarity":"VVS2","depth":61.6,"table":55,"price":790,"x":4.42,"y":4.45,"z":2.73},{"name":3899,"carat":0.89,"cut":"Premium","color":"H","clarity":"VS1","depth":60.5,"table":59,"price":3489,"x":6.22,"y":6.17,"z":3.75},{"name":52850,"carat":0.7,"cut":"Premium","color":"E","clarity":"SI1","depth":61,"table":56,"price":2576,"x":5.75,"y":5.69,"z":3.49},{"name":19587,"carat":1.51,"cut":"Very-Good","color":"I","clarity":"SI1","depth":62.8,"table":59,"price":8214,"x":7.17,"y":7.26,"z":4.53},{"name":35213,"carat":0.35,"cut":"Very-Good","color":"G","clarity":"IF","depth":62.1,"table":54,"price":892,"x":4.53,"y":4.57,"z":2.82},{"name":25268,"carat":2.28,"cut":"Ideal","color":"G","clarity":"SI2","depth":61.6,"table":57,"price":13907,"x":8.44,"y":8.37,"z":5.18},{"name":22737,"carat":1.15,"cut":"Ideal","color":"F","clarity":"VVS2","depth":62.7,"table":57,"price":10757,"x":6.69,"y":6.65,"z":4.18},{"name":15167,"carat":1.44,"cut":"Ideal","color":"G","clarity":"I1","depth":63.2,"table":55,"price":6096,"x":7.21,"y":7.18,"z":4.54},{"name":44124,"carat":0.5,"cut":"Premium","color":"E","clarity":"VS2","depth":62,"table":58,"price":1559,"x":5.07,"y":5.09,"z":3.15},{"name":8245,"carat":1.07,"cut":"Premium","color":"H","clarity":"VS2","depth":60.6,"table":60,"price":4374,"x":6.66,"y":6.63,"z":4.03},{"name":30401,"carat":0.32,"cut":"Premium","color":"H","clarity":"VVS1","depth":61.4,"table":58,"price":730,"x":4.37,"y":4.42,"z":2.7},{"name":11998,"carat":1.06,"cut":"Ideal","color":"E","clarity":"SI2","depth":60.9,"table":57,"price":5147,"x":6.58,"y":6.62,"z":4.02},{"name":16655,"carat":1.21,"cut":"Ideal","color":"F","clarity":"SI1","depth":61.1,"table":55,"price":6659,"x":6.87,"y":6.85,"z":4.19},{"name":37749,"carat":0.43,"cut":"Very-Good","color":"I","clarity":"IF","depth":61,"table":56,"price":998,"x":4.9,"y":4.93,"z":3},{"name":9074,"carat":1.14,"cut":"Premium","color":"D","clarity":"SI2","depth":62.6,"table":58,"price":4520,"x":6.64,"y":6.58,"z":4.14},{"name":46353,"carat":0.57,"cut":"Ideal","color":"F","clarity":"SI1","depth":61.9,"table":56,"price":1759,"x":5.33,"y":5.37,"z":3.31},{"name":14516,"carat":1,"cut":"Good","color":"G","clarity":"VS1","depth":64.2,"table":61,"price":5863,"x":6.23,"y":6.29,"z":4.02},{"name":12239,"carat":1.04,"cut":"Ideal","color":"I","clarity":"VS1","depth":62.4,"table":57,"price":5199,"x":6.44,"y":6.48,"z":4.03},{"name":37788,"carat":0.5,"cut":"Good","color":"E","clarity":"SI2","depth":63.2,"table":61,"price":1000,"x":5.02,"y":5.05,"z":3.18},{"name":42551,"carat":0.52,"cut":"Very-Good","color":"F","clarity":"SI1","depth":61,"table":59,"price":1326,"x":5.18,"y":5.21,"z":3.17},{"name":22835,"carat":1.5,"cut":"Good","color":"E","clarity":"SI1","depth":61.3,"table":65,"price":10868,"x":7.17,"y":7.23,"z":4.41},{"name":46144,"carat":0.5,"cut":"Premium","color":"E","clarity":"VS2","depth":61.3,"table":59,"price":1746,"x":5.1,"y":5.05,"z":3.11},{"name":42806,"carat":0.59,"cut":"Ideal","color":"J","clarity":"VS2","depth":60.8,"table":57,"price":1352,"x":5.47,"y":5.42,"z":3.31},{"name":12802,"carat":0.7,"cut":"Ideal","color":"E","clarity":"VVS1","depth":61.8,"table":55,"price":5338,"x":5.69,"y":5.73,"z":3.53},{"name":302,"carat":0.83,"cut":"Very-Good","color":"E","clarity":"SI2","depth":58,"table":62,"price":2799,"x":6.19,"y":6.25,"z":3.61},{"name":2664,"carat":0.72,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.1,"table":57,"price":3235,"x":5.73,"y":5.76,"z":3.57},{"name":5843,"carat":1,"cut":"Premium","color":"H","clarity":"SI2","depth":60.2,"table":61,"price":3920,"x":6.48,"y":6.44,"z":3.89},{"name":2251,"carat":1.03,"cut":"Premium","color":"J","clarity":"SI2","depth":62.2,"table":59,"price":3149,"x":6.42,"y":6.4,"z":3.99},{"name":12178,"carat":1.2,"cut":"Very-Good","color":"G","clarity":"SI2","depth":62.1,"table":56,"price":5183,"x":6.79,"y":6.87,"z":4.24},{"name":13593,"carat":1.01,"cut":"Very-Good","color":"F","clarity":"VS2","depth":61,"table":59,"price":5560,"x":6.39,"y":6.46,"z":3.92},{"name":2337,"carat":1.09,"cut":"Fair","color":"F","clarity":"SI2","depth":66.3,"table":56,"price":3170,"x":6.47,"y":6.39,"z":4.27},{"name":8570,"carat":1.2,"cut":"Premium","color":"J","clarity":"VS2","depth":58,"table":59,"price":4435,"x":6.98,"y":6.92,"z":4.03},{"name":27867,"carat":0.3,"cut":"Very-Good","color":"E","clarity":"VS1","depth":60.2,"table":57,"price":653,"x":4.37,"y":4.3,"z":2.61},{"name":15184,"carat":1,"cut":"Good","color":"F","clarity":"VS2","depth":63.8,"table":58,"price":6098,"x":6.28,"y":6.32,"z":4.02},{"name":50207,"carat":0.58,"cut":"Ideal","color":"F","clarity":"VS1","depth":61.9,"table":56,"price":2227,"x":5.36,"y":5.33,"z":3.31},{"name":32622,"carat":0.3,"cut":"Ideal","color":"I","clarity":"VS1","depth":62,"table":57,"price":457,"x":4.26,"y":4.29,"z":2.65},{"name":34268,"carat":0.29,"cut":"Very-Good","color":"H","clarity":"VVS2","depth":62.2,"table":54,"price":466,"x":4.23,"y":4.26,"z":2.64},{"name":18789,"carat":1.08,"cut":"Premium","color":"D","clarity":"VS2","depth":61.2,"table":60,"price":7683,"x":6.61,"y":6.63,"z":4.05},{"name":22426,"carat":1.5,"cut":"Fair","color":"F","clarity":"SI1","depth":64.3,"table":58,"price":10450,"x":7.04,"y":7.09,"z":4.54},{"name":1449,"carat":0.72,"cut":"Ideal","color":"E","clarity":"SI1","depth":61,"table":56,"price":2976,"x":5.82,"y":5.85,"z":3.56},{"name":25619,"carat":1.5,"cut":"Premium","color":"F","clarity":"VS2","depth":60.3,"table":58,"price":14486,"x":7.47,"y":7.39,"z":4.48},{"name":48417,"carat":0.61,"cut":"Very-Good","color":"F","clarity":"VS2","depth":62.9,"table":58,"price":1971,"x":5.33,"y":5.39,"z":3.37},{"name":48684,"carat":0.53,"cut":"Ideal","color":"G","clarity":"VVS1","depth":61.2,"table":55,"price":2005,"x":5.19,"y":5.23,"z":3.19},{"name":35461,"carat":0.33,"cut":"Premium","color":"F","clarity":"VVS2","depth":62.3,"table":60,"price":901,"x":4.43,"y":4.4,"z":2.75},{"name":16657,"carat":1.06,"cut":"Ideal","color":"G","clarity":"VS2","depth":62.2,"table":56,"price":6660,"x":6.51,"y":6.54,"z":4.06},{"name":46366,"carat":0.54,"cut":"Premium","color":"E","clarity":"VS2","depth":60.7,"table":56,"price":1760,"x":5.32,"y":5.29,"z":3.22},{"name":23433,"carat":1.25,"cut":"Ideal","color":"E","clarity":"VS2","depth":60.7,"table":56,"price":11422,"x":6.97,"y":6.99,"z":4.24},{"name":9968,"carat":1,"cut":"Premium","color":"H","clarity":"SI1","depth":61.5,"table":58,"price":4702,"x":6.37,"y":6.45,"z":3.94},{"name":4346,"carat":0.78,"cut":"Ideal","color":"E","clarity":"VS2","depth":61.7,"table":55,"price":3601,"x":5.92,"y":6,"z":3.68},{"name":33198,"carat":0.3,"cut":"Ideal","color":"G","clarity":"VVS2","depth":62.2,"table":54,"price":819,"x":4.33,"y":4.29,"z":2.68},{"name":13886,"carat":1.03,"cut":"Premium","color":"D","clarity":"SI1","depth":63,"table":59,"price":5653,"x":6.44,"y":6.39,"z":4.04},{"name":45744,"carat":0.52,"cut":"Very-Good","color":"D","clarity":"VS2","depth":59.4,"table":61,"price":1701,"x":5.23,"y":5.24,"z":3.11},{"name":27368,"carat":0.28,"cut":"Premium","color":"E","clarity":"VVS1","depth":61.3,"table":60,"price":646,"x":4.18,"y":4.21,"z":2.57},{"name":29516,"carat":0.39,"cut":"Very-Good","color":"G","clarity":"SI1","depth":58.9,"table":61,"price":703,"x":4.74,"y":4.76,"z":2.8},{"name":14540,"carat":1.21,"cut":"Very-Good","color":"H","clarity":"SI1","depth":63.1,"table":60,"price":5871,"x":6.74,"y":6.69,"z":4.24},{"name":11338,"carat":1.01,"cut":"Premium","color":"F","clarity":"SI1","depth":59.5,"table":62,"price":4989,"x":6.53,"y":6.45,"z":3.86},{"name":48507,"carat":0.7,"cut":"Premium","color":"H","clarity":"SI2","depth":61.7,"table":58,"price":1982,"x":5.72,"y":5.69,"z":3.52},{"name":38406,"carat":0.35,"cut":"Premium","color":"H","clarity":"VVS1","depth":61.2,"table":60,"price":1024,"x":4.55,"y":4.5,"z":2.77},{"name":29098,"carat":0.36,"cut":"Premium","color":"D","clarity":"SI2","depth":61.5,"table":60,"price":689,"x":4.6,"y":4.54,"z":2.81},{"name":39110,"carat":0.41,"cut":"Ideal","color":"H","clarity":"VS1","depth":61.9,"table":56,"price":1061,"x":4.78,"y":4.75,"z":2.95},{"name":47525,"carat":0.54,"cut":"Ideal","color":"G","clarity":"VS1","depth":61.4,"table":55,"price":1868,"x":5.26,"y":5.3,"z":3.24},{"name":14780,"carat":1.2,"cut":"Premium","color":"G","clarity":"SI1","depth":61.5,"table":61,"price":5947,"x":6.84,"y":6.78,"z":4.19},{"name":7968,"carat":1.16,"cut":"Very-Good","color":"J","clarity":"VS2","depth":63.7,"table":56,"price":4323,"x":6.63,"y":6.68,"z":4.24},{"name":30555,"carat":0.31,"cut":"Ideal","color":"D","clarity":"VS2","depth":62.3,"table":55,"price":734,"x":4.33,"y":4.37,"z":2.71},{"name":3705,"carat":1,"cut":"Ideal","color":"E","clarity":"SI2","depth":62.9,"table":56,"price":3450,"x":6.32,"y":6.3,"z":3.97},{"name":25884,"carat":2.01,"cut":"Good","color":"I","clarity":"SI1","depth":58.5,"table":62,"price":14998,"x":8.24,"y":8.31,"z":4.84},{"name":11447,"carat":1.01,"cut":"Premium","color":"G","clarity":"SI1","depth":60.6,"table":57,"price":5006,"x":6.52,"y":6.49,"z":3.94},{"name":40236,"carat":0.44,"cut":"Ideal","color":"H","clarity":"VVS1","depth":61.1,"table":57,"price":1124,"x":4.87,"y":4.92,"z":2.99},{"name":38630,"carat":0.31,"cut":"Very-Good","color":"H","clarity":"VS2","depth":62.5,"table":54,"price":489,"x":4.35,"y":4.39,"z":2.73},{"name":8467,"carat":1.03,"cut":"Good","color":"F","clarity":"SI2","depth":59,"table":59,"price":4414,"x":6.55,"y":6.6,"z":3.88},{"name":33011,"carat":0.31,"cut":"Good","color":"E","clarity":"IF","depth":64.2,"table":60,"price":813,"x":4.22,"y":4.28,"z":2.73},{"name":43649,"carat":0.51,"cut":"Good","color":"E","clarity":"SI1","depth":63.6,"table":58,"price":1434,"x":5,"y":4.97,"z":3.17},{"name":27151,"carat":2.04,"cut":"Premium","color":"E","clarity":"SI2","depth":58.3,"table":58,"price":17379,"x":8.35,"y":8.31,"z":4.86},{"name":5855,"carat":1,"cut":"Premium","color":"F","clarity":"SI2","depth":61.5,"table":58,"price":3920,"x":6.41,"y":6.38,"z":3.93},{"name":22842,"carat":1.64,"cut":"Premium","color":"H","clarity":"SI1","depth":59.2,"table":58,"price":10874,"x":7.76,"y":7.68,"z":4.57},{"name":37890,"carat":0.36,"cut":"Ideal","color":"G","clarity":"IF","depth":62,"table":57,"price":1006,"x":4.54,"y":4.58,"z":2.82},{"name":37874,"carat":0.39,"cut":"Ideal","color":"E","clarity":"VS1","depth":62.7,"table":53.6,"price":1004,"x":4.67,"y":4.69,"z":2.93},{"name":39457,"carat":0.39,"cut":"Ideal","color":"G","clarity":"VS1","depth":62.6,"table":55,"price":1077,"x":4.69,"y":4.66,"z":2.93},{"name":41002,"carat":0.43,"cut":"Ideal","color":"G","clarity":"VVS1","depth":61.8,"table":55,"price":1183,"x":4.87,"y":4.9,"z":3.02},{"name":11878,"carat":1.25,"cut":"Good","color":"J","clarity":"SI1","depth":63.6,"table":57,"price":5110,"x":6.86,"y":6.81,"z":4.35},{"name":45647,"carat":0.25,"cut":"Ideal","color":"H","clarity":"VVS1","depth":60.2,"table":56,"price":525,"x":4.1,"y":4.11,"z":2.47},{"name":18406,"carat":1.32,"cut":"Ideal","color":"I","clarity":"VS1","depth":61.2,"table":57,"price":7480,"x":7.06,"y":7.12,"z":4.34},{"name":31880,"carat":0.3,"cut":"Ideal","color":"H","clarity":"VVS2","depth":62.8,"table":57,"price":776,"x":4.25,"y":4.22,"z":2.66},{"name":23734,"carat":1.52,"cut":"Very-Good","color":"F","clarity":"SI1","depth":61.4,"table":59,"price":11776,"x":7.39,"y":7.46,"z":4.56},{"name":24975,"carat":2.04,"cut":"Premium","color":"J","clarity":"VS2","depth":61.4,"table":59,"price":13477,"x":8.04,"y":8.14,"z":4.97},{"name":51931,"carat":0.72,"cut":"Very-Good","color":"F","clarity":"SI1","depth":62.6,"table":55,"price":2440,"x":5.71,"y":5.76,"z":3.59},{"name":20742,"carat":1.55,"cut":"Ideal","color":"G","clarity":"SI2","depth":60.5,"table":60,"price":8981,"x":7.46,"y":7.49,"z":4.52},{"name":5324,"carat":0.9,"cut":"Fair","color":"G","clarity":"VS1","depth":65.7,"table":58,"price":3806,"x":6.02,"y":5.97,"z":3.94},{"name":905,"carat":0.74,"cut":"Ideal","color":"G","clarity":"VS2","depth":62.3,"table":55,"price":2877,"x":5.8,"y":5.83,"z":3.62},{"name":37676,"carat":0.7,"cut":"Fair","color":"F","clarity":"I1","depth":65.4,"table":59,"price":992,"x":5.6,"y":5.49,"z":3.63},{"name":35199,"carat":0.43,"cut":"Good","color":"G","clarity":"VS2","depth":61.8,"table":60.7,"price":891,"x":4.8,"y":4.84,"z":2.99},{"name":27971,"carat":0.3,"cut":"Premium","color":"E","clarity":"VS2","depth":62,"table":59,"price":658,"x":4.27,"y":4.31,"z":2.66},{"name":22375,"carat":0.31,"cut":"Ideal","color":"H","clarity":"VS2","depth":63,"table":57,"price":628,"x":4.34,"y":4.32,"z":2.73},{"name":52787,"carat":0.72,"cut":"Premium","color":"D","clarity":"SI1","depth":63,"table":57,"price":2567,"x":5.74,"y":5.69,"z":3.6},{"name":17958,"carat":1.01,"cut":"Very-Good","color":"F","clarity":"VS2","depth":62.8,"table":57,"price":7258,"x":6.34,"y":6.44,"z":4.01},{"name":34836,"carat":0.3,"cut":"Premium","color":"H","clarity":"VVS1","depth":62,"table":59,"price":878,"x":4.29,"y":4.26,"z":2.65},{"name":34114,"carat":0.35,"cut":"Ideal","color":"G","clarity":"VVS1","depth":61.8,"table":54.5,"price":853,"x":4.54,"y":4.58,"z":2.82},{"name":25777,"carat":2.01,"cut":"Good","color":"G","clarity":"SI2","depth":63,"table":60,"price":14745,"x":7.92,"y":7.99,"z":5.01},{"name":27538,"carat":2.01,"cut":"Ideal","color":"H","clarity":"SI1","depth":62.1,"table":55,"price":18295,"x":8.12,"y":8.07,"z":5.03},{"name":23409,"carat":2,"cut":"Good","color":"I","clarity":"SI2","depth":64.2,"table":52,"price":11400,"x":7.91,"y":7.88,"z":5.07},{"name":32430,"carat":0.33,"cut":"Ideal","color":"E","clarity":"VS2","depth":61.7,"table":55,"price":792,"x":4.45,"y":4.47,"z":2.75},{"name":22801,"carat":1.52,"cut":"Premium","color":"I","clarity":"VVS2","depth":61.6,"table":58,"price":10824,"x":7.37,"y":7.41,"z":4.55},{"name":33937,"carat":0.3,"cut":"Ideal","color":"J","clarity":"VVS1","depth":60.4,"table":57,"price":464,"x":4.36,"y":4.38,"z":2.64},{"name":2082,"carat":1.01,"cut":"Good","color":"H","clarity":"I1","depth":63.2,"table":58,"price":3110,"x":6.33,"y":6.39,"z":4.02},{"name":3478,"carat":1.01,"cut":"Premium","color":"H","clarity":"SI2","depth":60.9,"table":59,"price":3394,"x":6.42,"y":6.35,"z":3.89},{"name":11382,"carat":0.34,"cut":"Ideal","color":"H","clarity":"VS1","depth":62.5,"table":57,"price":596,"x":4.43,"y":4.46,"z":2.78},{"name":50658,"carat":0.31,"cut":"Very-Good","color":"E","clarity":"SI1","depth":62,"table":58,"price":544,"x":4.3,"y":4.35,"z":2.68},{"name":36357,"carat":0.34,"cut":"Very-Good","color":"F","clarity":"VVS1","depth":61,"table":56,"price":939,"x":4.52,"y":4.53,"z":2.76},{"name":51116,"carat":0.7,"cut":"Very-Good","color":"G","clarity":"VS2","depth":63.4,"table":58,"price":2338,"x":5.63,"y":5.57,"z":3.55},{"name":43034,"carat":0.5,"cut":"Good","color":"D","clarity":"SI1","depth":61.1,"table":64,"price":1374,"x":5.05,"y":5.07,"z":3.09},{"name":13135,"carat":1.11,"cut":"Premium","color":"H","clarity":"SI1","depth":61.1,"table":60,"price":5433,"x":6.68,"y":6.62,"z":4.06},{"name":10922,"carat":1.2,"cut":"Very-Good","color":"J","clarity":"SI1","depth":61.3,"table":59,"price":4891,"x":6.83,"y":6.9,"z":4.21},{"name":28822,"carat":0.41,"cut":"Very-Good","color":"H","clarity":"SI1","depth":62.6,"table":59,"price":683,"x":4.72,"y":4.77,"z":2.97},{"name":3106,"carat":0.72,"cut":"Ideal","color":"D","clarity":"SI1","depth":62.2,"table":56,"price":3322,"x":5.77,"y":5.74,"z":3.58},{"name":31819,"carat":0.3,"cut":"Ideal","color":"E","clarity":"VS1","depth":62.2,"table":54,"price":775,"x":4.28,"y":4.3,"z":2.67},{"name":14218,"carat":1.23,"cut":"Ideal","color":"J","clarity":"VS2","depth":61.7,"table":57,"price":5763,"x":6.87,"y":6.8,"z":4.22},{"name":50596,"carat":0.71,"cut":"Good","color":"I","clarity":"VVS2","depth":63.7,"table":56,"price":2283,"x":5.68,"y":5.63,"z":3.6},{"name":46694,"carat":0.56,"cut":"Ideal","color":"E","clarity":"VS1","depth":60.8,"table":55,"price":1791,"x":5.37,"y":5.32,"z":3.25},{"name":11156,"carat":1.21,"cut":"Very-Good","color":"H","clarity":"SI1","depth":63.5,"table":58,"price":4944,"x":6.73,"y":6.63,"z":4.24},{"name":46259,"carat":0.54,"cut":"Ideal","color":"G","clarity":"VS1","depth":61.3,"table":57,"price":1754,"x":5.25,"y":5.28,"z":3.23},{"name":11307,"carat":1.09,"cut":"Ideal","color":"F","clarity":"SI2","depth":61.2,"table":57,"price":4981,"x":6.64,"y":6.6,"z":4.05},{"name":20502,"carat":1.66,"cut":"Very-Good","color":"H","clarity":"SI1","depth":63.3,"table":59,"price":8831,"x":7.48,"y":7.45,"z":4.72},{"name":14963,"carat":1.21,"cut":"Premium","color":"H","clarity":"SI1","depth":59.5,"table":58,"price":6025,"x":7.02,"y":6.96,"z":4.16},{"name":48215,"carat":0.57,"cut":"Ideal","color":"H","clarity":"VVS1","depth":60.9,"table":56,"price":1949,"x":5.36,"y":5.38,"z":3.27},{"name":52469,"carat":0.8,"cut":"Ideal","color":"G","clarity":"SI2","depth":62,"table":56,"price":2517,"x":5.98,"y":5.92,"z":3.69},{"name":27892,"carat":0.32,"cut":"Ideal","color":"I","clarity":"IF","depth":62.1,"table":54,"price":655,"x":4.39,"y":4.43,"z":2.74},{"name":37944,"carat":0.33,"cut":"Very-Good","color":"H","clarity":"VS2","depth":58.8,"table":62,"price":486,"x":4.49,"y":4.53,"z":2.65},{"name":39931,"carat":0.35,"cut":"Very-Good","color":"I","clarity":"VS2","depth":61.7,"table":57,"price":491,"x":4.52,"y":4.56,"z":2.8},{"name":2695,"carat":0.9,"cut":"Good","color":"G","clarity":"SI2","depth":63.8,"table":59,"price":3246,"x":6.05,"y":6.02,"z":3.85},{"name":21323,"carat":1.35,"cut":"Premium","color":"G","clarity":"VS2","depth":62.8,"table":59,"price":9471,"x":7.04,"y":7.01,"z":4.41},{"name":21796,"carat":1,"cut":"Very-Good","color":"F","clarity":"VVS1","depth":61.1,"table":57,"price":9870,"x":6.36,"y":6.51,"z":3.93},{"name":33669,"carat":0.34,"cut":"Ideal","color":"E","clarity":"VVS2","depth":62.3,"table":57,"price":835,"x":4.44,"y":4.48,"z":2.78},{"name":42502,"carat":0.57,"cut":"Premium","color":"E","clarity":"SI2","depth":60.7,"table":57,"price":1320,"x":5.42,"y":5.35,"z":3.27},{"name":7634,"carat":1.11,"cut":"Premium","color":"J","clarity":"VS2","depth":62.6,"table":59,"price":4265,"x":6.6,"y":6.56,"z":4.12},{"name":43833,"carat":0.59,"cut":"Very-Good","color":"I","clarity":"VS2","depth":60.3,"table":59,"price":1445,"x":5.41,"y":5.43,"z":3.27},{"name":15310,"carat":1.1,"cut":"Ideal","color":"F","clarity":"SI1","depth":61.4,"table":55,"price":6146,"x":6.65,"y":6.68,"z":4.09},{"name":32268,"carat":0.3,"cut":"Ideal","color":"E","clarity":"VVS2","depth":61.7,"table":55,"price":789,"x":4.28,"y":4.31,"z":2.65},{"name":2373,"carat":0.32,"cut":"Ideal","color":"G","clarity":"VS2","depth":62,"table":57,"price":561,"x":4.39,"y":4.41,"z":2.73},{"name":35160,"carat":0.32,"cut":"Premium","color":"G","clarity":"IF","depth":61,"table":59,"price":891,"x":4.38,"y":4.41,"z":2.68},{"name":5039,"carat":0.9,"cut":"Good","color":"F","clarity":"VS1","depth":63.8,"table":56,"price":3750,"x":5.99,"y":5.92,"z":3.8},{"name":31680,"carat":0.26,"cut":"Ideal","color":"E","clarity":"VVS2","depth":62.3,"table":57,"price":769,"x":4.09,"y":4.06,"z":2.54},{"name":50106,"carat":0.51,"cut":"Ideal","color":"F","clarity":"VVS1","depth":60.9,"table":57,"price":2208,"x":5.16,"y":5.21,"z":3.16},{"name":10246,"carat":1.01,"cut":"Good","color":"H","clarity":"SI1","depth":63.4,"table":59,"price":4749,"x":6.28,"y":6.34,"z":4},{"name":13452,"carat":1.03,"cut":"Premium","color":"H","clarity":"VS1","depth":62,"table":59,"price":5523,"x":6.45,"y":6.48,"z":4.01},{"name":29000,"carat":0.34,"cut":"Ideal","color":"F","clarity":"VS2","depth":62.6,"table":54,"price":686,"x":4.46,"y":4.48,"z":2.8},{"name":14240,"carat":1.09,"cut":"Ideal","color":"F","clarity":"SI1","depth":62,"table":56,"price":5768,"x":6.61,"y":6.56,"z":4.08},{"name":48404,"carat":0.64,"cut":"Very-Good","color":"D","clarity":"SI1","depth":62.3,"table":58,"price":1969,"x":5.49,"y":5.53,"z":3.43},{"name":23822,"carat":2.08,"cut":"Ideal","color":"I","clarity":"SI2","depth":62,"table":56,"price":11886,"x":8.21,"y":8.1,"z":5.06},{"name":5353,"carat":0.74,"cut":"Ideal","color":"D","clarity":"VS1","depth":61.7,"table":55,"price":3813,"x":5.79,"y":5.85,"z":3.59},{"name":16160,"carat":1.5,"cut":"Premium","color":"H","clarity":"SI2","depth":62.1,"table":58,"price":6458,"x":7.31,"y":7.21,"z":4.51},{"name":28516,"carat":0.32,"cut":"Ideal","color":"I","clarity":"IF","depth":60.8,"table":54,"price":673,"x":4.44,"y":4.47,"z":2.71},{"name":42134,"carat":0.5,"cut":"Premium","color":"D","clarity":"SI1","depth":61.3,"table":60,"price":1279,"x":5.15,"y":5.1,"z":3.14},{"name":6813,"carat":1.01,"cut":"Fair","color":"E","clarity":"SI2","depth":55.2,"table":65,"price":4118,"x":6.78,"y":6.67,"z":3.71},{"name":16962,"carat":1.12,"cut":"Ideal","color":"G","clarity":"VS2","depth":62,"table":56,"price":6774,"x":6.69,"y":6.64,"z":4.13},{"name":13956,"carat":1.16,"cut":"Very-Good","color":"G","clarity":"SI1","depth":60.7,"table":59,"price":5678,"x":6.74,"y":6.87,"z":4.13},{"name":16756,"carat":1.45,"cut":"Very-Good","color":"J","clarity":"VS2","depth":62.8,"table":57,"price":6671,"x":7.14,"y":7.17,"z":4.49},{"name":37782,"carat":0.38,"cut":"Very-Good","color":"E","clarity":"VS1","depth":61.5,"table":58,"price":1000,"x":4.64,"y":4.69,"z":2.87},{"name":47332,"carat":0.23,"cut":"Very-Good","color":"E","clarity":"VVS1","depth":61.3,"table":59,"price":530,"x":3.93,"y":3.97,"z":2.42},{"name":7328,"carat":0.9,"cut":"Premium","color":"E","clarity":"SI1","depth":61.9,"table":58,"price":4209,"x":6.17,"y":6.1,"z":3.8},{"name":31834,"carat":0.34,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61.9,"table":57,"price":775,"x":4.44,"y":4.48,"z":2.76},{"name":66,"carat":0.28,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61.4,"table":56,"price":553,"x":4.19,"y":4.22,"z":2.58},{"name":21826,"carat":1.26,"cut":"Premium","color":"F","clarity":"VS1","depth":62.7,"table":58,"price":9896,"x":6.86,"y":6.93,"z":4.32},{"name":40205,"carat":0.53,"cut":"Good","color":"J","clarity":"VS2","depth":63.8,"table":57,"price":1122,"x":5.12,"y":5.1,"z":3.26},{"name":26027,"carat":0.32,"cut":"Ideal","color":"G","clarity":"VS1","depth":61.2,"table":57,"price":645,"x":4.4,"y":4.43,"z":2.7},{"name":5966,"carat":0.9,"cut":"Ideal","color":"F","clarity":"SI1","depth":61.8,"table":57,"price":3950,"x":6.19,"y":6.21,"z":3.83},{"name":32163,"carat":0.47,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.1,"table":55,"price":787,"x":5.04,"y":5.07,"z":3.09},{"name":332,"carat":0.71,"cut":"Ideal","color":"G","clarity":"VS2","depth":61.3,"table":56,"price":2803,"x":5.75,"y":5.71,"z":3.51},{"name":22181,"carat":1.54,"cut":"Premium","color":"G","clarity":"SI1","depth":61.3,"table":59,"price":10219,"x":7.41,"y":7.38,"z":4.53},{"name":18741,"carat":1.55,"cut":"Premium","color":"I","clarity":"VS2","depth":61.3,"table":58,"price":7656,"x":7.48,"y":7.44,"z":4.57},{"name":52489,"carat":0.73,"cut":"Very-Good","color":"E","clarity":"SI1","depth":63.3,"table":60,"price":2523,"x":5.65,"y":5.7,"z":3.59},{"name":4115,"carat":0.78,"cut":"Premium","color":"E","clarity":"VS1","depth":62.2,"table":58,"price":3538,"x":5.9,"y":5.86,"z":3.66},{"name":22331,"carat":1.7,"cut":"Premium","color":"F","clarity":"SI2","depth":61.8,"table":60,"price":10377,"x":7.64,"y":7.56,"z":4.7},{"name":41660,"carat":0.5,"cut":"Good","color":"H","clarity":"VS2","depth":56.3,"table":65,"price":1239,"x":5.21,"y":5.24,"z":2.94},{"name":17321,"carat":1.19,"cut":"Premium","color":"H","clarity":"VS2","depth":61.1,"table":58,"price":6944,"x":6.83,"y":6.78,"z":4.16},{"name":27840,"carat":0.39,"cut":"Ideal","color":"D","clarity":"SI2","depth":61.6,"table":56,"price":651,"x":4.69,"y":4.72,"z":2.9},{"name":26341,"carat":0.32,"cut":"Ideal","color":"H","clarity":"VVS2","depth":61.7,"table":56,"price":645,"x":4.37,"y":4.42,"z":2.71},{"name":1757,"carat":0.77,"cut":"Very-Good","color":"F","clarity":"SI1","depth":59.6,"table":60,"price":3044,"x":5.95,"y":5.97,"z":3.55},{"name":7671,"carat":1.11,"cut":"Ideal","color":"I","clarity":"SI1","depth":62.4,"table":55,"price":4273,"x":6.6,"y":6.64,"z":4.13},{"name":20313,"carat":1.24,"cut":"Ideal","color":"H","clarity":"VS2","depth":61.8,"table":55,"price":8726,"x":6.91,"y":6.95,"z":4.28},{"name":40866,"carat":0.55,"cut":"Ideal","color":"F","clarity":"SI2","depth":62.4,"table":56,"price":1175,"x":5.22,"y":5.26,"z":3.27},{"name":29196,"carat":0.33,"cut":"Premium","color":"I","clarity":"IF","depth":62.1,"table":58,"price":694,"x":4.39,"y":4.43,"z":2.74},{"name":11543,"carat":1.21,"cut":"Good","color":"J","clarity":"VVS2","depth":63.7,"table":56,"price":5028,"x":6.71,"y":6.67,"z":4.26},{"name":46413,"carat":0.54,"cut":"Good","color":"D","clarity":"SI1","depth":57.9,"table":60,"price":1767,"x":5.36,"y":5.39,"z":3.11},{"name":5619,"carat":1,"cut":"Good","color":"H","clarity":"SI2","depth":63.2,"table":59,"price":3874,"x":6.24,"y":6.29,"z":3.96},{"name":46222,"carat":0.5,"cut":"Premium","color":"D","clarity":"VS2","depth":61.9,"table":58,"price":1752,"x":5.04,"y":5.1,"z":3.14},{"name":11794,"carat":1.12,"cut":"Very-Good","color":"G","clarity":"SI1","depth":62.5,"table":58,"price":5088,"x":6.6,"y":6.64,"z":4.14},{"name":28962,"carat":0.31,"cut":"Very-Good","color":"I","clarity":"VS2","depth":60.7,"table":61,"price":435,"x":4.32,"y":4.34,"z":2.63},{"name":25313,"carat":2.07,"cut":"Premium","color":"H","clarity":"SI1","depth":62.7,"table":58,"price":13993,"x":8.14,"y":8.09,"z":5.09},{"name":33556,"carat":0.41,"cut":"Ideal","color":"J","clarity":"VS1","depth":60.2,"table":57,"price":830,"x":4.85,"y":4.81,"z":2.91},{"name":7949,"carat":1.16,"cut":"Premium","color":"G","clarity":"SI2","depth":62,"table":59,"price":4320,"x":6.74,"y":6.62,"z":4.14},{"name":49142,"carat":1.05,"cut":"Good","color":"E","clarity":"I1","depth":64.1,"table":58,"price":2066,"x":6.46,"y":6.32,"z":4.09},{"name":16341,"carat":1.11,"cut":"Premium","color":"G","clarity":"VS2","depth":61.4,"table":58,"price":6534,"x":6.7,"y":6.66,"z":4.1},{"name":5849,"carat":1,"cut":"Premium","color":"H","clarity":"SI2","depth":61.3,"table":58,"price":3920,"x":6.45,"y":6.41,"z":3.94},{"name":45428,"carat":0.51,"cut":"Ideal","color":"H","clarity":"VVS2","depth":61.2,"table":57,"price":1669,"x":5.14,"y":5.19,"z":3.16},{"name":19274,"carat":1.34,"cut":"Ideal","color":"H","clarity":"VS2","depth":60.8,"table":55,"price":7999,"x":7.18,"y":7.12,"z":4.35},{"name":50899,"carat":0.71,"cut":"Ideal","color":"H","clarity":"SI2","depth":62.7,"table":55,"price":2317,"x":5.68,"y":5.64,"z":3.56},{"name":53908,"carat":0.7,"cut":"Very-Good","color":"E","clarity":"SI1","depth":61,"table":57,"price":2753,"x":5.68,"y":5.73,"z":3.48},{"name":30970,"carat":0.38,"cut":"Premium","color":"I","clarity":"SI1","depth":60.5,"table":58,"price":746,"x":4.72,"y":4.67,"z":2.84},{"name":40324,"carat":0.42,"cut":"Ideal","color":"H","clarity":"IF","depth":61.6,"table":56,"price":1126,"x":4.84,"y":4.87,"z":2.99},{"name":37208,"carat":0.34,"cut":"Ideal","color":"G","clarity":"IF","depth":61,"table":55,"price":974,"x":4.51,"y":4.54,"z":2.76},{"name":4921,"carat":1.21,"cut":"Good","color":"E","clarity":"I1","depth":63.3,"table":63,"price":3726,"x":6.67,"y":6.72,"z":4.24},{"name":44263,"carat":0.52,"cut":"Ideal","color":"H","clarity":"VS1","depth":62,"table":55.4,"price":1575,"x":5.16,"y":5.21,"z":3.21},{"name":8563,"carat":1.04,"cut":"Very-Good","color":"H","clarity":"SI2","depth":62.9,"table":57,"price":4435,"x":6.39,"y":6.45,"z":4.04},{"name":11406,"carat":1.08,"cut":"Ideal","color":"I","clarity":"VS2","depth":61.6,"table":56,"price":5000,"x":6.63,"y":6.59,"z":4.07},{"name":17873,"carat":1.15,"cut":"Premium","color":"D","clarity":"SI1","depth":61.1,"table":53,"price":7213,"x":6.83,"y":6.76,"z":4.15},{"name":8704,"carat":0.4,"cut":"Premium","color":"I","clarity":"SI2","depth":62.9,"table":59,"price":585,"x":4.68,"y":4.63,"z":2.93},{"name":21185,"carat":1.51,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.8,"table":55,"price":9336,"x":7.38,"y":7.42,"z":4.57},{"name":24189,"carat":2.18,"cut":"Very-Good","color":"G","clarity":"SI2","depth":63.3,"table":59,"price":12377,"x":8.25,"y":8.2,"z":5.2},{"name":15396,"carat":1.08,"cut":"Very-Good","color":"G","clarity":"VS2","depth":62,"table":57,"price":6168,"x":6.52,"y":6.55,"z":4.05},{"name":16040,"carat":0.3,"cut":"Good","color":"I","clarity":"VS1","depth":63.7,"table":58,"price":608,"x":4.25,"y":4.23,"z":2.7},{"name":17057,"carat":0.28,"cut":"Good","color":"E","clarity":"IF","depth":64.6,"table":58,"price":612,"x":4.09,"y":4.12,"z":2.65},{"name":45024,"carat":0.54,"cut":"Ideal","color":"H","clarity":"VS1","depth":61.5,"table":56,"price":1637,"x":5.24,"y":5.23,"z":3.22},{"name":19987,"carat":1.53,"cut":"Ideal","color":"G","clarity":"SI1","depth":61.3,"table":57,"price":8529,"x":7.42,"y":7.32,"z":4.52},{"name":38294,"carat":0.28,"cut":"Ideal","color":"D","clarity":"VS2","depth":61.2,"table":57,"price":487,"x":4.2,"y":4.23,"z":2.58},{"name":771,"carat":0.9,"cut":"Fair","color":"G","clarity":"SI2","depth":64.5,"table":56,"price":2858,"x":6.06,"y":6,"z":3.89},{"name":48545,"carat":0.52,"cut":"Ideal","color":"I","clarity":"IF","depth":60.2,"table":56,"price":1988,"x":5.23,"y":5.27,"z":3.16},{"name":12222,"carat":1,"cut":"Ideal","color":"F","clarity":"SI1","depth":62,"table":57,"price":5197,"x":6.37,"y":6.43,"z":3.97},{"name":5540,"carat":0.91,"cut":"Fair","color":"D","clarity":"SI1","depth":64.4,"table":60,"price":3855,"x":6.08,"y":6.04,"z":3.9},{"name":51049,"carat":0.73,"cut":"Fair","color":"I","clarity":"VS1","depth":55.9,"table":66,"price":2330,"x":6.11,"y":6.01,"z":3.39},{"name":14583,"carat":1.13,"cut":"Premium","color":"H","clarity":"VS2","depth":62.4,"table":58,"price":5885,"x":6.66,"y":6.61,"z":4.14},{"name":21195,"carat":1.51,"cut":"Very-Good","color":"I","clarity":"VS1","depth":63,"table":59,"price":9343,"x":7.28,"y":7.3,"z":4.59},{"name":38780,"carat":0.31,"cut":"Premium","color":"E","clarity":"VVS2","depth":61.3,"table":60,"price":1046,"x":4.35,"y":4.33,"z":2.66},{"name":24542,"carat":2.01,"cut":"Premium","color":"I","clarity":"SI1","depth":60.5,"table":58,"price":12829,"x":8.2,"y":8.06,"z":4.92},{"name":45710,"carat":0.56,"cut":"Ideal","color":"G","clarity":"VS2","depth":61.7,"table":56,"price":1698,"x":5.34,"y":5.3,"z":3.28},{"name":20987,"carat":1.2,"cut":"Very-Good","color":"F","clarity":"VS1","depth":61.6,"table":61,"price":9203,"x":6.81,"y":6.86,"z":4.21},{"name":24439,"carat":1.5,"cut":"Good","color":"F","clarity":"VS2","depth":60.2,"table":58,"price":12693,"x":7.31,"y":7.35,"z":4.41},{"name":20964,"carat":1.21,"cut":"Good","color":"E","clarity":"VS2","depth":62.7,"table":61,"price":9176,"x":6.67,"y":6.72,"z":4.2},{"name":33240,"carat":0.36,"cut":"Ideal","color":"I","clarity":"VVS1","depth":61.7,"table":56,"price":824,"x":4.59,"y":4.62,"z":2.84},{"name":50267,"carat":0.5,"cut":"Very-Good","color":"F","clarity":"IF","depth":61.4,"table":60,"price":2238,"x":5.07,"y":5.1,"z":3.12},{"name":26992,"carat":2.05,"cut":"Premium","color":"E","clarity":"SI2","depth":59.7,"table":59,"price":17081,"x":8.27,"y":8.39,"z":4.97},{"name":25844,"carat":1.71,"cut":"Very-Good","color":"H","clarity":"VVS2","depth":61.2,"table":62,"price":14893,"x":7.59,"y":7.65,"z":4.66},{"name":28144,"carat":0.3,"cut":"Ideal","color":"G","clarity":"VVS2","depth":62.6,"table":53,"price":665,"x":4.31,"y":4.35,"z":2.71},{"name":53423,"carat":0.71,"cut":"Premium","color":"G","clarity":"VS2","depth":60.3,"table":60,"price":2671,"x":5.76,"y":5.81,"z":3.49},{"name":40317,"carat":0.4,"cut":"Ideal","color":"E","clarity":"VS1","depth":62.2,"table":55,"price":1125,"x":4.76,"y":4.72,"z":2.95},{"name":48669,"carat":0.61,"cut":"Ideal","color":"F","clarity":"VS2","depth":62.4,"table":55,"price":2002,"x":5.42,"y":5.45,"z":3.39},{"name":26549,"carat":1.87,"cut":"Premium","color":"E","clarity":"SI1","depth":61.9,"table":58,"price":16232,"x":7.94,"y":7.88,"z":4.9},{"name":18629,"carat":1.02,"cut":"Good","color":"E","clarity":"VS1","depth":63.9,"table":56,"price":7602,"x":6.33,"y":6.38,"z":4.06},{"name":44994,"carat":0.31,"cut":"Premium","color":"I","clarity":"SI1","depth":60.7,"table":60,"price":523,"x":4.37,"y":4.33,"z":2.64},{"name":10513,"carat":1.03,"cut":"Ideal","color":"H","clarity":"SI1","depth":62.4,"table":56,"price":4800,"x":6.45,"y":6.5,"z":4.04},{"name":21820,"carat":1.51,"cut":"Ideal","color":"I","clarity":"VS2","depth":62.6,"table":55,"price":9891,"x":7.29,"y":7.34,"z":4.58},{"name":51070,"carat":0.54,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.3,"table":57,"price":2333,"x":5.29,"y":5.24,"z":3.23},{"name":25447,"carat":2,"cut":"Fair","color":"H","clarity":"VS1","depth":66,"table":56,"price":14199,"x":7.79,"y":7.72,"z":5.12},{"name":11880,"carat":1.21,"cut":"Very-Good","color":"I","clarity":"SI2","depth":62,"table":56,"price":5111,"x":6.79,"y":6.86,"z":4.23},{"name":29934,"carat":0.34,"cut":"Premium","color":"G","clarity":"VS2","depth":59.6,"table":62,"price":714,"x":4.56,"y":4.54,"z":2.71},{"name":33722,"carat":0.42,"cut":"Premium","color":"E","clarity":"SI2","depth":60.1,"table":58,"price":838,"x":4.91,"y":4.87,"z":2.94},{"name":6090,"carat":1.02,"cut":"Very-Good","color":"F","clarity":"SI2","depth":59.6,"table":59,"price":3974,"x":6.51,"y":6.54,"z":3.89},{"name":10643,"carat":0.93,"cut":"Premium","color":"G","clarity":"VS2","depth":62.2,"table":59,"price":4834,"x":6.21,"y":6.26,"z":3.88},{"name":17714,"carat":0.41,"cut":"Ideal","color":"J","clarity":"VS2","depth":61.7,"table":55,"price":613,"x":4.8,"y":4.82,"z":2.97},{"name":48418,"carat":0.7,"cut":"Very-Good","color":"I","clarity":"VS1","depth":62.4,"table":58,"price":1971,"x":5.62,"y":5.67,"z":3.52},{"name":52256,"carat":0.7,"cut":"Good","color":"G","clarity":"VS2","depth":64.3,"table":56,"price":2488,"x":5.51,"y":5.58,"z":3.57},{"name":42073,"carat":0.55,"cut":"Good","color":"D","clarity":"SI2","depth":63.3,"table":56,"price":1272,"x":5.21,"y":5.24,"z":3.31},{"name":7421,"carat":1,"cut":"Premium","color":"G","clarity":"SI2","depth":62.9,"table":60,"price":4227,"x":6.35,"y":6.3,"z":3.98},{"name":52345,"carat":0.72,"cut":"Fair","color":"E","clarity":"SI1","depth":56.9,"table":61,"price":2498,"x":5.91,"y":5.97,"z":3.38},{"name":21919,"carat":1.5,"cut":"Ideal","color":"F","clarity":"SI2","depth":62.9,"table":55,"price":9996,"x":7.28,"y":7.26,"z":4.57},{"name":44416,"carat":0.52,"cut":"Ideal","color":"E","clarity":"SI1","depth":61,"table":55,"price":1586,"x":5.19,"y":5.23,"z":3.18},{"name":6044,"carat":0.32,"cut":"Ideal","color":"E","clarity":"SI2","depth":62,"table":55,"price":576,"x":4.41,"y":4.36,"z":2.72},{"name":42202,"carat":0.51,"cut":"Ideal","color":"G","clarity":"SI1","depth":61.7,"table":58,"price":1287,"x":5.12,"y":5.15,"z":3.17},{"name":29510,"carat":0.32,"cut":"Premium","color":"E","clarity":"VS2","depth":60.5,"table":59,"price":702,"x":4.39,"y":4.43,"z":2.67},{"name":24096,"carat":1.91,"cut":"Fair","color":"I","clarity":"VS1","depth":59.5,"table":68,"price":12244,"x":8.1,"y":7.91,"z":4.78},{"name":28544,"carat":0.3,"cut":"Premium","color":"E","clarity":"SI1","depth":61.8,"table":60,"price":675,"x":4.28,"y":4.23,"z":2.63},{"name":14459,"carat":1.06,"cut":"Ideal","color":"F","clarity":"SI1","depth":61.9,"table":57,"price":5834,"x":6.57,"y":6.54,"z":4.06},{"name":1152,"carat":0.87,"cut":"Ideal","color":"H","clarity":"SI1","depth":62.5,"table":57,"price":2923,"x":6.13,"y":6.06,"z":3.81},{"name":37812,"carat":0.35,"cut":"Ideal","color":"G","clarity":"IF","depth":61.3,"table":55,"price":1001,"x":4.57,"y":4.6,"z":2.81},{"name":23616,"carat":1.34,"cut":"Ideal","color":"G","clarity":"VVS1","depth":62.2,"table":56,"price":11640,"x":7.11,"y":7.04,"z":4.4},{"name":24784,"carat":1.51,"cut":"Good","color":"G","clarity":"VVS2","depth":63.8,"table":59,"price":13155,"x":7.24,"y":7.28,"z":4.63},{"name":10890,"carat":1,"cut":"Good","color":"G","clarity":"SI1","depth":64.4,"table":54,"price":4882,"x":6.29,"y":6.32,"z":4.06},{"name":21135,"carat":1,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61.1,"table":58,"price":9294,"x":6.43,"y":6.47,"z":3.94},{"name":10217,"carat":1.21,"cut":"Premium","color":"H","clarity":"SI1","depth":60.5,"table":60,"price":4743,"x":6.81,"y":6.72,"z":4.09},{"name":10169,"carat":0.91,"cut":"Ideal","color":"G","clarity":"SI1","depth":61.9,"table":56,"price":4731,"x":6.22,"y":6.18,"z":3.84},{"name":15177,"carat":1.01,"cut":"Premium","color":"F","clarity":"VS2","depth":63,"table":58,"price":6097,"x":6.43,"y":6.36,"z":4.03},{"name":20708,"carat":0.31,"cut":"Ideal","color":"F","clarity":"VS2","depth":62.1,"table":57,"price":625,"x":4.34,"y":4.36,"z":2.7},{"name":17157,"carat":1.24,"cut":"Premium","color":"H","clarity":"VS2","depth":61.2,"table":59,"price":6850,"x":6.89,"y":6.93,"z":4.23},{"name":12185,"carat":1.21,"cut":"Premium","color":"G","clarity":"SI2","depth":59.1,"table":55,"price":5184,"x":7.04,"y":6.98,"z":4.14},{"name":37681,"carat":0.42,"cut":"Ideal","color":"H","clarity":"VS2","depth":62.5,"table":57,"price":992,"x":4.81,"y":4.76,"z":2.99},{"name":9804,"carat":0.9,"cut":"Good","color":"G","clarity":"VVS2","depth":62.6,"table":58,"price":4668,"x":6.1,"y":6.13,"z":3.83},{"name":27382,"carat":0.41,"cut":"Good","color":"J","clarity":"VS1","depth":63.7,"table":56,"price":647,"x":4.68,"y":4.71,"z":2.99},{"name":37287,"carat":0.24,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":64.4,"table":53,"price":485,"x":3.92,"y":3.94,"z":2.53},{"name":5300,"carat":1.01,"cut":"Fair","color":"E","clarity":"SI2","depth":60,"table":60,"price":3801,"x":6.48,"y":6.38,"z":3.86},{"name":18937,"carat":1.12,"cut":"Premium","color":"F","clarity":"VS1","depth":62.1,"table":60,"price":7781,"x":6.62,"y":6.58,"z":4.1},{"name":29097,"carat":0.36,"cut":"Premium","color":"D","clarity":"SI2","depth":61.2,"table":59,"price":689,"x":4.59,"y":4.56,"z":2.8},{"name":5319,"carat":1.08,"cut":"Premium","color":"I","clarity":"SI2","depth":62.7,"table":57,"price":3805,"x":6.57,"y":6.53,"z":4.11},{"name":53268,"carat":0.7,"cut":"Premium","color":"F","clarity":"VS2","depth":62.2,"table":59,"price":2648,"x":5.68,"y":5.64,"z":3.52},{"name":29858,"carat":0.3,"cut":"Very-Good","color":"D","clarity":"VS2","depth":62.6,"table":61,"price":710,"x":4.22,"y":4.25,"z":2.65},{"name":15204,"carat":1.01,"cut":"Very-Good","color":"G","clarity":"VS2","depth":63.1,"table":60,"price":6108,"x":6.36,"y":6.31,"z":4},{"name":50101,"carat":0.71,"cut":"Very-Good","color":"H","clarity":"SI1","depth":63.1,"table":57,"price":2207,"x":5.65,"y":5.61,"z":3.55},{"name":21674,"carat":1.58,"cut":"Good","color":"I","clarity":"VS1","depth":58.6,"table":62,"price":9775,"x":7.59,"y":7.66,"z":4.47},{"name":16732,"carat":0.4,"cut":"Very-Good","color":"E","clarity":"SI2","depth":58.7,"table":57,"price":611,"x":4.88,"y":4.94,"z":2.88},{"name":2543,"carat":0.75,"cut":"Very-Good","color":"E","clarity":"VS2","depth":62.8,"table":55,"price":3206,"x":5.77,"y":5.79,"z":3.63},{"name":6773,"carat":0.9,"cut":"Good","color":"G","clarity":"VS1","depth":65.8,"table":59,"price":4108,"x":6,"y":6.04,"z":3.96},{"name":50497,"carat":0.53,"cut":"Ideal","color":"F","clarity":"VVS2","depth":61,"table":57,"price":2269,"x":5.23,"y":5.26,"z":3.22},{"name":41671,"carat":0.4,"cut":"Ideal","color":"G","clarity":"VS2","depth":61.1,"table":56,"price":1240,"x":4.74,"y":4.78,"z":2.91},{"name":41419,"carat":0.55,"cut":"Premium","color":"G","clarity":"SI1","depth":60.7,"table":56,"price":1226,"x":5.38,"y":5.32,"z":3.25},{"name":42262,"carat":0.49,"cut":"Good","color":"F","clarity":"VS1","depth":59.2,"table":60.9,"price":1294,"x":5.08,"y":5.18,"z":3.04},{"name":439,"carat":0.7,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.4,"table":56,"price":2815,"x":5.72,"y":5.77,"z":3.53},{"name":47145,"carat":0.53,"cut":"Ideal","color":"F","clarity":"VS1","depth":62.4,"table":57,"price":1832,"x":5.18,"y":5.21,"z":3.24},{"name":10387,"carat":0.38,"cut":"Ideal","color":"I","clarity":"SI1","depth":61.8,"table":54,"price":593,"x":4.66,"y":4.7,"z":2.89},{"name":44982,"carat":0.31,"cut":"Premium","color":"G","clarity":"SI2","depth":61.8,"table":59,"price":523,"x":4.34,"y":4.3,"z":2.67},{"name":307,"carat":0.7,"cut":"Premium","color":"E","clarity":"VS1","depth":62.2,"table":58,"price":2800,"x":5.6,"y":5.66,"z":3.5},{"name":26546,"carat":2.03,"cut":"Ideal","color":"G","clarity":"SI1","depth":60.3,"table":56,"price":16224,"x":8.27,"y":8.21,"z":4.97},{"name":49312,"carat":0.34,"cut":"Ideal","color":"G","clarity":"SI1","depth":61.9,"table":55,"price":540,"x":4.5,"y":4.52,"z":2.79},{"name":39638,"carat":0.34,"cut":"Premium","color":"G","clarity":"IF","depth":62.3,"table":59,"price":1084,"x":4.49,"y":4.46,"z":2.79},{"name":2569,"carat":0.9,"cut":"Very-Good","color":"I","clarity":"SI1","depth":63.1,"table":54,"price":3211,"x":6.13,"y":6.16,"z":3.88},{"name":35272,"carat":0.3,"cut":"Ideal","color":"G","clarity":"IF","depth":61.4,"table":57,"price":895,"x":4.33,"y":4.37,"z":2.67},{"name":30391,"carat":0.33,"cut":"Ideal","color":"H","clarity":"VVS1","depth":62.1,"table":53,"price":730,"x":4.48,"y":4.5,"z":2.79},{"name":36335,"carat":0.32,"cut":"Premium","color":"G","clarity":"VVS2","depth":62.3,"table":54,"price":936,"x":4.45,"y":4.38,"z":2.75},{"name":24170,"carat":1.71,"cut":"Ideal","color":"I","clarity":"VS2","depth":61.9,"table":54,"price":12342,"x":7.65,"y":7.75,"z":4.77},{"name":26579,"carat":2.02,"cut":"Ideal","color":"F","clarity":"SI2","depth":61.3,"table":57,"price":16290,"x":8.11,"y":8.16,"z":4.99},{"name":16650,"carat":1.26,"cut":"Premium","color":"F","clarity":"SI2","depth":61.3,"table":58,"price":6657,"x":6.99,"y":6.91,"z":4.26},{"name":7684,"carat":1.03,"cut":"Premium","color":"H","clarity":"SI1","depth":63,"table":59,"price":4274,"x":6.43,"y":6.4,"z":4.04},{"name":8344,"carat":1.02,"cut":"Very-Good","color":"E","clarity":"SI2","depth":60.5,"table":58,"price":4398,"x":6.54,"y":6.58,"z":3.97},{"name":13850,"carat":1.2,"cut":"Very-Good","color":"E","clarity":"SI2","depth":63.3,"table":55,"price":5645,"x":6.77,"y":6.73,"z":4.27},{"name":21762,"carat":1.5,"cut":"Good","color":"I","clarity":"VS1","depth":57.9,"table":60,"price":9828,"x":7.48,"y":7.44,"z":4.32},{"name":15491,"carat":1.04,"cut":"Premium","color":"G","clarity":"VS2","depth":62.3,"table":54,"price":6206,"x":6.55,"y":6.49,"z":4.06},{"name":15416,"carat":1.05,"cut":"Premium","color":"D","clarity":"SI1","depth":59.3,"table":58,"price":6174,"x":6.74,"y":6.68,"z":3.98},{"name":6738,"carat":0.4,"cut":"Very-Good","color":"F","clarity":"SI2","depth":62.6,"table":53,"price":579,"x":4.7,"y":4.75,"z":2.96},{"name":15410,"carat":1.32,"cut":"Premium","color":"I","clarity":"SI1","depth":62.2,"table":58,"price":6171,"x":6.99,"y":7.04,"z":4.36},{"name":7972,"carat":0.9,"cut":"Very-Good","color":"H","clarity":"VS1","depth":62.2,"table":57,"price":4324,"x":6.1,"y":6.15,"z":3.81},{"name":52768,"carat":0.77,"cut":"Ideal","color":"E","clarity":"SI2","depth":62,"table":54,"price":2563,"x":5.89,"y":5.92,"z":3.66},{"name":2171,"carat":0.94,"cut":"Good","color":"I","clarity":"SI2","depth":63.8,"table":60,"price":3134,"x":6.14,"y":6.21,"z":3.94},{"name":40706,"carat":0.58,"cut":"Ideal","color":"I","clarity":"SI2","depth":61.3,"table":56,"price":1158,"x":5.38,"y":5.45,"z":3.32},{"name":30640,"carat":0.36,"cut":"Ideal","color":"I","clarity":"IF","depth":61.8,"table":55,"price":735,"x":4.58,"y":4.61,"z":2.84},{"name":234,"carat":0.51,"cut":"Ideal","color":"F","clarity":"VVS1","depth":62,"table":57,"price":2787,"x":5.11,"y":5.15,"z":3.18},{"name":9490,"carat":1.11,"cut":"Good","color":"H","clarity":"SI1","depth":64.2,"table":58,"price":4606,"x":6.53,"y":6.47,"z":4.17},{"name":593,"carat":0.7,"cut":"Ideal","color":"E","clarity":"VS1","depth":61.8,"table":56,"price":2837,"x":5.74,"y":5.69,"z":3.53},{"name":34805,"carat":0.31,"cut":"Ideal","color":"D","clarity":"VS1","depth":62,"table":54,"price":877,"x":4.36,"y":4.35,"z":2.7},{"name":38939,"carat":0.4,"cut":"Ideal","color":"E","clarity":"VS1","depth":62,"table":54,"price":1053,"x":4.74,"y":4.77,"z":2.95},{"name":13667,"carat":1.02,"cut":"Premium","color":"G","clarity":"VS2","depth":62.9,"table":58,"price":5593,"x":6.41,"y":6.37,"z":4.02},{"name":39302,"carat":0.38,"cut":"Premium","color":"E","clarity":"VS1","depth":60.2,"table":58,"price":1069,"x":4.71,"y":4.66,"z":2.82},{"name":21379,"carat":0.34,"cut":"Very-Good","color":"D","clarity":"SI1","depth":59.6,"table":61,"price":626,"x":4.5,"y":4.53,"z":2.69},{"name":42357,"carat":0.51,"cut":"Ideal","color":"I","clarity":"VS1","depth":61.8,"table":56,"price":1301,"x":5.1,"y":5.13,"z":3.16},{"name":51831,"carat":0.7,"cut":"Good","color":"H","clarity":"VS1","depth":59.4,"table":62,"price":2421,"x":5.71,"y":5.74,"z":3.4},{"name":47340,"carat":0.23,"cut":"Very-Good","color":"E","clarity":"VVS1","depth":62.1,"table":58,"price":530,"x":3.9,"y":3.93,"z":2.43},{"name":13017,"carat":1.2,"cut":"Very-Good","color":"I","clarity":"SI1","depth":62.2,"table":55,"price":5408,"x":6.75,"y":6.92,"z":4.25},{"name":53751,"carat":0.72,"cut":"Ideal","color":"G","clarity":"VS1","depth":62.7,"table":55,"price":2724,"x":5.71,"y":5.68,"z":3.57},{"name":33789,"carat":0.32,"cut":"Ideal","color":"H","clarity":"IF","depth":60.9,"table":56,"price":842,"x":4.41,"y":4.42,"z":2.69},{"name":5813,"carat":0.91,"cut":"Very-Good","color":"D","clarity":"SI2","depth":63.4,"table":59,"price":3911,"x":6.12,"y":6.15,"z":3.89},{"name":53023,"carat":0.74,"cut":"Very-Good","color":"I","clarity":"VVS2","depth":62.8,"table":55,"price":2600,"x":5.75,"y":5.78,"z":3.62},{"name":46596,"carat":0.54,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.4,"table":57,"price":1786,"x":5.25,"y":5.2,"z":3.21},{"name":51908,"carat":0.7,"cut":"Good","color":"E","clarity":"SI2","depth":63.7,"table":55,"price":2435,"x":5.63,"y":5.58,"z":3.57},{"name":25242,"carat":1.6,"cut":"Ideal","color":"F","clarity":"VS2","depth":60.1,"table":57,"price":13853,"x":7.65,"y":7.59,"z":4.58},{"name":43627,"carat":0.38,"cut":"Ideal","color":"E","clarity":"IF","depth":61.9,"table":56,"price":1433,"x":4.65,"y":4.66,"z":2.88},{"name":5997,"carat":0.91,"cut":"Premium","color":"D","clarity":"SI2","depth":61.2,"table":58,"price":3958,"x":6.21,"y":6.25,"z":3.81},{"name":26004,"carat":1.02,"cut":"Premium","color":"D","clarity":"IF","depth":61.5,"table":60,"price":15231,"x":6.45,"y":6.52,"z":3.99},{"name":46049,"carat":0.5,"cut":"Ideal","color":"F","clarity":"VS1","depth":61,"table":56,"price":1731,"x":5.14,"y":5.15,"z":3.14},{"name":47761,"carat":0.52,"cut":"Ideal","color":"H","clarity":"VVS1","depth":61.7,"table":53,"price":1893,"x":5.19,"y":5.25,"z":3.22},{"name":47770,"carat":0.7,"cut":"Very-Good","color":"E","clarity":"SI2","depth":63.5,"table":59,"price":1894,"x":5.63,"y":5.51,"z":3.53},{"name":26719,"carat":0.32,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.1,"table":57,"price":645,"x":4.4,"y":4.44,"z":2.7},{"name":46039,"carat":0.57,"cut":"Ideal","color":"E","clarity":"SI1","depth":61.8,"table":57,"price":1728,"x":5.33,"y":5.28,"z":3.28},{"name":27603,"carat":2.16,"cut":"Ideal","color":"J","clarity":"VS1","depth":61.4,"table":55,"price":18462,"x":8.34,"y":8.27,"z":5.1},{"name":25203,"carat":2.26,"cut":"Very-Good","color":"H","clarity":"SI2","depth":63.1,"table":58,"price":13797,"x":8.3,"y":8.22,"z":5.21},{"name":5980,"carat":1,"cut":"Fair","color":"I","clarity":"VS1","depth":64,"table":49,"price":3951,"x":6.43,"y":6.39,"z":4.1},{"name":10972,"carat":1.2,"cut":"Premium","color":"H","clarity":"SI2","depth":59.6,"table":60,"price":4906,"x":6.91,"y":6.84,"z":4.1},{"name":44419,"carat":0.53,"cut":"Ideal","color":"D","clarity":"SI1","depth":61.2,"table":57,"price":1587,"x":5.19,"y":5.24,"z":3.19},{"name":977,"carat":0.82,"cut":"Premium","color":"G","clarity":"SI1","depth":59.9,"table":59,"price":2893,"x":6.09,"y":6.06,"z":3.64},{"name":10234,"carat":1.19,"cut":"Premium","color":"I","clarity":"SI2","depth":62.6,"table":58,"price":4745,"x":6.75,"y":6.7,"z":4.21},{"name":44874,"carat":0.64,"cut":"Very-Good","color":"D","clarity":"SI2","depth":62.8,"table":54,"price":1629,"x":5.5,"y":5.52,"z":3.46},{"name":665,"carat":1.01,"cut":"Good","color":"H","clarity":"I1","depth":64.2,"table":61,"price":2846,"x":6.25,"y":6.18,"z":3.99},{"name":53847,"carat":0.82,"cut":"Very-Good","color":"E","clarity":"SI1","depth":63.2,"table":57,"price":2741,"x":5.92,"y":5.97,"z":3.76},{"name":42703,"carat":0.52,"cut":"Premium","color":"G","clarity":"SI1","depth":62.8,"table":61,"price":1338,"x":5.14,"y":5.11,"z":3.22},{"name":26603,"carat":2.07,"cut":"Ideal","color":"I","clarity":"SI2","depth":62,"table":55,"price":16337,"x":8.22,"y":8.12,"z":5.07},{"name":33470,"carat":0.32,"cut":"Premium","color":"F","clarity":"VS2","depth":59.7,"table":59,"price":828,"x":4.44,"y":4.41,"z":2.64},{"name":47000,"carat":0.62,"cut":"Very-Good","color":"I","clarity":"VS1","depth":61.8,"table":55,"price":1818,"x":5.5,"y":5.53,"z":3.41},{"name":9368,"carat":0.32,"cut":"Good","color":"D","clarity":"SI1","depth":63.7,"table":55,"price":589,"x":4.35,"y":4.38,"z":2.78},{"name":27741,"carat":1.71,"cut":"Premium","color":"F","clarity":"VS2","depth":62.3,"table":59,"price":18791,"x":7.57,"y":7.53,"z":4.7},{"name":25501,"carat":1.51,"cut":"Ideal","color":"F","clarity":"VS2","depth":62.8,"table":56,"price":14294,"x":7.32,"y":7.27,"z":4.58},{"name":48210,"carat":0.62,"cut":"Very-Good","color":"D","clarity":"SI1","depth":61.3,"table":58,"price":1949,"x":5.47,"y":5.49,"z":3.36},{"name":27312,"carat":1.63,"cut":"Ideal","color":"E","clarity":"VS2","depth":61.3,"table":55,"price":17825,"x":7.6,"y":7.63,"z":4.67},{"name":17574,"carat":1.08,"cut":"Fair","color":"G","clarity":"VS1","depth":64.7,"table":60,"price":7076,"x":6.44,"y":6.41,"z":4.16},{"name":33092,"carat":0.31,"cut":"Ideal","color":"D","clarity":"VVS2","depth":61.7,"table":54,"price":815,"x":4.38,"y":4.43,"z":2.72},{"name":5681,"carat":1.01,"cut":"Good","color":"F","clarity":"SI2","depth":62.5,"table":59,"price":3886,"x":6.31,"y":6.37,"z":3.96},{"name":39210,"carat":0.54,"cut":"Ideal","color":"H","clarity":"SI1","depth":62,"table":54,"price":1065,"x":5.23,"y":5.28,"z":3.26},{"name":11982,"carat":1.06,"cut":"Premium","color":"F","clarity":"SI1","depth":61,"table":58,"price":5142,"x":6.6,"y":6.65,"z":4.04},{"name":33775,"carat":0.41,"cut":"Ideal","color":"D","clarity":"SI2","depth":62.6,"table":57,"price":841,"x":4.77,"y":4.72,"z":2.97},{"name":33646,"carat":0.38,"cut":"Ideal","color":"G","clarity":"VS1","depth":60.8,"table":56,"price":833,"x":4.66,"y":4.71,"z":2.85},{"name":14360,"carat":1.21,"cut":"Ideal","color":"H","clarity":"SI2","depth":62,"table":54.5,"price":5814,"x":6.81,"y":6.87,"z":4.25},{"name":928,"carat":0.54,"cut":"Ideal","color":"F","clarity":"VVS1","depth":61.8,"table":56,"price":2882,"x":5.23,"y":5.26,"z":3.24},{"name":9392,"carat":0.9,"cut":"Premium","color":"D","clarity":"VS2","depth":63,"table":62,"price":4586,"x":6.13,"y":6.06,"z":3.84},{"name":40223,"carat":0.4,"cut":"Very-Good","color":"G","clarity":"VVS1","depth":60.9,"table":57,"price":1123,"x":4.76,"y":4.8,"z":2.91},{"name":30517,"carat":0.31,"cut":"Very-Good","color":"D","clarity":"SI1","depth":63.5,"table":55,"price":732,"x":4.3,"y":4.27,"z":2.72},{"name":7478,"carat":1.07,"cut":"Premium","color":"H","clarity":"SI1","depth":58.9,"table":59,"price":4235,"x":6.76,"y":6.71,"z":3.97},{"name":28014,"carat":0.3,"cut":"Ideal","color":"E","clarity":"VS2","depth":61.8,"table":56,"price":658,"x":4.3,"y":4.34,"z":2.67},{"name":28205,"carat":0.4,"cut":"Very-Good","color":"D","clarity":"SI2","depth":62.8,"table":56,"price":666,"x":4.7,"y":4.73,"z":2.96},{"name":12423,"carat":1,"cut":"Ideal","color":"F","clarity":"SI1","depth":62,"table":55,"price":5239,"x":6.39,"y":6.44,"z":3.98},{"name":27138,"carat":2.01,"cut":"Premium","color":"H","clarity":"SI1","depth":61.8,"table":58,"price":17347,"x":8.13,"y":8.06,"z":5},{"name":45511,"carat":0.55,"cut":"Ideal","color":"F","clarity":"VS1","depth":60.3,"table":57,"price":1682,"x":5.32,"y":5.37,"z":3.23},{"name":52391,"carat":0.71,"cut":"Very-Good","color":"D","clarity":"SI1","depth":63.1,"table":56,"price":2508,"x":5.66,"y":5.62,"z":3.56},{"name":29757,"carat":0.3,"cut":"Premium","color":"D","clarity":"SI1","depth":62.6,"table":56,"price":709,"x":4.29,"y":4.24,"z":2.67},{"name":41446,"carat":0.53,"cut":"Ideal","color":"E","clarity":"SI2","depth":61.2,"table":55,"price":1229,"x":5.23,"y":5.26,"z":3.21},{"name":39341,"carat":0.37,"cut":"Ideal","color":"G","clarity":"VVS2","depth":60.7,"table":55,"price":1073,"x":4.66,"y":4.7,"z":2.84},{"name":15246,"carat":1.22,"cut":"Premium","color":"I","clarity":"VS1","depth":61.1,"table":58,"price":6121,"x":6.91,"y":6.84,"z":4.2},{"name":48026,"carat":0.71,"cut":"Good","color":"J","clarity":"VS2","depth":60.6,"table":61,"price":1922,"x":5.7,"y":5.79,"z":3.48},{"name":16395,"carat":1.05,"cut":"Very-Good","color":"F","clarity":"VS2","depth":62,"table":56,"price":6545,"x":6.48,"y":6.52,"z":4.03},{"name":34875,"carat":0.3,"cut":"Premium","color":"G","clarity":"VVS2","depth":62.1,"table":59,"price":878,"x":4.27,"y":4.23,"z":2.64},{"name":31575,"carat":0.4,"cut":"Ideal","color":"F","clarity":"VS2","depth":62.3,"table":54,"price":767,"x":4.74,"y":4.77,"z":2.96},{"name":17618,"carat":1.01,"cut":"Very-Good","color":"E","clarity":"VS1","depth":60.9,"table":55,"price":7094,"x":6.48,"y":6.58,"z":3.98},{"name":10761,"carat":1.01,"cut":"Fair","color":"E","clarity":"SI1","depth":69.5,"table":55,"price":4853,"x":6,"y":5.94,"z":4.15},{"name":47980,"carat":0.32,"cut":"Ideal","color":"E","clarity":"SI1","depth":62.1,"table":54,"price":532,"x":4.4,"y":4.42,"z":2.74},{"name":41412,"carat":0.47,"cut":"Very-Good","color":"F","clarity":"VS2","depth":59.6,"table":58.1,"price":1226,"x":5.07,"y":5.11,"z":3.03},{"name":21455,"carat":1.04,"cut":"Ideal","color":"E","clarity":"VVS2","depth":62,"table":58,"price":9552,"x":6.54,"y":6.46,"z":4.03},{"name":15036,"carat":0.3,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.9,"table":55,"price":605,"x":4.31,"y":4.32,"z":2.67},{"name":44462,"carat":0.55,"cut":"Premium","color":"I","clarity":"VVS1","depth":61.3,"table":59,"price":1593,"x":5.27,"y":5.3,"z":3.24},{"name":24456,"carat":1.56,"cut":"Ideal","color":"E","clarity":"VS2","depth":60.5,"table":57,"price":12717,"x":7.56,"y":7.5,"z":4.56},{"name":37334,"carat":0.43,"cut":"Ideal","color":"E","clarity":"VS1","depth":61.2,"table":56,"price":981,"x":4.89,"y":4.94,"z":3.01},{"name":9236,"carat":1.01,"cut":"Good","color":"H","clarity":"SI1","depth":63.3,"table":58,"price":4559,"x":6.37,"y":6.4,"z":4.04},{"name":4936,"carat":0.9,"cut":"Premium","color":"I","clarity":"VVS2","depth":60.9,"table":59,"price":3730,"x":6.25,"y":6.22,"z":3.8},{"name":15874,"carat":1.26,"cut":"Premium","color":"H","clarity":"SI2","depth":61.3,"table":57,"price":6350,"x":6.96,"y":6.87,"z":4.24},{"name":40705,"carat":0.4,"cut":"Ideal","color":"E","clarity":"VVS2","depth":61.8,"table":55,"price":1158,"x":4.74,"y":4.78,"z":2.94},{"name":38587,"carat":0.39,"cut":"Ideal","color":"F","clarity":"VVS2","depth":61.9,"table":54.8,"price":1036,"x":4.68,"y":4.69,"z":2.9},{"name":38474,"carat":0.38,"cut":"Ideal","color":"H","clarity":"VVS2","depth":62.1,"table":56,"price":1031,"x":4.64,"y":4.67,"z":2.89},{"name":18994,"carat":1.5,"cut":"Fair","color":"J","clarity":"VS1","depth":60.1,"table":61,"price":7819,"x":7.25,"y":7.3,"z":4.37},{"name":2343,"carat":0.78,"cut":"Ideal","color":"G","clarity":"VS2","depth":62.2,"table":57,"price":3171,"x":5.87,"y":5.9,"z":3.66},{"name":1827,"carat":0.72,"cut":"Very-Good","color":"F","clarity":"VS1","depth":62.1,"table":59,"price":3059,"x":5.69,"y":5.74,"z":3.55},{"name":48630,"carat":0.77,"cut":"Very-Good","color":"J","clarity":"SI2","depth":61.3,"table":58,"price":2001,"x":5.84,"y":5.91,"z":3.6},{"name":42340,"carat":0.73,"cut":"Very-Good","color":"G","clarity":"I1","depth":62.5,"table":58,"price":1298,"x":5.74,"y":5.82,"z":3.61},{"name":27555,"carat":1.7,"cut":"Premium","color":"E","clarity":"VS2","depth":58.6,"table":62,"price":18342,"x":7.92,"y":7.84,"z":4.62},{"name":46863,"carat":0.53,"cut":"Ideal","color":"G","clarity":"VS1","depth":61.8,"table":55,"price":1813,"x":5.22,"y":5.17,"z":3.21},{"name":22475,"carat":1.01,"cut":"Very-Good","color":"D","clarity":"VVS2","depth":59.8,"table":57,"price":10499,"x":6.49,"y":6.58,"z":3.91},{"name":7511,"carat":0.9,"cut":"Ideal","color":"D","clarity":"SI2","depth":60.8,"table":56,"price":4241,"x":6.24,"y":6.26,"z":3.8},{"name":51698,"carat":0.7,"cut":"Very-Good","color":"F","clarity":"VS2","depth":60.5,"table":57,"price":2400,"x":5.74,"y":5.79,"z":3.49},{"name":44899,"carat":0.5,"cut":"Very-Good","color":"E","clarity":"VS2","depth":63.2,"table":56,"price":1629,"x":5.06,"y":5.03,"z":3.19},{"name":45346,"carat":0.53,"cut":"Very-Good","color":"G","clarity":"VS1","depth":62.2,"table":59,"price":1664,"x":5.14,"y":5.18,"z":3.21},{"name":44242,"carat":0.51,"cut":"Premium","color":"F","clarity":"VS2","depth":62.4,"table":58,"price":1574,"x":5.13,"y":5.1,"z":3.19},{"name":43146,"carat":0.52,"cut":"Very-Good","color":"E","clarity":"SI1","depth":62.9,"table":59,"price":1389,"x":5.12,"y":5.15,"z":3.23},{"name":41310,"carat":0.5,"cut":"Very-Good","color":"F","clarity":"SI1","depth":60.2,"table":62,"price":1213,"x":5.1,"y":5.13,"z":3.08},{"name":29288,"carat":0.31,"cut":"Ideal","color":"G","clarity":"SI2","depth":62,"table":54,"price":436,"x":4.38,"y":4.42,"z":2.73},{"name":140,"carat":0.64,"cut":"Ideal","color":"G","clarity":"VVS1","depth":61.9,"table":56,"price":2766,"x":5.53,"y":5.56,"z":3.43},{"name":11560,"carat":1.01,"cut":"Premium","color":"G","clarity":"SI1","depth":59.6,"table":58,"price":5034,"x":6.61,"y":6.54,"z":3.92},{"name":51397,"carat":0.73,"cut":"Very-Good","color":"I","clarity":"VS2","depth":62.2,"table":57,"price":2369,"x":5.75,"y":5.76,"z":3.58},{"name":26898,"carat":2.01,"cut":"Premium","color":"F","clarity":"SI2","depth":61.3,"table":61,"price":16881,"x":8.11,"y":8.01,"z":4.94},{"name":39894,"carat":0.42,"cut":"Ideal","color":"F","clarity":"VS1","depth":61.9,"table":57,"price":1103,"x":4.81,"y":4.79,"z":2.97},{"name":47036,"carat":0.55,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.1,"table":56,"price":1819,"x":5.31,"y":5.27,"z":3.23},{"name":18573,"carat":1.51,"cut":"Premium","color":"I","clarity":"SI2","depth":59.7,"table":59,"price":7577,"x":7.48,"y":7.46,"z":4.46},{"name":41674,"carat":0.33,"cut":"Ideal","color":"F","clarity":"IF","depth":60.8,"table":55,"price":1240,"x":4.49,"y":4.53,"z":2.74},{"name":28291,"carat":0.27,"cut":"Ideal","color":"I","clarity":"VS1","depth":62.2,"table":55,"price":432,"x":4.15,"y":4.18,"z":2.59},{"name":21301,"carat":1.51,"cut":"Fair","color":"H","clarity":"VS2","depth":65,"table":64,"price":9452,"x":7.1,"y":7.03,"z":4.59},{"name":17613,"carat":1.3,"cut":"Very-Good","color":"H","clarity":"VS2","depth":62.5,"table":59,"price":7092,"x":6.93,"y":6.96,"z":4.34},{"name":349,"carat":0.82,"cut":"Ideal","color":"H","clarity":"VS2","depth":61.5,"table":56,"price":2804,"x":6.01,"y":6.08,"z":3.72},{"name":28406,"carat":0.35,"cut":"Premium","color":"D","clarity":"SI2","depth":60.8,"table":58,"price":669,"x":4.57,"y":4.51,"z":2.76},{"name":32137,"carat":0.36,"cut":"Ideal","color":"F","clarity":"VS2","depth":60.5,"table":57,"price":786,"x":4.61,"y":4.65,"z":2.8},{"name":45350,"carat":0.59,"cut":"Ideal","color":"G","clarity":"VS2","depth":62.6,"table":54,"price":1664,"x":5.32,"y":5.38,"z":3.35},{"name":24214,"carat":2.05,"cut":"Very-Good","color":"H","clarity":"SI2","depth":63.1,"table":58,"price":12401,"x":8.05,"y":8,"z":5.07},{"name":15534,"carat":1.47,"cut":"Premium","color":"J","clarity":"SI2","depth":60,"table":58,"price":6223,"x":7.36,"y":7.31,"z":4.4},{"name":3654,"carat":1.01,"cut":"Ideal","color":"F","clarity":"I1","depth":62.2,"table":54,"price":3439,"x":6.44,"y":6.42,"z":4},{"name":16404,"carat":1.28,"cut":"Ideal","color":"G","clarity":"SI2","depth":61.1,"table":58,"price":6548,"x":6.98,"y":7.03,"z":4.28},{"name":49276,"carat":0.54,"cut":"Ideal","color":"G","clarity":"VVS2","depth":62.1,"table":56,"price":2090,"x":5.22,"y":5.19,"z":3.23},{"name":46982,"carat":0.55,"cut":"Premium","color":"D","clarity":"SI1","depth":61.9,"table":60,"price":1815,"x":5.23,"y":5.14,"z":3.21},{"name":42945,"carat":0.3,"cut":"Premium","color":"F","clarity":"SI2","depth":62.6,"table":61,"price":506,"x":4.24,"y":4.2,"z":2.64},{"name":50405,"carat":0.58,"cut":"Ideal","color":"G","clarity":"VVS1","depth":61.3,"table":56,"price":2256,"x":5.36,"y":5.4,"z":3.3},{"name":17138,"carat":1.5,"cut":"Fair","color":"H","clarity":"SI1","depth":65,"table":57,"price":6838,"x":7.1,"y":7.06,"z":4.6},{"name":36607,"carat":0.32,"cut":"Very-Good","color":"G","clarity":"SI1","depth":63,"table":56,"price":477,"x":4.35,"y":4.38,"z":2.75},{"name":28900,"carat":0.3,"cut":"Ideal","color":"G","clarity":"VVS2","depth":61.5,"table":57,"price":684,"x":4.29,"y":4.33,"z":2.65},{"name":45007,"carat":0.54,"cut":"Premium","color":"G","clarity":"VS1","depth":61.1,"table":60,"price":1637,"x":5.23,"y":5.28,"z":3.21},{"name":27114,"carat":1.86,"cut":"Very-Good","color":"H","clarity":"VVS2","depth":58.6,"table":62,"price":17267,"x":8.07,"y":8.14,"z":4.75},{"name":7342,"carat":0.91,"cut":"Good","color":"E","clarity":"SI1","depth":63.5,"table":57,"price":4211,"x":6.07,"y":6.11,"z":3.87},{"name":31233,"carat":0.44,"cut":"Good","color":"F","clarity":"SI1","depth":63.8,"table":54,"price":756,"x":4.8,"y":4.85,"z":3.08},{"name":51634,"carat":0.31,"cut":"Very-Good","color":"H","clarity":"VS1","depth":61.4,"table":61,"price":544,"x":4.33,"y":4.36,"z":2.67},{"name":24304,"carat":1.51,"cut":"Very-Good","color":"G","clarity":"VS2","depth":58.7,"table":63,"price":12551,"x":7.45,"y":7.4,"z":4.36},{"name":22297,"carat":1.27,"cut":"Ideal","color":"G","clarity":"VVS2","depth":62.4,"table":53.3,"price":10342,"x":6.94,"y":6.95,"z":4.33},{"name":42196,"carat":0.59,"cut":"Very-Good","color":"J","clarity":"VS2","depth":61.9,"table":58,"price":1287,"x":5.35,"y":5.38,"z":3.32},{"name":11989,"carat":1.06,"cut":"Ideal","color":"H","clarity":"SI1","depth":62.2,"table":57,"price":5143,"x":6.56,"y":6.49,"z":4.06},{"name":41670,"carat":0.46,"cut":"Ideal","color":"D","clarity":"VS2","depth":62.4,"table":56,"price":1240,"x":4.95,"y":4.98,"z":3.1},{"name":21492,"carat":1.25,"cut":"Ideal","color":"F","clarity":"VS1","depth":62,"table":55,"price":9586,"x":6.91,"y":6.95,"z":4.3},{"name":41253,"carat":0.3,"cut":"Very-Good","color":"F","clarity":"SI1","depth":62.8,"table":56,"price":500,"x":4.24,"y":4.26,"z":2.67},{"name":35901,"carat":0.32,"cut":"Ideal","color":"G","clarity":"IF","depth":61.9,"table":55,"price":918,"x":4.38,"y":4.44,"z":2.73},{"name":26509,"carat":1.73,"cut":"Ideal","color":"F","clarity":"VS1","depth":62.1,"table":57,"price":16131,"x":7.73,"y":7.64,"z":4.77},{"name":28158,"carat":0.3,"cut":"Ideal","color":"H","clarity":"VVS1","depth":62.3,"table":55,"price":665,"x":4.3,"y":4.33,"z":2.69},{"name":43075,"carat":0.6,"cut":"Very-Good","color":"H","clarity":"SI1","depth":60.4,"table":63,"price":1378,"x":5.45,"y":5.41,"z":3.28},{"name":12275,"carat":1.21,"cut":"Very-Good","color":"J","clarity":"VS2","depth":61.5,"table":58,"price":5211,"x":6.85,"y":6.9,"z":4.23},{"name":40070,"carat":0.43,"cut":"Premium","color":"G","clarity":"VS2","depth":62.3,"table":58,"price":1113,"x":4.85,"y":4.81,"z":3.01},{"name":13646,"carat":1.24,"cut":"Very-Good","color":"I","clarity":"SI1","depth":60,"table":59,"price":5584,"x":6.98,"y":7.01,"z":4.2},{"name":48842,"carat":0.55,"cut":"Ideal","color":"D","clarity":"VS2","depth":62.3,"table":55,"price":2030,"x":5.29,"y":5.24,"z":3.28},{"name":19463,"carat":1.56,"cut":"Good","color":"J","clarity":"VS2","depth":62.3,"table":64,"price":8107,"x":7.41,"y":7.36,"z":4.6},{"name":44205,"carat":0.51,"cut":"Very-Good","color":"F","clarity":"VS2","depth":61,"table":58,"price":1569,"x":5.1,"y":5.17,"z":3.13},{"name":32537,"carat":0.27,"cut":"Premium","color":"E","clarity":"VVS2","depth":59,"table":59,"price":799,"x":4.27,"y":4.24,"z":2.51},{"name":28079,"carat":0.4,"cut":"Ideal","color":"J","clarity":"VVS2","depth":61.9,"table":55,"price":662,"x":4.74,"y":4.79,"z":2.95},{"name":11605,"carat":1.95,"cut":"Premium","color":"H","clarity":"I1","depth":60.3,"table":59,"price":5045,"x":8.1,"y":8.05,"z":4.87},{"name":16213,"carat":1.03,"cut":"Premium","color":"G","clarity":"VS1","depth":62.1,"table":59,"price":6479,"x":6.48,"y":6.4,"z":4},{"name":198,"carat":0.7,"cut":"Premium","color":"E","clarity":"SI1","depth":61,"table":58,"price":2777,"x":5.78,"y":5.72,"z":3.51},{"name":51777,"carat":0.7,"cut":"Ideal","color":"F","clarity":"SI1","depth":62.6,"table":55,"price":2410,"x":5.67,"y":5.7,"z":3.56},{"name":13350,"carat":1.02,"cut":"Very-Good","color":"E","clarity":"SI1","depth":63.1,"table":61,"price":5508,"x":6.42,"y":6.35,"z":4.03},{"name":46324,"carat":0.69,"cut":"Very-Good","color":"H","clarity":"SI1","depth":62.5,"table":57.6,"price":1757,"x":5.66,"y":5.72,"z":3.55},{"name":48186,"carat":0.72,"cut":"Premium","color":"J","clarity":"VS2","depth":60.2,"table":59,"price":1944,"x":5.85,"y":5.81,"z":3.51},{"name":15375,"carat":0.36,"cut":"Very-Good","color":"G","clarity":"SI1","depth":61.8,"table":57.8,"price":606,"x":4.52,"y":4.58,"z":2.81},{"name":4511,"carat":1.02,"cut":"Good","color":"F","clarity":"SI2","depth":59.6,"table":64,"price":3633,"x":6.58,"y":6.55,"z":3.91},{"name":9850,"carat":1.01,"cut":"Premium","color":"F","clarity":"SI2","depth":61.9,"table":58,"price":4676,"x":6.39,"y":6.34,"z":3.94},{"name":9359,"carat":1.16,"cut":"Very-Good","color":"I","clarity":"SI1","depth":62.9,"table":58,"price":4586,"x":6.64,"y":6.69,"z":4.19},{"name":29610,"carat":0.35,"cut":"Premium","color":"G","clarity":"VS1","depth":61.2,"table":58,"price":706,"x":4.51,"y":4.54,"z":2.77},{"name":8030,"carat":0.96,"cut":"Ideal","color":"F","clarity":"VS1","depth":61.7,"table":56,"price":4333,"x":6.4,"y":6.34,"z":3.93},{"name":15824,"carat":1.26,"cut":"Ideal","color":"J","clarity":"VS1","depth":62.2,"table":58,"price":6332,"x":6.88,"y":6.92,"z":4.29},{"name":8842,"carat":0.9,"cut":"Good","color":"G","clarity":"VS1","depth":63.9,"table":60,"price":4479,"x":6.09,"y":6.14,"z":3.91},{"name":30086,"carat":0.32,"cut":"Ideal","color":"H","clarity":"VS1","depth":61.3,"table":55,"price":720,"x":4.43,"y":4.41,"z":2.71},{"name":16383,"carat":1.04,"cut":"Very-Good","color":"G","clarity":"VS1","depth":63.2,"table":56,"price":6541,"x":6.39,"y":6.46,"z":4.06},{"name":4945,"carat":1.19,"cut":"Ideal","color":"H","clarity":"I1","depth":61.5,"table":57,"price":3732,"x":6.83,"y":6.79,"z":4.19},{"name":27563,"carat":2.06,"cut":"Ideal","color":"D","clarity":"SI2","depth":60.3,"table":56,"price":18371,"x":8.29,"y":8.25,"z":4.99},{"name":22585,"carat":1.25,"cut":"Ideal","color":"G","clarity":"VVS2","depth":62.5,"table":54,"price":10636,"x":6.88,"y":6.93,"z":4.31},{"name":2199,"carat":0.72,"cut":"Ideal","color":"G","clarity":"VVS2","depth":62.4,"table":57,"price":3139,"x":5.71,"y":5.76,"z":3.58},{"name":11107,"carat":1.05,"cut":"Ideal","color":"D","clarity":"SI2","depth":60.2,"table":57,"price":4932,"x":6.58,"y":6.65,"z":3.98},{"name":30544,"carat":0.31,"cut":"Ideal","color":"D","clarity":"VS2","depth":62.5,"table":56,"price":734,"x":4.29,"y":4.32,"z":2.69},{"name":15196,"carat":1.02,"cut":"Very-Good","color":"I","clarity":"VS2","depth":61.5,"table":57,"price":6104,"x":6.4,"y":6.44,"z":3.95},{"name":53439,"carat":0.7,"cut":"Premium","color":"E","clarity":"VS2","depth":60.8,"table":58,"price":2673,"x":5.7,"y":5.74,"z":3.48},{"name":44886,"carat":0.5,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.2,"table":56,"price":1629,"x":5.12,"y":5.11,"z":3.18},{"name":4021,"carat":0.9,"cut":"Ideal","color":"G","clarity":"SI2","depth":61.2,"table":57,"price":3521,"x":6.24,"y":6.28,"z":3.83},{"name":25537,"carat":2.14,"cut":"Ideal","color":"G","clarity":"SI2","depth":62.9,"table":56,"price":14359,"x":8.18,"y":8.14,"z":5.13},{"name":44606,"carat":0.53,"cut":"Premium","color":"G","clarity":"VS2","depth":62,"table":58,"price":1607,"x":5.21,"y":5.18,"z":3.22},{"name":7821,"carat":1,"cut":"Fair","color":"G","clarity":"SI1","depth":66.2,"table":58,"price":4295,"x":6.25,"y":6.15,"z":4.11},{"name":21578,"carat":1.51,"cut":"Good","color":"H","clarity":"SI1","depth":61.8,"table":62,"price":9681,"x":7.25,"y":7.29,"z":4.49},{"name":21402,"carat":1.5,"cut":"Very-Good","color":"G","clarity":"SI1","depth":62.2,"table":58,"price":9515,"x":7.21,"y":7.28,"z":4.51},{"name":359,"carat":0.72,"cut":"Ideal","color":"G","clarity":"VS2","depth":62.8,"table":56,"price":2805,"x":5.74,"y":5.7,"z":3.59},{"name":43045,"carat":0.51,"cut":"Ideal","color":"H","clarity":"VS2","depth":61.6,"table":55,"price":1375,"x":5.16,"y":5.19,"z":3.19},{"name":31316,"carat":0.32,"cut":"Premium","color":"D","clarity":"VS2","depth":61.7,"table":58,"price":758,"x":4.34,"y":4.38,"z":2.69},{"name":26487,"carat":2.16,"cut":"Very-Good","color":"I","clarity":"VS2","depth":58.6,"table":60,"price":16080,"x":8.48,"y":8.55,"z":4.99},{"name":37415,"carat":0.38,"cut":"Ideal","color":"G","clarity":"VS2","depth":62.2,"table":56,"price":983,"x":4.64,"y":4.62,"z":2.88},{"name":24653,"carat":1.7,"cut":"Premium","color":"H","clarity":"VS2","depth":61.9,"table":60,"price":12992,"x":7.61,"y":7.57,"z":4.7},{"name":44128,"carat":0.5,"cut":"Premium","color":"E","clarity":"VS2","depth":62.1,"table":62,"price":1559,"x":5.1,"y":5.08,"z":3.16},{"name":53043,"carat":0.73,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.5,"table":55,"price":2605,"x":5.79,"y":5.84,"z":3.57},{"name":28087,"carat":0.3,"cut":"Very-Good","color":"D","clarity":"SI1","depth":63.1,"table":56,"price":662,"x":4.28,"y":4.24,"z":2.69},{"name":8018,"carat":1.04,"cut":"Premium","color":"D","clarity":"SI2","depth":58.2,"table":59,"price":4330,"x":6.67,"y":6.62,"z":3.87},{"name":33934,"carat":0.33,"cut":"Premium","color":"I","clarity":"VS2","depth":62,"table":60,"price":463,"x":4.41,"y":4.46,"z":2.75},{"name":18975,"carat":1.59,"cut":"Premium","color":"J","clarity":"VS2","depth":62.6,"table":59,"price":7811,"x":7.43,"y":7.45,"z":4.66},{"name":41641,"carat":0.4,"cut":"Ideal","color":"H","clarity":"IF","depth":62.7,"table":57,"price":1238,"x":4.7,"y":4.68,"z":2.94},{"name":11851,"carat":0.9,"cut":"Very-Good","color":"G","clarity":"VVS2","depth":59.8,"table":60,"price":5102,"x":6.23,"y":6.28,"z":3.74},{"name":3599,"carat":0.9,"cut":"Good","color":"D","clarity":"SI2","depth":63.5,"table":62,"price":3425,"x":6.09,"y":6.13,"z":3.88},{"name":18389,"carat":0.29,"cut":"Very-Good","color":"E","clarity":"VS1","depth":59.2,"table":58,"price":619,"x":4.36,"y":4.39,"z":2.59},{"name":15110,"carat":1.01,"cut":"Very-Good","color":"F","clarity":"VS2","depth":62.3,"table":59,"price":6073,"x":6.37,"y":6.44,"z":3.99},{"name":7929,"carat":0.93,"cut":"Ideal","color":"H","clarity":"SI1","depth":61.7,"table":55,"price":4317,"x":6.26,"y":6.29,"z":3.87},{"name":522,"carat":0.71,"cut":"Premium","color":"G","clarity":"VS1","depth":62.2,"table":59,"price":2825,"x":5.73,"y":5.66,"z":3.54},{"name":51041,"carat":0.82,"cut":"Premium","color":"E","clarity":"SI2","depth":60,"table":56,"price":2329,"x":6.11,"y":6.08,"z":3.66},{"name":8110,"carat":1.13,"cut":"Very-Good","color":"I","clarity":"VS2","depth":61.6,"table":57,"price":4348,"x":6.73,"y":6.78,"z":4.16},{"name":19815,"carat":1.2,"cut":"Good","color":"E","clarity":"VS2","depth":63.6,"table":57,"price":8380,"x":6.74,"y":6.68,"z":4.27},{"name":574,"carat":0.85,"cut":"Ideal","color":"H","clarity":"SI2","depth":62.5,"table":57,"price":2833,"x":6.02,"y":6.07,"z":3.78},{"name":40660,"carat":0.38,"cut":"Ideal","color":"E","clarity":"VVS1","depth":61.5,"table":56,"price":1154,"x":4.67,"y":4.7,"z":2.88},{"name":12900,"carat":0.9,"cut":"Ideal","color":"E","clarity":"SI1","depth":61.9,"table":54,"price":5373,"x":6.19,"y":6.22,"z":3.84},{"name":22739,"carat":1.01,"cut":"Very-Good","color":"E","clarity":"VVS1","depth":63.1,"table":59,"price":10760,"x":6.34,"y":6.31,"z":3.99},{"name":13187,"carat":1.24,"cut":"Ideal","color":"J","clarity":"VS2","depth":62.8,"table":56,"price":5451,"x":6.83,"y":6.8,"z":4.28},{"name":19103,"carat":1.01,"cut":"Ideal","color":"F","clarity":"VS1","depth":61.1,"table":59,"price":7870,"x":6.46,"y":6.5,"z":3.96},{"name":40688,"carat":0.5,"cut":"Fair","color":"F","clarity":"SI2","depth":61.1,"table":67,"price":1156,"x":5.07,"y":5.04,"z":3.09},{"name":22319,"carat":1.31,"cut":"Ideal","color":"G","clarity":"VS1","depth":62,"table":58,"price":10359,"x":6.97,"y":7.02,"z":4.34},{"name":53810,"carat":0.7,"cut":"Ideal","color":"H","clarity":"VS2","depth":61.4,"table":56,"price":2733,"x":5.72,"y":5.75,"z":3.52},{"name":19096,"carat":1.11,"cut":"Good","color":"D","clarity":"VS2","depth":63.2,"table":57,"price":7863,"x":6.61,"y":6.64,"z":4.18},{"name":8031,"carat":1,"cut":"Premium","color":"F","clarity":"SI2","depth":62.9,"table":56,"price":4333,"x":6.42,"y":6.36,"z":4.02},{"name":36299,"carat":0.34,"cut":"Premium","color":"E","clarity":"SI2","depth":61.7,"table":58,"price":477,"x":4.5,"y":4.54,"z":2.79},{"name":23883,"carat":2,"cut":"Premium","color":"H","clarity":"SI2","depth":62.8,"table":57,"price":11975,"x":8.05,"y":8.01,"z":5.04},{"name":41216,"carat":0.4,"cut":"Ideal","color":"F","clarity":"VVS1","depth":61.5,"table":56,"price":1206,"x":4.77,"y":4.73,"z":2.92},{"name":9608,"carat":1.02,"cut":"Premium","color":"G","clarity":"SI1","depth":62.3,"table":59,"price":4633,"x":6.4,"y":6.44,"z":4},{"name":19038,"carat":0.3,"cut":"Ideal","color":"F","clarity":"VS1","depth":61.6,"table":54,"price":621,"x":4.32,"y":4.35,"z":2.67},{"name":5632,"carat":0.9,"cut":"Very-Good","color":"H","clarity":"VS2","depth":62.8,"table":58,"price":3878,"x":6.13,"y":6.17,"z":3.86},{"name":49156,"carat":0.5,"cut":"Ideal","color":"G","clarity":"VVS1","depth":62.7,"table":57,"price":2070,"x":5.1,"y":5.07,"z":3.19},{"name":5298,"carat":0.71,"cut":"Ideal","color":"D","clarity":"VS1","depth":62.1,"table":57,"price":3801,"x":5.7,"y":5.73,"z":3.55},{"name":2119,"carat":1.02,"cut":"Fair","color":"J","clarity":"SI2","depth":65,"table":59,"price":3119,"x":6.34,"y":6.24,"z":4.08},{"name":51094,"carat":0.71,"cut":"Ideal","color":"F","clarity":"SI1","depth":60.9,"table":56,"price":2335,"x":5.79,"y":5.81,"z":3.53},{"name":47439,"carat":0.7,"cut":"Very-Good","color":"J","clarity":"VS1","depth":59.6,"table":62,"price":1855,"x":5.7,"y":5.77,"z":3.42},{"name":25418,"carat":2.01,"cut":"Very-Good","color":"H","clarity":"SI2","depth":63.2,"table":57,"price":14150,"x":8.02,"y":7.97,"z":5.05},{"name":13123,"carat":1.01,"cut":"Fair","color":"D","clarity":"SI1","depth":64.7,"table":57,"price":5430,"x":6.33,"y":6.25,"z":4.07},{"name":18873,"carat":1.02,"cut":"Very-Good","color":"F","clarity":"VS1","depth":61.3,"table":58,"price":7740,"x":6.46,"y":6.52,"z":3.98},{"name":42092,"carat":0.7,"cut":"Fair","color":"E","clarity":"I1","depth":66.1,"table":58,"price":1273,"x":5.61,"y":5.51,"z":3.67},{"name":50627,"carat":0.3,"cut":"Ideal","color":"E","clarity":"SI2","depth":60.9,"table":59,"price":401,"x":4.29,"y":4.32,"z":2.62},{"name":47097,"carat":0.53,"cut":"Very-Good","color":"D","clarity":"VS2","depth":63.4,"table":55,"price":1825,"x":5.23,"y":5.11,"z":3.28},{"name":10005,"carat":0.91,"cut":"Ideal","color":"E","clarity":"SI1","depth":61,"table":57,"price":4706,"x":6.27,"y":6.32,"z":3.84},{"name":1113,"carat":0.77,"cut":"Very-Good","color":"G","clarity":"SI1","depth":63.6,"table":57,"price":2915,"x":5.79,"y":5.88,"z":3.71},{"name":23701,"carat":0.36,"cut":"Ideal","color":"E","clarity":"SI1","depth":62.1,"table":56,"price":631,"x":4.56,"y":4.59,"z":2.84},{"name":24794,"carat":1.31,"cut":"Ideal","color":"G","clarity":"VVS2","depth":60.3,"table":56,"price":13168,"x":7.09,"y":7.15,"z":4.29},{"name":44441,"carat":0.59,"cut":"Premium","color":"D","clarity":"SI2","depth":62.6,"table":61,"price":1590,"x":5.33,"y":5.27,"z":3.32},{"name":46988,"carat":0.46,"cut":"Ideal","color":"E","clarity":"VVS1","depth":62.6,"table":53,"price":1816,"x":4.93,"y":4.97,"z":3.1},{"name":12448,"carat":1.12,"cut":"Very-Good","color":"D","clarity":"SI2","depth":59.3,"table":59,"price":5243,"x":6.76,"y":6.8,"z":4.02},{"name":19749,"carat":1.5,"cut":"Premium","color":"E","clarity":"SI2","depth":62.7,"table":59,"price":8316,"x":7.3,"y":7.22,"z":4.55},{"name":45142,"carat":0.46,"cut":"Ideal","color":"G","clarity":"IF","depth":62.1,"table":56,"price":1654,"x":4.93,"y":4.96,"z":3.07},{"name":47696,"carat":0.5,"cut":"Ideal","color":"G","clarity":"VVS1","depth":61.9,"table":58,"price":1883,"x":5.06,"y":5.09,"z":3.14},{"name":49860,"carat":0.77,"cut":"Premium","color":"E","clarity":"SI2","depth":62.5,"table":60,"price":2171,"x":5.84,"y":5.8,"z":3.64},{"name":7552,"carat":1.01,"cut":"Very-Good","color":"G","clarity":"SI2","depth":62,"table":58,"price":4249,"x":6.37,"y":6.41,"z":3.96},{"name":17985,"carat":1.07,"cut":"Ideal","color":"G","clarity":"VS2","depth":61.9,"table":55,"price":7275,"x":6.55,"y":6.57,"z":4.06},{"name":16685,"carat":0.31,"cut":"Ideal","color":"H","clarity":"SI2","depth":61.1,"table":56,"price":421,"x":4.4,"y":4.42,"z":2.69},{"name":15057,"carat":0.3,"cut":"Ideal","color":"G","clarity":"VS1","depth":61.4,"table":57,"price":605,"x":4.29,"y":4.34,"z":2.65},{"name":35526,"carat":0.32,"cut":"Ideal","color":"H","clarity":"VVS1","depth":61.3,"table":56,"price":905,"x":4.42,"y":4.45,"z":2.72},{"name":53148,"carat":0.73,"cut":"Very-Good","color":"I","clarity":"VVS1","depth":61.9,"table":57,"price":2623,"x":5.75,"y":5.79,"z":3.57},{"name":31634,"carat":0.3,"cut":"Ideal","color":"H","clarity":"SI1","depth":62,"table":56,"price":450,"x":4.29,"y":4.32,"z":2.67},{"name":44034,"carat":0.42,"cut":"Ideal","color":"D","clarity":"VVS1","depth":61.8,"table":55,"price":1547,"x":4.83,"y":4.85,"z":2.99},{"name":27518,"carat":3.01,"cut":"Good","color":"I","clarity":"SI2","depth":63.9,"table":60,"price":18242,"x":9.06,"y":9.01,"z":5.77},{"name":53135,"carat":0.93,"cut":"Very-Good","color":"D","clarity":"I1","depth":63.4,"table":60,"price":2618,"x":6.18,"y":6.15,"z":3.91},{"name":28628,"carat":0.28,"cut":"Very-Good","color":"E","clarity":"VS1","depth":62.8,"table":60,"price":434,"x":4.16,"y":4.21,"z":2.63},{"name":15574,"carat":1.3,"cut":"Premium","color":"I","clarity":"VS2","depth":62.7,"table":58,"price":6246,"x":6.97,"y":6.9,"z":4.35},{"name":52834,"carat":0.7,"cut":"Premium","color":"F","clarity":"VS2","depth":62,"table":56,"price":2573,"x":5.72,"y":5.67,"z":3.53},{"name":7347,"carat":1.09,"cut":"Ideal","color":"H","clarity":"SI2","depth":61.5,"table":55,"price":4212,"x":6.65,"y":6.68,"z":4.1},{"name":53637,"carat":0.3,"cut":"Ideal","color":"D","clarity":"SI1","depth":61.6,"table":57,"price":552,"x":4.28,"y":4.32,"z":2.65},{"name":32902,"carat":0.36,"cut":"Fair","color":"F","clarity":"VS1","depth":55.3,"table":67,"price":810,"x":4.79,"y":4.72,"z":2.63},{"name":39665,"carat":0.42,"cut":"Premium","color":"G","clarity":"VS2","depth":60.1,"table":61,"price":1087,"x":4.84,"y":4.81,"z":2.9},{"name":47149,"carat":0.53,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.7,"table":57,"price":1832,"x":5.23,"y":5.21,"z":3.22},{"name":46510,"carat":0.57,"cut":"Ideal","color":"I","clarity":"IF","depth":61,"table":55,"price":1779,"x":5.38,"y":5.41,"z":3.29},{"name":2072,"carat":0.9,"cut":"Good","color":"I","clarity":"VS2","depth":62.4,"table":65,"price":3107,"x":6.12,"y":6.09,"z":3.81},{"name":12517,"carat":1.01,"cut":"Very-Good","color":"H","clarity":"VS2","depth":63.1,"table":59,"price":5260,"x":6.34,"y":6.3,"z":3.99},{"name":15094,"carat":1.01,"cut":"Ideal","color":"G","clarity":"VS1","depth":62.4,"table":56,"price":6066,"x":6.37,"y":6.42,"z":3.99},{"name":24659,"carat":1.5,"cut":"Very-Good","color":"F","clarity":"VS2","depth":61.9,"table":60,"price":13001,"x":7.29,"y":7.32,"z":4.52},{"name":6714,"carat":0.3,"cut":"Very-Good","color":"G","clarity":"SI1","depth":60.1,"table":58,"price":413,"x":4.31,"y":4.34,"z":2.6},{"name":33485,"carat":0.32,"cut":"Premium","color":"F","clarity":"VS2","depth":61.4,"table":60,"price":828,"x":4.42,"y":4.38,"z":2.7},{"name":48763,"carat":0.6,"cut":"Premium","color":"E","clarity":"SI1","depth":59.6,"table":59,"price":2016,"x":5.52,"y":5.48,"z":3.28},{"name":4583,"carat":1,"cut":"Good","color":"G","clarity":"SI2","depth":57.8,"table":64,"price":3651,"x":6.55,"y":6.5,"z":3.77},{"name":26154,"carat":2.18,"cut":"Premium","color":"J","clarity":"VS2","depth":60.1,"table":58,"price":15465,"x":8.46,"y":8.41,"z":5.07},{"name":8085,"carat":1.01,"cut":"Premium","color":"D","clarity":"SI2","depth":62.6,"table":60,"price":4338,"x":6.4,"y":6.37,"z":4},{"name":51826,"carat":0.64,"cut":"Ideal","color":"H","clarity":"IF","depth":60.5,"table":57,"price":2420,"x":5.58,"y":5.62,"z":3.39},{"name":1117,"carat":0.93,"cut":"Ideal","color":"I","clarity":"SI1","depth":62,"table":57,"price":2917,"x":6.22,"y":6.26,"z":3.87},{"name":52893,"carat":0.73,"cut":"Very-Good","color":"G","clarity":"SI1","depth":60.6,"table":59,"price":2585,"x":5.83,"y":5.85,"z":3.54},{"name":19444,"carat":1.06,"cut":"Ideal","color":"G","clarity":"VS1","depth":61.7,"table":57,"price":8093,"x":6.52,"y":6.57,"z":4.04},{"name":49022,"carat":0.5,"cut":"Good","color":"F","clarity":"VVS2","depth":58.5,"table":62,"price":2052,"x":5.23,"y":5.27,"z":3.07},{"name":4410,"carat":0.31,"cut":"Ideal","color":"D","clarity":"SI1","depth":61.5,"table":56,"price":571,"x":4.33,"y":4.35,"z":2.67},{"name":11949,"carat":1.01,"cut":"Very-Good","color":"E","clarity":"SI1","depth":58.2,"table":59,"price":5132,"x":6.54,"y":6.59,"z":3.82},{"name":35367,"carat":0.38,"cut":"Premium","color":"H","clarity":"VS2","depth":63,"table":56,"price":898,"x":4.61,"y":4.57,"z":2.89},{"name":44863,"carat":0.51,"cut":"Very-Good","color":"H","clarity":"VS1","depth":62.3,"table":56,"price":1628,"x":5.1,"y":5.13,"z":3.18},{"name":9286,"carat":0.91,"cut":"Good","color":"H","clarity":"VS1","depth":57.8,"table":61,"price":4566,"x":6.4,"y":6.36,"z":3.69},{"name":17140,"carat":1.24,"cut":"Premium","color":"D","clarity":"SI2","depth":61.4,"table":59,"price":6840,"x":6.87,"y":6.91,"z":4.23},{"name":12365,"carat":0.26,"cut":"Very-Good","color":"D","clarity":"VVS2","depth":60.4,"table":59,"price":597,"x":4.15,"y":4.19,"z":2.52},{"name":4309,"carat":1.05,"cut":"Premium","color":"J","clarity":"VS2","depth":59.4,"table":62,"price":3593,"x":6.66,"y":6.58,"z":3.93},{"name":43274,"carat":0.3,"cut":"Very-Good","color":"I","clarity":"SI1","depth":63.3,"table":59,"price":506,"x":4.3,"y":4.23,"z":2.7},{"name":37781,"carat":0.39,"cut":"Very-Good","color":"F","clarity":"VS1","depth":57.1,"table":61,"price":1000,"x":4.86,"y":4.91,"z":2.79},{"name":11263,"carat":0.91,"cut":"Premium","color":"E","clarity":"VS1","depth":62.8,"table":60,"price":4969,"x":6.11,"y":6.08,"z":3.83},{"name":4558,"carat":0.9,"cut":"Good","color":"I","clarity":"VS1","depth":63.3,"table":59,"price":3644,"x":6.06,"y":6.1,"z":3.85},{"name":5082,"carat":0.9,"cut":"Fair","color":"D","clarity":"SI1","depth":65.7,"table":65,"price":3751,"x":6.06,"y":5.94,"z":3.94},{"name":47326,"carat":0.23,"cut":"Very-Good","color":"D","clarity":"VVS2","depth":62.6,"table":58,"price":530,"x":3.89,"y":3.94,"z":2.45},{"name":6256,"carat":0.92,"cut":"Very-Good","color":"E","clarity":"SI2","depth":62.1,"table":58,"price":4011,"x":6.18,"y":6.22,"z":3.85},{"name":42144,"carat":0.5,"cut":"Very-Good","color":"E","clarity":"SI1","depth":60.7,"table":59,"price":1281,"x":5.09,"y":5.13,"z":3.1},{"name":418,"carat":0.36,"cut":"Ideal","color":"I","clarity":"VS2","depth":61.9,"table":56,"price":556,"x":4.54,"y":4.57,"z":2.82},{"name":14065,"carat":0.3,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.8,"table":57,"price":605,"x":4.31,"y":4.33,"z":2.67},{"name":24984,"carat":2.07,"cut":"Very-Good","color":"J","clarity":"VS2","depth":61.3,"table":56,"price":13495,"x":8.16,"y":8.2,"z":5.02},{"name":14917,"carat":1.23,"cut":"Ideal","color":"G","clarity":"SI2","depth":58.8,"table":60,"price":6005,"x":7.01,"y":7.08,"z":4.14},{"name":21186,"carat":1.5,"cut":"Good","color":"H","clarity":"SI1","depth":60.8,"table":60,"price":9336,"x":7.28,"y":7.38,"z":4.46},{"name":50869,"carat":0.71,"cut":"Ideal","color":"H","clarity":"SI1","depth":62.1,"table":57,"price":2313,"x":5.68,"y":5.73,"z":3.54},{"name":48614,"carat":0.51,"cut":"Ideal","color":"F","clarity":"VVS2","depth":61.7,"table":56,"price":1998,"x":5.12,"y":5.15,"z":3.17},{"name":19810,"carat":1,"cut":"Good","color":"D","clarity":"VVS2","depth":60.2,"table":62,"price":8374,"x":6.42,"y":6.46,"z":3.88},{"name":53178,"carat":0.71,"cut":"Premium","color":"E","clarity":"VS2","depth":61.3,"table":59,"price":2630,"x":5.7,"y":5.76,"z":3.51},{"name":3942,"carat":0.7,"cut":"Premium","color":"D","clarity":"VS1","depth":61,"table":59,"price":3501,"x":5.79,"y":5.72,"z":3.51},{"name":33350,"carat":0.41,"cut":"Ideal","color":"G","clarity":"VS2","depth":62.4,"table":55,"price":827,"x":4.73,"y":4.76,"z":2.96},{"name":16355,"carat":0.3,"cut":"Premium","color":"H","clarity":"VS2","depth":62.7,"table":59,"price":608,"x":4.27,"y":4.22,"z":2.66},{"name":48815,"carat":0.56,"cut":"Ideal","color":"D","clarity":"VS1","depth":61.7,"table":56,"price":2026,"x":5.33,"y":5.3,"z":3.28},{"name":36379,"carat":0.34,"cut":"Ideal","color":"F","clarity":"IF","depth":62.2,"table":55,"price":941,"x":4.47,"y":4.5,"z":2.79},{"name":23233,"carat":1.52,"cut":"Good","color":"G","clarity":"VS2","depth":63.3,"table":57,"price":11235,"x":7.27,"y":7.32,"z":4.62},{"name":16735,"carat":0.41,"cut":"Premium","color":"J","clarity":"VS2","depth":61.9,"table":59,"price":611,"x":4.69,"y":4.74,"z":2.92},{"name":3305,"carat":0.8,"cut":"Very-Good","color":"F","clarity":"VS2","depth":63.2,"table":55,"price":3369,"x":5.9,"y":5.88,"z":3.72},{"name":32639,"carat":0.32,"cut":"Ideal","color":"G","clarity":"SI2","depth":61.6,"table":56,"price":459,"x":4.4,"y":4.43,"z":2.72},{"name":16684,"carat":0.31,"cut":"Ideal","color":"I","clarity":"VS2","depth":61.2,"table":55,"price":421,"x":4.36,"y":4.4,"z":2.68},{"name":3527,"carat":0.9,"cut":"Very-Good","color":"I","clarity":"SI1","depth":61.8,"table":56,"price":3407,"x":6.19,"y":6.24,"z":3.84},{"name":19343,"carat":1.06,"cut":"Premium","color":"E","clarity":"VS1","depth":63,"table":58,"price":8044,"x":6.49,"y":6.46,"z":4.08},{"name":26878,"carat":1.4,"cut":"Ideal","color":"F","clarity":"VVS1","depth":61.9,"table":57,"price":16808,"x":7.2,"y":7.14,"z":4.44},{"name":8751,"carat":1.09,"cut":"Ideal","color":"J","clarity":"SI1","depth":62.7,"table":57,"price":4465,"x":6.53,"y":6.59,"z":4.11},{"name":8286,"carat":1,"cut":"Very-Good","color":"F","clarity":"SI2","depth":62.2,"table":55,"price":4383,"x":6.39,"y":6.44,"z":3.99},{"name":51952,"carat":0.56,"cut":"Very-Good","color":"E","clarity":"VVS2","depth":60.5,"table":57,"price":2442,"x":5.32,"y":5.36,"z":3.23},{"name":34442,"carat":0.31,"cut":"Ideal","color":"E","clarity":"VVS2","depth":60.9,"table":55,"price":864,"x":4.42,"y":4.45,"z":2.7},{"name":7014,"carat":0.9,"cut":"Premium","color":"F","clarity":"SI1","depth":61.2,"table":59,"price":4158,"x":6.19,"y":6.16,"z":3.78},{"name":13269,"carat":1,"cut":"Good","color":"G","clarity":"VS2","depth":63.7,"table":57,"price":5484,"x":6.32,"y":6.28,"z":4.01},{"name":49554,"carat":0.77,"cut":"Premium","color":"G","clarity":"SI2","depth":61.3,"table":58,"price":2129,"x":5.94,"y":5.88,"z":3.62},{"name":52752,"carat":0.7,"cut":"Fair","color":"D","clarity":"VS2","depth":65.2,"table":59,"price":2560,"x":5.58,"y":5.55,"z":3.63},{"name":12404,"carat":1.01,"cut":"Good","color":"E","clarity":"SI1","depth":57.9,"table":57,"price":5233,"x":6.6,"y":6.67,"z":3.84},{"name":35073,"carat":0.38,"cut":"Very-Good","color":"G","clarity":"VS1","depth":57.1,"table":63,"price":886,"x":4.77,"y":4.86,"z":2.75},{"name":37003,"carat":0.55,"cut":"Very-Good","color":"J","clarity":"SI1","depth":62.5,"table":57,"price":965,"x":5.22,"y":5.24,"z":3.27},{"name":31874,"carat":0.3,"cut":"Very-Good","color":"H","clarity":"VVS2","depth":63.1,"table":60,"price":776,"x":4.28,"y":4.24,"z":2.69},{"name":51509,"carat":0.55,"cut":"Ideal","color":"G","clarity":"IF","depth":61.1,"table":57,"price":2383,"x":5.26,"y":5.31,"z":3.23},{"name":24459,"carat":2.14,"cut":"Ideal","color":"H","clarity":"SI2","depth":63,"table":55,"price":12720,"x":8.25,"y":8.23,"z":5.19},{"name":14906,"carat":1.01,"cut":"Premium","color":"G","clarity":"VS2","depth":62.4,"table":58,"price":5999,"x":6.38,"y":6.41,"z":3.99},{"name":39677,"carat":0.41,"cut":"Ideal","color":"E","clarity":"VS2","depth":62.2,"table":56,"price":1087,"x":4.8,"y":4.75,"z":2.97},{"name":31151,"carat":0.41,"cut":"Ideal","color":"F","clarity":"SI1","depth":62.7,"table":57,"price":755,"x":4.7,"y":4.74,"z":2.96},{"name":40816,"carat":0.32,"cut":"Ideal","color":"E","clarity":"IF","depth":62.6,"table":55,"price":1170,"x":4.41,"y":4.38,"z":2.75},{"name":8358,"carat":1.02,"cut":"Ideal","color":"H","clarity":"SI2","depth":60.7,"table":57,"price":4398,"x":6.54,"y":6.51,"z":3.96},{"name":13997,"carat":1.19,"cut":"Very-Good","color":"H","clarity":"SI1","depth":63.3,"table":55,"price":5698,"x":6.76,"y":6.69,"z":4.26},{"name":37791,"carat":0.38,"cut":"Premium","color":"E","clarity":"VS1","depth":60.2,"table":58,"price":1000,"x":4.66,"y":4.71,"z":2.82},{"name":29983,"carat":0.43,"cut":"Ideal","color":"I","clarity":"VS2","depth":62,"table":55,"price":716,"x":4.84,"y":4.87,"z":3.01},{"name":8025,"carat":1.04,"cut":"Very-Good","color":"H","clarity":"SI2","depth":60.2,"table":60,"price":4332,"x":6.52,"y":6.57,"z":3.94},{"name":19245,"carat":1,"cut":"Ideal","color":"G","clarity":"VVS2","depth":62.8,"table":57,"price":7979,"x":6.37,"y":6.43,"z":4.02},{"name":7650,"carat":0.9,"cut":"Very-Good","color":"G","clarity":"VS2","depth":61.9,"table":56,"price":4269,"x":6.17,"y":6.23,"z":3.84},{"name":7293,"carat":0.91,"cut":"Premium","color":"H","clarity":"VS2","depth":61.9,"table":59,"price":4201,"x":6.18,"y":6.23,"z":3.84},{"name":38677,"carat":0.3,"cut":"Ideal","color":"D","clarity":"VVS2","depth":61.4,"table":55,"price":1041,"x":4.34,"y":4.36,"z":2.67},{"name":7857,"carat":0.9,"cut":"Premium","color":"D","clarity":"SI1","depth":62.7,"table":58,"price":4304,"x":6.15,"y":6.09,"z":3.84},{"name":26152,"carat":1.59,"cut":"Premium","color":"F","clarity":"VS2","depth":60.2,"table":60,"price":15461,"x":7.59,"y":7.62,"z":4.58},{"name":33184,"carat":0.41,"cut":"Very-Good","color":"D","clarity":"SI2","depth":63.1,"table":54,"price":818,"x":4.75,"y":4.72,"z":2.99},{"name":50219,"carat":0.7,"cut":"Premium","color":"F","clarity":"SI1","depth":61.9,"table":58,"price":2230,"x":5.69,"y":5.74,"z":3.54},{"name":953,"carat":0.74,"cut":"Ideal","color":"F","clarity":"SI1","depth":61.2,"table":56,"price":2889,"x":5.83,"y":5.87,"z":3.58},{"name":36020,"carat":0.39,"cut":"Premium","color":"J","clarity":"VVS1","depth":62.8,"table":58,"price":921,"x":4.66,"y":4.61,"z":2.91},{"name":22495,"carat":2,"cut":"Premium","color":"I","clarity":"SI2","depth":62.3,"table":57,"price":10528,"x":8.12,"y":8.05,"z":5.03},{"name":49933,"carat":0.7,"cut":"Premium","color":"H","clarity":"VS2","depth":62.2,"table":58,"price":2184,"x":5.74,"y":5.68,"z":3.55},{"name":45578,"carat":0.52,"cut":"Very-Good","color":"G","clarity":"VS1","depth":61.7,"table":56,"price":1689,"x":5.17,"y":5.21,"z":3.2},{"name":36476,"carat":0.43,"cut":"Ideal","color":"G","clarity":"VS1","depth":61.3,"table":57,"price":943,"x":4.85,"y":4.88,"z":2.98},{"name":46118,"carat":0.56,"cut":"Premium","color":"I","clarity":"VVS1","depth":60.6,"table":59,"price":1743,"x":5.33,"y":5.29,"z":3.22},{"name":18425,"carat":1,"cut":"Good","color":"G","clarity":"VVS2","depth":60.9,"table":56,"price":7492,"x":6.49,"y":6.52,"z":3.96},{"name":20052,"carat":0.31,"cut":"Very-Good","color":"G","clarity":"VS1","depth":62.9,"table":58,"price":625,"x":4.3,"y":4.35,"z":2.72},{"name":23070,"carat":1.18,"cut":"Ideal","color":"E","clarity":"VS1","depth":61.4,"table":57,"price":11104,"x":6.77,"y":6.81,"z":4.17},{"name":5621,"carat":0.9,"cut":"Fair","color":"E","clarity":"VS2","depth":65.2,"table":61,"price":3875,"x":6.01,"y":5.98,"z":3.91},{"name":23086,"carat":1.22,"cut":"Ideal","color":"G","clarity":"IF","depth":61.7,"table":56,"price":11111,"x":6.87,"y":6.91,"z":4.25},{"name":32452,"carat":0.39,"cut":"Very-Good","color":"E","clarity":"VS2","depth":60.9,"table":58,"price":793,"x":4.72,"y":4.77,"z":2.89},{"name":51242,"carat":0.71,"cut":"Very-Good","color":"H","clarity":"SI1","depth":62.1,"table":61,"price":2354,"x":5.63,"y":5.71,"z":3.52},{"name":29987,"carat":0.32,"cut":"Ideal","color":"F","clarity":"VS1","depth":61.9,"table":57,"price":716,"x":4.38,"y":4.41,"z":2.72},{"name":33731,"carat":0.35,"cut":"Ideal","color":"H","clarity":"VVS1","depth":60.5,"table":57,"price":839,"x":4.58,"y":4.59,"z":2.77},{"name":26961,"carat":1.54,"cut":"Ideal","color":"F","clarity":"VS2","depth":61,"table":56,"price":17029,"x":7.44,"y":7.49,"z":4.55},{"name":18070,"carat":1.03,"cut":"Ideal","color":"F","clarity":"VS1","depth":60.7,"table":56,"price":7296,"x":6.54,"y":6.6,"z":3.99},{"name":26610,"carat":2.1,"cut":"Premium","color":"F","clarity":"SI2","depth":62.1,"table":59,"price":16357,"x":8.16,"y":8.18,"z":5.07},{"name":6364,"carat":0.32,"cut":"Ideal","color":"I","clarity":"VS2","depth":63,"table":55,"price":576,"x":4.39,"y":4.34,"z":2.75},{"name":25341,"carat":2,"cut":"Good","color":"H","clarity":"VS2","depth":57.3,"table":59,"price":14042,"x":8.27,"y":8.24,"z":4.73},{"name":51779,"carat":0.61,"cut":"Very-Good","color":"G","clarity":"IF","depth":63,"table":58,"price":2411,"x":5.36,"y":5.43,"z":3.4},{"name":16733,"carat":0.4,"cut":"Very-Good","color":"E","clarity":"SI2","depth":61.6,"table":55,"price":611,"x":4.75,"y":4.83,"z":2.95},{"name":35767,"carat":0.4,"cut":"Premium","color":"E","clarity":"VS2","depth":60.7,"table":60,"price":912,"x":4.7,"y":4.75,"z":2.87},{"name":50150,"carat":0.71,"cut":"Good","color":"E","clarity":"SI2","depth":57.8,"table":60,"price":2215,"x":5.86,"y":5.83,"z":3.38},{"name":31875,"carat":0.3,"cut":"Good","color":"H","clarity":"VVS2","depth":63.6,"table":55,"price":776,"x":4.28,"y":4.24,"z":2.71},{"name":45135,"carat":0.56,"cut":"Premium","color":"H","clarity":"VS1","depth":59.8,"table":62,"price":1653,"x":5.36,"y":5.31,"z":3.19},{"name":6666,"carat":1.11,"cut":"Premium","color":"G","clarity":"SI1","depth":60.9,"table":59,"price":4096,"x":6.69,"y":6.64,"z":4.07},{"name":16061,"carat":1.01,"cut":"Premium","color":"F","clarity":"VS2","depth":59.2,"table":60,"price":6416,"x":6.51,"y":6.54,"z":3.86},{"name":31800,"carat":0.42,"cut":"Ideal","color":"I","clarity":"VS1","depth":62,"table":55,"price":773,"x":4.83,"y":4.85,"z":3},{"name":43689,"carat":0.5,"cut":"Good","color":"D","clarity":"SI1","depth":62.9,"table":59,"price":1436,"x":4.94,"y":5.01,"z":3.13},{"name":4105,"carat":1,"cut":"Good","color":"J","clarity":"SI2","depth":57.8,"table":61,"price":3536,"x":6.54,"y":6.58,"z":3.79},{"name":51131,"carat":0.58,"cut":"Ideal","color":"F","clarity":"VVS2","depth":62,"table":55,"price":2340,"x":5.32,"y":5.4,"z":3.31},{"name":8914,"carat":1.05,"cut":"Ideal","color":"I","clarity":"SI1","depth":61,"table":57,"price":4494,"x":6.55,"y":6.62,"z":4.02},{"name":40374,"carat":0.43,"cut":"Premium","color":"E","clarity":"VS1","depth":62.3,"table":58,"price":1131,"x":4.78,"y":4.82,"z":2.99},{"name":22527,"carat":1.01,"cut":"Good","color":"E","clarity":"VVS1","depth":63.1,"table":59,"price":10567,"x":6.31,"y":6.34,"z":3.99},{"name":51692,"carat":0.7,"cut":"Fair","color":"F","clarity":"VS1","depth":55.9,"table":62,"price":2399,"x":5.94,"y":5.83,"z":3.29},{"name":35824,"carat":0.31,"cut":"Ideal","color":"F","clarity":"IF","depth":62.2,"table":54,"price":914,"x":4.37,"y":4.41,"z":2.73},{"name":10987,"carat":1.01,"cut":"Very-Good","color":"E","clarity":"SI1","depth":62.6,"table":57,"price":4912,"x":6.36,"y":6.41,"z":4},{"name":52052,"carat":0.72,"cut":"Good","color":"I","clarity":"VS1","depth":61.3,"table":63,"price":2451,"x":5.67,"y":5.75,"z":3.5},{"name":22500,"carat":1.28,"cut":"Ideal","color":"G","clarity":"VS1","depth":62.1,"table":56,"price":10537,"x":6.97,"y":6.94,"z":4.32},{"name":31124,"carat":0.43,"cut":"Very-Good","color":"G","clarity":"SI1","depth":60.4,"table":58,"price":754,"x":4.87,"y":4.9,"z":2.95},{"name":48333,"carat":0.62,"cut":"Ideal","color":"D","clarity":"SI1","depth":62.2,"table":55,"price":1959,"x":5.45,"y":5.51,"z":3.41},{"name":29226,"carat":0.31,"cut":"Ideal","color":"G","clarity":"VS1","depth":62.7,"table":57,"price":695,"x":4.34,"y":4.31,"z":2.71},{"name":33982,"carat":0.41,"cut":"Good","color":"G","clarity":"VS1","depth":63.3,"table":62,"price":847,"x":4.67,"y":4.71,"z":2.97},{"name":1025,"carat":0.72,"cut":"Premium","color":"D","clarity":"SI1","depth":61.4,"table":59,"price":2903,"x":5.79,"y":5.71,"z":3.53},{"name":17902,"carat":1.01,"cut":"Ideal","color":"F","clarity":"VS2","depth":61.6,"table":56,"price":7229,"x":6.48,"y":6.45,"z":3.98},{"name":43848,"carat":0.52,"cut":"Premium","color":"G","clarity":"VS2","depth":60.9,"table":58,"price":1447,"x":5.19,"y":5.22,"z":3.17},{"name":42493,"carat":0.52,"cut":"Very-Good","color":"H","clarity":"VS1","depth":59.6,"table":57,"price":1320,"x":5.25,"y":5.34,"z":3.15},{"name":4932,"carat":0.9,"cut":"Good","color":"H","clarity":"SI1","depth":61.4,"table":60,"price":3730,"x":6.06,"y":6.12,"z":3.74},{"name":9558,"carat":1.1,"cut":"Ideal","color":"H","clarity":"SI2","depth":62.6,"table":56,"price":4620,"x":6.65,"y":6.57,"z":4.14},{"name":30468,"carat":0.31,"cut":"Very-Good","color":"D","clarity":"SI1","depth":63.1,"table":57,"price":732,"x":4.32,"y":4.3,"z":2.72},{"name":16197,"carat":1.2,"cut":"Ideal","color":"H","clarity":"SI1","depth":62.2,"table":56,"price":6471,"x":6.8,"y":6.77,"z":4.23},{"name":27606,"carat":2.09,"cut":"Good","color":"F","clarity":"SI2","depth":63.4,"table":55,"price":18472,"x":8.11,"y":8.18,"z":5.16},{"name":32054,"carat":0.35,"cut":"Ideal","color":"D","clarity":"SI1","depth":61.1,"table":56,"price":780,"x":4.55,"y":4.59,"z":2.79},{"name":21823,"carat":1.51,"cut":"Premium","color":"D","clarity":"SI2","depth":63,"table":62,"price":9894,"x":7.28,"y":7.23,"z":4.57},{"name":5928,"carat":0.92,"cut":"Ideal","color":"E","clarity":"SI2","depth":62.1,"table":53,"price":3941,"x":6.25,"y":6.22,"z":3.87},{"name":746,"carat":0.33,"cut":"Premium","color":"J","clarity":"VS1","depth":61.5,"table":61,"price":557,"x":4.46,"y":4.39,"z":2.72},{"name":28751,"carat":0.31,"cut":"Premium","color":"E","clarity":"VS2","depth":60.3,"table":58,"price":680,"x":4.37,"y":4.42,"z":2.65},{"name":49323,"carat":0.72,"cut":"Very-Good","color":"J","clarity":"VVS1","depth":61.4,"table":61,"price":2093,"x":5.7,"y":5.77,"z":3.52},{"name":15282,"carat":1.04,"cut":"Ideal","color":"H","clarity":"VS2","depth":62.2,"table":57,"price":6133,"x":6.46,"y":6.49,"z":4.03},{"name":13423,"carat":0.9,"cut":"Very-Good","color":"D","clarity":"VS1","depth":63.4,"table":58,"price":5511,"x":6.15,"y":6.09,"z":3.88},{"name":42237,"carat":0.64,"cut":"Very-Good","color":"H","clarity":"SI2","depth":64.2,"table":58,"price":1292,"x":5.43,"y":5.48,"z":3.5},{"name":32596,"carat":0.3,"cut":"Ideal","color":"F","clarity":"VVS1","depth":61.2,"table":55,"price":802,"x":4.33,"y":4.36,"z":2.66},{"name":1348,"carat":0.71,"cut":"Ideal","color":"G","clarity":"VS1","depth":62.2,"table":56,"price":2962,"x":5.69,"y":5.72,"z":3.55},{"name":16066,"carat":1.01,"cut":"Ideal","color":"F","clarity":"VS2","depth":62,"table":56,"price":6416,"x":6.46,"y":6.51,"z":4.02},{"name":7871,"carat":0.9,"cut":"Good","color":"G","clarity":"VS2","depth":63.7,"table":60,"price":4309,"x":6.02,"y":5.98,"z":3.82},{"name":34729,"carat":0.34,"cut":"Ideal","color":"E","clarity":"VS1","depth":60.3,"table":57,"price":875,"x":4.52,"y":4.54,"z":2.73},{"name":45616,"carat":0.5,"cut":"Very-Good","color":"F","clarity":"VS1","depth":62,"table":58,"price":1692,"x":5.08,"y":5.11,"z":3.16},{"name":6640,"carat":0.85,"cut":"Ideal","color":"E","clarity":"SI1","depth":63,"table":56,"price":4089,"x":6,"y":6.04,"z":3.79}]
diff --git a/src/views/chart/assets/json/lines_new.json b/src/views/chart/assets/json/lines_new.json
new file mode 100644
index 0000000000000000000000000000000000000000..790c7307f380dfef990cc4081696e06e7569d142
--- /dev/null
+++ b/src/views/chart/assets/json/lines_new.json
@@ -0,0 +1,89 @@
+[
+ {
+ "name":"测试1",
+ "data":[
+ {
+ "xAxis": "04.01.2016",
+ "yAxis": 126.12
+ },
+ {
+ "xAxis": "05.01.2016",
+ "yAxis": 125.688
+ },
+ {
+ "xAxis": "06.01.2016",
+ "yAxis": 119.704
+ },
+ {
+ "xAxis": "07.01.2016",
+ "yAxis": 120.19
+ },
+ {
+ "xAxis": "08.01.2016",
+ "yAxis": 121.157
+ },
+ {
+ "xAxis": "11.01.2016",
+ "yAxis": 117
+ }
+ ]
+ },
+ {
+ "name":"测试2",
+ "data":[
+ {
+ "xAxis": "04.01.2016",
+ "yAxis": 126.15
+ },
+ {
+ "xAxis": "05.01.2016",
+ "yAxis": 125.8
+ },
+ {
+ "xAxis": "06.01.2016",
+ "yAxis": 119
+ },
+ {
+ "xAxis": "07.01.2016",
+ "yAxis": 121
+ },
+ {
+ "xAxis": "08.01.2016",
+ "yAxis": 122
+ },
+ {
+ "xAxis": "11.01.2016",
+ "yAxis": 118
+ }
+ ]
+ },
+ {
+ "name":"测试3",
+ "data":[
+ {
+ "xAxis": "04.01.2016",
+ "yAxis": 126.20
+ },
+ {
+ "xAxis": "05.01.2016",
+ "yAxis": 126
+ },
+ {
+ "xAxis": "06.01.2016",
+ "yAxis": 120
+ },
+ {
+ "xAxis": "07.01.2016",
+ "yAxis": 120.69
+ },
+ {
+ "xAxis": "08.01.2016",
+ "yAxis": 121
+ },
+ {
+ "xAxis": "11.01.2016",
+ "yAxis": 117.5
+ }
+ ]
+ }
+]
diff --git a/src/views/chart/assets/json/otherLine.json b/src/views/chart/assets/json/otherLine.json
new file mode 100644
index 0000000000000000000000000000000000000000..e5d68d8c426558eae3488ab8788cdb4451b54073
--- /dev/null
+++ b/src/views/chart/assets/json/otherLine.json
@@ -0,0 +1,1468 @@
+[
+ {
+ "name":"测试1",
+ "data":[
+ {
+ "xAxis": "04.01.2016",
+ "yAxis": 126.12
+ },
+ {
+ "xAxis": "05.01.2016",
+ "yAxis": 125.688
+ },
+ {
+ "xAxis": "06.01.2016",
+ "yAxis": 119.704
+ },
+ {
+ "xAxis": "07.01.2016",
+ "yAxis": 120.19
+ },
+ {
+ "xAxis": "08.01.2016",
+ "yAxis": 121.157
+ },
+ {
+ "xAxis": "11.01.2016",
+ "yAxis": 117
+ },
+ {
+ "xAxis": "12.01.2016",
+ "yAxis": 111.487
+ },
+ {
+ "xAxis": "13.01.2016",
+ "yAxis": 122
+ },
+ {
+ "xAxis": "14.01.2016",
+ "yAxis": 117.76
+ },
+ {
+ "xAxis": "15.01.2016",
+ "yAxis": 114.397
+ },
+ {
+ "xAxis": "18.01.2016",
+ "yAxis": 116.373
+ },
+ {
+ "xAxis": "19.01.2016",
+ "yAxis": 120.547
+ },
+ {
+ "xAxis": "20.01.2016",
+ "yAxis": 113.733
+ },
+ {
+ "xAxis": "21.01.2016",
+ "yAxis": 114.098
+ },
+ {
+ "xAxis": "22.01.2016",
+ "yAxis": 123.833
+ },
+ {
+ "xAxis": "25.01.2016",
+ "yAxis": 125
+ },
+ {
+ "xAxis": "26.01.2016",
+ "yAxis": 124.866
+ },
+ {
+ "xAxis": "27.01.2016",
+ "yAxis": 120.264
+ },
+ {
+ "xAxis": "28.01.2016",
+ "yAxis": 122.296
+ },
+ {
+ "xAxis": "29.01.2016",
+ "yAxis": 124.502
+ },
+ {
+ "xAxis": "01.02.2016",
+ "yAxis": 127.936
+ },
+ {
+ "xAxis": "02.02.2016",
+ "yAxis": 132.513
+ },
+ {
+ "xAxis": "03.02.2016",
+ "yAxis": 129.95
+ },
+ {
+ "xAxis": "04.02.2016",
+ "yAxis": 129.275
+ },
+ {
+ "xAxis": "05.02.2016",
+ "yAxis": 127.898
+ },
+ {
+ "xAxis": "08.02.2016",
+ "yAxis": 134.9
+ },
+ {
+ "xAxis": "09.02.2016",
+ "yAxis": 122.819
+ },
+ {
+ "xAxis": "10.02.2016",
+ "yAxis": 120.108
+ },
+ {
+ "xAxis": "11.02.2016",
+ "yAxis": 119.447
+ },
+ {
+ "xAxis": "12.02.2016",
+ "yAxis": 117.8
+ },
+ {
+ "xAxis": "15.02.2016",
+ "yAxis": 122.8
+ },
+ {
+ "xAxis": "16.02.2016",
+ "yAxis": 121.865
+ },
+ {
+ "xAxis": "17.02.2016",
+ "yAxis": 126.3
+ },
+ {
+ "xAxis": "18.02.2016",
+ "yAxis": 128.259
+ },
+ {
+ "xAxis": "19.02.2016",
+ "yAxis": 125.724
+ },
+ {
+ "xAxis": "22.02.2016",
+ "yAxis": 130
+ },
+ {
+ "xAxis": "23.02.2016",
+ "yAxis": 129.948
+ },
+ {
+ "xAxis": "24.02.2016",
+ "yAxis": 132.5
+ },
+ {
+ "xAxis": "25.02.2016",
+ "yAxis": 128.08
+ },
+ {
+ "xAxis": "26.02.2016",
+ "yAxis": 122
+ },
+ {
+ "xAxis": "29.02.2016",
+ "yAxis": 122
+ },
+ {
+ "xAxis": "01.03.2016",
+ "yAxis": 123.449
+ },
+ {
+ "xAxis": "02.03.2016",
+ "yAxis": 130.139
+ },
+ {
+ "xAxis": "03.03.2016",
+ "yAxis": 132
+ },
+ {
+ "xAxis": "04.03.2016",
+ "yAxis": 135
+ },
+ {
+ "xAxis": "07.03.2016",
+ "yAxis": 123.905
+ },
+ {
+ "xAxis": "08.03.2016",
+ "yAxis": 125.155
+ },
+ {
+ "xAxis": "09.03.2016",
+ "yAxis": 126
+ },
+ {
+ "xAxis": "10.03.2016",
+ "yAxis": 126.778
+ },
+ {
+ "xAxis": "11.03.2016",
+ "yAxis": 129.656
+ },
+ {
+ "xAxis": "14.03.2016",
+ "yAxis": 127.64
+ },
+ {
+ "xAxis": "15.03.2016",
+ "yAxis": 124.786
+ },
+ {
+ "xAxis": "16.03.2016",
+ "yAxis": 124.469
+ },
+ {
+ "xAxis": "17.03.2016",
+ "yAxis": 123.5
+ },
+ {
+ "xAxis": "18.03.2016",
+ "yAxis": 124.061
+ },
+ {
+ "xAxis": "21.03.2016",
+ "yAxis": 123.5
+ },
+ {
+ "xAxis": "22.03.2016",
+ "yAxis": 129.002
+ },
+ {
+ "xAxis": "23.03.2016",
+ "yAxis": 129
+ },
+ {
+ "xAxis": "24.03.2016",
+ "yAxis": 131.31
+ },
+ {
+ "xAxis": "29.03.2016",
+ "yAxis": 133.354
+ },
+ {
+ "xAxis": "30.03.2016",
+ "yAxis": 129.298
+ },
+ {
+ "xAxis": "31.03.2016",
+ "yAxis": 127.4
+ },
+ {
+ "xAxis": "01.04.2016",
+ "yAxis": 122.376
+ },
+ {
+ "xAxis": "04.04.2016",
+ "yAxis": 119.467
+ },
+ {
+ "xAxis": "05.04.2016",
+ "yAxis": 120.695
+ },
+ {
+ "xAxis": "06.04.2016",
+ "yAxis": 118.725
+ },
+ {
+ "xAxis": "07.04.2016",
+ "yAxis": 127.539
+ },
+ {
+ "xAxis": "08.04.2016",
+ "yAxis": 129.8
+ },
+ {
+ "xAxis": "11.04.2016",
+ "yAxis": 129.5
+ },
+ {
+ "xAxis": "12.04.2016",
+ "yAxis": 134.465
+ },
+ {
+ "xAxis": "13.04.2016",
+ "yAxis": 133
+ },
+ {
+ "xAxis": "14.04.2016",
+ "yAxis": 137.35
+ },
+ {
+ "xAxis": "15.04.2016",
+ "yAxis": 137.2
+ },
+ {
+ "xAxis": "18.04.2016",
+ "yAxis": 132.611
+ },
+ {
+ "xAxis": "19.04.2016",
+ "yAxis": 135.479
+ },
+ {
+ "xAxis": "20.04.2016",
+ "yAxis": 139.05
+ },
+ {
+ "xAxis": "21.04.2016",
+ "yAxis": 142
+ },
+ {
+ "xAxis": "22.04.2016",
+ "yAxis": 135.761
+ },
+ {
+ "xAxis": "25.04.2016",
+ "yAxis": 136.174
+ },
+ {
+ "xAxis": "26.04.2016",
+ "yAxis": 134.782
+ },
+ {
+ "xAxis": "27.04.2016",
+ "yAxis": 128
+ },
+ {
+ "xAxis": "28.04.2016",
+ "yAxis": 121.5
+ },
+ {
+ "xAxis": "29.04.2016",
+ "yAxis": 120
+ },
+ {
+ "xAxis": "02.05.2016",
+ "yAxis": 123.966
+ },
+ {
+ "xAxis": "03.05.2016",
+ "yAxis": 122.538
+ },
+ {
+ "xAxis": "04.05.2016",
+ "yAxis": 120
+ },
+ {
+ "xAxis": "05.05.2016",
+ "yAxis": 120.21
+ },
+ {
+ "xAxis": "06.05.2016",
+ "yAxis": 121.01
+ },
+ {
+ "xAxis": "09.05.2016",
+ "yAxis": 125.4
+ },
+ {
+ "xAxis": "10.05.2016",
+ "yAxis": 120.622
+ },
+ {
+ "xAxis": "11.05.2016",
+ "yAxis": 123.85
+ },
+ {
+ "xAxis": "12.05.2016",
+ "yAxis": 122.963
+ },
+ {
+ "xAxis": "13.05.2016",
+ "yAxis": 126
+ },
+ {
+ "xAxis": "17.05.2016",
+ "yAxis": 130
+ },
+ {
+ "xAxis": "18.05.2016",
+ "yAxis": 128.845
+ },
+ {
+ "xAxis": "19.05.2016",
+ "yAxis": 130.17
+ },
+ {
+ "xAxis": "20.05.2016",
+ "yAxis": 129.741
+ },
+ {
+ "xAxis": "23.05.2016",
+ "yAxis": 129.668
+ },
+ {
+ "xAxis": "24.05.2016",
+ "yAxis": 126.886
+ },
+ {
+ "xAxis": "25.05.2016",
+ "yAxis": 128.239
+ },
+ {
+ "xAxis": "26.05.2016",
+ "yAxis": 127.239
+ },
+ {
+ "xAxis": "27.05.2016",
+ "yAxis": 127.457
+ },
+ {
+ "xAxis": "30.05.2016",
+ "yAxis": 127.37
+ },
+ {
+ "xAxis": "31.05.2016",
+ "yAxis": 130.756
+ },
+ {
+ "xAxis": "01.06.2016",
+ "yAxis": 133.232
+ },
+ {
+ "xAxis": "02.06.2016",
+ "yAxis": 126.47
+ },
+ {
+ "xAxis": "03.06.2016",
+ "yAxis": 126.385
+ },
+ {
+ "xAxis": "06.06.2016",
+ "yAxis": 128.331
+ },
+ {
+ "xAxis": "07.06.2016",
+ "yAxis": 130.914
+ },
+ {
+ "xAxis": "08.06.2016",
+ "yAxis": 133
+ },
+ {
+ "xAxis": "09.06.2016",
+ "yAxis": 133.041
+ },
+ {
+ "xAxis": "10.06.2016",
+ "yAxis": 133.041
+ },
+ {
+ "xAxis": "13.06.2016",
+ "yAxis": 129
+ },
+ {
+ "xAxis": "14.06.2016",
+ "yAxis": 129.166
+ },
+ {
+ "xAxis": "15.06.2016",
+ "yAxis": 124.687
+ },
+ {
+ "xAxis": "16.06.2016",
+ "yAxis": 122.77
+ },
+ {
+ "xAxis": "17.06.2016",
+ "yAxis": 126.461
+ },
+ {
+ "xAxis": "20.06.2016",
+ "yAxis": 127
+ },
+ {
+ "xAxis": "21.06.2016",
+ "yAxis": 125.594
+ },
+ {
+ "xAxis": "22.06.2016",
+ "yAxis": 127.438
+ },
+ {
+ "xAxis": "23.06.2016",
+ "yAxis": 124.44
+ },
+ {
+ "xAxis": "24.06.2016",
+ "yAxis": 122.131
+ },
+ {
+ "xAxis": "27.06.2016",
+ "yAxis": 120.53
+ },
+ {
+ "xAxis": "28.06.2016",
+ "yAxis": 120.296
+ },
+ {
+ "xAxis": "29.06.2016",
+ "yAxis": 125.877
+ },
+ {
+ "xAxis": "30.06.2016",
+ "yAxis": 126.404
+ },
+ {
+ "xAxis": "01.07.2016",
+ "yAxis": 130.147
+ },
+ {
+ "xAxis": "04.07.2016",
+ "yAxis": 129.152
+ },
+ {
+ "xAxis": "05.07.2016",
+ "yAxis": 125.719
+ },
+ {
+ "xAxis": "06.07.2016",
+ "yAxis": 129.269
+ },
+ {
+ "xAxis": "07.07.2016",
+ "yAxis": 131.713
+ },
+ {
+ "xAxis": "08.07.2016",
+ "yAxis": 146.969
+ },
+ {
+ "xAxis": "11.07.2016",
+ "yAxis": 201.7
+ },
+ {
+ "xAxis": "12.07.2016",
+ "yAxis": 202.01
+ },
+ {
+ "xAxis": "13.07.2016",
+ "yAxis": 195.45
+ },
+ {
+ "xAxis": "14.07.2016",
+ "yAxis": 220.49
+ },
+ {
+ "xAxis": "15.07.2016",
+ "yAxis": 238.07
+ },
+ {
+ "xAxis": "18.07.2016",
+ "yAxis": 270.282
+ },
+ {
+ "xAxis": "19.07.2016",
+ "yAxis": 258.39
+ },
+ {
+ "xAxis": "20.07.2016",
+ "yAxis": 243.1
+ },
+ {
+ "xAxis": "21.07.2016",
+ "yAxis": 237
+ },
+ {
+ "xAxis": "22.07.2016",
+ "yAxis": 208
+ },
+ {
+ "xAxis": "25.07.2016",
+ "yAxis": 188.02
+ },
+ {
+ "xAxis": "26.07.2016",
+ "yAxis": 198.65
+ },
+ {
+ "xAxis": "27.07.2016",
+ "yAxis": 188
+ },
+ {
+ "xAxis": "28.07.2016",
+ "yAxis": 180.99
+ },
+ {
+ "xAxis": "29.07.2016",
+ "yAxis": 186
+ },
+ {
+ "xAxis": "01.08.2016",
+ "yAxis": 181
+ },
+ {
+ "xAxis": "02.08.2016",
+ "yAxis": 179.33
+ },
+ {
+ "xAxis": "03.08.2016",
+ "yAxis": 186
+ },
+ {
+ "xAxis": "04.08.2016",
+ "yAxis": 187.212
+ },
+ {
+ "xAxis": "05.08.2016",
+ "yAxis": 184.5
+ },
+ {
+ "xAxis": "08.08.2016",
+ "yAxis": 189.5
+ },
+ {
+ "xAxis": "09.08.2016",
+ "yAxis": 202.5
+ },
+ {
+ "xAxis": "10.08.2016",
+ "yAxis": 202.9
+ },
+ {
+ "xAxis": "11.08.2016",
+ "yAxis": 200.5
+ },
+ {
+ "xAxis": "12.08.2016",
+ "yAxis": 195.98
+ },
+ {
+ "xAxis": "15.08.2016",
+ "yAxis": 196
+ },
+ {
+ "xAxis": "16.08.2016",
+ "yAxis": 192
+ },
+ {
+ "xAxis": "17.08.2016",
+ "yAxis": 196.3
+ },
+ {
+ "xAxis": "18.08.2016",
+ "yAxis": 200.25
+ },
+ {
+ "xAxis": "19.08.2016",
+ "yAxis": 195
+ },
+ {
+ "xAxis": "22.08.2016",
+ "yAxis": 200.01
+ },
+ {
+ "xAxis": "23.08.2016",
+ "yAxis": 199.99
+ },
+ {
+ "xAxis": "24.08.2016",
+ "yAxis": 195.65
+ },
+ {
+ "xAxis": "25.08.2016",
+ "yAxis": 195.074
+ },
+ {
+ "xAxis": "26.08.2016",
+ "yAxis": 191.98
+ },
+ {
+ "xAxis": "29.08.2016",
+ "yAxis": 193.8
+ },
+ {
+ "xAxis": "30.08.2016",
+ "yAxis": 192.45
+ },
+ {
+ "xAxis": "31.08.2016",
+ "yAxis": 194
+ },
+ {
+ "xAxis": "01.09.2016",
+ "yAxis": 199.1
+ },
+ {
+ "xAxis": "02.09.2016",
+ "yAxis": 206.21
+ },
+ {
+ "xAxis": "05.09.2016",
+ "yAxis": 201.98
+ },
+ {
+ "xAxis": "06.09.2016",
+ "yAxis": 201.1
+ },
+ {
+ "xAxis": "07.09.2016",
+ "yAxis": 245.25
+ },
+ {
+ "xAxis": "08.09.2016",
+ "yAxis": 238.01
+ },
+ {
+ "xAxis": "09.09.2016",
+ "yAxis": 235
+ },
+ {
+ "xAxis": "12.09.2016",
+ "yAxis": 237.98
+ },
+ {
+ "xAxis": "13.09.2016",
+ "yAxis": 223.55
+ },
+ {
+ "xAxis": "14.09.2016",
+ "yAxis": 222.05
+ },
+ {
+ "xAxis": "15.09.2016",
+ "yAxis": 233.26
+ },
+ {
+ "xAxis": "16.09.2016",
+ "yAxis": 234
+ },
+ {
+ "xAxis": "19.09.2016",
+ "yAxis": 235.81
+ },
+ {
+ "xAxis": "20.09.2016",
+ "yAxis": 239.8
+ },
+ {
+ "xAxis": "21.09.2016",
+ "yAxis": 238.1
+ },
+ {
+ "xAxis": "22.09.2016",
+ "yAxis": 241.35
+ },
+ {
+ "xAxis": "23.09.2016",
+ "yAxis": 237.8
+ },
+ {
+ "xAxis": "26.09.2016",
+ "yAxis": 232.36
+ },
+ {
+ "xAxis": "27.09.2016",
+ "yAxis": 238.95
+ },
+ {
+ "xAxis": "28.09.2016",
+ "yAxis": 237.52
+ },
+ {
+ "xAxis": "29.09.2016",
+ "yAxis": 237.5
+ },
+ {
+ "xAxis": "30.09.2016",
+ "yAxis": 235
+ },
+ {
+ "xAxis": "04.10.2016",
+ "yAxis": 230.82
+ },
+ {
+ "xAxis": "05.10.2016",
+ "yAxis": 233.5
+ },
+ {
+ "xAxis": "06.10.2016",
+ "yAxis": 227.094
+ },
+ {
+ "xAxis": "07.10.2016",
+ "yAxis": 227.783
+ },
+ {
+ "xAxis": "10.10.2016",
+ "yAxis": 232.55
+ },
+ {
+ "xAxis": "11.10.2016",
+ "yAxis": 229
+ },
+ {
+ "xAxis": "12.10.2016",
+ "yAxis": 225.6
+ },
+ {
+ "xAxis": "13.10.2016",
+ "yAxis": 228.45
+ },
+ {
+ "xAxis": "14.10.2016",
+ "yAxis": 230.19
+ },
+ {
+ "xAxis": "17.10.2016",
+ "yAxis": 228.375
+ },
+ {
+ "xAxis": "18.10.2016",
+ "yAxis": 228.05
+ },
+ {
+ "xAxis": "19.10.2016",
+ "yAxis": 232.85
+ },
+ {
+ "xAxis": "20.10.2016",
+ "yAxis": 238.45
+ },
+ {
+ "xAxis": "21.10.2016",
+ "yAxis": 225.05
+ },
+ {
+ "xAxis": "24.10.2016",
+ "yAxis": 214.747
+ },
+ {
+ "xAxis": "25.10.2016",
+ "yAxis": 218.5
+ },
+ {
+ "xAxis": "26.10.2016",
+ "yAxis": 207.95
+ },
+ {
+ "xAxis": "27.10.2016",
+ "yAxis": 215.764
+ },
+ {
+ "xAxis": "28.10.2016",
+ "yAxis": 222.98
+ },
+ {
+ "xAxis": "31.10.2016",
+ "yAxis": 219.458
+ },
+ {
+ "xAxis": "01.11.2016",
+ "yAxis": 218.522
+ },
+ {
+ "xAxis": "02.11.2016",
+ "yAxis": 220.714
+ },
+ {
+ "xAxis": "03.11.2016",
+ "yAxis": 216.305
+ },
+ {
+ "xAxis": "04.11.2016",
+ "yAxis": 216.25
+ },
+ {
+ "xAxis": "07.11.2016",
+ "yAxis": 214.85
+ },
+ {
+ "xAxis": "08.11.2016",
+ "yAxis": 213.45
+ },
+ {
+ "xAxis": "09.11.2016",
+ "yAxis": 206.045
+ },
+ {
+ "xAxis": "10.11.2016",
+ "yAxis": 211
+ },
+ {
+ "xAxis": "11.11.2016",
+ "yAxis": 210.954
+ },
+ {
+ "xAxis": "14.11.2016",
+ "yAxis": 215.16
+ },
+ {
+ "xAxis": "15.11.2016",
+ "yAxis": 211.49
+ },
+ {
+ "xAxis": "16.11.2016",
+ "yAxis": 218
+ },
+ {
+ "xAxis": "17.11.2016",
+ "yAxis": 223.2
+ },
+ {
+ "xAxis": "18.11.2016",
+ "yAxis": 229.5
+ },
+ {
+ "xAxis": "21.11.2016",
+ "yAxis": 233.949
+ },
+ {
+ "xAxis": "22.11.2016",
+ "yAxis": 237.3
+ },
+ {
+ "xAxis": "23.11.2016",
+ "yAxis": 241.182
+ },
+ {
+ "xAxis": "24.11.2016",
+ "yAxis": 234.479
+ },
+ {
+ "xAxis": "25.11.2016",
+ "yAxis": 232.55
+ },
+ {
+ "xAxis": "28.11.2016",
+ "yAxis": 238.5
+ },
+ {
+ "xAxis": "29.11.2016",
+ "yAxis": 233
+ },
+ {
+ "xAxis": "30.11.2016",
+ "yAxis": 234
+ },
+ {
+ "xAxis": "01.12.2016",
+ "yAxis": 230.51
+ },
+ {
+ "xAxis": "02.12.2016",
+ "yAxis": 222.938
+ },
+ {
+ "xAxis": "05.12.2016",
+ "yAxis": 225.8
+ },
+ {
+ "xAxis": "06.12.2016",
+ "yAxis": 231
+ },
+ {
+ "xAxis": "07.12.2016",
+ "yAxis": 232.849
+ },
+ {
+ "xAxis": "08.12.2016",
+ "yAxis": 234.473
+ },
+ {
+ "xAxis": "09.12.2016",
+ "yAxis": 241.82
+ },
+ {
+ "xAxis": "12.12.2016",
+ "yAxis": 242.501
+ },
+ {
+ "xAxis": "13.12.2016",
+ "yAxis": 234.98
+ },
+ {
+ "xAxis": "14.12.2016",
+ "yAxis": 229.1
+ },
+ {
+ "xAxis": "15.12.2016",
+ "yAxis": 227.999
+ },
+ {
+ "xAxis": "16.12.2016",
+ "yAxis": 207.995
+ },
+ {
+ "xAxis": "19.12.2016",
+ "yAxis": 201.7
+ },
+ {
+ "xAxis": "20.12.2016",
+ "yAxis": 205.97
+ },
+ {
+ "xAxis": "21.12.2016",
+ "yAxis": 197.799
+ },
+ {
+ "xAxis": "22.12.2016",
+ "yAxis": 189.89
+ },
+ {
+ "xAxis": "23.12.2016",
+ "yAxis": 190
+ },
+ {
+ "xAxis": "27.12.2016",
+ "yAxis": 201
+ },
+ {
+ "xAxis": "28.12.2016",
+ "yAxis": 199.95
+ },
+ {
+ "xAxis": "29.12.2016",
+ "yAxis": 200.9
+ },
+ {
+ "xAxis": "30.12.2016",
+ "yAxis": 199
+ },
+ {
+ "xAxis": "02.01.2017",
+ "yAxis": 199
+ },
+ {
+ "xAxis": "03.01.2017",
+ "yAxis": 202.8
+ },
+ {
+ "xAxis": "04.01.2017",
+ "yAxis": 201.6
+ },
+ {
+ "xAxis": "05.01.2017",
+ "yAxis": 195.1
+ },
+ {
+ "xAxis": "06.01.2017",
+ "yAxis": 196
+ },
+ {
+ "xAxis": "09.01.2017",
+ "yAxis": 197.98
+ },
+ {
+ "xAxis": "10.01.2017",
+ "yAxis": 203
+ },
+ {
+ "xAxis": "11.01.2017",
+ "yAxis": 207
+ },
+ {
+ "xAxis": "12.01.2017",
+ "yAxis": 207.9
+ },
+ {
+ "xAxis": "13.01.2017",
+ "yAxis": 197.95
+ },
+ {
+ "xAxis": "16.01.2017",
+ "yAxis": 190.55
+ },
+ {
+ "xAxis": "17.01.2017",
+ "yAxis": 195
+ },
+ {
+ "xAxis": "18.01.2017",
+ "yAxis": 195.201
+ },
+ {
+ "xAxis": "19.01.2017",
+ "yAxis": 194.05
+ },
+ {
+ "xAxis": "20.01.2017",
+ "yAxis": 194
+ },
+ {
+ "xAxis": "23.01.2017",
+ "yAxis": 194
+ },
+ {
+ "xAxis": "24.01.2017",
+ "yAxis": 192.05
+ },
+ {
+ "xAxis": "25.01.2017",
+ "yAxis": 192.5
+ },
+ {
+ "xAxis": "26.01.2017",
+ "yAxis": 194.98
+ },
+ {
+ "xAxis": "27.01.2017",
+ "yAxis": 191.32
+ },
+ {
+ "xAxis": "30.01.2017",
+ "yAxis": 193
+ },
+ {
+ "xAxis": "31.01.2017",
+ "yAxis": 187
+ },
+ {
+ "xAxis": "01.02.2017",
+ "yAxis": 187
+ },
+ {
+ "xAxis": "02.02.2017",
+ "yAxis": 187.45
+ },
+ {
+ "xAxis": "03.02.2017",
+ "yAxis": 196
+ },
+ {
+ "xAxis": "06.02.2017",
+ "yAxis": 196.9
+ },
+ {
+ "xAxis": "07.02.2017",
+ "yAxis": 196.75
+ },
+ {
+ "xAxis": "08.02.2017",
+ "yAxis": 192
+ },
+ {
+ "xAxis": "09.02.2017",
+ "yAxis": 195
+ },
+ {
+ "xAxis": "10.02.2017",
+ "yAxis": 196
+ },
+ {
+ "xAxis": "13.02.2017",
+ "yAxis": 198.35
+ },
+ {
+ "xAxis": "14.02.2017",
+ "yAxis": 192
+ },
+ {
+ "xAxis": "15.02.2017",
+ "yAxis": 191.9
+ },
+ {
+ "xAxis": "16.02.2017",
+ "yAxis": 193.5
+ },
+ {
+ "xAxis": "17.02.2017",
+ "yAxis": 194.85
+ },
+ {
+ "xAxis": "20.02.2017",
+ "yAxis": 194.8
+ },
+ {
+ "xAxis": "21.02.2017",
+ "yAxis": 193.05
+ },
+ {
+ "xAxis": "22.02.2017",
+ "yAxis": 194.85
+ },
+ {
+ "xAxis": "23.02.2017",
+ "yAxis": 195.9
+ },
+ {
+ "xAxis": "24.02.2017",
+ "yAxis": 197.5
+ },
+ {
+ "xAxis": "27.02.2017",
+ "yAxis": 197.5
+ },
+ {
+ "xAxis": "28.02.2017",
+ "yAxis": 199
+ },
+ {
+ "xAxis": "01.03.2017",
+ "yAxis": 197
+ },
+ {
+ "xAxis": "02.03.2017",
+ "yAxis": 192
+ },
+ {
+ "xAxis": "03.03.2017",
+ "yAxis": 199
+ },
+ {
+ "xAxis": "06.03.2017",
+ "yAxis": 200.5
+ },
+ {
+ "xAxis": "07.03.2017",
+ "yAxis": 207.5
+ },
+ {
+ "xAxis": "08.03.2017",
+ "yAxis": 206
+ },
+ {
+ "xAxis": "09.03.2017",
+ "yAxis": 200.1
+ },
+ {
+ "xAxis": "10.03.2017",
+ "yAxis": 200.05
+ },
+ {
+ "xAxis": "13.03.2017",
+ "yAxis": 205.55
+ },
+ {
+ "xAxis": "14.03.2017",
+ "yAxis": 202
+ },
+ {
+ "xAxis": "15.03.2017",
+ "yAxis": 202.05
+ },
+ {
+ "xAxis": "16.03.2017",
+ "yAxis": 207
+ },
+ {
+ "xAxis": "17.03.2017",
+ "yAxis": 216.95
+ },
+ {
+ "xAxis": "20.03.2017",
+ "yAxis": 219.8
+ },
+ {
+ "xAxis": "21.03.2017",
+ "yAxis": 215.05
+ },
+ {
+ "xAxis": "22.03.2017",
+ "yAxis": 227.998
+ },
+ {
+ "xAxis": "23.03.2017",
+ "yAxis": 229
+ },
+ {
+ "xAxis": "24.03.2017",
+ "yAxis": 227.437
+ },
+ {
+ "xAxis": "27.03.2017",
+ "yAxis": 221.679
+ },
+ {
+ "xAxis": "28.03.2017",
+ "yAxis": 220
+ },
+ {
+ "xAxis": "29.03.2017",
+ "yAxis": 222.8
+ },
+ {
+ "xAxis": "30.03.2017",
+ "yAxis": 217.092
+ },
+ {
+ "xAxis": "31.03.2017",
+ "yAxis": 215.03
+ },
+ {
+ "xAxis": "03.04.2017",
+ "yAxis": 224.9
+ },
+ {
+ "xAxis": "04.04.2017",
+ "yAxis": 220
+ },
+ {
+ "xAxis": "05.04.2017",
+ "yAxis": 218.075
+ },
+ {
+ "xAxis": "06.04.2017",
+ "yAxis": 221.1
+ },
+ {
+ "xAxis": "07.04.2017",
+ "yAxis": 219.49
+ },
+ {
+ "xAxis": "10.04.2017",
+ "yAxis": 220
+ },
+ {
+ "xAxis": "11.04.2017",
+ "yAxis": 216.15
+ },
+ {
+ "xAxis": "12.04.2017",
+ "yAxis": 216.2
+ },
+ {
+ "xAxis": "13.04.2017",
+ "yAxis": 216.995
+ },
+ {
+ "xAxis": "18.04.2017",
+ "yAxis": 227.58
+ },
+ {
+ "xAxis": "19.04.2017",
+ "yAxis": 232.6
+ },
+ {
+ "xAxis": "20.04.2017",
+ "yAxis": 231.086
+ },
+ {
+ "xAxis": "21.04.2017",
+ "yAxis": 229.673
+ },
+ {
+ "xAxis": "24.04.2017",
+ "yAxis": 230.1
+ },
+ {
+ "xAxis": "25.04.2017",
+ "yAxis": 232.98
+ },
+ {
+ "xAxis": "26.04.2017",
+ "yAxis": 228.15
+ },
+ {
+ "xAxis": "27.04.2017",
+ "yAxis": 223.96
+ },
+ {
+ "xAxis": "28.04.2017",
+ "yAxis": 231
+ },
+ {
+ "xAxis": "02.05.2017",
+ "yAxis": 229.715
+ },
+ {
+ "xAxis": "03.05.2017",
+ "yAxis": 229.5
+ },
+ {
+ "xAxis": "04.05.2017",
+ "yAxis": 230
+ },
+ {
+ "xAxis": "05.05.2017",
+ "yAxis": 234.1
+ },
+ {
+ "xAxis": "08.05.2017",
+ "yAxis": 234.5
+ },
+ {
+ "xAxis": "09.05.2017",
+ "yAxis": 233.5
+ },
+ {
+ "xAxis": "10.05.2017",
+ "yAxis": 238.9
+ },
+ {
+ "xAxis": "11.05.2017",
+ "yAxis": 238.95
+ },
+ {
+ "xAxis": "12.05.2017",
+ "yAxis": 237
+ },
+ {
+ "xAxis": "15.05.2017",
+ "yAxis": 239
+ },
+ {
+ "xAxis": "16.05.2017",
+ "yAxis": 237.1
+ },
+ {
+ "xAxis": "17.05.2017",
+ "yAxis": 241
+ },
+ {
+ "xAxis": "18.05.2017",
+ "yAxis": 242.6
+ },
+ {
+ "xAxis": "19.05.2017",
+ "yAxis": 242.1
+ },
+ {
+ "xAxis": "22.05.2017",
+ "yAxis": 241.7
+ },
+ {
+ "xAxis": "23.05.2017",
+ "yAxis": 245.15
+ },
+ {
+ "xAxis": "24.05.2017",
+ "yAxis": 252.05
+ },
+ {
+ "xAxis": "25.05.2017",
+ "yAxis": 259.8
+ },
+ {
+ "xAxis": "26.05.2017",
+ "yAxis": 266.05
+ },
+ {
+ "xAxis": "29.05.2017",
+ "yAxis": 269.05
+ },
+ {
+ "xAxis": "30.05.2017",
+ "yAxis": 273
+ },
+ {
+ "xAxis": "31.05.2017",
+ "yAxis": 268.5
+ },
+ {
+ "xAxis": "01.06.2017",
+ "yAxis": 267.7
+ },
+ {
+ "xAxis": "02.06.2017",
+ "yAxis": 266.716
+ },
+ {
+ "xAxis": "05.06.2017",
+ "yAxis": 266.716
+ },
+ {
+ "xAxis": "06.06.2017",
+ "yAxis": 286.5
+ },
+ {
+ "xAxis": "07.06.2017",
+ "yAxis": 276.2
+ }
+ ]
+
+ }
+]
diff --git a/src/views/chart/assets/json/scatter.json b/src/views/chart/assets/json/scatter.json
new file mode 100644
index 0000000000000000000000000000000000000000..4d432bf490ad0dee21062548649e3813eeebd4d7
--- /dev/null
+++ b/src/views/chart/assets/json/scatter.json
@@ -0,0 +1 @@
+[{"gender":"female","height":161.2,"weight":51.6},{"gender":"female","height":167.5,"weight":59},{"gender":"female","height":159.5,"weight":49.2},{"gender":"female","height":157,"weight":63},{"gender":"female","height":155.8,"weight":53.6},{"gender":"female","height":170,"weight":59},{"gender":"female","height":159.1,"weight":47.6},{"gender":"female","height":166,"weight":69.8},{"gender":"female","height":176.2,"weight":66.8},{"gender":"female","height":160.2,"weight":75.2},{"gender":"female","height":172.5,"weight":55.2},{"gender":"female","height":170.9,"weight":54.2},{"gender":"female","height":172.9,"weight":62.5},{"gender":"female","height":153.4,"weight":42},{"gender":"female","height":160,"weight":50},{"gender":"female","height":147.2,"weight":49.8},{"gender":"female","height":168.2,"weight":49.2},{"gender":"female","height":175,"weight":73.2},{"gender":"female","height":157,"weight":47.8},{"gender":"female","height":167.6,"weight":68.8},{"gender":"female","height":159.5,"weight":50.6},{"gender":"female","height":175,"weight":82.5},{"gender":"female","height":166.8,"weight":57.2},{"gender":"female","height":176.5,"weight":87.8},{"gender":"female","height":170.2,"weight":72.8},{"gender":"female","height":174,"weight":54.5},{"gender":"female","height":173,"weight":59.8},{"gender":"female","height":179.9,"weight":67.3},{"gender":"female","height":170.5,"weight":67.8},{"gender":"female","height":160,"weight":47},{"gender":"female","height":154.4,"weight":46.2},{"gender":"female","height":162,"weight":55},{"gender":"female","height":176.5,"weight":83},{"gender":"female","height":160,"weight":54.4},{"gender":"female","height":152,"weight":45.8},{"gender":"female","height":162.1,"weight":53.6},{"gender":"female","height":170,"weight":73.2},{"gender":"female","height":160.2,"weight":52.1},{"gender":"female","height":161.3,"weight":67.9},{"gender":"female","height":166.4,"weight":56.6},{"gender":"female","height":168.9,"weight":62.3},{"gender":"female","height":163.8,"weight":58.5},{"gender":"female","height":167.6,"weight":54.5},{"gender":"female","height":160,"weight":50.2},{"gender":"female","height":161.3,"weight":60.3},{"gender":"female","height":167.6,"weight":58.3},{"gender":"female","height":165.1,"weight":56.2},{"gender":"female","height":160,"weight":50.2},{"gender":"female","height":170,"weight":72.9},{"gender":"female","height":157.5,"weight":59.8},{"gender":"female","height":167.6,"weight":61},{"gender":"female","height":160.7,"weight":69.1},{"gender":"female","height":163.2,"weight":55.9},{"gender":"female","height":152.4,"weight":46.5},{"gender":"female","height":157.5,"weight":54.3},{"gender":"female","height":168.3,"weight":54.8},{"gender":"female","height":180.3,"weight":60.7},{"gender":"female","height":165.5,"weight":60},{"gender":"female","height":165,"weight":62},{"gender":"female","height":164.5,"weight":60.3},{"gender":"female","height":156,"weight":52.7},{"gender":"female","height":160,"weight":74.3},{"gender":"female","height":163,"weight":62},{"gender":"female","height":165.7,"weight":73.1},{"gender":"female","height":161,"weight":80},{"gender":"female","height":162,"weight":54.7},{"gender":"female","height":166,"weight":53.2},{"gender":"female","height":174,"weight":75.7},{"gender":"female","height":172.7,"weight":61.1},{"gender":"female","height":167.6,"weight":55.7},{"gender":"female","height":151.1,"weight":48.7},{"gender":"female","height":164.5,"weight":52.3},{"gender":"female","height":163.5,"weight":50},{"gender":"female","height":152,"weight":59.3},{"gender":"female","height":169,"weight":62.5},{"gender":"female","height":164,"weight":55.7},{"gender":"female","height":161.2,"weight":54.8},{"gender":"female","height":155,"weight":45.9},{"gender":"female","height":170,"weight":70.6},{"gender":"female","height":176.2,"weight":67.2},{"gender":"female","height":170,"weight":69.4},{"gender":"female","height":162.5,"weight":58.2},{"gender":"female","height":170.3,"weight":64.8},{"gender":"female","height":164.1,"weight":71.6},{"gender":"female","height":169.5,"weight":52.8},{"gender":"female","height":163.2,"weight":59.8},{"gender":"female","height":154.5,"weight":49},{"gender":"female","height":159.8,"weight":50},{"gender":"female","height":173.2,"weight":69.2},{"gender":"female","height":170,"weight":55.9},{"gender":"female","height":161.4,"weight":63.4},{"gender":"female","height":169,"weight":58.2},{"gender":"female","height":166.2,"weight":58.6},{"gender":"female","height":159.4,"weight":45.7},{"gender":"female","height":162.5,"weight":52.2},{"gender":"female","height":159,"weight":48.6},{"gender":"female","height":162.8,"weight":57.8},{"gender":"female","height":159,"weight":55.6},{"gender":"female","height":179.8,"weight":66.8},{"gender":"female","height":162.9,"weight":59.4},{"gender":"female","height":161,"weight":53.6},{"gender":"female","height":151.1,"weight":73.2},{"gender":"female","height":168.2,"weight":53.4},{"gender":"female","height":168.9,"weight":69},{"gender":"female","height":173.2,"weight":58.4},{"gender":"female","height":171.8,"weight":56.2},{"gender":"female","height":178,"weight":70.6},{"gender":"female","height":164.3,"weight":59.8},{"gender":"female","height":163,"weight":72},{"gender":"female","height":168.5,"weight":65.2},{"gender":"female","height":166.8,"weight":56.6},{"gender":"female","height":172.7,"weight":105.2},{"gender":"female","height":163.5,"weight":51.8},{"gender":"female","height":169.4,"weight":63.4},{"gender":"female","height":167.8,"weight":59},{"gender":"female","height":159.5,"weight":47.6},{"gender":"female","height":167.6,"weight":63},{"gender":"female","height":161.2,"weight":55.2},{"gender":"female","height":160,"weight":45},{"gender":"female","height":163.2,"weight":54},{"gender":"female","height":162.2,"weight":50.2},{"gender":"female","height":161.3,"weight":60.2},{"gender":"female","height":149.5,"weight":44.8},{"gender":"female","height":157.5,"weight":58.8},{"gender":"female","height":163.2,"weight":56.4},{"gender":"female","height":172.7,"weight":62},{"gender":"female","height":155,"weight":49.2},{"gender":"female","height":156.5,"weight":67.2},{"gender":"female","height":164,"weight":53.8},{"gender":"female","height":160.9,"weight":54.4},{"gender":"female","height":162.8,"weight":58},{"gender":"female","height":167,"weight":59.8},{"gender":"female","height":160,"weight":54.8},{"gender":"female","height":160,"weight":43.2},{"gender":"female","height":168.9,"weight":60.5},{"gender":"female","height":158.2,"weight":46.4},{"gender":"female","height":156,"weight":64.4},{"gender":"female","height":160,"weight":48.8},{"gender":"female","height":167.1,"weight":62.2},{"gender":"female","height":158,"weight":55.5},{"gender":"female","height":167.6,"weight":57.8},{"gender":"female","height":156,"weight":54.6},{"gender":"female","height":162.1,"weight":59.2},{"gender":"female","height":173.4,"weight":52.7},{"gender":"female","height":159.8,"weight":53.2},{"gender":"female","height":170.5,"weight":64.5},{"gender":"female","height":159.2,"weight":51.8},{"gender":"female","height":157.5,"weight":56},{"gender":"female","height":161.3,"weight":63.6},{"gender":"female","height":162.6,"weight":63.2},{"gender":"female","height":160,"weight":59.5},{"gender":"female","height":168.9,"weight":56.8},{"gender":"female","height":165.1,"weight":64.1},{"gender":"female","height":162.6,"weight":50},{"gender":"female","height":165.1,"weight":72.3},{"gender":"female","height":166.4,"weight":55},{"gender":"female","height":160,"weight":55.9},{"gender":"female","height":152.4,"weight":60.4},{"gender":"female","height":170.2,"weight":69.1},{"gender":"female","height":162.6,"weight":84.5},{"gender":"female","height":170.2,"weight":55.9},{"gender":"female","height":158.8,"weight":55.5},{"gender":"female","height":172.7,"weight":69.5},{"gender":"female","height":167.6,"weight":76.4},{"gender":"female","height":162.6,"weight":61.4},{"gender":"female","height":167.6,"weight":65.9},{"gender":"female","height":156.2,"weight":58.6},{"gender":"female","height":175.2,"weight":66.8},{"gender":"female","height":172.1,"weight":56.6},{"gender":"female","height":162.6,"weight":58.6},{"gender":"female","height":160,"weight":55.9},{"gender":"female","height":165.1,"weight":59.1},{"gender":"female","height":182.9,"weight":81.8},{"gender":"female","height":166.4,"weight":70.7},{"gender":"female","height":165.1,"weight":56.8},{"gender":"female","height":177.8,"weight":60},{"gender":"female","height":165.1,"weight":58.2},{"gender":"female","height":175.3,"weight":72.7},{"gender":"female","height":154.9,"weight":54.1},{"gender":"female","height":158.8,"weight":49.1},{"gender":"female","height":172.7,"weight":75.9},{"gender":"female","height":168.9,"weight":55},{"gender":"female","height":161.3,"weight":57.3},{"gender":"female","height":167.6,"weight":55},{"gender":"female","height":165.1,"weight":65.5},{"gender":"female","height":175.3,"weight":65.5},{"gender":"female","height":157.5,"weight":48.6},{"gender":"female","height":163.8,"weight":58.6},{"gender":"female","height":167.6,"weight":63.6},{"gender":"female","height":165.1,"weight":55.2},{"gender":"female","height":165.1,"weight":62.7},{"gender":"female","height":168.9,"weight":56.6},{"gender":"female","height":162.6,"weight":53.9},{"gender":"female","height":164.5,"weight":63.2},{"gender":"female","height":176.5,"weight":73.6},{"gender":"female","height":168.9,"weight":62},{"gender":"female","height":175.3,"weight":63.6},{"gender":"female","height":159.4,"weight":53.2},{"gender":"female","height":160,"weight":53.4},{"gender":"female","height":170.2,"weight":55},{"gender":"female","height":162.6,"weight":70.5},{"gender":"female","height":167.6,"weight":54.5},{"gender":"female","height":162.6,"weight":54.5},{"gender":"female","height":160.7,"weight":55.9},{"gender":"female","height":160,"weight":59},{"gender":"female","height":157.5,"weight":63.6},{"gender":"female","height":162.6,"weight":54.5},{"gender":"female","height":152.4,"weight":47.3},{"gender":"female","height":170.2,"weight":67.7},{"gender":"female","height":165.1,"weight":80.9},{"gender":"female","height":172.7,"weight":70.5},{"gender":"female","height":165.1,"weight":60.9},{"gender":"female","height":170.2,"weight":63.6},{"gender":"female","height":170.2,"weight":54.5},{"gender":"female","height":170.2,"weight":59.1},{"gender":"female","height":161.3,"weight":70.5},{"gender":"female","height":167.6,"weight":52.7},{"gender":"female","height":167.6,"weight":62.7},{"gender":"female","height":165.1,"weight":86.3},{"gender":"female","height":162.6,"weight":66.4},{"gender":"female","height":152.4,"weight":67.3},{"gender":"female","height":168.9,"weight":63},{"gender":"female","height":170.2,"weight":73.6},{"gender":"female","height":175.2,"weight":62.3},{"gender":"female","height":175.2,"weight":57.7},{"gender":"female","height":160,"weight":55.4},{"gender":"female","height":165.1,"weight":104.1},{"gender":"female","height":174,"weight":55.5},{"gender":"female","height":170.2,"weight":77.3},{"gender":"female","height":160,"weight":80.5},{"gender":"female","height":167.6,"weight":64.5},{"gender":"female","height":167.6,"weight":72.3},{"gender":"female","height":167.6,"weight":61.4},{"gender":"female","height":154.9,"weight":58.2},{"gender":"female","height":162.6,"weight":81.8},{"gender":"female","height":175.3,"weight":63.6},{"gender":"female","height":171.4,"weight":53.4},{"gender":"female","height":157.5,"weight":54.5},{"gender":"female","height":165.1,"weight":53.6},{"gender":"female","height":160,"weight":60},{"gender":"female","height":174,"weight":73.6},{"gender":"female","height":162.6,"weight":61.4},{"gender":"female","height":174,"weight":55.5},{"gender":"female","height":162.6,"weight":63.6},{"gender":"female","height":161.3,"weight":60.9},{"gender":"female","height":156.2,"weight":60},{"gender":"female","height":149.9,"weight":46.8},{"gender":"female","height":169.5,"weight":57.3},{"gender":"female","height":160,"weight":64.1},{"gender":"female","height":175.3,"weight":63.6},{"gender":"female","height":169.5,"weight":67.3},{"gender":"female","height":160,"weight":75.5},{"gender":"female","height":172.7,"weight":68.2},{"gender":"female","height":162.6,"weight":61.4},{"gender":"female","height":157.5,"weight":76.8},{"gender":"female","height":176.5,"weight":71.8},{"gender":"female","height":164.4,"weight":55.5},{"gender":"female","height":160.7,"weight":48.6},{"gender":"female","height":174,"weight":66.4},{"gender":"female","height":163.8,"weight":67.3},{"gender":"male","height":174,"weight":65.6},{"gender":"male","height":175.3,"weight":71.8},{"gender":"male","height":193.5,"weight":80.7},{"gender":"male","height":186.5,"weight":72.6},{"gender":"male","height":187.2,"weight":78.8},{"gender":"male","height":181.5,"weight":74.8},{"gender":"male","height":184,"weight":86.4},{"gender":"male","height":184.5,"weight":78.4},{"gender":"male","height":175,"weight":62},{"gender":"male","height":184,"weight":81.6},{"gender":"male","height":180,"weight":76.6},{"gender":"male","height":177.8,"weight":83.6},{"gender":"male","height":192,"weight":90},{"gender":"male","height":176,"weight":74.6},{"gender":"male","height":174,"weight":71},{"gender":"male","height":184,"weight":79.6},{"gender":"male","height":192.7,"weight":93.8},{"gender":"male","height":171.5,"weight":70},{"gender":"male","height":173,"weight":72.4},{"gender":"male","height":176,"weight":85.9},{"gender":"male","height":176,"weight":78.8},{"gender":"male","height":180.5,"weight":77.8},{"gender":"male","height":172.7,"weight":66.2},{"gender":"male","height":176,"weight":86.4},{"gender":"male","height":173.5,"weight":81.8},{"gender":"male","height":178,"weight":89.6},{"gender":"male","height":180.3,"weight":82.8},{"gender":"male","height":180.3,"weight":76.4},{"gender":"male","height":164.5,"weight":63.2},{"gender":"male","height":173,"weight":60.9},{"gender":"male","height":183.5,"weight":74.8},{"gender":"male","height":175.5,"weight":70},{"gender":"male","height":188,"weight":72.4},{"gender":"male","height":189.2,"weight":84.1},{"gender":"male","height":172.8,"weight":69.1},{"gender":"male","height":170,"weight":59.5},{"gender":"male","height":182,"weight":67.2},{"gender":"male","height":170,"weight":61.3},{"gender":"male","height":177.8,"weight":68.6},{"gender":"male","height":184.2,"weight":80.1},{"gender":"male","height":186.7,"weight":87.8},{"gender":"male","height":171.4,"weight":84.7},{"gender":"male","height":172.7,"weight":73.4},{"gender":"male","height":175.3,"weight":72.1},{"gender":"male","height":180.3,"weight":82.6},{"gender":"male","height":182.9,"weight":88.7},{"gender":"male","height":188,"weight":84.1},{"gender":"male","height":177.2,"weight":94.1},{"gender":"male","height":172.1,"weight":74.9},{"gender":"male","height":167,"weight":59.1},{"gender":"male","height":169.5,"weight":75.6},{"gender":"male","height":174,"weight":86.2},{"gender":"male","height":172.7,"weight":75.3},{"gender":"male","height":182.2,"weight":87.1},{"gender":"male","height":164.1,"weight":55.2},{"gender":"male","height":163,"weight":57},{"gender":"male","height":171.5,"weight":61.4},{"gender":"male","height":184.2,"weight":76.8},{"gender":"male","height":174,"weight":86.8},{"gender":"male","height":174,"weight":72.2},{"gender":"male","height":177,"weight":71.6},{"gender":"male","height":186,"weight":84.8},{"gender":"male","height":167,"weight":68.2},{"gender":"male","height":171.8,"weight":66.1},{"gender":"male","height":182,"weight":72},{"gender":"male","height":167,"weight":64.6},{"gender":"male","height":177.8,"weight":74.8},{"gender":"male","height":164.5,"weight":70},{"gender":"male","height":192,"weight":101.6},{"gender":"male","height":175.5,"weight":63.2},{"gender":"male","height":171.2,"weight":79.1},{"gender":"male","height":181.6,"weight":78.9},{"gender":"male","height":167.4,"weight":67.7},{"gender":"male","height":181.1,"weight":66},{"gender":"male","height":177,"weight":68.2},{"gender":"male","height":174.5,"weight":63.9},{"gender":"male","height":177.5,"weight":72},{"gender":"male","height":170.5,"weight":56.8},{"gender":"male","height":182.4,"weight":74.5},{"gender":"male","height":197.1,"weight":90.9},{"gender":"male","height":180.1,"weight":93},{"gender":"male","height":175.5,"weight":80.9},{"gender":"male","height":180.6,"weight":72.7},{"gender":"male","height":184.4,"weight":68},{"gender":"male","height":175.5,"weight":70.9},{"gender":"male","height":180.6,"weight":72.5},{"gender":"male","height":177,"weight":72.5},{"gender":"male","height":177.1,"weight":83.4},{"gender":"male","height":181.6,"weight":75.5},{"gender":"male","height":176.5,"weight":73},{"gender":"male","height":175,"weight":70.2},{"gender":"male","height":174,"weight":73.4},{"gender":"male","height":165.1,"weight":70.5},{"gender":"male","height":177,"weight":68.9},{"gender":"male","height":192,"weight":102.3},{"gender":"male","height":176.5,"weight":68.4},{"gender":"male","height":169.4,"weight":65.9},{"gender":"male","height":182.1,"weight":75.7},{"gender":"male","height":179.8,"weight":84.5},{"gender":"male","height":175.3,"weight":87.7},{"gender":"male","height":184.9,"weight":86.4},{"gender":"male","height":177.3,"weight":73.2},{"gender":"male","height":167.4,"weight":53.9},{"gender":"male","height":178.1,"weight":72},{"gender":"male","height":168.9,"weight":55.5},{"gender":"male","height":157.2,"weight":58.4},{"gender":"male","height":180.3,"weight":83.2},{"gender":"male","height":170.2,"weight":72.7},{"gender":"male","height":177.8,"weight":64.1},{"gender":"male","height":172.7,"weight":72.3},{"gender":"male","height":165.1,"weight":65},{"gender":"male","height":186.7,"weight":86.4},{"gender":"male","height":165.1,"weight":65},{"gender":"male","height":174,"weight":88.6},{"gender":"male","height":175.3,"weight":84.1},{"gender":"male","height":185.4,"weight":66.8},{"gender":"male","height":177.8,"weight":75.5},{"gender":"male","height":180.3,"weight":93.2},{"gender":"male","height":180.3,"weight":82.7},{"gender":"male","height":177.8,"weight":58},{"gender":"male","height":177.8,"weight":79.5},{"gender":"male","height":177.8,"weight":78.6},{"gender":"male","height":177.8,"weight":71.8},{"gender":"male","height":177.8,"weight":116.4},{"gender":"male","height":163.8,"weight":72.2},{"gender":"male","height":188,"weight":83.6},{"gender":"male","height":198.1,"weight":85.5},{"gender":"male","height":175.3,"weight":90.9},{"gender":"male","height":166.4,"weight":85.9},{"gender":"male","height":190.5,"weight":89.1},{"gender":"male","height":166.4,"weight":75},{"gender":"male","height":177.8,"weight":77.7},{"gender":"male","height":179.7,"weight":86.4},{"gender":"male","height":172.7,"weight":90.9},{"gender":"male","height":190.5,"weight":73.6},{"gender":"male","height":185.4,"weight":76.4},{"gender":"male","height":168.9,"weight":69.1},{"gender":"male","height":167.6,"weight":84.5},{"gender":"male","height":175.3,"weight":64.5},{"gender":"male","height":170.2,"weight":69.1},{"gender":"male","height":190.5,"weight":108.6},{"gender":"male","height":177.8,"weight":86.4},{"gender":"male","height":190.5,"weight":80.9},{"gender":"male","height":177.8,"weight":87.7},{"gender":"male","height":184.2,"weight":94.5},{"gender":"male","height":176.5,"weight":80.2},{"gender":"male","height":177.8,"weight":72},{"gender":"male","height":180.3,"weight":71.4},{"gender":"male","height":171.4,"weight":72.7},{"gender":"male","height":172.7,"weight":84.1},{"gender":"male","height":172.7,"weight":76.8},{"gender":"male","height":177.8,"weight":63.6},{"gender":"male","height":177.8,"weight":80.9},{"gender":"male","height":182.9,"weight":80.9},{"gender":"male","height":170.2,"weight":85.5},{"gender":"male","height":167.6,"weight":68.6},{"gender":"male","height":175.3,"weight":67.7},{"gender":"male","height":165.1,"weight":66.4},{"gender":"male","height":185.4,"weight":102.3},{"gender":"male","height":181.6,"weight":70.5},{"gender":"male","height":172.7,"weight":95.9},{"gender":"male","height":190.5,"weight":84.1},{"gender":"male","height":179.1,"weight":87.3},{"gender":"male","height":175.3,"weight":71.8},{"gender":"male","height":170.2,"weight":65.9},{"gender":"male","height":193,"weight":95.9},{"gender":"male","height":171.4,"weight":91.4},{"gender":"male","height":177.8,"weight":81.8},{"gender":"male","height":177.8,"weight":96.8},{"gender":"male","height":167.6,"weight":69.1},{"gender":"male","height":167.6,"weight":82.7},{"gender":"male","height":180.3,"weight":75.5},{"gender":"male","height":182.9,"weight":79.5},{"gender":"male","height":176.5,"weight":73.6},{"gender":"male","height":186.7,"weight":91.8},{"gender":"male","height":188,"weight":84.1},{"gender":"male","height":188,"weight":85.9},{"gender":"male","height":177.8,"weight":81.8},{"gender":"male","height":174,"weight":82.5},{"gender":"male","height":177.8,"weight":80.5},{"gender":"male","height":171.4,"weight":70},{"gender":"male","height":185.4,"weight":81.8},{"gender":"male","height":185.4,"weight":84.1},{"gender":"male","height":188,"weight":90.5},{"gender":"male","height":188,"weight":91.4},{"gender":"male","height":182.9,"weight":89.1},{"gender":"male","height":176.5,"weight":85},{"gender":"male","height":175.3,"weight":69.1},{"gender":"male","height":175.3,"weight":73.6},{"gender":"male","height":188,"weight":80.5},{"gender":"male","height":188,"weight":82.7},{"gender":"male","height":175.3,"weight":86.4},{"gender":"male","height":170.5,"weight":67.7},{"gender":"male","height":179.1,"weight":92.7},{"gender":"male","height":177.8,"weight":93.6},{"gender":"male","height":175.3,"weight":70.9},{"gender":"male","height":182.9,"weight":75},{"gender":"male","height":170.8,"weight":93.2},{"gender":"male","height":188,"weight":93.2},{"gender":"male","height":180.3,"weight":77.7},{"gender":"male","height":177.8,"weight":61.4},{"gender":"male","height":185.4,"weight":94.1},{"gender":"male","height":168.9,"weight":75},{"gender":"male","height":185.4,"weight":83.6},{"gender":"male","height":180.3,"weight":85.5},{"gender":"male","height":174,"weight":73.9},{"gender":"male","height":167.6,"weight":66.8},{"gender":"male","height":182.9,"weight":87.3},{"gender":"male","height":160,"weight":72.3},{"gender":"male","height":180.3,"weight":88.6},{"gender":"male","height":167.6,"weight":75.5},{"gender":"male","height":186.7,"weight":101.4},{"gender":"male","height":175.3,"weight":91.1},{"gender":"male","height":175.3,"weight":67.3},{"gender":"male","height":175.9,"weight":77.7},{"gender":"male","height":175.3,"weight":81.8},{"gender":"male","height":179.1,"weight":75.5},{"gender":"male","height":181.6,"weight":84.5},{"gender":"male","height":177.8,"weight":76.6},{"gender":"male","height":182.9,"weight":85},{"gender":"male","height":177.8,"weight":102.5},{"gender":"male","height":184.2,"weight":77.3},{"gender":"male","height":179.1,"weight":71.8},{"gender":"male","height":176.5,"weight":87.9},{"gender":"male","height":188,"weight":94.3},{"gender":"male","height":174,"weight":70.9},{"gender":"male","height":167.6,"weight":64.5},{"gender":"male","height":170.2,"weight":77.3},{"gender":"male","height":167.6,"weight":72.3},{"gender":"male","height":188,"weight":87.3},{"gender":"male","height":174,"weight":80},{"gender":"male","height":176.5,"weight":82.3},{"gender":"male","height":180.3,"weight":73.6},{"gender":"male","height":167.6,"weight":74.1},{"gender":"male","height":188,"weight":85.9},{"gender":"male","height":180.3,"weight":73.2},{"gender":"male","height":167.6,"weight":76.3},{"gender":"male","height":183,"weight":65.9},{"gender":"male","height":183,"weight":90.9},{"gender":"male","height":179.1,"weight":89.1},{"gender":"male","height":170.2,"weight":62.3},{"gender":"male","height":177.8,"weight":82.7},{"gender":"male","height":179.1,"weight":79.1},{"gender":"male","height":190.5,"weight":98.2},{"gender":"male","height":177.8,"weight":84.1},{"gender":"male","height":180.3,"weight":83.2},{"gender":"male","height":180.3,"weight":83.2}]
diff --git a/src/views/chart/components/chart/card/index.vue b/src/views/chart/components/chart/card/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..5f66d7f26ef2eec3092e7365ed4d80521d0e2f69
--- /dev/null
+++ b/src/views/chart/components/chart/card/index.vue
@@ -0,0 +1,163 @@
+
+
+
{{ setting.cardTitle }}
+
+ {{ setting.cardContent ? setting.cardContent : cardContent }}
+
+
+
+
+
+
+
{{ setting.cardTitle }}
+
{{ setting.cardContent ? setting.cardContent : cardContent }}
+
+
+
+
+
+
+
diff --git a/src/views/chart/components/chart/gallery/index.vue b/src/views/chart/components/chart/gallery/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..11ec0a9570dfdd1a647792ba3ba000055d1ef8e6
--- /dev/null
+++ b/src/views/chart/components/chart/gallery/index.vue
@@ -0,0 +1,788 @@
+
+
+
+
diff --git a/src/views/chart/components/chart/plugin/cardInfo.vue b/src/views/chart/components/chart/plugin/cardInfo.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ba825101801c2546e4beec1c946e7e8a2d139a2d
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/cardInfo.vue
@@ -0,0 +1,258 @@
+
+
+
+
+
+
+
{{setting.name}}
+
+
![]()
+
+
{{ setting.cardTitle }}
+
{{ setting.cardContent ? setting.cardContent : cardContent }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/chart/components/chart/plugin/chart/bar.js b/src/views/chart/components/chart/plugin/chart/bar.js
new file mode 100644
index 0000000000000000000000000000000000000000..309238a7abc4bd649641c76bb0bb21ea1e69b7dd
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/chart/bar.js
@@ -0,0 +1,120 @@
+/***
+ * @Author: 罗兴
+ * @LastEditors: 罗兴
+ * @Date: 2021-09-29 21:10:04
+ * @LastEditTime: 2021-10-13 15:39:28
+ * @FilePath: \jvs-ui\src\views\chart\components\chart\plugin\chart\bar.js
+ * @Description: file content
+ */
+import gallery from './gallery'
+export default class GBarChart extends gallery {
+ constructor(shape='BarChart') {
+ super(shape);
+ this.name='分组条形图'
+ this.setting={
+ name: '分组条形图',
+ // unit: '', // 单位
+ titleWeight: 10,
+ titleSize: 15,
+ cardshow: false, // 是否卡片显示
+ border: 0,
+ back: '#fff',
+ type: 'group', // 展示类型
+ datatype: '1', // ?????????????
+ url: '', // ???????????????????
+ },
+ this.dicData=[
+ { label: '分组条形图', value: 'group' },
+ { label: '基础条形图', value: 'base' },
+ ],
+ this.showForm=['name', 'unit', 'titleWeight', 'titleSize', 'cardshow', 'border', 'back', 'type'],
+ this.column=[
+ {
+ "key": "项"
+ },
+ {
+ "key": "1月"
+ },
+ {
+ "key": "2月"
+ },
+ {
+ "key": "3月"
+ },
+ {
+ "key": "4月"
+ },
+ {
+ "key": "5月"
+ }
+ ],
+ this.tableData=[
+ {
+ "name":"电信",
+ "data":[
+ {
+ "xAxis":"1月",
+ "yAxis":18.9
+ },
+ {
+ "xAxis":"2月",
+ "yAxis":28.8
+ },
+ {
+ "xAxis":"3月",
+ "yAxis":39.3
+ },
+ {
+ "xAxis":"4月",
+ "yAxis":81.4
+ },
+ {
+ "xAxis":"5月",
+ "yAxis":47
+ }
+ ]
+ },
+ {
+ "name":"微博",
+ "data":[
+ {
+ "xAxis":"1月",
+ "yAxis": 12.4
+ },
+ {
+ "xAxis":"2月",
+ "yAxis":23.2
+ },
+ {
+ "xAxis":"3月",
+ "yAxis":34.5
+ },
+ {
+ "xAxis":"4月",
+ "yAxis":99.7
+ },
+ {
+ "xAxis":"5月",
+ "yAxis":52.6
+ }
+ ]
+ },
+ // {
+ // "项": "",
+ // "1月": 18.9,
+ // "2月": 28.8,
+ // "3月": 39.3,
+ // "4月": 81.4,
+ // "5月": 47
+ // },
+ // {
+ // "项": "微博",
+ // "1月": 12.4,
+ // "2月": 23.2,
+ // "3月": 34.5,
+ // "4月": 99.7,
+ // "5月": 52.6
+ // }
+ ]
+ }
+}
diff --git a/src/views/chart/components/chart/plugin/chart/config.js b/src/views/chart/components/chart/plugin/chart/config.js
new file mode 100644
index 0000000000000000000000000000000000000000..94617c38d4d136dcb8b12e46ce291cd13a5dd3c8
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/chart/config.js
@@ -0,0 +1,212 @@
+/**
+ * 图表数据配置文件
+ * column
+ * tableData
+ */
+
+import {DataSet, DataView} from "@antv/data-set";
+import GFunnelChart from './funnel'
+const funnelData = new GFunnelChart()
+
+// 基础条形图数据
+export const baseBar = {
+ column: [
+ { "key": "项" },
+ { "key": "汽车" },
+ { "key": "建材家居" },
+ { "key": "住宿旅游" },
+ { "key": "交通运输与仓储邮政" },
+ { "key": "建筑房地产" },
+ { "key": "教育" },
+ { "key": "IT 通讯电子" },
+ { "key": "社会公共管理" },
+ { "key": "医疗卫生" },
+ { "key": "金融保险" }
+ ],
+ tableData: [
+ {
+ name:"销量(百万)",
+ data:[{
+ xAxis:'汽车',
+ yAxis:34
+ },{
+ xAxis:'建材家居',
+ yAxis: 85
+ },{
+ xAxis:'住宿旅游',
+ yAxis: 103
+ },{
+ xAxis:'交通运输与仓储邮政',
+ yAxis: 142
+ },{
+ xAxis:'建筑房地产',
+ yAxis: 251
+ },{
+ xAxis:'IT 通讯电子',
+ yAxis: 491
+ },{
+ xAxis:'社会公共管理',
+ yAxis: 672
+ },{
+ xAxis:'医疗卫生',
+ yAxis: 868
+ }]
+ },
+ // {
+ // "项": "销量(百万)",
+ // "汽车": 34,
+ // "建材家居": 85,
+ // "住宿旅游": 103,
+ // "交通运输与仓储邮政": 142,
+ // "建筑房地产": 251,
+ // "教育": 367,
+ // "IT 通讯电子": 491,
+ // "社会公共管理": 672,
+ // "医疗卫生": 868,
+ // "金融保险": 1234
+ // },
+ ],
+}
+
+// 基础柱状图数据
+export const baseHistogram = {
+ column: [
+ { "key": "项" },
+ { "key": "1月" },
+ { "key": "2月" },
+ { "key": "3月" },
+ { "key": "4月" },
+ { "key": "5月" },
+ { "key": "6月" },
+ { "key": "7月" },
+ { "key": "8月" }
+ ],
+ tableData: [
+ {
+ "name":"电信",
+ "data":[
+ {
+ "xAxis":"1月",
+ "yAxis":18.9
+ },
+ {
+ "xAxis":"2月",
+ "yAxis":28.8
+ },
+ {
+ "xAxis":"3月",
+ "yAxis":39.3
+ },
+ {
+ "xAxis":"4月",
+ "yAxis":81.4
+ },
+ {
+ "xAxis":"5月",
+ "yAxis":47
+ }
+ ]
+ }
+ ],
+}
+
+// 基础散点图数据
+export const baseScatter = {
+ tableData: require('@/views/chart/assets/json/scatter.json')
+}
+
+// 气泡图数据
+export const bubbleScatter = {
+ tableData: require('@/views/chart/assets/json/bubble.json')
+}
+
+// 其他折线图数据
+export const otherLine = {
+ tableData: require('@/views/chart/assets/json/otherLine.json')
+}
+
+// 多折线图数据
+export function getLines() {
+ // const list = []
+ // const arr = ['boxcar', 'cosine', 'epanechnikov', 'gaussian', 'quartic', 'triangular', 'tricube', 'triweight', 'uniform']
+ // arr.forEach(function(method, i) {
+ // const dv = new DataSet.View().source(require('@/views/chart/assets/json/lines.json'));
+ // dv.transform({
+ // type: 'kernel-smooth.regression',
+ // method: method,
+ // field: 'depth',
+ // extent: [50, 70]
+ // });
+ // const obj = { rows: dv.rows, name: method }
+ // list.push(obj)
+ // });
+ return { tableData: require('@/views/chart/assets/json/lines_new.json') }
+}
+
+// 直方图数据
+export const hist = [
+ 1.2, 3.4, 3.7, 4.3, 5.2, 5.8, 6.1, 6.5, 6.8, 7.1, 7.3, 7.7, 8.3,
+ 8.6, 8.8, 9.1, 9.2, 9.4, 9.5, 9.7, 10.5, 10.7, 10.8, 11.0, 11.0,
+ 11.1, 11.2, 11.3, 11.4, 11.4, 11.7, 12.0, 12.9, 12.9, 13.3, 13.7,
+ 13.8, 13.9, 14.0, 14.2, 14.5, 15, 15.2, 15.6, 16.0, 16.3, 17.3,
+ 17.5, 17.9, 18.0, 18.0, 20.6, 21, 23.4
+]
+export function getHistData(arr) {
+ const values = arr ? arr : hist;
+ const data = [];
+ for (let i = 0; i < values.length; i++) {
+ const obj = {};
+ obj.value = values[i];
+ data.push(obj);
+ }
+ const ds = new DataSet();
+ console.log(data)
+ const dv = ds.createView().source(data);
+ dv.transform({
+ type: 'bin.histogram',
+ field: 'value',
+ binWidth: 2,
+ as: ['value', 'count']
+ });
+ console.log(dv)
+ return dv.rows
+}
+
+// 漏斗图数据
+export function getFunnelData() {
+ const dv = new DataView().source(funnelData.tableData);
+ // 获取最大值,方便计算比例
+ funnelData.tableData.sort(function(a,b){
+ var x = a['value'];
+ var y = b['value'];
+ return((x>y)?-1:((x
= ds.state.start && time <= ds.state.end;
+ }
+ });
+ return { tableData: dv.rows }
+}
diff --git a/src/views/chart/components/chart/plugin/chart/dashBoard.js b/src/views/chart/components/chart/plugin/chart/dashBoard.js
new file mode 100644
index 0000000000000000000000000000000000000000..5cf2f69799ebacfde363e4d79a9e1cda67d60b79
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/chart/dashBoard.js
@@ -0,0 +1,33 @@
+/***
+ * @Author: 罗兴
+ * @LastEditors: 罗兴
+ * @Date: 2021-09-29 21:10:04
+ * @LastEditTime: 2021-10-15 11:18:39
+ * @FilePath: \jvs-ui\src\views\chart\components\chart\plugin\chart\dashBoard.js
+ * @Description: file content
+ */
+import gallery from './gallery'
+export default class GDashBoard extends gallery {
+ constructor(shape='DashBoard') {
+ super(shape);
+ this.name='仪表盘'
+ this.setting={
+ name: '仪表盘',
+ // unit: '', // 单位
+ titleWeight: 10,
+ titleSize: 15,
+ cardshow: false, // 是否卡片显示
+ border: 0,
+ back: '#fff',
+ type: '1', // 展示类型
+ datatype: '1', // ?????????????
+ url: '', // ???????????????????
+ },
+ this.dicData=[],
+ this.showForm=['name', 'titleWeight', 'titleSize', 'cardshow', 'border', 'back', 'type']
+ this.column=[]
+ this.tableData=[
+ {value: 5.6}
+ ]
+ }
+}
diff --git a/src/views/chart/components/chart/plugin/chart/dataCard.js b/src/views/chart/components/chart/plugin/chart/dataCard.js
new file mode 100644
index 0000000000000000000000000000000000000000..270f658fc603e8a777f54bedb623ba5fe02f1d5d
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/chart/dataCard.js
@@ -0,0 +1,25 @@
+import gallery from './gallery'
+import backImg from '../../../../styles/chart/info.png'
+export default class GDataCard extends gallery {
+ constructor(shape='DataCard') {
+ super(shape);
+ this.name='数据卡片'
+ this.setting={
+ // name: '数据卡片',
+ cardTitle: '系统用户数',
+ titleWeight: 5,
+ titleSize: 15,
+ contentWeight: 10,
+ contentSize: 24,
+ titleColor: '#333',
+ contentColor: '#de3a4a',
+ back: backImg,
+ type: 'data', // 展示类型
+ }
+ this.dicData = []
+ this.showForm = ['name', 'titleWeight', 'titleSize', 'fontSize', 'color', 'back', 'type']
+ this.cardTitle = '系统用户数'
+ this.cardContent = '110,002,135'
+ // this.cardContent = 110002135
+ }
+}
diff --git a/src/views/chart/components/chart/plugin/chart/funnel.js b/src/views/chart/components/chart/plugin/chart/funnel.js
new file mode 100644
index 0000000000000000000000000000000000000000..26c238ccbc2137cf77a2174911b95c1209f987b7
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/chart/funnel.js
@@ -0,0 +1,37 @@
+/***
+ * @Author: 罗兴
+ * @LastEditors: 罗兴
+ * @Date: 2021-09-29 21:10:04
+ * @LastEditTime: 2021-10-15 10:13:42
+ * @FilePath: \jvs-ui\src\views\chart\components\chart\plugin\chart\funnel.js
+ * @Description: file content
+ */
+import gallery from './gallery'
+export default class GFunnelChart extends gallery {
+ constructor(shape='FunnelChart') {
+ super(shape);
+ this.name='漏斗图'
+ this.setting = {
+ name: '基础漏斗图',
+ // unit: '', // 单位
+ titleWeight: 10,
+ titleSize: 15,
+ cardshow: false, // 是否卡片显示
+ border: 0,
+ back: '#fff',
+ type: '1', // 展示类型
+ datatype: '1', // ?????????????
+ url: '', // ???????????????????
+ },
+ this.dicData=[],
+ this.showForm=['name', 'unit', 'titleWeight', 'titleSize', 'cardshow', 'border', 'back', 'type'],
+ this.column=[]
+ this.tableData=[
+ { type: '浏览网站', value: 50000 },
+ { type: '放入购物车', value: 35000 },
+ { type: '生成订单', value: 25000 },
+ { type: '支付订单', value: 15000 },
+ { type: '完成交易', value: 8000 }
+ ]
+ }
+}
diff --git a/src/views/chart/components/chart/plugin/chart/gallery.js b/src/views/chart/components/chart/plugin/chart/gallery.js
new file mode 100644
index 0000000000000000000000000000000000000000..6950688f29e44876b4be0bde11f6a4c211d83610
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/chart/gallery.js
@@ -0,0 +1,7 @@
+export default class gallery {
+ constructor (shape){
+ this.shape = shape
+ this.span = 24
+ this.id = shape + new Date().getTime()
+ }
+ }
diff --git a/src/views/chart/components/chart/plugin/chart/histogram.js b/src/views/chart/components/chart/plugin/chart/histogram.js
new file mode 100644
index 0000000000000000000000000000000000000000..0189fae7d4e415ba6f04cb09a20766d4dfb3597d
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/chart/histogram.js
@@ -0,0 +1,95 @@
+import gallery from './gallery'
+export default class GHist extends gallery {
+ constructor(shape='HistogramChart') {
+ super(shape);
+ this.name='柱状图'
+ this.setting={
+ name: '分组柱状图',
+ unit: '', // 单位
+ titleWeight: 10,
+ titleSize: 15,
+ cardshow: false, // 是否卡片显示
+ border: 0,
+ back: '#fff',
+ type: 'group', // 展示类型
+ datatype: '1', // ?????????????
+ url: '', // ???????????????????
+ step:2 // 直方图的步长
+ },
+ this.dicData=[
+ { label: '基础柱状图', value: 'base' },
+ { label: '分组柱状图', value: 'group' },
+ { label: '堆叠柱状图', value: 'stack' },
+ { label: '直方图', value: 'hist' },
+ { label: '百分比柱状图', value: 'percent' }
+ ],
+ this.showForm=['name', 'unit', 'titleWeight', 'titleSize', 'cardshow', 'border', 'back', 'type'],
+ this.column=[
+ {
+ "key": "项"
+ },
+ {
+ "key": "整体"
+ },
+ {
+ "key": "非技术岗"
+ },
+ {
+ "key": "技术岗"
+ }
+ ]
+ this.tableData=[
+ {
+ "name":"Apple",
+ "data":[
+ {
+ "xAxis":"整体",
+ "yAxis":30
+ },
+ {
+ "xAxis":"非技术岗",
+ "yAxis":40
+ },
+ {
+ "xAxis":"技术岗",
+ "yAxis":35
+ }
+ ]
+ },
+ {
+ "name":"Facebook",
+ "data":[
+ {
+ "xAxis":"整体",
+ "yAxis":35
+ },
+ {
+ "xAxis":"非技术岗",
+ "yAxis":65
+ },
+ {
+ "xAxis":"技术岗",
+ "yAxis":35
+ }
+ ]
+ },
+ {
+ "name":"Google",
+ "data":[
+ {
+ "xAxis":"整体",
+ "yAxis":28
+ },
+ {
+ "xAxis":"非技术岗",
+ "yAxis":47
+ },
+ {
+ "xAxis":"技术岗",
+ "yAxis":25
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/src/views/chart/components/chart/plugin/chart/infoCard.js b/src/views/chart/components/chart/plugin/chart/infoCard.js
new file mode 100644
index 0000000000000000000000000000000000000000..842c19c9edd98206a4808ad03950f139573be10f
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/chart/infoCard.js
@@ -0,0 +1,27 @@
+import gallery from './gallery'
+import backImg from '../../../../styles/chart/info.png'
+export default class GInfoCard extends gallery {
+ constructor(shape='InfoCard') {
+ super(shape);
+ this.name='信息卡片'
+ this.setting={
+ // name: '数据卡片',
+ cardTitle: '风控系统',
+ cardContent: '最适合自己的电商小程序',
+ titleWeight: 10,
+ titleSize: 20,
+ contentWeight: 5,
+ contentSize: 12,
+ titleColor: '#fff',
+ contentColor: '#fff',
+ url: '',
+ back: backImg,
+ type: 'info', // 展示类型
+ infoUrl: '' // 链接地址
+ }
+ this.dicData = []
+ this.showForm = ['name', 'titleWeight', 'titleSize', 'fontSize', 'color', 'back', 'type']
+ this.cardTitle = '风控系统'
+ this.cardContent = '最适合自己的电商小程序'
+ }
+}
diff --git a/src/views/chart/components/chart/plugin/chart/line.js b/src/views/chart/components/chart/plugin/chart/line.js
new file mode 100644
index 0000000000000000000000000000000000000000..f124204d89fb77c26142648cf4c4017622101bed
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/chart/line.js
@@ -0,0 +1,94 @@
+/***
+ * @Author: 罗兴
+ * @LastEditors: 罗兴
+ * @Date: 2021-09-29 21:10:04
+ * @LastEditTime: 2021-10-09 11:28:45
+ * @FilePath: \jvs-ui\src\views\chart\components\chart\plugin\chart\line.js
+ * @Description: file content
+ */
+import gallery from './gallery'
+export default class GLine extends gallery {
+ constructor(shape='LineChart') {
+ super(shape);
+ this.name='折线图'
+ this.setting={
+ name: '基础折线图',
+ unit: '', // 单位
+ titleWeight: 10,
+ titleSize: 15,
+ cardshow: false, // 是否卡片显示
+ border: 0,
+ back: '#fff',
+ type: 'line', // 展示类型
+ datatype: '1', // ?????????????
+ url: '', // ???????????????????
+ },
+ this.dicData=[
+ { label: '基础折线图', value: 'line' },
+ { label: '多折线图', value: 'lines' },
+ { label: '其他折线图', value: 'other' }
+ ],
+ //
+ this.showForm=['name', 'unit', 'titleWeight', 'titleSize', 'cardshow', 'border', 'back', 'type'],
+ this.column=[
+ {
+ "key": "项"
+ },
+ {
+ "key": "1月"
+ },
+ {
+ "key": "2月"
+ },
+ {
+ "key": "3月"
+ },
+ {
+ "key": "4月"
+ },
+ {
+ "key": "5月"
+ }
+ ],
+ this.tableData=[
+ {
+ "name":"电信",
+ "data":[
+ {
+ "xAxis":"1月",
+ "yAxis":18.9
+ },
+ {
+ "xAxis":"2月",
+ "yAxis":28.8
+ },
+ {
+ "xAxis":"3月",
+ "yAxis":39.3
+ },
+ {
+ "xAxis":"4月",
+ "yAxis":81.4
+ },
+ {
+ "xAxis":"5月",
+ "yAxis":47
+ }
+ ]
+ },
+ // {
+ // "项": "电信",
+ // "1月": 18.9,
+ // "2月": 28.8,
+ // "3月": 39.3,
+ // "4月": 81.4,
+ // "5月": 47
+ // }
+ // { x: '1月', y: 18.9, '项': '电信' },
+ // { x: '2月', y: 28.8, '项': '电信' },
+ // { x: '3月', y: 39.3, '项': '电信' },
+ // { x: '4月', y: 81.4, '项': '电信' },
+ // { x: '5月', y: 47, '项': '电信' }
+ ]
+ }
+}
diff --git a/src/views/chart/components/chart/plugin/chart/pie.js b/src/views/chart/components/chart/plugin/chart/pie.js
new file mode 100644
index 0000000000000000000000000000000000000000..a3dbcb99c9f333efd3230ef18b6a46a6a303c910
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/chart/pie.js
@@ -0,0 +1,34 @@
+import gallery from './gallery'
+export default class GPie extends gallery {
+ constructor(shape='Pie') {
+ super(shape);
+ this.name='饼图'
+ this.setting={
+ name: '饼图',
+ // unit: '', // 单位
+ titleWeight: 10,
+ titleSize: 15,
+ cardshow: false, // 是否卡片显示
+ border: 0,
+ back: '#fff',
+ type: '1', // 展示类型
+ datatype: '1', // ?????????????
+ url: '', // ???????????????????
+ },
+ this.dicData=[
+ { label: '基础饼图', value: '1' },
+ { label: '饼图(内部文字)', value: '2' },
+ { label: '基础环图', value: '3' },
+ { label: '南丁格尔图', value: '4' },
+ { label: '南丁格尔环图', value: '5' }
+ ],
+ this.showForm=['name', 'titleWeight', 'titleSize', 'cardshow', 'border', 'back', 'type'],
+ this.tableData=[
+ { type: '事例一', value: 40 },
+ { type: '事例二', value: 21 },
+ { type: '事例三', value: 17 },
+ { type: '事例四', value: 13 },
+ { type: '事例五', value: 9 }
+ ]
+ }
+}
diff --git a/src/views/chart/components/chart/plugin/chart/scatter.js b/src/views/chart/components/chart/plugin/chart/scatter.js
new file mode 100644
index 0000000000000000000000000000000000000000..514e620a1e708feec488919f57ed3761b4ae7fb6
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/chart/scatter.js
@@ -0,0 +1,36 @@
+/***
+ * @Author: 罗兴
+ * @LastEditors: 罗兴
+ * @Date: 2021-09-29 21:10:04
+ * @LastEditTime: 2021-10-14 14:50:33
+ * @FilePath: \jvs-ui\src\views\chart\components\chart\plugin\chart\scatter.js
+ * @Description: file content
+ */
+import gallery from './gallery'
+export default class GScatter extends gallery {
+ constructor(shape='ScatterChart') {
+ super(shape);
+ this.name='基础散点图'
+ this.setting={
+ name: '基础散点图',
+ // unit: '', // 单位
+ titleWeight: 10,
+ titleSize: 15,
+ cardshow: false, // 是否卡片显示
+ border: 0,
+ back: '#fff',
+ type: 'base', // 展示类型
+ datatype: '1', // ?????????????
+ url: '', // ???????????????????
+ xUnit:'cm',
+ yUnit:'kg'
+ },
+ this.dicData=[
+ { label: '基础散点图', value: 'base' },
+ { label: '气泡图', value: 'bubble' },
+ ]
+ this.showForm=['name', 'unit', 'titleWeight', 'titleSize', 'cardshow', 'border', 'back', 'type'],
+ this.column=[],
+ this.tableData=[]
+ }
+}
diff --git a/src/views/chart/components/chart/plugin/chart/stackArea.js b/src/views/chart/components/chart/plugin/chart/stackArea.js
new file mode 100644
index 0000000000000000000000000000000000000000..f5cfc34f7744e48649916abf520580bc91adff7a
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/chart/stackArea.js
@@ -0,0 +1,136 @@
+import gallery from './gallery'
+export default class GStackArea extends gallery {
+ constructor(shape='AreaChart') {
+ super(shape);
+ this.name='堆叠面积图'
+ this.setting={
+ name: '堆叠面积图',
+ unit: '', // 单位
+ titleWeight: 10,
+ titleSize: 15,
+ cardshow: false, // 是否卡片显示
+ border: 0,
+ back: '#fff',
+ type: 'stack', // 展示类型
+ datatype: '1', // ?????????????
+ url: '', // ???????????????????
+ }
+ this.dicData=[
+ { label: '基础面积图', value: 'base' },
+ { label: '堆叠面积图', value: 'stack' },
+ ]
+ this.showForm=['name', 'unit', 'titleWeight', 'titleSize', 'cardshow', 'border', 'back', 'type'],
+ this.column=[
+ {
+ "key": "项"
+ },
+ {
+ "key": "1750"
+ },
+ {
+ "key": "1800"
+ },
+ {
+ "key": "1850"
+ },
+ {
+ "key": "1900"
+ },
+ {
+ "key": "1950"
+ },
+ {
+ "key": "1999"
+ },
+ {
+ "key": "2000"
+ }
+ ],
+ this.tableData=[
+ {
+ name:"Asia",
+ data:[{
+ xAxis:'1750',
+ yAxis:502
+ },{
+ xAxis:'1800',
+ yAxis:502
+ },{
+ xAxis:'1850',
+ yAxis:635
+ },{
+ xAxis:'1900',
+ yAxis:5268
+ },{
+ xAxis:'1950',
+ yAxis:4400
+ },{
+ xAxis:'1950',
+ yAxis:4400
+ },{
+ xAxis:'1999',
+ yAxis:3634
+ },{
+ xAxis:'2000',
+ yAxis:947
+ },]
+ },
+ {
+ name:"Africa",
+ data:[{
+ xAxis:'1750',
+ yAxis:106
+ },{
+ xAxis:'1800',
+ yAxis:107
+ },{
+ xAxis:'1850',
+ yAxis:111
+ },{
+ xAxis:'1900',
+ yAxis:1766
+ },{
+ xAxis:'1950',
+ yAxis:221
+ },{
+ xAxis:'1950',
+ yAxis:221
+ },{
+ xAxis:'1999',
+ yAxis:767
+ },{
+ xAxis:'2000',
+ yAxis:133
+ },]
+ },
+ {
+ name:"Europe",
+ data:[{
+ xAxis:'1750',
+ yAxis:163
+ },{
+ xAxis:'1800',
+ yAxis:203
+ },{
+ xAxis:'1850',
+ yAxis:111
+ },{
+ xAxis:'1900',
+ yAxis:276
+ },{
+ xAxis:'1950',
+ yAxis:628
+ },{
+ xAxis:'1950',
+ yAxis:547
+ },{
+ xAxis:'1999',
+ yAxis:729
+ },{
+ xAxis:'2000',
+ yAxis:408
+ },]
+ },
+ ]
+ }
+}
diff --git a/src/views/chart/components/chart/plugin/dataForm.vue b/src/views/chart/components/chart/plugin/dataForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..effb9373616d5dd7df6281272b7d92dc6bc7c767
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/dataForm.vue
@@ -0,0 +1,599 @@
+
+
+
+
+
+
筛选条件
+
+
+ 可根据筛选标签内的内容,如使用${dept_id}拼凑执行sql或接口或逻辑引擎的执行结果进行数据动态筛选
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
数据来源
+
+
+ 模拟数据:为假数据。通常只做测试数据显示使用;
+ 逻辑引擎:可在逻辑引擎进行设计后操作外部或内部数据进行图表展示;
+
+
+
+
+
+
+
+
+
+
+
+
+ 提示:可支持后台服务lb.xxx地址
+
+
+
+
+
+
+
+ 变量引用
+
+
+ 变量名称
+ {startTime}
+ {endTime}
+ {chartDeptId}
+ {chartUserId}
+ {chartUserRoles}
+
+
+ 说明
+ 开始时间
+ 结束时间
+ 部门id
+ 用户id
+ 角色ID以逗号分割
+
+
+
+
+
+
+
+
+
+
+
+ 变量引用
+
+
+ 变量名称
+ {startTime}
+ {endTime}
+ {chartDeptId}
+ {chartUserId}
+ {chartUserRoles}
+
+
+ 说明
+ 开始时间
+ 结束时间
+ 部门id
+ 用户id
+ 角色ID以逗号分割
+
+
+
+
+
+
+
+
+
+
+
+
+ 生成mock数据
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/chart/components/chart/plugin/dataTableForm.vue b/src/views/chart/components/chart/plugin/dataTableForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e2aefa9cc58567f7d486cce36845231d0b52d1ba
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/dataTableForm.vue
@@ -0,0 +1,186 @@
+
+
+
+
+ 添加列
+ 添加行
+ 保存组件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 移除
+
+
+ 生成数据
+
+
+
+
+
+
+
+
diff --git a/src/views/chart/components/chart/plugin/gallery.vue b/src/views/chart/components/chart/plugin/gallery.vue
new file mode 100644
index 0000000000000000000000000000000000000000..472e72b3422639760d8510cc5e57846861d65ada
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/gallery.vue
@@ -0,0 +1,141 @@
+
+
+
![]()
+
+
+
+
{{setting.name}}
+
{{ setting.name }}
+
+
+
+
+
diff --git a/src/views/chart/components/chart/plugin/info.vue b/src/views/chart/components/chart/plugin/info.vue
new file mode 100644
index 0000000000000000000000000000000000000000..397c980982471c2bd8930473a07d86e07c6137f3
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/info.vue
@@ -0,0 +1,1014 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/chart/components/chart/plugin/optionForm.vue b/src/views/chart/components/chart/plugin/optionForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7d0215ce227fcf0b71b30ee3d568b6b8c5ea9c1c
--- /dev/null
+++ b/src/views/chart/components/chart/plugin/optionForm.vue
@@ -0,0 +1,260 @@
+
+
+
+
+
diff --git a/src/views/chart/components/design/permission.vue b/src/views/chart/components/design/permission.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b7ed76312de693209bf9e386430c6aa4d8bea668
--- /dev/null
+++ b/src/views/chart/components/design/permission.vue
@@ -0,0 +1,275 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/chart/components/imageSelect/ImageSelect.vue b/src/views/chart/components/imageSelect/ImageSelect.vue
new file mode 100644
index 0000000000000000000000000000000000000000..64af4a1b3b507486f0e650dabd3e346dde3bd932
--- /dev/null
+++ b/src/views/chart/components/imageSelect/ImageSelect.vue
@@ -0,0 +1,315 @@
+
+
+
+
+
+
+
+
diff --git a/src/views/chart/components/numberGrow/index.vue b/src/views/chart/components/numberGrow/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7754160e0e1fed999b99132cd1518469131c7543
--- /dev/null
+++ b/src/views/chart/components/numberGrow/index.vue
@@ -0,0 +1,75 @@
+
+
+ {{ value }}
+
+
+
+
+
+
diff --git a/src/views/chart/const/img/filter-selected.png b/src/views/chart/const/img/filter-selected.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b2fd5cf8de48f5798df5d2fe89784f9eab8f2b5
Binary files /dev/null and b/src/views/chart/const/img/filter-selected.png differ
diff --git a/src/views/chart/const/img/filter.png b/src/views/chart/const/img/filter.png
new file mode 100644
index 0000000000000000000000000000000000000000..f7eb30fc2af66aa0987885119cc36726e3534694
Binary files /dev/null and b/src/views/chart/const/img/filter.png differ
diff --git a/src/views/chart/const/img/mobile.png b/src/views/chart/const/img/mobile.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d24fef7af5b46078caafd4019fb0eadbdb678bc
Binary files /dev/null and b/src/views/chart/const/img/mobile.png differ
diff --git a/src/views/chart/const/img/pc.png b/src/views/chart/const/img/pc.png
new file mode 100644
index 0000000000000000000000000000000000000000..fc215effc75cf2bc293ef37bc30821cf3f123c61
Binary files /dev/null and b/src/views/chart/const/img/pc.png differ
diff --git a/src/views/chart/const/img/setting.png b/src/views/chart/const/img/setting.png
new file mode 100644
index 0000000000000000000000000000000000000000..80751f6f9785b22ebb119fd9a58b7bc2b78ea612
Binary files /dev/null and b/src/views/chart/const/img/setting.png differ
diff --git a/src/views/chart/router.js b/src/views/chart/router.js
new file mode 100644
index 0000000000000000000000000000000000000000..b3e9c713e72f70b51b5ded9d1ff27c07939c6858
--- /dev/null
+++ b/src/views/chart/router.js
@@ -0,0 +1,35 @@
+export default [
+ {
+ path: '/chart',
+ name: '图表引擎',
+ component: () =>
+ import( /* webpackChunkName: "page" */ './views/list/index'),
+ meta: {
+ keepAlive: true,
+ isTab: true,
+ isAuth: false
+ }
+ },
+ {
+ path: '/chartShow',
+ name: '预览',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/list/show'),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: '/chartDesign',
+ name: '设计',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/list/design'),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ }
+]
diff --git a/src/views/chart/styles/chart/baseArea.png b/src/views/chart/styles/chart/baseArea.png
new file mode 100644
index 0000000000000000000000000000000000000000..19fb5167113983cf41b14023b073d320a3b5398d
Binary files /dev/null and b/src/views/chart/styles/chart/baseArea.png differ
diff --git a/src/views/chart/styles/chart/bing.png b/src/views/chart/styles/chart/bing.png
new file mode 100644
index 0000000000000000000000000000000000000000..456fc4384e57c9a2b70c47e8cc9b740e3e9c7a23
Binary files /dev/null and b/src/views/chart/styles/chart/bing.png differ
diff --git a/src/views/chart/styles/chart/bubble.png b/src/views/chart/styles/chart/bubble.png
new file mode 100644
index 0000000000000000000000000000000000000000..5553fe4564812123a61c7ecae04d5c37fc66b5d9
Binary files /dev/null and b/src/views/chart/styles/chart/bubble.png differ
diff --git a/src/views/chart/styles/chart/codeborder.png b/src/views/chart/styles/chart/codeborder.png
new file mode 100644
index 0000000000000000000000000000000000000000..925481aa9339acaeba6397ea056e31f471c52988
Binary files /dev/null and b/src/views/chart/styles/chart/codeborder.png differ
diff --git a/src/views/chart/styles/chart/dashBoard.png b/src/views/chart/styles/chart/dashBoard.png
new file mode 100644
index 0000000000000000000000000000000000000000..25e2eebb0ad5b46a9960a84854dc2a7f1848a677
Binary files /dev/null and b/src/views/chart/styles/chart/dashBoard.png differ
diff --git a/src/views/chart/styles/chart/dataCard.png b/src/views/chart/styles/chart/dataCard.png
new file mode 100644
index 0000000000000000000000000000000000000000..7fa07c2d9e1f74fa2e81d41e5a555d4c96a59717
Binary files /dev/null and b/src/views/chart/styles/chart/dataCard.png differ
diff --git a/src/views/chart/styles/chart/dataNull.png b/src/views/chart/styles/chart/dataNull.png
new file mode 100644
index 0000000000000000000000000000000000000000..ee4c0cef8d20902294d2ecf3f81e02d062095fae
Binary files /dev/null and b/src/views/chart/styles/chart/dataNull.png differ
diff --git a/src/views/chart/styles/chart/funnel.png b/src/views/chart/styles/chart/funnel.png
new file mode 100644
index 0000000000000000000000000000000000000000..bdbbbf941547c7f8ecd644429e27b2cd2c37516f
Binary files /dev/null and b/src/views/chart/styles/chart/funnel.png differ
diff --git a/src/views/chart/styles/chart/groupBar.png b/src/views/chart/styles/chart/groupBar.png
new file mode 100644
index 0000000000000000000000000000000000000000..b48d284bca43f2dc7465fa9af412420c8f5f83ce
Binary files /dev/null and b/src/views/chart/styles/chart/groupBar.png differ
diff --git a/src/views/chart/styles/chart/groupHist.png b/src/views/chart/styles/chart/groupHist.png
new file mode 100644
index 0000000000000000000000000000000000000000..cc8894a923c410d2db4939d11e1da95419fda79e
Binary files /dev/null and b/src/views/chart/styles/chart/groupHist.png differ
diff --git a/src/views/chart/styles/chart/hist.png b/src/views/chart/styles/chart/hist.png
new file mode 100644
index 0000000000000000000000000000000000000000..df0a511f1b83bc14e8a2fe1c8814d69cd943dda2
Binary files /dev/null and b/src/views/chart/styles/chart/hist.png differ
diff --git a/src/views/chart/styles/chart/huan.png b/src/views/chart/styles/chart/huan.png
new file mode 100644
index 0000000000000000000000000000000000000000..cf63c5d86e3c214f32ec9cd1d64255f7bd931bf0
Binary files /dev/null and b/src/views/chart/styles/chart/huan.png differ
diff --git a/src/views/chart/styles/chart/info.png b/src/views/chart/styles/chart/info.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b81e19d4caddc0e2cbc7547e79495c5139a0cce
Binary files /dev/null and b/src/views/chart/styles/chart/info.png differ
diff --git a/src/views/chart/styles/chart/infoCard.png b/src/views/chart/styles/chart/infoCard.png
new file mode 100644
index 0000000000000000000000000000000000000000..cd90576ff6c52fbb12246ef559fd2b009848522b
Binary files /dev/null and b/src/views/chart/styles/chart/infoCard.png differ
diff --git a/src/views/chart/styles/chart/line.png b/src/views/chart/styles/chart/line.png
new file mode 100644
index 0000000000000000000000000000000000000000..acf84925a54c75cfe3569e55e3a1f8d358e2aa8f
Binary files /dev/null and b/src/views/chart/styles/chart/line.png differ
diff --git a/src/views/chart/styles/chart/lines.png b/src/views/chart/styles/chart/lines.png
new file mode 100644
index 0000000000000000000000000000000000000000..4247d31661955ca363213def278214011c5d2292
Binary files /dev/null and b/src/views/chart/styles/chart/lines.png differ
diff --git a/src/views/chart/styles/chart/mobile.png b/src/views/chart/styles/chart/mobile.png
new file mode 100644
index 0000000000000000000000000000000000000000..d98f40d10bfbf53b2e1d74e4a2522adf93a80189
Binary files /dev/null and b/src/views/chart/styles/chart/mobile.png differ
diff --git a/src/views/chart/styles/chart/otherLine.png b/src/views/chart/styles/chart/otherLine.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea2168a14f02f7f80fab55ffba3f29af52e99a4c
Binary files /dev/null and b/src/views/chart/styles/chart/otherLine.png differ
diff --git a/src/views/chart/styles/chart/point.png b/src/views/chart/styles/chart/point.png
new file mode 100644
index 0000000000000000000000000000000000000000..461094b8050fdb3d83b9a73862233d76264aced7
Binary files /dev/null and b/src/views/chart/styles/chart/point.png differ
diff --git a/src/views/chart/styles/chart/rose.png b/src/views/chart/styles/chart/rose.png
new file mode 100644
index 0000000000000000000000000000000000000000..3cd93aa3bc2490b989c0218d910fa8c44181ef9a
Binary files /dev/null and b/src/views/chart/styles/chart/rose.png differ
diff --git a/src/views/chart/styles/chart/roseRing.png b/src/views/chart/styles/chart/roseRing.png
new file mode 100644
index 0000000000000000000000000000000000000000..2b9f5f523ef36ed333f3963d50fe48d3e3800c7e
Binary files /dev/null and b/src/views/chart/styles/chart/roseRing.png differ
diff --git a/src/views/chart/styles/chart/stack.png b/src/views/chart/styles/chart/stack.png
new file mode 100644
index 0000000000000000000000000000000000000000..079ad23eb5377431b8800096a32c08217eda903a
Binary files /dev/null and b/src/views/chart/styles/chart/stack.png differ
diff --git a/src/views/chart/styles/chart/stackArea.png b/src/views/chart/styles/chart/stackArea.png
new file mode 100644
index 0000000000000000000000000000000000000000..4a80f383d0f277007adb98e597609bb5a7271134
Binary files /dev/null and b/src/views/chart/styles/chart/stackArea.png differ
diff --git a/src/views/chart/styles/chart/tiao.png b/src/views/chart/styles/chart/tiao.png
new file mode 100644
index 0000000000000000000000000000000000000000..312e09635f3e89a349c3fac0b6cb3237b9bb0335
Binary files /dev/null and b/src/views/chart/styles/chart/tiao.png differ
diff --git a/src/views/chart/styles/chart/zhu.png b/src/views/chart/styles/chart/zhu.png
new file mode 100644
index 0000000000000000000000000000000000000000..c70c9596e8cd1a711b16c9ca91a8917e494bd24a
Binary files /dev/null and b/src/views/chart/styles/chart/zhu.png differ
diff --git a/src/views/chart/styles/menu/area.png b/src/views/chart/styles/menu/area.png
new file mode 100644
index 0000000000000000000000000000000000000000..f8905af9354fc14516f72a3494c3db44a7b0fc48
Binary files /dev/null and b/src/views/chart/styles/menu/area.png differ
diff --git a/src/views/chart/styles/menu/bar.png b/src/views/chart/styles/menu/bar.png
new file mode 100644
index 0000000000000000000000000000000000000000..2a5121c10cfa953f83ec09c5ae9fa8683a4f78f0
Binary files /dev/null and b/src/views/chart/styles/menu/bar.png differ
diff --git a/src/views/chart/styles/menu/card.png b/src/views/chart/styles/menu/card.png
new file mode 100644
index 0000000000000000000000000000000000000000..996543e6ce1ffc74c0a1717983e8ef8fd6e40130
Binary files /dev/null and b/src/views/chart/styles/menu/card.png differ
diff --git a/src/views/chart/styles/menu/dashBoard.png b/src/views/chart/styles/menu/dashBoard.png
new file mode 100644
index 0000000000000000000000000000000000000000..de712919bfe37c1f743f50c451cfc43758fa5c27
Binary files /dev/null and b/src/views/chart/styles/menu/dashBoard.png differ
diff --git a/src/views/chart/styles/menu/funnel.png b/src/views/chart/styles/menu/funnel.png
new file mode 100644
index 0000000000000000000000000000000000000000..bd6c548f9d6177213bd5c112f077a7f25c02118c
Binary files /dev/null and b/src/views/chart/styles/menu/funnel.png differ
diff --git a/src/views/chart/styles/menu/hist.png b/src/views/chart/styles/menu/hist.png
new file mode 100644
index 0000000000000000000000000000000000000000..7e0a6d1370fcc7b07c151aeae1cdc2bc5afd9cf5
Binary files /dev/null and b/src/views/chart/styles/menu/hist.png differ
diff --git a/src/views/chart/styles/menu/line.png b/src/views/chart/styles/menu/line.png
new file mode 100644
index 0000000000000000000000000000000000000000..dfc8b8757eb7ef812b5a89f9b37bc574050e4df3
Binary files /dev/null and b/src/views/chart/styles/menu/line.png differ
diff --git a/src/views/chart/styles/menu/pie.png b/src/views/chart/styles/menu/pie.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a4fcea61f5792c3673281abbb56c2fdb66e19fa
Binary files /dev/null and b/src/views/chart/styles/menu/pie.png differ
diff --git a/src/views/chart/styles/menu/scatter.png b/src/views/chart/styles/menu/scatter.png
new file mode 100644
index 0000000000000000000000000000000000000000..14b11e02716dd03a1cf3fb09b0efaea16830b157
Binary files /dev/null and b/src/views/chart/styles/menu/scatter.png differ
diff --git a/src/views/chart/views/list/design.vue b/src/views/chart/views/list/design.vue
new file mode 100644
index 0000000000000000000000000000000000000000..4890b6dc9fe6e11f4ade1b6b4b7403f4c0f3669d
--- /dev/null
+++ b/src/views/chart/views/list/design.vue
@@ -0,0 +1,586 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/chart/views/list/index.vue b/src/views/chart/views/list/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..d23cd86f1db0a45b3a394e4e65beb1a94d8dc76a
--- /dev/null
+++ b/src/views/chart/views/list/index.vue
@@ -0,0 +1,408 @@
+
+
+
+
+ 设计
+ 查看
+
+ 卸载
+ 发布
+ 删除
+
+
+ {{getIsDeployText(scope.row.isDeploy)}}
+
+
+ 复制
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/chart/views/list/show.vue b/src/views/chart/views/list/show.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c3cb56edfc442688fd93f43c72476182a50081b1
--- /dev/null
+++ b/src/views/chart/views/list/show.vue
@@ -0,0 +1,475 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label.length > 6 ? item.label.substr(0, 4) + '...:' : item.label + ':' }}
+
+
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
使用手机扫码预览(30分钟有效)
+
刷新二维码
+
+
+
+
+
+
+
+
+
diff --git a/src/views/chart/views/single/index.vue b/src/views/chart/views/single/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..1ae257751344fc520adc27b00bd1562e391b3f65
--- /dev/null
+++ b/src/views/chart/views/single/index.vue
@@ -0,0 +1,458 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label.length > 6 ? item.label.substr(0, 4) + '...:' : item.label + ':' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/chart/views/single/leftMenu.vue b/src/views/chart/views/single/leftMenu.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f4ed3919780dab04c750869f1e337af5e1ec9b47
--- /dev/null
+++ b/src/views/chart/views/single/leftMenu.vue
@@ -0,0 +1,332 @@
+
+
+
+
+
+
+
diff --git a/src/views/chart/views/top/topBar.vue b/src/views/chart/views/top/topBar.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ffb6f5471a9eec74d2a6ff6bebb245c749cc4fe0
--- /dev/null
+++ b/src/views/chart/views/top/topBar.vue
@@ -0,0 +1,432 @@
+
+
+
+
+
+
+
{{infoData.name}}
+
{{infoData.isDeploy ? '已发布' : '未发布'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/document/router.js b/src/views/document/router.js
new file mode 100644
index 0000000000000000000000000000000000000000..4cca69bb5abd99397acfbfb9f0be3e00df8b7425
--- /dev/null
+++ b/src/views/document/router.js
@@ -0,0 +1,46 @@
+export default [
+ {
+ path: "/doc/demo",
+ name: "案例",
+ component: () =>
+ import(/* webpackChunkName: "page" */ "./views/demo/index"),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: "/doc/index",
+ name: "文档 | 组件说明",
+ component: () =>
+ import(/* webpackChunkName: "page" */ "./views/index/menu"),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: "/doc/permission",
+ name: "权限配置",
+ component: () =>
+ import(/* webpackChunkName: "page" */ "./views/permission/index"),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: "/doc/tbshare",
+ name: "前端开发文档",
+ component: () =>
+ import(/* webpackChunkName: "page" */ "./views/tb/share"),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ }
+];
diff --git a/src/views/document/views/demo/form/option.js b/src/views/document/views/demo/form/option.js
new file mode 100644
index 0000000000000000000000000000000000000000..998c3a4060338deec56681505de8f1a4a9cfa3c3
--- /dev/null
+++ b/src/views/document/views/demo/form/option.js
@@ -0,0 +1,188 @@
+export const formOption = {
+ inline: true,
+ align: "right",
+ labelWidth: "auto",
+ column: [
+ {
+ label: "标题文本",
+ prop: "basic",
+ type: "title", // 类型为title
+ span: 24
+ },
+ {
+ label: "文本框",
+ prop: "input",
+ type: "input",
+ span: 6,
+ rules: [{ required: true, message: "请输入", trigger: "blur" }]
+ },
+ {
+ label: "只读文本",
+ prop: "inputReadOnly",
+ type: "inputReadOnly",
+ span: 6
+ },
+ {
+ label: "作用域",
+ prop: "textarea",
+ type: "textarea",
+ span: 6
+ },
+ {
+ label: "只读文本域",
+ prop: "textareaReadOnly",
+ type: "textareaReadOnly",
+ span: 6
+ },
+ {
+ label: "子表单",
+ prop: "formchild",
+ type: "radio",
+ dicData: [
+ { label: "选项1", value: "1" },
+ { label: "选项2", value: "2" }
+ ],
+ span: 24,
+ children: [
+ {
+ label: "数字",
+ prop: "number",
+ type: "inputNumber",
+ span: 8,
+ linkbind: "1"
+ },
+ {
+ label: "下拉选择",
+ prop: "select",
+ type: "select",
+ span: 8,
+ dicData: [{ label: "1", value: "1" }],
+ linkbind: "1"
+ },
+ {
+ label: "开关",
+ prop: "switch",
+ type: "switch",
+ span: 8,
+ linkbind: "2"
+ }
+ ]
+ },
+ {
+ label: "滑块",
+ prop: "slider",
+ type: "slider",
+ span: 24
+ },
+ {
+ label: "固定时间选择",
+ prop: "timeselect",
+ type: "timeSelect",
+ span: 12
+ },
+ {
+ label: "时间选择",
+ prop: "timepicker",
+ type: "timePicker",
+ span: 12
+ },
+ {
+ label: "日期选择",
+ prop: "datepicker",
+ type: "datePicker",
+ span: 12,
+ datetype: "datetime"
+ },
+ {
+ label: "图标选择",
+ prop: "iconSelect",
+ type: "iconSelect",
+ span: 12
+ },
+ {
+ label: "单选",
+ prop: "radio",
+ type: "radio",
+ span: 12,
+ dicData: [{ label: "1", value: "1" }]
+ },
+ {
+ label: "复选",
+ prop: "checkbox",
+ type: "checkbox",
+ span: 12,
+ dicData: [{ label: "1", value: "1" }]
+ },
+ {
+ label: "颜色",
+ prop: "colorselect",
+ type: "colorSelect",
+ span: 12
+ },
+ {
+ label: "图片",
+ prop: "image",
+ type: "image",
+ span: 12,
+ fileList: []
+ },
+ {
+ label: "上传图片",
+ prop: "imageUpload",
+ type: "imageUpload",
+ span: 12,
+ action: "",
+ fileList: []
+ },
+ {
+ label: "文件",
+ prop: "file",
+ type: "file",
+ span: 12,
+ fileList: []
+ },
+ {
+ label: "上传文件",
+ prop: "fileUpload",
+ type: "fileUpload",
+ span: 12,
+ action: "",
+ fileList: []
+ },
+ // {
+ // label: '展示表格',
+ // prop: 'tableReadOnly',
+ // type: 'tableReadOnly',
+ // span: 24
+ // },
+ {
+ label: "描述",
+ prop: "box",
+ type: "box",
+ span: 24,
+ text: "这是一段描述"
+ },
+ {
+ label: "链接",
+ prop: "link",
+ type: "link",
+ span: 24,
+ text: "百度",
+ openType: "_blank"
+ },
+ {
+ label: "嵌套页",
+ prop: "iframe",
+ type: "iframe",
+ span: 24,
+ iframeurl: "",
+ permisionFlag: "iframe"
+ },
+ {
+ label: "插槽",
+ prop: "myslot",
+ span: 24,
+ formSlot: true
+ }
+ ]
+};
diff --git a/src/views/document/views/demo/index.vue b/src/views/document/views/demo/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7121e5ffca58afc079e32478692620b403c04df0
--- /dev/null
+++ b/src/views/document/views/demo/index.vue
@@ -0,0 +1,171 @@
+
+
+
+
+
表格案例
+
+
+
+
+ 顶部左侧插槽
+
+
+
+ 顶部右侧插槽
+
+
+
+ 操作栏插槽
+
+
+
+ 分页左侧插槽
+
+
+
+
+
表单案例
+
+
+ 一、基础表单
+
+
+ 表单项插槽
+
+
+
+ 二、多级表单
+
+
+
+ 三、步骤表单
+
+
+
+
+
tab页
+
+
+ 插槽1
+
+
+ 插槽2
+
+
+
+
+
按钮button
+ size=mini
+ type=primary
+ plain=true
+ round=true
+ circle=true
+ loading=true
+ disabled=true
+ icon
+ autofocus=false
+ nativeType=submit
+
+
+
+
+
+
+
+
diff --git a/src/views/document/views/demo/levelForm/option.js b/src/views/document/views/demo/levelForm/option.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a7c99bb7cc231b316c6863747ce580d05d82277
--- /dev/null
+++ b/src/views/document/views/demo/levelForm/option.js
@@ -0,0 +1,36 @@
+export const levelFromOption = {
+ type: 'card',
+ column: [
+ {
+ label: '表单一', // 选项卡标题
+ disabled: false, // 是否禁用
+ name: 'first', // 与选项卡绑定值 value 对应的标识符,选项卡别名, 该选项卡在选项卡列表中的顺序值,如第一个选项卡则为'1'
+ permisionFlag: '',
+ defaultData: {}, // 表单默认值
+ formOption: {
+ inline: true,
+ labelWidth: 'auto',
+ column: [
+ {
+ label: '文本框',
+ prop: 'input',
+ }
+ ]
+ }
+ },
+ {
+ label: '表单二', // 选项卡标题
+ disabled: false, // 是否禁用
+ name: 'second', // 与选项卡绑定值 value 对应的标识符,选项卡别名, 该选项卡在选项卡列表中的顺序值,如第一个选项卡则为'1'
+ permisionFlag: ''
+ },
+ {
+ label: '表单三', // 选项卡标题
+ disabled: false, // 是否禁用
+ name: 'third', // 与选项卡绑定值 value 对应的标识符,选项卡别名, 该选项卡在选项卡列表中的顺序值,如第一个选项卡则为'1'
+ permisionFlag: 'third'
+ }
+ ]
+
+ }
+
\ No newline at end of file
diff --git a/src/views/document/views/demo/stepForm/option.js b/src/views/document/views/demo/stepForm/option.js
new file mode 100644
index 0000000000000000000000000000000000000000..6f3f5380bdcdfca8c2fb6b667df1516e983e7df9
--- /dev/null
+++ b/src/views/document/views/demo/stepForm/option.js
@@ -0,0 +1,52 @@
+export const stepFormOption = {
+ type: 'card',
+ column: [
+ {
+ label: '表单一', // 选项卡标题
+ disabled: false, // 是否禁用
+ name: 'first', // 与选项卡绑定值 value 对应的标识符,选项卡别名, 该选项卡在选项卡列表中的顺序值,如第一个选项卡则为'1'
+ permisionFlag: 'first',
+ defaultData: {}, // 表单默认值
+ formOption: {
+ inline: true,
+ labelWidth: 'auto',
+ column: [
+ {
+ label: '文本框',
+ prop: 'input',
+ }
+ ]
+ }
+ },
+ {
+ label: '表单二', // 选项卡标题
+ disabled: false, // 是否禁用
+ name: 'second', // 与选项卡绑定值 value 对应的标识符,选项卡别名, 该选项卡在选项卡列表中的顺序值,如第一个选项卡则为'1'
+ permisionFlag: '',
+ defaultData: {}, // 表单默认值
+ formOption: {
+ inline: true,
+ labelWidth: 'auto',
+ column: [
+ {
+ label: '下拉框',
+ prop: 'select',
+ type: 'select',
+ dicData: [
+ {label: '下拉一', value: 'first'},
+ {label: '下拉二', value: 'second'}
+ ]
+ }
+ ]
+ }
+ },
+ {
+ label: '表单三', // 选项卡标题
+ disabled: false, // 是否禁用
+ name: 'third', // 与选项卡绑定值 value 对应的标识符,选项卡别名, 该选项卡在选项卡列表中的顺序值,如第一个选项卡则为'1'
+ permisionFlag: 'third'
+ }
+ ]
+
+ }
+
\ No newline at end of file
diff --git a/src/views/document/views/demo/tab/option.js b/src/views/document/views/demo/tab/option.js
new file mode 100644
index 0000000000000000000000000000000000000000..e75ba8d96b90fc04f34e0f76c06622dd11066aaf
--- /dev/null
+++ b/src/views/document/views/demo/tab/option.js
@@ -0,0 +1,30 @@
+export const tabOption = {
+ type: 'card',
+ column: [
+ {
+ label: '选项一', // 选项卡标题
+ disabled: false, // 是否禁用
+ name: 'first', // 与选项卡绑定值 value 对应的标识符,选项卡别名, 该选项卡在选项卡列表中的顺序值,如第一个选项卡则为'1'
+ closable: false, // 标签是否可关闭
+ lazy: false, // 标签是否延迟渲染
+ permisionFlag: 'first'
+ },
+ {
+ label: '选项二', // 选项卡标题
+ disabled: true, // 是否禁用
+ name: 'second', // 与选项卡绑定值 value 对应的标识符,选项卡别名, 该选项卡在选项卡列表中的顺序值,如第一个选项卡则为'1'
+ closable: true, // 标签是否可关闭
+ lazy: false, // 标签是否延迟渲染
+ permisionFlag: ''
+ },
+ {
+ label: '选项三', // 选项卡标题
+ disabled: false, // 是否禁用
+ name: 'third', // 与选项卡绑定值 value 对应的标识符,选项卡别名, 该选项卡在选项卡列表中的顺序值,如第一个选项卡则为'1'
+ closable: true, // 标签是否可关闭
+ lazy: false, // 标签是否延迟渲染
+ permisionFlag: 'third'
+ }
+ ]
+
+}
diff --git a/src/views/document/views/demo/table/option.js b/src/views/document/views/demo/table/option.js
new file mode 100644
index 0000000000000000000000000000000000000000..6dc854cd1e485385a1c0969a62038eb9841c1bf1
--- /dev/null
+++ b/src/views/document/views/demo/table/option.js
@@ -0,0 +1,58 @@
+export const tableOption = {
+ title: "表格的标题",
+ page: true,
+ align: "center",
+ menuAlign: "center",
+ viewBtn: true,
+ addBtn: true,
+ editBtn: true,
+ selection: true,
+ search: true, // false,
+ showOverflow: true,
+
+ // 搜索表单设置
+ formAlign: "right", //对其方式
+ inline: false, // 表单项是否可以同行,当垂直方向空间受限且表单较简单时,可以在一行内放置表单
+ labelWidth: "auto", // label宽
+ submitBtn: true, // 提交按钮是否显示,默认显示
+ submitBtnText: "查询", // 提交按钮文字,默认 提交
+ emptyBtn: true, // 重置按钮,默认显示
+ emptyBtnText: "清空", // 重置按钮文字,默认 重置
+ column: [
+ {
+ label: "消息标题",
+ prop: "title",
+ search: true,
+ span: 6,
+ align: "left"
+ },
+ {
+ label: "内容",
+ prop: "content",
+ span: 6,
+ hide: true
+ },
+ {
+ label: "状态",
+ prop: "status",
+ span: 6,
+ color: "red",
+ type: "select",
+ dicData: [
+ { label: "未读", value: 0 },
+ { label: "已读", value: 1 }
+ ]
+ },
+ {
+ label: "创建时间",
+ prop: "createTime",
+ align: "right",
+ color: "blue",
+ span: 6,
+ type: "DatePicker",
+ datetype: "datetime",
+ format: "yyyy-MM-dd hh:mm:ss",
+ valueFormat: "yyyy-MM-dd hh:mm:ss"
+ }
+ ]
+};
diff --git a/src/views/document/views/index/component/attr.js b/src/views/document/views/index/component/attr.js
new file mode 100644
index 0000000000000000000000000000000000000000..fef87ccca6e398970bafcda44e092c0a1d29110c
--- /dev/null
+++ b/src/views/document/views/index/component/attr.js
@@ -0,0 +1,96 @@
+export const paramOption = {
+ addBtn: false,
+ menu: false,
+ align: 'left',
+ menuAlign: 'left',
+ hideTop: true,
+ column: [
+ {
+ label: '参数',
+ prop: 'param'
+ },
+ {
+ label: '说明',
+ prop: 'introduce'
+ },
+ {
+ label: '类型',
+ prop: 'type'
+ },
+ {
+ label: '可选值',
+ prop: 'value'
+ },
+ {
+ label: '默认值',
+ prop: 'default'
+ }
+ ]
+}
+
+export const eventOption = {
+ addBtn: false,
+ menu: false,
+ align: 'left',
+ menuAlign: 'left',
+ hideTop: true,
+ column: [
+ {
+ label: '事件名称',
+ prop: 'name'
+ },
+ {
+ label: '说明',
+ prop: 'introduce'
+ },
+ {
+ label: '回调参数',
+ prop: 'param'
+ }
+ ]
+}
+
+export const requestData = [
+ {
+ param: 'httpMethod',
+ introduce: '请求方式',
+ type: 'string',
+ value: 'GET | POST | PUT | DELETE',
+ default: '-'
+ },
+ {
+ param: 'requestContentType',
+ introduce: '请求类型',
+ type: 'string',
+ value: 'JSON | MULTIPART | FORM_URLENCODED',
+ default: '-'
+ },
+ {
+ param: 'responseContentType',
+ introduce: '响应类型',
+ type: 'string',
+ value: 'JSON | MULTIPART',
+ default: '-'
+ },
+ {
+ param: 'url',
+ introduce: '请求地址',
+ type: 'string',
+ value: '-',
+ default: '-'
+ },
+ {
+ param: 'headers',
+ introduce: '请求头',
+ type: 'array',
+ value: '[ {key: value} ]',
+ default: '-'
+ },
+ {
+ param: 'parameters',
+ introduce: '请求参数',
+ type: 'array',
+ value: '[ {key: value} ]',
+ default: '-'
+ },
+]
\ No newline at end of file
diff --git a/src/views/document/views/index/component/basic/button/index.vue b/src/views/document/views/index/component/basic/button/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..2e2e6d8f3046f024eaa9d18cfb10988aa81659f3
--- /dev/null
+++ b/src/views/document/views/index/component/basic/button/index.vue
@@ -0,0 +1,333 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
基础用法
+
基础的按钮用法
+
+
+ 默认按钮
+ 主要按钮
+ 成功按钮
+ 信息按钮
+ 警告按钮
+ 危险按钮
+
+
+
+ 朴素按钮
+ 主要按钮
+ 成功按钮
+ 信息按钮
+ 警告按钮
+ 危险按钮
+
+
+
+ 圆角按钮
+ 主要按钮
+ 成功按钮
+ 信息按钮
+ 警告按钮
+ 危险按钮
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
禁用状态
+
按钮不可用状态
+
+
+ 默认按钮
+ 主要按钮
+ 成功按钮
+ 信息按钮
+ 警告按钮
+ 危险按钮
+
+
+
+ 朴素按钮
+ 主要按钮
+ 成功按钮
+ 信息按钮
+ 警告按钮
+ 危险按钮
+
+
+
+
+
+
+
+
文字按钮
+
没有边框和背景颜色的按钮
+
+ 文字按钮
+ 文字按钮
+
+
+
+
+
+
+
图标按钮
+
带图标的按钮可增强辨识度(有文字)或节省空间(无文字)
+
+
+
+
+ 搜索
+ 上传
+
+
+
+
+
+
+
加载中
+
要设置为 loading 状态,只要设置loading属性为true即可
+
+ 加载中
+
+
+
+
+
+
+
不同尺寸
+
按钮组件提供除了默认值以外的三种尺寸,可以在不同场景下选择合适的按钮尺寸
+
+
额外的尺寸:medium、small、mini,通过设置size属性来配置它们
+
+
+ 默认按钮
+ 中等按钮
+ 小型按钮
+ 超小按钮
+
+
+ 默认按钮
+ 中等按钮
+ 小型按钮
+ 超小按钮
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/basic/container/index.vue b/src/views/document/views/index/component/basic/container/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9a855de7b08fadd8bf86dc7b18f3a5a515af007e
--- /dev/null
+++ b/src/views/document/views/index/component/basic/container/index.vue
@@ -0,0 +1,61 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/basic/form/form.js b/src/views/document/views/index/component/basic/form/form.js
new file mode 100644
index 0000000000000000000000000000000000000000..949df7410aaf46699eda3c79e5c2ccba09c0d84f
--- /dev/null
+++ b/src/views/document/views/index/component/basic/form/form.js
@@ -0,0 +1,198 @@
+export const form_column = [
+ {
+ label: "文本框",
+ prop: "inut",
+ rules: [
+ { required: true, message: "请输入文本框", trigger: "blur" },
+ ]
+ },
+ {
+ label: "下拉选择",
+ prop: "select",
+ type: "select",
+ dicData: [
+ {label: "选项一", value: "1"},
+ {label: "选项二", value: "2"}
+ ]
+ },
+ {
+ label: "单选框",
+ prop: "radio",
+ type: "radio",
+ dicData: [
+ {label: "选项一", value: "1"},
+ {label: "选项二", value: "2"}
+ ]
+ },
+ {
+ label: "多选框",
+ prop: "checkbox",
+ type: "checkbox",
+ dicData: [
+ {label: "选项一", value: "1"},
+ {label: "选项二", value: "2"}
+ ]
+ }
+]
+
+export const param_data = [
+ {
+ param: "refs",
+ introduce: "绑定的form对象",
+ type: "string",
+ value: "-",
+ default: "ruleForm"
+ },
+ {
+ param: "formData",
+ introduce: "表单值对象",
+ type: "object",
+ value: "-",
+ default: "-"
+ },
+ {
+ param: "defalutFormData",
+ introduce: "表单初始值数据",
+ type: "object",
+ value: "-",
+ default: "-"
+ },
+ {
+ param: "size",
+ introduce: "用于控制该表单内组件的尺寸",
+ type: "string",
+ value: "medium / small / mini",
+ default: "mini"
+ },
+ {
+ param: "disabled",
+ introduce: "是否禁用该表单内的所有组件。若设置为 true,则表单内组件上的 disabled 属性不再生效",
+ type: "boolean",
+ value: "-",
+ default: "false"
+ },
+ {
+ param: "option",
+ introduce: "表单配置",
+ type: "object",
+ value: "-",
+ default: "-"
+ }
+]
+
+export const form_option = [
+ {
+ param: "formAlign",
+ introduce: "对齐方式",
+ type: "string",
+ value: "left | right | top",
+ default: "right"
+ },
+ {
+ param: "inline",
+ introduce: "表单项是否可以同行,当垂直方向空间受限且表单较简单时,可以在一行内放置表单",
+ type: "boolean",
+ value: "-",
+ default: "false"
+ },
+ {
+ param: "labelWidth",
+ introduce: "表单域标签的宽度,例如 '50px'。作为 Form 直接子元素的 form-item 会继承该值。支持 auto",
+ type: "string",
+ value: "-",
+ default: "-"
+ },
+ {
+ param: "submitBtn",
+ introduce: "提交按钮",
+ type: "boolean",
+ value: "-",
+ default: "true"
+ },
+ {
+ param: "submitBtnText",
+ introduce: "提交按钮文字",
+ type: "string",
+ value: "-",
+ default: "提交"
+ },
+ {
+ param: "submitLoading",
+ introduce: "提交按钮loading",
+ type: "boolean",
+ value: "-",
+ default: "false"
+ },
+ {
+ param: "emptyBtn",
+ introduce: "重置按钮",
+ type: "boolean",
+ value: "-",
+ default: "true"
+ },
+ {
+ param: "emptyBtnText",
+ introduce: "重置按钮文字",
+ type: "string",
+ value: "-",
+ default: "重置"
+ },
+ {
+ param: "cancal",
+ introduce: "取消按钮",
+ type: "boolean",
+ value: "-",
+ default: "true"
+ },
+ {
+ param: "cancalBtnText",
+ introduce: "取消按钮文字",
+ type: "string",
+ value: "-",
+ default: "取消"
+ },
+ {
+ param: "isSearch",
+ introduce: "是否为查询表单",
+ type: "boolean",
+ value: "-",
+ default: "false"
+ },
+ {
+ param: "btnHide",
+ introduce: "是否隐藏按钮",
+ type: "boolean",
+ value: "-",
+ default: "false"
+ },
+ {
+ param: "column",
+ introduce: "表单项集合",
+ type: "array",
+ value: "-",
+ default: "-"
+ }
+]
+
+export const event_data = [
+ {
+ name: "submit",
+ introduce: "提交表单,校验通过后,参数返回表单对象",
+ param: "表单对象 form",
+ },
+ {
+ name: "reset",
+ introduce: "重置事件",
+ param: "ref名称",
+ },
+ {
+ name: "cancalClick",
+ introduce: "取消事件",
+ param: "-",
+ },
+ {
+ name: "formChange",
+ introduce: "监听表单项变化",
+ param: "表单对象 form",
+ },
+]
\ No newline at end of file
diff --git a/src/views/document/views/index/component/basic/form/index.vue b/src/views/document/views/index/component/basic/form/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ceccf573abd436a398ad7235902ac30aff27bd48
--- /dev/null
+++ b/src/views/document/views/index/component/basic/form/index.vue
@@ -0,0 +1,268 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
典型表单
+
包括各种表单项,比如输入框、选择器、开关、单选框、多选框等
+
+
rules设置校验规则,详情表单项属性配置及参考element校验
+
+
+
+
+
+
+
+
+
+
行内表单
+
当垂直方向空间受限且表单较简单时,可以在一行内放置表单
+
+
inline为true时单项保持一行内, 调节span设置一行内的单项个数, isSearch为true时按钮栏随单项流动
+
+
+
+
+
+
+
+
+
+
表单插槽
+
自定义表单部分位置内容
+
+
+
+
+ 顶部插槽 formTop
+
+
+
+
+
+ 底部插槽 formButton
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/basic/icon/icon.js b/src/views/document/views/index/component/basic/icon/icon.js
new file mode 100644
index 0000000000000000000000000000000000000000..e4594fc001f71d9fae4d8d84b1dba2eeab46cab2
--- /dev/null
+++ b/src/views/document/views/index/component/basic/icon/icon.js
@@ -0,0 +1,50 @@
+export const elList = [
+ "el-icon-platform-eleme", "el-icon-eleme", "el-icon-delete-solid", "el-icon-delete", "el-icon-s-tools", "el-icon-setting",
+ "el-icon-user-solid", "el-icon-user", "el-icon-phone", "el-icon-phone-outline", "el-icon-more", "el-icon-more-outline",
+ "el-icon-star-on", "el-icon-star-off", "el-icon-s-goods", "el-icon-goods", "el-icon-warning", "el-icon-warning-outline",
+ "el-icon-question", "el-icon-info", "el-icon-remove", "el-icon-circle-plus", "el-icon-success", "el-icon-error",
+ "el-icon-zoom-in", "el-icon-zoom-out", "el-icon-remove-outline", "el-icon-circle-plus-outline", "el-icon-circle-check",
+ "el-icon-circle-close", "el-icon-s-help", "el-icon-help", "el-icon-minus", "el-icon-plus", "el-icon-check", "el-icon-close",
+ "el-icon-picture", "el-icon-picture-outline", "el-icon-picture-outline-round", "el-icon-upload", "el-icon-upload2",
+ "el-icon-download", "el-icon-camera-solid", "el-icon-camera", "el-icon-video-camera-solid", "el-icon-video-camera",
+ "el-icon-message-solid", "el-icon-bell", "el-icon-s-cooperation", "el-icon-s-order", "el-icon-s-platform", "el-icon-s-fold",
+ "el-icon-s-unfold", "el-icon-s-operation", "el-icon-s-promotion", "el-icon-s-home", "el-icon-s-release", "el-icon-s-ticket",
+ "el-icon-s-management", "el-icon-s-open", "el-icon-s-shop", "el-icon-s-marketing", "el-icon-s-flag", "el-icon-s-comment",
+ "el-icon-s-finance", "el-icon-s-claim", "el-icon-s-custom", "el-icon-s-opportunity", "el-icon-s-data", "el-icon-s-check",
+ "el-icon-s-grid", "el-icon-menu", "el-icon-share", "el-icon-d-caret", "el-icon-caret-left", "el-icon-caret-right",
+ "el-icon-caret-bottom", "el-icon-caret-top", "el-icon-bottom-left", "el-icon-bottom-right", "el-icon-back", "el-icon-right",
+ "el-icon-bottom", "el-icon-top", "el-icon-top-left", "el-icon-top-right", "el-icon-arrow-left", "el-icon-arrow-right",
+ "el-icon-arrow-down", "el-icon-arrow-up", "el-icon-d-arrow-left", "el-icon-d-arrow-right", "el-icon-video-pause",
+ "el-icon-video-play", "el-icon-refresh", "el-icon-refresh-right", "el-icon-refresh-left", "el-icon-finished", "el-icon-sort",
+ "el-icon-sort-up", "el-icon-sort-down", "el-icon-rank", "el-icon-loading", "el-icon-view", "el-icon-c-scale-to-original",
+ "el-icon-date", "el-icon-edit", "el-icon-edit-outline", "el-icon-folder", "el-icon-folder-opened", "el-icon-folder-add",
+ "el-icon-folder-remove", "el-icon-folder-delete", "el-icon-folder-checked", "el-icon-tickets", "el-icon-document-remove",
+ "el-icon-document-delete", "el-icon-document-copy", "el-icon-document-checked", "el-icon-document", "el-icon-document-add",
+ "el-icon-printer", "el-icon-paperclip", "el-icon-takeaway-box", "el-icon-search", "el-icon-monitor", "el-icon-attract",
+ "el-icon-mobile", "el-icon-scissors", "el-icon-umbrella", "el-icon-headset", "el-icon-brush", "el-icon-mouse",
+ "el-icon-coordinate", "el-icon-magic-stick", "el-icon-reading", "el-icon-data-line", "el-icon-data-board", "el-icon-pie-chart",
+ "el-icon-data-analysis", "el-icon-collection-tag", "el-icon-film", "el-icon-suitcase", "el-icon-suitcase-1", "el-icon-receiving",
+ "el-icon-collection", "el-icon-files", "el-icon-notebook-1", "el-icon-notebook-2", "el-icon-toilet-paper", "el-icon-office-building",
+ "el-icon-school", "el-icon-table-lamp", "el-icon-house", "el-icon-no-smoking", "el-icon-smoking", "el-icon-shopping-cart-full",
+ "el-icon-shopping-cart-1", "el-icon-shopping-cart-2", "el-icon-shopping-bag-1", "el-icon-shopping-bag-2", "el-icon-sold-out",
+ "el-icon-sell", "el-icon-present", "el-icon-box", "el-icon-bank-card", "el-icon-money", "el-icon-coin", "el-icon-wallet",
+ "el-icon-discount", "el-icon-price-tag", "el-icon-news", "el-icon-guide", "el-icon-male", "el-icon-female", "el-icon-thumb",
+ "el-icon-cpu", "el-icon-link", "el-icon-connection", "el-icon-open", "el-icon-turn-off", "el-icon-set-up", "el-icon-chat-round",
+ "el-icon-chat-line-round", "el-icon-chat-square", "el-icon-chat-dot-round", "el-icon-chat-dot-square", "el-icon-chat-line-square",
+ "el-icon-message", "el-icon-postcard", "el-icon-position", "el-icon-turn-off-microphone", "el-icon-microphone",
+ "el-icon-close-notification", "el-icon-bangzhu", "el-icon-time", "el-icon-odometer", "el-icon-crop", "el-icon-aim",
+ "el-icon-switch-button", "el-icon-full-screen", "el-icon-copy-document", "el-icon-mic", "el-icon-stopwatch", "el-icon-medal-1",
+ "el-icon-medal", "el-icon-trophy", "el-icon-trophy-1", "el-icon-first-aid-kit", "el-icon-discover", "el-icon-place",
+ "el-icon-location", "el-icon-location-outline", "el-icon-location-information", "el-icon-add-location", "el-icon-delete-location",
+ "el-icon-map-location", "el-icon-alarm-clock", "el-icon-timer", "el-icon-watch-1", "el-icon-watch", "el-icon-lock",
+ "el-icon-unlock", "el-icon-key", "el-icon-service", "el-icon-mobile-phone", "el-icon-bicycle", "el-icon-truck", "el-icon-ship",
+ "el-icon-basketball", "el-icon-football", "el-icon-soccer", "el-icon-baseball", "el-icon-wind-power", "el-icon-light-rain",
+ "el-icon-lightning", "el-icon-heavy-rain", "el-icon-sunrise", "el-icon-sunrise-1", "el-icon-sunset", "el-icon-sunny",
+ "el-icon-cloudy", "el-icon-partly-cloudy", "el-icon-cloudy-and-sunny", "el-icon-moon", "el-icon-moon-night", "el-icon-dish",
+ "el-icon-dish-1", "el-icon-food", "el-icon-chicken", "el-icon-fork-spoon", "el-icon-knife-fork", "el-icon-burger",
+ "el-icon-tableware", "el-icon-sugar", "el-icon-dessert", "el-icon-ice-cream", "el-icon-hot-water", "el-icon-water-cup",
+ "el-icon-coffee-cup", "el-icon-cold-drink", "el-icon-goblet", "el-icon-goblet-full", "el-icon-goblet-square",
+ "el-icon-goblet-square-full", "el-icon-refrigerator", "el-icon-grape", "el-icon-watermelon", "el-icon-cherry",
+ "el-icon-apple", "el-icon-pear", "el-icon-orange", "el-icon-coffee", "el-icon-ice-tea", "el-icon-ice-drink",
+ "el-icon-milk-tea", "el-icon-potato-strips", "el-icon-lollipop", "el-icon-ice-cream-square", "el-icon-ice-cream-round"
+]
\ No newline at end of file
diff --git a/src/views/document/views/index/component/basic/icon/index.vue b/src/views/document/views/index/component/basic/icon/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..470bfdfad6ebf8e0ee504dc233e042b550a8a5e0
--- /dev/null
+++ b/src/views/document/views/index/component/basic/icon/index.vue
@@ -0,0 +1,86 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/basic/index.js b/src/views/document/views/index/component/basic/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..915bddbcd5b6649f8b63df9a98ef81b5c313c8b1
--- /dev/null
+++ b/src/views/document/views/index/component/basic/index.js
@@ -0,0 +1,11 @@
+export const basicUrl =
+ {
+ container: require(`./container/index.vue`).default,
+ but: require(`./button/index.vue`).default,
+ icon: require(`./icon/index.vue`).default,
+ Table: require(`./table/index.vue`).default,
+ Form: require(`./form/index.vue`).default,
+ levelForm: require(`./levelForm/index.vue`).default,
+ stepForm: require(`./stepForm/index.vue`).default,
+ tab: require(`./tab/index.vue`).default
+ }
\ No newline at end of file
diff --git a/src/views/document/views/index/component/basic/levelForm/index.vue b/src/views/document/views/index/component/basic/levelForm/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f78c77b75f709294928dfbb946f24fafe214b761
--- /dev/null
+++ b/src/views/document/views/index/component/basic/levelForm/index.vue
@@ -0,0 +1,18 @@
+
+
+
levelForm
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/basic/stepForm/index.vue b/src/views/document/views/index/component/basic/stepForm/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..1afc69cb0b5a121f7f5e992fdd8bda01b54804c3
--- /dev/null
+++ b/src/views/document/views/index/component/basic/stepForm/index.vue
@@ -0,0 +1,18 @@
+
+
+
stepForm
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/basic/tab/index.vue b/src/views/document/views/index/component/basic/tab/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..51819b874c51839f168faf5b4762460c63bf83cb
--- /dev/null
+++ b/src/views/document/views/index/component/basic/tab/index.vue
@@ -0,0 +1,392 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
基础用法
+
基础的、简洁的标签页
+
+
+
+
+
+
+
+
+
+
+
选项卡样式
+
选项卡样式的标签页
+
+
只需要设置 type 属性为 card 就可以使选项卡改变为标签风格
+
+
+
+
+
+
+
+
+
+
+
卡片化
+
卡片化的标签页
+
+
将type设置为border-card
+
+
+
+
+
+
+
+
+
+
+
位置
+
可以通过 tabPosition 设置标签的位置
+
+
标签一共有四个方向的设置 tabPosition="left|right|top|bottom"
+
+
+
+
+
+
+
+
+
+
+
自定义标签页
+
可以通过 slot 来实现自定义标签页的内容
+
+
+
+
+ first的插槽内容
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/basic/table/data.js b/src/views/document/views/index/component/basic/table/data.js
new file mode 100644
index 0000000000000000000000000000000000000000..187be3eb72f88475d5efba8201b799069da9a05a
--- /dev/null
+++ b/src/views/document/views/index/component/basic/table/data.js
@@ -0,0 +1,612 @@
+export const list = [
+ {
+ date: "2016-05-02",
+ name: "王小虎",
+ address: "上海市普陀区金沙江路 1518 弄"
+ },
+ {
+ date: "2016-05-04",
+ name: "王小虎",
+ address: "上海市普陀区金沙江路 1517 弄"
+ },
+ {
+ date: "016-05-01",
+ name: "王小虎",
+ address: "上海市普陀区金沙江路 1519 弄"
+ },
+ {
+ date: "2016-05-03",
+ name: "王小虎",
+ address: "上海市普陀区金沙江路 1516 弄"
+ }
+]
+
+export const columnTemp=[
+ {
+ label: "日期",
+ prop: "date"
+ },
+ {
+ label: "姓名",
+ prop: "name"
+ },
+ {
+ label: "地址",
+ prop: "address"
+ }
+]
+
+export const tableParam = [
+ {
+ param: 'data',
+ introduce: '显示的数据',
+ type: 'array',
+ value: '-',
+ default: '-'
+ },
+ // {
+ // param: 'stripe',
+ // introduce: '是否为斑马纹 table',
+ // type: 'boolean',
+ // value: '-',
+ // default: 'false'
+ // },
+ {
+ param: 'size',
+ introduce: 'Table 的尺寸',
+ type: 'string',
+ value: 'medium | small | mini',
+ default: '-'
+ },
+ {
+ param: 'index',
+ introduce: '是否显示索引',
+ type: 'boolean',
+ value: 'true | false',
+ default: 'false'
+ },
+ {
+ param: 'page',
+ introduce: '分页参数',
+ type: 'object',
+ value: '-',
+ default: '-'
+ },
+ {
+ param: 'showHeader',
+ introduce: '是否显示表头',
+ type: 'boolean',
+ value: '-',
+ default: 'true'
+ },
+ {
+ param: 'highlightCurrentRow',
+ introduce: '是否要高亮当前行',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'tooltipEffect',
+ introduce: '超出隐藏鼠标移入显示内提示内容的主题',
+ type: 'string',
+ value: 'dark | light',
+ default: '-'
+ },
+ {
+ param: 'loading',
+ introduce: '是否提示 等待加载',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'refs',
+ introduce: '绑定的表格对象名称',
+ type: 'string',
+ value: '-',
+ default: 'multipleTable'
+ },
+ {
+ param: 'pageheadertitle',
+ introduce: '表格顶部标题',
+ type: 'string',
+ value: '-',
+ default: '-'
+ },
+
+ {
+ param: 'selectable',
+ introduce: '是否可以多选, 不建议使用此功能',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'isClearSelect',
+ introduce: '是否清空多选',
+ type: 'number',
+ value: '随机数Math.random()',
+ default: '0'
+ },
+ {
+ param: 'option',
+ introduce: '表格对应字段配置',
+ type: 'object',
+ value: '-',
+ default: '-'
+ }
+]
+export const option_data = [
+ {
+ param: 'border',
+ introduce: '是否带有纵向边框',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'page',
+ introduce: '是否分页',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'align',
+ introduce: 'body列对齐方式',
+ type: 'string',
+ value: 'left | right | center',
+ default: 'left'
+ },
+ {
+ param: 'menuFix',
+ introduce: '操作栏固定位置',
+ type: 'string',
+ value: 'left | right',
+ default: 'right'
+ },
+ {
+ param: 'menuAlign',
+ introduce: '表头对齐方式',
+ type: 'string',
+ value: 'left | right | center',
+ default: 'left'
+ },
+ {
+ param: 'menuWidth',
+ introduce: '操作栏宽度',
+ type: 'string | number',
+ value: '-',
+ default: '-'
+ },
+ {
+ param: 'indexLabel',
+ introduce: '索引名称',
+ type: 'string',
+ value: '-',
+ default: '序号'
+ },
+ {
+ param: 'showOverflow',
+ introduce: '超出是否合并移入悬浮tip显示',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'highlightCurrentRow',
+ introduce: '是否高亮显示当前行',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'dialogWidth',
+ introduce: '表单弹框宽',
+ type: 'string',
+ value: 'px 或 %',
+ default: '75%'
+ },
+
+ {
+ param: 'dialogClickModal',
+ introduce: '是否可以通过点击modal关闭弹窗',
+ type: 'boolean',
+ value: '-',
+ default: 'true'
+ },
+ {
+ param: 'dialogEscape',
+ introduce: '是否可以通过esc关闭弹窗',
+ type: 'boolean',
+ value: '-',
+ default: 'true'
+ },
+ {
+ param: 'addBtn',
+ introduce: '新增按钮',
+ type: 'boolean',
+ value: '-',
+ default: 'true'
+ },
+ {
+ param: 'addBtnText',
+ introduce: '新增按钮文字',
+ type: 'string',
+ value: '-',
+ default: '新增'
+ },
+ {
+ param: 'addDialogText',
+ introduce: '新增表单弹框文字',
+ type: 'string',
+ value: '-',
+ default: '新增'
+ },
+ {
+ param: 'viewBtn',
+ introduce: '查看按钮',
+ type: 'boolean',
+ value: '-',
+ default: 'true'
+ },
+ {
+ param: 'viewBtnText',
+ introduce: '查看按钮文字',
+ type: 'string',
+ value: '-',
+ default: '查看'
+ },
+ {
+ param: 'editBtn',
+ introduce: '编辑按钮',
+ type: 'boolean',
+ value: '-',
+ default: 'true'
+ },
+ {
+ param: 'editBtnText',
+ introduce: '编辑按钮文字',
+ type: 'string',
+ value: '-',
+ default: '编辑'
+ },
+ {
+ param: 'editDialogText',
+ introduce: '编辑表单弹框文字',
+ type: 'string',
+ value: '-',
+ default: '编辑'
+ },
+ {
+ param: 'delBtn',
+ introduce: '删除按钮',
+ type: 'boolean',
+ value: '-',
+ default: 'true'
+ },
+ {
+ param: 'delBtnText',
+ introduce: '删除按钮文字',
+ type: 'string',
+ value: '-',
+ default: '删除'
+ },
+ {
+ param: 'formAlign',
+ introduce: '查询条件表单对齐方式',
+ type: 'string',
+ value: '-',
+ default: 'right'
+ },
+ {
+ param: 'inline',
+ introduce: '表单项是否可以同行,当垂直方向空间受限且表单较简单时,可以在一行内放置表单',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'labelWidth',
+ introduce: 'label宽, auto 或 px',
+ type: 'string | number',
+ value: '-',
+ default: '-'
+ },
+ {
+ param: 'submitBtn',
+ introduce: '提交按钮',
+ type: 'boolean',
+ value: '-',
+ default: 'true'
+ },
+ {
+ param: 'submitBtnText',
+ introduce: '提交按钮文字',
+ type: 'string',
+ value: '-',
+ default: '提交'
+ },
+ {
+ param: 'submitLoading',
+ introduce: '默认表单提交按钮loading',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'emptyBtn',
+ introduce: '重置按钮',
+ type: 'boolean',
+ value: '-',
+ default: 'true'
+ },
+ {
+ param: 'emptyBtnText',
+ introduce: '重置按钮文字',
+ type: 'string',
+ value: '-',
+ default: '重置'
+ },
+ {
+ param: 'search',
+ introduce: '是否开启查询',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'searchBtn',
+ introduce: '搜索表单的查询按钮',
+ type: 'boolean',
+ value: '-',
+ default: 'true'
+ },
+ {
+ param: 'searchBtnText',
+ introduce: '查询按钮文字',
+ type: 'string',
+ value: '-',
+ default: '查询'
+ },
+ {
+ param: 'searchLoading',
+ introduce: '查询表单提交按钮loading',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'searchEmptyBtn',
+ introduce: '搜索表单重置按钮',
+ type: 'boolean',
+ value: '-',
+ default: 'true'
+ },
+ {
+ param: 'searchEmptyBtnText',
+ introduce: '搜索表单重置按钮文字',
+ type: 'string',
+ value: '-',
+ default: '重置'
+ },
+ {
+ param: 'hideTop',
+ introduce: '是否隐藏表格顶部,当无查询条件及顶部按钮时置为true',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ }
+]
+export const column_item = [
+ {
+ param: 'label',
+ introduce: '表头文字',
+ type: 'string',
+ value: '-',
+ default: '-'
+ },
+ {
+ param: 'prop',
+ introduce: '字段名称',
+ type: 'string',
+ value: '-',
+ default: '-'
+ },
+ {
+ param: 'search',
+ introduce: '是否搜索,用于搜索的字段只存在一级,具备联动控制的二级字段不能作为搜索字段',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+
+ {
+ param: 'slot',
+ introduce: '是否自定义',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'hide',
+ introduce: '当前列在表格是否隐藏',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'color',
+ introduce: '颜色特殊显示',
+ type: 'string',
+ value: '-',
+ default: '-'
+ },
+ {
+ param: 'align',
+ introduce: '对齐方式, 默认与table保持一致',
+ type: 'string',
+ value: 'left | right | center',
+ default: '-'
+ },
+ {
+ param: 'span',
+ introduce: '对应表单项项栅格比',
+ type: 'number',
+ value: '-',
+ default: '24'
+ },
+ {
+ param: 'searchSpan',
+ introduce: '对应查询条件栅格比',
+ type: 'number',
+ value: '-',
+ default: '24'
+ },
+ {
+ param: 'permisionFlag',
+ introduce: '权限标识',
+ type: 'string',
+ value: '-',
+ default: '-'
+ },
+ {
+ param: 'addDisplay',
+ introduce: '新增是否显示',
+ type: 'boolean',
+ value: '-',
+ default: 'true'
+ },
+ {
+ param: 'addDisabled',
+ introduce: '新增是否禁用',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'editDisplay',
+ introduce: '编辑是否显示',
+ type: 'boolean',
+ value: '-',
+ default: 'true'
+ },
+ {
+ param: 'editDisabled',
+ introduce: '编辑是否禁用',
+ type: 'boolean',
+ value: '-',
+ default: 'false'
+ },
+ {
+ param: 'viewDisplay',
+ introduce: '预览是否显示',
+ type: 'boolean',
+ value: '-',
+ default: 'true'
+ },
+ {
+ param: 'expressControl',
+ introduce: '动态控制显示',
+ type: 'array',
+ value: '[{express: "包含${行数据字段名}的逻辑运算表达式", text: "满足表达式显示的文字", color: "满足表达式显示的字体颜色"}]',
+ default: '-'
+ },
+ {
+ param: 'type',
+ introduce: '显示类型',
+ type: 'string',
+ value: 'datetime | link | image',
+ default: '-'
+ },
+ {
+ param: 'dicData',
+ introduce: '字典数据',
+ type: 'Array',
+ value: '[{label: "", value: ""}]',
+ default: '-'
+ },
+ {
+ param: 'props',
+ introduce: '字典显示传值对应字段',
+ type: 'Object',
+ value: '{label: "显示值", value: "传递值"}',
+ default: '-'
+ },
+ {
+ param: 'color',
+ introduce: '文字颜色',
+ type: 'string',
+ value: '-',
+ default: '-'
+ },
+ {
+ param: 'text',
+ introduce: '链接显示的文字',
+ type: 'string',
+ value: '仅对链接类型有效',
+ default: '-'
+ },
+ {
+ param: 'width',
+ introduce: '图片宽度',
+ type: 'number',
+ value: '仅对图片类型有效',
+ default: '-'
+ },
+ {
+ param: 'height',
+ introduce: '图片高度',
+ type: 'number',
+ value: '仅对图片类型有效',
+ default: '-'
+ },
+]
+export const event_data = [
+ {
+ name: 'on-load',
+ introduce: '初始化表格',
+ param: '分页信息参数page',
+ },
+ {
+ name: 'search-change',
+ introduce: '条件查询',
+ param: '搜索条件form数据',
+ },
+ {
+ name: 'selection-change',
+ introduce: '多选',
+ param: '已选行数据',
+ },
+ {
+ name: 'row-click',
+ introduce: '点击一行',
+ param: '{ row, column, cell, event }',
+ },
+ {
+ name: 'size-change',
+ introduce: '分页大小改变',
+ param: '分页信息参数page',
+ },
+ {
+ name: 'current-change',
+ introduce: '当前页改变',
+ param: '分页信息参数page',
+ },
+ {
+ name: 'addRow',
+ introduce: '新增行',
+ param: '新增表单数据',
+ },
+ {
+ name: 'editRow',
+ introduce: '编辑行',
+ param: '编辑的表单数据',
+ },
+ {
+ name: 'delRow',
+ introduce: '删除行',
+ param: '当前行数据',
+ },
+]
\ No newline at end of file
diff --git a/src/views/document/views/index/component/basic/table/index.vue b/src/views/document/views/index/component/basic/table/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..937a076302cc395b2a15c040bdcc01f428f916e0
--- /dev/null
+++ b/src/views/document/views/index/component/basic/table/index.vue
@@ -0,0 +1,296 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
基础表格
+
基础的表格展示用法
+
+
+
+
+
+
+
+
+
+
表格分页
+
表格数据分页展示
+
+
+
+
+
+
+
+
+
+
表格插槽
+
自定义表格部分位置内容
+
+
+
+
+ 表格顶部插槽
+
+
+
+
+ 顶部左侧插槽
+
+
+
+
+ 顶部右侧插槽
+
+
+
+
+ name插槽--scope.row.name: {{scope.row.name}}
+
+
+
+
+ 操作栏插槽
+
+
+
+
+ 分页左侧插槽
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/codeEditor.vue b/src/views/document/views/index/component/codeEditor.vue
new file mode 100644
index 0000000000000000000000000000000000000000..1cf89cda92eb3ee40e74f07071a100f74d7b7190
--- /dev/null
+++ b/src/views/document/views/index/component/codeEditor.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+ 显示代码
+
+ 隐藏代码
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/index.js b/src/views/document/views/index/component/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..95138673b51b60ca1af066c8529e0cadd5a7d3df
--- /dev/null
+++ b/src/views/document/views/index/component/index.js
@@ -0,0 +1,7 @@
+import {basicUrl} from './basic/index'
+import{formItemUrl} from './item/index'
+
+export const componentPathList = {
+ basic: basicUrl,
+ items: formItemUrl
+}
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/box/index.vue b/src/views/document/views/index/component/item/box/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b0a6caba959482d4c72846ef7b44025daa4feed7
--- /dev/null
+++ b/src/views/document/views/index/component/item/box/index.vue
@@ -0,0 +1,114 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/cascader/index.vue b/src/views/document/views/index/component/item/cascader/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3fd3a7c3c02871858ecb64c9682d663387130885
--- /dev/null
+++ b/src/views/document/views/index/component/item/cascader/index.vue
@@ -0,0 +1,124 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/checkbox/index.vue b/src/views/document/views/index/component/item/checkbox/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..aeec1d5e54629b879b655d2058cf1fed89be184d
--- /dev/null
+++ b/src/views/document/views/index/component/item/checkbox/index.vue
@@ -0,0 +1,158 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/chinaArea/index.vue b/src/views/document/views/index/component/item/chinaArea/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b1d95e708976202eacab1edaab074f397a384bfc
--- /dev/null
+++ b/src/views/document/views/index/component/item/chinaArea/index.vue
@@ -0,0 +1,117 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/colorSelect/index.vue b/src/views/document/views/index/component/item/colorSelect/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..bc69558c74a8ad0f4f1a8b7ed7a62499ce019660
--- /dev/null
+++ b/src/views/document/views/index/component/item/colorSelect/index.vue
@@ -0,0 +1,82 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/datasource/index.vue b/src/views/document/views/index/component/item/datasource/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..96585d219a6a5342372c16b172d0403218fc292d
--- /dev/null
+++ b/src/views/document/views/index/component/item/datasource/index.vue
@@ -0,0 +1,161 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/datePicker/index.vue b/src/views/document/views/index/component/item/datePicker/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..43617640576a53e2902775c3386e95d2491db4a0
--- /dev/null
+++ b/src/views/document/views/index/component/item/datePicker/index.vue
@@ -0,0 +1,211 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/department/index.vue b/src/views/document/views/index/component/item/department/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7456535fbb521bcfd4abcc0ff044adb958e02402
--- /dev/null
+++ b/src/views/document/views/index/component/item/department/index.vue
@@ -0,0 +1,102 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/divider/index.vue b/src/views/document/views/index/component/item/divider/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..95236892846fc4ceba79d43050470dcd2e061cbf
--- /dev/null
+++ b/src/views/document/views/index/component/item/divider/index.vue
@@ -0,0 +1,93 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/file/index.vue b/src/views/document/views/index/component/item/file/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e3df69e67d95a120fee4008d187a13a9ba111c26
--- /dev/null
+++ b/src/views/document/views/index/component/item/file/index.vue
@@ -0,0 +1,92 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/fileUpload/index.vue b/src/views/document/views/index/component/item/fileUpload/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ec982cf0d2ae455dfdc8472df18dafa3cc2e0278
--- /dev/null
+++ b/src/views/document/views/index/component/item/fileUpload/index.vue
@@ -0,0 +1,121 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/formcard/index.vue b/src/views/document/views/index/component/item/formcard/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..dcdc110a9902e54fa84bfd4db54019d1f52fa0b1
--- /dev/null
+++ b/src/views/document/views/index/component/item/formcard/index.vue
@@ -0,0 +1,93 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/htmlEditor/index.vue b/src/views/document/views/index/component/item/htmlEditor/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..cea88fc6cbe25add64e16ed3177f093620cd3e3c
--- /dev/null
+++ b/src/views/document/views/index/component/item/htmlEditor/index.vue
@@ -0,0 +1,75 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/iconSelect/index.vue b/src/views/document/views/index/component/item/iconSelect/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b027f3d3918af63397b74726903ec8a42adec8f8
--- /dev/null
+++ b/src/views/document/views/index/component/item/iconSelect/index.vue
@@ -0,0 +1,75 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/iframe/index.vue b/src/views/document/views/index/component/item/iframe/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..4d46e1d5f989f3d3e55bb4d8616f2119a4b33164
--- /dev/null
+++ b/src/views/document/views/index/component/item/iframe/index.vue
@@ -0,0 +1,93 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/image/index.vue b/src/views/document/views/index/component/item/image/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..215e2ecb5995c93c8b2d64b21ff28459de884b3f
--- /dev/null
+++ b/src/views/document/views/index/component/item/image/index.vue
@@ -0,0 +1,99 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/imageUpload/index.vue b/src/views/document/views/index/component/item/imageUpload/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..a2fd772c68204ef764aa2346a69bcf52ec00c325
--- /dev/null
+++ b/src/views/document/views/index/component/item/imageUpload/index.vue
@@ -0,0 +1,121 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/index.js b/src/views/document/views/index/component/item/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..c8fb741fa6f8ab22b728dd3929c99615eedb23c4
--- /dev/null
+++ b/src/views/document/views/index/component/item/index.js
@@ -0,0 +1,38 @@
+export const formItemUrl =
+ {
+ Input: require(`./input/index.vue`).default,
+ TextArea: require(`./textarea/index.vue`).default,
+ InputNumber: require(`./inputNumber/index.vue`).default,
+ Select: require(`./select/index.vue`).default,
+ switchDoc: require(`./switch/index.vue`).default,
+ Slider: require(`./slider/index.vue`).default,
+ TimeSelect: require(`./timeSelect/index.vue`).default,
+ TimePicker: require(`./timePicker/index.vue`).default,
+ DatePicker: require(`./datePicker/index.vue`).default,
+ Radio: require(`./radio/index.vue`).default,
+ Checkbox: require(`./checkbox/index.vue`).default,
+ ImageUpload: require(`./imageUpload/index.vue`).default,
+ FileUpload: require(`./fileUpload/index.vue`).default,
+ ColorSelect: require(`./colorSelect/index.vue`).default,
+ IconSelect: require(`./iconSelect/index.vue`).default,
+ Tab: require(`./tab/index.vue`).default,
+ TableForm: require(`./tableForm/index.vue`).default,
+ PCom: require(`./p/index.vue`).default,
+ Divider: require(`./divider/index.vue`).default,
+ ImageCom: require(`./image/index.vue`).default,
+ FileCom: require(`./file/index.vue`).default,
+ BoxCom: require(`./box/index.vue`).default,
+ LinkCom: require(`./link/index.vue`).default,
+ IframeCom: require(`./iframe/index.vue`).default,
+ Department: require(`./department/index.vue`).default,
+ Role: require(`./role/index.vue`).default,
+ UserCom: require(`./user/index.vue`).default,
+ PostCom: require(`./post/index.vue`).default,
+ ChinaArea: require(`./chinaArea/index.vue`).default,
+ Cascader: require(`./cascader/index.vue`).default,
+ HtmlEditor: require(`./htmlEditor/index.vue`).default,
+ DatasourceForm: require(`./datasource/index.vue`).default,
+ StepBar: require(`./step/index.vue`).default,
+ FormBox: require(`./formcard/index.vue`).default,
+ ReportTable: require(`./reportTable/index.vue`).default
+ }
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/input/index.vue b/src/views/document/views/index/component/item/input/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..5ba0baed38e234b7b002d7d2e968e279ec76c04b
--- /dev/null
+++ b/src/views/document/views/index/component/item/input/index.vue
@@ -0,0 +1,216 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/inputNumber/index.vue b/src/views/document/views/index/component/item/inputNumber/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..952da6c3dfdf7eec28c45e70470a1b9fc65d2a1e
--- /dev/null
+++ b/src/views/document/views/index/component/item/inputNumber/index.vue
@@ -0,0 +1,186 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/link/index.vue b/src/views/document/views/index/component/item/link/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..99db18ba0071f9a7023965533e4b3291912eb952
--- /dev/null
+++ b/src/views/document/views/index/component/item/link/index.vue
@@ -0,0 +1,124 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/p/index.vue b/src/views/document/views/index/component/item/p/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9f507a506607efd33de0fbcb2f62470a8195257d
--- /dev/null
+++ b/src/views/document/views/index/component/item/p/index.vue
@@ -0,0 +1,97 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/post/index.vue b/src/views/document/views/index/component/item/post/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..a012bf631558688126f0fbdf18beb665b9f9933d
--- /dev/null
+++ b/src/views/document/views/index/component/item/post/index.vue
@@ -0,0 +1,94 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/radio/index.vue b/src/views/document/views/index/component/item/radio/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..79da84240cac251671eb922f453393c76ba1b89c
--- /dev/null
+++ b/src/views/document/views/index/component/item/radio/index.vue
@@ -0,0 +1,158 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/reportTable/index.vue b/src/views/document/views/index/component/item/reportTable/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e27bd99ae535656c0ba09900c4b072ec2640c5b8
--- /dev/null
+++ b/src/views/document/views/index/component/item/reportTable/index.vue
@@ -0,0 +1,151 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/role/index.vue b/src/views/document/views/index/component/item/role/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..901aada655925fef6a139904bdf0e8eabfbee791
--- /dev/null
+++ b/src/views/document/views/index/component/item/role/index.vue
@@ -0,0 +1,84 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/select/index.vue b/src/views/document/views/index/component/item/select/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..6a48b89f2496b406bfddf6e38e86abcdc7101488
--- /dev/null
+++ b/src/views/document/views/index/component/item/select/index.vue
@@ -0,0 +1,213 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/slider/index.vue b/src/views/document/views/index/component/item/slider/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..55b2c39319578250e16db228f768e3051094119c
--- /dev/null
+++ b/src/views/document/views/index/component/item/slider/index.vue
@@ -0,0 +1,179 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/step/index.vue b/src/views/document/views/index/component/item/step/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..0802207a95d3888f3cde6639ba2c82922d2bfa68
--- /dev/null
+++ b/src/views/document/views/index/component/item/step/index.vue
@@ -0,0 +1,148 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/switch/index.vue b/src/views/document/views/index/component/item/switch/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e4a1495e65ecaf580b6b1f514508e0a449e4a096
--- /dev/null
+++ b/src/views/document/views/index/component/item/switch/index.vue
@@ -0,0 +1,136 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/tab/index.vue b/src/views/document/views/index/component/item/tab/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..a4e85d6c20310096a373403b5c9d6837192e108b
--- /dev/null
+++ b/src/views/document/views/index/component/item/tab/index.vue
@@ -0,0 +1,104 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/tableForm/index.vue b/src/views/document/views/index/component/item/tableForm/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..8182e258cef3fd48e31bfbe87c07788bba5b2b68
--- /dev/null
+++ b/src/views/document/views/index/component/item/tableForm/index.vue
@@ -0,0 +1,216 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/textarea/index.vue b/src/views/document/views/index/component/item/textarea/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..0d8e711a919bc90c8d4c4a56942ad7453698d0b7
--- /dev/null
+++ b/src/views/document/views/index/component/item/textarea/index.vue
@@ -0,0 +1,148 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/timePicker/index.vue b/src/views/document/views/index/component/item/timePicker/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..659f8b45fa3dc757420a00bf7b551d8ebe0951ad
--- /dev/null
+++ b/src/views/document/views/index/component/item/timePicker/index.vue
@@ -0,0 +1,162 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/timeSelect/index.vue b/src/views/document/views/index/component/item/timeSelect/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3bd815d0d6cc06a8bdebad15db38d3a75917af8f
--- /dev/null
+++ b/src/views/document/views/index/component/item/timeSelect/index.vue
@@ -0,0 +1,122 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/component/item/user/index.vue b/src/views/document/views/index/component/item/user/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..369dc708aec7b5d0d017980c20be5cae669e0ed3
--- /dev/null
+++ b/src/views/document/views/index/component/item/user/index.vue
@@ -0,0 +1,98 @@
+
+
+
{{detail.title}}
+
{{detail.info}}
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/develop/index.js b/src/views/document/views/index/develop/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..eb9d4c6f8556ebec2fc8814b2605b2c0e031345e
--- /dev/null
+++ b/src/views/document/views/index/develop/index.js
@@ -0,0 +1,4 @@
+export const devInfo = {
+ devIntrduce: require(`./index.vue`).default,
+ useInfo: require(`./useInfo.vue`).default
+}
\ No newline at end of file
diff --git a/src/views/document/views/index/develop/index.vue b/src/views/document/views/index/develop/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..a3da763f23b2a702760a60ee193bcc7cadf9d7f8
--- /dev/null
+++ b/src/views/document/views/index/develop/index.vue
@@ -0,0 +1,81 @@
+
+
+
+
jvs-ui jvs-upms-ui 本地代码未经审核不得提交!!!
+
nginx环境配置
+
+
软件包解压后,修改配置文件conf/nginx.conf
+
+
+ 重启命令: nginx -s reload
+
+
注意: listen 80端口时,父架端口也保持80,子项目名称必须 -ui 结尾
+
+
环境参数
+
+
网关: http://10.0.0.125:10000
+
+
本机开发
+
+
路由统一hash模式,子项目由iframe引入,本地启动后联调子项目需搭建nginx,通过ip直接访问
+
+
开发环境
+
+
未搭建nginx环境下,子项目添加菜单后,直接修改路径参数urlPath为本地(ip+端口)的路由地址即可
+
主架访问:/#/myiframe/urlPath?name=菜单名称&src=带http的本地路由地址
+
单独访问:ip+端口/项目名称/#/路由
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/develop/useInfo.vue b/src/views/document/views/index/develop/useInfo.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ab7ecf91aac8030bcb7a8133b7d463a2ee9a0937
--- /dev/null
+++ b/src/views/document/views/index/develop/useInfo.vue
@@ -0,0 +1,63 @@
+
+
+
权限校验使用说明 $permissionMatch("")
+ 详细说明
+
+
+
dom使用:v-if="$permissionMatch('')"
+
js使用:this.$permissionMatch("")
+
组件配置: permisionFlag属性,支持button和tab
+
配置js:
+
import Vue from "vue"
+
Vue.prototype.$permissionMatch("")
+
+
过滤器
+
+
src/fileters/index.js
+
支持:日期格式化(dateFormat)、字典格式化(dicFormat)
+
使用:字段 | 过滤器名称(第二个参数)
+
+
格式校验
+
+
src/util/validate.js, 使用如下:
+
important * as validate from '@/util/validate'
+
valite.方法名
+
+
打开链接
+
+
$openUrl("地址", type) // type:'_self', '_blank'
+
+
iframe挂载的设计类菜单
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/index/menu.vue b/src/views/document/views/index/menu.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f924476970efbe2a6bfc96765c46e6daa80c318b
--- /dev/null
+++ b/src/views/document/views/index/menu.vue
@@ -0,0 +1,388 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/permission/img/step1.png b/src/views/document/views/permission/img/step1.png
new file mode 100644
index 0000000000000000000000000000000000000000..56f53e4f759e92f107d7123a99e38a0fa87f0462
Binary files /dev/null and b/src/views/document/views/permission/img/step1.png differ
diff --git a/src/views/document/views/permission/img/step2.png b/src/views/document/views/permission/img/step2.png
new file mode 100644
index 0000000000000000000000000000000000000000..50a7259b62bf53d50527dc5e6c012ca6b17441b4
Binary files /dev/null and b/src/views/document/views/permission/img/step2.png differ
diff --git a/src/views/document/views/permission/index.vue b/src/views/document/views/permission/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b44741c76b2fd3ba19136cf92ea185fda2fdb869
--- /dev/null
+++ b/src/views/document/views/permission/index.vue
@@ -0,0 +1,127 @@
+
+
+
文档说明
+
权限控制使用说明
+
1. 添加或修改权限标识:
+
系统管理-->系统管理-->资源管理
+
![]()
+
2. 复制权限标识
+
![]()
+
3. 权限控制
+
+
+
dom使用:v-if="$permissionMatch(权限标识)"
+ js使用:this.$permissionMatch(权限标识)
+ 组件配置:permisionFlag属性,支持button和tab
+ 配置js文件:
+ import Vue from "vue"
+ Vue.prototype.$permissionMatch("权限标识")
+
+
+
4. 示例:
+
+
按钮
+
+
+
+
+
tab项
+
+
+
+
+
表格内置按钮,表单同理(submitBtn/emptyBtn/cancal)
+
+
+
+
+
配置为单独的js文件
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/document/views/tb/share.vue b/src/views/document/views/tb/share.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3c58fa3a494336b6bb4c3793bd1abe116f37885e
--- /dev/null
+++ b/src/views/document/views/tb/share.vue
@@ -0,0 +1,34 @@
+
+
+
+
低代码系列开发说明
+
jvs-children-ui
+
前端常用操作及bug
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/flowable/api/flowable.js b/src/views/flowable/api/flowable.js
new file mode 100644
index 0000000000000000000000000000000000000000..c2fd5db7575682e78425d083353d3e42993c02ea
--- /dev/null
+++ b/src/views/flowable/api/flowable.js
@@ -0,0 +1,190 @@
+import request from "@/router/axios"
+
+// 工作流列表
+export function getModelList(params) {
+ return request({
+ url: `/mgr/jvs-design/workflow/design/page`,
+ method: "get",
+ params: params
+ });
+}
+
+// 流程分类列表
+export function flowableType() {
+ return request({
+ url: `/mgr/jvs-design/workflow/design/groups`,
+ method: "get"
+ });
+}
+
+// 创建工作流
+export function createModel(data) {
+ return request({
+ url: `/mgr/jvs-design/workflow/design`,
+ method: "post",
+ data: data
+ });
+}
+
+// 工作流详情
+export function getModelDetail(id) {
+ return request({
+ url: `/mgr/jvs-design/workflow/design/${id}`,
+ method: "get"
+ });
+}
+
+// 修改基本信息
+export function editModel(data) {
+ return request({
+ url: `/mgr/jvs-design/workflow/design`,
+ method: "put",
+ data: data
+ });
+}
+
+// 保存设计
+export function designModel(data) {
+ return request({
+ url: `/mgr/jvs-design/workflow/design/save`,
+ method: "put",
+ data: data
+ });
+}
+
+// 删除工作流
+export function deleteModel(id) {
+ return request({
+ url: `/mgr/jvs-design/workflow/design/${id}`,
+ method: "delete"
+ });
+}
+
+// 发布流程
+export function deployProcess(id) {
+ return request({
+ url: `/mgr/jvs-design/workflow/design/publish/${id}`,
+ method: "put"
+ });
+}
+
+// 停用流程
+export function suspendProcess(id) {
+ return request({
+ url: `/mgr/jvs-design/workflow/design/stop/${id}`,
+ method: "put"
+ });
+}
+
+// 查询任务列表
+export function queryTaskList(query) {
+ return request({
+ url: `/mgr/jvs-design/workflow/task/pendingApproves`,
+ method: "get",
+ params: query
+ });
+}
+
+// 我的申请列表
+export function applyList(query) {
+ return request({
+ url: `/mgr/jvs-design/workflow/task/selfs`,
+ method: "get",
+ params: query
+ });
+}
+
+// 入口列表
+export function entryList() {
+ return request({
+ url: `/mgr/jvs-design/workflow/design/havePermissionDesign`,
+ method: "get"
+ });
+}
+
+// 我的申请---查询流程数据,表单回显
+export function queryEchoForm(modelId, dataId) {
+ return request({
+ url: `/mgr/jvs-design/dynamic/data/query/single/${modelId}/${dataId}`,
+ method: "get"
+ });
+}
+
+// 查询任务进度
+export function queryDetailHistoryInfo(id) {
+ return request({
+ url: `/mgr/jvs-design/workflow/task/progress/${id}`,
+ method: "get",
+ });
+}
+
+// 我的申请--取消 / 终止 流程
+export function candelProcess(id, data) {
+ return request({
+ url: `/mgr/jvs-design/workflow/task/stop/${id}`,
+ method: "put",
+ data: data
+ });
+}
+
+
+// 节点表单数据变更记录
+export function queryChangeInfo(dataId, version) {
+ return request({
+ url: `/mgr/jvs-design/data/log/query/single/${dataId}/${version}`,
+ method: "get"
+ });
+}
+
+
+
+
+// 领取任务
+export function claimTask(taskId) {
+ return request({
+ url: `/mgr/jvs-design/task/claim/${taskId}`,
+ method: "post"
+ });
+}
+
+// 分配给其他人
+export function assignTask(taskId, userId) {
+ return request({
+ url: `/mgr/jvs-design/task/assign/${taskId}/to/${userId}`,
+ method: "post"
+ });
+}
+
+// 完成任务
+export const completeProcess = (taskId, data) => {
+ return request({
+ url: `/mgr/jvs-design/task/complete/${taskId}`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 保存任务
+export const saveProcess = (taskId, data) => {
+ return request({
+ url: `/mgr/jvs-design/task/save/${taskId}`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 指派任务
+export const zhipaiProcess = (taskId, userId) => {
+ return request({
+ url: `/mgr/jvs-design/task/assign/${taskId}/to/${userId}`,
+ method: 'post'
+ })
+}
+
+// 委派
+export const weipaiProcess = (taskId, userId) => {
+ return request({
+ url: `/mgr/jvs-design/task/delegate/${taskId}/to/${userId}`,
+ method: 'post'
+ })
+}
\ No newline at end of file
diff --git a/src/views/flowable/components/util/api.js b/src/views/flowable/components/util/api.js
new file mode 100644
index 0000000000000000000000000000000000000000..f4c36a3bfcee7d551108790a2924320ef75aba59
--- /dev/null
+++ b/src/views/flowable/components/util/api.js
@@ -0,0 +1,57 @@
+import request from "@/router/axios";
+
+// 默认请求
+export const sendRequire = (url, method, data) => {
+ let obj = {
+ url: url,
+ method: method
+ }
+ if(data) {
+ if(method == 'get' || method == 'delete') {
+ obj.params = data
+ }else{
+ obj.data = data
+ }
+ }
+ return request(obj)
+}
+
+export function getUserList(query) {
+ return request({
+ url: "/mgr/jvs-auth/usermanager/list",
+ method: "get",
+ params: query
+ });
+}
+
+// 获取用户的部门菜单
+export function getDeptList() {
+ return request({
+ url: "/mgr/jvs-auth/dept/all",
+ method: "get",
+ });
+}
+
+// 获取全部角色信息
+export function getRoleList() {
+ return request({
+ url: `/mgr/jvs-auth/role/all/userRole`,
+ method: "GET"
+ });
+}
+
+// 获取职位列表
+export function getPostList() {
+ return request({
+ url: `/mgr/jvs-auth/job/list`,
+ method: "GET"
+ });
+}
+
+// 获取群组列表
+export function getGroupList() {
+ return request({
+ url: "/mgr/jvs-auth/user/group/list",
+ method: "GET"
+ });
+}
diff --git a/src/views/flowable/components/util/flow.vue b/src/views/flowable/components/util/flow.vue
new file mode 100644
index 0000000000000000000000000000000000000000..595ce7543f0449d0e4714603a01314354d36fb34
--- /dev/null
+++ b/src/views/flowable/components/util/flow.vue
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+ 确定
+ 取消
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/flowable/components/util/tableForm.vue b/src/views/flowable/components/util/tableForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..437aa27a6300daff689c84be62da3fef38acc404
--- /dev/null
+++ b/src/views/flowable/components/util/tableForm.vue
@@ -0,0 +1,191 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/flowable/components/util/user.vue b/src/views/flowable/components/util/user.vue
new file mode 100644
index 0000000000000000000000000000000000000000..8462d1102635f2db5f12490e271753fc30f34bdc
--- /dev/null
+++ b/src/views/flowable/components/util/user.vue
@@ -0,0 +1,167 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/flowable/router.js b/src/views/flowable/router.js
new file mode 100644
index 0000000000000000000000000000000000000000..de8a6f5d117911f256b93181763cd7d5241c21be
--- /dev/null
+++ b/src/views/flowable/router.js
@@ -0,0 +1,57 @@
+export default [
+ {
+ path: '/flowable',
+ name: '流程设计',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/index'),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: '/processDesign',
+ name: '流程设计',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/design/index'),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: '/tasklist',
+ name: '待办任务',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/taskList'),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: '/applylist',
+ name: '我的申请',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/apply'),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: '/entry',
+ name: '申请入口',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/entry'),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ }
+]
diff --git a/src/views/flowable/styles/entry.png b/src/views/flowable/styles/entry.png
new file mode 100644
index 0000000000000000000000000000000000000000..346b80a0351325a10e336a146ed35e728289b91e
Binary files /dev/null and b/src/views/flowable/styles/entry.png differ
diff --git a/src/views/flowable/views/apply.vue b/src/views/flowable/views/apply.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b737572e7526305a09e3d3221648ffa76f00a5a3
--- /dev/null
+++ b/src/views/flowable/views/apply.vue
@@ -0,0 +1,196 @@
+
+
+
+
+ {{scope.row.taskStatus == 1 ? '' : scope.row.updateTime}}
+
+
+ 查看进度
+ 取消
+
+
+
+
+
+
+
+
+ 确定
+ 取消
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/flowable/views/componet/api.js b/src/views/flowable/views/componet/api.js
new file mode 100644
index 0000000000000000000000000000000000000000..bc47770f6a64e1cb86688d9a41b8c838da015d22
--- /dev/null
+++ b/src/views/flowable/views/componet/api.js
@@ -0,0 +1,80 @@
+import request from '@/router/axios'
+
+// 获取表单设计详情
+export const getFlowableForm=(id) => {
+ return request({
+ url: `/mgr/jvs-design/form/design/${id}`,
+ method: 'get'
+ })
+}
+
+// 启动流程
+export const startProcess=(data) => {
+ return request({
+ url: `/mgr/jvs-design/workflow/task/start`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 查询任务详情
+export const getTaskInfo=(id) => {
+ return request({
+ url: `/mgr/jvs-design/workflow/task/${id}`,
+ method: 'get'
+ })
+}
+
+// 完成任务
+export const completeProcess=(data) => {
+ return request({
+ url: `/mgr/jvs-design/workflow/task/approve`,
+ method: 'post',
+ data: data
+ })
+}
+
+
+
+
+
+
+
+
+
+// 所有用户
+export const getUserList=(params) => {
+ return request({
+ url: `/mgr/jvs-auth/user/all`,
+ method: 'get',
+ params: params
+ })
+}
+
+
+
+
+// 保存任务
+export const saveProcess=(taskId, data) => {
+ return request({
+ url: `/mgr/jvs-design/task/save/${taskId}`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 指派任务
+export const zhipaiProcess=(taskId, userId) => {
+ return request({
+ url: `/mgr/jvs-design/task/assign/${taskId}/to/${userId}`,
+ method: 'post'
+ })
+}
+
+// 委派
+export const weipaiProcess=(taskId, userId) => {
+ return request({
+ url: `/mgr/jvs-design/task/delegate/${taskId}/to/${userId}`,
+ method: 'post'
+ })
+}
diff --git a/src/views/flowable/views/componet/changeInfo.vue b/src/views/flowable/views/componet/changeInfo.vue
new file mode 100644
index 0000000000000000000000000000000000000000..5430f1a74402bd9b459c2d228b0a35d971967ecf
--- /dev/null
+++ b/src/views/flowable/views/componet/changeInfo.vue
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/flowable/views/componet/info.vue b/src/views/flowable/views/componet/info.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9e0c5ed653d1fcfb742d5fdf5275572be87bf915
--- /dev/null
+++ b/src/views/flowable/views/componet/info.vue
@@ -0,0 +1,451 @@
+
+
+
+
+
+
diff --git a/src/views/flowable/views/design/assets/approvalTemplate.js b/src/views/flowable/views/design/assets/approvalTemplate.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd606acdfcd216ea93ddda605a1833fa6ffbdfad
--- /dev/null
+++ b/src/views/flowable/views/design/assets/approvalTemplate.js
@@ -0,0 +1,93 @@
+var template={
+ "type": "root",
+ "name": "发起人",
+ "detail": {
+ "mode": "or",
+ "user": [
+ {
+ "userId": 555,
+ "userName": "ddd"
+ }
+ ],
+ "authority": [
+ "djiojw",
+ "fewfrefre"
+ ]
+ },
+ "node": {
+ "type": "cs",
+ "name": "抄送人",
+ "detail": {
+ "user": [
+ {
+ "userId": 555,
+ "userName": "ddd"
+ }
+ ]
+ },
+ "node": {
+ "type": 'condition',
+ "conditions": [
+ {
+ "condition": [
+ {
+ "type": "initiator",
+ "params": [
+ {
+ "symbol": "dept",
+ "target": "部门1, 部门2"
+ },{
+ "symbol": "user",
+ "target": "用户id"
+ },{
+ "symbol": "role",
+ "target": "角色id"
+ }
+ ]
+ },{
+ "type": "form",
+ "params": [
+ {
+ "symbol": "表单id",
+ "target": "表单值"
+ }
+ ]
+ }
+ ],
+ "node": {
+ "type": "sp",
+ "name": "审批人",
+ "detail": {
+ "user": [
+ {
+ "userId": 555,
+ "userName": "ddd"
+ }
+ ]
+ }
+ }
+ },
+ {
+ "condition": [
+ {},{}
+ ],
+ "node": {
+ "type": "sp",
+ "name": "审批人",
+ "detail": {
+ "user": [
+ {
+ "userId": 555,
+ "userName": "ddd"
+ }
+ ]
+ }
+ }
+ }
+ ]
+ }
+ }
+}
+
+
+export default template
diff --git a/src/views/flowable/views/design/common/enumConst.js b/src/views/flowable/views/design/common/enumConst.js
new file mode 100644
index 0000000000000000000000000000000000000000..7e1ed017da368cadd2296b60aca6408111b75392
--- /dev/null
+++ b/src/views/flowable/views/design/common/enumConst.js
@@ -0,0 +1,131 @@
+/**
+ * 审批类型
+ * @type {{ROLE: string, LEADER: string, ASSIGN_USER: string, SELF_SELECT: string, SELF: string, LEADER_TOP: string}}
+ */
+export const approvalType = {
+ ASSIGN_USER: 'ASSIGN_USER',
+ SELF_SELECT: 'SELF_SELECT',
+ LEADER_TOP: 'LEADER_TOP',
+ LEADER: 'LEADER',
+ ROLE: 'ROLE',
+ SELF: 'SELF'
+}
+
+/**
+ * 流程节点类型
+ * @type {{CS: string, ROOT: string, TJ: string, CONDITION: string, SP: string, EMPTY: string}}
+ */
+export const nodeType = {
+ SP: 'SP',
+ CS: 'CS',
+ TJ: 'TJ',
+ ROOT: 'ROOT',
+ EMPTY: 'EMPTY',
+ CONDITION: 'CONDITION',
+}
+
+/**
+ * 审批模式
+ * @type {{OR: string, AND: string, NEXT: string}}
+ */
+export const approvalMode = {
+ AND: 'AND',
+ OR: 'OR',
+ NEXT: 'NEXT'
+}
+
+export const logicType = {
+ AND: 'AND',
+ OR: 'OR'
+}
+
+/**
+ * 超时事件
+ * @type {{NOTIFY: string, PASS: string, REFUSE: string}}
+ */
+export const timeoutEvent = {
+ PASS: 'PASS',
+ REFUSE: 'REFUSE',
+ NOTIFY: 'NOTIFY'
+}
+
+/**
+ * 审批超时时间单位
+ * @type {{HOUR: string, DAY: string}}
+ */
+export const timeLimitType = {
+ DAY: 'DAY',
+ HOUR: 'HOUR'
+}
+
+/**
+ * 审批人为空时如何操作
+ * @type {{TO_USER: string, TO_ADMIN: string, TO_PASS: string}}
+ */
+export const userEmpty = {
+ TO_PASS: 'TO_PASS',
+ TO_ADMIN: 'TO_ADMIN',
+ TO_USER: 'TO_USER'
+}
+
+/**
+ * 连续多级主管审批时的终点
+ * @type {{TOP: string, LEAVE: string}}
+ */
+export const endCondition = {
+ TOP: 'TOP', LEAVE: 'LEAVE'
+}
+
+/**
+ * 条件节点类型
+ * @type {{MORE: string, NUMBER: string, ORG: string, ONE: string, DEPT: string, USER: string}}
+ */
+export const conditionType = {
+ NUMBER: 'number', ONE: 'one', MORE: 'more',
+ DEPT: 'dept', USER: 'user', ORG: 'org'
+}
+
+
+export function getDefaultNodeProps(){
+ return {
+ //审批人选项类型
+ type: approvalType.ASSIGN_USER,
+ //审批模式 会签/或签/依次
+ mode: approvalMode.AND,
+ //审批时限
+ timeLimit:{
+ //时限单位
+ type: timeLimitType.HOUR,
+ limit: 0, //时限值
+ event: {
+ type: timeoutEvent.PASS, //触发超时执行事件
+ loop: false, //循环触发
+ loopTime: 0 //循环频率
+ }
+ },
+ sign: false, //是否需要签字
+ //如果审批人为空该如何做
+ userEmpty: userEmpty.TO_PASS,
+ //主管级别
+ leaderLevel: 1,
+ //结束条件
+ endCondition: endCondition.TOP,
+ //目标对象 人员/部门/角色
+ targetObj: {
+ //是否多选
+ multiple: false,
+ //角色
+ roles:[],
+ //用户或部门
+ objs: [],
+ }
+ }
+}
+
+export default {
+ nodeType, approvalMode, timeoutEvent, timeLimitType,
+ userEmpty, endCondition, conditionType, approvalType,
+ logicType, getDefaultNodeProps
+}
+
+
diff --git a/src/views/flowable/views/design/index.vue b/src/views/flowable/views/design/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..fa8ac0ecb253113400de12b21b79d03ac1b1efc7
--- /dev/null
+++ b/src/views/flowable/views/design/index.vue
@@ -0,0 +1,556 @@
+
+
+
+
+
+ {{ scale }}%
+
+
+
+
+
+
+
+ {{ select.name }}
+
+
+
+
+
+
+
+
+
+
![]()
+
选择图标
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/flowable/views/design/process/arrow.vue b/src/views/flowable/views/design/process/arrow.vue
new file mode 100644
index 0000000000000000000000000000000000000000..0579f6ae30e1fbc776e740ea5f0067dc6ad8ed69
--- /dev/null
+++ b/src/views/flowable/views/design/process/arrow.vue
@@ -0,0 +1,454 @@
+
+
+
+
+
+
+
+ {{ node.name }}
+
+
+
+
+
+
+ {{ nodeText }}
+
+
+
+
+
+
+
+
+ 添加流程节点
+
+
+
+ 审批人
+
+
+
+ 抄送人
+
+
+
+ 条件分支
+
+
+
+
+
+
+
添加条件
+
+
+
+
+
+
diff --git a/src/views/flowable/views/design/process/condition.vue b/src/views/flowable/views/design/process/condition.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e0db3e1685540afe1b5e4e5724ea20118e7b7146
--- /dev/null
+++ b/src/views/flowable/views/design/process/condition.vue
@@ -0,0 +1,337 @@
+
+
+
+
+
条件组 {{ index + 1 }}
+
条件关系:
+
+
+
+
+
+
+
+ {{ condition.name }}
+
+
+
+
+
+
+
+
+ 点击右上角 + 为本条件组添加判断条件 ☝
+
+
+
+
+
+
+
+
+ ~
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择部门
+
+
+
+
+
+ 选择人员
+
+
+
+
+
+ 选择
+
+
(属于某部门或哪些人员)
+
+
+ {{ user.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/flowable/views/design/process/nodeConfig.vue b/src/views/flowable/views/design/process/nodeConfig.vue
new file mode 100644
index 0000000000000000000000000000000000000000..05b23f7abb209b13e5a1f8301a3d621778f2ca77
--- /dev/null
+++ b/src/views/flowable/views/design/process/nodeConfig.vue
@@ -0,0 +1,648 @@
+
+
+
+
+
+ 选择人员/部门
+
+ 不指定则默认所有人都可发起此审批
+
+
+
+ {{ user.name }}
+
+
+
+
+
+
+
+
+
+
+
{{ list.name }}
+
优先级 {{ index + 1 }}
+
+
+ 第{{ getNowNodeIndex + 1 }}级
+
+
+ 条件组关系:
+
+
+
+
+
+
+ 添加条件组
+ 只有必填选项才能作为审批条件
+
+
+
+
+
+
+
+ {{ t.text }}
+
+
+
+
+
+
+ 选择人员
+
+
+ {{ user.name }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ role.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 时长:
+
+
+ {{
+ props.timeLimit.type === enumConst.timeLimitType.HOUR ? "小时" : "天"
+ }}
+
+
+
+
+ {{
+ evs.name
+ }}
+
+
+
+
默认提醒当前审批人
+
+
+ 每隔
+
+
+ 天
+
+
+
+
+
+
+
+
+ 发起人的第
+
+ 级主管
+ 👉 直接主管为 第 1 级主管
+
+
+
+
+
+
+
+ 按选择顺序依次审批
+ 会签(可同时审批,每个人必须同意)
+ 或签(有一人同意即可)
+
+
+
+
+
+
+
+
+ 直到最上层主管
+ 不超过发起人的
+
+
+ 第
+
+ 级主管
+
+
+
+
+
+
+
+
+ 自动通过
+ 自动转交管理员
+ 转交到指定人员
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/flowable/views/design/process/processImage.vue b/src/views/flowable/views/design/process/processImage.vue
new file mode 100644
index 0000000000000000000000000000000000000000..4eecabc3ba4958e88cb56fd4cd1979a69fb927f4
--- /dev/null
+++ b/src/views/flowable/views/design/process/processImage.vue
@@ -0,0 +1,382 @@
+
+
+
diff --git a/src/views/flowable/views/design/process/processView.vue b/src/views/flowable/views/design/process/processView.vue
new file mode 100644
index 0000000000000000000000000000000000000000..fac32ca4e085271dacf33af4a3dce34cb78289ff
--- /dev/null
+++ b/src/views/flowable/views/design/process/processView.vue
@@ -0,0 +1,395 @@
+
+
+
diff --git a/src/views/flowable/views/entry.vue b/src/views/flowable/views/entry.vue
new file mode 100644
index 0000000000000000000000000000000000000000..fe7332af0c317ec4e46280668e6af0caa9b50467
--- /dev/null
+++ b/src/views/flowable/views/entry.vue
@@ -0,0 +1,276 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
{{it.name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/flowable/views/index.vue b/src/views/flowable/views/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ca381bbee40d8c1603af0bce1bf555bc7565afd7
--- /dev/null
+++ b/src/views/flowable/views/index.vue
@@ -0,0 +1,626 @@
+
+
+
+
+
+ 新增
+
+ 流程名称
+
+
+
+ 查询
+ { queryParams.name = '' }">重置
+
+
+
+
+ 编辑
+ 设计
+ 发布
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
选择图标
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/flowable/views/info.vue b/src/views/flowable/views/info.vue
new file mode 100644
index 0000000000000000000000000000000000000000..73e2e709d07ec3be826bf166004898e6a2a4792b
--- /dev/null
+++ b/src/views/flowable/views/info.vue
@@ -0,0 +1,306 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.nodeName}}
+ {{ getModeLabel(item.mode) }}
+ {{ item.durationTime }}
+ 提交记录
+
+
+
+ {{scope.row.time ? scope.row.time : '-'}}
+
+
+ {{getTypeEnumLabel(scope.row)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/flowable/views/taskForm.vue b/src/views/flowable/views/taskForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..745891855d84eca9cbd56b4b1c99be6de0e244a2
--- /dev/null
+++ b/src/views/flowable/views/taskForm.vue
@@ -0,0 +1,368 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/flowable/views/taskList.vue b/src/views/flowable/views/taskList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..dc5beb1d2cf8675e42ff331bca78f01f0eab184e
--- /dev/null
+++ b/src/views/flowable/views/taskList.vue
@@ -0,0 +1,255 @@
+
+
+
+
+
+
+ 办理
+
+
+
+ 进度
+
+
+
+
+
+
+
+
+
+
+
+
+ 确定
+ 取消
+
+
+
+
+
+
diff --git a/src/views/page/api/design.js b/src/views/page/api/design.js
new file mode 100644
index 0000000000000000000000000000000000000000..740bab374950f370a6ebac641ea8880fa23eb33c
--- /dev/null
+++ b/src/views/page/api/design.js
@@ -0,0 +1,64 @@
+import request from '@/router/axios'
+
+// 详情
+export const getDesignInfo = (menuId, type) => {
+ return request({
+ url: `/mgr/jvs-design/design/detail/${menuId}`,
+ method: 'get'
+ })
+}
+// 详情
+export const getDesignById = (id) => {
+ return request({
+ url: `/mgr/jvs-design/design/${id}`,
+ method: 'get'
+ })
+}
+
+// 更新
+export const updateDesignInfo = (id, data) => {
+ return request({
+ url: `/mgr/jvs-design/design/update/${id}`,
+ method: 'POST',
+ data: data
+ })
+}
+
+// // 部署的列表页详情
+// export const getDesignTableInfo = (menuId) => {
+// return request({
+// url: `/mgr/jvs-design/design/deployed/${menuId}`,
+// method: 'get'
+// })
+// }
+// 部署的列表页详情
+export const getDesignTableInfo = (menuId) => {
+ return request({
+ url: `/mgr/jvs-design//use/crud/${menuId}`,
+ method: 'get'
+ })
+}
+// 列表页预览
+export const previewPage = (menuId) => {
+ return request({
+ url: `/mgr/jvs-design/design/detail/${menuId}`,
+ method: 'get'
+ })
+}
+// 查询单条数据详情
+export const getSingleData = (modelId, dataId) => {
+ return request({
+ url: `/mgr/jvs-design//dynamic/data/query/single/${modelId}/${dataId}`,
+ method: 'get'
+ })
+}
+// 删除单条数据
+export const delSingleData = (modelId, dataId, designId) => {
+ return request({
+ url: `/mgr/jvs-design//dynamic/data/delete/${modelId}/${dataId}`,
+ method: 'delete',
+ headers: {
+ 'designId': designId
+ }
+ })
+}
diff --git a/src/views/page/api/form.js b/src/views/page/api/form.js
new file mode 100644
index 0000000000000000000000000000000000000000..8ce867c14a48f7558dc84267fb03444c87edb96c
--- /dev/null
+++ b/src/views/page/api/form.js
@@ -0,0 +1,120 @@
+import request from '@/router/axios'
+
+// 名称集
+export const getNameList = () => {
+ return request({
+ url: `/mgr/jvs-design/form/design/names`,
+ method: 'get'
+ })
+}
+
+// 详情
+export const getDetailByName = (data) => {
+ return request({
+ url: `/mgr/jvs-design/form/design`,
+ method: 'get',
+ params: data
+ })
+}
+
+// 新增表单
+export const addForm = (data) => {
+ return request({
+ url: `/mgr/jvs-design/form/design`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 修改表单
+export const updateForm = (data) => {
+ return request({
+ url: `/mgr/jvs-design/form/design`,
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除表单
+export const deleteForm = (name) => {
+ return request({
+ url: `/mgr/jvs-design/form/design/${name}`,
+ method: 'delete'
+ })
+}
+
+// 发布
+export const deployForm = (id) => {
+ return request({
+ url: `/mgr/jvs-design/form/design/deploy/${id}`,
+ method: 'put'
+ })
+}
+
+// 挂载表单拉取数据
+export const getShowForm = (name) => {
+ return request({
+ url: encodeURI(`/mgr/jvs-design/form/design/mount/${name}`),
+ method: 'get'
+ })
+}
+
+// 查询可启动的流程列表
+export const getAvailable = (params) => {
+ return request({
+ url: `/mgr/jvs-design/modeler/query/list`,
+ method: 'post',
+ data: params
+ })
+}
+
+// 用户列表
+export function getUserList(query) {
+ return request({
+ url: "/mgr/jvs-auth/usermanager/list",
+ method: "get",
+ params: query
+ });
+}
+
+// 获取用户的部门菜单
+export function getDeptList() {
+ return request({
+ url: "/mgr/jvs-auth/dept/all",
+ method: "get",
+ });
+}
+
+// 获取全部角色信息
+export function getRoleList() {
+ return request({
+ url: "/mgr/jvs-auth/role/all/userRole",
+ method: "GET"
+ });
+}
+
+// 获取职位列表
+export function getPostList() {
+ return request({
+ url: "/mgr/jvs-auth/job/list",
+ method: "GET"
+ });
+}
+
+// 查询可选条件字段
+export function queryAvailable(params) {
+ return request({
+ url: `/mgr/jvs-design/modeler/node/column/query/available`,
+ method: "get",
+ params: params
+ });
+}
+
+// 所有正则
+export function getRegExpList(params) {
+ return request({
+ url: `/mgr/jvs-design/form/design/regexp`,
+ method: "get",
+ params: params
+ });
+}
diff --git a/src/views/page/api/formlist.js b/src/views/page/api/formlist.js
new file mode 100644
index 0000000000000000000000000000000000000000..9996758b90ab9b9ad7e1953070f94d72fec541af
--- /dev/null
+++ b/src/views/page/api/formlist.js
@@ -0,0 +1,94 @@
+import request from '@/router/axios'
+
+// 列表
+export const getPageList=(params, orders) => {
+ return request({
+ url: `/mgr/jvs-design/form/design/page${orders}`,
+ method: 'get',
+ params: params
+ })
+}
+
+// 归类列表
+export const getTypeList=() => {
+ return request({
+ url: `/mgr/jvs-design/form/design/types`,
+ method: 'get'
+ })
+}
+
+// 新增
+export const addForm=(data) => {
+ return request({
+ url: `/mgr/jvs-design/form/design`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 编辑
+export const editForm=(data) => {
+ return request({
+ url: `/mgr/jvs-design/form/design`,
+ method: 'put',
+ data: data
+ })
+}
+
+// 获取详情
+export const getDetail=(id) => {
+ return request({
+ url: `/mgr/jvs-design/form/design/${id}`,
+ method: 'get',
+ // params: params
+ })
+}
+
+// 获取设计数据结构
+export const getDataStr=(id) => {
+ return request({
+ url: `/mgr/jvs-design//dynamic/data/fields/${id}`,
+ method: 'get',
+ // params: params
+ })
+}
+
+// 部署
+export const deployForm=(id) => {
+ return request({
+ url: `/mgr/jvs-design/form/design/deploy/${id}`,
+ method: 'put',
+ })
+}
+
+// 卸载
+export const undeployForm=(id) => {
+ return request({
+ url: `/mgr/jvs-design/form/design/unload/${id}`,
+ method: 'post',
+ })
+}
+
+// 删除
+export const delForm=(id) => {
+ return request({
+ url: `/mgr/jvs-design/form/design/del/${id}`,
+ method: 'delete'
+ })
+}
+
+// // 部署的表单详情
+// export const getFormInfo=(key) => {
+// return request({
+// url: `/mgr/jvs-design/form/design/deployed/${key}`,
+// method: 'get'
+// })
+// }
+
+// 部署的表单详情
+export const getFormInfo=(id) => {
+ return request({
+ url: `/mgr/jvs-design/use/form/${id}`,
+ method: 'get'
+ })
+}
diff --git a/src/views/page/api/index.js b/src/views/page/api/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..e9dda35c0714dab1f4c327faa8e48b391e17342c
--- /dev/null
+++ b/src/views/page/api/index.js
@@ -0,0 +1,33 @@
+import request from '@/router/axios'
+const base = '/mgr/jvs-auth/router'
+import config from '../../package.json'
+let version = config.version.split('.').join('')
+// 发送本地路由
+export const sendRouter= (data) => {
+ return request({
+ url: `${base}/router/list`,
+ method: 'post',
+ data: data,
+ headers: {
+ client: 'jvs-page-ui', // fixme 请修改为当前的项目名称
+ name: encodeURI('列表页'), // fixme 请修改为当前的项目中文名称
+ version: version,
+ }
+ })
+}
+
+// 根据jti 获取token
+export const getToken = (str) => {
+ return request({
+ url: `/auth/token/convert/` + str,
+ method: 'get',
+ })
+}
+
+// 获取下拉列表
+export const getSelectData = (str) => {
+ return request({
+ url: str,
+ method: 'get',
+ })
+ }
\ No newline at end of file
diff --git a/src/views/page/api/list.js b/src/views/page/api/list.js
new file mode 100644
index 0000000000000000000000000000000000000000..07b82e49bdb6aaac338766561adde1a3064e8f9b
--- /dev/null
+++ b/src/views/page/api/list.js
@@ -0,0 +1,196 @@
+import request from '@/router/axios'
+
+// 根据数据源获取数据表
+export const getTableList = (datasourceName) => {
+ return request({
+ url: `/mgr/jvs-design/datasource/tables/${datasourceName}`,
+ method: 'get'
+ })
+}
+
+// 根据数据表id获取相关数据
+export const getTableInfo = (params) => {
+ return request({
+ // url: `/mgr/jvs-design/datasource/table/${tableId}`,
+ url: '/mgr/jvs-design/design',
+ method: 'get',
+ params: params
+ })
+}
+
+// 获取角色列表
+export const getRoleList = () => {
+ return request({
+ url: `/crud-design/role/list`,
+ method: 'get',
+ })
+}
+
+// 获取所有菜单
+export const getMenu = (params) => {
+ return request({
+ url: `/mgr/jvs-design/menu`,
+ method: 'get',
+ params: params
+ })
+}
+
+// 新增菜单
+export const addMenu = (data) => {
+ return request({
+ url: `/mgr/jvs-design/menu`,
+ method: 'post',
+ data: data
+ })
+}
+
+// // 根据菜单id拉取设计信息
+// export const getDesignInfo = (menuId) => {
+// return request({
+// url: `/mgr/jvs-design/design/${menuId}`,
+// method: 'get'
+// })
+// }
+
+// 部署
+export const enableMenu = (id) => {
+ return request({
+ url: `/mgr/jvs-design/design/deploy/${id}`,
+ method: 'post'
+ })
+}
+
+// 新增设计
+export const addDesign = (data) => {
+ return request({
+ url: `/mgr/jvs-design/design`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 更新
+export const updateDesign = (data) => {
+ return request({
+ url: `/mgr/jvs-design/design`,
+ method: 'put',
+ data: data
+ })
+}
+
+// 生成代码
+export const getSourceCode = (designId) => {
+ return request({
+ url: `/mgr/jvs-design/maven/generate/${designId}`,
+ method: 'get'
+ })
+}
+
+// 默认请求
+export const sendRequire = (url, method, data) => {
+ let obj = {
+ url: url,
+ method: method
+ }
+ if(data) {
+ if(method == 'get' || method == 'delete') {
+ obj.params = data
+ }else{
+ obj.data = data
+ }
+ }
+ return request(obj)
+}
+
+// 修改菜单
+export const updateMenu = (data) => {
+ return request({
+ url: `/mgr/jvs-design/menu/modify`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除菜单
+export const removeMenu = (menuId) => {
+ return request({
+ url: `/mgr/jvs-design/menu/remove/${menuId}`,
+ method: 'delete'
+ })
+}
+
+// 获取系统列表
+export const getAllSystem = (clientId) => {
+ return request({
+ url: `/mgr/jvs-auth/index/menu/${clientId}`,
+ method: "get"
+ });
+};
+
+// 获取一级菜单
+export const getParentMenu= (data) => {
+ return request({
+ url: `/mgr/jvs-design/menu/parent`,
+ method: 'get',
+ params: data
+ })
+}
+
+// 获取所有key对应值
+export const getKeyValue= () => {
+ return request({
+ url: `/mgr/jvs-design/design/labelValue`,
+ method: 'get'
+ })
+}
+
+// 部署历史
+export const getHistory= (menuId) => {
+ return request({
+ url: `/mgr/jvs-design/design/history/${menuId}`,
+ method: 'get'
+ })
+}
+
+// 自定义请求
+export const sendMyRequire = (http, data) => {
+ let headers = http.headers || {}
+ headers['Content-Type'] = http.requestContentType
+ let obj = {
+ url: http.url,
+ method: http.httpMethod,
+ headers: headers
+ }
+ if(data) {
+ if(http.requestContentType == 'application/x-www-form-urlencoded') {
+ obj.params = data
+ }else{
+ obj.data = data
+ }
+ }
+ return request(obj)
+}
+
+export const addCustomTable = (data) => {
+ return request({
+ url: `/mgr/jvs-design/datasource/addCustomTable`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 获取所有数据源列表
+export const getDataSource = () => {
+ return request({
+ url: `/mgr/jvs-design/datasource`,
+ method: 'get'
+ })
+}
+
+// 获取数据源下的所有表
+export const getSourceTable = (datasourceName) => {
+ return request({
+ url: `/mgr/jvs-design/datasource/tables/${datasourceName}`,
+ method: 'get'
+ })
+}
diff --git a/src/views/page/api/newDesign.js b/src/views/page/api/newDesign.js
new file mode 100644
index 0000000000000000000000000000000000000000..caa19d530220beb8b6199b6a75742a3d244b8f31
--- /dev/null
+++ b/src/views/page/api/newDesign.js
@@ -0,0 +1,110 @@
+import request from '@/router/axios'
+
+// 列表
+export const getPageList = (params) => {
+ return request({
+ url: `/mgr/jvs-design/design/page`,
+ method: 'get',
+ params: params
+ })
+}
+
+// 新建页面
+export const createPage = (params) => {
+ return request({
+ url: `/mgr/jvs-design/design/create`,
+ method: 'post',
+ data: params
+ })
+}
+
+//获取所有系统列表
+export const getAllSystemList = (clientId, params) => {
+ return request({
+ url: `/mgr/jvs-auth/index/menu/${clientId}`,
+ method: "get",
+ params: params
+ });
+};
+
+// 部署
+export const deployPage = (data) => {
+ return request({
+ url: `/mgr/jvs-design/design/deploy/${data.id}`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除
+export const deletePage = (id) => {
+ return request({
+ url: `/mgr/jvs-design/design/del/${id}`,
+ method: 'delete'
+ })
+}
+
+// 卸载菜单
+export const unloadPage = (id) => {
+ return request({
+ url: `/mgr/jvs-design/design/unload/${id}`,
+ method: 'post'
+ })
+}
+
+// 修改页面
+export const editPage = (data) => {
+ return request({
+ url: `/mgr/jvs-design/design/rename`,
+ method: 'put',
+ data: data
+ })
+}
+
+// sql统计
+export const getStatistics = (designId, statisticsCode, data) => {
+ return request({
+ url: `/mgr/jvs-design/datasource/statistics/${designId}/${statisticsCode}`,
+ method: "post",
+ data: data
+ });
+};
+
+// 获取详情
+export const getDetail=(params) => {
+ return request({
+ url: `/mgr/jvs-design/form/design`,
+ method: 'get',
+ params: params
+ })
+}
+
+
+// 获取所有应用
+export const getAllApp=(params) => {
+ return request({
+ url: `/mgr/jvs-design//JvsApp/all`,
+ method: 'get',
+ params: params
+ })
+}
+
+// 获取列表页按钮formId
+export const getButtonFormId=(dataModelId, designId, buttonName) => {
+ return request({
+ url: `/mgr/jvs-design//design/generateForm/${dataModelId}/${designId}/${buttonName}`,
+ method: 'get',
+ })
+}
+
+// 列表页分页查询数据
+export const getCrudDataPage=(params, modelId, designId) => {
+ return request({
+ url: `/mgr/jvs-design//dynamic/data/query/page/${modelId}`,
+ method: 'get',
+ params: params,
+ headers: {
+ 'designId': designId
+ }
+ })
+}
diff --git a/src/views/page/components/basic-design/detailForm.vue b/src/views/page/components/basic-design/detailForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9ffec0ba7691622154f548eab97797b9de4aa9f2
--- /dev/null
+++ b/src/views/page/components/basic-design/detailForm.vue
@@ -0,0 +1,59 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/components/basic-design/levelForm.vue b/src/views/page/components/basic-design/levelForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..122d944e718627696484ad2480019c6f5724e850
--- /dev/null
+++ b/src/views/page/components/basic-design/levelForm.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/components/basic-design/normalForm.vue b/src/views/page/components/basic-design/normalForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..77b20965159837bd0febfe74ce7dc8a58f67706f
--- /dev/null
+++ b/src/views/page/components/basic-design/normalForm.vue
@@ -0,0 +1,111 @@
+
+
+
+
+
diff --git a/src/views/page/components/basic-design/processForm.vue b/src/views/page/components/basic-design/processForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..99b221757af09a8e865f318a9929fcac767b6a3a
--- /dev/null
+++ b/src/views/page/components/basic-design/processForm.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/components/basic-design/stepForm.vue b/src/views/page/components/basic-design/stepForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..fb95d388990702bfb35eeef6820441b05492e1c8
--- /dev/null
+++ b/src/views/page/components/basic-design/stepForm.vue
@@ -0,0 +1,40 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/components/basic-design/tableForm.vue b/src/views/page/components/basic-design/tableForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3c65e9a30b03458e20e63c7f23c498b3c44a0b40
--- /dev/null
+++ b/src/views/page/components/basic-design/tableForm.vue
@@ -0,0 +1,208 @@
+
+
+
+
+
diff --git a/src/views/page/components/design/permission.vue b/src/views/page/components/design/permission.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9a30d5690d9b279fb9560b7e1220d4b71e7a1b28
--- /dev/null
+++ b/src/views/page/components/design/permission.vue
@@ -0,0 +1,294 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ op }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/components/list/permission.vue b/src/views/page/components/list/permission.vue
new file mode 100644
index 0000000000000000000000000000000000000000..dc1d1051924dad2e0f3153d247c2cdf0f88bd2b9
--- /dev/null
+++ b/src/views/page/components/list/permission.vue
@@ -0,0 +1,295 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ op }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/const/chinaArea.js b/src/views/page/const/chinaArea.js
new file mode 100644
index 0000000000000000000000000000000000000000..72ad5d689215683c4216b584a09db56e4edd5b97
--- /dev/null
+++ b/src/views/page/const/chinaArea.js
@@ -0,0 +1,13552 @@
+export const areaList =
+[
+ {
+ "code": "110000",
+ "name": "北京市",
+ "children": [
+ {
+ "code": "110000",
+ "name": "北京市",
+ "children": [
+ {
+ "code": "110101",
+ "name": "东城区"
+ },
+ {
+ "code": "110102",
+ "name": "西城区"
+ },
+ {
+ "code": "110105",
+ "name": "朝阳区"
+ },
+ {
+ "code": "110106",
+ "name": "丰台区"
+ },
+ {
+ "code": "110107",
+ "name": "石景山区"
+ },
+ {
+ "code": "110108",
+ "name": "海淀区"
+ },
+ {
+ "code": "110109",
+ "name": "门头沟区"
+ },
+ {
+ "code": "110111",
+ "name": "房山区"
+ },
+ {
+ "code": "110112",
+ "name": "通州区"
+ },
+ {
+ "code": "110113",
+ "name": "顺义区"
+ },
+ {
+ "code": "110114",
+ "name": "昌平区"
+ },
+ {
+ "code": "110115",
+ "name": "大兴区"
+ },
+ {
+ "code": "110116",
+ "name": "怀柔区"
+ },
+ {
+ "code": "110117",
+ "name": "平谷区"
+ },
+ {
+ "code": "110118",
+ "name": "密云区"
+ },
+ {
+ "code": "110119",
+ "name": "延庆区"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "120000",
+ "name": "天津市",
+ "children": [
+ {
+ "code": "120000",
+ "name": "天津市",
+ "children": [
+ {
+ "code": "120101",
+ "name": "和平区"
+ },
+ {
+ "code": "120102",
+ "name": "河东区"
+ },
+ {
+ "code": "120103",
+ "name": "河西区"
+ },
+ {
+ "code": "120104",
+ "name": "南开区"
+ },
+ {
+ "code": "120105",
+ "name": "河北区"
+ },
+ {
+ "code": "120106",
+ "name": "红桥区"
+ },
+ {
+ "code": "120110",
+ "name": "东丽区"
+ },
+ {
+ "code": "120111",
+ "name": "西青区"
+ },
+ {
+ "code": "120112",
+ "name": "津南区"
+ },
+ {
+ "code": "120113",
+ "name": "北辰区"
+ },
+ {
+ "code": "120114",
+ "name": "武清区"
+ },
+ {
+ "code": "120115",
+ "name": "宝坻区"
+ },
+ {
+ "code": "120116",
+ "name": "滨海新区"
+ },
+ {
+ "code": "120117",
+ "name": "宁河区"
+ },
+ {
+ "code": "120118",
+ "name": "静海区"
+ },
+ {
+ "code": "120119",
+ "name": "蓟州区"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "130000",
+ "name": "河北省",
+ "children": [
+ {
+ "code": "130100",
+ "name": "石家庄市",
+ "children": [
+ {
+ "code": "130102",
+ "name": "长安区"
+ },
+ {
+ "code": "130104",
+ "name": "桥西区"
+ },
+ {
+ "code": "130105",
+ "name": "新华区"
+ },
+ {
+ "code": "130107",
+ "name": "井陉矿区"
+ },
+ {
+ "code": "130108",
+ "name": "裕华区"
+ },
+ {
+ "code": "130109",
+ "name": "藁城区"
+ },
+ {
+ "code": "130110",
+ "name": "鹿泉区"
+ },
+ {
+ "code": "130111",
+ "name": "栾城区"
+ },
+ {
+ "code": "130121",
+ "name": "井陉县"
+ },
+ {
+ "code": "130123",
+ "name": "正定县"
+ },
+ {
+ "code": "130125",
+ "name": "行唐县"
+ },
+ {
+ "code": "130126",
+ "name": "灵寿县"
+ },
+ {
+ "code": "130127",
+ "name": "高邑县"
+ },
+ {
+ "code": "130128",
+ "name": "深泽县"
+ },
+ {
+ "code": "130129",
+ "name": "赞皇县"
+ },
+ {
+ "code": "130130",
+ "name": "无极县"
+ },
+ {
+ "code": "130131",
+ "name": "平山县"
+ },
+ {
+ "code": "130132",
+ "name": "元氏县"
+ },
+ {
+ "code": "130133",
+ "name": "赵县"
+ },
+ {
+ "code": "130181",
+ "name": "辛集市"
+ },
+ {
+ "code": "130183",
+ "name": "晋州市"
+ },
+ {
+ "code": "130184",
+ "name": "新乐市"
+ }
+ ]
+ },
+ {
+ "code": "130200",
+ "name": "唐山市",
+ "children": [
+ {
+ "code": "130202",
+ "name": "路南区"
+ },
+ {
+ "code": "130203",
+ "name": "路北区"
+ },
+ {
+ "code": "130204",
+ "name": "古冶区"
+ },
+ {
+ "code": "130205",
+ "name": "开平区"
+ },
+ {
+ "code": "130207",
+ "name": "丰南区"
+ },
+ {
+ "code": "130208",
+ "name": "丰润区"
+ },
+ {
+ "code": "130209",
+ "name": "曹妃甸区"
+ },
+ {
+ "code": "130223",
+ "name": "滦县"
+ },
+ {
+ "code": "130224",
+ "name": "滦南县"
+ },
+ {
+ "code": "130225",
+ "name": "乐亭县"
+ },
+ {
+ "code": "130227",
+ "name": "迁西县"
+ },
+ {
+ "code": "130229",
+ "name": "玉田县"
+ },
+ {
+ "code": "130281",
+ "name": "遵化市"
+ },
+ {
+ "code": "130283",
+ "name": "迁安市"
+ }
+ ]
+ },
+ {
+ "code": "130300",
+ "name": "秦皇岛市",
+ "children": [
+ {
+ "code": "130302",
+ "name": "海港区"
+ },
+ {
+ "code": "130303",
+ "name": "山海关区"
+ },
+ {
+ "code": "130304",
+ "name": "北戴河区"
+ },
+ {
+ "code": "130306",
+ "name": "抚宁区"
+ },
+ {
+ "code": "130321",
+ "name": "青龙满族自治县"
+ },
+ {
+ "code": "130322",
+ "name": "昌黎县"
+ },
+ {
+ "code": "130324",
+ "name": "卢龙县"
+ }
+ ]
+ },
+ {
+ "code": "130400",
+ "name": "邯郸市",
+ "children": [
+ {
+ "code": "130402",
+ "name": "邯山区"
+ },
+ {
+ "code": "130403",
+ "name": "丛台区"
+ },
+ {
+ "code": "130404",
+ "name": "复兴区"
+ },
+ {
+ "code": "130406",
+ "name": "峰峰矿区"
+ },
+ {
+ "code": "130407",
+ "name": "肥乡区"
+ },
+ {
+ "code": "130408",
+ "name": "永年区"
+ },
+ {
+ "code": "130423",
+ "name": "临漳县"
+ },
+ {
+ "code": "130424",
+ "name": "成安县"
+ },
+ {
+ "code": "130425",
+ "name": "大名县"
+ },
+ {
+ "code": "130426",
+ "name": "涉县"
+ },
+ {
+ "code": "130427",
+ "name": "磁县"
+ },
+ {
+ "code": "130430",
+ "name": "邱县"
+ },
+ {
+ "code": "130431",
+ "name": "鸡泽县"
+ },
+ {
+ "code": "130432",
+ "name": "广平县"
+ },
+ {
+ "code": "130433",
+ "name": "馆陶县"
+ },
+ {
+ "code": "130434",
+ "name": "魏县"
+ },
+ {
+ "code": "130435",
+ "name": "曲周县"
+ },
+ {
+ "code": "130481",
+ "name": "武安市"
+ }
+ ]
+ },
+ {
+ "code": "130500",
+ "name": "邢台市",
+ "children": [
+ {
+ "code": "130502",
+ "name": "桥东区"
+ },
+ {
+ "code": "130503",
+ "name": "桥西区"
+ },
+ {
+ "code": "130521",
+ "name": "邢台县"
+ },
+ {
+ "code": "130522",
+ "name": "临城县"
+ },
+ {
+ "code": "130523",
+ "name": "内丘县"
+ },
+ {
+ "code": "130524",
+ "name": "柏乡县"
+ },
+ {
+ "code": "130525",
+ "name": "隆尧县"
+ },
+ {
+ "code": "130526",
+ "name": "任县"
+ },
+ {
+ "code": "130527",
+ "name": "南和县"
+ },
+ {
+ "code": "130528",
+ "name": "宁晋县"
+ },
+ {
+ "code": "130529",
+ "name": "巨鹿县"
+ },
+ {
+ "code": "130530",
+ "name": "新河县"
+ },
+ {
+ "code": "130531",
+ "name": "广宗县"
+ },
+ {
+ "code": "130532",
+ "name": "平乡县"
+ },
+ {
+ "code": "130533",
+ "name": "威县"
+ },
+ {
+ "code": "130534",
+ "name": "清河县"
+ },
+ {
+ "code": "130535",
+ "name": "临西县"
+ },
+ {
+ "code": "130581",
+ "name": "南宫市"
+ },
+ {
+ "code": "130582",
+ "name": "沙河市"
+ }
+ ]
+ },
+ {
+ "code": "130600",
+ "name": "保定市",
+ "children": [
+ {
+ "code": "130602",
+ "name": "竞秀区"
+ },
+ {
+ "code": "130606",
+ "name": "莲池区"
+ },
+ {
+ "code": "130607",
+ "name": "满城区"
+ },
+ {
+ "code": "130608",
+ "name": "清苑区"
+ },
+ {
+ "code": "130609",
+ "name": "徐水区"
+ },
+ {
+ "code": "130623",
+ "name": "涞水县"
+ },
+ {
+ "code": "130624",
+ "name": "阜平县"
+ },
+ {
+ "code": "130626",
+ "name": "定兴县"
+ },
+ {
+ "code": "130627",
+ "name": "唐县"
+ },
+ {
+ "code": "130628",
+ "name": "高阳县"
+ },
+ {
+ "code": "130629",
+ "name": "容城县"
+ },
+ {
+ "code": "130630",
+ "name": "涞源县"
+ },
+ {
+ "code": "130631",
+ "name": "望都县"
+ },
+ {
+ "code": "130632",
+ "name": "安新县"
+ },
+ {
+ "code": "130633",
+ "name": "易县"
+ },
+ {
+ "code": "130634",
+ "name": "曲阳县"
+ },
+ {
+ "code": "130635",
+ "name": "蠡县"
+ },
+ {
+ "code": "130636",
+ "name": "顺平县"
+ },
+ {
+ "code": "130637",
+ "name": "博野县"
+ },
+ {
+ "code": "130638",
+ "name": "雄县"
+ },
+ {
+ "code": "130681",
+ "name": "涿州市"
+ },
+ {
+ "code": "130682",
+ "name": "定州市"
+ },
+ {
+ "code": "130683",
+ "name": "安国市"
+ },
+ {
+ "code": "130684",
+ "name": "高碑店市"
+ }
+ ]
+ },
+ {
+ "code": "130700",
+ "name": "张家口市",
+ "children": [
+ {
+ "code": "130702",
+ "name": "桥东区"
+ },
+ {
+ "code": "130703",
+ "name": "桥西区"
+ },
+ {
+ "code": "130705",
+ "name": "宣化区"
+ },
+ {
+ "code": "130706",
+ "name": "下花园区"
+ },
+ {
+ "code": "130708",
+ "name": "万全区"
+ },
+ {
+ "code": "130709",
+ "name": "崇礼区"
+ },
+ {
+ "code": "130722",
+ "name": "张北县"
+ },
+ {
+ "code": "130723",
+ "name": "康保县"
+ },
+ {
+ "code": "130724",
+ "name": "沽源县"
+ },
+ {
+ "code": "130725",
+ "name": "尚义县"
+ },
+ {
+ "code": "130726",
+ "name": "蔚县"
+ },
+ {
+ "code": "130727",
+ "name": "阳原县"
+ },
+ {
+ "code": "130728",
+ "name": "怀安县"
+ },
+ {
+ "code": "130730",
+ "name": "怀来县"
+ },
+ {
+ "code": "130731",
+ "name": "涿鹿县"
+ },
+ {
+ "code": "130732",
+ "name": "赤城县"
+ }
+ ]
+ },
+ {
+ "code": "130800",
+ "name": "承德市",
+ "children": [
+ {
+ "code": "130802",
+ "name": "双桥区"
+ },
+ {
+ "code": "130803",
+ "name": "双滦区"
+ },
+ {
+ "code": "130804",
+ "name": "鹰手营子矿区"
+ },
+ {
+ "code": "130821",
+ "name": "承德县"
+ },
+ {
+ "code": "130822",
+ "name": "兴隆县"
+ },
+ {
+ "code": "130824",
+ "name": "滦平县"
+ },
+ {
+ "code": "130825",
+ "name": "隆化县"
+ },
+ {
+ "code": "130826",
+ "name": "丰宁满族自治县"
+ },
+ {
+ "code": "130827",
+ "name": "宽城满族自治县"
+ },
+ {
+ "code": "130828",
+ "name": "围场满族蒙古族自治县"
+ },
+ {
+ "code": "130881",
+ "name": "平泉市"
+ }
+ ]
+ },
+ {
+ "code": "130900",
+ "name": "沧州市",
+ "children": [
+ {
+ "code": "130902",
+ "name": "新华区"
+ },
+ {
+ "code": "130903",
+ "name": "运河区"
+ },
+ {
+ "code": "130921",
+ "name": "沧县"
+ },
+ {
+ "code": "130922",
+ "name": "青县"
+ },
+ {
+ "code": "130923",
+ "name": "东光县"
+ },
+ {
+ "code": "130924",
+ "name": "海兴县"
+ },
+ {
+ "code": "130925",
+ "name": "盐山县"
+ },
+ {
+ "code": "130926",
+ "name": "肃宁县"
+ },
+ {
+ "code": "130927",
+ "name": "南皮县"
+ },
+ {
+ "code": "130928",
+ "name": "吴桥县"
+ },
+ {
+ "code": "130929",
+ "name": "献县"
+ },
+ {
+ "code": "130930",
+ "name": "孟村回族自治县"
+ },
+ {
+ "code": "130981",
+ "name": "泊头市"
+ },
+ {
+ "code": "130982",
+ "name": "任丘市"
+ },
+ {
+ "code": "130983",
+ "name": "黄骅市"
+ },
+ {
+ "code": "130984",
+ "name": "河间市"
+ }
+ ]
+ },
+ {
+ "code": "131000",
+ "name": "廊坊市",
+ "children": [
+ {
+ "code": "131002",
+ "name": "安次区"
+ },
+ {
+ "code": "131003",
+ "name": "广阳区"
+ },
+ {
+ "code": "131022",
+ "name": "固安县"
+ },
+ {
+ "code": "131023",
+ "name": "永清县"
+ },
+ {
+ "code": "131024",
+ "name": "香河县"
+ },
+ {
+ "code": "131025",
+ "name": "大城县"
+ },
+ {
+ "code": "131026",
+ "name": "文安县"
+ },
+ {
+ "code": "131028",
+ "name": "大厂回族自治县"
+ },
+ {
+ "code": "131081",
+ "name": "霸州市"
+ },
+ {
+ "code": "131082",
+ "name": "三河市"
+ }
+ ]
+ },
+ {
+ "code": "131100",
+ "name": "衡水市",
+ "children": [
+ {
+ "code": "131102",
+ "name": "桃城区"
+ },
+ {
+ "code": "131103",
+ "name": "冀州区"
+ },
+ {
+ "code": "131121",
+ "name": "枣强县"
+ },
+ {
+ "code": "131122",
+ "name": "武邑县"
+ },
+ {
+ "code": "131123",
+ "name": "武强县"
+ },
+ {
+ "code": "131124",
+ "name": "饶阳县"
+ },
+ {
+ "code": "131125",
+ "name": "安平县"
+ },
+ {
+ "code": "131126",
+ "name": "故城县"
+ },
+ {
+ "code": "131127",
+ "name": "景县"
+ },
+ {
+ "code": "131128",
+ "name": "阜城县"
+ },
+ {
+ "code": "131182",
+ "name": "深州市"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "140000",
+ "name": "山西省",
+ "children": [
+ {
+ "code": "140100",
+ "name": "太原市",
+ "children": [
+ {
+ "code": "140105",
+ "name": "小店区"
+ },
+ {
+ "code": "140106",
+ "name": "迎泽区"
+ },
+ {
+ "code": "140107",
+ "name": "杏花岭区"
+ },
+ {
+ "code": "140108",
+ "name": "尖草坪区"
+ },
+ {
+ "code": "140109",
+ "name": "万柏林区"
+ },
+ {
+ "code": "140110",
+ "name": "晋源区"
+ },
+ {
+ "code": "140121",
+ "name": "清徐县"
+ },
+ {
+ "code": "140122",
+ "name": "阳曲县"
+ },
+ {
+ "code": "140123",
+ "name": "娄烦县"
+ },
+ {
+ "code": "140181",
+ "name": "古交市"
+ }
+ ]
+ },
+ {
+ "code": "140200",
+ "name": "大同市",
+ "children": [
+ {
+ "code": "140212",
+ "name": "新荣区"
+ },
+ {
+ "code": "140213",
+ "name": "平城区"
+ },
+ {
+ "code": "140214",
+ "name": "云冈区"
+ },
+ {
+ "code": "140215",
+ "name": "云州区"
+ },
+ {
+ "code": "140221",
+ "name": "阳高县"
+ },
+ {
+ "code": "140222",
+ "name": "天镇县"
+ },
+ {
+ "code": "140223",
+ "name": "广灵县"
+ },
+ {
+ "code": "140224",
+ "name": "灵丘县"
+ },
+ {
+ "code": "140225",
+ "name": "浑源县"
+ },
+ {
+ "code": "140226",
+ "name": "左云县"
+ }
+ ]
+ },
+ {
+ "code": "140300",
+ "name": "阳泉市",
+ "children": [
+ {
+ "code": "140302",
+ "name": "城区"
+ },
+ {
+ "code": "140303",
+ "name": "矿区"
+ },
+ {
+ "code": "140311",
+ "name": "郊区"
+ },
+ {
+ "code": "140321",
+ "name": "平定县"
+ },
+ {
+ "code": "140322",
+ "name": "盂县"
+ }
+ ]
+ },
+ {
+ "code": "140400",
+ "name": "长治市",
+ "children": [
+ {
+ "code": "140402",
+ "name": "城区"
+ },
+ {
+ "code": "140411",
+ "name": "郊区"
+ },
+ {
+ "code": "140421",
+ "name": "长治县"
+ },
+ {
+ "code": "140423",
+ "name": "襄垣县"
+ },
+ {
+ "code": "140424",
+ "name": "屯留县"
+ },
+ {
+ "code": "140425",
+ "name": "平顺县"
+ },
+ {
+ "code": "140426",
+ "name": "黎城县"
+ },
+ {
+ "code": "140427",
+ "name": "壶关县"
+ },
+ {
+ "code": "140428",
+ "name": "长子县"
+ },
+ {
+ "code": "140429",
+ "name": "武乡县"
+ },
+ {
+ "code": "140430",
+ "name": "沁县"
+ },
+ {
+ "code": "140431",
+ "name": "沁源县"
+ },
+ {
+ "code": "140481",
+ "name": "潞城市"
+ }
+ ]
+ },
+ {
+ "code": "140500",
+ "name": "晋城市",
+ "children": [
+ {
+ "code": "140502",
+ "name": "城区"
+ },
+ {
+ "code": "140521",
+ "name": "沁水县"
+ },
+ {
+ "code": "140522",
+ "name": "阳城县"
+ },
+ {
+ "code": "140524",
+ "name": "陵川县"
+ },
+ {
+ "code": "140525",
+ "name": "泽州县"
+ },
+ {
+ "code": "140581",
+ "name": "高平市"
+ }
+ ]
+ },
+ {
+ "code": "140600",
+ "name": "朔州市",
+ "children": [
+ {
+ "code": "140602",
+ "name": "朔城区"
+ },
+ {
+ "code": "140603",
+ "name": "平鲁区"
+ },
+ {
+ "code": "140621",
+ "name": "山阴县"
+ },
+ {
+ "code": "140622",
+ "name": "应县"
+ },
+ {
+ "code": "140623",
+ "name": "右玉县"
+ },
+ {
+ "code": "140681",
+ "name": "怀仁市"
+ }
+ ]
+ },
+ {
+ "code": "140700",
+ "name": "晋中市",
+ "children": [
+ {
+ "code": "140702",
+ "name": "榆次区"
+ },
+ {
+ "code": "140721",
+ "name": "榆社县"
+ },
+ {
+ "code": "140722",
+ "name": "左权县"
+ },
+ {
+ "code": "140723",
+ "name": "和顺县"
+ },
+ {
+ "code": "140724",
+ "name": "昔阳县"
+ },
+ {
+ "code": "140725",
+ "name": "寿阳县"
+ },
+ {
+ "code": "140726",
+ "name": "太谷县"
+ },
+ {
+ "code": "140727",
+ "name": "祁县"
+ },
+ {
+ "code": "140728",
+ "name": "平遥县"
+ },
+ {
+ "code": "140729",
+ "name": "灵石县"
+ },
+ {
+ "code": "140781",
+ "name": "介休市"
+ }
+ ]
+ },
+ {
+ "code": "140800",
+ "name": "运城市",
+ "children": [
+ {
+ "code": "140802",
+ "name": "盐湖区"
+ },
+ {
+ "code": "140821",
+ "name": "临猗县"
+ },
+ {
+ "code": "140822",
+ "name": "万荣县"
+ },
+ {
+ "code": "140823",
+ "name": "闻喜县"
+ },
+ {
+ "code": "140824",
+ "name": "稷山县"
+ },
+ {
+ "code": "140825",
+ "name": "新绛县"
+ },
+ {
+ "code": "140826",
+ "name": "绛县"
+ },
+ {
+ "code": "140827",
+ "name": "垣曲县"
+ },
+ {
+ "code": "140828",
+ "name": "夏县"
+ },
+ {
+ "code": "140829",
+ "name": "平陆县"
+ },
+ {
+ "code": "140830",
+ "name": "芮城县"
+ },
+ {
+ "code": "140881",
+ "name": "永济市"
+ },
+ {
+ "code": "140882",
+ "name": "河津市"
+ }
+ ]
+ },
+ {
+ "code": "140900",
+ "name": "忻州市",
+ "children": [
+ {
+ "code": "140902",
+ "name": "忻府区"
+ },
+ {
+ "code": "140921",
+ "name": "定襄县"
+ },
+ {
+ "code": "140922",
+ "name": "五台县"
+ },
+ {
+ "code": "140923",
+ "name": "代县"
+ },
+ {
+ "code": "140924",
+ "name": "繁峙县"
+ },
+ {
+ "code": "140925",
+ "name": "宁武县"
+ },
+ {
+ "code": "140926",
+ "name": "静乐县"
+ },
+ {
+ "code": "140927",
+ "name": "神池县"
+ },
+ {
+ "code": "140928",
+ "name": "五寨县"
+ },
+ {
+ "code": "140929",
+ "name": "岢岚县"
+ },
+ {
+ "code": "140930",
+ "name": "河曲县"
+ },
+ {
+ "code": "140931",
+ "name": "保德县"
+ },
+ {
+ "code": "140932",
+ "name": "偏关县"
+ },
+ {
+ "code": "140981",
+ "name": "原平市"
+ }
+ ]
+ },
+ {
+ "code": "141000",
+ "name": "临汾市",
+ "children": [
+ {
+ "code": "141002",
+ "name": "尧都区"
+ },
+ {
+ "code": "141021",
+ "name": "曲沃县"
+ },
+ {
+ "code": "141022",
+ "name": "翼城县"
+ },
+ {
+ "code": "141023",
+ "name": "襄汾县"
+ },
+ {
+ "code": "141024",
+ "name": "洪洞县"
+ },
+ {
+ "code": "141025",
+ "name": "古县"
+ },
+ {
+ "code": "141026",
+ "name": "安泽县"
+ },
+ {
+ "code": "141027",
+ "name": "浮山县"
+ },
+ {
+ "code": "141028",
+ "name": "吉县"
+ },
+ {
+ "code": "141029",
+ "name": "乡宁县"
+ },
+ {
+ "code": "141030",
+ "name": "大宁县"
+ },
+ {
+ "code": "141031",
+ "name": "隰县"
+ },
+ {
+ "code": "141032",
+ "name": "永和县"
+ },
+ {
+ "code": "141033",
+ "name": "蒲县"
+ },
+ {
+ "code": "141034",
+ "name": "汾西县"
+ },
+ {
+ "code": "141081",
+ "name": "侯马市"
+ },
+ {
+ "code": "141082",
+ "name": "霍州市"
+ }
+ ]
+ },
+ {
+ "code": "141100",
+ "name": "吕梁市",
+ "children": [
+ {
+ "code": "141102",
+ "name": "离石区"
+ },
+ {
+ "code": "141121",
+ "name": "文水县"
+ },
+ {
+ "code": "141122",
+ "name": "交城县"
+ },
+ {
+ "code": "141123",
+ "name": "兴县"
+ },
+ {
+ "code": "141124",
+ "name": "临县"
+ },
+ {
+ "code": "141125",
+ "name": "柳林县"
+ },
+ {
+ "code": "141126",
+ "name": "石楼县"
+ },
+ {
+ "code": "141127",
+ "name": "岚县"
+ },
+ {
+ "code": "141128",
+ "name": "方山县"
+ },
+ {
+ "code": "141129",
+ "name": "中阳县"
+ },
+ {
+ "code": "141130",
+ "name": "交口县"
+ },
+ {
+ "code": "141181",
+ "name": "孝义市"
+ },
+ {
+ "code": "141182",
+ "name": "汾阳市"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "150000",
+ "name": "内蒙古自治区",
+ "children": [
+ {
+ "code": "150100",
+ "name": "呼和浩特市",
+ "children": [
+ {
+ "code": "150102",
+ "name": "新城区"
+ },
+ {
+ "code": "150103",
+ "name": "回民区"
+ },
+ {
+ "code": "150104",
+ "name": "玉泉区"
+ },
+ {
+ "code": "150105",
+ "name": "赛罕区"
+ },
+ {
+ "code": "150121",
+ "name": "土默特左旗"
+ },
+ {
+ "code": "150122",
+ "name": "托克托县"
+ },
+ {
+ "code": "150123",
+ "name": "和林格尔县"
+ },
+ {
+ "code": "150124",
+ "name": "清水河县"
+ },
+ {
+ "code": "150125",
+ "name": "武川县"
+ }
+ ]
+ },
+ {
+ "code": "150200",
+ "name": "包头市",
+ "children": [
+ {
+ "code": "150202",
+ "name": "东河区"
+ },
+ {
+ "code": "150203",
+ "name": "昆都仑区"
+ },
+ {
+ "code": "150204",
+ "name": "青山区"
+ },
+ {
+ "code": "150205",
+ "name": "石拐区"
+ },
+ {
+ "code": "150206",
+ "name": "白云鄂博矿区"
+ },
+ {
+ "code": "150207",
+ "name": "九原区"
+ },
+ {
+ "code": "150221",
+ "name": "土默特右旗"
+ },
+ {
+ "code": "150222",
+ "name": "固阳县"
+ },
+ {
+ "code": "150223",
+ "name": "达尔罕茂明安联合旗"
+ }
+ ]
+ },
+ {
+ "code": "150300",
+ "name": "乌海市",
+ "children": [
+ {
+ "code": "150302",
+ "name": "海勃湾区"
+ },
+ {
+ "code": "150303",
+ "name": "海南区"
+ },
+ {
+ "code": "150304",
+ "name": "乌达区"
+ }
+ ]
+ },
+ {
+ "code": "150400",
+ "name": "赤峰市",
+ "children": [
+ {
+ "code": "150402",
+ "name": "红山区"
+ },
+ {
+ "code": "150403",
+ "name": "元宝山区"
+ },
+ {
+ "code": "150404",
+ "name": "松山区"
+ },
+ {
+ "code": "150421",
+ "name": "阿鲁科尔沁旗"
+ },
+ {
+ "code": "150422",
+ "name": "巴林左旗"
+ },
+ {
+ "code": "150423",
+ "name": "巴林右旗"
+ },
+ {
+ "code": "150424",
+ "name": "林西县"
+ },
+ {
+ "code": "150425",
+ "name": "克什克腾旗"
+ },
+ {
+ "code": "150426",
+ "name": "翁牛特旗"
+ },
+ {
+ "code": "150428",
+ "name": "喀喇沁旗"
+ },
+ {
+ "code": "150429",
+ "name": "宁城县"
+ },
+ {
+ "code": "150430",
+ "name": "敖汉旗"
+ }
+ ]
+ },
+ {
+ "code": "150500",
+ "name": "通辽市",
+ "children": [
+ {
+ "code": "150502",
+ "name": "科尔沁区"
+ },
+ {
+ "code": "150521",
+ "name": "科尔沁左翼中旗"
+ },
+ {
+ "code": "150522",
+ "name": "科尔沁左翼后旗"
+ },
+ {
+ "code": "150523",
+ "name": "开鲁县"
+ },
+ {
+ "code": "150524",
+ "name": "库伦旗"
+ },
+ {
+ "code": "150525",
+ "name": "奈曼旗"
+ },
+ {
+ "code": "150526",
+ "name": "扎鲁特旗"
+ },
+ {
+ "code": "150581",
+ "name": "霍林郭勒市"
+ }
+ ]
+ },
+ {
+ "code": "150600",
+ "name": "鄂尔多斯市",
+ "children": [
+ {
+ "code": "150602",
+ "name": "东胜区"
+ },
+ {
+ "code": "150603",
+ "name": "康巴什区"
+ },
+ {
+ "code": "150621",
+ "name": "达拉特旗"
+ },
+ {
+ "code": "150622",
+ "name": "准格尔旗"
+ },
+ {
+ "code": "150623",
+ "name": "鄂托克前旗"
+ },
+ {
+ "code": "150624",
+ "name": "鄂托克旗"
+ },
+ {
+ "code": "150625",
+ "name": "杭锦旗"
+ },
+ {
+ "code": "150626",
+ "name": "乌审旗"
+ },
+ {
+ "code": "150627",
+ "name": "伊金霍洛旗"
+ }
+ ]
+ },
+ {
+ "code": "150700",
+ "name": "呼伦贝尔市",
+ "children": [
+ {
+ "code": "150702",
+ "name": "海拉尔区"
+ },
+ {
+ "code": "150703",
+ "name": "扎赉诺尔区"
+ },
+ {
+ "code": "150721",
+ "name": "阿荣旗"
+ },
+ {
+ "code": "150722",
+ "name": "莫力达瓦达斡尔族自治旗"
+ },
+ {
+ "code": "150723",
+ "name": "鄂伦春自治旗"
+ },
+ {
+ "code": "150724",
+ "name": "鄂温克族自治旗"
+ },
+ {
+ "code": "150725",
+ "name": "陈巴尔虎旗"
+ },
+ {
+ "code": "150726",
+ "name": "新巴尔虎左旗"
+ },
+ {
+ "code": "150727",
+ "name": "新巴尔虎右旗"
+ },
+ {
+ "code": "150781",
+ "name": "满洲里市"
+ },
+ {
+ "code": "150782",
+ "name": "牙克石市"
+ },
+ {
+ "code": "150783",
+ "name": "扎兰屯市"
+ },
+ {
+ "code": "150784",
+ "name": "额尔古纳市"
+ },
+ {
+ "code": "150785",
+ "name": "根河市"
+ }
+ ]
+ },
+ {
+ "code": "150800",
+ "name": "巴彦淖尔市",
+ "children": [
+ {
+ "code": "150802",
+ "name": "临河区"
+ },
+ {
+ "code": "150821",
+ "name": "五原县"
+ },
+ {
+ "code": "150822",
+ "name": "磴口县"
+ },
+ {
+ "code": "150823",
+ "name": "乌拉特前旗"
+ },
+ {
+ "code": "150824",
+ "name": "乌拉特中旗"
+ },
+ {
+ "code": "150825",
+ "name": "乌拉特后旗"
+ },
+ {
+ "code": "150826",
+ "name": "杭锦后旗"
+ }
+ ]
+ },
+ {
+ "code": "150900",
+ "name": "乌兰察布市",
+ "children": [
+ {
+ "code": "150902",
+ "name": "集宁区"
+ },
+ {
+ "code": "150921",
+ "name": "卓资县"
+ },
+ {
+ "code": "150922",
+ "name": "化德县"
+ },
+ {
+ "code": "150923",
+ "name": "商都县"
+ },
+ {
+ "code": "150924",
+ "name": "兴和县"
+ },
+ {
+ "code": "150925",
+ "name": "凉城县"
+ },
+ {
+ "code": "150926",
+ "name": "察哈尔右翼前旗"
+ },
+ {
+ "code": "150927",
+ "name": "察哈尔右翼中旗"
+ },
+ {
+ "code": "150928",
+ "name": "察哈尔右翼后旗"
+ },
+ {
+ "code": "150929",
+ "name": "四子王旗"
+ },
+ {
+ "code": "150981",
+ "name": "丰镇市"
+ }
+ ]
+ },
+ {
+ "code": "152200",
+ "name": "兴安盟",
+ "children": [
+ {
+ "code": "152201",
+ "name": "乌兰浩特市"
+ },
+ {
+ "code": "152202",
+ "name": "阿尔山市"
+ },
+ {
+ "code": "152221",
+ "name": "科尔沁右翼前旗"
+ },
+ {
+ "code": "152222",
+ "name": "科尔沁右翼中旗"
+ },
+ {
+ "code": "152223",
+ "name": "扎赉特旗"
+ },
+ {
+ "code": "152224",
+ "name": "突泉县"
+ }
+ ]
+ },
+ {
+ "code": "152500",
+ "name": "锡林郭勒盟",
+ "children": [
+ {
+ "code": "152501",
+ "name": "二连浩特市"
+ },
+ {
+ "code": "152502",
+ "name": "锡林浩特市"
+ },
+ {
+ "code": "152522",
+ "name": "阿巴嘎旗"
+ },
+ {
+ "code": "152523",
+ "name": "苏尼特左旗"
+ },
+ {
+ "code": "152524",
+ "name": "苏尼特右旗"
+ },
+ {
+ "code": "152525",
+ "name": "东乌珠穆沁旗"
+ },
+ {
+ "code": "152526",
+ "name": "西乌珠穆沁旗"
+ },
+ {
+ "code": "152527",
+ "name": "太仆寺旗"
+ },
+ {
+ "code": "152528",
+ "name": "镶黄旗"
+ },
+ {
+ "code": "152529",
+ "name": "正镶白旗"
+ },
+ {
+ "code": "152530",
+ "name": "正蓝旗"
+ },
+ {
+ "code": "152531",
+ "name": "多伦县"
+ }
+ ]
+ },
+ {
+ "code": "152900",
+ "name": "阿拉善盟",
+ "children": [
+ {
+ "code": "152921",
+ "name": "阿拉善左旗"
+ },
+ {
+ "code": "152922",
+ "name": "阿拉善右旗"
+ },
+ {
+ "code": "152923",
+ "name": "额济纳旗"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "210000",
+ "name": "辽宁省",
+ "children": [
+ {
+ "code": "210100",
+ "name": "沈阳市",
+ "children": [
+ {
+ "code": "210102",
+ "name": "和平区"
+ },
+ {
+ "code": "210103",
+ "name": "沈河区"
+ },
+ {
+ "code": "210104",
+ "name": "大东区"
+ },
+ {
+ "code": "210105",
+ "name": "皇姑区"
+ },
+ {
+ "code": "210106",
+ "name": "铁西区"
+ },
+ {
+ "code": "210111",
+ "name": "苏家屯区"
+ },
+ {
+ "code": "210112",
+ "name": "浑南区"
+ },
+ {
+ "code": "210113",
+ "name": "沈北新区"
+ },
+ {
+ "code": "210114",
+ "name": "于洪区"
+ },
+ {
+ "code": "210115",
+ "name": "辽中区"
+ },
+ {
+ "code": "210123",
+ "name": "康平县"
+ },
+ {
+ "code": "210124",
+ "name": "法库县"
+ },
+ {
+ "code": "210181",
+ "name": "新民市"
+ }
+ ]
+ },
+ {
+ "code": "210200",
+ "name": "大连市",
+ "children": [
+ {
+ "code": "210202",
+ "name": "中山区"
+ },
+ {
+ "code": "210203",
+ "name": "西岗区"
+ },
+ {
+ "code": "210204",
+ "name": "沙河口区"
+ },
+ {
+ "code": "210211",
+ "name": "甘井子区"
+ },
+ {
+ "code": "210212",
+ "name": "旅顺口区"
+ },
+ {
+ "code": "210213",
+ "name": "金州区"
+ },
+ {
+ "code": "210214",
+ "name": "普兰店区"
+ },
+ {
+ "code": "210224",
+ "name": "长海县"
+ },
+ {
+ "code": "210281",
+ "name": "瓦房店市"
+ },
+ {
+ "code": "210283",
+ "name": "庄河市"
+ }
+ ]
+ },
+ {
+ "code": "210300",
+ "name": "鞍山市",
+ "children": [
+ {
+ "code": "210302",
+ "name": "铁东区"
+ },
+ {
+ "code": "210303",
+ "name": "铁西区"
+ },
+ {
+ "code": "210304",
+ "name": "立山区"
+ },
+ {
+ "code": "210311",
+ "name": "千山区"
+ },
+ {
+ "code": "210321",
+ "name": "台安县"
+ },
+ {
+ "code": "210323",
+ "name": "岫岩满族自治县"
+ },
+ {
+ "code": "210381",
+ "name": "海城市"
+ }
+ ]
+ },
+ {
+ "code": "210400",
+ "name": "抚顺市",
+ "children": [
+ {
+ "code": "210402",
+ "name": "新抚区"
+ },
+ {
+ "code": "210403",
+ "name": "东洲区"
+ },
+ {
+ "code": "210404",
+ "name": "望花区"
+ },
+ {
+ "code": "210411",
+ "name": "顺城区"
+ },
+ {
+ "code": "210421",
+ "name": "抚顺县"
+ },
+ {
+ "code": "210422",
+ "name": "新宾满族自治县"
+ },
+ {
+ "code": "210423",
+ "name": "清原满族自治县"
+ }
+ ]
+ },
+ {
+ "code": "210500",
+ "name": "本溪市",
+ "children": [
+ {
+ "code": "210502",
+ "name": "平山区"
+ },
+ {
+ "code": "210503",
+ "name": "溪湖区"
+ },
+ {
+ "code": "210504",
+ "name": "明山区"
+ },
+ {
+ "code": "210505",
+ "name": "南芬区"
+ },
+ {
+ "code": "210521",
+ "name": "本溪满族自治县"
+ },
+ {
+ "code": "210522",
+ "name": "桓仁满族自治县"
+ }
+ ]
+ },
+ {
+ "code": "210600",
+ "name": "丹东市",
+ "children": [
+ {
+ "code": "210602",
+ "name": "元宝区"
+ },
+ {
+ "code": "210603",
+ "name": "振兴区"
+ },
+ {
+ "code": "210604",
+ "name": "振安区"
+ },
+ {
+ "code": "210624",
+ "name": "宽甸满族自治县"
+ },
+ {
+ "code": "210681",
+ "name": "东港市"
+ },
+ {
+ "code": "210682",
+ "name": "凤城市"
+ }
+ ]
+ },
+ {
+ "code": "210700",
+ "name": "锦州市",
+ "children": [
+ {
+ "code": "210702",
+ "name": "古塔区"
+ },
+ {
+ "code": "210703",
+ "name": "凌河区"
+ },
+ {
+ "code": "210711",
+ "name": "太和区"
+ },
+ {
+ "code": "210726",
+ "name": "黑山县"
+ },
+ {
+ "code": "210727",
+ "name": "义县"
+ },
+ {
+ "code": "210781",
+ "name": "凌海市"
+ },
+ {
+ "code": "210782",
+ "name": "北镇市"
+ }
+ ]
+ },
+ {
+ "code": "210800",
+ "name": "营口市",
+ "children": [
+ {
+ "code": "210802",
+ "name": "站前区"
+ },
+ {
+ "code": "210803",
+ "name": "西市区"
+ },
+ {
+ "code": "210804",
+ "name": "鲅鱼圈区"
+ },
+ {
+ "code": "210811",
+ "name": "老边区"
+ },
+ {
+ "code": "210881",
+ "name": "盖州市"
+ },
+ {
+ "code": "210882",
+ "name": "大石桥市"
+ }
+ ]
+ },
+ {
+ "code": "210900",
+ "name": "阜新市",
+ "children": [
+ {
+ "code": "210902",
+ "name": "海州区"
+ },
+ {
+ "code": "210903",
+ "name": "新邱区"
+ },
+ {
+ "code": "210904",
+ "name": "太平区"
+ },
+ {
+ "code": "210905",
+ "name": "清河门区"
+ },
+ {
+ "code": "210911",
+ "name": "细河区"
+ },
+ {
+ "code": "210921",
+ "name": "阜新蒙古族自治县"
+ },
+ {
+ "code": "210922",
+ "name": "彰武县"
+ }
+ ]
+ },
+ {
+ "code": "211000",
+ "name": "辽阳市",
+ "children": [
+ {
+ "code": "211002",
+ "name": "白塔区"
+ },
+ {
+ "code": "211003",
+ "name": "文圣区"
+ },
+ {
+ "code": "211004",
+ "name": "宏伟区"
+ },
+ {
+ "code": "211005",
+ "name": "弓长岭区"
+ },
+ {
+ "code": "211011",
+ "name": "太子河区"
+ },
+ {
+ "code": "211021",
+ "name": "辽阳县"
+ },
+ {
+ "code": "211081",
+ "name": "灯塔市"
+ }
+ ]
+ },
+ {
+ "code": "211100",
+ "name": "盘锦市",
+ "children": [
+ {
+ "code": "211102",
+ "name": "双台子区"
+ },
+ {
+ "code": "211103",
+ "name": "兴隆台区"
+ },
+ {
+ "code": "211104",
+ "name": "大洼区"
+ },
+ {
+ "code": "211122",
+ "name": "盘山县"
+ }
+ ]
+ },
+ {
+ "code": "211200",
+ "name": "铁岭市",
+ "children": [
+ {
+ "code": "211202",
+ "name": "银州区"
+ },
+ {
+ "code": "211204",
+ "name": "清河区"
+ },
+ {
+ "code": "211221",
+ "name": "铁岭县"
+ },
+ {
+ "code": "211223",
+ "name": "西丰县"
+ },
+ {
+ "code": "211224",
+ "name": "昌图县"
+ },
+ {
+ "code": "211281",
+ "name": "调兵山市"
+ },
+ {
+ "code": "211282",
+ "name": "开原市"
+ }
+ ]
+ },
+ {
+ "code": "211300",
+ "name": "朝阳市",
+ "children": [
+ {
+ "code": "211302",
+ "name": "双塔区"
+ },
+ {
+ "code": "211303",
+ "name": "龙城区"
+ },
+ {
+ "code": "211321",
+ "name": "朝阳县"
+ },
+ {
+ "code": "211322",
+ "name": "建平县"
+ },
+ {
+ "code": "211324",
+ "name": "喀喇沁左翼蒙古族自治县"
+ },
+ {
+ "code": "211381",
+ "name": "北票市"
+ },
+ {
+ "code": "211382",
+ "name": "凌源市"
+ }
+ ]
+ },
+ {
+ "code": "211400",
+ "name": "葫芦岛市",
+ "children": [
+ {
+ "code": "211402",
+ "name": "连山区"
+ },
+ {
+ "code": "211403",
+ "name": "龙港区"
+ },
+ {
+ "code": "211404",
+ "name": "南票区"
+ },
+ {
+ "code": "211421",
+ "name": "绥中县"
+ },
+ {
+ "code": "211422",
+ "name": "建昌县"
+ },
+ {
+ "code": "211481",
+ "name": "兴城市"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "220000",
+ "name": "吉林省",
+ "children": [
+ {
+ "code": "220100",
+ "name": "长春市",
+ "children": [
+ {
+ "code": "220102",
+ "name": "南关区"
+ },
+ {
+ "code": "220103",
+ "name": "宽城区"
+ },
+ {
+ "code": "220104",
+ "name": "朝阳区"
+ },
+ {
+ "code": "220105",
+ "name": "二道区"
+ },
+ {
+ "code": "220106",
+ "name": "绿园区"
+ },
+ {
+ "code": "220112",
+ "name": "双阳区"
+ },
+ {
+ "code": "220113",
+ "name": "九台区"
+ },
+ {
+ "code": "220122",
+ "name": "农安县"
+ },
+ {
+ "code": "220182",
+ "name": "榆树市"
+ },
+ {
+ "code": "220183",
+ "name": "德惠市"
+ }
+ ]
+ },
+ {
+ "code": "220200",
+ "name": "吉林市",
+ "children": [
+ {
+ "code": "220202",
+ "name": "昌邑区"
+ },
+ {
+ "code": "220203",
+ "name": "龙潭区"
+ },
+ {
+ "code": "220204",
+ "name": "船营区"
+ },
+ {
+ "code": "220211",
+ "name": "丰满区"
+ },
+ {
+ "code": "220221",
+ "name": "永吉县"
+ },
+ {
+ "code": "220281",
+ "name": "蛟河市"
+ },
+ {
+ "code": "220282",
+ "name": "桦甸市"
+ },
+ {
+ "code": "220283",
+ "name": "舒兰市"
+ },
+ {
+ "code": "220284",
+ "name": "磐石市"
+ }
+ ]
+ },
+ {
+ "code": "220300",
+ "name": "四平市",
+ "children": [
+ {
+ "code": "220302",
+ "name": "铁西区"
+ },
+ {
+ "code": "220303",
+ "name": "铁东区"
+ },
+ {
+ "code": "220322",
+ "name": "梨树县"
+ },
+ {
+ "code": "220323",
+ "name": "伊通满族自治县"
+ },
+ {
+ "code": "220381",
+ "name": "公主岭市"
+ },
+ {
+ "code": "220382",
+ "name": "双辽市"
+ }
+ ]
+ },
+ {
+ "code": "220400",
+ "name": "辽源市",
+ "children": [
+ {
+ "code": "220402",
+ "name": "龙山区"
+ },
+ {
+ "code": "220403",
+ "name": "西安区"
+ },
+ {
+ "code": "220421",
+ "name": "东丰县"
+ },
+ {
+ "code": "220422",
+ "name": "东辽县"
+ }
+ ]
+ },
+ {
+ "code": "220500",
+ "name": "通化市",
+ "children": [
+ {
+ "code": "220502",
+ "name": "东昌区"
+ },
+ {
+ "code": "220503",
+ "name": "二道江区"
+ },
+ {
+ "code": "220521",
+ "name": "通化县"
+ },
+ {
+ "code": "220523",
+ "name": "辉南县"
+ },
+ {
+ "code": "220524",
+ "name": "柳河县"
+ },
+ {
+ "code": "220581",
+ "name": "梅河口市"
+ },
+ {
+ "code": "220582",
+ "name": "集安市"
+ }
+ ]
+ },
+ {
+ "code": "220600",
+ "name": "白山市",
+ "children": [
+ {
+ "code": "220602",
+ "name": "浑江区"
+ },
+ {
+ "code": "220605",
+ "name": "江源区"
+ },
+ {
+ "code": "220621",
+ "name": "抚松县"
+ },
+ {
+ "code": "220622",
+ "name": "靖宇县"
+ },
+ {
+ "code": "220623",
+ "name": "长白朝鲜族自治县"
+ },
+ {
+ "code": "220681",
+ "name": "临江市"
+ }
+ ]
+ },
+ {
+ "code": "220700",
+ "name": "松原市",
+ "children": [
+ {
+ "code": "220702",
+ "name": "宁江区"
+ },
+ {
+ "code": "220721",
+ "name": "前郭尔罗斯蒙古族自治县"
+ },
+ {
+ "code": "220722",
+ "name": "长岭县"
+ },
+ {
+ "code": "220723",
+ "name": "乾安县"
+ },
+ {
+ "code": "220781",
+ "name": "扶余市"
+ }
+ ]
+ },
+ {
+ "code": "220800",
+ "name": "白城市",
+ "children": [
+ {
+ "code": "220802",
+ "name": "洮北区"
+ },
+ {
+ "code": "220821",
+ "name": "镇赉县"
+ },
+ {
+ "code": "220822",
+ "name": "通榆县"
+ },
+ {
+ "code": "220881",
+ "name": "洮南市"
+ },
+ {
+ "code": "220882",
+ "name": "大安市"
+ }
+ ]
+ },
+ {
+ "code": "222400",
+ "name": "延边朝鲜族自治州",
+ "children": [
+ {
+ "code": "222401",
+ "name": "延吉市"
+ },
+ {
+ "code": "222402",
+ "name": "图们市"
+ },
+ {
+ "code": "222403",
+ "name": "敦化市"
+ },
+ {
+ "code": "222404",
+ "name": "珲春市"
+ },
+ {
+ "code": "222405",
+ "name": "龙井市"
+ },
+ {
+ "code": "222406",
+ "name": "和龙市"
+ },
+ {
+ "code": "222424",
+ "name": "汪清县"
+ },
+ {
+ "code": "222426",
+ "name": "安图县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "230000",
+ "name": "黑龙江省",
+ "children": [
+ {
+ "code": "230100",
+ "name": "哈尔滨市",
+ "children": [
+ {
+ "code": "230102",
+ "name": "道里区"
+ },
+ {
+ "code": "230103",
+ "name": "南岗区"
+ },
+ {
+ "code": "230104",
+ "name": "道外区"
+ },
+ {
+ "code": "230108",
+ "name": "平房区"
+ },
+ {
+ "code": "230109",
+ "name": "松北区"
+ },
+ {
+ "code": "230110",
+ "name": "香坊区"
+ },
+ {
+ "code": "230111",
+ "name": "呼兰区"
+ },
+ {
+ "code": "230112",
+ "name": "阿城区"
+ },
+ {
+ "code": "230113",
+ "name": "双城区"
+ },
+ {
+ "code": "230123",
+ "name": "依兰县"
+ },
+ {
+ "code": "230124",
+ "name": "方正县"
+ },
+ {
+ "code": "230125",
+ "name": "宾县"
+ },
+ {
+ "code": "230126",
+ "name": "巴彦县"
+ },
+ {
+ "code": "230127",
+ "name": "木兰县"
+ },
+ {
+ "code": "230128",
+ "name": "通河县"
+ },
+ {
+ "code": "230129",
+ "name": "延寿县"
+ },
+ {
+ "code": "230183",
+ "name": "尚志市"
+ },
+ {
+ "code": "230184",
+ "name": "五常市"
+ }
+ ]
+ },
+ {
+ "code": "230200",
+ "name": "齐齐哈尔市",
+ "children": [
+ {
+ "code": "230202",
+ "name": "龙沙区"
+ },
+ {
+ "code": "230203",
+ "name": "建华区"
+ },
+ {
+ "code": "230204",
+ "name": "铁锋区"
+ },
+ {
+ "code": "230205",
+ "name": "昂昂溪区"
+ },
+ {
+ "code": "230206",
+ "name": "富拉尔基区"
+ },
+ {
+ "code": "230207",
+ "name": "碾子山区"
+ },
+ {
+ "code": "230208",
+ "name": "梅里斯达斡尔族区"
+ },
+ {
+ "code": "230221",
+ "name": "龙江县"
+ },
+ {
+ "code": "230223",
+ "name": "依安县"
+ },
+ {
+ "code": "230224",
+ "name": "泰来县"
+ },
+ {
+ "code": "230225",
+ "name": "甘南县"
+ },
+ {
+ "code": "230227",
+ "name": "富裕县"
+ },
+ {
+ "code": "230229",
+ "name": "克山县"
+ },
+ {
+ "code": "230230",
+ "name": "克东县"
+ },
+ {
+ "code": "230231",
+ "name": "拜泉县"
+ },
+ {
+ "code": "230281",
+ "name": "讷河市"
+ }
+ ]
+ },
+ {
+ "code": "230300",
+ "name": "鸡西市",
+ "children": [
+ {
+ "code": "230302",
+ "name": "鸡冠区"
+ },
+ {
+ "code": "230303",
+ "name": "恒山区"
+ },
+ {
+ "code": "230304",
+ "name": "滴道区"
+ },
+ {
+ "code": "230305",
+ "name": "梨树区"
+ },
+ {
+ "code": "230306",
+ "name": "城子河区"
+ },
+ {
+ "code": "230307",
+ "name": "麻山区"
+ },
+ {
+ "code": "230321",
+ "name": "鸡东县"
+ },
+ {
+ "code": "230381",
+ "name": "虎林市"
+ },
+ {
+ "code": "230382",
+ "name": "密山市"
+ }
+ ]
+ },
+ {
+ "code": "230400",
+ "name": "鹤岗市",
+ "children": [
+ {
+ "code": "230402",
+ "name": "向阳区"
+ },
+ {
+ "code": "230403",
+ "name": "工农区"
+ },
+ {
+ "code": "230404",
+ "name": "南山区"
+ },
+ {
+ "code": "230405",
+ "name": "兴安区"
+ },
+ {
+ "code": "230406",
+ "name": "东山区"
+ },
+ {
+ "code": "230407",
+ "name": "兴山区"
+ },
+ {
+ "code": "230421",
+ "name": "萝北县"
+ },
+ {
+ "code": "230422",
+ "name": "绥滨县"
+ }
+ ]
+ },
+ {
+ "code": "230500",
+ "name": "双鸭山市",
+ "children": [
+ {
+ "code": "230502",
+ "name": "尖山区"
+ },
+ {
+ "code": "230503",
+ "name": "岭东区"
+ },
+ {
+ "code": "230505",
+ "name": "四方台区"
+ },
+ {
+ "code": "230506",
+ "name": "宝山区"
+ },
+ {
+ "code": "230521",
+ "name": "集贤县"
+ },
+ {
+ "code": "230522",
+ "name": "友谊县"
+ },
+ {
+ "code": "230523",
+ "name": "宝清县"
+ },
+ {
+ "code": "230524",
+ "name": "饶河县"
+ }
+ ]
+ },
+ {
+ "code": "230600",
+ "name": "大庆市",
+ "children": [
+ {
+ "code": "230602",
+ "name": "萨尔图区"
+ },
+ {
+ "code": "230603",
+ "name": "龙凤区"
+ },
+ {
+ "code": "230604",
+ "name": "让胡路区"
+ },
+ {
+ "code": "230605",
+ "name": "红岗区"
+ },
+ {
+ "code": "230606",
+ "name": "大同区"
+ },
+ {
+ "code": "230621",
+ "name": "肇州县"
+ },
+ {
+ "code": "230622",
+ "name": "肇源县"
+ },
+ {
+ "code": "230623",
+ "name": "林甸县"
+ },
+ {
+ "code": "230624",
+ "name": "杜尔伯特蒙古族自治县"
+ }
+ ]
+ },
+ {
+ "code": "230700",
+ "name": "伊春市",
+ "children": [
+ {
+ "code": "230702",
+ "name": "伊春区"
+ },
+ {
+ "code": "230703",
+ "name": "南岔区"
+ },
+ {
+ "code": "230704",
+ "name": "友好区"
+ },
+ {
+ "code": "230705",
+ "name": "西林区"
+ },
+ {
+ "code": "230706",
+ "name": "翠峦区"
+ },
+ {
+ "code": "230707",
+ "name": "新青区"
+ },
+ {
+ "code": "230708",
+ "name": "美溪区"
+ },
+ {
+ "code": "230709",
+ "name": "金山屯区"
+ },
+ {
+ "code": "230710",
+ "name": "五营区"
+ },
+ {
+ "code": "230711",
+ "name": "乌马河区"
+ },
+ {
+ "code": "230712",
+ "name": "汤旺河区"
+ },
+ {
+ "code": "230713",
+ "name": "带岭区"
+ },
+ {
+ "code": "230714",
+ "name": "乌伊岭区"
+ },
+ {
+ "code": "230715",
+ "name": "红星区"
+ },
+ {
+ "code": "230716",
+ "name": "上甘岭区"
+ },
+ {
+ "code": "230722",
+ "name": "嘉荫县"
+ },
+ {
+ "code": "230781",
+ "name": "铁力市"
+ }
+ ]
+ },
+ {
+ "code": "230800",
+ "name": "佳木斯市",
+ "children": [
+ {
+ "code": "230803",
+ "name": "向阳区"
+ },
+ {
+ "code": "230804",
+ "name": "前进区"
+ },
+ {
+ "code": "230805",
+ "name": "东风区"
+ },
+ {
+ "code": "230811",
+ "name": "郊区"
+ },
+ {
+ "code": "230822",
+ "name": "桦南县"
+ },
+ {
+ "code": "230826",
+ "name": "桦川县"
+ },
+ {
+ "code": "230828",
+ "name": "汤原县"
+ },
+ {
+ "code": "230881",
+ "name": "同江市"
+ },
+ {
+ "code": "230882",
+ "name": "富锦市"
+ },
+ {
+ "code": "230883",
+ "name": "抚远市"
+ }
+ ]
+ },
+ {
+ "code": "230900",
+ "name": "七台河市",
+ "children": [
+ {
+ "code": "230902",
+ "name": "新兴区"
+ },
+ {
+ "code": "230903",
+ "name": "桃山区"
+ },
+ {
+ "code": "230904",
+ "name": "茄子河区"
+ },
+ {
+ "code": "230921",
+ "name": "勃利县"
+ }
+ ]
+ },
+ {
+ "code": "231000",
+ "name": "牡丹江市",
+ "children": [
+ {
+ "code": "231002",
+ "name": "东安区"
+ },
+ {
+ "code": "231003",
+ "name": "阳明区"
+ },
+ {
+ "code": "231004",
+ "name": "爱民区"
+ },
+ {
+ "code": "231005",
+ "name": "西安区"
+ },
+ {
+ "code": "231025",
+ "name": "林口县"
+ },
+ {
+ "code": "231081",
+ "name": "绥芬河市"
+ },
+ {
+ "code": "231083",
+ "name": "海林市"
+ },
+ {
+ "code": "231084",
+ "name": "宁安市"
+ },
+ {
+ "code": "231085",
+ "name": "穆棱市"
+ },
+ {
+ "code": "231086",
+ "name": "东宁市"
+ }
+ ]
+ },
+ {
+ "code": "231100",
+ "name": "黑河市",
+ "children": [
+ {
+ "code": "231102",
+ "name": "爱辉区"
+ },
+ {
+ "code": "231121",
+ "name": "嫩江县"
+ },
+ {
+ "code": "231123",
+ "name": "逊克县"
+ },
+ {
+ "code": "231124",
+ "name": "孙吴县"
+ },
+ {
+ "code": "231181",
+ "name": "北安市"
+ },
+ {
+ "code": "231182",
+ "name": "五大连池市"
+ }
+ ]
+ },
+ {
+ "code": "231200",
+ "name": "绥化市",
+ "children": [
+ {
+ "code": "231202",
+ "name": "北林区"
+ },
+ {
+ "code": "231221",
+ "name": "望奎县"
+ },
+ {
+ "code": "231222",
+ "name": "兰西县"
+ },
+ {
+ "code": "231223",
+ "name": "青冈县"
+ },
+ {
+ "code": "231224",
+ "name": "庆安县"
+ },
+ {
+ "code": "231225",
+ "name": "明水县"
+ },
+ {
+ "code": "231226",
+ "name": "绥棱县"
+ },
+ {
+ "code": "231281",
+ "name": "安达市"
+ },
+ {
+ "code": "231282",
+ "name": "肇东市"
+ },
+ {
+ "code": "231283",
+ "name": "海伦市"
+ }
+ ]
+ },
+ {
+ "code": "232700",
+ "name": "大兴安岭地区",
+ "children": [
+ {
+ "code": "232701",
+ "name": "漠河市"
+ },
+ {
+ "code": "232721",
+ "name": "呼玛县"
+ },
+ {
+ "code": "232722",
+ "name": "塔河县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "310000",
+ "name": "上海市",
+ "children": [
+ {
+ "code": "310000",
+ "name": "上海市",
+ "children": [
+ {
+ "code": "310101",
+ "name": "黄浦区"
+ },
+ {
+ "code": "310104",
+ "name": "徐汇区"
+ },
+ {
+ "code": "310105",
+ "name": "长宁区"
+ },
+ {
+ "code": "310106",
+ "name": "静安区"
+ },
+ {
+ "code": "310107",
+ "name": "普陀区"
+ },
+ {
+ "code": "310109",
+ "name": "虹口区"
+ },
+ {
+ "code": "310110",
+ "name": "杨浦区"
+ },
+ {
+ "code": "310112",
+ "name": "闵行区"
+ },
+ {
+ "code": "310113",
+ "name": "宝山区"
+ },
+ {
+ "code": "310114",
+ "name": "嘉定区"
+ },
+ {
+ "code": "310115",
+ "name": "浦东新区"
+ },
+ {
+ "code": "310116",
+ "name": "金山区"
+ },
+ {
+ "code": "310117",
+ "name": "松江区"
+ },
+ {
+ "code": "310118",
+ "name": "青浦区"
+ },
+ {
+ "code": "310120",
+ "name": "奉贤区"
+ },
+ {
+ "code": "310151",
+ "name": "崇明区"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "320000",
+ "name": "江苏省",
+ "children": [
+ {
+ "code": "320100",
+ "name": "南京市",
+ "children": [
+ {
+ "code": "320102",
+ "name": "玄武区"
+ },
+ {
+ "code": "320104",
+ "name": "秦淮区"
+ },
+ {
+ "code": "320105",
+ "name": "建邺区"
+ },
+ {
+ "code": "320106",
+ "name": "鼓楼区"
+ },
+ {
+ "code": "320111",
+ "name": "浦口区"
+ },
+ {
+ "code": "320113",
+ "name": "栖霞区"
+ },
+ {
+ "code": "320114",
+ "name": "雨花台区"
+ },
+ {
+ "code": "320115",
+ "name": "江宁区"
+ },
+ {
+ "code": "320116",
+ "name": "六合区"
+ },
+ {
+ "code": "320117",
+ "name": "溧水区"
+ },
+ {
+ "code": "320118",
+ "name": "高淳区"
+ }
+ ]
+ },
+ {
+ "code": "320200",
+ "name": "无锡市",
+ "children": [
+ {
+ "code": "320205",
+ "name": "锡山区"
+ },
+ {
+ "code": "320206",
+ "name": "惠山区"
+ },
+ {
+ "code": "320211",
+ "name": "滨湖区"
+ },
+ {
+ "code": "320213",
+ "name": "梁溪区"
+ },
+ {
+ "code": "320214",
+ "name": "新吴区"
+ },
+ {
+ "code": "320281",
+ "name": "江阴市"
+ },
+ {
+ "code": "320282",
+ "name": "宜兴市"
+ }
+ ]
+ },
+ {
+ "code": "320300",
+ "name": "徐州市",
+ "children": [
+ {
+ "code": "320302",
+ "name": "鼓楼区"
+ },
+ {
+ "code": "320303",
+ "name": "云龙区"
+ },
+ {
+ "code": "320305",
+ "name": "贾汪区"
+ },
+ {
+ "code": "320311",
+ "name": "泉山区"
+ },
+ {
+ "code": "320312",
+ "name": "铜山区"
+ },
+ {
+ "code": "320321",
+ "name": "丰县"
+ },
+ {
+ "code": "320322",
+ "name": "沛县"
+ },
+ {
+ "code": "320324",
+ "name": "睢宁县"
+ },
+ {
+ "code": "320381",
+ "name": "新沂市"
+ },
+ {
+ "code": "320382",
+ "name": "邳州市"
+ }
+ ]
+ },
+ {
+ "code": "320400",
+ "name": "常州市",
+ "children": [
+ {
+ "code": "320402",
+ "name": "天宁区"
+ },
+ {
+ "code": "320404",
+ "name": "钟楼区"
+ },
+ {
+ "code": "320411",
+ "name": "新北区"
+ },
+ {
+ "code": "320412",
+ "name": "武进区"
+ },
+ {
+ "code": "320413",
+ "name": "金坛区"
+ },
+ {
+ "code": "320481",
+ "name": "溧阳市"
+ }
+ ]
+ },
+ {
+ "code": "320500",
+ "name": "苏州市",
+ "children": [
+ {
+ "code": "320505",
+ "name": "虎丘区"
+ },
+ {
+ "code": "320506",
+ "name": "吴中区"
+ },
+ {
+ "code": "320507",
+ "name": "相城区"
+ },
+ {
+ "code": "320508",
+ "name": "姑苏区"
+ },
+ {
+ "code": "320509",
+ "name": "吴江区"
+ },
+ {
+ "code": "320581",
+ "name": "常熟市"
+ },
+ {
+ "code": "320582",
+ "name": "张家港市"
+ },
+ {
+ "code": "320583",
+ "name": "昆山市"
+ },
+ {
+ "code": "320585",
+ "name": "太仓市"
+ }
+ ]
+ },
+ {
+ "code": "320600",
+ "name": "南通市",
+ "children": [
+ {
+ "code": "320602",
+ "name": "崇川区"
+ },
+ {
+ "code": "320611",
+ "name": "港闸区"
+ },
+ {
+ "code": "320612",
+ "name": "通州区"
+ },
+ {
+ "code": "320623",
+ "name": "如东县"
+ },
+ {
+ "code": "320681",
+ "name": "启东市"
+ },
+ {
+ "code": "320682",
+ "name": "如皋市"
+ },
+ {
+ "code": "320684",
+ "name": "海门市"
+ },
+ {
+ "code": "320685",
+ "name": "海安市"
+ }
+ ]
+ },
+ {
+ "code": "320700",
+ "name": "连云港市",
+ "children": [
+ {
+ "code": "320703",
+ "name": "连云区"
+ },
+ {
+ "code": "320706",
+ "name": "海州区"
+ },
+ {
+ "code": "320707",
+ "name": "赣榆区"
+ },
+ {
+ "code": "320722",
+ "name": "东海县"
+ },
+ {
+ "code": "320723",
+ "name": "灌云县"
+ },
+ {
+ "code": "320724",
+ "name": "灌南县"
+ }
+ ]
+ },
+ {
+ "code": "320800",
+ "name": "淮安市",
+ "children": [
+ {
+ "code": "320803",
+ "name": "淮安区"
+ },
+ {
+ "code": "320804",
+ "name": "淮阴区"
+ },
+ {
+ "code": "320812",
+ "name": "清江浦区"
+ },
+ {
+ "code": "320813",
+ "name": "洪泽区"
+ },
+ {
+ "code": "320826",
+ "name": "涟水县"
+ },
+ {
+ "code": "320830",
+ "name": "盱眙县"
+ },
+ {
+ "code": "320831",
+ "name": "金湖县"
+ }
+ ]
+ },
+ {
+ "code": "320900",
+ "name": "盐城市",
+ "children": [
+ {
+ "code": "320902",
+ "name": "亭湖区"
+ },
+ {
+ "code": "320903",
+ "name": "盐都区"
+ },
+ {
+ "code": "320904",
+ "name": "大丰区"
+ },
+ {
+ "code": "320921",
+ "name": "响水县"
+ },
+ {
+ "code": "320922",
+ "name": "滨海县"
+ },
+ {
+ "code": "320923",
+ "name": "阜宁县"
+ },
+ {
+ "code": "320924",
+ "name": "射阳县"
+ },
+ {
+ "code": "320925",
+ "name": "建湖县"
+ },
+ {
+ "code": "320981",
+ "name": "东台市"
+ }
+ ]
+ },
+ {
+ "code": "321000",
+ "name": "扬州市",
+ "children": [
+ {
+ "code": "321002",
+ "name": "广陵区"
+ },
+ {
+ "code": "321003",
+ "name": "邗江区"
+ },
+ {
+ "code": "321012",
+ "name": "江都区"
+ },
+ {
+ "code": "321023",
+ "name": "宝应县"
+ },
+ {
+ "code": "321081",
+ "name": "仪征市"
+ },
+ {
+ "code": "321084",
+ "name": "高邮市"
+ }
+ ]
+ },
+ {
+ "code": "321100",
+ "name": "镇江市",
+ "children": [
+ {
+ "code": "321102",
+ "name": "京口区"
+ },
+ {
+ "code": "321111",
+ "name": "润州区"
+ },
+ {
+ "code": "321112",
+ "name": "丹徒区"
+ },
+ {
+ "code": "321181",
+ "name": "丹阳市"
+ },
+ {
+ "code": "321182",
+ "name": "扬中市"
+ },
+ {
+ "code": "321183",
+ "name": "句容市"
+ }
+ ]
+ },
+ {
+ "code": "321200",
+ "name": "泰州市",
+ "children": [
+ {
+ "code": "321202",
+ "name": "海陵区"
+ },
+ {
+ "code": "321203",
+ "name": "高港区"
+ },
+ {
+ "code": "321204",
+ "name": "姜堰区"
+ },
+ {
+ "code": "321281",
+ "name": "兴化市"
+ },
+ {
+ "code": "321282",
+ "name": "靖江市"
+ },
+ {
+ "code": "321283",
+ "name": "泰兴市"
+ }
+ ]
+ },
+ {
+ "code": "321300",
+ "name": "宿迁市",
+ "children": [
+ {
+ "code": "321302",
+ "name": "宿城区"
+ },
+ {
+ "code": "321311",
+ "name": "宿豫区"
+ },
+ {
+ "code": "321322",
+ "name": "沭阳县"
+ },
+ {
+ "code": "321323",
+ "name": "泗阳县"
+ },
+ {
+ "code": "321324",
+ "name": "泗洪县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "330000",
+ "name": "浙江省",
+ "children": [
+ {
+ "code": "330100",
+ "name": "杭州市",
+ "children": [
+ {
+ "code": "330102",
+ "name": "上城区"
+ },
+ {
+ "code": "330103",
+ "name": "下城区"
+ },
+ {
+ "code": "330104",
+ "name": "江干区"
+ },
+ {
+ "code": "330105",
+ "name": "拱墅区"
+ },
+ {
+ "code": "330106",
+ "name": "西湖区"
+ },
+ {
+ "code": "330108",
+ "name": "滨江区"
+ },
+ {
+ "code": "330109",
+ "name": "萧山区"
+ },
+ {
+ "code": "330110",
+ "name": "余杭区"
+ },
+ {
+ "code": "330111",
+ "name": "富阳区"
+ },
+ {
+ "code": "330112",
+ "name": "临安区"
+ },
+ {
+ "code": "330122",
+ "name": "桐庐县"
+ },
+ {
+ "code": "330127",
+ "name": "淳安县"
+ },
+ {
+ "code": "330182",
+ "name": "建德市"
+ }
+ ]
+ },
+ {
+ "code": "330200",
+ "name": "宁波市",
+ "children": [
+ {
+ "code": "330203",
+ "name": "海曙区"
+ },
+ {
+ "code": "330205",
+ "name": "江北区"
+ },
+ {
+ "code": "330206",
+ "name": "北仑区"
+ },
+ {
+ "code": "330211",
+ "name": "镇海区"
+ },
+ {
+ "code": "330212",
+ "name": "鄞州区"
+ },
+ {
+ "code": "330213",
+ "name": "奉化区"
+ },
+ {
+ "code": "330225",
+ "name": "象山县"
+ },
+ {
+ "code": "330226",
+ "name": "宁海县"
+ },
+ {
+ "code": "330281",
+ "name": "余姚市"
+ },
+ {
+ "code": "330282",
+ "name": "慈溪市"
+ }
+ ]
+ },
+ {
+ "code": "330300",
+ "name": "温州市",
+ "children": [
+ {
+ "code": "330302",
+ "name": "鹿城区"
+ },
+ {
+ "code": "330303",
+ "name": "龙湾区"
+ },
+ {
+ "code": "330304",
+ "name": "瓯海区"
+ },
+ {
+ "code": "330305",
+ "name": "洞头区"
+ },
+ {
+ "code": "330324",
+ "name": "永嘉县"
+ },
+ {
+ "code": "330326",
+ "name": "平阳县"
+ },
+ {
+ "code": "330327",
+ "name": "苍南县"
+ },
+ {
+ "code": "330328",
+ "name": "文成县"
+ },
+ {
+ "code": "330329",
+ "name": "泰顺县"
+ },
+ {
+ "code": "330381",
+ "name": "瑞安市"
+ },
+ {
+ "code": "330382",
+ "name": "乐清市"
+ }
+ ]
+ },
+ {
+ "code": "330400",
+ "name": "嘉兴市",
+ "children": [
+ {
+ "code": "330402",
+ "name": "南湖区"
+ },
+ {
+ "code": "330411",
+ "name": "秀洲区"
+ },
+ {
+ "code": "330421",
+ "name": "嘉善县"
+ },
+ {
+ "code": "330424",
+ "name": "海盐县"
+ },
+ {
+ "code": "330481",
+ "name": "海宁市"
+ },
+ {
+ "code": "330482",
+ "name": "平湖市"
+ },
+ {
+ "code": "330483",
+ "name": "桐乡市"
+ }
+ ]
+ },
+ {
+ "code": "330500",
+ "name": "湖州市",
+ "children": [
+ {
+ "code": "330502",
+ "name": "吴兴区"
+ },
+ {
+ "code": "330503",
+ "name": "南浔区"
+ },
+ {
+ "code": "330521",
+ "name": "德清县"
+ },
+ {
+ "code": "330522",
+ "name": "长兴县"
+ },
+ {
+ "code": "330523",
+ "name": "安吉县"
+ }
+ ]
+ },
+ {
+ "code": "330600",
+ "name": "绍兴市",
+ "children": [
+ {
+ "code": "330602",
+ "name": "越城区"
+ },
+ {
+ "code": "330603",
+ "name": "柯桥区"
+ },
+ {
+ "code": "330604",
+ "name": "上虞区"
+ },
+ {
+ "code": "330624",
+ "name": "新昌县"
+ },
+ {
+ "code": "330681",
+ "name": "诸暨市"
+ },
+ {
+ "code": "330683",
+ "name": "嵊州市"
+ }
+ ]
+ },
+ {
+ "code": "330700",
+ "name": "金华市",
+ "children": [
+ {
+ "code": "330702",
+ "name": "婺城区"
+ },
+ {
+ "code": "330703",
+ "name": "金东区"
+ },
+ {
+ "code": "330723",
+ "name": "武义县"
+ },
+ {
+ "code": "330726",
+ "name": "浦江县"
+ },
+ {
+ "code": "330727",
+ "name": "磐安县"
+ },
+ {
+ "code": "330781",
+ "name": "兰溪市"
+ },
+ {
+ "code": "330782",
+ "name": "义乌市"
+ },
+ {
+ "code": "330783",
+ "name": "东阳市"
+ },
+ {
+ "code": "330784",
+ "name": "永康市"
+ }
+ ]
+ },
+ {
+ "code": "330800",
+ "name": "衢州市",
+ "children": [
+ {
+ "code": "330802",
+ "name": "柯城区"
+ },
+ {
+ "code": "330803",
+ "name": "衢江区"
+ },
+ {
+ "code": "330822",
+ "name": "常山县"
+ },
+ {
+ "code": "330824",
+ "name": "开化县"
+ },
+ {
+ "code": "330825",
+ "name": "龙游县"
+ },
+ {
+ "code": "330881",
+ "name": "江山市"
+ }
+ ]
+ },
+ {
+ "code": "330900",
+ "name": "舟山市",
+ "children": [
+ {
+ "code": "330902",
+ "name": "定海区"
+ },
+ {
+ "code": "330903",
+ "name": "普陀区"
+ },
+ {
+ "code": "330921",
+ "name": "岱山县"
+ },
+ {
+ "code": "330922",
+ "name": "嵊泗县"
+ }
+ ]
+ },
+ {
+ "code": "331000",
+ "name": "台州市",
+ "children": [
+ {
+ "code": "331002",
+ "name": "椒江区"
+ },
+ {
+ "code": "331003",
+ "name": "黄岩区"
+ },
+ {
+ "code": "331004",
+ "name": "路桥区"
+ },
+ {
+ "code": "331022",
+ "name": "三门县"
+ },
+ {
+ "code": "331023",
+ "name": "天台县"
+ },
+ {
+ "code": "331024",
+ "name": "仙居县"
+ },
+ {
+ "code": "331081",
+ "name": "温岭市"
+ },
+ {
+ "code": "331082",
+ "name": "临海市"
+ },
+ {
+ "code": "331083",
+ "name": "玉环市"
+ }
+ ]
+ },
+ {
+ "code": "331100",
+ "name": "丽水市",
+ "children": [
+ {
+ "code": "331102",
+ "name": "莲都区"
+ },
+ {
+ "code": "331121",
+ "name": "青田县"
+ },
+ {
+ "code": "331122",
+ "name": "缙云县"
+ },
+ {
+ "code": "331123",
+ "name": "遂昌县"
+ },
+ {
+ "code": "331124",
+ "name": "松阳县"
+ },
+ {
+ "code": "331125",
+ "name": "云和县"
+ },
+ {
+ "code": "331126",
+ "name": "庆元县"
+ },
+ {
+ "code": "331127",
+ "name": "景宁畲族自治县"
+ },
+ {
+ "code": "331181",
+ "name": "龙泉市"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "340000",
+ "name": "安徽省",
+ "children": [
+ {
+ "code": "340100",
+ "name": "合肥市",
+ "children": [
+ {
+ "code": "340102",
+ "name": "瑶海区"
+ },
+ {
+ "code": "340103",
+ "name": "庐阳区"
+ },
+ {
+ "code": "340104",
+ "name": "蜀山区"
+ },
+ {
+ "code": "340111",
+ "name": "包河区"
+ },
+ {
+ "code": "340121",
+ "name": "长丰县"
+ },
+ {
+ "code": "340122",
+ "name": "肥东县"
+ },
+ {
+ "code": "340123",
+ "name": "肥西县"
+ },
+ {
+ "code": "340124",
+ "name": "庐江县"
+ },
+ {
+ "code": "340181",
+ "name": "巢湖市"
+ }
+ ]
+ },
+ {
+ "code": "340200",
+ "name": "芜湖市",
+ "children": [
+ {
+ "code": "340202",
+ "name": "镜湖区"
+ },
+ {
+ "code": "340203",
+ "name": "弋江区"
+ },
+ {
+ "code": "340207",
+ "name": "鸠江区"
+ },
+ {
+ "code": "340208",
+ "name": "三山区"
+ },
+ {
+ "code": "340221",
+ "name": "芜湖县"
+ },
+ {
+ "code": "340222",
+ "name": "繁昌县"
+ },
+ {
+ "code": "340223",
+ "name": "南陵县"
+ },
+ {
+ "code": "340225",
+ "name": "无为县"
+ }
+ ]
+ },
+ {
+ "code": "340300",
+ "name": "蚌埠市",
+ "children": [
+ {
+ "code": "340302",
+ "name": "龙子湖区"
+ },
+ {
+ "code": "340303",
+ "name": "蚌山区"
+ },
+ {
+ "code": "340304",
+ "name": "禹会区"
+ },
+ {
+ "code": "340311",
+ "name": "淮上区"
+ },
+ {
+ "code": "340321",
+ "name": "怀远县"
+ },
+ {
+ "code": "340322",
+ "name": "五河县"
+ },
+ {
+ "code": "340323",
+ "name": "固镇县"
+ }
+ ]
+ },
+ {
+ "code": "340400",
+ "name": "淮南市",
+ "children": [
+ {
+ "code": "340402",
+ "name": "大通区"
+ },
+ {
+ "code": "340403",
+ "name": "田家庵区"
+ },
+ {
+ "code": "340404",
+ "name": "谢家集区"
+ },
+ {
+ "code": "340405",
+ "name": "八公山区"
+ },
+ {
+ "code": "340406",
+ "name": "潘集区"
+ },
+ {
+ "code": "340421",
+ "name": "凤台县"
+ },
+ {
+ "code": "340422",
+ "name": "寿县"
+ }
+ ]
+ },
+ {
+ "code": "340500",
+ "name": "马鞍山市",
+ "children": [
+ {
+ "code": "340503",
+ "name": "花山区"
+ },
+ {
+ "code": "340504",
+ "name": "雨山区"
+ },
+ {
+ "code": "340506",
+ "name": "博望区"
+ },
+ {
+ "code": "340521",
+ "name": "当涂县"
+ },
+ {
+ "code": "340522",
+ "name": "含山县"
+ },
+ {
+ "code": "340523",
+ "name": "和县"
+ }
+ ]
+ },
+ {
+ "code": "340600",
+ "name": "淮北市",
+ "children": [
+ {
+ "code": "340602",
+ "name": "杜集区"
+ },
+ {
+ "code": "340603",
+ "name": "相山区"
+ },
+ {
+ "code": "340604",
+ "name": "烈山区"
+ },
+ {
+ "code": "340621",
+ "name": "濉溪县"
+ }
+ ]
+ },
+ {
+ "code": "340700",
+ "name": "铜陵市",
+ "children": [
+ {
+ "code": "340705",
+ "name": "铜官区"
+ },
+ {
+ "code": "340706",
+ "name": "义安区"
+ },
+ {
+ "code": "340711",
+ "name": "郊区"
+ },
+ {
+ "code": "340722",
+ "name": "枞阳县"
+ }
+ ]
+ },
+ {
+ "code": "340800",
+ "name": "安庆市",
+ "children": [
+ {
+ "code": "340802",
+ "name": "迎江区"
+ },
+ {
+ "code": "340803",
+ "name": "大观区"
+ },
+ {
+ "code": "340811",
+ "name": "宜秀区"
+ },
+ {
+ "code": "340822",
+ "name": "怀宁县"
+ },
+ {
+ "code": "340824",
+ "name": "潜山县"
+ },
+ {
+ "code": "340825",
+ "name": "太湖县"
+ },
+ {
+ "code": "340826",
+ "name": "宿松县"
+ },
+ {
+ "code": "340827",
+ "name": "望江县"
+ },
+ {
+ "code": "340828",
+ "name": "岳西县"
+ },
+ {
+ "code": "340881",
+ "name": "桐城市"
+ }
+ ]
+ },
+ {
+ "code": "341000",
+ "name": "黄山市",
+ "children": [
+ {
+ "code": "341002",
+ "name": "屯溪区"
+ },
+ {
+ "code": "341003",
+ "name": "黄山区"
+ },
+ {
+ "code": "341004",
+ "name": "徽州区"
+ },
+ {
+ "code": "341021",
+ "name": "歙县"
+ },
+ {
+ "code": "341022",
+ "name": "休宁县"
+ },
+ {
+ "code": "341023",
+ "name": "黟县"
+ },
+ {
+ "code": "341024",
+ "name": "祁门县"
+ }
+ ]
+ },
+ {
+ "code": "341100",
+ "name": "滁州市",
+ "children": [
+ {
+ "code": "341102",
+ "name": "琅琊区"
+ },
+ {
+ "code": "341103",
+ "name": "南谯区"
+ },
+ {
+ "code": "341122",
+ "name": "来安县"
+ },
+ {
+ "code": "341124",
+ "name": "全椒县"
+ },
+ {
+ "code": "341125",
+ "name": "定远县"
+ },
+ {
+ "code": "341126",
+ "name": "凤阳县"
+ },
+ {
+ "code": "341181",
+ "name": "天长市"
+ },
+ {
+ "code": "341182",
+ "name": "明光市"
+ }
+ ]
+ },
+ {
+ "code": "341200",
+ "name": "阜阳市",
+ "children": [
+ {
+ "code": "341202",
+ "name": "颍州区"
+ },
+ {
+ "code": "341203",
+ "name": "颍东区"
+ },
+ {
+ "code": "341204",
+ "name": "颍泉区"
+ },
+ {
+ "code": "341221",
+ "name": "临泉县"
+ },
+ {
+ "code": "341222",
+ "name": "太和县"
+ },
+ {
+ "code": "341225",
+ "name": "阜南县"
+ },
+ {
+ "code": "341226",
+ "name": "颍上县"
+ },
+ {
+ "code": "341282",
+ "name": "界首市"
+ }
+ ]
+ },
+ {
+ "code": "341300",
+ "name": "宿州市",
+ "children": [
+ {
+ "code": "341302",
+ "name": "埇桥区"
+ },
+ {
+ "code": "341321",
+ "name": "砀山县"
+ },
+ {
+ "code": "341322",
+ "name": "萧县"
+ },
+ {
+ "code": "341323",
+ "name": "灵璧县"
+ },
+ {
+ "code": "341324",
+ "name": "泗县"
+ }
+ ]
+ },
+ {
+ "code": "341500",
+ "name": "六安市",
+ "children": [
+ {
+ "code": "341502",
+ "name": "金安区"
+ },
+ {
+ "code": "341503",
+ "name": "裕安区"
+ },
+ {
+ "code": "341504",
+ "name": "叶集区"
+ },
+ {
+ "code": "341522",
+ "name": "霍邱县"
+ },
+ {
+ "code": "341523",
+ "name": "舒城县"
+ },
+ {
+ "code": "341524",
+ "name": "金寨县"
+ },
+ {
+ "code": "341525",
+ "name": "霍山县"
+ }
+ ]
+ },
+ {
+ "code": "341600",
+ "name": "亳州市",
+ "children": [
+ {
+ "code": "341602",
+ "name": "谯城区"
+ },
+ {
+ "code": "341621",
+ "name": "涡阳县"
+ },
+ {
+ "code": "341622",
+ "name": "蒙城县"
+ },
+ {
+ "code": "341623",
+ "name": "利辛县"
+ }
+ ]
+ },
+ {
+ "code": "341700",
+ "name": "池州市",
+ "children": [
+ {
+ "code": "341702",
+ "name": "贵池区"
+ },
+ {
+ "code": "341721",
+ "name": "东至县"
+ },
+ {
+ "code": "341722",
+ "name": "石台县"
+ },
+ {
+ "code": "341723",
+ "name": "青阳县"
+ }
+ ]
+ },
+ {
+ "code": "341800",
+ "name": "宣城市",
+ "children": [
+ {
+ "code": "341802",
+ "name": "宣州区"
+ },
+ {
+ "code": "341821",
+ "name": "郎溪县"
+ },
+ {
+ "code": "341822",
+ "name": "广德县"
+ },
+ {
+ "code": "341823",
+ "name": "泾县"
+ },
+ {
+ "code": "341824",
+ "name": "绩溪县"
+ },
+ {
+ "code": "341825",
+ "name": "旌德县"
+ },
+ {
+ "code": "341881",
+ "name": "宁国市"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "350000",
+ "name": "福建省",
+ "children": [
+ {
+ "code": "350100",
+ "name": "福州市",
+ "children": [
+ {
+ "code": "350102",
+ "name": "鼓楼区"
+ },
+ {
+ "code": "350103",
+ "name": "台江区"
+ },
+ {
+ "code": "350104",
+ "name": "仓山区"
+ },
+ {
+ "code": "350105",
+ "name": "马尾区"
+ },
+ {
+ "code": "350111",
+ "name": "晋安区"
+ },
+ {
+ "code": "350112",
+ "name": "长乐区"
+ },
+ {
+ "code": "350121",
+ "name": "闽侯县"
+ },
+ {
+ "code": "350122",
+ "name": "连江县"
+ },
+ {
+ "code": "350123",
+ "name": "罗源县"
+ },
+ {
+ "code": "350124",
+ "name": "闽清县"
+ },
+ {
+ "code": "350125",
+ "name": "永泰县"
+ },
+ {
+ "code": "350128",
+ "name": "平潭县"
+ },
+ {
+ "code": "350181",
+ "name": "福清市"
+ }
+ ]
+ },
+ {
+ "code": "350200",
+ "name": "厦门市",
+ "children": [
+ {
+ "code": "350203",
+ "name": "思明区"
+ },
+ {
+ "code": "350205",
+ "name": "海沧区"
+ },
+ {
+ "code": "350206",
+ "name": "湖里区"
+ },
+ {
+ "code": "350211",
+ "name": "集美区"
+ },
+ {
+ "code": "350212",
+ "name": "同安区"
+ },
+ {
+ "code": "350213",
+ "name": "翔安区"
+ }
+ ]
+ },
+ {
+ "code": "350300",
+ "name": "莆田市",
+ "children": [
+ {
+ "code": "350302",
+ "name": "城厢区"
+ },
+ {
+ "code": "350303",
+ "name": "涵江区"
+ },
+ {
+ "code": "350304",
+ "name": "荔城区"
+ },
+ {
+ "code": "350305",
+ "name": "秀屿区"
+ },
+ {
+ "code": "350322",
+ "name": "仙游县"
+ }
+ ]
+ },
+ {
+ "code": "350400",
+ "name": "三明市",
+ "children": [
+ {
+ "code": "350402",
+ "name": "梅列区"
+ },
+ {
+ "code": "350403",
+ "name": "三元区"
+ },
+ {
+ "code": "350421",
+ "name": "明溪县"
+ },
+ {
+ "code": "350423",
+ "name": "清流县"
+ },
+ {
+ "code": "350424",
+ "name": "宁化县"
+ },
+ {
+ "code": "350425",
+ "name": "大田县"
+ },
+ {
+ "code": "350426",
+ "name": "尤溪县"
+ },
+ {
+ "code": "350427",
+ "name": "沙县"
+ },
+ {
+ "code": "350428",
+ "name": "将乐县"
+ },
+ {
+ "code": "350429",
+ "name": "泰宁县"
+ },
+ {
+ "code": "350430",
+ "name": "建宁县"
+ },
+ {
+ "code": "350481",
+ "name": "永安市"
+ }
+ ]
+ },
+ {
+ "code": "350500",
+ "name": "泉州市",
+ "children": [
+ {
+ "code": "350502",
+ "name": "鲤城区"
+ },
+ {
+ "code": "350503",
+ "name": "丰泽区"
+ },
+ {
+ "code": "350504",
+ "name": "洛江区"
+ },
+ {
+ "code": "350505",
+ "name": "泉港区"
+ },
+ {
+ "code": "350521",
+ "name": "惠安县"
+ },
+ {
+ "code": "350524",
+ "name": "安溪县"
+ },
+ {
+ "code": "350525",
+ "name": "永春县"
+ },
+ {
+ "code": "350526",
+ "name": "德化县"
+ },
+ {
+ "code": "350527",
+ "name": "金门县"
+ },
+ {
+ "code": "350581",
+ "name": "石狮市"
+ },
+ {
+ "code": "350582",
+ "name": "晋江市"
+ },
+ {
+ "code": "350583",
+ "name": "南安市"
+ }
+ ]
+ },
+ {
+ "code": "350600",
+ "name": "漳州市",
+ "children": [
+ {
+ "code": "350602",
+ "name": "芗城区"
+ },
+ {
+ "code": "350603",
+ "name": "龙文区"
+ },
+ {
+ "code": "350622",
+ "name": "云霄县"
+ },
+ {
+ "code": "350623",
+ "name": "漳浦县"
+ },
+ {
+ "code": "350624",
+ "name": "诏安县"
+ },
+ {
+ "code": "350625",
+ "name": "长泰县"
+ },
+ {
+ "code": "350626",
+ "name": "东山县"
+ },
+ {
+ "code": "350627",
+ "name": "南靖县"
+ },
+ {
+ "code": "350628",
+ "name": "平和县"
+ },
+ {
+ "code": "350629",
+ "name": "华安县"
+ },
+ {
+ "code": "350681",
+ "name": "龙海市"
+ }
+ ]
+ },
+ {
+ "code": "350700",
+ "name": "南平市",
+ "children": [
+ {
+ "code": "350702",
+ "name": "延平区"
+ },
+ {
+ "code": "350703",
+ "name": "建阳区"
+ },
+ {
+ "code": "350721",
+ "name": "顺昌县"
+ },
+ {
+ "code": "350722",
+ "name": "浦城县"
+ },
+ {
+ "code": "350723",
+ "name": "光泽县"
+ },
+ {
+ "code": "350724",
+ "name": "松溪县"
+ },
+ {
+ "code": "350725",
+ "name": "政和县"
+ },
+ {
+ "code": "350781",
+ "name": "邵武市"
+ },
+ {
+ "code": "350782",
+ "name": "武夷山市"
+ },
+ {
+ "code": "350783",
+ "name": "建瓯市"
+ }
+ ]
+ },
+ {
+ "code": "350800",
+ "name": "龙岩市",
+ "children": [
+ {
+ "code": "350802",
+ "name": "新罗区"
+ },
+ {
+ "code": "350803",
+ "name": "永定区"
+ },
+ {
+ "code": "350821",
+ "name": "长汀县"
+ },
+ {
+ "code": "350823",
+ "name": "上杭县"
+ },
+ {
+ "code": "350824",
+ "name": "武平县"
+ },
+ {
+ "code": "350825",
+ "name": "连城县"
+ },
+ {
+ "code": "350881",
+ "name": "漳平市"
+ }
+ ]
+ },
+ {
+ "code": "350900",
+ "name": "宁德市",
+ "children": [
+ {
+ "code": "350902",
+ "name": "蕉城区"
+ },
+ {
+ "code": "350921",
+ "name": "霞浦县"
+ },
+ {
+ "code": "350922",
+ "name": "古田县"
+ },
+ {
+ "code": "350923",
+ "name": "屏南县"
+ },
+ {
+ "code": "350924",
+ "name": "寿宁县"
+ },
+ {
+ "code": "350925",
+ "name": "周宁县"
+ },
+ {
+ "code": "350926",
+ "name": "柘荣县"
+ },
+ {
+ "code": "350981",
+ "name": "福安市"
+ },
+ {
+ "code": "350982",
+ "name": "福鼎市"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "360000",
+ "name": "江西省",
+ "children": [
+ {
+ "code": "360100",
+ "name": "南昌市",
+ "children": [
+ {
+ "code": "360102",
+ "name": "东湖区"
+ },
+ {
+ "code": "360103",
+ "name": "西湖区"
+ },
+ {
+ "code": "360104",
+ "name": "青云谱区"
+ },
+ {
+ "code": "360105",
+ "name": "湾里区"
+ },
+ {
+ "code": "360111",
+ "name": "青山湖区"
+ },
+ {
+ "code": "360112",
+ "name": "新建区"
+ },
+ {
+ "code": "360121",
+ "name": "南昌县"
+ },
+ {
+ "code": "360123",
+ "name": "安义县"
+ },
+ {
+ "code": "360124",
+ "name": "进贤县"
+ }
+ ]
+ },
+ {
+ "code": "360200",
+ "name": "景德镇市",
+ "children": [
+ {
+ "code": "360202",
+ "name": "昌江区"
+ },
+ {
+ "code": "360203",
+ "name": "珠山区"
+ },
+ {
+ "code": "360222",
+ "name": "浮梁县"
+ },
+ {
+ "code": "360281",
+ "name": "乐平市"
+ }
+ ]
+ },
+ {
+ "code": "360300",
+ "name": "萍乡市",
+ "children": [
+ {
+ "code": "360302",
+ "name": "安源区"
+ },
+ {
+ "code": "360313",
+ "name": "湘东区"
+ },
+ {
+ "code": "360321",
+ "name": "莲花县"
+ },
+ {
+ "code": "360322",
+ "name": "上栗县"
+ },
+ {
+ "code": "360323",
+ "name": "芦溪县"
+ }
+ ]
+ },
+ {
+ "code": "360400",
+ "name": "九江市",
+ "children": [
+ {
+ "code": "360402",
+ "name": "濂溪区"
+ },
+ {
+ "code": "360403",
+ "name": "浔阳区"
+ },
+ {
+ "code": "360404",
+ "name": "柴桑区"
+ },
+ {
+ "code": "360423",
+ "name": "武宁县"
+ },
+ {
+ "code": "360424",
+ "name": "修水县"
+ },
+ {
+ "code": "360425",
+ "name": "永修县"
+ },
+ {
+ "code": "360426",
+ "name": "德安县"
+ },
+ {
+ "code": "360428",
+ "name": "都昌县"
+ },
+ {
+ "code": "360429",
+ "name": "湖口县"
+ },
+ {
+ "code": "360430",
+ "name": "彭泽县"
+ },
+ {
+ "code": "360481",
+ "name": "瑞昌市"
+ },
+ {
+ "code": "360482",
+ "name": "共青城市"
+ },
+ {
+ "code": "360483",
+ "name": "庐山市"
+ }
+ ]
+ },
+ {
+ "code": "360500",
+ "name": "新余市",
+ "children": [
+ {
+ "code": "360502",
+ "name": "渝水区"
+ },
+ {
+ "code": "360521",
+ "name": "分宜县"
+ }
+ ]
+ },
+ {
+ "code": "360600",
+ "name": "鹰潭市",
+ "children": [
+ {
+ "code": "360602",
+ "name": "月湖区"
+ },
+ {
+ "code": "360603",
+ "name": "余江区"
+ },
+ {
+ "code": "360681",
+ "name": "贵溪市"
+ }
+ ]
+ },
+ {
+ "code": "360700",
+ "name": "赣州市",
+ "children": [
+ {
+ "code": "360702",
+ "name": "章贡区"
+ },
+ {
+ "code": "360703",
+ "name": "南康区"
+ },
+ {
+ "code": "360704",
+ "name": "赣县区"
+ },
+ {
+ "code": "360722",
+ "name": "信丰县"
+ },
+ {
+ "code": "360723",
+ "name": "大余县"
+ },
+ {
+ "code": "360724",
+ "name": "上犹县"
+ },
+ {
+ "code": "360725",
+ "name": "崇义县"
+ },
+ {
+ "code": "360726",
+ "name": "安远县"
+ },
+ {
+ "code": "360727",
+ "name": "龙南县"
+ },
+ {
+ "code": "360728",
+ "name": "定南县"
+ },
+ {
+ "code": "360729",
+ "name": "全南县"
+ },
+ {
+ "code": "360730",
+ "name": "宁都县"
+ },
+ {
+ "code": "360731",
+ "name": "于都县"
+ },
+ {
+ "code": "360732",
+ "name": "兴国县"
+ },
+ {
+ "code": "360733",
+ "name": "会昌县"
+ },
+ {
+ "code": "360734",
+ "name": "寻乌县"
+ },
+ {
+ "code": "360735",
+ "name": "石城县"
+ },
+ {
+ "code": "360781",
+ "name": "瑞金市"
+ }
+ ]
+ },
+ {
+ "code": "360800",
+ "name": "吉安市",
+ "children": [
+ {
+ "code": "360802",
+ "name": "吉州区"
+ },
+ {
+ "code": "360803",
+ "name": "青原区"
+ },
+ {
+ "code": "360821",
+ "name": "吉安县"
+ },
+ {
+ "code": "360822",
+ "name": "吉水县"
+ },
+ {
+ "code": "360823",
+ "name": "峡江县"
+ },
+ {
+ "code": "360824",
+ "name": "新干县"
+ },
+ {
+ "code": "360825",
+ "name": "永丰县"
+ },
+ {
+ "code": "360826",
+ "name": "泰和县"
+ },
+ {
+ "code": "360827",
+ "name": "遂川县"
+ },
+ {
+ "code": "360828",
+ "name": "万安县"
+ },
+ {
+ "code": "360829",
+ "name": "安福县"
+ },
+ {
+ "code": "360830",
+ "name": "永新县"
+ },
+ {
+ "code": "360881",
+ "name": "井冈山市"
+ }
+ ]
+ },
+ {
+ "code": "360900",
+ "name": "宜春市",
+ "children": [
+ {
+ "code": "360902",
+ "name": "袁州区"
+ },
+ {
+ "code": "360921",
+ "name": "奉新县"
+ },
+ {
+ "code": "360922",
+ "name": "万载县"
+ },
+ {
+ "code": "360923",
+ "name": "上高县"
+ },
+ {
+ "code": "360924",
+ "name": "宜丰县"
+ },
+ {
+ "code": "360925",
+ "name": "靖安县"
+ },
+ {
+ "code": "360926",
+ "name": "铜鼓县"
+ },
+ {
+ "code": "360981",
+ "name": "丰城市"
+ },
+ {
+ "code": "360982",
+ "name": "樟树市"
+ },
+ {
+ "code": "360983",
+ "name": "高安市"
+ }
+ ]
+ },
+ {
+ "code": "361000",
+ "name": "抚州市",
+ "children": [
+ {
+ "code": "361002",
+ "name": "临川区"
+ },
+ {
+ "code": "361003",
+ "name": "东乡区"
+ },
+ {
+ "code": "361021",
+ "name": "南城县"
+ },
+ {
+ "code": "361022",
+ "name": "黎川县"
+ },
+ {
+ "code": "361023",
+ "name": "南丰县"
+ },
+ {
+ "code": "361024",
+ "name": "崇仁县"
+ },
+ {
+ "code": "361025",
+ "name": "乐安县"
+ },
+ {
+ "code": "361026",
+ "name": "宜黄县"
+ },
+ {
+ "code": "361027",
+ "name": "金溪县"
+ },
+ {
+ "code": "361028",
+ "name": "资溪县"
+ },
+ {
+ "code": "361030",
+ "name": "广昌县"
+ }
+ ]
+ },
+ {
+ "code": "361100",
+ "name": "上饶市",
+ "children": [
+ {
+ "code": "361102",
+ "name": "信州区"
+ },
+ {
+ "code": "361103",
+ "name": "广丰区"
+ },
+ {
+ "code": "361121",
+ "name": "上饶县"
+ },
+ {
+ "code": "361123",
+ "name": "玉山县"
+ },
+ {
+ "code": "361124",
+ "name": "铅山县"
+ },
+ {
+ "code": "361125",
+ "name": "横峰县"
+ },
+ {
+ "code": "361126",
+ "name": "弋阳县"
+ },
+ {
+ "code": "361127",
+ "name": "余干县"
+ },
+ {
+ "code": "361128",
+ "name": "鄱阳县"
+ },
+ {
+ "code": "361129",
+ "name": "万年县"
+ },
+ {
+ "code": "361130",
+ "name": "婺源县"
+ },
+ {
+ "code": "361181",
+ "name": "德兴市"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "370000",
+ "name": "山东省",
+ "children": [
+ {
+ "code": "370100",
+ "name": "济南市",
+ "children": [
+ {
+ "code": "370102",
+ "name": "历下区"
+ },
+ {
+ "code": "370103",
+ "name": "市中区"
+ },
+ {
+ "code": "370104",
+ "name": "槐荫区"
+ },
+ {
+ "code": "370105",
+ "name": "天桥区"
+ },
+ {
+ "code": "370112",
+ "name": "历城区"
+ },
+ {
+ "code": "370113",
+ "name": "长清区"
+ },
+ {
+ "code": "370114",
+ "name": "章丘区"
+ },
+ {
+ "code": "370124",
+ "name": "平阴县"
+ },
+ {
+ "code": "370125",
+ "name": "济阳县"
+ },
+ {
+ "code": "370126",
+ "name": "商河县"
+ }
+ ]
+ },
+ {
+ "code": "370200",
+ "name": "青岛市",
+ "children": [
+ {
+ "code": "370202",
+ "name": "市南区"
+ },
+ {
+ "code": "370203",
+ "name": "市北区"
+ },
+ {
+ "code": "370211",
+ "name": "黄岛区"
+ },
+ {
+ "code": "370212",
+ "name": "崂山区"
+ },
+ {
+ "code": "370213",
+ "name": "李沧区"
+ },
+ {
+ "code": "370214",
+ "name": "城阳区"
+ },
+ {
+ "code": "370215",
+ "name": "即墨区"
+ },
+ {
+ "code": "370281",
+ "name": "胶州市"
+ },
+ {
+ "code": "370283",
+ "name": "平度市"
+ },
+ {
+ "code": "370285",
+ "name": "莱西市"
+ }
+ ]
+ },
+ {
+ "code": "370300",
+ "name": "淄博市",
+ "children": [
+ {
+ "code": "370302",
+ "name": "淄川区"
+ },
+ {
+ "code": "370303",
+ "name": "张店区"
+ },
+ {
+ "code": "370304",
+ "name": "博山区"
+ },
+ {
+ "code": "370305",
+ "name": "临淄区"
+ },
+ {
+ "code": "370306",
+ "name": "周村区"
+ },
+ {
+ "code": "370321",
+ "name": "桓台县"
+ },
+ {
+ "code": "370322",
+ "name": "高青县"
+ },
+ {
+ "code": "370323",
+ "name": "沂源县"
+ }
+ ]
+ },
+ {
+ "code": "370400",
+ "name": "枣庄市",
+ "children": [
+ {
+ "code": "370402",
+ "name": "市中区"
+ },
+ {
+ "code": "370403",
+ "name": "薛城区"
+ },
+ {
+ "code": "370404",
+ "name": "峄城区"
+ },
+ {
+ "code": "370405",
+ "name": "台儿庄区"
+ },
+ {
+ "code": "370406",
+ "name": "山亭区"
+ },
+ {
+ "code": "370481",
+ "name": "滕州市"
+ }
+ ]
+ },
+ {
+ "code": "370500",
+ "name": "东营市",
+ "children": [
+ {
+ "code": "370502",
+ "name": "东营区"
+ },
+ {
+ "code": "370503",
+ "name": "河口区"
+ },
+ {
+ "code": "370505",
+ "name": "垦利区"
+ },
+ {
+ "code": "370522",
+ "name": "利津县"
+ },
+ {
+ "code": "370523",
+ "name": "广饶县"
+ }
+ ]
+ },
+ {
+ "code": "370600",
+ "name": "烟台市",
+ "children": [
+ {
+ "code": "370602",
+ "name": "芝罘区"
+ },
+ {
+ "code": "370611",
+ "name": "福山区"
+ },
+ {
+ "code": "370612",
+ "name": "牟平区"
+ },
+ {
+ "code": "370613",
+ "name": "莱山区"
+ },
+ {
+ "code": "370634",
+ "name": "长岛县"
+ },
+ {
+ "code": "370681",
+ "name": "龙口市"
+ },
+ {
+ "code": "370682",
+ "name": "莱阳市"
+ },
+ {
+ "code": "370683",
+ "name": "莱州市"
+ },
+ {
+ "code": "370684",
+ "name": "蓬莱市"
+ },
+ {
+ "code": "370685",
+ "name": "招远市"
+ },
+ {
+ "code": "370686",
+ "name": "栖霞市"
+ },
+ {
+ "code": "370687",
+ "name": "海阳市"
+ }
+ ]
+ },
+ {
+ "code": "370700",
+ "name": "潍坊市",
+ "children": [
+ {
+ "code": "370702",
+ "name": "潍城区"
+ },
+ {
+ "code": "370703",
+ "name": "寒亭区"
+ },
+ {
+ "code": "370704",
+ "name": "坊子区"
+ },
+ {
+ "code": "370705",
+ "name": "奎文区"
+ },
+ {
+ "code": "370724",
+ "name": "临朐县"
+ },
+ {
+ "code": "370725",
+ "name": "昌乐县"
+ },
+ {
+ "code": "370781",
+ "name": "青州市"
+ },
+ {
+ "code": "370782",
+ "name": "诸城市"
+ },
+ {
+ "code": "370783",
+ "name": "寿光市"
+ },
+ {
+ "code": "370784",
+ "name": "安丘市"
+ },
+ {
+ "code": "370785",
+ "name": "高密市"
+ },
+ {
+ "code": "370786",
+ "name": "昌邑市"
+ }
+ ]
+ },
+ {
+ "code": "370800",
+ "name": "济宁市",
+ "children": [
+ {
+ "code": "370811",
+ "name": "任城区"
+ },
+ {
+ "code": "370812",
+ "name": "兖州区"
+ },
+ {
+ "code": "370826",
+ "name": "微山县"
+ },
+ {
+ "code": "370827",
+ "name": "鱼台县"
+ },
+ {
+ "code": "370828",
+ "name": "金乡县"
+ },
+ {
+ "code": "370829",
+ "name": "嘉祥县"
+ },
+ {
+ "code": "370830",
+ "name": "汶上县"
+ },
+ {
+ "code": "370831",
+ "name": "泗水县"
+ },
+ {
+ "code": "370832",
+ "name": "梁山县"
+ },
+ {
+ "code": "370881",
+ "name": "曲阜市"
+ },
+ {
+ "code": "370883",
+ "name": "邹城市"
+ }
+ ]
+ },
+ {
+ "code": "370900",
+ "name": "泰安市",
+ "children": [
+ {
+ "code": "370902",
+ "name": "泰山区"
+ },
+ {
+ "code": "370911",
+ "name": "岱岳区"
+ },
+ {
+ "code": "370921",
+ "name": "宁阳县"
+ },
+ {
+ "code": "370923",
+ "name": "东平县"
+ },
+ {
+ "code": "370982",
+ "name": "新泰市"
+ },
+ {
+ "code": "370983",
+ "name": "肥城市"
+ }
+ ]
+ },
+ {
+ "code": "371000",
+ "name": "威海市",
+ "children": [
+ {
+ "code": "371002",
+ "name": "环翠区"
+ },
+ {
+ "code": "371003",
+ "name": "文登区"
+ },
+ {
+ "code": "371082",
+ "name": "荣成市"
+ },
+ {
+ "code": "371083",
+ "name": "乳山市"
+ }
+ ]
+ },
+ {
+ "code": "371100",
+ "name": "日照市",
+ "children": [
+ {
+ "code": "371102",
+ "name": "东港区"
+ },
+ {
+ "code": "371103",
+ "name": "岚山区"
+ },
+ {
+ "code": "371121",
+ "name": "五莲县"
+ },
+ {
+ "code": "371122",
+ "name": "莒县"
+ }
+ ]
+ },
+ {
+ "code": "371200",
+ "name": "莱芜市",
+ "children": [
+ {
+ "code": "371202",
+ "name": "莱城区"
+ },
+ {
+ "code": "371203",
+ "name": "钢城区"
+ }
+ ]
+ },
+ {
+ "code": "371300",
+ "name": "临沂市",
+ "children": [
+ {
+ "code": "371302",
+ "name": "兰山区"
+ },
+ {
+ "code": "371311",
+ "name": "罗庄区"
+ },
+ {
+ "code": "371312",
+ "name": "河东区"
+ },
+ {
+ "code": "371321",
+ "name": "沂南县"
+ },
+ {
+ "code": "371322",
+ "name": "郯城县"
+ },
+ {
+ "code": "371323",
+ "name": "沂水县"
+ },
+ {
+ "code": "371324",
+ "name": "兰陵县"
+ },
+ {
+ "code": "371325",
+ "name": "费县"
+ },
+ {
+ "code": "371326",
+ "name": "平邑县"
+ },
+ {
+ "code": "371327",
+ "name": "莒南县"
+ },
+ {
+ "code": "371328",
+ "name": "蒙阴县"
+ },
+ {
+ "code": "371329",
+ "name": "临沭县"
+ }
+ ]
+ },
+ {
+ "code": "371400",
+ "name": "德州市",
+ "children": [
+ {
+ "code": "371402",
+ "name": "德城区"
+ },
+ {
+ "code": "371403",
+ "name": "陵城区"
+ },
+ {
+ "code": "371422",
+ "name": "宁津县"
+ },
+ {
+ "code": "371423",
+ "name": "庆云县"
+ },
+ {
+ "code": "371424",
+ "name": "临邑县"
+ },
+ {
+ "code": "371425",
+ "name": "齐河县"
+ },
+ {
+ "code": "371426",
+ "name": "平原县"
+ },
+ {
+ "code": "371427",
+ "name": "夏津县"
+ },
+ {
+ "code": "371428",
+ "name": "武城县"
+ },
+ {
+ "code": "371481",
+ "name": "乐陵市"
+ },
+ {
+ "code": "371482",
+ "name": "禹城市"
+ }
+ ]
+ },
+ {
+ "code": "371500",
+ "name": "聊城市",
+ "children": [
+ {
+ "code": "371502",
+ "name": "东昌府区"
+ },
+ {
+ "code": "371521",
+ "name": "阳谷县"
+ },
+ {
+ "code": "371522",
+ "name": "莘县"
+ },
+ {
+ "code": "371523",
+ "name": "茌平县"
+ },
+ {
+ "code": "371524",
+ "name": "东阿县"
+ },
+ {
+ "code": "371525",
+ "name": "冠县"
+ },
+ {
+ "code": "371526",
+ "name": "高唐县"
+ },
+ {
+ "code": "371581",
+ "name": "临清市"
+ }
+ ]
+ },
+ {
+ "code": "371600",
+ "name": "滨州市",
+ "children": [
+ {
+ "code": "371602",
+ "name": "滨城区"
+ },
+ {
+ "code": "371603",
+ "name": "沾化区"
+ },
+ {
+ "code": "371621",
+ "name": "惠民县"
+ },
+ {
+ "code": "371622",
+ "name": "阳信县"
+ },
+ {
+ "code": "371623",
+ "name": "无棣县"
+ },
+ {
+ "code": "371625",
+ "name": "博兴县"
+ },
+ {
+ "code": "371626",
+ "name": "邹平县"
+ }
+ ]
+ },
+ {
+ "code": "371700",
+ "name": "菏泽市",
+ "children": [
+ {
+ "code": "371702",
+ "name": "牡丹区"
+ },
+ {
+ "code": "371703",
+ "name": "定陶区"
+ },
+ {
+ "code": "371721",
+ "name": "曹县"
+ },
+ {
+ "code": "371722",
+ "name": "单县"
+ },
+ {
+ "code": "371723",
+ "name": "成武县"
+ },
+ {
+ "code": "371724",
+ "name": "巨野县"
+ },
+ {
+ "code": "371725",
+ "name": "郓城县"
+ },
+ {
+ "code": "371726",
+ "name": "鄄城县"
+ },
+ {
+ "code": "371728",
+ "name": "东明县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "410000",
+ "name": "河南省",
+ "children": [
+ {
+ "code": "410100",
+ "name": "郑州市",
+ "children": [
+ {
+ "code": "410102",
+ "name": "中原区"
+ },
+ {
+ "code": "410103",
+ "name": "二七区"
+ },
+ {
+ "code": "410104",
+ "name": "管城回族区"
+ },
+ {
+ "code": "410105",
+ "name": "金水区"
+ },
+ {
+ "code": "410106",
+ "name": "上街区"
+ },
+ {
+ "code": "410108",
+ "name": "惠济区"
+ },
+ {
+ "code": "410122",
+ "name": "中牟县"
+ },
+ {
+ "code": "410181",
+ "name": "巩义市"
+ },
+ {
+ "code": "410182",
+ "name": "荥阳市"
+ },
+ {
+ "code": "410183",
+ "name": "新密市"
+ },
+ {
+ "code": "410184",
+ "name": "新郑市"
+ },
+ {
+ "code": "410185",
+ "name": "登封市"
+ }
+ ]
+ },
+ {
+ "code": "410200",
+ "name": "开封市",
+ "children": [
+ {
+ "code": "410202",
+ "name": "龙亭区"
+ },
+ {
+ "code": "410203",
+ "name": "顺河回族区"
+ },
+ {
+ "code": "410204",
+ "name": "鼓楼区"
+ },
+ {
+ "code": "410205",
+ "name": "禹王台区"
+ },
+ {
+ "code": "410212",
+ "name": "祥符区"
+ },
+ {
+ "code": "410221",
+ "name": "杞县"
+ },
+ {
+ "code": "410222",
+ "name": "通许县"
+ },
+ {
+ "code": "410223",
+ "name": "尉氏县"
+ },
+ {
+ "code": "410225",
+ "name": "兰考县"
+ }
+ ]
+ },
+ {
+ "code": "410300",
+ "name": "洛阳市",
+ "children": [
+ {
+ "code": "410302",
+ "name": "老城区"
+ },
+ {
+ "code": "410303",
+ "name": "西工区"
+ },
+ {
+ "code": "410304",
+ "name": "瀍河回族区"
+ },
+ {
+ "code": "410305",
+ "name": "涧西区"
+ },
+ {
+ "code": "410306",
+ "name": "吉利区"
+ },
+ {
+ "code": "410311",
+ "name": "洛龙区"
+ },
+ {
+ "code": "410322",
+ "name": "孟津县"
+ },
+ {
+ "code": "410323",
+ "name": "新安县"
+ },
+ {
+ "code": "410324",
+ "name": "栾川县"
+ },
+ {
+ "code": "410325",
+ "name": "嵩县"
+ },
+ {
+ "code": "410326",
+ "name": "汝阳县"
+ },
+ {
+ "code": "410327",
+ "name": "宜阳县"
+ },
+ {
+ "code": "410328",
+ "name": "洛宁县"
+ },
+ {
+ "code": "410329",
+ "name": "伊川县"
+ },
+ {
+ "code": "410381",
+ "name": "偃师市"
+ }
+ ]
+ },
+ {
+ "code": "410400",
+ "name": "平顶山市",
+ "children": [
+ {
+ "code": "410402",
+ "name": "新华区"
+ },
+ {
+ "code": "410403",
+ "name": "卫东区"
+ },
+ {
+ "code": "410404",
+ "name": "石龙区"
+ },
+ {
+ "code": "410411",
+ "name": "湛河区"
+ },
+ {
+ "code": "410421",
+ "name": "宝丰县"
+ },
+ {
+ "code": "410422",
+ "name": "叶县"
+ },
+ {
+ "code": "410423",
+ "name": "鲁山县"
+ },
+ {
+ "code": "410425",
+ "name": "郏县"
+ },
+ {
+ "code": "410481",
+ "name": "舞钢市"
+ },
+ {
+ "code": "410482",
+ "name": "汝州市"
+ }
+ ]
+ },
+ {
+ "code": "410500",
+ "name": "安阳市",
+ "children": [
+ {
+ "code": "410502",
+ "name": "文峰区"
+ },
+ {
+ "code": "410503",
+ "name": "北关区"
+ },
+ {
+ "code": "410505",
+ "name": "殷都区"
+ },
+ {
+ "code": "410506",
+ "name": "龙安区"
+ },
+ {
+ "code": "410522",
+ "name": "安阳县"
+ },
+ {
+ "code": "410523",
+ "name": "汤阴县"
+ },
+ {
+ "code": "410526",
+ "name": "滑县"
+ },
+ {
+ "code": "410527",
+ "name": "内黄县"
+ },
+ {
+ "code": "410581",
+ "name": "林州市"
+ }
+ ]
+ },
+ {
+ "code": "410600",
+ "name": "鹤壁市",
+ "children": [
+ {
+ "code": "410602",
+ "name": "鹤山区"
+ },
+ {
+ "code": "410603",
+ "name": "山城区"
+ },
+ {
+ "code": "410611",
+ "name": "淇滨区"
+ },
+ {
+ "code": "410621",
+ "name": "浚县"
+ },
+ {
+ "code": "410622",
+ "name": "淇县"
+ }
+ ]
+ },
+ {
+ "code": "410700",
+ "name": "新乡市",
+ "children": [
+ {
+ "code": "410702",
+ "name": "红旗区"
+ },
+ {
+ "code": "410703",
+ "name": "卫滨区"
+ },
+ {
+ "code": "410704",
+ "name": "凤泉区"
+ },
+ {
+ "code": "410711",
+ "name": "牧野区"
+ },
+ {
+ "code": "410721",
+ "name": "新乡县"
+ },
+ {
+ "code": "410724",
+ "name": "获嘉县"
+ },
+ {
+ "code": "410725",
+ "name": "原阳县"
+ },
+ {
+ "code": "410726",
+ "name": "延津县"
+ },
+ {
+ "code": "410727",
+ "name": "封丘县"
+ },
+ {
+ "code": "410728",
+ "name": "长垣县"
+ },
+ {
+ "code": "410781",
+ "name": "卫辉市"
+ },
+ {
+ "code": "410782",
+ "name": "辉县市"
+ }
+ ]
+ },
+ {
+ "code": "410800",
+ "name": "焦作市",
+ "children": [
+ {
+ "code": "410802",
+ "name": "解放区"
+ },
+ {
+ "code": "410803",
+ "name": "中站区"
+ },
+ {
+ "code": "410804",
+ "name": "马村区"
+ },
+ {
+ "code": "410811",
+ "name": "山阳区"
+ },
+ {
+ "code": "410821",
+ "name": "修武县"
+ },
+ {
+ "code": "410822",
+ "name": "博爱县"
+ },
+ {
+ "code": "410823",
+ "name": "武陟县"
+ },
+ {
+ "code": "410825",
+ "name": "温县"
+ },
+ {
+ "code": "410882",
+ "name": "沁阳市"
+ },
+ {
+ "code": "410883",
+ "name": "孟州市"
+ }
+ ]
+ },
+ {
+ "code": "410900",
+ "name": "濮阳市",
+ "children": [
+ {
+ "code": "410902",
+ "name": "华龙区"
+ },
+ {
+ "code": "410922",
+ "name": "清丰县"
+ },
+ {
+ "code": "410923",
+ "name": "南乐县"
+ },
+ {
+ "code": "410926",
+ "name": "范县"
+ },
+ {
+ "code": "410927",
+ "name": "台前县"
+ },
+ {
+ "code": "410928",
+ "name": "濮阳县"
+ }
+ ]
+ },
+ {
+ "code": "411000",
+ "name": "许昌市",
+ "children": [
+ {
+ "code": "411002",
+ "name": "魏都区"
+ },
+ {
+ "code": "411003",
+ "name": "建安区"
+ },
+ {
+ "code": "411024",
+ "name": "鄢陵县"
+ },
+ {
+ "code": "411025",
+ "name": "襄城县"
+ },
+ {
+ "code": "411081",
+ "name": "禹州市"
+ },
+ {
+ "code": "411082",
+ "name": "长葛市"
+ }
+ ]
+ },
+ {
+ "code": "411100",
+ "name": "漯河市",
+ "children": [
+ {
+ "code": "411102",
+ "name": "源汇区"
+ },
+ {
+ "code": "411103",
+ "name": "郾城区"
+ },
+ {
+ "code": "411104",
+ "name": "召陵区"
+ },
+ {
+ "code": "411121",
+ "name": "舞阳县"
+ },
+ {
+ "code": "411122",
+ "name": "临颍县"
+ }
+ ]
+ },
+ {
+ "code": "411200",
+ "name": "三门峡市",
+ "children": [
+ {
+ "code": "411202",
+ "name": "湖滨区"
+ },
+ {
+ "code": "411203",
+ "name": "陕州区"
+ },
+ {
+ "code": "411221",
+ "name": "渑池县"
+ },
+ {
+ "code": "411224",
+ "name": "卢氏县"
+ },
+ {
+ "code": "411281",
+ "name": "义马市"
+ },
+ {
+ "code": "411282",
+ "name": "灵宝市"
+ }
+ ]
+ },
+ {
+ "code": "411300",
+ "name": "南阳市",
+ "children": [
+ {
+ "code": "411302",
+ "name": "宛城区"
+ },
+ {
+ "code": "411303",
+ "name": "卧龙区"
+ },
+ {
+ "code": "411321",
+ "name": "南召县"
+ },
+ {
+ "code": "411322",
+ "name": "方城县"
+ },
+ {
+ "code": "411323",
+ "name": "西峡县"
+ },
+ {
+ "code": "411324",
+ "name": "镇平县"
+ },
+ {
+ "code": "411325",
+ "name": "内乡县"
+ },
+ {
+ "code": "411326",
+ "name": "淅川县"
+ },
+ {
+ "code": "411327",
+ "name": "社旗县"
+ },
+ {
+ "code": "411328",
+ "name": "唐河县"
+ },
+ {
+ "code": "411329",
+ "name": "新野县"
+ },
+ {
+ "code": "411330",
+ "name": "桐柏县"
+ },
+ {
+ "code": "411381",
+ "name": "邓州市"
+ }
+ ]
+ },
+ {
+ "code": "411400",
+ "name": "商丘市",
+ "children": [
+ {
+ "code": "411402",
+ "name": "梁园区"
+ },
+ {
+ "code": "411403",
+ "name": "睢阳区"
+ },
+ {
+ "code": "411421",
+ "name": "民权县"
+ },
+ {
+ "code": "411422",
+ "name": "睢县"
+ },
+ {
+ "code": "411423",
+ "name": "宁陵县"
+ },
+ {
+ "code": "411424",
+ "name": "柘城县"
+ },
+ {
+ "code": "411425",
+ "name": "虞城县"
+ },
+ {
+ "code": "411426",
+ "name": "夏邑县"
+ },
+ {
+ "code": "411481",
+ "name": "永城市"
+ }
+ ]
+ },
+ {
+ "code": "411500",
+ "name": "信阳市",
+ "children": [
+ {
+ "code": "411502",
+ "name": "浉河区"
+ },
+ {
+ "code": "411503",
+ "name": "平桥区"
+ },
+ {
+ "code": "411521",
+ "name": "罗山县"
+ },
+ {
+ "code": "411522",
+ "name": "光山县"
+ },
+ {
+ "code": "411523",
+ "name": "新县"
+ },
+ {
+ "code": "411524",
+ "name": "商城县"
+ },
+ {
+ "code": "411525",
+ "name": "固始县"
+ },
+ {
+ "code": "411526",
+ "name": "潢川县"
+ },
+ {
+ "code": "411527",
+ "name": "淮滨县"
+ },
+ {
+ "code": "411528",
+ "name": "息县"
+ }
+ ]
+ },
+ {
+ "code": "411600",
+ "name": "周口市",
+ "children": [
+ {
+ "code": "411602",
+ "name": "川汇区"
+ },
+ {
+ "code": "411621",
+ "name": "扶沟县"
+ },
+ {
+ "code": "411622",
+ "name": "西华县"
+ },
+ {
+ "code": "411623",
+ "name": "商水县"
+ },
+ {
+ "code": "411624",
+ "name": "沈丘县"
+ },
+ {
+ "code": "411625",
+ "name": "郸城县"
+ },
+ {
+ "code": "411626",
+ "name": "淮阳县"
+ },
+ {
+ "code": "411627",
+ "name": "太康县"
+ },
+ {
+ "code": "411628",
+ "name": "鹿邑县"
+ },
+ {
+ "code": "411681",
+ "name": "项城市"
+ }
+ ]
+ },
+ {
+ "code": "411700",
+ "name": "驻马店市",
+ "children": [
+ {
+ "code": "411702",
+ "name": "驿城区"
+ },
+ {
+ "code": "411721",
+ "name": "西平县"
+ },
+ {
+ "code": "411722",
+ "name": "上蔡县"
+ },
+ {
+ "code": "411723",
+ "name": "平舆县"
+ },
+ {
+ "code": "411724",
+ "name": "正阳县"
+ },
+ {
+ "code": "411725",
+ "name": "确山县"
+ },
+ {
+ "code": "411726",
+ "name": "泌阳县"
+ },
+ {
+ "code": "411727",
+ "name": "汝南县"
+ },
+ {
+ "code": "411728",
+ "name": "遂平县"
+ },
+ {
+ "code": "411729",
+ "name": "新蔡县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "420000",
+ "name": "湖北省",
+ "children": [
+ {
+ "code": "420100",
+ "name": "武汉市",
+ "children": [
+ {
+ "code": "420102",
+ "name": "江岸区"
+ },
+ {
+ "code": "420103",
+ "name": "江汉区"
+ },
+ {
+ "code": "420104",
+ "name": "硚口区"
+ },
+ {
+ "code": "420105",
+ "name": "汉阳区"
+ },
+ {
+ "code": "420106",
+ "name": "武昌区"
+ },
+ {
+ "code": "420107",
+ "name": "青山区"
+ },
+ {
+ "code": "420111",
+ "name": "洪山区"
+ },
+ {
+ "code": "420112",
+ "name": "东西湖区"
+ },
+ {
+ "code": "420113",
+ "name": "汉南区"
+ },
+ {
+ "code": "420114",
+ "name": "蔡甸区"
+ },
+ {
+ "code": "420115",
+ "name": "江夏区"
+ },
+ {
+ "code": "420116",
+ "name": "黄陂区"
+ },
+ {
+ "code": "420117",
+ "name": "新洲区"
+ }
+ ]
+ },
+ {
+ "code": "420200",
+ "name": "黄石市",
+ "children": [
+ {
+ "code": "420202",
+ "name": "黄石港区"
+ },
+ {
+ "code": "420203",
+ "name": "西塞山区"
+ },
+ {
+ "code": "420204",
+ "name": "下陆区"
+ },
+ {
+ "code": "420205",
+ "name": "铁山区"
+ },
+ {
+ "code": "420222",
+ "name": "阳新县"
+ },
+ {
+ "code": "420281",
+ "name": "大冶市"
+ }
+ ]
+ },
+ {
+ "code": "420300",
+ "name": "十堰市",
+ "children": [
+ {
+ "code": "420302",
+ "name": "茅箭区"
+ },
+ {
+ "code": "420303",
+ "name": "张湾区"
+ },
+ {
+ "code": "420304",
+ "name": "郧阳区"
+ },
+ {
+ "code": "420322",
+ "name": "郧西县"
+ },
+ {
+ "code": "420323",
+ "name": "竹山县"
+ },
+ {
+ "code": "420324",
+ "name": "竹溪县"
+ },
+ {
+ "code": "420325",
+ "name": "房县"
+ },
+ {
+ "code": "420381",
+ "name": "丹江口市"
+ }
+ ]
+ },
+ {
+ "code": "420500",
+ "name": "宜昌市",
+ "children": [
+ {
+ "code": "420502",
+ "name": "西陵区"
+ },
+ {
+ "code": "420503",
+ "name": "伍家岗区"
+ },
+ {
+ "code": "420504",
+ "name": "点军区"
+ },
+ {
+ "code": "420505",
+ "name": "猇亭区"
+ },
+ {
+ "code": "420506",
+ "name": "夷陵区"
+ },
+ {
+ "code": "420525",
+ "name": "远安县"
+ },
+ {
+ "code": "420526",
+ "name": "兴山县"
+ },
+ {
+ "code": "420527",
+ "name": "秭归县"
+ },
+ {
+ "code": "420528",
+ "name": "长阳土家族自治县"
+ },
+ {
+ "code": "420529",
+ "name": "五峰土家族自治县"
+ },
+ {
+ "code": "420581",
+ "name": "宜都市"
+ },
+ {
+ "code": "420582",
+ "name": "当阳市"
+ },
+ {
+ "code": "420583",
+ "name": "枝江市"
+ }
+ ]
+ },
+ {
+ "code": "420600",
+ "name": "襄阳市",
+ "children": [
+ {
+ "code": "420602",
+ "name": "襄城区"
+ },
+ {
+ "code": "420606",
+ "name": "樊城区"
+ },
+ {
+ "code": "420607",
+ "name": "襄州区"
+ },
+ {
+ "code": "420624",
+ "name": "南漳县"
+ },
+ {
+ "code": "420625",
+ "name": "谷城县"
+ },
+ {
+ "code": "420626",
+ "name": "保康县"
+ },
+ {
+ "code": "420682",
+ "name": "老河口市"
+ },
+ {
+ "code": "420683",
+ "name": "枣阳市"
+ },
+ {
+ "code": "420684",
+ "name": "宜城市"
+ }
+ ]
+ },
+ {
+ "code": "420700",
+ "name": "鄂州市",
+ "children": [
+ {
+ "code": "420702",
+ "name": "梁子湖区"
+ },
+ {
+ "code": "420703",
+ "name": "华容区"
+ },
+ {
+ "code": "420704",
+ "name": "鄂城区"
+ }
+ ]
+ },
+ {
+ "code": "420800",
+ "name": "荆门市",
+ "children": [
+ {
+ "code": "420802",
+ "name": "东宝区"
+ },
+ {
+ "code": "420804",
+ "name": "掇刀区"
+ },
+ {
+ "code": "420822",
+ "name": "沙洋县"
+ },
+ {
+ "code": "420881",
+ "name": "钟祥市"
+ },
+ {
+ "code": "420882",
+ "name": "京山市"
+ }
+ ]
+ },
+ {
+ "code": "420900",
+ "name": "孝感市",
+ "children": [
+ {
+ "code": "420902",
+ "name": "孝南区"
+ },
+ {
+ "code": "420921",
+ "name": "孝昌县"
+ },
+ {
+ "code": "420922",
+ "name": "大悟县"
+ },
+ {
+ "code": "420923",
+ "name": "云梦县"
+ },
+ {
+ "code": "420981",
+ "name": "应城市"
+ },
+ {
+ "code": "420982",
+ "name": "安陆市"
+ },
+ {
+ "code": "420984",
+ "name": "汉川市"
+ }
+ ]
+ },
+ {
+ "code": "421000",
+ "name": "荆州市",
+ "children": [
+ {
+ "code": "421002",
+ "name": "沙市区"
+ },
+ {
+ "code": "421003",
+ "name": "荆州区"
+ },
+ {
+ "code": "421022",
+ "name": "公安县"
+ },
+ {
+ "code": "421023",
+ "name": "监利县"
+ },
+ {
+ "code": "421024",
+ "name": "江陵县"
+ },
+ {
+ "code": "421081",
+ "name": "石首市"
+ },
+ {
+ "code": "421083",
+ "name": "洪湖市"
+ },
+ {
+ "code": "421087",
+ "name": "松滋市"
+ }
+ ]
+ },
+ {
+ "code": "421100",
+ "name": "黄冈市",
+ "children": [
+ {
+ "code": "421102",
+ "name": "黄州区"
+ },
+ {
+ "code": "421121",
+ "name": "团风县"
+ },
+ {
+ "code": "421122",
+ "name": "红安县"
+ },
+ {
+ "code": "421123",
+ "name": "罗田县"
+ },
+ {
+ "code": "421124",
+ "name": "英山县"
+ },
+ {
+ "code": "421125",
+ "name": "浠水县"
+ },
+ {
+ "code": "421126",
+ "name": "蕲春县"
+ },
+ {
+ "code": "421127",
+ "name": "黄梅县"
+ },
+ {
+ "code": "421181",
+ "name": "麻城市"
+ },
+ {
+ "code": "421182",
+ "name": "武穴市"
+ }
+ ]
+ },
+ {
+ "code": "421200",
+ "name": "咸宁市",
+ "children": [
+ {
+ "code": "421202",
+ "name": "咸安区"
+ },
+ {
+ "code": "421221",
+ "name": "嘉鱼县"
+ },
+ {
+ "code": "421222",
+ "name": "通城县"
+ },
+ {
+ "code": "421223",
+ "name": "崇阳县"
+ },
+ {
+ "code": "421224",
+ "name": "通山县"
+ },
+ {
+ "code": "421281",
+ "name": "赤壁市"
+ }
+ ]
+ },
+ {
+ "code": "421300",
+ "name": "随州市",
+ "children": [
+ {
+ "code": "421303",
+ "name": "曾都区"
+ },
+ {
+ "code": "421321",
+ "name": "随县"
+ },
+ {
+ "code": "421381",
+ "name": "广水市"
+ }
+ ]
+ },
+ {
+ "code": "422800",
+ "name": "恩施土家族苗族自治州",
+ "children": [
+ {
+ "code": "422801",
+ "name": "恩施市"
+ },
+ {
+ "code": "422802",
+ "name": "利川市"
+ },
+ {
+ "code": "422822",
+ "name": "建始县"
+ },
+ {
+ "code": "422823",
+ "name": "巴东县"
+ },
+ {
+ "code": "422825",
+ "name": "宣恩县"
+ },
+ {
+ "code": "422826",
+ "name": "咸丰县"
+ },
+ {
+ "code": "422827",
+ "name": "来凤县"
+ },
+ {
+ "code": "422828",
+ "name": "鹤峰县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "430000",
+ "name": "湖南省",
+ "children": [
+ {
+ "code": "430100",
+ "name": "长沙市",
+ "children": [
+ {
+ "code": "430102",
+ "name": "芙蓉区"
+ },
+ {
+ "code": "430103",
+ "name": "天心区"
+ },
+ {
+ "code": "430104",
+ "name": "岳麓区"
+ },
+ {
+ "code": "430105",
+ "name": "开福区"
+ },
+ {
+ "code": "430111",
+ "name": "雨花区"
+ },
+ {
+ "code": "430112",
+ "name": "望城区"
+ },
+ {
+ "code": "430121",
+ "name": "长沙县"
+ },
+ {
+ "code": "430181",
+ "name": "浏阳市"
+ },
+ {
+ "code": "430182",
+ "name": "宁乡市"
+ }
+ ]
+ },
+ {
+ "code": "430200",
+ "name": "株洲市",
+ "children": [
+ {
+ "code": "430202",
+ "name": "荷塘区"
+ },
+ {
+ "code": "430203",
+ "name": "芦淞区"
+ },
+ {
+ "code": "430204",
+ "name": "石峰区"
+ },
+ {
+ "code": "430211",
+ "name": "天元区"
+ },
+ {
+ "code": "430212",
+ "name": "渌口区"
+ },
+ {
+ "code": "430223",
+ "name": "攸县"
+ },
+ {
+ "code": "430224",
+ "name": "茶陵县"
+ },
+ {
+ "code": "430225",
+ "name": "炎陵县"
+ },
+ {
+ "code": "430281",
+ "name": "醴陵市"
+ }
+ ]
+ },
+ {
+ "code": "430300",
+ "name": "湘潭市",
+ "children": [
+ {
+ "code": "430302",
+ "name": "雨湖区"
+ },
+ {
+ "code": "430304",
+ "name": "岳塘区"
+ },
+ {
+ "code": "430321",
+ "name": "湘潭县"
+ },
+ {
+ "code": "430381",
+ "name": "湘乡市"
+ },
+ {
+ "code": "430382",
+ "name": "韶山市"
+ }
+ ]
+ },
+ {
+ "code": "430400",
+ "name": "衡阳市",
+ "children": [
+ {
+ "code": "430405",
+ "name": "珠晖区"
+ },
+ {
+ "code": "430406",
+ "name": "雁峰区"
+ },
+ {
+ "code": "430407",
+ "name": "石鼓区"
+ },
+ {
+ "code": "430408",
+ "name": "蒸湘区"
+ },
+ {
+ "code": "430412",
+ "name": "南岳区"
+ },
+ {
+ "code": "430421",
+ "name": "衡阳县"
+ },
+ {
+ "code": "430422",
+ "name": "衡南县"
+ },
+ {
+ "code": "430423",
+ "name": "衡山县"
+ },
+ {
+ "code": "430424",
+ "name": "衡东县"
+ },
+ {
+ "code": "430426",
+ "name": "祁东县"
+ },
+ {
+ "code": "430481",
+ "name": "耒阳市"
+ },
+ {
+ "code": "430482",
+ "name": "常宁市"
+ }
+ ]
+ },
+ {
+ "code": "430500",
+ "name": "邵阳市",
+ "children": [
+ {
+ "code": "430502",
+ "name": "双清区"
+ },
+ {
+ "code": "430503",
+ "name": "大祥区"
+ },
+ {
+ "code": "430511",
+ "name": "北塔区"
+ },
+ {
+ "code": "430521",
+ "name": "邵东县"
+ },
+ {
+ "code": "430522",
+ "name": "新邵县"
+ },
+ {
+ "code": "430523",
+ "name": "邵阳县"
+ },
+ {
+ "code": "430524",
+ "name": "隆回县"
+ },
+ {
+ "code": "430525",
+ "name": "洞口县"
+ },
+ {
+ "code": "430527",
+ "name": "绥宁县"
+ },
+ {
+ "code": "430528",
+ "name": "新宁县"
+ },
+ {
+ "code": "430529",
+ "name": "城步苗族自治县"
+ },
+ {
+ "code": "430581",
+ "name": "武冈市"
+ }
+ ]
+ },
+ {
+ "code": "430600",
+ "name": "岳阳市",
+ "children": [
+ {
+ "code": "430602",
+ "name": "岳阳楼区"
+ },
+ {
+ "code": "430603",
+ "name": "云溪区"
+ },
+ {
+ "code": "430611",
+ "name": "君山区"
+ },
+ {
+ "code": "430621",
+ "name": "岳阳县"
+ },
+ {
+ "code": "430623",
+ "name": "华容县"
+ },
+ {
+ "code": "430624",
+ "name": "湘阴县"
+ },
+ {
+ "code": "430626",
+ "name": "平江县"
+ },
+ {
+ "code": "430681",
+ "name": "汨罗市"
+ },
+ {
+ "code": "430682",
+ "name": "临湘市"
+ }
+ ]
+ },
+ {
+ "code": "430700",
+ "name": "常德市",
+ "children": [
+ {
+ "code": "430702",
+ "name": "武陵区"
+ },
+ {
+ "code": "430703",
+ "name": "鼎城区"
+ },
+ {
+ "code": "430721",
+ "name": "安乡县"
+ },
+ {
+ "code": "430722",
+ "name": "汉寿县"
+ },
+ {
+ "code": "430723",
+ "name": "澧县"
+ },
+ {
+ "code": "430724",
+ "name": "临澧县"
+ },
+ {
+ "code": "430725",
+ "name": "桃源县"
+ },
+ {
+ "code": "430726",
+ "name": "石门县"
+ },
+ {
+ "code": "430781",
+ "name": "津市市"
+ }
+ ]
+ },
+ {
+ "code": "430800",
+ "name": "张家界市",
+ "children": [
+ {
+ "code": "430802",
+ "name": "永定区"
+ },
+ {
+ "code": "430811",
+ "name": "武陵源区"
+ },
+ {
+ "code": "430821",
+ "name": "慈利县"
+ },
+ {
+ "code": "430822",
+ "name": "桑植县"
+ }
+ ]
+ },
+ {
+ "code": "430900",
+ "name": "益阳市",
+ "children": [
+ {
+ "code": "430902",
+ "name": "资阳区"
+ },
+ {
+ "code": "430903",
+ "name": "赫山区"
+ },
+ {
+ "code": "430921",
+ "name": "南县"
+ },
+ {
+ "code": "430922",
+ "name": "桃江县"
+ },
+ {
+ "code": "430923",
+ "name": "安化县"
+ },
+ {
+ "code": "430981",
+ "name": "沅江市"
+ }
+ ]
+ },
+ {
+ "code": "431000",
+ "name": "郴州市",
+ "children": [
+ {
+ "code": "431002",
+ "name": "北湖区"
+ },
+ {
+ "code": "431003",
+ "name": "苏仙区"
+ },
+ {
+ "code": "431021",
+ "name": "桂阳县"
+ },
+ {
+ "code": "431022",
+ "name": "宜章县"
+ },
+ {
+ "code": "431023",
+ "name": "永兴县"
+ },
+ {
+ "code": "431024",
+ "name": "嘉禾县"
+ },
+ {
+ "code": "431025",
+ "name": "临武县"
+ },
+ {
+ "code": "431026",
+ "name": "汝城县"
+ },
+ {
+ "code": "431027",
+ "name": "桂东县"
+ },
+ {
+ "code": "431028",
+ "name": "安仁县"
+ },
+ {
+ "code": "431081",
+ "name": "资兴市"
+ }
+ ]
+ },
+ {
+ "code": "431100",
+ "name": "永州市",
+ "children": [
+ {
+ "code": "431102",
+ "name": "零陵区"
+ },
+ {
+ "code": "431103",
+ "name": "冷水滩区"
+ },
+ {
+ "code": "431121",
+ "name": "祁阳县"
+ },
+ {
+ "code": "431122",
+ "name": "东安县"
+ },
+ {
+ "code": "431123",
+ "name": "双牌县"
+ },
+ {
+ "code": "431124",
+ "name": "道县"
+ },
+ {
+ "code": "431125",
+ "name": "江永县"
+ },
+ {
+ "code": "431126",
+ "name": "宁远县"
+ },
+ {
+ "code": "431127",
+ "name": "蓝山县"
+ },
+ {
+ "code": "431128",
+ "name": "新田县"
+ },
+ {
+ "code": "431129",
+ "name": "江华瑶族自治县"
+ }
+ ]
+ },
+ {
+ "code": "431200",
+ "name": "怀化市",
+ "children": [
+ {
+ "code": "431202",
+ "name": "鹤城区"
+ },
+ {
+ "code": "431221",
+ "name": "中方县"
+ },
+ {
+ "code": "431222",
+ "name": "沅陵县"
+ },
+ {
+ "code": "431223",
+ "name": "辰溪县"
+ },
+ {
+ "code": "431224",
+ "name": "溆浦县"
+ },
+ {
+ "code": "431225",
+ "name": "会同县"
+ },
+ {
+ "code": "431226",
+ "name": "麻阳苗族自治县"
+ },
+ {
+ "code": "431227",
+ "name": "新晃侗族自治县"
+ },
+ {
+ "code": "431228",
+ "name": "芷江侗族自治县"
+ },
+ {
+ "code": "431229",
+ "name": "靖州苗族侗族自治县"
+ },
+ {
+ "code": "431230",
+ "name": "通道侗族自治县"
+ },
+ {
+ "code": "431281",
+ "name": "洪江市"
+ }
+ ]
+ },
+ {
+ "code": "431300",
+ "name": "娄底市",
+ "children": [
+ {
+ "code": "431302",
+ "name": "娄星区"
+ },
+ {
+ "code": "431321",
+ "name": "双峰县"
+ },
+ {
+ "code": "431322",
+ "name": "新化县"
+ },
+ {
+ "code": "431381",
+ "name": "冷水江市"
+ },
+ {
+ "code": "431382",
+ "name": "涟源市"
+ }
+ ]
+ },
+ {
+ "code": "433100",
+ "name": "湘西土家族苗族自治州",
+ "children": [
+ {
+ "code": "433101",
+ "name": "吉首市"
+ },
+ {
+ "code": "433122",
+ "name": "泸溪县"
+ },
+ {
+ "code": "433123",
+ "name": "凤凰县"
+ },
+ {
+ "code": "433124",
+ "name": "花垣县"
+ },
+ {
+ "code": "433125",
+ "name": "保靖县"
+ },
+ {
+ "code": "433126",
+ "name": "古丈县"
+ },
+ {
+ "code": "433127",
+ "name": "永顺县"
+ },
+ {
+ "code": "433130",
+ "name": "龙山县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "440000",
+ "name": "广东省",
+ "children": [
+ {
+ "code": "440100",
+ "name": "广州市",
+ "children": [
+ {
+ "code": "440103",
+ "name": "荔湾区"
+ },
+ {
+ "code": "440104",
+ "name": "越秀区"
+ },
+ {
+ "code": "440105",
+ "name": "海珠区"
+ },
+ {
+ "code": "440106",
+ "name": "天河区"
+ },
+ {
+ "code": "440111",
+ "name": "白云区"
+ },
+ {
+ "code": "440112",
+ "name": "黄埔区"
+ },
+ {
+ "code": "440113",
+ "name": "番禺区"
+ },
+ {
+ "code": "440114",
+ "name": "花都区"
+ },
+ {
+ "code": "440115",
+ "name": "南沙区"
+ },
+ {
+ "code": "440117",
+ "name": "从化区"
+ },
+ {
+ "code": "440118",
+ "name": "增城区"
+ }
+ ]
+ },
+ {
+ "code": "440200",
+ "name": "韶关市",
+ "children": [
+ {
+ "code": "440203",
+ "name": "武江区"
+ },
+ {
+ "code": "440204",
+ "name": "浈江区"
+ },
+ {
+ "code": "440205",
+ "name": "曲江区"
+ },
+ {
+ "code": "440222",
+ "name": "始兴县"
+ },
+ {
+ "code": "440224",
+ "name": "仁化县"
+ },
+ {
+ "code": "440229",
+ "name": "翁源县"
+ },
+ {
+ "code": "440232",
+ "name": "乳源瑶族自治县"
+ },
+ {
+ "code": "440233",
+ "name": "新丰县"
+ },
+ {
+ "code": "440281",
+ "name": "乐昌市"
+ },
+ {
+ "code": "440282",
+ "name": "南雄市"
+ }
+ ]
+ },
+ {
+ "code": "440300",
+ "name": "深圳市",
+ "children": [
+ {
+ "code": "440303",
+ "name": "罗湖区"
+ },
+ {
+ "code": "440304",
+ "name": "福田区"
+ },
+ {
+ "code": "440305",
+ "name": "南山区"
+ },
+ {
+ "code": "440306",
+ "name": "宝安区"
+ },
+ {
+ "code": "440307",
+ "name": "龙岗区"
+ },
+ {
+ "code": "440308",
+ "name": "盐田区"
+ },
+ {
+ "code": "440309",
+ "name": "龙华区"
+ },
+ {
+ "code": "440310",
+ "name": "坪山区"
+ },
+ {
+ "code": "440311",
+ "name": "光明区"
+ }
+ ]
+ },
+ {
+ "code": "440400",
+ "name": "珠海市",
+ "children": [
+ {
+ "code": "440402",
+ "name": "香洲区"
+ },
+ {
+ "code": "440403",
+ "name": "斗门区"
+ },
+ {
+ "code": "440404",
+ "name": "金湾区"
+ }
+ ]
+ },
+ {
+ "code": "440500",
+ "name": "汕头市",
+ "children": [
+ {
+ "code": "440507",
+ "name": "龙湖区"
+ },
+ {
+ "code": "440511",
+ "name": "金平区"
+ },
+ {
+ "code": "440512",
+ "name": "濠江区"
+ },
+ {
+ "code": "440513",
+ "name": "潮阳区"
+ },
+ {
+ "code": "440514",
+ "name": "潮南区"
+ },
+ {
+ "code": "440515",
+ "name": "澄海区"
+ },
+ {
+ "code": "440523",
+ "name": "南澳县"
+ }
+ ]
+ },
+ {
+ "code": "440600",
+ "name": "佛山市",
+ "children": [
+ {
+ "code": "440604",
+ "name": "禅城区"
+ },
+ {
+ "code": "440605",
+ "name": "南海区"
+ },
+ {
+ "code": "440606",
+ "name": "顺德区"
+ },
+ {
+ "code": "440607",
+ "name": "三水区"
+ },
+ {
+ "code": "440608",
+ "name": "高明区"
+ }
+ ]
+ },
+ {
+ "code": "440700",
+ "name": "江门市",
+ "children": [
+ {
+ "code": "440703",
+ "name": "蓬江区"
+ },
+ {
+ "code": "440704",
+ "name": "江海区"
+ },
+ {
+ "code": "440705",
+ "name": "新会区"
+ },
+ {
+ "code": "440781",
+ "name": "台山市"
+ },
+ {
+ "code": "440783",
+ "name": "开平市"
+ },
+ {
+ "code": "440784",
+ "name": "鹤山市"
+ },
+ {
+ "code": "440785",
+ "name": "恩平市"
+ }
+ ]
+ },
+ {
+ "code": "440800",
+ "name": "湛江市",
+ "children": [
+ {
+ "code": "440802",
+ "name": "赤坎区"
+ },
+ {
+ "code": "440803",
+ "name": "霞山区"
+ },
+ {
+ "code": "440804",
+ "name": "坡头区"
+ },
+ {
+ "code": "440811",
+ "name": "麻章区"
+ },
+ {
+ "code": "440823",
+ "name": "遂溪县"
+ },
+ {
+ "code": "440825",
+ "name": "徐闻县"
+ },
+ {
+ "code": "440881",
+ "name": "廉江市"
+ },
+ {
+ "code": "440882",
+ "name": "雷州市"
+ },
+ {
+ "code": "440883",
+ "name": "吴川市"
+ }
+ ]
+ },
+ {
+ "code": "440900",
+ "name": "茂名市",
+ "children": [
+ {
+ "code": "440902",
+ "name": "茂南区"
+ },
+ {
+ "code": "440904",
+ "name": "电白区"
+ },
+ {
+ "code": "440981",
+ "name": "高州市"
+ },
+ {
+ "code": "440982",
+ "name": "化州市"
+ },
+ {
+ "code": "440983",
+ "name": "信宜市"
+ }
+ ]
+ },
+ {
+ "code": "441200",
+ "name": "肇庆市",
+ "children": [
+ {
+ "code": "441202",
+ "name": "端州区"
+ },
+ {
+ "code": "441203",
+ "name": "鼎湖区"
+ },
+ {
+ "code": "441204",
+ "name": "高要区"
+ },
+ {
+ "code": "441223",
+ "name": "广宁县"
+ },
+ {
+ "code": "441224",
+ "name": "怀集县"
+ },
+ {
+ "code": "441225",
+ "name": "封开县"
+ },
+ {
+ "code": "441226",
+ "name": "德庆县"
+ },
+ {
+ "code": "441284",
+ "name": "四会市"
+ }
+ ]
+ },
+ {
+ "code": "441300",
+ "name": "惠州市",
+ "children": [
+ {
+ "code": "441302",
+ "name": "惠城区"
+ },
+ {
+ "code": "441303",
+ "name": "惠阳区"
+ },
+ {
+ "code": "441322",
+ "name": "博罗县"
+ },
+ {
+ "code": "441323",
+ "name": "惠东县"
+ },
+ {
+ "code": "441324",
+ "name": "龙门县"
+ }
+ ]
+ },
+ {
+ "code": "441400",
+ "name": "梅州市",
+ "children": [
+ {
+ "code": "441402",
+ "name": "梅江区"
+ },
+ {
+ "code": "441403",
+ "name": "梅县区"
+ },
+ {
+ "code": "441422",
+ "name": "大埔县"
+ },
+ {
+ "code": "441423",
+ "name": "丰顺县"
+ },
+ {
+ "code": "441424",
+ "name": "五华县"
+ },
+ {
+ "code": "441426",
+ "name": "平远县"
+ },
+ {
+ "code": "441427",
+ "name": "蕉岭县"
+ },
+ {
+ "code": "441481",
+ "name": "兴宁市"
+ }
+ ]
+ },
+ {
+ "code": "441500",
+ "name": "汕尾市",
+ "children": [
+ {
+ "code": "441502",
+ "name": "城区"
+ },
+ {
+ "code": "441521",
+ "name": "海丰县"
+ },
+ {
+ "code": "441523",
+ "name": "陆河县"
+ },
+ {
+ "code": "441581",
+ "name": "陆丰市"
+ }
+ ]
+ },
+ {
+ "code": "441600",
+ "name": "河源市",
+ "children": [
+ {
+ "code": "441602",
+ "name": "源城区"
+ },
+ {
+ "code": "441621",
+ "name": "紫金县"
+ },
+ {
+ "code": "441622",
+ "name": "龙川县"
+ },
+ {
+ "code": "441623",
+ "name": "连平县"
+ },
+ {
+ "code": "441624",
+ "name": "和平县"
+ },
+ {
+ "code": "441625",
+ "name": "东源县"
+ }
+ ]
+ },
+ {
+ "code": "441700",
+ "name": "阳江市",
+ "children": [
+ {
+ "code": "441702",
+ "name": "江城区"
+ },
+ {
+ "code": "441704",
+ "name": "阳东区"
+ },
+ {
+ "code": "441721",
+ "name": "阳西县"
+ },
+ {
+ "code": "441781",
+ "name": "阳春市"
+ }
+ ]
+ },
+ {
+ "code": "441800",
+ "name": "清远市",
+ "children": [
+ {
+ "code": "441802",
+ "name": "清城区"
+ },
+ {
+ "code": "441803",
+ "name": "清新区"
+ },
+ {
+ "code": "441821",
+ "name": "佛冈县"
+ },
+ {
+ "code": "441823",
+ "name": "阳山县"
+ },
+ {
+ "code": "441825",
+ "name": "连山壮族瑶族自治县"
+ },
+ {
+ "code": "441826",
+ "name": "连南瑶族自治县"
+ },
+ {
+ "code": "441881",
+ "name": "英德市"
+ },
+ {
+ "code": "441882",
+ "name": "连州市"
+ }
+ ]
+ },
+ {
+ "code": "441900",
+ "name": "东莞市",
+ "children": []
+ },
+ {
+ "code": "442000",
+ "name": "中山市",
+ "children": []
+ },
+ {
+ "code": "445100",
+ "name": "潮州市",
+ "children": [
+ {
+ "code": "445102",
+ "name": "湘桥区"
+ },
+ {
+ "code": "445103",
+ "name": "潮安区"
+ },
+ {
+ "code": "445122",
+ "name": "饶平县"
+ }
+ ]
+ },
+ {
+ "code": "445200",
+ "name": "揭阳市",
+ "children": [
+ {
+ "code": "445202",
+ "name": "榕城区"
+ },
+ {
+ "code": "445203",
+ "name": "揭东区"
+ },
+ {
+ "code": "445222",
+ "name": "揭西县"
+ },
+ {
+ "code": "445224",
+ "name": "惠来县"
+ },
+ {
+ "code": "445281",
+ "name": "普宁市"
+ }
+ ]
+ },
+ {
+ "code": "445300",
+ "name": "云浮市",
+ "children": [
+ {
+ "code": "445302",
+ "name": "云城区"
+ },
+ {
+ "code": "445303",
+ "name": "云安区"
+ },
+ {
+ "code": "445321",
+ "name": "新兴县"
+ },
+ {
+ "code": "445322",
+ "name": "郁南县"
+ },
+ {
+ "code": "445381",
+ "name": "罗定市"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "450000",
+ "name": "广西壮族自治区",
+ "children": [
+ {
+ "code": "450100",
+ "name": "南宁市",
+ "children": [
+ {
+ "code": "450102",
+ "name": "兴宁区"
+ },
+ {
+ "code": "450103",
+ "name": "青秀区"
+ },
+ {
+ "code": "450105",
+ "name": "江南区"
+ },
+ {
+ "code": "450107",
+ "name": "西乡塘区"
+ },
+ {
+ "code": "450108",
+ "name": "良庆区"
+ },
+ {
+ "code": "450109",
+ "name": "邕宁区"
+ },
+ {
+ "code": "450110",
+ "name": "武鸣区"
+ },
+ {
+ "code": "450123",
+ "name": "隆安县"
+ },
+ {
+ "code": "450124",
+ "name": "马山县"
+ },
+ {
+ "code": "450125",
+ "name": "上林县"
+ },
+ {
+ "code": "450126",
+ "name": "宾阳县"
+ },
+ {
+ "code": "450127",
+ "name": "横县"
+ }
+ ]
+ },
+ {
+ "code": "450200",
+ "name": "柳州市",
+ "children": [
+ {
+ "code": "450202",
+ "name": "城中区"
+ },
+ {
+ "code": "450203",
+ "name": "鱼峰区"
+ },
+ {
+ "code": "450204",
+ "name": "柳南区"
+ },
+ {
+ "code": "450205",
+ "name": "柳北区"
+ },
+ {
+ "code": "450206",
+ "name": "柳江区"
+ },
+ {
+ "code": "450222",
+ "name": "柳城县"
+ },
+ {
+ "code": "450223",
+ "name": "鹿寨县"
+ },
+ {
+ "code": "450224",
+ "name": "融安县"
+ },
+ {
+ "code": "450225",
+ "name": "融水苗族自治县"
+ },
+ {
+ "code": "450226",
+ "name": "三江侗族自治县"
+ }
+ ]
+ },
+ {
+ "code": "450300",
+ "name": "桂林市",
+ "children": [
+ {
+ "code": "450302",
+ "name": "秀峰区"
+ },
+ {
+ "code": "450303",
+ "name": "叠彩区"
+ },
+ {
+ "code": "450304",
+ "name": "象山区"
+ },
+ {
+ "code": "450305",
+ "name": "七星区"
+ },
+ {
+ "code": "450311",
+ "name": "雁山区"
+ },
+ {
+ "code": "450312",
+ "name": "临桂区"
+ },
+ {
+ "code": "450321",
+ "name": "阳朔县"
+ },
+ {
+ "code": "450323",
+ "name": "灵川县"
+ },
+ {
+ "code": "450324",
+ "name": "全州县"
+ },
+ {
+ "code": "450325",
+ "name": "兴安县"
+ },
+ {
+ "code": "450326",
+ "name": "永福县"
+ },
+ {
+ "code": "450327",
+ "name": "灌阳县"
+ },
+ {
+ "code": "450328",
+ "name": "龙胜各族自治县"
+ },
+ {
+ "code": "450329",
+ "name": "资源县"
+ },
+ {
+ "code": "450330",
+ "name": "平乐县"
+ },
+ {
+ "code": "450381",
+ "name": "荔浦市"
+ },
+ {
+ "code": "450332",
+ "name": "恭城瑶族自治县"
+ }
+ ]
+ },
+ {
+ "code": "450400",
+ "name": "梧州市",
+ "children": [
+ {
+ "code": "450403",
+ "name": "万秀区"
+ },
+ {
+ "code": "450405",
+ "name": "长洲区"
+ },
+ {
+ "code": "450406",
+ "name": "龙圩区"
+ },
+ {
+ "code": "450421",
+ "name": "苍梧县"
+ },
+ {
+ "code": "450422",
+ "name": "藤县"
+ },
+ {
+ "code": "450423",
+ "name": "蒙山县"
+ },
+ {
+ "code": "450481",
+ "name": "岑溪市"
+ }
+ ]
+ },
+ {
+ "code": "450500",
+ "name": "北海市",
+ "children": [
+ {
+ "code": "450502",
+ "name": "海城区"
+ },
+ {
+ "code": "450503",
+ "name": "银海区"
+ },
+ {
+ "code": "450512",
+ "name": "铁山港区"
+ },
+ {
+ "code": "450521",
+ "name": "合浦县"
+ }
+ ]
+ },
+ {
+ "code": "450600",
+ "name": "防城港市",
+ "children": [
+ {
+ "code": "450602",
+ "name": "港口区"
+ },
+ {
+ "code": "450603",
+ "name": "防城区"
+ },
+ {
+ "code": "450621",
+ "name": "上思县"
+ },
+ {
+ "code": "450681",
+ "name": "东兴市"
+ }
+ ]
+ },
+ {
+ "code": "450700",
+ "name": "钦州市",
+ "children": [
+ {
+ "code": "450702",
+ "name": "钦南区"
+ },
+ {
+ "code": "450703",
+ "name": "钦北区"
+ },
+ {
+ "code": "450721",
+ "name": "灵山县"
+ },
+ {
+ "code": "450722",
+ "name": "浦北县"
+ }
+ ]
+ },
+ {
+ "code": "450800",
+ "name": "贵港市",
+ "children": [
+ {
+ "code": "450802",
+ "name": "港北区"
+ },
+ {
+ "code": "450803",
+ "name": "港南区"
+ },
+ {
+ "code": "450804",
+ "name": "覃塘区"
+ },
+ {
+ "code": "450821",
+ "name": "平南县"
+ },
+ {
+ "code": "450881",
+ "name": "桂平市"
+ }
+ ]
+ },
+ {
+ "code": "450900",
+ "name": "玉林市",
+ "children": [
+ {
+ "code": "450902",
+ "name": "玉州区"
+ },
+ {
+ "code": "450903",
+ "name": "福绵区"
+ },
+ {
+ "code": "450921",
+ "name": "容县"
+ },
+ {
+ "code": "450922",
+ "name": "陆川县"
+ },
+ {
+ "code": "450923",
+ "name": "博白县"
+ },
+ {
+ "code": "450924",
+ "name": "兴业县"
+ },
+ {
+ "code": "450981",
+ "name": "北流市"
+ }
+ ]
+ },
+ {
+ "code": "451000",
+ "name": "百色市",
+ "children": [
+ {
+ "code": "451002",
+ "name": "右江区"
+ },
+ {
+ "code": "451021",
+ "name": "田阳县"
+ },
+ {
+ "code": "451022",
+ "name": "田东县"
+ },
+ {
+ "code": "451023",
+ "name": "平果县"
+ },
+ {
+ "code": "451024",
+ "name": "德保县"
+ },
+ {
+ "code": "451026",
+ "name": "那坡县"
+ },
+ {
+ "code": "451027",
+ "name": "凌云县"
+ },
+ {
+ "code": "451028",
+ "name": "乐业县"
+ },
+ {
+ "code": "451029",
+ "name": "田林县"
+ },
+ {
+ "code": "451030",
+ "name": "西林县"
+ },
+ {
+ "code": "451031",
+ "name": "隆林各族自治县"
+ },
+ {
+ "code": "451081",
+ "name": "靖西市"
+ }
+ ]
+ },
+ {
+ "code": "451100",
+ "name": "贺州市",
+ "children": [
+ {
+ "code": "451102",
+ "name": "八步区"
+ },
+ {
+ "code": "451103",
+ "name": "平桂区"
+ },
+ {
+ "code": "451121",
+ "name": "昭平县"
+ },
+ {
+ "code": "451122",
+ "name": "钟山县"
+ },
+ {
+ "code": "451123",
+ "name": "富川瑶族自治县"
+ }
+ ]
+ },
+ {
+ "code": "451200",
+ "name": "河池市",
+ "children": [
+ {
+ "code": "451202",
+ "name": "金城江区"
+ },
+ {
+ "code": "451203",
+ "name": "宜州区"
+ },
+ {
+ "code": "451221",
+ "name": "南丹县"
+ },
+ {
+ "code": "451222",
+ "name": "天峨县"
+ },
+ {
+ "code": "451223",
+ "name": "凤山县"
+ },
+ {
+ "code": "451224",
+ "name": "东兰县"
+ },
+ {
+ "code": "451225",
+ "name": "罗城仫佬族自治县"
+ },
+ {
+ "code": "451226",
+ "name": "环江毛南族自治县"
+ },
+ {
+ "code": "451227",
+ "name": "巴马瑶族自治县"
+ },
+ {
+ "code": "451228",
+ "name": "都安瑶族自治县"
+ },
+ {
+ "code": "451229",
+ "name": "大化瑶族自治县"
+ }
+ ]
+ },
+ {
+ "code": "451300",
+ "name": "来宾市",
+ "children": [
+ {
+ "code": "451302",
+ "name": "兴宾区"
+ },
+ {
+ "code": "451321",
+ "name": "忻城县"
+ },
+ {
+ "code": "451322",
+ "name": "象州县"
+ },
+ {
+ "code": "451323",
+ "name": "武宣县"
+ },
+ {
+ "code": "451324",
+ "name": "金秀瑶族自治县"
+ },
+ {
+ "code": "451381",
+ "name": "合山市"
+ }
+ ]
+ },
+ {
+ "code": "451400",
+ "name": "崇左市",
+ "children": [
+ {
+ "code": "451402",
+ "name": "江州区"
+ },
+ {
+ "code": "451421",
+ "name": "扶绥县"
+ },
+ {
+ "code": "451422",
+ "name": "宁明县"
+ },
+ {
+ "code": "451423",
+ "name": "龙州县"
+ },
+ {
+ "code": "451424",
+ "name": "大新县"
+ },
+ {
+ "code": "451425",
+ "name": "天等县"
+ },
+ {
+ "code": "451481",
+ "name": "凭祥市"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "460000",
+ "name": "海南省",
+ "children": [
+ {
+ "code": "460100",
+ "name": "海口市",
+ "children": [
+ {
+ "code": "460105",
+ "name": "秀英区"
+ },
+ {
+ "code": "460106",
+ "name": "龙华区"
+ },
+ {
+ "code": "460107",
+ "name": "琼山区"
+ },
+ {
+ "code": "460108",
+ "name": "美兰区"
+ }
+ ]
+ },
+ {
+ "code": "460200",
+ "name": "三亚市",
+ "children": [
+ {
+ "code": "460202",
+ "name": "海棠区"
+ },
+ {
+ "code": "460203",
+ "name": "吉阳区"
+ },
+ {
+ "code": "460204",
+ "name": "天涯区"
+ },
+ {
+ "code": "460205",
+ "name": "崖州区"
+ }
+ ]
+ },
+ {
+ "code": "460300",
+ "name": "三沙市",
+ "children": []
+ },
+ {
+ "code": "460400",
+ "name": "儋州市",
+ "children": []
+ }
+ ]
+ },
+ {
+ "code": "500000",
+ "name": "重庆市",
+ "children": [
+ {
+ "code": "500000",
+ "name": "重庆市",
+ "children": [
+ {
+ "code": "500101",
+ "name": "万州区"
+ },
+ {
+ "code": "500102",
+ "name": "涪陵区"
+ },
+ {
+ "code": "500103",
+ "name": "渝中区"
+ },
+ {
+ "code": "500104",
+ "name": "大渡口区"
+ },
+ {
+ "code": "500105",
+ "name": "江北区"
+ },
+ {
+ "code": "500106",
+ "name": "沙坪坝区"
+ },
+ {
+ "code": "500107",
+ "name": "九龙坡区"
+ },
+ {
+ "code": "500108",
+ "name": "南岸区"
+ },
+ {
+ "code": "500109",
+ "name": "北碚区"
+ },
+ {
+ "code": "500110",
+ "name": "綦江区"
+ },
+ {
+ "code": "500111",
+ "name": "大足区"
+ },
+ {
+ "code": "500112",
+ "name": "渝北区"
+ },
+ {
+ "code": "500113",
+ "name": "巴南区"
+ },
+ {
+ "code": "500114",
+ "name": "黔江区"
+ },
+ {
+ "code": "500115",
+ "name": "长寿区"
+ },
+ {
+ "code": "500116",
+ "name": "江津区"
+ },
+ {
+ "code": "500117",
+ "name": "合川区"
+ },
+ {
+ "code": "500118",
+ "name": "永川区"
+ },
+ {
+ "code": "500119",
+ "name": "南川区"
+ },
+ {
+ "code": "500120",
+ "name": "璧山区"
+ },
+ {
+ "code": "500151",
+ "name": "铜梁区"
+ },
+ {
+ "code": "500152",
+ "name": "潼南区"
+ },
+ {
+ "code": "500153",
+ "name": "荣昌区"
+ },
+ {
+ "code": "500154",
+ "name": "开州区"
+ },
+ {
+ "code": "500155",
+ "name": "梁平区"
+ },
+ {
+ "code": "500156",
+ "name": "武隆区"
+ },
+ {
+ "code": "500229",
+ "name": "城口县"
+ },
+ {
+ "code": "500230",
+ "name": "丰都县"
+ },
+ {
+ "code": "500231",
+ "name": "垫江县"
+ },
+ {
+ "code": "500233",
+ "name": "忠县"
+ },
+ {
+ "code": "500235",
+ "name": "云阳县"
+ },
+ {
+ "code": "500236",
+ "name": "奉节县"
+ },
+ {
+ "code": "500237",
+ "name": "巫山县"
+ },
+ {
+ "code": "500238",
+ "name": "巫溪县"
+ },
+ {
+ "code": "500240",
+ "name": "石柱土家族自治县"
+ },
+ {
+ "code": "500241",
+ "name": "秀山土家族苗族自治县"
+ },
+ {
+ "code": "500242",
+ "name": "酉阳土家族苗族自治县"
+ },
+ {
+ "code": "500243",
+ "name": "彭水苗族土家族自治县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "510000",
+ "name": "四川省",
+ "children": [
+ {
+ "code": "510100",
+ "name": "成都市",
+ "children": [
+ {
+ "code": "510104",
+ "name": "锦江区"
+ },
+ {
+ "code": "510105",
+ "name": "青羊区"
+ },
+ {
+ "code": "510106",
+ "name": "金牛区"
+ },
+ {
+ "code": "510107",
+ "name": "武侯区"
+ },
+ {
+ "code": "510108",
+ "name": "成华区"
+ },
+ {
+ "code": "510112",
+ "name": "龙泉驿区"
+ },
+ {
+ "code": "510113",
+ "name": "青白江区"
+ },
+ {
+ "code": "510114",
+ "name": "新都区"
+ },
+ {
+ "code": "510115",
+ "name": "温江区"
+ },
+ {
+ "code": "510116",
+ "name": "双流区"
+ },
+ {
+ "code": "510117",
+ "name": "郫都区"
+ },
+ {
+ "code": "510121",
+ "name": "金堂县"
+ },
+ {
+ "code": "510129",
+ "name": "大邑县"
+ },
+ {
+ "code": "510131",
+ "name": "蒲江县"
+ },
+ {
+ "code": "510132",
+ "name": "新津县"
+ },
+ {
+ "code": "510181",
+ "name": "都江堰市"
+ },
+ {
+ "code": "510182",
+ "name": "彭州市"
+ },
+ {
+ "code": "510183",
+ "name": "邛崃市"
+ },
+ {
+ "code": "510184",
+ "name": "崇州市"
+ },
+ {
+ "code": "510185",
+ "name": "简阳市"
+ }
+ ]
+ },
+ {
+ "code": "510300",
+ "name": "自贡市",
+ "children": [
+ {
+ "code": "510302",
+ "name": "自流井区"
+ },
+ {
+ "code": "510303",
+ "name": "贡井区"
+ },
+ {
+ "code": "510304",
+ "name": "大安区"
+ },
+ {
+ "code": "510311",
+ "name": "沿滩区"
+ },
+ {
+ "code": "510321",
+ "name": "荣县"
+ },
+ {
+ "code": "510322",
+ "name": "富顺县"
+ }
+ ]
+ },
+ {
+ "code": "510400",
+ "name": "攀枝花市",
+ "children": [
+ {
+ "code": "510402",
+ "name": "东区"
+ },
+ {
+ "code": "510403",
+ "name": "西区"
+ },
+ {
+ "code": "510411",
+ "name": "仁和区"
+ },
+ {
+ "code": "510421",
+ "name": "米易县"
+ },
+ {
+ "code": "510422",
+ "name": "盐边县"
+ }
+ ]
+ },
+ {
+ "code": "510500",
+ "name": "泸州市",
+ "children": [
+ {
+ "code": "510502",
+ "name": "江阳区"
+ },
+ {
+ "code": "510503",
+ "name": "纳溪区"
+ },
+ {
+ "code": "510504",
+ "name": "龙马潭区"
+ },
+ {
+ "code": "510521",
+ "name": "泸县"
+ },
+ {
+ "code": "510522",
+ "name": "合江县"
+ },
+ {
+ "code": "510524",
+ "name": "叙永县"
+ },
+ {
+ "code": "510525",
+ "name": "古蔺县"
+ }
+ ]
+ },
+ {
+ "code": "510600",
+ "name": "德阳市",
+ "children": [
+ {
+ "code": "510603",
+ "name": "旌阳区"
+ },
+ {
+ "code": "510604",
+ "name": "罗江区"
+ },
+ {
+ "code": "510623",
+ "name": "中江县"
+ },
+ {
+ "code": "510681",
+ "name": "广汉市"
+ },
+ {
+ "code": "510682",
+ "name": "什邡市"
+ },
+ {
+ "code": "510683",
+ "name": "绵竹市"
+ }
+ ]
+ },
+ {
+ "code": "510700",
+ "name": "绵阳市",
+ "children": [
+ {
+ "code": "510703",
+ "name": "涪城区"
+ },
+ {
+ "code": "510704",
+ "name": "游仙区"
+ },
+ {
+ "code": "510705",
+ "name": "安州区"
+ },
+ {
+ "code": "510722",
+ "name": "三台县"
+ },
+ {
+ "code": "510723",
+ "name": "盐亭县"
+ },
+ {
+ "code": "510725",
+ "name": "梓潼县"
+ },
+ {
+ "code": "510726",
+ "name": "北川羌族自治县"
+ },
+ {
+ "code": "510727",
+ "name": "平武县"
+ },
+ {
+ "code": "510781",
+ "name": "江油市"
+ }
+ ]
+ },
+ {
+ "code": "510800",
+ "name": "广元市",
+ "children": [
+ {
+ "code": "510802",
+ "name": "利州区"
+ },
+ {
+ "code": "510811",
+ "name": "昭化区"
+ },
+ {
+ "code": "510812",
+ "name": "朝天区"
+ },
+ {
+ "code": "510821",
+ "name": "旺苍县"
+ },
+ {
+ "code": "510822",
+ "name": "青川县"
+ },
+ {
+ "code": "510823",
+ "name": "剑阁县"
+ },
+ {
+ "code": "510824",
+ "name": "苍溪县"
+ }
+ ]
+ },
+ {
+ "code": "510900",
+ "name": "遂宁市",
+ "children": [
+ {
+ "code": "510903",
+ "name": "船山区"
+ },
+ {
+ "code": "510904",
+ "name": "安居区"
+ },
+ {
+ "code": "510921",
+ "name": "蓬溪县"
+ },
+ {
+ "code": "510922",
+ "name": "射洪县"
+ },
+ {
+ "code": "510923",
+ "name": "大英县"
+ }
+ ]
+ },
+ {
+ "code": "511000",
+ "name": "内江市",
+ "children": [
+ {
+ "code": "511002",
+ "name": "市中区"
+ },
+ {
+ "code": "511011",
+ "name": "东兴区"
+ },
+ {
+ "code": "511024",
+ "name": "威远县"
+ },
+ {
+ "code": "511025",
+ "name": "资中县"
+ },
+ {
+ "code": "511083",
+ "name": "隆昌市"
+ }
+ ]
+ },
+ {
+ "code": "511100",
+ "name": "乐山市",
+ "children": [
+ {
+ "code": "511102",
+ "name": "市中区"
+ },
+ {
+ "code": "511111",
+ "name": "沙湾区"
+ },
+ {
+ "code": "511112",
+ "name": "五通桥区"
+ },
+ {
+ "code": "511113",
+ "name": "金口河区"
+ },
+ {
+ "code": "511123",
+ "name": "犍为县"
+ },
+ {
+ "code": "511124",
+ "name": "井研县"
+ },
+ {
+ "code": "511126",
+ "name": "夹江县"
+ },
+ {
+ "code": "511129",
+ "name": "沐川县"
+ },
+ {
+ "code": "511132",
+ "name": "峨边彝族自治县"
+ },
+ {
+ "code": "511133",
+ "name": "马边彝族自治县"
+ },
+ {
+ "code": "511181",
+ "name": "峨眉山市"
+ }
+ ]
+ },
+ {
+ "code": "511300",
+ "name": "南充市",
+ "children": [
+ {
+ "code": "511302",
+ "name": "顺庆区"
+ },
+ {
+ "code": "511303",
+ "name": "高坪区"
+ },
+ {
+ "code": "511304",
+ "name": "嘉陵区"
+ },
+ {
+ "code": "511321",
+ "name": "南部县"
+ },
+ {
+ "code": "511322",
+ "name": "营山县"
+ },
+ {
+ "code": "511323",
+ "name": "蓬安县"
+ },
+ {
+ "code": "511324",
+ "name": "仪陇县"
+ },
+ {
+ "code": "511325",
+ "name": "西充县"
+ },
+ {
+ "code": "511381",
+ "name": "阆中市"
+ }
+ ]
+ },
+ {
+ "code": "511400",
+ "name": "眉山市",
+ "children": [
+ {
+ "code": "511402",
+ "name": "东坡区"
+ },
+ {
+ "code": "511403",
+ "name": "彭山区"
+ },
+ {
+ "code": "511421",
+ "name": "仁寿县"
+ },
+ {
+ "code": "511423",
+ "name": "洪雅县"
+ },
+ {
+ "code": "511424",
+ "name": "丹棱县"
+ },
+ {
+ "code": "511425",
+ "name": "青神县"
+ }
+ ]
+ },
+ {
+ "code": "511500",
+ "name": "宜宾市",
+ "children": [
+ {
+ "code": "511502",
+ "name": "翠屏区"
+ },
+ {
+ "code": "511503",
+ "name": "南溪区"
+ },
+ {
+ "code": "511521",
+ "name": "宜宾县"
+ },
+ {
+ "code": "511523",
+ "name": "江安县"
+ },
+ {
+ "code": "511524",
+ "name": "长宁县"
+ },
+ {
+ "code": "511525",
+ "name": "高县"
+ },
+ {
+ "code": "511526",
+ "name": "珙县"
+ },
+ {
+ "code": "511527",
+ "name": "筠连县"
+ },
+ {
+ "code": "511528",
+ "name": "兴文县"
+ },
+ {
+ "code": "511529",
+ "name": "屏山县"
+ }
+ ]
+ },
+ {
+ "code": "511600",
+ "name": "广安市",
+ "children": [
+ {
+ "code": "511602",
+ "name": "广安区"
+ },
+ {
+ "code": "511603",
+ "name": "前锋区"
+ },
+ {
+ "code": "511621",
+ "name": "岳池县"
+ },
+ {
+ "code": "511622",
+ "name": "武胜县"
+ },
+ {
+ "code": "511623",
+ "name": "邻水县"
+ },
+ {
+ "code": "511681",
+ "name": "华蓥市"
+ }
+ ]
+ },
+ {
+ "code": "511700",
+ "name": "达州市",
+ "children": [
+ {
+ "code": "511702",
+ "name": "通川区"
+ },
+ {
+ "code": "511703",
+ "name": "达川区"
+ },
+ {
+ "code": "511722",
+ "name": "宣汉县"
+ },
+ {
+ "code": "511723",
+ "name": "开江县"
+ },
+ {
+ "code": "511724",
+ "name": "大竹县"
+ },
+ {
+ "code": "511725",
+ "name": "渠县"
+ },
+ {
+ "code": "511781",
+ "name": "万源市"
+ }
+ ]
+ },
+ {
+ "code": "511800",
+ "name": "雅安市",
+ "children": [
+ {
+ "code": "511802",
+ "name": "雨城区"
+ },
+ {
+ "code": "511803",
+ "name": "名山区"
+ },
+ {
+ "code": "511822",
+ "name": "荥经县"
+ },
+ {
+ "code": "511823",
+ "name": "汉源县"
+ },
+ {
+ "code": "511824",
+ "name": "石棉县"
+ },
+ {
+ "code": "511825",
+ "name": "天全县"
+ },
+ {
+ "code": "511826",
+ "name": "芦山县"
+ },
+ {
+ "code": "511827",
+ "name": "宝兴县"
+ }
+ ]
+ },
+ {
+ "code": "511900",
+ "name": "巴中市",
+ "children": [
+ {
+ "code": "511902",
+ "name": "巴州区"
+ },
+ {
+ "code": "511903",
+ "name": "恩阳区"
+ },
+ {
+ "code": "511921",
+ "name": "通江县"
+ },
+ {
+ "code": "511922",
+ "name": "南江县"
+ },
+ {
+ "code": "511923",
+ "name": "平昌县"
+ }
+ ]
+ },
+ {
+ "code": "512000",
+ "name": "资阳市",
+ "children": [
+ {
+ "code": "512002",
+ "name": "雁江区"
+ },
+ {
+ "code": "512021",
+ "name": "安岳县"
+ },
+ {
+ "code": "512022",
+ "name": "乐至县"
+ }
+ ]
+ },
+ {
+ "code": "513200",
+ "name": "阿坝藏族羌族自治州",
+ "children": [
+ {
+ "code": "513201",
+ "name": "马尔康市"
+ },
+ {
+ "code": "513221",
+ "name": "汶川县"
+ },
+ {
+ "code": "513222",
+ "name": "理县"
+ },
+ {
+ "code": "513223",
+ "name": "茂县"
+ },
+ {
+ "code": "513224",
+ "name": "松潘县"
+ },
+ {
+ "code": "513225",
+ "name": "九寨沟县"
+ },
+ {
+ "code": "513226",
+ "name": "金川县"
+ },
+ {
+ "code": "513227",
+ "name": "小金县"
+ },
+ {
+ "code": "513228",
+ "name": "黑水县"
+ },
+ {
+ "code": "513230",
+ "name": "壤塘县"
+ },
+ {
+ "code": "513231",
+ "name": "阿坝县"
+ },
+ {
+ "code": "513232",
+ "name": "若尔盖县"
+ },
+ {
+ "code": "513233",
+ "name": "红原县"
+ }
+ ]
+ },
+ {
+ "code": "513300",
+ "name": "甘孜藏族自治州",
+ "children": [
+ {
+ "code": "513301",
+ "name": "康定市"
+ },
+ {
+ "code": "513322",
+ "name": "泸定县"
+ },
+ {
+ "code": "513323",
+ "name": "丹巴县"
+ },
+ {
+ "code": "513324",
+ "name": "九龙县"
+ },
+ {
+ "code": "513325",
+ "name": "雅江县"
+ },
+ {
+ "code": "513326",
+ "name": "道孚县"
+ },
+ {
+ "code": "513327",
+ "name": "炉霍县"
+ },
+ {
+ "code": "513328",
+ "name": "甘孜县"
+ },
+ {
+ "code": "513329",
+ "name": "新龙县"
+ },
+ {
+ "code": "513330",
+ "name": "德格县"
+ },
+ {
+ "code": "513331",
+ "name": "白玉县"
+ },
+ {
+ "code": "513332",
+ "name": "石渠县"
+ },
+ {
+ "code": "513333",
+ "name": "色达县"
+ },
+ {
+ "code": "513334",
+ "name": "理塘县"
+ },
+ {
+ "code": "513335",
+ "name": "巴塘县"
+ },
+ {
+ "code": "513336",
+ "name": "乡城县"
+ },
+ {
+ "code": "513337",
+ "name": "稻城县"
+ },
+ {
+ "code": "513338",
+ "name": "得荣县"
+ }
+ ]
+ },
+ {
+ "code": "513400",
+ "name": "凉山彝族自治州",
+ "children": [
+ {
+ "code": "513401",
+ "name": "西昌市"
+ },
+ {
+ "code": "513422",
+ "name": "木里藏族自治县"
+ },
+ {
+ "code": "513423",
+ "name": "盐源县"
+ },
+ {
+ "code": "513424",
+ "name": "德昌县"
+ },
+ {
+ "code": "513425",
+ "name": "会理县"
+ },
+ {
+ "code": "513426",
+ "name": "会东县"
+ },
+ {
+ "code": "513427",
+ "name": "宁南县"
+ },
+ {
+ "code": "513428",
+ "name": "普格县"
+ },
+ {
+ "code": "513429",
+ "name": "布拖县"
+ },
+ {
+ "code": "513430",
+ "name": "金阳县"
+ },
+ {
+ "code": "513431",
+ "name": "昭觉县"
+ },
+ {
+ "code": "513432",
+ "name": "喜德县"
+ },
+ {
+ "code": "513433",
+ "name": "冕宁县"
+ },
+ {
+ "code": "513434",
+ "name": "越西县"
+ },
+ {
+ "code": "513435",
+ "name": "甘洛县"
+ },
+ {
+ "code": "513436",
+ "name": "美姑县"
+ },
+ {
+ "code": "513437",
+ "name": "雷波县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "520000",
+ "name": "贵州省",
+ "children": [
+ {
+ "code": "520100",
+ "name": "贵阳市",
+ "children": [
+ {
+ "code": "520102",
+ "name": "南明区"
+ },
+ {
+ "code": "520103",
+ "name": "云岩区"
+ },
+ {
+ "code": "520111",
+ "name": "花溪区"
+ },
+ {
+ "code": "520112",
+ "name": "乌当区"
+ },
+ {
+ "code": "520113",
+ "name": "白云区"
+ },
+ {
+ "code": "520115",
+ "name": "观山湖区"
+ },
+ {
+ "code": "520121",
+ "name": "开阳县"
+ },
+ {
+ "code": "520122",
+ "name": "息烽县"
+ },
+ {
+ "code": "520123",
+ "name": "修文县"
+ },
+ {
+ "code": "520181",
+ "name": "清镇市"
+ }
+ ]
+ },
+ {
+ "code": "520200",
+ "name": "六盘水市",
+ "children": [
+ {
+ "code": "520201",
+ "name": "钟山区"
+ },
+ {
+ "code": "520203",
+ "name": "六枝特区"
+ },
+ {
+ "code": "520221",
+ "name": "水城县"
+ },
+ {
+ "code": "520281",
+ "name": "盘州市"
+ }
+ ]
+ },
+ {
+ "code": "520300",
+ "name": "遵义市",
+ "children": [
+ {
+ "code": "520302",
+ "name": "红花岗区"
+ },
+ {
+ "code": "520303",
+ "name": "汇川区"
+ },
+ {
+ "code": "520304",
+ "name": "播州区"
+ },
+ {
+ "code": "520322",
+ "name": "桐梓县"
+ },
+ {
+ "code": "520323",
+ "name": "绥阳县"
+ },
+ {
+ "code": "520324",
+ "name": "正安县"
+ },
+ {
+ "code": "520325",
+ "name": "道真仡佬族苗族自治县"
+ },
+ {
+ "code": "520326",
+ "name": "务川仡佬族苗族自治县"
+ },
+ {
+ "code": "520327",
+ "name": "凤冈县"
+ },
+ {
+ "code": "520328",
+ "name": "湄潭县"
+ },
+ {
+ "code": "520329",
+ "name": "余庆县"
+ },
+ {
+ "code": "520330",
+ "name": "习水县"
+ },
+ {
+ "code": "520381",
+ "name": "赤水市"
+ },
+ {
+ "code": "520382",
+ "name": "仁怀市"
+ }
+ ]
+ },
+ {
+ "code": "520400",
+ "name": "安顺市",
+ "children": [
+ {
+ "code": "520402",
+ "name": "西秀区"
+ },
+ {
+ "code": "520403",
+ "name": "平坝区"
+ },
+ {
+ "code": "520422",
+ "name": "普定县"
+ },
+ {
+ "code": "520423",
+ "name": "镇宁布依族苗族自治县"
+ },
+ {
+ "code": "520424",
+ "name": "关岭布依族苗族自治县"
+ },
+ {
+ "code": "520425",
+ "name": "紫云苗族布依族自治县"
+ }
+ ]
+ },
+ {
+ "code": "520500",
+ "name": "毕节市",
+ "children": [
+ {
+ "code": "520502",
+ "name": "七星关区"
+ },
+ {
+ "code": "520521",
+ "name": "大方县"
+ },
+ {
+ "code": "520522",
+ "name": "黔西县"
+ },
+ {
+ "code": "520523",
+ "name": "金沙县"
+ },
+ {
+ "code": "520524",
+ "name": "织金县"
+ },
+ {
+ "code": "520525",
+ "name": "纳雍县"
+ },
+ {
+ "code": "520526",
+ "name": "威宁彝族回族苗族自治县"
+ },
+ {
+ "code": "520527",
+ "name": "赫章县"
+ }
+ ]
+ },
+ {
+ "code": "520600",
+ "name": "铜仁市",
+ "children": [
+ {
+ "code": "520602",
+ "name": "碧江区"
+ },
+ {
+ "code": "520603",
+ "name": "万山区"
+ },
+ {
+ "code": "520621",
+ "name": "江口县"
+ },
+ {
+ "code": "520622",
+ "name": "玉屏侗族自治县"
+ },
+ {
+ "code": "520623",
+ "name": "石阡县"
+ },
+ {
+ "code": "520624",
+ "name": "思南县"
+ },
+ {
+ "code": "520625",
+ "name": "印江土家族苗族自治县"
+ },
+ {
+ "code": "520626",
+ "name": "德江县"
+ },
+ {
+ "code": "520627",
+ "name": "沿河土家族自治县"
+ },
+ {
+ "code": "520628",
+ "name": "松桃苗族自治县"
+ }
+ ]
+ },
+ {
+ "code": "522300",
+ "name": "黔西南布依族苗族自治州",
+ "children": [
+ {
+ "code": "522301",
+ "name": "兴义市"
+ },
+ {
+ "code": "522322",
+ "name": "兴仁县"
+ },
+ {
+ "code": "522323",
+ "name": "普安县"
+ },
+ {
+ "code": "522324",
+ "name": "晴隆县"
+ },
+ {
+ "code": "522325",
+ "name": "贞丰县"
+ },
+ {
+ "code": "522326",
+ "name": "望谟县"
+ },
+ {
+ "code": "522327",
+ "name": "册亨县"
+ },
+ {
+ "code": "522328",
+ "name": "安龙县"
+ }
+ ]
+ },
+ {
+ "code": "522600",
+ "name": "黔东南苗族侗族自治州",
+ "children": [
+ {
+ "code": "522601",
+ "name": "凯里市"
+ },
+ {
+ "code": "522622",
+ "name": "黄平县"
+ },
+ {
+ "code": "522623",
+ "name": "施秉县"
+ },
+ {
+ "code": "522624",
+ "name": "三穗县"
+ },
+ {
+ "code": "522625",
+ "name": "镇远县"
+ },
+ {
+ "code": "522626",
+ "name": "岑巩县"
+ },
+ {
+ "code": "522627",
+ "name": "天柱县"
+ },
+ {
+ "code": "522628",
+ "name": "锦屏县"
+ },
+ {
+ "code": "522629",
+ "name": "剑河县"
+ },
+ {
+ "code": "522630",
+ "name": "台江县"
+ },
+ {
+ "code": "522631",
+ "name": "黎平县"
+ },
+ {
+ "code": "522632",
+ "name": "榕江县"
+ },
+ {
+ "code": "522633",
+ "name": "从江县"
+ },
+ {
+ "code": "522634",
+ "name": "雷山县"
+ },
+ {
+ "code": "522635",
+ "name": "麻江县"
+ },
+ {
+ "code": "522636",
+ "name": "丹寨县"
+ }
+ ]
+ },
+ {
+ "code": "522700",
+ "name": "黔南布依族苗族自治州",
+ "children": [
+ {
+ "code": "522701",
+ "name": "都匀市"
+ },
+ {
+ "code": "522702",
+ "name": "福泉市"
+ },
+ {
+ "code": "522722",
+ "name": "荔波县"
+ },
+ {
+ "code": "522723",
+ "name": "贵定县"
+ },
+ {
+ "code": "522725",
+ "name": "瓮安县"
+ },
+ {
+ "code": "522726",
+ "name": "独山县"
+ },
+ {
+ "code": "522727",
+ "name": "平塘县"
+ },
+ {
+ "code": "522728",
+ "name": "罗甸县"
+ },
+ {
+ "code": "522729",
+ "name": "长顺县"
+ },
+ {
+ "code": "522730",
+ "name": "龙里县"
+ },
+ {
+ "code": "522731",
+ "name": "惠水县"
+ },
+ {
+ "code": "522732",
+ "name": "三都水族自治县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "530000",
+ "name": "云南省",
+ "children": [
+ {
+ "code": "530100",
+ "name": "昆明市",
+ "children": [
+ {
+ "code": "530102",
+ "name": "五华区"
+ },
+ {
+ "code": "530103",
+ "name": "盘龙区"
+ },
+ {
+ "code": "530111",
+ "name": "官渡区"
+ },
+ {
+ "code": "530112",
+ "name": "西山区"
+ },
+ {
+ "code": "530113",
+ "name": "东川区"
+ },
+ {
+ "code": "530114",
+ "name": "呈贡区"
+ },
+ {
+ "code": "530115",
+ "name": "晋宁区"
+ },
+ {
+ "code": "530124",
+ "name": "富民县"
+ },
+ {
+ "code": "530125",
+ "name": "宜良县"
+ },
+ {
+ "code": "530126",
+ "name": "石林彝族自治县"
+ },
+ {
+ "code": "530127",
+ "name": "嵩明县"
+ },
+ {
+ "code": "530128",
+ "name": "禄劝彝族苗族自治县"
+ },
+ {
+ "code": "530129",
+ "name": "寻甸回族彝族自治县"
+ },
+ {
+ "code": "530181",
+ "name": "安宁市"
+ }
+ ]
+ },
+ {
+ "code": "530300",
+ "name": "曲靖市",
+ "children": [
+ {
+ "code": "530302",
+ "name": "麒麟区"
+ },
+ {
+ "code": "530303",
+ "name": "沾益区"
+ },
+ {
+ "code": "530304",
+ "name": "马龙区"
+ },
+ {
+ "code": "530322",
+ "name": "陆良县"
+ },
+ {
+ "code": "530323",
+ "name": "师宗县"
+ },
+ {
+ "code": "530324",
+ "name": "罗平县"
+ },
+ {
+ "code": "530325",
+ "name": "富源县"
+ },
+ {
+ "code": "530326",
+ "name": "会泽县"
+ },
+ {
+ "code": "530381",
+ "name": "宣威市"
+ }
+ ]
+ },
+ {
+ "code": "530400",
+ "name": "玉溪市",
+ "children": [
+ {
+ "code": "530402",
+ "name": "红塔区"
+ },
+ {
+ "code": "530403",
+ "name": "江川区"
+ },
+ {
+ "code": "530422",
+ "name": "澄江县"
+ },
+ {
+ "code": "530423",
+ "name": "通海县"
+ },
+ {
+ "code": "530424",
+ "name": "华宁县"
+ },
+ {
+ "code": "530425",
+ "name": "易门县"
+ },
+ {
+ "code": "530426",
+ "name": "峨山彝族自治县"
+ },
+ {
+ "code": "530427",
+ "name": "新平彝族傣族自治县"
+ },
+ {
+ "code": "530428",
+ "name": "元江哈尼族彝族傣族自治县"
+ }
+ ]
+ },
+ {
+ "code": "530500",
+ "name": "保山市",
+ "children": [
+ {
+ "code": "530502",
+ "name": "隆阳区"
+ },
+ {
+ "code": "530521",
+ "name": "施甸县"
+ },
+ {
+ "code": "530523",
+ "name": "龙陵县"
+ },
+ {
+ "code": "530524",
+ "name": "昌宁县"
+ },
+ {
+ "code": "530581",
+ "name": "腾冲市"
+ }
+ ]
+ },
+ {
+ "code": "530600",
+ "name": "昭通市",
+ "children": [
+ {
+ "code": "530602",
+ "name": "昭阳区"
+ },
+ {
+ "code": "530621",
+ "name": "鲁甸县"
+ },
+ {
+ "code": "530622",
+ "name": "巧家县"
+ },
+ {
+ "code": "530623",
+ "name": "盐津县"
+ },
+ {
+ "code": "530624",
+ "name": "大关县"
+ },
+ {
+ "code": "530625",
+ "name": "永善县"
+ },
+ {
+ "code": "530626",
+ "name": "绥江县"
+ },
+ {
+ "code": "530627",
+ "name": "镇雄县"
+ },
+ {
+ "code": "530628",
+ "name": "彝良县"
+ },
+ {
+ "code": "530629",
+ "name": "威信县"
+ },
+ {
+ "code": "530681",
+ "name": "水富市"
+ }
+ ]
+ },
+ {
+ "code": "530700",
+ "name": "丽江市",
+ "children": [
+ {
+ "code": "530702",
+ "name": "古城区"
+ },
+ {
+ "code": "530721",
+ "name": "玉龙纳西族自治县"
+ },
+ {
+ "code": "530722",
+ "name": "永胜县"
+ },
+ {
+ "code": "530723",
+ "name": "华坪县"
+ },
+ {
+ "code": "530724",
+ "name": "宁蒗彝族自治县"
+ }
+ ]
+ },
+ {
+ "code": "530800",
+ "name": "普洱市",
+ "children": [
+ {
+ "code": "530802",
+ "name": "思茅区"
+ },
+ {
+ "code": "530821",
+ "name": "宁洱哈尼族彝族自治县"
+ },
+ {
+ "code": "530822",
+ "name": "墨江哈尼族自治县"
+ },
+ {
+ "code": "530823",
+ "name": "景东彝族自治县"
+ },
+ {
+ "code": "530824",
+ "name": "景谷傣族彝族自治县"
+ },
+ {
+ "code": "530825",
+ "name": "镇沅彝族哈尼族拉祜族自治县"
+ },
+ {
+ "code": "530826",
+ "name": "江城哈尼族彝族自治县"
+ },
+ {
+ "code": "530827",
+ "name": "孟连傣族拉祜族佤族自治县"
+ },
+ {
+ "code": "530828",
+ "name": "澜沧拉祜族自治县"
+ },
+ {
+ "code": "530829",
+ "name": "西盟佤族自治县"
+ }
+ ]
+ },
+ {
+ "code": "530900",
+ "name": "临沧市",
+ "children": [
+ {
+ "code": "530902",
+ "name": "临翔区"
+ },
+ {
+ "code": "530921",
+ "name": "凤庆县"
+ },
+ {
+ "code": "530922",
+ "name": "云县"
+ },
+ {
+ "code": "530923",
+ "name": "永德县"
+ },
+ {
+ "code": "530924",
+ "name": "镇康县"
+ },
+ {
+ "code": "530925",
+ "name": "双江拉祜族佤族布朗族傣族自治县"
+ },
+ {
+ "code": "530926",
+ "name": "耿马傣族佤族自治县"
+ },
+ {
+ "code": "530927",
+ "name": "沧源佤族自治县"
+ }
+ ]
+ },
+ {
+ "code": "532300",
+ "name": "楚雄彝族自治州",
+ "children": [
+ {
+ "code": "532301",
+ "name": "楚雄市"
+ },
+ {
+ "code": "532322",
+ "name": "双柏县"
+ },
+ {
+ "code": "532323",
+ "name": "牟定县"
+ },
+ {
+ "code": "532324",
+ "name": "南华县"
+ },
+ {
+ "code": "532325",
+ "name": "姚安县"
+ },
+ {
+ "code": "532326",
+ "name": "大姚县"
+ },
+ {
+ "code": "532327",
+ "name": "永仁县"
+ },
+ {
+ "code": "532328",
+ "name": "元谋县"
+ },
+ {
+ "code": "532329",
+ "name": "武定县"
+ },
+ {
+ "code": "532331",
+ "name": "禄丰县"
+ }
+ ]
+ },
+ {
+ "code": "532500",
+ "name": "红河哈尼族彝族自治州",
+ "children": [
+ {
+ "code": "532501",
+ "name": "个旧市"
+ },
+ {
+ "code": "532502",
+ "name": "开远市"
+ },
+ {
+ "code": "532503",
+ "name": "蒙自市"
+ },
+ {
+ "code": "532504",
+ "name": "弥勒市"
+ },
+ {
+ "code": "532523",
+ "name": "屏边苗族自治县"
+ },
+ {
+ "code": "532524",
+ "name": "建水县"
+ },
+ {
+ "code": "532525",
+ "name": "石屏县"
+ },
+ {
+ "code": "532527",
+ "name": "泸西县"
+ },
+ {
+ "code": "532528",
+ "name": "元阳县"
+ },
+ {
+ "code": "532529",
+ "name": "红河县"
+ },
+ {
+ "code": "532530",
+ "name": "金平苗族瑶族傣族自治县"
+ },
+ {
+ "code": "532531",
+ "name": "绿春县"
+ },
+ {
+ "code": "532532",
+ "name": "河口瑶族自治县"
+ }
+ ]
+ },
+ {
+ "code": "532600",
+ "name": "文山壮族苗族自治州",
+ "children": [
+ {
+ "code": "532601",
+ "name": "文山市"
+ },
+ {
+ "code": "532622",
+ "name": "砚山县"
+ },
+ {
+ "code": "532623",
+ "name": "西畴县"
+ },
+ {
+ "code": "532624",
+ "name": "麻栗坡县"
+ },
+ {
+ "code": "532625",
+ "name": "马关县"
+ },
+ {
+ "code": "532626",
+ "name": "丘北县"
+ },
+ {
+ "code": "532627",
+ "name": "广南县"
+ },
+ {
+ "code": "532628",
+ "name": "富宁县"
+ }
+ ]
+ },
+ {
+ "code": "532800",
+ "name": "西双版纳傣族自治州",
+ "children": [
+ {
+ "code": "532801",
+ "name": "景洪市"
+ },
+ {
+ "code": "532822",
+ "name": "勐海县"
+ },
+ {
+ "code": "532823",
+ "name": "勐腊县"
+ }
+ ]
+ },
+ {
+ "code": "532900",
+ "name": "大理白族自治州",
+ "children": [
+ {
+ "code": "532901",
+ "name": "大理市"
+ },
+ {
+ "code": "532922",
+ "name": "漾濞彝族自治县"
+ },
+ {
+ "code": "532923",
+ "name": "祥云县"
+ },
+ {
+ "code": "532924",
+ "name": "宾川县"
+ },
+ {
+ "code": "532925",
+ "name": "弥渡县"
+ },
+ {
+ "code": "532926",
+ "name": "南涧彝族自治县"
+ },
+ {
+ "code": "532927",
+ "name": "巍山彝族回族自治县"
+ },
+ {
+ "code": "532928",
+ "name": "永平县"
+ },
+ {
+ "code": "532929",
+ "name": "云龙县"
+ },
+ {
+ "code": "532930",
+ "name": "洱源县"
+ },
+ {
+ "code": "532931",
+ "name": "剑川县"
+ },
+ {
+ "code": "532932",
+ "name": "鹤庆县"
+ }
+ ]
+ },
+ {
+ "code": "533100",
+ "name": "德宏傣族景颇族自治州",
+ "children": [
+ {
+ "code": "533102",
+ "name": "瑞丽市"
+ },
+ {
+ "code": "533103",
+ "name": "芒市"
+ },
+ {
+ "code": "533122",
+ "name": "梁河县"
+ },
+ {
+ "code": "533123",
+ "name": "盈江县"
+ },
+ {
+ "code": "533124",
+ "name": "陇川县"
+ }
+ ]
+ },
+ {
+ "code": "533300",
+ "name": "怒江傈僳族自治州",
+ "children": [
+ {
+ "code": "533301",
+ "name": "泸水市"
+ },
+ {
+ "code": "533323",
+ "name": "福贡县"
+ },
+ {
+ "code": "533324",
+ "name": "贡山独龙族怒族自治县"
+ },
+ {
+ "code": "533325",
+ "name": "兰坪白族普米族自治县"
+ }
+ ]
+ },
+ {
+ "code": "533400",
+ "name": "迪庆藏族自治州",
+ "children": [
+ {
+ "code": "533401",
+ "name": "香格里拉市"
+ },
+ {
+ "code": "533422",
+ "name": "德钦县"
+ },
+ {
+ "code": "533423",
+ "name": "维西傈僳族自治县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "540000",
+ "name": "西藏自治区",
+ "children": [
+ {
+ "code": "540100",
+ "name": "拉萨市",
+ "children": [
+ {
+ "code": "540102",
+ "name": "城关区"
+ },
+ {
+ "code": "540103",
+ "name": "堆龙德庆区"
+ },
+ {
+ "code": "540104",
+ "name": "达孜区"
+ },
+ {
+ "code": "540121",
+ "name": "林周县"
+ },
+ {
+ "code": "540122",
+ "name": "当雄县"
+ },
+ {
+ "code": "540123",
+ "name": "尼木县"
+ },
+ {
+ "code": "540124",
+ "name": "曲水县"
+ },
+ {
+ "code": "540127",
+ "name": "墨竹工卡县"
+ }
+ ]
+ },
+ {
+ "code": "540200",
+ "name": "日喀则市",
+ "children": [
+ {
+ "code": "540202",
+ "name": "桑珠孜区"
+ },
+ {
+ "code": "540221",
+ "name": "南木林县"
+ },
+ {
+ "code": "540222",
+ "name": "江孜县"
+ },
+ {
+ "code": "540223",
+ "name": "定日县"
+ },
+ {
+ "code": "540224",
+ "name": "萨迦县"
+ },
+ {
+ "code": "540225",
+ "name": "拉孜县"
+ },
+ {
+ "code": "540226",
+ "name": "昂仁县"
+ },
+ {
+ "code": "540227",
+ "name": "谢通门县"
+ },
+ {
+ "code": "540228",
+ "name": "白朗县"
+ },
+ {
+ "code": "540229",
+ "name": "仁布县"
+ },
+ {
+ "code": "540230",
+ "name": "康马县"
+ },
+ {
+ "code": "540231",
+ "name": "定结县"
+ },
+ {
+ "code": "540232",
+ "name": "仲巴县"
+ },
+ {
+ "code": "540233",
+ "name": "亚东县"
+ },
+ {
+ "code": "540234",
+ "name": "吉隆县"
+ },
+ {
+ "code": "540235",
+ "name": "聂拉木县"
+ },
+ {
+ "code": "540236",
+ "name": "萨嘎县"
+ },
+ {
+ "code": "540237",
+ "name": "岗巴县"
+ }
+ ]
+ },
+ {
+ "code": "540300",
+ "name": "昌都市",
+ "children": [
+ {
+ "code": "540302",
+ "name": "卡若区"
+ },
+ {
+ "code": "540321",
+ "name": "江达县"
+ },
+ {
+ "code": "540322",
+ "name": "贡觉县"
+ },
+ {
+ "code": "540323",
+ "name": "类乌齐县"
+ },
+ {
+ "code": "540324",
+ "name": "丁青县"
+ },
+ {
+ "code": "540325",
+ "name": "察雅县"
+ },
+ {
+ "code": "540326",
+ "name": "八宿县"
+ },
+ {
+ "code": "540327",
+ "name": "左贡县"
+ },
+ {
+ "code": "540328",
+ "name": "芒康县"
+ },
+ {
+ "code": "540329",
+ "name": "洛隆县"
+ },
+ {
+ "code": "540330",
+ "name": "边坝县"
+ }
+ ]
+ },
+ {
+ "code": "540400",
+ "name": "林芝市",
+ "children": [
+ {
+ "code": "540402",
+ "name": "巴宜区"
+ },
+ {
+ "code": "540421",
+ "name": "工布江达县"
+ },
+ {
+ "code": "540422",
+ "name": "米林县"
+ },
+ {
+ "code": "540423",
+ "name": "墨脱县"
+ },
+ {
+ "code": "540424",
+ "name": "波密县"
+ },
+ {
+ "code": "540425",
+ "name": "察隅县"
+ },
+ {
+ "code": "540426",
+ "name": "朗县"
+ }
+ ]
+ },
+ {
+ "code": "540500",
+ "name": "山南市",
+ "children": [
+ {
+ "code": "540502",
+ "name": "乃东区"
+ },
+ {
+ "code": "540521",
+ "name": "扎囊县"
+ },
+ {
+ "code": "540522",
+ "name": "贡嘎县"
+ },
+ {
+ "code": "540523",
+ "name": "桑日县"
+ },
+ {
+ "code": "540524",
+ "name": "琼结县"
+ },
+ {
+ "code": "540525",
+ "name": "曲松县"
+ },
+ {
+ "code": "540526",
+ "name": "措美县"
+ },
+ {
+ "code": "540527",
+ "name": "洛扎县"
+ },
+ {
+ "code": "540528",
+ "name": "加查县"
+ },
+ {
+ "code": "540529",
+ "name": "隆子县"
+ },
+ {
+ "code": "540530",
+ "name": "错那县"
+ },
+ {
+ "code": "540531",
+ "name": "浪卡子县"
+ }
+ ]
+ },
+ {
+ "code": "540600",
+ "name": "那曲市",
+ "children": [
+ {
+ "code": "540602",
+ "name": "色尼区"
+ },
+ {
+ "code": "540621",
+ "name": "嘉黎县"
+ },
+ {
+ "code": "540622",
+ "name": "比如县"
+ },
+ {
+ "code": "540623",
+ "name": "聂荣县"
+ },
+ {
+ "code": "540624",
+ "name": "安多县"
+ },
+ {
+ "code": "540625",
+ "name": "申扎县"
+ },
+ {
+ "code": "540626",
+ "name": "索县"
+ },
+ {
+ "code": "540627",
+ "name": "班戈县"
+ },
+ {
+ "code": "540628",
+ "name": "巴青县"
+ },
+ {
+ "code": "540629",
+ "name": "尼玛县"
+ },
+ {
+ "code": "540630",
+ "name": "双湖县"
+ }
+ ]
+ },
+ {
+ "code": "542500",
+ "name": "阿里地区",
+ "children": [
+ {
+ "code": "542521",
+ "name": "普兰县"
+ },
+ {
+ "code": "542522",
+ "name": "札达县"
+ },
+ {
+ "code": "542523",
+ "name": "噶尔县"
+ },
+ {
+ "code": "542524",
+ "name": "日土县"
+ },
+ {
+ "code": "542525",
+ "name": "革吉县"
+ },
+ {
+ "code": "542526",
+ "name": "改则县"
+ },
+ {
+ "code": "542527",
+ "name": "措勤县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "610000",
+ "name": "陕西省",
+ "children": [
+ {
+ "code": "610100",
+ "name": "西安市",
+ "children": [
+ {
+ "code": "610102",
+ "name": "新城区"
+ },
+ {
+ "code": "610103",
+ "name": "碑林区"
+ },
+ {
+ "code": "610104",
+ "name": "莲湖区"
+ },
+ {
+ "code": "610111",
+ "name": "灞桥区"
+ },
+ {
+ "code": "610112",
+ "name": "未央区"
+ },
+ {
+ "code": "610113",
+ "name": "雁塔区"
+ },
+ {
+ "code": "610114",
+ "name": "阎良区"
+ },
+ {
+ "code": "610115",
+ "name": "临潼区"
+ },
+ {
+ "code": "610116",
+ "name": "长安区"
+ },
+ {
+ "code": "610117",
+ "name": "高陵区"
+ },
+ {
+ "code": "610118",
+ "name": "鄠邑区"
+ },
+ {
+ "code": "610122",
+ "name": "蓝田县"
+ },
+ {
+ "code": "610124",
+ "name": "周至县"
+ }
+ ]
+ },
+ {
+ "code": "610200",
+ "name": "铜川市",
+ "children": [
+ {
+ "code": "610202",
+ "name": "王益区"
+ },
+ {
+ "code": "610203",
+ "name": "印台区"
+ },
+ {
+ "code": "610204",
+ "name": "耀州区"
+ },
+ {
+ "code": "610222",
+ "name": "宜君县"
+ }
+ ]
+ },
+ {
+ "code": "610300",
+ "name": "宝鸡市",
+ "children": [
+ {
+ "code": "610302",
+ "name": "渭滨区"
+ },
+ {
+ "code": "610303",
+ "name": "金台区"
+ },
+ {
+ "code": "610304",
+ "name": "陈仓区"
+ },
+ {
+ "code": "610322",
+ "name": "凤翔县"
+ },
+ {
+ "code": "610323",
+ "name": "岐山县"
+ },
+ {
+ "code": "610324",
+ "name": "扶风县"
+ },
+ {
+ "code": "610326",
+ "name": "眉县"
+ },
+ {
+ "code": "610327",
+ "name": "陇县"
+ },
+ {
+ "code": "610328",
+ "name": "千阳县"
+ },
+ {
+ "code": "610329",
+ "name": "麟游县"
+ },
+ {
+ "code": "610330",
+ "name": "凤县"
+ },
+ {
+ "code": "610331",
+ "name": "太白县"
+ }
+ ]
+ },
+ {
+ "code": "610400",
+ "name": "咸阳市",
+ "children": [
+ {
+ "code": "610402",
+ "name": "秦都区"
+ },
+ {
+ "code": "610403",
+ "name": "杨陵区"
+ },
+ {
+ "code": "610404",
+ "name": "渭城区"
+ },
+ {
+ "code": "610422",
+ "name": "三原县"
+ },
+ {
+ "code": "610423",
+ "name": "泾阳县"
+ },
+ {
+ "code": "610424",
+ "name": "乾县"
+ },
+ {
+ "code": "610425",
+ "name": "礼泉县"
+ },
+ {
+ "code": "610426",
+ "name": "永寿县"
+ },
+ {
+ "code": "610428",
+ "name": "长武县"
+ },
+ {
+ "code": "610429",
+ "name": "旬邑县"
+ },
+ {
+ "code": "610430",
+ "name": "淳化县"
+ },
+ {
+ "code": "610431",
+ "name": "武功县"
+ },
+ {
+ "code": "610481",
+ "name": "兴平市"
+ },
+ {
+ "code": "610482",
+ "name": "彬州市"
+ }
+ ]
+ },
+ {
+ "code": "610500",
+ "name": "渭南市",
+ "children": [
+ {
+ "code": "610502",
+ "name": "临渭区"
+ },
+ {
+ "code": "610503",
+ "name": "华州区"
+ },
+ {
+ "code": "610522",
+ "name": "潼关县"
+ },
+ {
+ "code": "610523",
+ "name": "大荔县"
+ },
+ {
+ "code": "610524",
+ "name": "合阳县"
+ },
+ {
+ "code": "610525",
+ "name": "澄城县"
+ },
+ {
+ "code": "610526",
+ "name": "蒲城县"
+ },
+ {
+ "code": "610527",
+ "name": "白水县"
+ },
+ {
+ "code": "610528",
+ "name": "富平县"
+ },
+ {
+ "code": "610581",
+ "name": "韩城市"
+ },
+ {
+ "code": "610582",
+ "name": "华阴市"
+ }
+ ]
+ },
+ {
+ "code": "610600",
+ "name": "延安市",
+ "children": [
+ {
+ "code": "610602",
+ "name": "宝塔区"
+ },
+ {
+ "code": "610603",
+ "name": "安塞区"
+ },
+ {
+ "code": "610621",
+ "name": "延长县"
+ },
+ {
+ "code": "610622",
+ "name": "延川县"
+ },
+ {
+ "code": "610623",
+ "name": "子长县"
+ },
+ {
+ "code": "610625",
+ "name": "志丹县"
+ },
+ {
+ "code": "610626",
+ "name": "吴起县"
+ },
+ {
+ "code": "610627",
+ "name": "甘泉县"
+ },
+ {
+ "code": "610628",
+ "name": "富县"
+ },
+ {
+ "code": "610629",
+ "name": "洛川县"
+ },
+ {
+ "code": "610630",
+ "name": "宜川县"
+ },
+ {
+ "code": "610631",
+ "name": "黄龙县"
+ },
+ {
+ "code": "610632",
+ "name": "黄陵县"
+ }
+ ]
+ },
+ {
+ "code": "610700",
+ "name": "汉中市",
+ "children": [
+ {
+ "code": "610702",
+ "name": "汉台区"
+ },
+ {
+ "code": "610703",
+ "name": "南郑区"
+ },
+ {
+ "code": "610722",
+ "name": "城固县"
+ },
+ {
+ "code": "610723",
+ "name": "洋县"
+ },
+ {
+ "code": "610724",
+ "name": "西乡县"
+ },
+ {
+ "code": "610725",
+ "name": "勉县"
+ },
+ {
+ "code": "610726",
+ "name": "宁强县"
+ },
+ {
+ "code": "610727",
+ "name": "略阳县"
+ },
+ {
+ "code": "610728",
+ "name": "镇巴县"
+ },
+ {
+ "code": "610729",
+ "name": "留坝县"
+ },
+ {
+ "code": "610730",
+ "name": "佛坪县"
+ }
+ ]
+ },
+ {
+ "code": "610800",
+ "name": "榆林市",
+ "children": [
+ {
+ "code": "610802",
+ "name": "榆阳区"
+ },
+ {
+ "code": "610803",
+ "name": "横山区"
+ },
+ {
+ "code": "610822",
+ "name": "府谷县"
+ },
+ {
+ "code": "610824",
+ "name": "靖边县"
+ },
+ {
+ "code": "610825",
+ "name": "定边县"
+ },
+ {
+ "code": "610826",
+ "name": "绥德县"
+ },
+ {
+ "code": "610827",
+ "name": "米脂县"
+ },
+ {
+ "code": "610828",
+ "name": "佳县"
+ },
+ {
+ "code": "610829",
+ "name": "吴堡县"
+ },
+ {
+ "code": "610830",
+ "name": "清涧县"
+ },
+ {
+ "code": "610831",
+ "name": "子洲县"
+ },
+ {
+ "code": "610881",
+ "name": "神木市"
+ }
+ ]
+ },
+ {
+ "code": "610900",
+ "name": "安康市",
+ "children": [
+ {
+ "code": "610902",
+ "name": "汉滨区"
+ },
+ {
+ "code": "610921",
+ "name": "汉阴县"
+ },
+ {
+ "code": "610922",
+ "name": "石泉县"
+ },
+ {
+ "code": "610923",
+ "name": "宁陕县"
+ },
+ {
+ "code": "610924",
+ "name": "紫阳县"
+ },
+ {
+ "code": "610925",
+ "name": "岚皋县"
+ },
+ {
+ "code": "610926",
+ "name": "平利县"
+ },
+ {
+ "code": "610927",
+ "name": "镇坪县"
+ },
+ {
+ "code": "610928",
+ "name": "旬阳县"
+ },
+ {
+ "code": "610929",
+ "name": "白河县"
+ }
+ ]
+ },
+ {
+ "code": "611000",
+ "name": "商洛市",
+ "children": [
+ {
+ "code": "611002",
+ "name": "商州区"
+ },
+ {
+ "code": "611021",
+ "name": "洛南县"
+ },
+ {
+ "code": "611022",
+ "name": "丹凤县"
+ },
+ {
+ "code": "611023",
+ "name": "商南县"
+ },
+ {
+ "code": "611024",
+ "name": "山阳县"
+ },
+ {
+ "code": "611025",
+ "name": "镇安县"
+ },
+ {
+ "code": "611026",
+ "name": "柞水县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "620000",
+ "name": "甘肃省",
+ "children": [
+ {
+ "code": "620100",
+ "name": "兰州市",
+ "children": [
+ {
+ "code": "620102",
+ "name": "城关区"
+ },
+ {
+ "code": "620103",
+ "name": "七里河区"
+ },
+ {
+ "code": "620104",
+ "name": "西固区"
+ },
+ {
+ "code": "620105",
+ "name": "安宁区"
+ },
+ {
+ "code": "620111",
+ "name": "红古区"
+ },
+ {
+ "code": "620121",
+ "name": "永登县"
+ },
+ {
+ "code": "620122",
+ "name": "皋兰县"
+ },
+ {
+ "code": "620123",
+ "name": "榆中县"
+ }
+ ]
+ },
+ {
+ "code": "620200",
+ "name": "嘉峪关市",
+ "children": []
+ },
+ {
+ "code": "620300",
+ "name": "金昌市",
+ "children": [
+ {
+ "code": "620302",
+ "name": "金川区"
+ },
+ {
+ "code": "620321",
+ "name": "永昌县"
+ }
+ ]
+ },
+ {
+ "code": "620400",
+ "name": "白银市",
+ "children": [
+ {
+ "code": "620402",
+ "name": "白银区"
+ },
+ {
+ "code": "620403",
+ "name": "平川区"
+ },
+ {
+ "code": "620421",
+ "name": "靖远县"
+ },
+ {
+ "code": "620422",
+ "name": "会宁县"
+ },
+ {
+ "code": "620423",
+ "name": "景泰县"
+ }
+ ]
+ },
+ {
+ "code": "620500",
+ "name": "天水市",
+ "children": [
+ {
+ "code": "620502",
+ "name": "秦州区"
+ },
+ {
+ "code": "620503",
+ "name": "麦积区"
+ },
+ {
+ "code": "620521",
+ "name": "清水县"
+ },
+ {
+ "code": "620522",
+ "name": "秦安县"
+ },
+ {
+ "code": "620523",
+ "name": "甘谷县"
+ },
+ {
+ "code": "620524",
+ "name": "武山县"
+ },
+ {
+ "code": "620525",
+ "name": "张家川回族自治县"
+ }
+ ]
+ },
+ {
+ "code": "620600",
+ "name": "武威市",
+ "children": [
+ {
+ "code": "620602",
+ "name": "凉州区"
+ },
+ {
+ "code": "620621",
+ "name": "民勤县"
+ },
+ {
+ "code": "620622",
+ "name": "古浪县"
+ },
+ {
+ "code": "620623",
+ "name": "天祝藏族自治县"
+ }
+ ]
+ },
+ {
+ "code": "620700",
+ "name": "张掖市",
+ "children": [
+ {
+ "code": "620702",
+ "name": "甘州区"
+ },
+ {
+ "code": "620721",
+ "name": "肃南裕固族自治县"
+ },
+ {
+ "code": "620722",
+ "name": "民乐县"
+ },
+ {
+ "code": "620723",
+ "name": "临泽县"
+ },
+ {
+ "code": "620724",
+ "name": "高台县"
+ },
+ {
+ "code": "620725",
+ "name": "山丹县"
+ }
+ ]
+ },
+ {
+ "code": "620800",
+ "name": "平凉市",
+ "children": [
+ {
+ "code": "620802",
+ "name": "崆峒区"
+ },
+ {
+ "code": "620821",
+ "name": "泾川县"
+ },
+ {
+ "code": "620822",
+ "name": "灵台县"
+ },
+ {
+ "code": "620823",
+ "name": "崇信县"
+ },
+ {
+ "code": "620825",
+ "name": "庄浪县"
+ },
+ {
+ "code": "620826",
+ "name": "静宁县"
+ },
+ {
+ "code": "620881",
+ "name": "华亭市"
+ }
+ ]
+ },
+ {
+ "code": "620900",
+ "name": "酒泉市",
+ "children": [
+ {
+ "code": "620902",
+ "name": "肃州区"
+ },
+ {
+ "code": "620921",
+ "name": "金塔县"
+ },
+ {
+ "code": "620922",
+ "name": "瓜州县"
+ },
+ {
+ "code": "620923",
+ "name": "肃北蒙古族自治县"
+ },
+ {
+ "code": "620924",
+ "name": "阿克塞哈萨克族自治县"
+ },
+ {
+ "code": "620981",
+ "name": "玉门市"
+ },
+ {
+ "code": "620982",
+ "name": "敦煌市"
+ }
+ ]
+ },
+ {
+ "code": "621000",
+ "name": "庆阳市",
+ "children": [
+ {
+ "code": "621002",
+ "name": "西峰区"
+ },
+ {
+ "code": "621021",
+ "name": "庆城县"
+ },
+ {
+ "code": "621022",
+ "name": "环县"
+ },
+ {
+ "code": "621023",
+ "name": "华池县"
+ },
+ {
+ "code": "621024",
+ "name": "合水县"
+ },
+ {
+ "code": "621025",
+ "name": "正宁县"
+ },
+ {
+ "code": "621026",
+ "name": "宁县"
+ },
+ {
+ "code": "621027",
+ "name": "镇原县"
+ }
+ ]
+ },
+ {
+ "code": "621100",
+ "name": "定西市",
+ "children": [
+ {
+ "code": "621102",
+ "name": "安定区"
+ },
+ {
+ "code": "621121",
+ "name": "通渭县"
+ },
+ {
+ "code": "621122",
+ "name": "陇西县"
+ },
+ {
+ "code": "621123",
+ "name": "渭源县"
+ },
+ {
+ "code": "621124",
+ "name": "临洮县"
+ },
+ {
+ "code": "621125",
+ "name": "漳县"
+ },
+ {
+ "code": "621126",
+ "name": "岷县"
+ }
+ ]
+ },
+ {
+ "code": "621200",
+ "name": "陇南市",
+ "children": [
+ {
+ "code": "621202",
+ "name": "武都区"
+ },
+ {
+ "code": "621221",
+ "name": "成县"
+ },
+ {
+ "code": "621222",
+ "name": "文县"
+ },
+ {
+ "code": "621223",
+ "name": "宕昌县"
+ },
+ {
+ "code": "621224",
+ "name": "康县"
+ },
+ {
+ "code": "621225",
+ "name": "西和县"
+ },
+ {
+ "code": "621226",
+ "name": "礼县"
+ },
+ {
+ "code": "621227",
+ "name": "徽县"
+ },
+ {
+ "code": "621228",
+ "name": "两当县"
+ }
+ ]
+ },
+ {
+ "code": "622900",
+ "name": "临夏回族自治州",
+ "children": [
+ {
+ "code": "622901",
+ "name": "临夏市"
+ },
+ {
+ "code": "622921",
+ "name": "临夏县"
+ },
+ {
+ "code": "622922",
+ "name": "康乐县"
+ },
+ {
+ "code": "622923",
+ "name": "永靖县"
+ },
+ {
+ "code": "622924",
+ "name": "广河县"
+ },
+ {
+ "code": "622925",
+ "name": "和政县"
+ },
+ {
+ "code": "622926",
+ "name": "东乡族自治县"
+ },
+ {
+ "code": "622927",
+ "name": "积石山保安族东乡族撒拉族自治县"
+ }
+ ]
+ },
+ {
+ "code": "623000",
+ "name": "甘南藏族自治州",
+ "children": [
+ {
+ "code": "623001",
+ "name": "合作市"
+ },
+ {
+ "code": "623021",
+ "name": "临潭县"
+ },
+ {
+ "code": "623022",
+ "name": "卓尼县"
+ },
+ {
+ "code": "623023",
+ "name": "舟曲县"
+ },
+ {
+ "code": "623024",
+ "name": "迭部县"
+ },
+ {
+ "code": "623025",
+ "name": "玛曲县"
+ },
+ {
+ "code": "623026",
+ "name": "碌曲县"
+ },
+ {
+ "code": "623027",
+ "name": "夏河县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "630000",
+ "name": "青海省",
+ "children": [
+ {
+ "code": "630100",
+ "name": "西宁市",
+ "children": [
+ {
+ "code": "630102",
+ "name": "城东区"
+ },
+ {
+ "code": "630103",
+ "name": "城中区"
+ },
+ {
+ "code": "630104",
+ "name": "城西区"
+ },
+ {
+ "code": "630105",
+ "name": "城北区"
+ },
+ {
+ "code": "630121",
+ "name": "大通回族土族自治县"
+ },
+ {
+ "code": "630122",
+ "name": "湟中县"
+ },
+ {
+ "code": "630123",
+ "name": "湟源县"
+ }
+ ]
+ },
+ {
+ "code": "630200",
+ "name": "海东市",
+ "children": [
+ {
+ "code": "630202",
+ "name": "乐都区"
+ },
+ {
+ "code": "630203",
+ "name": "平安区"
+ },
+ {
+ "code": "630222",
+ "name": "民和回族土族自治县"
+ },
+ {
+ "code": "630223",
+ "name": "互助土族自治县"
+ },
+ {
+ "code": "630224",
+ "name": "化隆回族自治县"
+ },
+ {
+ "code": "630225",
+ "name": "循化撒拉族自治县"
+ }
+ ]
+ },
+ {
+ "code": "632200",
+ "name": "海北藏族自治州",
+ "children": [
+ {
+ "code": "632221",
+ "name": "门源回族自治县"
+ },
+ {
+ "code": "632222",
+ "name": "祁连县"
+ },
+ {
+ "code": "632223",
+ "name": "海晏县"
+ },
+ {
+ "code": "632224",
+ "name": "刚察县"
+ }
+ ]
+ },
+ {
+ "code": "632300",
+ "name": "黄南藏族自治州",
+ "children": [
+ {
+ "code": "632321",
+ "name": "同仁县"
+ },
+ {
+ "code": "632322",
+ "name": "尖扎县"
+ },
+ {
+ "code": "632323",
+ "name": "泽库县"
+ },
+ {
+ "code": "632324",
+ "name": "河南蒙古族自治县"
+ }
+ ]
+ },
+ {
+ "code": "632500",
+ "name": "海南藏族自治州",
+ "children": [
+ {
+ "code": "632521",
+ "name": "共和县"
+ },
+ {
+ "code": "632522",
+ "name": "同德县"
+ },
+ {
+ "code": "632523",
+ "name": "贵德县"
+ },
+ {
+ "code": "632524",
+ "name": "兴海县"
+ },
+ {
+ "code": "632525",
+ "name": "贵南县"
+ }
+ ]
+ },
+ {
+ "code": "632600",
+ "name": "果洛藏族自治州",
+ "children": [
+ {
+ "code": "632621",
+ "name": "玛沁县"
+ },
+ {
+ "code": "632622",
+ "name": "班玛县"
+ },
+ {
+ "code": "632623",
+ "name": "甘德县"
+ },
+ {
+ "code": "632624",
+ "name": "达日县"
+ },
+ {
+ "code": "632625",
+ "name": "久治县"
+ },
+ {
+ "code": "632626",
+ "name": "玛多县"
+ }
+ ]
+ },
+ {
+ "code": "632700",
+ "name": "玉树藏族自治州",
+ "children": [
+ {
+ "code": "632701",
+ "name": "玉树市"
+ },
+ {
+ "code": "632722",
+ "name": "杂多县"
+ },
+ {
+ "code": "632723",
+ "name": "称多县"
+ },
+ {
+ "code": "632724",
+ "name": "治多县"
+ },
+ {
+ "code": "632725",
+ "name": "囊谦县"
+ },
+ {
+ "code": "632726",
+ "name": "曲麻莱县"
+ }
+ ]
+ },
+ {
+ "code": "632800",
+ "name": "海西蒙古族藏族自治州",
+ "children": [
+ {
+ "code": "632801",
+ "name": "格尔木市"
+ },
+ {
+ "code": "632802",
+ "name": "德令哈市"
+ },
+ {
+ "code": "632803",
+ "name": "茫崖市"
+ },
+ {
+ "code": "632821",
+ "name": "乌兰县"
+ },
+ {
+ "code": "632822",
+ "name": "都兰县"
+ },
+ {
+ "code": "632823",
+ "name": "天峻县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "640000",
+ "name": "宁夏回族自治区",
+ "children": [
+ {
+ "code": "640100",
+ "name": "银川市",
+ "children": [
+ {
+ "code": "640104",
+ "name": "兴庆区"
+ },
+ {
+ "code": "640105",
+ "name": "西夏区"
+ },
+ {
+ "code": "640106",
+ "name": "金凤区"
+ },
+ {
+ "code": "640121",
+ "name": "永宁县"
+ },
+ {
+ "code": "640122",
+ "name": "贺兰县"
+ },
+ {
+ "code": "640181",
+ "name": "灵武市"
+ }
+ ]
+ },
+ {
+ "code": "640200",
+ "name": "石嘴山市",
+ "children": [
+ {
+ "code": "640202",
+ "name": "大武口区"
+ },
+ {
+ "code": "640205",
+ "name": "惠农区"
+ },
+ {
+ "code": "640221",
+ "name": "平罗县"
+ }
+ ]
+ },
+ {
+ "code": "640300",
+ "name": "吴忠市",
+ "children": [
+ {
+ "code": "640302",
+ "name": "利通区"
+ },
+ {
+ "code": "640303",
+ "name": "红寺堡区"
+ },
+ {
+ "code": "640323",
+ "name": "盐池县"
+ },
+ {
+ "code": "640324",
+ "name": "同心县"
+ },
+ {
+ "code": "640381",
+ "name": "青铜峡市"
+ }
+ ]
+ },
+ {
+ "code": "640400",
+ "name": "固原市",
+ "children": [
+ {
+ "code": "640402",
+ "name": "原州区"
+ },
+ {
+ "code": "640422",
+ "name": "西吉县"
+ },
+ {
+ "code": "640423",
+ "name": "隆德县"
+ },
+ {
+ "code": "640424",
+ "name": "泾源县"
+ },
+ {
+ "code": "640425",
+ "name": "彭阳县"
+ }
+ ]
+ },
+ {
+ "code": "640500",
+ "name": "中卫市",
+ "children": [
+ {
+ "code": "640502",
+ "name": "沙坡头区"
+ },
+ {
+ "code": "640521",
+ "name": "中宁县"
+ },
+ {
+ "code": "640522",
+ "name": "海原县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "650000",
+ "name": "新疆维吾尔自治区",
+ "children": [
+ {
+ "code": "650100",
+ "name": "乌鲁木齐市",
+ "children": [
+ {
+ "code": "650102",
+ "name": "天山区"
+ },
+ {
+ "code": "650103",
+ "name": "沙依巴克区"
+ },
+ {
+ "code": "650104",
+ "name": "新市区"
+ },
+ {
+ "code": "650105",
+ "name": "水磨沟区"
+ },
+ {
+ "code": "650106",
+ "name": "头屯河区"
+ },
+ {
+ "code": "650107",
+ "name": "达坂城区"
+ },
+ {
+ "code": "650109",
+ "name": "米东区"
+ },
+ {
+ "code": "650121",
+ "name": "乌鲁木齐县"
+ }
+ ]
+ },
+ {
+ "code": "650200",
+ "name": "克拉玛依市",
+ "children": [
+ {
+ "code": "650202",
+ "name": "独山子区"
+ },
+ {
+ "code": "650203",
+ "name": "克拉玛依区"
+ },
+ {
+ "code": "650204",
+ "name": "白碱滩区"
+ },
+ {
+ "code": "650205",
+ "name": "乌尔禾区"
+ }
+ ]
+ },
+ {
+ "code": "650400",
+ "name": "吐鲁番市",
+ "children": [
+ {
+ "code": "650402",
+ "name": "高昌区"
+ },
+ {
+ "code": "650421",
+ "name": "鄯善县"
+ },
+ {
+ "code": "650422",
+ "name": "托克逊县"
+ }
+ ]
+ },
+ {
+ "code": "650500",
+ "name": "哈密市",
+ "children": [
+ {
+ "code": "650502",
+ "name": "伊州区"
+ },
+ {
+ "code": "650521",
+ "name": "巴里坤哈萨克自治县"
+ },
+ {
+ "code": "650522",
+ "name": "伊吾县"
+ }
+ ]
+ },
+ {
+ "code": "652300",
+ "name": "昌吉回族自治州",
+ "children": [
+ {
+ "code": "652301",
+ "name": "昌吉市"
+ },
+ {
+ "code": "652302",
+ "name": "阜康市"
+ },
+ {
+ "code": "652323",
+ "name": "呼图壁县"
+ },
+ {
+ "code": "652324",
+ "name": "玛纳斯县"
+ },
+ {
+ "code": "652325",
+ "name": "奇台县"
+ },
+ {
+ "code": "652327",
+ "name": "吉木萨尔县"
+ },
+ {
+ "code": "652328",
+ "name": "木垒哈萨克自治县"
+ }
+ ]
+ },
+ {
+ "code": "652700",
+ "name": "博尔塔拉蒙古自治州",
+ "children": [
+ {
+ "code": "652701",
+ "name": "博乐市"
+ },
+ {
+ "code": "652702",
+ "name": "阿拉山口市"
+ },
+ {
+ "code": "652722",
+ "name": "精河县"
+ },
+ {
+ "code": "652723",
+ "name": "温泉县"
+ }
+ ]
+ },
+ {
+ "code": "652800",
+ "name": "巴音郭楞蒙古自治州",
+ "children": [
+ {
+ "code": "652801",
+ "name": "库尔勒市"
+ },
+ {
+ "code": "652822",
+ "name": "轮台县"
+ },
+ {
+ "code": "652823",
+ "name": "尉犁县"
+ },
+ {
+ "code": "652824",
+ "name": "若羌县"
+ },
+ {
+ "code": "652825",
+ "name": "且末县"
+ },
+ {
+ "code": "652826",
+ "name": "焉耆回族自治县"
+ },
+ {
+ "code": "652827",
+ "name": "和静县"
+ },
+ {
+ "code": "652828",
+ "name": "和硕县"
+ },
+ {
+ "code": "652829",
+ "name": "博湖县"
+ }
+ ]
+ },
+ {
+ "code": "652900",
+ "name": "阿克苏地区",
+ "children": [
+ {
+ "code": "652901",
+ "name": "阿克苏市"
+ },
+ {
+ "code": "652922",
+ "name": "温宿县"
+ },
+ {
+ "code": "652923",
+ "name": "库车县"
+ },
+ {
+ "code": "652924",
+ "name": "沙雅县"
+ },
+ {
+ "code": "652925",
+ "name": "新和县"
+ },
+ {
+ "code": "652926",
+ "name": "拜城县"
+ },
+ {
+ "code": "652927",
+ "name": "乌什县"
+ },
+ {
+ "code": "652928",
+ "name": "阿瓦提县"
+ },
+ {
+ "code": "652929",
+ "name": "柯坪县"
+ }
+ ]
+ },
+ {
+ "code": "653000",
+ "name": "克孜勒苏柯尔克孜自治州",
+ "children": [
+ {
+ "code": "653001",
+ "name": "阿图什市"
+ },
+ {
+ "code": "653022",
+ "name": "阿克陶县"
+ },
+ {
+ "code": "653023",
+ "name": "阿合奇县"
+ },
+ {
+ "code": "653024",
+ "name": "乌恰县"
+ }
+ ]
+ },
+ {
+ "code": "653100",
+ "name": "喀什地区",
+ "children": [
+ {
+ "code": "653101",
+ "name": "喀什市"
+ },
+ {
+ "code": "653121",
+ "name": "疏附县"
+ },
+ {
+ "code": "653122",
+ "name": "疏勒县"
+ },
+ {
+ "code": "653123",
+ "name": "英吉沙县"
+ },
+ {
+ "code": "653124",
+ "name": "泽普县"
+ },
+ {
+ "code": "653125",
+ "name": "莎车县"
+ },
+ {
+ "code": "653126",
+ "name": "叶城县"
+ },
+ {
+ "code": "653127",
+ "name": "麦盖提县"
+ },
+ {
+ "code": "653128",
+ "name": "岳普湖县"
+ },
+ {
+ "code": "653129",
+ "name": "伽师县"
+ },
+ {
+ "code": "653130",
+ "name": "巴楚县"
+ },
+ {
+ "code": "653131",
+ "name": "塔什库尔干塔吉克自治县"
+ }
+ ]
+ },
+ {
+ "code": "653200",
+ "name": "和田地区",
+ "children": [
+ {
+ "code": "653201",
+ "name": "和田市"
+ },
+ {
+ "code": "653221",
+ "name": "和田县"
+ },
+ {
+ "code": "653222",
+ "name": "墨玉县"
+ },
+ {
+ "code": "653223",
+ "name": "皮山县"
+ },
+ {
+ "code": "653224",
+ "name": "洛浦县"
+ },
+ {
+ "code": "653225",
+ "name": "策勒县"
+ },
+ {
+ "code": "653226",
+ "name": "于田县"
+ },
+ {
+ "code": "653227",
+ "name": "民丰县"
+ }
+ ]
+ },
+ {
+ "code": "654000",
+ "name": "伊犁哈萨克自治州",
+ "children": [
+ {
+ "code": "654002",
+ "name": "伊宁市"
+ },
+ {
+ "code": "654003",
+ "name": "奎屯市"
+ },
+ {
+ "code": "654004",
+ "name": "霍尔果斯市"
+ },
+ {
+ "code": "654021",
+ "name": "伊宁县"
+ },
+ {
+ "code": "654022",
+ "name": "察布查尔锡伯自治县"
+ },
+ {
+ "code": "654023",
+ "name": "霍城县"
+ },
+ {
+ "code": "654024",
+ "name": "巩留县"
+ },
+ {
+ "code": "654025",
+ "name": "新源县"
+ },
+ {
+ "code": "654026",
+ "name": "昭苏县"
+ },
+ {
+ "code": "654027",
+ "name": "特克斯县"
+ },
+ {
+ "code": "654028",
+ "name": "尼勒克县"
+ }
+ ]
+ },
+ {
+ "code": "654200",
+ "name": "塔城地区",
+ "children": [
+ {
+ "code": "654201",
+ "name": "塔城市"
+ },
+ {
+ "code": "654202",
+ "name": "乌苏市"
+ },
+ {
+ "code": "654221",
+ "name": "额敏县"
+ },
+ {
+ "code": "654223",
+ "name": "沙湾县"
+ },
+ {
+ "code": "654224",
+ "name": "托里县"
+ },
+ {
+ "code": "654225",
+ "name": "裕民县"
+ },
+ {
+ "code": "654226",
+ "name": "和布克赛尔蒙古自治县"
+ }
+ ]
+ },
+ {
+ "code": "654300",
+ "name": "阿勒泰地区",
+ "children": [
+ {
+ "code": "654301",
+ "name": "阿勒泰市"
+ },
+ {
+ "code": "654321",
+ "name": "布尔津县"
+ },
+ {
+ "code": "654322",
+ "name": "富蕴县"
+ },
+ {
+ "code": "654323",
+ "name": "福海县"
+ },
+ {
+ "code": "654324",
+ "name": "哈巴河县"
+ },
+ {
+ "code": "654325",
+ "name": "青河县"
+ },
+ {
+ "code": "654326",
+ "name": "吉木乃县"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "710000",
+ "name": "台湾省",
+ "children": [
+ {
+ "code": "710000",
+ "name": "台湾省",
+ "children": [
+ {
+ "code": "710000",
+ "name": "台湾省"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "810000",
+ "name": "香港特别行政区",
+ "children": [
+ {
+ "code": "810000",
+ "name": "香港特别行政区",
+ "children": [
+ {
+ "code": "810000",
+ "name": "香港特别行政区"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "code": "820000",
+ "name": "澳门特别行政区",
+ "children": [
+ {
+ "code": "820000",
+ "name": "澳门特别行政区",
+ "children": [
+ {
+ "code": "820000",
+ "name": "澳门特别行政区"
+ }
+ ]
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/src/views/page/const/const.js b/src/views/page/const/const.js
new file mode 100644
index 0000000000000000000000000000000000000000..99ecd48472cdf1cf27707751c4f3e2bda237a698
--- /dev/null
+++ b/src/views/page/const/const.js
@@ -0,0 +1,254 @@
+export const queryKeyList = [
+ {label: "模糊", value: "LIKE"},
+ {label: "左模糊", value: "LIKE_LEFT"},
+ {label: "右模糊", value: "LIKE_RIGHT"},
+ {label: "等于", value: "EQ"},
+ {label: "不等于", value: "NE"},
+ {label: "大于", value: "GT"},
+ {label: "大于等于", value: "GE"},
+ {label: "小于", value:"LT"},
+ {label: "小于等于", value: "LE"},
+ // {label: "为空", value:"IS_NULL"},
+ // {label: "不为空", value: "IS_NOT_NULL"},
+ {label: "区间", value: "BETWEEN"},
+ // {label: "包含", value: "IN"}
+]
+
+
+/**数值 支持查询条件(等于 大于 小于 大于等于 小于等于 区间)**/
+///public final static SqlKeyWordEnum[] NUMBER_QUERY_TYPE = new SqlKeyWordEnum[]{EQ, NE, GT, GE, LT, LE, BETWEEN};
+/**字符串 时间 支持查询条件(模糊 左模糊 右模糊 等于)**/
+//public final static SqlKeyWordEnum[] VARCHAR_QUERY_TYPE = new SqlKeyWordEnum[]{LIKE, LIKE_LEFT, LIKE_RIGHT, EQ};
+const NUMBER_QUERY_TYPE = ['EQ', 'NE', 'GT', 'GE', 'LT', 'LE', 'BETWEEN']
+const VARCHAR_QUERY_TYPE = ['LIKE', 'LIKE_LEFT', 'LIKE_RIGHT', 'EQ']
+export const columnTypeList = [
+ {label:'varchar',value:'varchar', type: 'input', isSearch: true, isSenior: true, limit: VARCHAR_QUERY_TYPE},
+ {label:'bit',value:'bit', type: 'switch', isSearch: true, isSenior: false, isEnum: false},
+ {label:'char',value:'char',type: 'input', isSearch: false, isSenior: false, isEnum: false},
+ {label:'tinyblob',value:'tinyblob', type: 'textarea', isSearch: false, isSenior: false, isEnum: false},
+ {label:'tinytext',value:'tinytext', type: 'textarea', isSearch: true, isSenior: true, limit: VARCHAR_QUERY_TYPE},
+ {label:'text',value:'text', type: 'textarea', isSearch: true, isSenior: true, limit: VARCHAR_QUERY_TYPE},
+ {label:'mediumblob',value:'mediumblob', type: 'textarea', isSearch: false, isSenior: false, isEnum: false},
+ {label:'longblob',value:'longblob', type: 'textarea', isSearch: false, isSenior: false, isEnum: false},
+ {label:'longtext',value:'longtext', type: 'textarea', isSearch: true, isSenior: true, limit: VARCHAR_QUERY_TYPE},
+ {label:'tinyint',value:'tinyint', type: 'inputNumber', num: 'int', isSearch: true, isSenior: false, limit: NUMBER_QUERY_TYPE},
+ {label:'smallint',value:'smallint', type: 'inputNumber', num: 'int', isSearch: true, isSenior: false, limit: NUMBER_QUERY_TYPE},
+ {label:'mediumint',value:'mediumint', type: 'inputNumber', num: 'int', isSearch: true, isSenior: false, limit: NUMBER_QUERY_TYPE},
+ {label:'int',value:'int', type: 'inputNumber', num: 'int', isSearch: true, isSenior: false, limit: NUMBER_QUERY_TYPE},
+ {label:'integer',value:'integer', type: 'inputNumber', num: 'int', isSearch: true, isSenior: false, limit: NUMBER_QUERY_TYPE},
+ {label:'year',value:'year', type: 'datePicker', datetype: 'year', isSearch: true, isSenior: false, limit: NUMBER_QUERY_TYPE},
+ {label:'bigint',value:'bigint', type: 'inputNumber', num: 'int', isSearch: true, isSenior: false, limit: NUMBER_QUERY_TYPE},
+ {label:'float',value:'float', type: 'inputNumber', isSearch: true, isSenior: false, limit: NUMBER_QUERY_TYPE},
+ {label:'double',value:'double', type: 'inputNumber', isSearch: true, isSenior: false, limit: NUMBER_QUERY_TYPE},
+ {label:'decimal',value:'decimal', type: 'inputNumber', isSearch: true, isSenior: false, limit: NUMBER_QUERY_TYPE},
+ {label:'date',value:'date', type: 'datePicker', datetype: 'date', isSearch: true, isSenior: false, limit: NUMBER_QUERY_TYPE},
+ {label:'time',value:'time', type: 'timePicker', isSearch: true, isSenior: false, limit: NUMBER_QUERY_TYPE},
+ {label:'datetime',value:'datetime', type: 'datePicker', datetype: 'datetime', isSearch: true, isSenior: false, limit: NUMBER_QUERY_TYPE},
+ {label:'timestamp',value:'timestamp', type: 'datePicker', datetype: 'datetime', isSearch: true, isSenior: false, limit: NUMBER_QUERY_TYPE},
+ {label:'enum',value:'enum', type: '', isSearch: true, isSenior: true, isEnum: true, limit: ['EQ']},
+]
+
+export const btnType = [
+ // { position: ['top'],from:true, url: false, label: '新增表单', value: 'save_form'},
+ // { position: ['top'],from:false, url: false, label: '导入', value: 'import_excel'},
+ // // { position: ['top'],from:false, url: false, label: '导入', value: 'import_excel'},
+ // { position: ['top'],from:true, url: false, label: '导出', value: 'export_excel'},
+ // { position: ['line'],from:true, url: false, label: '修改表单', value: 'update_form'},
+ // { position: ['line'],from:false, url: false, label: '删除操作', value: 'delete'},
+ // // { position: ['line'],from:true, url: false, label: '其它表单', value: 'other_form'},
+ // { position: ['line'],from:true, url: false, label: '详情', value: 'show_label'},
+ // { position: ['top','line'],from:true, url: true, label: 'POST请求', value: 'network_post_url'},
+ // { position: ['top','line'],from:true, url: true, label: 'GET请求', value: 'network_get_url'},
+ // { position: ['top','line'],from:false, url: true, label: '打开内嵌页面', value: 'page_url'},
+ // { position: ['top','line'],from:false, url: true, label: '打开新页面', value: 'open_page_url'},
+ { position: ['top','line'],from:false, url: true, label: '表单', value: 'FORM'},
+ { position: ['top'],from:false, url: true, label: '导入', value: 'IMPORT'},
+ { position: ['top'],from:false, url: true, label: '导出', value: 'EXPORT'},
+ { position: ['top','line'],from:false, url: true, label: '网络请求', value: 'NETWORK'},
+]
+
+export const defaultBtnList = [
+ { name: '新增', position: 'top', type: 'FORM', formDesign: {formType: '', formdata: []}, fineGrainedType: 'SAVE', isopen: true },
+ { name: '修改', position: 'line', type: 'FORM', formDesign: {formType: '', formdata: []}, fineGrainedType: 'EDIT', isopen: true },
+ { name: '删除', position: 'line', type: 'NETWORK', formDesign: {formType: '', formdata: []}, fineGrainedType: 'DEL', isopen: true },
+ { name: '详情', position: 'line', type: 'FORM', formDesign: {formType: '', formdata: []}, fineGrainedType: 'DETAIL', isopen: true },
+ { name: '导出', position: 'top', type: 'EXPORT', formDesign: {formType: '', formdata: []}, fineGrainedType: 'EXPORT', isopen: true },
+ { name: '导入', position: 'top', type: 'IMPORT', formDesign: {formType: '', formdata: []}, fineGrainedType: 'IMPORT', isopen: true },
+]
+
+export const dataTypeList = [
+ {
+ "label": "字符",
+ "value": "VARCHAR",
+ "type": "input",
+ "sqlKeywords": [
+ {
+ "value": "EQ",
+ "label": "等于"
+ },
+ {
+ "value": "LIKE",
+ "label": "模糊"
+ },
+ {
+ "value": "LIKE_LEFT",
+ "label": "左模糊"
+ },
+ {
+ "value": "LIKE_RIGHT",
+ "label": "右模糊"
+ }
+ ]
+ },
+ {
+ "label": "日期",
+ "value": "DATE",
+ "type": "date",
+ "sqlKeywords": [
+ {
+ "value": "EQ",
+ "label": "等于"
+ },
+ {
+ "value": "NE",
+ "label": "不等于"
+ },
+ {
+ "value": "GE",
+ "label": "大于等于"
+ },
+ {
+ "value": "GT",
+ "label": "大于"
+ },
+ {
+ "value": "LT",
+ "label": "小于"
+ },
+ {
+ "value": "LE",
+ "label": "小于等于"
+ },
+ {
+ "value": "BETWEEN",
+ "label": "区间"
+ }
+ ]
+ },
+ {
+ "label": "时间",
+ "value": "TIME",
+ "type": "time",
+ "sqlKeywords": [
+ {
+ "value": "EQ",
+ "label": "等于"
+ },
+ {
+ "value": "NE",
+ "label": "不等于"
+ },
+ {
+ "value": "GE",
+ "label": "大于等于"
+ },
+ {
+ "value": "GT",
+ "label": "大于"
+ },
+ {
+ "value": "LT",
+ "label": "小于"
+ },
+ {
+ "value": "LE",
+ "label": "小于等于"
+ },
+ {
+ "value": "BETWEEN",
+ "label": "区间"
+ }
+ ]
+ },
+ {
+ "label": "日期时间",
+ "value": "DATETIME",
+ "type": "datePicker",
+ "sqlKeywords": [
+ {
+ "value": "EQ",
+ "label": "等于"
+ },
+ {
+ "value": "NE",
+ "label": "不等于"
+ },
+ {
+ "value": "GE",
+ "label": "大于等于"
+ },
+ {
+ "value": "GT",
+ "label": "大于"
+ },
+ {
+ "value": "LT",
+ "label": "小于"
+ },
+ {
+ "value": "LE",
+ "label": "小于等于"
+ },
+ {
+ "value": "BETWEEN",
+ "label": "区间"
+ }
+ ]
+ },
+ {
+ "label": "数值",
+ "value": "DECIMAL",
+ "type": "inputNumber",
+ "sqlKeywords": [
+ {
+ "value": "EQ",
+ "label": "等于"
+ },
+ {
+ "value": "NE",
+ "label": "不等于"
+ },
+ {
+ "value": "GE",
+ "label": "大于等于"
+ },
+ {
+ "value": "GT",
+ "label": "大于"
+ },
+ {
+ "value": "LT",
+ "label": "小于"
+ },
+ {
+ "value": "LE",
+ "label": "小于等于"
+ },
+ {
+ "value": "BETWEEN",
+ "label": "区间"
+ }
+ ]
+ },
+ {
+ "label": "字典",
+ "value": "ENUM",
+ "type": "select",
+ "sqlKeywords": [
+ {
+ "value": "EQ",
+ "label": "等于"
+ }
+ ]
+ }
+]
\ No newline at end of file
diff --git a/src/views/page/const/errorCode.js b/src/views/page/const/errorCode.js
new file mode 100644
index 0000000000000000000000000000000000000000..f14f2610b21bed0e02a86cf6b5680ead095bb2aa
--- /dev/null
+++ b/src/views/page/const/errorCode.js
@@ -0,0 +1,4 @@
+export default {
+ '000': '操作太频繁,请勿重复请求',
+ 'default': '系统未知错误,请反馈给管理员'
+}
diff --git a/src/views/page/const/iconList.js b/src/views/page/const/iconList.js
new file mode 100644
index 0000000000000000000000000000000000000000..8257903c0f903175db700cde6d493ec6cf7e2d3b
--- /dev/null
+++ b/src/views/page/const/iconList.js
@@ -0,0 +1,46 @@
+export default [
+ {
+ label: '图标',
+ list: [
+ 'icon-quanxianguanli',
+ 'icon-yonghuguanli',
+ 'icon-jiaoseguanli',
+ 'icon-web-icon-',
+ 'icon-xitongguanli',
+ 'icon-rizhiguanli',
+ 'icon-navicon-zdgl',
+ 'icon-weibiaoti46',
+ 'icon-miyue',
+ 'icon-shouji',
+ 'icon-denglvlingpai',
+ 'icon-luyou',
+ 'icon-msnui-supervise',
+ 'icon-server',
+ 'icon-wendang',
+ 'icon-gtsquanjushiwufuwuGTS',
+ 'icon-caidanguanli',
+ 'icon-guanwang',
+ 'icon-guanwangfangwen',
+ 'icon-guiji',
+ 'icon-fensiguanli',
+ 'icon-gongzhonghao',
+ 'icon-anniu_weixincaidanlianjie',
+ 'icon-weixincaidan',
+ 'icon-xiaoxiguanli',
+ 'icon-zhexiantu',
+ 'icon-canshu',
+ 'icon-erji-zuhushouye',
+ 'icon-pay6zhifu',
+ 'icon-zhifuqudaoguanli',
+ 'icon-dingdan',
+ 'icon-tuikuan',
+ 'icon-webicon14',
+ 'icon-shouyintai',
+ 'icon-wenjianguanli',
+ 'icon-mysql',
+ 'icon-shejiyukaifa-',
+ 'icon-record',
+ 'icon-biaodanbiaoqian'
+ ]
+ }
+]
diff --git a/src/views/page/const/iconfont.js b/src/views/page/const/iconfont.js
new file mode 100644
index 0000000000000000000000000000000000000000..e4045ce3d3667e484886997429d6a0d985d301fe
--- /dev/null
+++ b/src/views/page/const/iconfont.js
@@ -0,0 +1,230 @@
+export default [
+ 'icon-caizhengting',
+ 'icon-caidanguanli4',
+ 'icon-daiban1',
+ 'icon-daibandengdaishenhe',
+ 'icon-caidanguanli',
+ 'icon-caidanguanli3',
+ 'icon-daiban',
+ 'icon-daiban2',
+ 'icon-daiyanshou',
+ 'icon-danwei3',
+ 'icon-danwei4',
+ 'icon-danwei2',
+ 'icon-danwei1',
+ 'icon-fankui1',
+ 'icon-fankui2',
+ 'icon-faqipingshen',
+ 'icon-danwei5',
+ 'icon-fankui',
+ 'icon-danwei',
+ 'icon-fangan3',
+ 'icon-caidanguanli5',
+ 'icon-fangan1',
+ 'icon-feiyong2',
+ 'icon-fangan2',
+ 'icon-fangan',
+ 'icon-feiyong1',
+ 'icon-fuhe1',
+ 'icon-fuhe3',
+ 'icon-fuhe',
+ 'icon-feiyongtongji1',
+ 'icon-fangan4',
+ 'icon-feiyong',
+ 'icon-gongzuotai',
+ 'icon-gongshi2',
+ 'icon-gongshi',
+ 'icon-feiyongtongji',
+ 'icon-huibao1',
+ 'icon-fuhe2',
+ 'icon-jilu1',
+ 'icon-jilu',
+ 'icon-huibaoxian',
+ 'icon-jilu3',
+ 'icon-jiaose',
+ 'icon-gongshi1',
+ 'icon-huibao',
+ 'icon-huiyiyonghuzuzhijigou-07',
+ 'icon-jiaoseguanli',
+ 'icon-jilu4',
+ 'icon--jiaoseguanli',
+ 'icon-jilu2',
+ 'icon-jiaose1',
+ 'icon-jingfeibaozhang',
+ 'icon-jiaohuan',
+ 'icon-lixiang1',
+ 'icon-jingfeiguanli-01',
+ 'icon-jingfeizhihang',
+ 'icon-leibie',
+ 'icon-lixiang2',
+ 'icon-liucheng11',
+ 'icon-liucheng3',
+ 'icon-liucheng1',
+ 'icon-jingfei',
+ 'icon-lixiang',
+ 'icon-liucheng2',
+ 'icon-liuchengmoxing',
+ 'icon-liucheng',
+ 'icon-lixiangshenqing',
+ 'icon-pingshen1',
+ 'icon-pingshen',
+ 'icon-liucheng4',
+ 'icon-pingshenjilu1',
+ 'icon-pingshenjilu',
+ 'icon-pingshenjihua',
+ 'icon-pingshenzhuanjiaguanli',
+ 'icon-pingshentongguo',
+ 'icon-qingsuanchuli',
+ 'icon-qingjia3',
+ 'icon-pingshenzhuanjiaku',
+ 'icon-pingshenjieguoguanli2x',
+ 'icon-qingjia2',
+ 'icon-qingjia',
+ 'icon-qingsuanguanli',
+ 'icon-qingjia1',
+ 'icon-quanxianguanli2',
+ 'icon-quanxian',
+ 'icon-quanxianguanli1',
+ 'icon-quanxianguanli3',
+ 'icon-quanxianguanli',
+ 'icon-quanxianguanli4',
+ 'icon-rizhiguanli1',
+ 'icon-quanxianguanli5',
+ 'icon-rizhiguanli2',
+ 'icon-rizhiguanli3',
+ 'icon-rizhiguanli4',
+ 'icon-rizhiguanli',
+ 'icon-shenqing2',
+ 'icon-sangongjingfei',
+ 'icon-rizhiguanli5',
+ 'icon-shenqing11',
+ 'icon-shensu',
+ 'icon-shensu1',
+ 'icon-shenqing',
+ 'icon-shenchaguizeguanli',
+ 'icon-shensu2',
+ 'icon-shenqing1',
+ 'icon-shenhe1',
+ 'icon-shencha',
+ 'icon-shenhe3',
+ 'icon-shenhe4',
+ 'icon-shenhe2',
+ 'icon-shenhe8',
+ 'icon-shenhe6',
+ 'icon-shenhe7',
+
+ 'icon-shenhe5',
+ 'icon-shenhe12',
+ 'icon-shenhe9',
+ 'icon-shenhe',
+ 'icon-shenhe11',
+ 'icon-shenheliebiao1',
+ 'icon-shenhe10',
+ 'icon-shixin1',
+
+ 'icon-shouli',
+ 'icon-tianxie2',
+ 'icon-shenheliebiao',
+ 'icon-tianxie1',
+ 'icon-tongji1',
+ 'icon-tongji5',
+ 'icon-tianxie3',
+
+ 'icon-tongji4',
+ 'icon-tongji2',
+ 'icon-tongji6',
+ 'icon-tongji',
+ 'icon-shixin',
+ 'icon-tongji9',
+ 'icon-tianxie',
+ 'icon-tongji7',
+
+ 'icon-tongji8',
+ 'icon-weijieqingshenheliebiao',
+ 'icon-wenjian-fangan',
+ 'icon-xitongguanli1',
+ 'icon-tongji3',
+ 'icon-xitongguanli2',
+ 'icon-wanjie',
+ 'icon-xitongguanli3',
+
+ 'icon-xitongguanli4',
+ 'icon-xitongguanli',
+ 'icon-xitongguanli5',
+ 'icon-xiangmu',
+ 'icon-xiangmuguochengguanli',
+ 'icon-xiangmu1',
+ 'icon-xiangmu2',
+ 'icon-xinzeng1',
+
+ 'icon-xiangmu3',
+ 'icon-xinzeng4',
+ 'icon-xinzeng2',
+ 'icon-xinzeng',
+ 'icon-xinxichaxun2',
+ 'icon-xitongshezhi',
+ 'icon-xinxichaxun1',
+ 'icon-xinzeng3',
+
+ 'icon-xinxichaxun4',
+ 'icon-xinxichaxun',
+ 'icon-xinxichaxun3',
+ 'icon-xinxichaxun5',
+ 'icon-xinyong',
+ 'icon-yanshou1',
+ 'icon-xinyongguanli',
+ 'icon-yanshou2',
+
+ 'icon-xinyongka',
+ 'icon-xinyongguanli1',
+ 'icon-xinyongzheng',
+ 'icon-yanshou3',
+ 'icon-yanshoufanganshenhe',
+ 'icon-yonghuguanli1',
+ 'icon-yanshou',
+ 'icon-yonghuguanli2',
+
+ 'icon-yonghuguanli',
+ 'icon-zhengshuguanli',
+ 'icon-zhengshuguanli2',
+ 'icon-zhengshuguanli3',
+ 'icon-zhengshuguanli1',
+ 'icon-zhinan',
+ 'icon-zhongzhi2',
+ 'icon-zhengshuguanli4',
+
+ 'icon-zhongzhi1',
+ 'icon-zhongzhi',
+ 'icon-zhuanjiao1',
+ 'icon-zhuanjia',
+ 'icon-zhuanjiao',
+ 'icon-zidianguanli1',
+ 'icon-zhuanjiao2',
+ 'icon-zidianguanli2',
+
+ 'icon-zuzhijigou1',
+ 'icon-zidianguanli4',
+ 'icon-zidianguanli5',
+ 'icon-zuzhijigou',
+ 'icon-zidianguanli3',
+ 'icon-zidianguanli',
+ 'icon-zuzhijigou2',
+ 'icon-zuixinwanjie',
+
+ 'icon-zidianguanli6',
+ 'icon-fuhe1-copy',
+ 'icon-2zuzhi-xiangmuguanli',
+ 'icon-xx__wanjie',
+ 'icon-007tongji',
+ 'icon-bianzhi1',
+ 'icon-g-shenhe',
+ 'icon-bianzhi',
+
+ 'icon-caiwu2',
+ 'icon-caiwu1',
+ 'icon-caiwu',
+ 'icon-caizhengzuhu',
+ 'icon-caidanguanli2',
+ 'icon-caidanguanli1',
+ 'icon-caizhengyusuanjiandu1',
+]
diff --git "a/src/views/page/const/img/\344\277\235\345\255\230.png" "b/src/views/page/const/img/\344\277\235\345\255\230.png"
new file mode 100644
index 0000000000000000000000000000000000000000..49afd1d8b877f57b4420e40713c53f6fa37181cb
Binary files /dev/null and "b/src/views/page/const/img/\344\277\235\345\255\230.png" differ
diff --git "a/src/views/page/const/img/\345\205\263\351\227\255.png" "b/src/views/page/const/img/\345\205\263\351\227\255.png"
new file mode 100644
index 0000000000000000000000000000000000000000..6c831ddede88f5a8b6a564c25b9d8508970a80a9
Binary files /dev/null and "b/src/views/page/const/img/\345\205\263\351\227\255.png" differ
diff --git a/src/views/page/const/systemIcon.js b/src/views/page/const/systemIcon.js
new file mode 100644
index 0000000000000000000000000000000000000000..ce083efaf0f035a8d3e00a9391a11d9144d890b5
--- /dev/null
+++ b/src/views/page/const/systemIcon.js
@@ -0,0 +1,254 @@
+export default [
+ "icon-tishi",
+ "icon-tishi1",
+ "icon-xiaoxi",
+ "icon-icon-operation",
+ "icon-xiaoxi1",
+ "icon-display",
+ "icon-xiaoxi2",
+ "icon-xiaoxi3",
+
+ "icon-xiala",
+ "icon-qidong",
+ "icon-ShapeCopy",
+ "icon-weibiaoti--",
+ "icon-tishi2",
+ "icon-cha",
+ "icon-shezhi",
+ "icon-daima",
+
+ "icon-baocun_mian",
+ "icon-daima1",
+ "icon-dingshi",
+ "icon-diannao",
+ "icon-diannao-copy",
+ "icon-baocun",
+ "icon-chahao",
+ "icon-qidong1",
+
+ "icon-baocun1",
+ "icon-fasong",
+ "icon-qidong2",
+ "icon-cha1",
+ "icon-dingshi1",
+ "icon-shezhi1",
+ "icon-tishi11",
+ "icon-shengxu",
+
+ "icon-jiantou1",
+ "icon-zu3-copy",
+ "icon-shezhi2",
+ "icon-shezhi21",
+ "icon-baocun2",
+ "icon-fanhui",
+ "icon-shezhi3",
+ "icon-shezhi_mian",
+
+ "icon-fasong1",
+ "icon-right",
+ "icon-fenxiang",
+ "icon-shezhi4",
+ "icon-fanhui2",
+ "icon-daima2",
+ "icon-fenxiang1",
+ "icon-fanhui1",
+
+ "icon-xiala1",
+ "icon-fasongyoujian",
+ "icon-ai-code",
+ "icon-ip",
+ "icon-shoujiguishudi",
+ "icon-leidatu",
+ "icon-sandiantu",
+ "icon-HTTP",
+
+ "icon-random",
+ "icon-zuixinICON--",
+ "icon-jiami",
+ "icon-SQLchaxun",
+ "icon-wangluojiance",
+ "icon-fasongduanxin",
+ "icon-erweima",
+ "icon-IP",
+
+ "icon-tiaoxingtu",
+ "icon-tubiaozhuzhuangtu",
+ "icon-fasongyoujian1",
+ "icon-suiji",
+ "icon-zhuzhuangtutubiao",
+ "icon-IP1",
+ "icon-leidatu1",
+ "icon-mianjitu",
+
+ "icon-fasongyoujian2",
+ "icon-shouji",
+ "icon-mianjitu1",
+ "icon-tiaoxingtu1",
+ "icon-suiji1",
+ "icon-http",
+ "icon-ico",
+ "icon-SQLchaxun1",
+
+ "icon-shujutubiaobingtu-",
+ "icon-suiji2",
+ "icon-shujutubiaobingtu-1",
+ "icon-tubiao1",
+ "icon-lingyitaotubiao-2-60",
+ "icon-fasongduanxin1",
+ "icon-fasongyoujian3",
+ "icon-tubiaozhu",
+
+ "icon-http1",
+ "icon-jiamizhihangshujujiami",
+ "icon-leidatu2",
+ "icon-Http",
+ "icon-tubiao_HL",
+ "icon-tubiaozhexiantu",
+ "icon-qrcode",
+ "icon-shujujiami",
+
+ "icon-sandiantu1",
+ "icon-tubiaobingtu",
+ "icon-danhangwenben1",
+ "icon-fuwenben1",
+ "icon-shangchuanwenjian3",
+ "icon-wenjian-01",
+ "icon-xuanxiangka2",
+ "icon-weihujishuqileixing",
+
+ "icon-xuanze4",
+ "icon-time-circle-fill",
+ "icon-gudingshijian1",
+ "icon-lianjie3",
+ "icon-duoxuanxuanze",
+ "icon-gangwei1",
+ "icon-fuwenbenbianjiqi_wenben",
+ "icon-shangchuantupian",
+
+ "icon-huakuai1",
+ "icon-diqu4",
+ "icon-wenjian3",
+ "icon-danhangwenben",
+ "icon-shangchuan1",
+ "icon-shijian1",
+ "icon-wenjian4",
+ "icon-tubiaoxuanze",
+
+ "icon-shangchuanwenjian4",
+ "icon-add-fill-hover",
+ "icon-shangchuan2",
+ "icon-shangchuan3",
+ "icon-jishuqi",
+ "icon-jilianxuanzeqi",
+ "icon-riqi2",
+ "icon-duohangwenben",
+
+ "icon-shijian",
+ "icon-ic_fengexian",
+ "icon-gangwei2",
+ "icon-duohangwenben1",
+ "icon-switch-close",
+ "icon-tupian",
+ "icon-wangye4",
+ "icon-jilianxuanze",
+
+ "icon-wenzi",
+ "icon-rili11",
+ "icon-shijian2",
+ "icon-jishuqi1",
+ "icon-shiliangzhinengduixiang",
+ "icon-shangchuan4",
+ "icon-shangchuantupian1",
+ "icon-wenjian5",
+
+ "icon-form",
+ "icon-guan",
+ "icon-shangchuan5",
+ "icon-jiaose2",
+ "icon-gangwei3",
+ "icon-xuanze11",
+ "icon-yanse2",
+ "icon-tupian1",
+
+ "icon-jiaosexuanze1",
+ "icon-tupian-copy",
+ "icon-cf-c02",
+ "icon-yanse",
+ "icon-xuanze",
+ "icon-wangye",
+ "icon-biaoge",
+ "icon-lianjie",
+
+ "icon-huakuai",
+ "icon-miaoshu",
+ "icon-colour",
+ "icon-iconfontoptionbutton",
+ "icon-yanse1",
+ "icon-wangye1",
+ "icon-jiahao",
+ "icon-lianjie1",
+
+ "icon-diqu",
+ "icon-diqu1",
+ "icon-department",
+ "icon-user",
+ "icon-file",
+ "icon-wenjian",
+ "icon-tubiao",
+ "icon-yonghu",
+
+ "icon-riqi",
+ "icon-fengexian",
+ "icon-xialakuang",
+ "icon-shangchuanwenjian",
+ "icon-fuwenben",
+ "icon-wenjian1",
+ "icon-jiaose",
+ "icon-xialakuang1",
+
+ "icon-gangwei",
+ "icon-xialakuangbiaodan",
+ "icon-xuanze1",
+ "icon-xiaobiaoti",
+ "icon-huakuai-kai",
+ "icon-tubiao_xuanze",
+ "icon-diqu2",
+ "icon-shangchuan",
+
+ "icon-diqu3",
+ "icon-duoxuanxuan",
+ "icon-xialakuang2",
+ "icon-wenjian2",
+ "icon-guan-copy",
+ "icon-lujing",
+ "icon-miaoshu1",
+ "icon-AntdVueCascader",
+
+ "icon-wangye2",
+ "icon-xuanze2",
+ "icon-xuanxiangka",
+ "icon-riqi1",
+ "icon-tianjiajiahaowubiankuang",
+ "icon-gudingshijian",
+ "icon-iconfontoptionbutton1",
+ "icon-shangchuanwenjian1",
+
+ "icon-shangchuanwenjian2",
+ "icon-xuanxiangka1",
+ "icon-xuanzhong",
+ "icon-miaoshukuangzengjia",
+ "icon-danhang",
+ "icon-duohangwenbenxiawu50021",
+ "icon--tainjia",
+ "icon-wangye3",
+ "icon-lianjie2",
+
+ "icon-xiaobiaoti1",
+ "icon-huakuaiti",
+ "icon-iconfontoptionbutton11",
+ "icon-bumenxuanze",
+ "icon-jiaosexuanze",
+ "icon-jiaose1",
+ "icon-xuanze3",
+ "icon-28fuwenbenkuang"
+]
\ No newline at end of file
diff --git a/src/views/page/const/website.js b/src/views/page/const/website.js
new file mode 100644
index 0000000000000000000000000000000000000000..82d70b7fd50f3e0eff6b866ddacc33e9230da66a
--- /dev/null
+++ b/src/views/page/const/website.js
@@ -0,0 +1,30 @@
+export default {
+ title: '业务运营管理平台',
+ logo: '菜单',
+ key: 'jvs', //配置主键,目前用于存储
+ indexTitle: '业务运营管理平台',
+ whiteList: ['/login', '/404', '/401', '/lock'], // 配置无权限可以访问的页面
+ whiteTagList: ['/login', '/404', '/401', '/lock' ], // 配置不添加tags页面 ('/advanced-router/mutative-detail/*'——*为通配符)
+ lockPage: '/lock',
+ tokenTime: 6000,
+ infoTitle: '业务运营管理平台',
+ statusWhiteList: [428],
+ // 配置首页不可关闭
+ isFirstPage: false,
+ fistPage: {
+ label: '首页',
+ value: '/wel/index',
+ params: {},
+ query: {},
+ group: [],
+ close: false
+ },
+ // 配置菜单的属性
+ menu: {
+ props: {
+ label: 'label',
+ path: 'path',
+ icon: 'icon',
+ }
+ }
+}
diff --git a/src/views/page/plugin/assembly.vue b/src/views/page/plugin/assembly.vue
new file mode 100644
index 0000000000000000000000000000000000000000..fe014ea3e983462912315cb895a73abe3d35e06b
--- /dev/null
+++ b/src/views/page/plugin/assembly.vue
@@ -0,0 +1,652 @@
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/assembly/assembly.js b/src/views/page/plugin/assembly/assembly.js
new file mode 100644
index 0000000000000000000000000000000000000000..33b3ff00397dd9904d9e1bae7a68ca67d38701de
--- /dev/null
+++ b/src/views/page/plugin/assembly/assembly.js
@@ -0,0 +1,13 @@
+export default class assembly {
+ constructor (type,label,span){
+ this.prop = type + new Date().getTime()
+ this.type = type
+ this.label = label
+ this.span = span
+ this.display = true
+ this.tips = {
+ text: "",
+ position: "right"
+ }
+ }
+ }
diff --git a/src/views/page/plugin/assembly/box.js b/src/views/page/plugin/assembly/box.js
new file mode 100644
index 0000000000000000000000000000000000000000..afc4b0dca3afc8cc1c4f91fd06a0542c608c084a
--- /dev/null
+++ b/src/views/page/plugin/assembly/box.js
@@ -0,0 +1,26 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MBox extends assembly{
+ constructor (
+ type='box',
+ label='',
+ span=24,
+ prop='box'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','label','jurisdiction','span','text','contentposition','fontsize','textcolor','fontweight','sqlType'
+ ]
+ this.label = '描述框'
+ this.text = '这是一段描述'
+ this.contentposition = 'center'
+ this.fontsize = 18
+ this.textcolor = '#333'
+ this.boxback = ''
+ this.fontweight = 'normal'
+ this.rules = []
+ this.fontweightOption = ['100','200','300','400','500','600','700','800','900','bold','bolder','lighter','normal','unset']
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/button.js b/src/views/page/plugin/assembly/button.js
new file mode 100644
index 0000000000000000000000000000000000000000..e60bb02d7ba3bb599614b70d377e9f7c5b175500
--- /dev/null
+++ b/src/views/page/plugin/assembly/button.js
@@ -0,0 +1,20 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MButton extends assembly{
+ constructor (
+ type='button',
+ label='按钮',
+ span=24,
+ prop='button'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','label','span','jurisdiction', 'text', 'disabled', 'style']
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ this.text = '按钮'
+ this.eventType = 'url'
+ // 校验
+ this.rules = []
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/cascader.js b/src/views/page/plugin/assembly/cascader.js
new file mode 100644
index 0000000000000000000000000000000000000000..acf68036416d32115300cfaad2a0c9fb2b8da6c2
--- /dev/null
+++ b/src/views/page/plugin/assembly/cascader.js
@@ -0,0 +1,24 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MCascader extends assembly{
+ constructor (
+ type='cascader',
+ label='级联选择',
+ span=24,
+ prop='cascader'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.multiple = false
+ this.showalllevels = true
+ this.collapsetags = false
+ this.emitPath = true
+ this.emitKey = 'uniqueName'
+ this.dictName = '' // 选择树形结构数据,分类字典名称
+ this.showFrom = ['label','span','multiple','prop','sqlType', 'showalllevels', 'collapsetags', 'emitPath', 'cascaderOption', 'disabled'] // , 'regular'
+ this.sqlType = 'array'
+ // 校验
+ this.rules = [
+ { required: false, message: '请选择' + this.label , trigger: 'change' }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/checkbox.js b/src/views/page/plugin/assembly/checkbox.js
new file mode 100644
index 0000000000000000000000000000000000000000..137e49d75d5c763acc08c1c05b2cb6b9c33ff1df
--- /dev/null
+++ b/src/views/page/plugin/assembly/checkbox.js
@@ -0,0 +1,62 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MCheckbox extends assembly{
+ constructor (
+ type='checkbox',
+ label='多选',
+ span=24,
+ prop='checkbox'+ formatKey.numberToString(new Date().getTime()),
+ children=[],
+ ) {
+ super(type,label,span,prop, children);
+ this.showFrom = ['label', 'span', 'prop','sqlType',
+ 'disabled','checkboxtype','datatype','option','url','min','max','defaultValue','defaultUrl', 'hasChildren'
+ ]
+ this.children = children
+ this.linkbind = ''
+ // button
+ this.checkboxtype = 'fang'
+ this.disabled = false
+ this.min = 0
+ this.max = 2
+
+ // 数据类型 option 和 url
+ this.datatype = 'option'
+ // 请求接口
+ this.url = ''
+ // 下拉框的选项
+ this.dicData = [{
+ value: 'Beijing',
+ label: '北京'
+ }, {
+ value: 'Shanghai',
+ label: '上海'
+ }, {
+ value: 'Tianjin',
+ label: '天津'
+ }, {
+ value: 'ChongQing',
+ label: '重庆'
+ }]
+ this.defaultValue = ''
+ this.defaultUrl = ''
+ this.sqlType = 'array'
+ // 字典的label value配置
+ this.props = {
+ label: '',
+ value: ''
+ }
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+ }
+
+ deleteOption (index) {
+ this.dicData.splice(index, 1)
+ }
+ addoption () {
+ this.dicData.push({label: '新的选择', value: ('newValue' + this.dicData.length)})
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/chinaArea.js b/src/views/page/plugin/assembly/chinaArea.js
new file mode 100644
index 0000000000000000000000000000000000000000..1a2cada7a6cc3651da99a5edea3b17a5d323d2a8
--- /dev/null
+++ b/src/views/page/plugin/assembly/chinaArea.js
@@ -0,0 +1,22 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MChinaArea extends assembly{
+ constructor (
+ type='chinaArea',
+ label='地区选择',
+ span=24,
+ prop='chinaArea'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.multiple = false
+ this.showalllevels = true
+ this.collapsetags = false
+ this.emitPath = true
+ this.showFrom = ['label','span','multiple','prop','sqlType', 'showalllevels', 'collapsetags', 'emitPath', 'emitKey', 'disabled'] // , 'regular'
+ this.sqlType = 'array'
+ // 校验
+ this.rules = [
+ { required: false, message: '请选择地区' , trigger: 'change' }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/colorSelect.js b/src/views/page/plugin/assembly/colorSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..4bb308675900a72bd93a7c4eb098f7db5843f98f
--- /dev/null
+++ b/src/views/page/plugin/assembly/colorSelect.js
@@ -0,0 +1,21 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MColorSelect extends assembly{
+ constructor (
+ type='colorSelect',
+ label='颜色选择',
+ span=24,
+ prop='colorSelect'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','label','jurisdiction','span','fontweight','sqlType', 'disabled' // , 'regular' // 'fontsize' // 'text','contentposition', ,'textcolor'
+ ]
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ // 校验
+ this.rules = [
+ { required: false, message: '请选择' + this.label , trigger: 'change' }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/datasource.js b/src/views/page/plugin/assembly/datasource.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c6976109228c4d4d04be588d61e9f1d5ede7455
--- /dev/null
+++ b/src/views/page/plugin/assembly/datasource.js
@@ -0,0 +1,76 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MDatasource extends assembly{
+ constructor (
+ type='datasource',
+ label='自定义选择',
+ span=24,
+ prop='datasource'+ formatKey.numberToString(new Date().getTime()),
+ text='',
+ currVal=''
+ ) {
+ super(type,label,span,prop,text,currVal);
+ this.showFrom = ['label', 'span', 'prop','collapsetags','placeholder',
+ 'disabled','sqlType', 'sourceTable', 'multiple' // , 'regular'
+ ]
+ this.hasChildren = false
+ this.multiple = false
+ this.collapsetags = false
+ this.disabled = false
+ this.filterable = true
+ this.allowcreate = false
+ this.placeholder = '请输入' + this.label
+ this.clearable = true
+ this.defaultValue = ''
+ this.defaultUrl = ''
+ this.sqlType = 'array'
+ this.parentKey = ''
+ // 数据类型 option 和 url
+ this.datatype = 'option'
+ // 请求接口
+ this.url = ''
+ // 下拉框的选项
+ this.dicData = [{
+ value: 'Beijing',
+ label: '北京'
+ }, {
+ value: 'Shanghai',
+ label: '上海'
+ }, {
+ value: 'Tianjin',
+ label: '天津'
+ }, {
+ value: 'ChongQing',
+ label: '重庆'
+ }]
+ this.text = text
+ this.currVal = currVal
+ this.linkbind = ''
+ this.sourceType = ''
+
+ // 校验
+ this.rules = [
+ { required: false, message: '请选择' + this.label , trigger: 'change' },
+ ]
+
+ // 字典的label value配置
+ this.props = {
+ label: '',
+ value: ''
+ }
+
+ this.changeHandle = (val) => {
+ this.currVal = val
+ // this.$emit('changeValHandle', val)
+ // console.log(val,'change...')
+ }
+ }
+
+ deleteOption (index) {
+ this.dicData.splice(index, 1)
+ }
+ addoption () {
+ this.dicData.push({label: '新的选择', value: ('newValue' + this.dicData.length)})
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/datePicker.js b/src/views/page/plugin/assembly/datePicker.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f9fe862ef8c59098fc8ba7aeb7a648abd904523
--- /dev/null
+++ b/src/views/page/plugin/assembly/datePicker.js
@@ -0,0 +1,35 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MDatePicker extends assembly{
+ constructor (
+ type='datePicker',
+ label='日期',
+ span=24,
+ prop='datePicker'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','disabled','placeholder','clearable','startLimit',
+ 'prefixicon','datetype','startplaceholder','endplaceholder','rangeseparator','endLimit','sqlType'
+ ]
+ this.placeholder = '请输入' + this.label
+ this.clearable = false
+ this.disabled = false
+ this.prefixicon = 'el-icon-time'
+ this.datetype = 'date'
+ this.startplaceholder = '开始时间'
+ this.endplaceholder = '结束时间'
+ this.rangeseparator = '至'
+ this.startLimit = ''
+ this.endLimit = ''
+ this.defaultValue = '' //new Date()
+ this.sqlType = 'date'
+ this.linkbind = ''
+
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' }
+ ]
+ }
+
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/department.js b/src/views/page/plugin/assembly/department.js
new file mode 100644
index 0000000000000000000000000000000000000000..3c4fc06d88cb04fd8688e6810d594fdd0323b2cd
--- /dev/null
+++ b/src/views/page/plugin/assembly/department.js
@@ -0,0 +1,22 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MDepartment extends assembly{
+ constructor (
+ type='department',
+ label='部门选择',
+ span=24,
+ prop='department'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.multiple = false
+ this.showalllevels = true
+ this.collapsetags = false
+ this.emitPath = true
+ this.showFrom = ['label','span','multiple','prop','sqlType', 'showalllevels', 'collapsetags', 'emitPath', 'disabled'] // , 'regular'
+ this.sqlType = 'array'
+ // 校验
+ this.rules = [
+ { required: false, message: '请选择部门' , trigger: 'change' }
+ ]
+ }
+}
diff --git a/src/views/page/plugin/assembly/divider.js b/src/views/page/plugin/assembly/divider.js
new file mode 100644
index 0000000000000000000000000000000000000000..631b1d83deaa8e45052d23597ed1f879a12ded6b
--- /dev/null
+++ b/src/views/page/plugin/assembly/divider.js
@@ -0,0 +1,21 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MDivider extends assembly{
+ constructor (
+ type='divider',
+ label='',
+ span=24,
+ prop='divider'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['span','text','contentposition','sqlType'
+ ]
+ this.text = ''
+ this.contentposition = 'center'
+ this.sqlType = 'varchar'
+ this.rules = [
+ ]
+ this.linkbind = ''
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/file.js b/src/views/page/plugin/assembly/file.js
new file mode 100644
index 0000000000000000000000000000000000000000..e28b23114230c96222731ae9dbd7ee643a70221a
--- /dev/null
+++ b/src/views/page/plugin/assembly/file.js
@@ -0,0 +1,20 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MFile extends assembly{
+ constructor (
+ type='file',
+ label='文件',
+ span=24,
+ prop='file'+ formatKey.numberToString(new Date().getTime()),
+ fileList = [{name: '', url: ''}]
+ ) {
+ super(type,label,span,prop,fileList);
+ this.showFrom = ['label', 'span', 'prop','jurisdiction','sqlType']
+ this.fileList = fileList
+ this.rules = []
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'array'
+ this.linkbind = ''
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/fileUpload.js b/src/views/page/plugin/assembly/fileUpload.js
new file mode 100644
index 0000000000000000000000000000000000000000..75ec97bfa066b7fc99ee8710da54b2766e4140e1
--- /dev/null
+++ b/src/views/page/plugin/assembly/fileUpload.js
@@ -0,0 +1,63 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MFileUpload extends assembly{
+ constructor (
+ type='fileUpload',
+ label='上传文件',
+ span=24,
+ prop='fileUpload'+ formatKey.numberToString(new Date().getTime()),
+ action='',
+ multipleUpload = false,
+ limit= 1,
+ fileList=[],
+ headers={},
+ headersStr=''
+ ) {
+ super(type,label,span,prop,action,multipleUpload,fileList,limit,headers);
+ this.showFrom = ['label', 'span', 'prop', 'multipleUpload','action','limit','headers','headersStr','sqlType'] // , 'regular'
+ // 校验
+ this.rules = [
+ { required: false, message: '请上传文件' , trigger: 'change' }
+ ]
+ this.action = action
+ this.multipleUpload = multipleUpload
+ this.fileList = fileList
+ this.limit = limit
+ this.headersStr = headersStr
+ this.headers = headersStr && JSON.parse(headersStr) || {}
+ this.sqlType = 'array'
+ this.linkbind = ''
+ this.uploadHttp = {
+ httpMethod: "POST",
+ requestContentType: "MULTIPART",
+ responseContentType: "JSON",
+ url: "/mgr/jvs-auth/upload/jvs-public"
+ }
+ this.action = "/mgr/jvs-auth/upload/jvs-public"
+
+ this.handleSuccess = (response, file, fileList) => {
+ if(response.code === 0){
+ let obj = {
+ name: file.name,
+ url: response.data.previewUrl
+ }
+ // this.fileList.push(obj)
+ let temp = {
+ key: this.key,
+ fileList: this.fileList
+ }
+ // this.$emit('file', temp)
+ }
+ // console.log(response)
+ // this.fileList = fileList
+ }
+ this.handleError = (err, file, fileList) => {
+ console.log(err)
+ }
+
+ this.handleRemove = (file, fileList) => {
+ this.fileList = fileList
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/format.js b/src/views/page/plugin/assembly/format.js
new file mode 100644
index 0000000000000000000000000000000000000000..9592e0545dcf5033f935577493a1ea03fe57ce26
--- /dev/null
+++ b/src/views/page/plugin/assembly/format.js
@@ -0,0 +1,25 @@
+
+export default class fromat{
+ static numberToString(str) {
+ const converToArray = number => [...`${number}`].map(el => parseInt(el))
+ let temp = []
+ temp = converToArray(str)
+ for(let i in temp) {
+ switch(temp[i]) {
+ case 0: temp[i] = 'a';break;
+ case 1: temp[i] = 'b';break;
+ case 2: temp[i] = 'c';break;
+ case 3: temp[i] = 'd';break;
+ case 4: temp[i] = 'e';break;
+ case 5: temp[i] = 'f';break;
+ case 6: temp[i] = 'g';break;
+ case 7: temp[i] = 'h';break;
+ case 8: temp[i] = 'i';break;
+ case 9: temp[i] = 'j';break;
+ default : temp[i] = 'k';break;
+ }
+ }
+ temp[0] = temp[0].toUpperCase()
+ return temp.join('')
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/formbox.js b/src/views/page/plugin/assembly/formbox.js
new file mode 100644
index 0000000000000000000000000000000000000000..ffa4b0212488622ed71b723563a04626ab9c960c
--- /dev/null
+++ b/src/views/page/plugin/assembly/formbox.js
@@ -0,0 +1,27 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MTableForm extends assembly{
+ constructor (
+ type='formbox',
+ label='表单卡片',
+ col=24,
+ prop='formbox'+ formatKey.numberToString(new Date().getTime()),
+ ) {
+ super(type,label,col,prop);
+ this.showFrom = ['label', 'col', 'prop', 'sqlType']
+ this.sqlType = 'array'
+ // 表格的校验在内部的组件中
+ this.rules = []
+ this.hasChildren = true
+ this.children = []
+ // { key: 'name', type: 'input',label: '名称', rules:[{ required: true, message: '名称不能为空', trigger: 'change'}] },
+ // { key: 'name2', type: 'input',label: '名称2', rules:[{ required: true, message: '名称不能为空', trigger: 'change'}] },
+ }
+ addcolumn (data) {
+ this.children.push(data)
+ }
+ deletecolumn (prop) {
+ this.children = this.children.filter(item => item.prop != prop)
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/htmlEditor.js b/src/views/page/plugin/assembly/htmlEditor.js
new file mode 100644
index 0000000000000000000000000000000000000000..84276c01f601e3792d9520d81215399089f29471
--- /dev/null
+++ b/src/views/page/plugin/assembly/htmlEditor.js
@@ -0,0 +1,20 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MHtmlEditor extends assembly{
+ constructor (
+ type='htmlEditor',
+ label='富文本',
+ span=24,
+ prop='htmlEditor'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','label','jurisdiction', 'disabled'] // , 'regular'
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/iconSelect.js b/src/views/page/plugin/assembly/iconSelect.js
new file mode 100644
index 0000000000000000000000000000000000000000..98bf1f4adb4e0a174b72f21d7bc9bd6fad855c13
--- /dev/null
+++ b/src/views/page/plugin/assembly/iconSelect.js
@@ -0,0 +1,21 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MIconSelect extends assembly{
+ constructor (
+ type='iconSelect',
+ label='图标选择',
+ span=24,
+ prop='iconSelect'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','label','jurisdiction', 'span','fontsize','fontweight','sqlType', 'disabled' // , 'regular' // , 'text' ,'textcolor' ,'contentposition'
+ ]
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ // 校验
+ this.rules = [
+ { required: false, message: '请选择图标' , trigger: 'change' }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/iframe.js b/src/views/page/plugin/assembly/iframe.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b96176daf4becc78023b61e2b9c47a0b1c4397c
--- /dev/null
+++ b/src/views/page/plugin/assembly/iframe.js
@@ -0,0 +1,19 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MIframe extends assembly{
+ constructor (
+ type='iframe',
+ label='',
+ span=24,
+ prop='iframe'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['jurisdiction','span','iframeheight','iframeurl','sqlType']
+ this.iframeheight = ''
+ this.iframeurl = ''
+ this.showJurisdiction = ['所有用户']
+ this.rules = []
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/image.js b/src/views/page/plugin/assembly/image.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f63ed2382a59259cf6074f7e973d96d00377654
--- /dev/null
+++ b/src/views/page/plugin/assembly/image.js
@@ -0,0 +1,31 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MImage extends assembly{
+ constructor (
+ type='image',
+ label='图片',
+ span=24,
+ prop='image'+ formatKey.numberToString(new Date().getTime()),
+ fileList = [],
+ dialogVisible = false,
+ dialogImageUrl = '',
+ ) {
+ super(type,label,span,prop,fileList,dialogImageUrl,dialogVisible,fileList);
+ this.showFrom = ['label', 'span', 'prop','url','fit','jurisdiction','sqlType']
+ this.url = ''
+ this.fit = ''
+ this.fileList = fileList
+ this.rules = []
+ this.dialogImageUrl = dialogImageUrl
+ this.dialogVisible = dialogVisible
+ this.sqlType = 'array'
+ this.linkbind = ''
+
+ this.handlePictureCardPreview = (url) => {
+ this.dialogImageUrl = url;
+ this.dialogVisible = true;
+ }
+ this.showJurisdiction = ['所有用户']
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/imageUpload.js b/src/views/page/plugin/assembly/imageUpload.js
new file mode 100644
index 0000000000000000000000000000000000000000..3f59861fa4acae87570ce1307089d4694c7fed91
--- /dev/null
+++ b/src/views/page/plugin/assembly/imageUpload.js
@@ -0,0 +1,69 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MImageUpload extends assembly{
+ constructor (
+ type='imageUpload',
+ label='上传图片',
+ span=24,
+ prop='imageUpload'+ formatKey.numberToString(new Date().getTime()),
+ action='',
+ dialogVisible = false,
+ dialogImageUrl = '',
+ multipleUpload = false,
+ limit= 1,
+ fileList=[],
+ headers={},
+ headersStr=''
+ ) {
+ super(type,label,span,prop,action,dialogVisible,dialogImageUrl,multipleUpload,fileList,limit,headers);
+ this.showFrom = ['label', 'span', 'prop', 'multipleUpload','action','limit','headers','headersStr','sqlType'] // , 'regular'
+ this.linkbind = ''
+ // 校验
+ this.rules = [
+ { required: false, message: '请上传图片', trigger: 'change' }
+ ]
+ this.action = action
+ this.multipleUpload = multipleUpload
+ this.fileList = fileList
+ this.limit = limit
+ this.dialogImageUrl = dialogImageUrl
+ this.dialogVisible = dialogVisible
+ this.headersStr = headersStr
+ this.headers = headersStr && JSON.parse(headersStr) || {}
+ this.sqlType = 'array'
+ this.uploadHttp = {
+ httpMethod: "POST",
+ requestContentType: "MULTIPART",
+ responseContentType: "JSON",
+ url: "/mgr/jvs-auth/upload/jvs-public"
+ }
+ this.action = "/mgr/jvs-auth/upload/jvs-public"
+
+ this.handleSuccess = (response, file, fileList) => {
+ if(response.code === 0){
+ console.log(response)
+ let obj = {
+ name: file.name,
+ url: response.data.previewUrl
+ }
+ this.fileList.push(obj)
+ let temp = {
+ key: this.key,
+ fileList: this.fileList
+ }
+ this.$emit('file', temp)
+ }
+ }
+ this.handleError = (err, file, fileList) => {
+ console.log(err)
+ }
+ this.handlePictureCardPreview = (file) => {
+ this.dialogImageUrl = file.url;
+ this.dialogVisible = true;
+ }
+ this.handleRemove = (file, fileList) => {
+ this.fileList = fileList
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/input.js b/src/views/page/plugin/assembly/input.js
new file mode 100644
index 0000000000000000000000000000000000000000..fec3b634764838d716d48ba7b5eb5d5db4580078
--- /dev/null
+++ b/src/views/page/plugin/assembly/input.js
@@ -0,0 +1,37 @@
+import assembly from './assembly'
+import formatKey from './format'
+
+export default class MInput extends assembly{
+ constructor (
+ type='input',
+ label='文本框',
+ span=24,
+ prop='input'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','minlength','maxlength','showwordlimit','placeholder','sqlType',
+ 'clearable','showpassword','disabled','prefixicon','suffixicon','prepend','append','defaultValue','regular','defaultUrl'
+ ]
+ this.linkbind = ''
+ this.minlength = 0
+ this.maxlength = 100
+ this.showwordlimit = false
+ this.placeholder = '请输入' + this.label
+ this.clearable = true
+ this.showpassword = false
+ this.disabled = false
+ this.prefixicon = 'el-icon-edit'
+ this.suffixicon = ''
+ this.prepend = ''
+ this.append = ''
+ this.defaultValue = ''
+ this.regularExpression = ''
+ this.regularMessage = ''
+ this.defaultUrl = ''
+ this.sqlType = 'varchar'
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' }
+ ]
+ }
+ }
diff --git a/src/views/page/plugin/assembly/inputNumber.js b/src/views/page/plugin/assembly/inputNumber.js
new file mode 100644
index 0000000000000000000000000000000000000000..8dc1b0f753a177171340785248411cfe35204f67
--- /dev/null
+++ b/src/views/page/plugin/assembly/inputNumber.js
@@ -0,0 +1,32 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MInputNumber extends assembly{
+ constructor (
+ type='inputNumber',
+ label='计数器',
+ span=24,
+ prop='inputNumber'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','min','max','sqlType',
+ 'step','stepstrictly','precision','disabled','controlsposition','placeholder','defaultValue','defaultUrl'
+ ]
+ this.linkbind = ''
+ this.min = 0
+ this.max = 10000
+ this.step = 1
+ this.stepstrictly = false
+ this.precision = 1
+ this.disabled = false
+ this.controlsposition = 'right'
+ this.placeholder = '请输入' + this.label
+ this.defaultValue = null
+ this.defaultUrl = ''
+ this.sqlType = 'double'
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/inputreadonly.js b/src/views/page/plugin/assembly/inputreadonly.js
new file mode 100644
index 0000000000000000000000000000000000000000..2beff1c78b6cf78bc8a9f6c79efe0b20a3c13d1a
--- /dev/null
+++ b/src/views/page/plugin/assembly/inputreadonly.js
@@ -0,0 +1,21 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MInputReadOnly extends assembly{
+ constructor (
+ type='inputReadOnly',
+ label='文本框',
+ span=24,
+ prop='inputReadOnly'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','jurisdiction','sqlType']
+ this.placeholder = '.........'
+ this.disabled = true
+ // 校验
+ this.rules = []
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/link.js b/src/views/page/plugin/assembly/link.js
new file mode 100644
index 0000000000000000000000000000000000000000..745cca9878f05f3b2eabc7a9a2f2e2c0d2fb3da3
--- /dev/null
+++ b/src/views/page/plugin/assembly/link.js
@@ -0,0 +1,28 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MLink extends assembly{
+ constructor (
+ type='link',
+ label='',
+ span=24,
+ prop='link'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','label','jurisdiction','span','text','contentposition','fontsize','textcolor','fontweight','textdecoration','openType','sqlType'
+ ]
+ this.label = '链接'
+ this.text = '显示文字'
+ this.contentposition = 'center'
+ this.fontsize = 16
+ this.textcolor = '#409EFF'
+ this.fontweight = 'normal'
+ this.textdecoration = 'none'
+ this.openType = '_blank'
+ this.rules = []
+ this.fontweightOption = ['100','200','300','400','500','600','700','800','900','bold','bolder','lighter','normal','unset']
+ this.textdecorationOption = ['blink','dashed','dotted','double','inherit','initial','line-through','none','overline','solid','underline','unset','wavy']
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/p.js b/src/views/page/plugin/assembly/p.js
new file mode 100644
index 0000000000000000000000000000000000000000..3b6c3c5a59a4b5d3ffcf219be0e032d108489f0f
--- /dev/null
+++ b/src/views/page/plugin/assembly/p.js
@@ -0,0 +1,23 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MP extends assembly{
+ constructor (
+ type='p',
+ label='',
+ span=24,
+ prop='p'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','span','text','contentposition','fontsize','textcolor','sqlType'
+ ]
+ this.linkbind = ''
+ this.text = '某某表单'
+ this.contentposition = 'center'
+ this.fontsize = 18
+ this.textcolor = '#333'
+ this.sqlType = 'varchar'
+ this.rules = [
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/post.js b/src/views/page/plugin/assembly/post.js
new file mode 100644
index 0000000000000000000000000000000000000000..e841d209691c2a2ec64b8e4c1e90f2ff78d21539
--- /dev/null
+++ b/src/views/page/plugin/assembly/post.js
@@ -0,0 +1,20 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MRole extends assembly{
+ constructor (
+ type='post',
+ label='岗位选择',
+ span=24,
+ prop='post'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.multiple = true
+ this.showFrom = ['label','span','multiple','prop','sqlType', 'disabled'] // , 'regular'
+ this.rules = []
+ this.sqlType = 'array'
+ // 校验
+ this.rules = [
+ { required: false, message: '请选择职位', trigger: 'change' }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/radio.js b/src/views/page/plugin/assembly/radio.js
new file mode 100644
index 0000000000000000000000000000000000000000..9aa57d10522870ca256a9296d730f69e507c1bfb
--- /dev/null
+++ b/src/views/page/plugin/assembly/radio.js
@@ -0,0 +1,71 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MRadio extends assembly{
+ constructor (
+ type='radio',
+ label='单选',
+ span=24,
+ prop='radio'+ formatKey.numberToString(new Date().getTime()),
+ children=[],
+ text='',
+ currVal=''
+ ) {
+ super(type,label,span,prop,children,text,currVal);
+ this.showFrom = ['label', 'span', 'prop', 'sqlType',
+ 'disabled','radiotype','datatype','option','url','defaultValue','defaultUrl','hasChildren'
+ ]
+ // button
+ this.hasChildren = false
+ this.linkbind = ''
+ this.radiotype = 'yuan'
+ this.disabled = false
+ this.children = children
+ this.text = text
+ this.currVal = currVal
+ this.defaultValue = ''
+ this.defaultUrl = ''
+ this.sqlType = 'varchar'
+ this.parentKey = ''
+
+ // 数据类型 option 和 url
+ this.datatype = 'option'
+ // 请求接口
+ this.url = ''
+ // 下拉框的选项
+ this.dicData = [{
+ value: 'Beijing',
+ label: '北京'
+ }, {
+ value: 'Shanghai',
+ label: '上海'
+ }, {
+ value: 'Tianjin',
+ label: '天津'
+ }, {
+ value: 'ChongQing',
+ label: '重庆'
+ }]
+ // 字典的label value配置
+ this.props = {
+ label: '',
+ value: ''
+ }
+ // 校验
+ this.rules = [
+ { required: false, message: '请选择' + this.label , trigger: 'change' },
+ ]
+ this.changeHandle = (val) => {
+ this.currVal = val
+ // this.$emit('changeValHandle', val)
+ // console.log(val,'change...')
+ }
+ }
+
+ deleteOption (index) {
+ this.dicData.splice(index, 1)
+ }
+ addoption () {
+ this.dicData.push({label: '新的选择', value: ('newValue' + this.dicData.length)})
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/reportTable.js b/src/views/page/plugin/assembly/reportTable.js
new file mode 100644
index 0000000000000000000000000000000000000000..35c67093068fb0c256ad8aa71341d9c4cab3e57a
--- /dev/null
+++ b/src/views/page/plugin/assembly/reportTable.js
@@ -0,0 +1,43 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+import Minput from './input'
+export default class MReportTable extends assembly{
+ constructor (
+ type='reportTable',
+ label='静态表格',
+ span=24,
+ prop='reportTable'+ formatKey.numberToString(new Date().getTime()),
+ tableColumn=[]
+ ) {
+ super(type,label,span,prop,tableColumn);
+ this.showFrom = ['label', 'span', 'prop','border','stripe','url','datatype','dicData', 'option'] // 'disabled'
+ this.rules = []
+ this.sqlType = 'object'
+ // 数据类型 option 和 url
+ this.datatype = 'option'
+ // 请求接口
+ this.url = ''
+ // 下拉框的选项
+ this.dicData = [{
+ label: '标题一',
+ value: 'one'
+ }, {
+ label: '标题二',
+ value: 'two'
+ }, {
+ label: '标题三',
+ value: 'three'
+ }]
+
+ this.rowcolumn = "总标题"
+ // 表单表头
+ this.tableColumn = [new Minput()]
+ }
+ addcolumn (data) {
+ this.tableColumn.push(data)
+ }
+ deletecolumn (id) {
+ this.tableColumn = this.tableColumn.filter(item => item.prop != id)
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/role.js b/src/views/page/plugin/assembly/role.js
new file mode 100644
index 0000000000000000000000000000000000000000..7eb7b6e2809c7643798f4aefbde16965af9c6343
--- /dev/null
+++ b/src/views/page/plugin/assembly/role.js
@@ -0,0 +1,20 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MRole extends assembly{
+ constructor (
+ type='role',
+ label='角色选择',
+ span=24,
+ prop='role'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.multiple = true
+ this.showFrom = ['label','span','multiple','prop','sqlType', 'disabled'] // , 'regular'
+ this.rules = []
+ this.sqlType = 'array'
+ // 校验
+ this.rules = [
+ { required: false, message: '请选择角色' , trigger: 'change' }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/select.js b/src/views/page/plugin/assembly/select.js
new file mode 100644
index 0000000000000000000000000000000000000000..fbee3b029bee86edeeb1ae6b6b4882c0f5f41c11
--- /dev/null
+++ b/src/views/page/plugin/assembly/select.js
@@ -0,0 +1,77 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MSelect extends assembly{
+ constructor (
+ type='select',
+ label='下拉框',
+ span=24,
+ prop='select'+ formatKey.numberToString(new Date().getTime()),
+ text='',
+ currVal='',
+ children=[]
+ ) {
+ super(type,label,span,prop,children,text,currVal);
+ this.showFrom = ['label', 'span', 'prop','multiple','collapsetags','placeholder','defaultUrl',
+ 'clearable','disabled','filterable','allowcreate','datatype','option','url','defaultValue','sqlType','hasChildren'
+ ]
+ this.hasChildren = false
+ this.children = children
+ this.multiple = true
+ this.collapsetags = false
+ this.disabled = false
+ this.filterable = true
+ this.allowcreate = false
+ this.placeholder = '请输入' + this.label
+ this.clearable = true
+ this.defaultValue = ''
+ this.defaultUrl = ''
+ this.sqlType = 'array'
+ this.parentKey = ''
+ // 数据类型 option 和 url
+ this.datatype = 'option'
+ // 请求接口
+ this.url = ''
+ // 下拉框的选项
+ this.dicData = [{
+ value: 'Beijing',
+ label: '北京'
+ }, {
+ value: 'Shanghai',
+ label: '上海'
+ }, {
+ value: 'Tianjin',
+ label: '天津'
+ }, {
+ value: 'ChongQing',
+ label: '重庆'
+ }]
+ this.text = text
+ this.currVal = currVal
+ this.linkbind = ''
+
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+
+ // 字典的label value配置
+ this.props = {
+ label: '',
+ value: ''
+ }
+
+ this.changeHandle = (val) => {
+ this.currVal = val
+ // this.$emit('changeValHandle', val)
+ // console.log(val,'change...')
+ }
+ }
+
+ deleteOption (index) {
+ this.dicData.splice(index, 1)
+ }
+ addoption () {
+ this.dicData.push({label: '新的选择', value: ('newValue' + this.dicData.length)})
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/slider.js b/src/views/page/plugin/assembly/slider.js
new file mode 100644
index 0000000000000000000000000000000000000000..d4bd0bdd51a61e71857e7e108e991c05ade7808f
--- /dev/null
+++ b/src/views/page/plugin/assembly/slider.js
@@ -0,0 +1,34 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MSlider extends assembly{
+ constructor (
+ type='slider',
+ label='滑块',
+ span=24,
+ prop='slider'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','min','max','defaultUrl',
+ 'disabled','step','showstops','showinput','range','defaultValue','sqlType'
+ ]
+ this.linkbind = ''
+ this.min = 0
+ this.max = 100
+ this.disabled = false
+ this.step = 1
+ this.showstops = false
+ this.showinput = false
+ // 多选
+ this.range = false
+ this.defaultValue = null
+ this.defaultUrl = ''
+ this.sqlType = 'double'
+
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+ }
+
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/step.js b/src/views/page/plugin/assembly/step.js
new file mode 100644
index 0000000000000000000000000000000000000000..8bc6a67fadce99514e255871cd434e889ab12d14
--- /dev/null
+++ b/src/views/page/plugin/assembly/step.js
@@ -0,0 +1,67 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MStep extends assembly{
+ constructor (
+ type='step',
+ label='步骤条',
+ span=24,
+ prop='step'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','url','datatype','dicData','jurisdiction','sqlType', 'option']
+ // 数据类型 option 和 url
+ this.datatype = 'option'
+ // 请求接口
+ this.url = ''
+ // 下拉框的选项
+ this.dicData = [{
+ label: '步骤一',
+ name: 'first'
+ }, {
+ label: '步骤二',
+ name: 'second'
+ }, {
+ label: '步骤三',
+ name: 'third'
+ }]
+
+ this.activeName = this.dicData[0].name
+ this.column = {} // 选项对应的表单项
+ // 校验
+ this.rules = []
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'object'
+ this.linkbind = ''
+
+ this.toolAlign = 'center'
+ this.props = {
+ label: '',
+ value: ''
+ }
+ }
+ addcolumn (key,data) {
+ if(!this.column[key]) {
+ this.column[key] = []
+ }
+ this.column[key].push(data)
+ }
+ deletecolumn (key,prop) {
+ this.column[key] = this.column[key].filter(item => item.prop != prop)
+ console.log(this.column)
+ }
+ deletedicData (index) {
+ this.dicData.splice(index, 1)
+ }
+ adddicData () {
+ let obj = {}
+ let key = 'newValue' + this.dicData.length
+ obj[key] = []
+ this.column[key] = obj
+ this.dicData.push({label: '新的选择', value: ('newValue' + this.dicData.length)})
+ }
+ handleClick(activeName) {
+ if(activeName || activeName === 0 || activeName === false) {
+ this.activeName = activeName
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/switch.js b/src/views/page/plugin/assembly/switch.js
new file mode 100644
index 0000000000000000000000000000000000000000..083af600b52009766129b5274400cc0617bc31cd
--- /dev/null
+++ b/src/views/page/plugin/assembly/switch.js
@@ -0,0 +1,33 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MSwitch extends assembly{
+ constructor (
+ type='switch',
+ label='开关',
+ span=24,
+ prop='switch'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','disabled','activetext','inactivetext',
+ 'activecolor','inactivecolor','defaultValue','defaultUrl','sqlType','hasChildren'
+ ]
+ this.linkbind = ''
+ this.hasChildren = false
+ this.children = []
+ this.disabled = false
+ this.activetext = '开'
+ this.inactivetext = '关'
+ this.activecolor = '#409EFF'
+ this.inactivecolor = '#C0CCDA'
+ this.defaultValue = false
+ this.defaultUrl = ''
+ this.sqlType = 'bit'
+
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+ }
+
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/tab.js b/src/views/page/plugin/assembly/tab.js
new file mode 100644
index 0000000000000000000000000000000000000000..3d5bea300ed26064338bd75d73f91c6b1e6f0f5f
--- /dev/null
+++ b/src/views/page/plugin/assembly/tab.js
@@ -0,0 +1,85 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MTab extends assembly{
+ constructor (
+ type='tab',
+ label='选项卡',
+ span=24,
+ prop='tab'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','url','datatype','dicData','jurisdiction','sqlType', 'option']
+ // 数据类型 option 和 url
+ this.datatype = 'option'
+ // 请求接口
+ this.url = ''
+ // 下拉框的选项
+ this.dicData = [{
+ label: '选项一',
+ name: 'first'
+ }, {
+ label: '选项二',
+ name: 'second'
+ }, {
+ label: '选项三',
+ name: 'third'
+ }]
+
+ this.activeName = this.dicData[0].name
+ this.column = {} // 选项对应的表单项
+ // 校验
+ this.rules = []
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'object'
+ this.linkbind = ''
+ }
+ addcolumn (key,data) {
+ if(!this.column[key]) {
+ this.column[key] = []
+ }
+ this.column[key].push(data)
+ // let index = 0
+ // for(let i in this.dicData){
+ // if(this.dicData[i].value === key){
+ // index = i
+ // }
+ // }
+ // if(!this.column[index]){
+ // let obj = {}
+ // obj[this.dicData[index].value] = []
+ // this.column[index] = obj
+ // }
+ // if(!this.column[index][this.dicData[index].value]) {
+ // this.column[index][this.dicData[index].value] = []
+ // }
+ // console.log(this.column[index][this.dicData[index].value])
+ // this.column[index][this.dicData[index].value].push(data)
+ }
+ deletecolumn (key,prop) {
+ this.column[key] = this.column[key].filter(item => item.prop != prop)
+ // let index = 0
+ // for(let i in this.dicData){
+ // if(this.dicData[i].value === key){
+ // index = i
+ // }
+ // }
+ // this.column[index][this.dicData[index].value] = this.column[index][this.dicData[index].value].filter(item => item.prop != prop)
+ console.log(this.column)
+ }
+ deletedicData (index) {
+ this.dicData.splice(index, 1)
+ }
+ adddicData () {
+ let obj = {}
+ let key = 'newValue' + this.dicData.length
+ obj[key] = []
+ this.column[key] = obj
+ this.dicData.push({label: '新的选择', value: ('newValue' + this.dicData.length)})
+ }
+ handleClick(activeName) {
+ // console.log(activeName)
+ if(activeName || activeName === 0 || activeName === false) {
+ this.activeName = activeName
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/tableform.js b/src/views/page/plugin/assembly/tableform.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd572220072c4e39e649232fb0ab14c1760af519
--- /dev/null
+++ b/src/views/page/plugin/assembly/tableform.js
@@ -0,0 +1,41 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+import Minput from './input'
+export default class MTableForm extends assembly{
+ constructor (
+ type='tableForm',
+ label='表格',
+ span=24,
+ prop='tableForm'+ formatKey.numberToString(new Date().getTime()),
+ tableColumn=[]
+ ) {
+ super(type,label,span,prop,tableColumn);
+ this.showFrom = ['label', 'span', 'prop','border','stripe','sqlType', 'editable'] // 'disabled'
+
+ this.border = true
+ this.page = false
+ this.editable = true
+ this.addBtn = true
+ this.addBtnFormCode = ""
+ this.editBtn = true
+ this.editBtnFormCode = ""
+ this.viewBtn = true
+ this.delBtn = true
+ this.stripe = false
+ this.sqlType = 'array'
+ // 表格的校验在内部的组件中
+ this.rules = []
+ // 表单表头
+ this.tableColumn = [new Minput()]
+ this.menuFix = false
+ // { key: 'name', type: 'input',label: '名称', rules:[{ required: true, message: '名称不能为空', trigger: 'change'}] },
+ // { key: 'name2', type: 'input',label: '名称2', rules:[{ required: true, message: '名称不能为空', trigger: 'change'}] },
+ }
+ addcolumn (data) {
+ this.tableColumn.push(data)
+ }
+ deletecolumn (id) {
+ this.tableColumn = this.tableColumn.filter(item => item.prop != id)
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/textarea.js b/src/views/page/plugin/assembly/textarea.js
new file mode 100644
index 0000000000000000000000000000000000000000..bded6042d06f66964fb0c3ee1efab9a947c9c07f
--- /dev/null
+++ b/src/views/page/plugin/assembly/textarea.js
@@ -0,0 +1,31 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MTextarea extends assembly{
+ constructor (
+ type='textarea',
+ label='文本域',
+ span=24,
+ prop='textarea'+ formatKey.numberToString(new Date().getTime()),
+ rows=1
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','rows','minlength','maxlength','showwordlimit','placeholder',
+ 'clearable','disabled','defaultValue','sqlType'
+ ]
+ this.linkbind = ''
+ this.rows = rows
+ this.minlength = 0
+ this.maxlength = 100
+ this.showwordlimit = false
+ this.placeholder = '请输入' + this.label
+ this.clearable = true
+ this.disabled = false
+ this.defaultValue = ''
+ this.sqlType = 'varchar'
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+ }
+}
diff --git a/src/views/page/plugin/assembly/textareareadonly.js b/src/views/page/plugin/assembly/textareareadonly.js
new file mode 100644
index 0000000000000000000000000000000000000000..66568c5765334be63ded505f9fb9dbe0717ade84
--- /dev/null
+++ b/src/views/page/plugin/assembly/textareareadonly.js
@@ -0,0 +1,22 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MTextareaReadOnly extends assembly{
+ constructor (
+ type='textareaReadOnly',
+ label='文本域',
+ span=24,
+ prop='textareaReadOnly'+ formatKey.numberToString(new Date().getTime()),
+ rows=1
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','jurisdiction', 'sqlType']
+ this.disabled = true
+ this.placeholder = '.........'
+ // 校验
+ this.rules = []
+ this.showJurisdiction = ['所有用户']
+ this.sqlType = 'varchar'
+ this.linkbind = ''
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/timeline.js b/src/views/page/plugin/assembly/timeline.js
new file mode 100644
index 0000000000000000000000000000000000000000..2b90ea46e37b8324730bf4a21540f4a60007e571
--- /dev/null
+++ b/src/views/page/plugin/assembly/timeline.js
@@ -0,0 +1,17 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MTimeLine extends assembly{
+ constructor (
+ type='timeline',
+ label='时间线',
+ span=24,
+ prop='timeline'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['prop','span']
+ this.timestamp = 'timestamp'
+ this.content = 'content'
+ this.rules = []
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/timepicker.js b/src/views/page/plugin/assembly/timepicker.js
new file mode 100644
index 0000000000000000000000000000000000000000..ff377197a5202cd947b0cf618233a54a730cb6dc
--- /dev/null
+++ b/src/views/page/plugin/assembly/timepicker.js
@@ -0,0 +1,39 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MTimepicker extends assembly{
+ constructor (
+ type='timePicker',
+ label='任意时间',
+ span=24,
+ prop='timepicker'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','disabled','placeholder','clearable','pickeroptions',
+ 'prefixicon','isrange','startplaceholder','endplaceholder','rangeseparator','sqlType'
+ ]
+ this.linkbind = ''
+ this.disabled = false
+ this.placeholder = '请输入' + this.label
+ this.clearable = false
+ this.prefixicon = 'el-icon-time'
+
+ this.isrange = false
+ this.startplaceholder = '开始时间'
+ this.endplaceholder = '结束时间'
+ this.rangeseparator = '至'
+ this.defaultValue = new Date()
+ this.sqlType = 'date'
+ this.pickeroptions = {
+ start: '09:00',
+ end: '18:00',
+ step: ''
+ }
+
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+ }
+
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/timeselect.js b/src/views/page/plugin/assembly/timeselect.js
new file mode 100644
index 0000000000000000000000000000000000000000..545eab05d35b37a518a18f491d7758ac2ea15f79
--- /dev/null
+++ b/src/views/page/plugin/assembly/timeselect.js
@@ -0,0 +1,35 @@
+
+import assembly from './assembly'
+import formatKey from './format'
+export default class MTimepicker extends assembly{
+ constructor (
+ type='timeSelect',
+ label='固定时间',
+ span=24,
+ prop='timeselect'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.showFrom = ['label', 'span', 'prop','disabled','placeholder','pickeroptions','clearable','sqlType',
+ 'prefixicon'
+ ]
+ this.linkbind = ''
+ this.disabled = false
+ this.placeholder = '请输入' + this.label
+ this.clearable = false
+ this.prefixicon = 'el-icon-time'
+
+ this.pickeroptions = {
+ start: '09:00',
+ end: '18:00',
+ step: '00:15'
+ }
+ this.defaultValue = this.pickeroptions.start
+ this.sqlType = 'date'
+
+ // 校验
+ this.rules = [
+ { required: false, message: '请输入' + this.label , trigger: 'change' },
+ ]
+ }
+
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assembly/user.js b/src/views/page/plugin/assembly/user.js
new file mode 100644
index 0000000000000000000000000000000000000000..b27b06875ca8f84c5185eb326933ba924447bbf3
--- /dev/null
+++ b/src/views/page/plugin/assembly/user.js
@@ -0,0 +1,21 @@
+import assembly from './assembly'
+import formatKey from './format'
+export default class MUser extends assembly{
+ constructor (
+ type='user',
+ label='用户选择',
+ span=24,
+ prop='user'+ formatKey.numberToString(new Date().getTime())
+ ) {
+ super(type,label,span,prop);
+ this.multiple = false
+ this.allowinput = false
+ this.showFrom = ['label','span','multiple','prop','sqlType', 'allowinput', 'disabled'] // , 'regular'
+ this.rules = []
+ this.sqlType = 'array'
+ // 校验
+ this.rules = [
+ { required: false, message: '请选择用户', trigger: 'change' }
+ ]
+ }
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/assemblyCreate.js b/src/views/page/plugin/assemblyCreate.js
new file mode 100644
index 0000000000000000000000000000000000000000..02a5d7e60d39871f40b88921e4a4257da11a1e92
--- /dev/null
+++ b/src/views/page/plugin/assemblyCreate.js
@@ -0,0 +1,132 @@
+/**
+ * 用于查询条件设置组件
+ * 后期可用于优化
+ * 2021-04-22
+ */
+
+import MInput from './assembly/input'
+import MTextarea from './assembly/textarea'
+import MInputNumber from './assembly/inputNumber'
+import MSelect from './assembly/select'
+// import Mtable from './assembly/tableform'
+import Mswitch from './assembly/switch'
+import MSlider from './assembly/slider'
+import Mtimeselect from './assembly/timeselect'
+import MTimepicker from './assembly/timepicker'
+import MDatePicker from './assembly/datePicker'
+import MRadio from './assembly/radio'
+import MCheckbox from './assembly/checkbox'
+import MDivider from './assembly/divider'
+import MP from './assembly/p'
+
+import MImageUpload from './assembly/imageUpload'
+import MFileUpload from './assembly/fileUpload'
+
+import MColorSelect from './assembly/colorSelect'
+import MIconSelct from './assembly/iconSelect'
+
+import MTab from './assembly/tab'
+import MTableForm from './assembly/tableform'
+
+import MDepartment from './assembly/department'
+import MRole from './assembly/role'
+import MUser from './assembly/user'
+import MPost from './assembly/post'
+import MChinaArea from './assembly/chinaArea'
+
+// 详情
+import MInputReadOnly from './assembly/inputreadonly'
+import MTextareaReadOnly from './assembly/textareareadonly'
+import MImage from './assembly/image'
+import MFile from './assembly/file'
+import MBox from './assembly/box'
+import MLink from './assembly/link'
+import MIframe from './assembly/iframe'
+
+// 2020-04-20 新增
+import MHtmlEditor from './assembly/htmlEditor'
+import MButton from './assembly/button'
+import MCascader from './assembly/cascader'
+import MDatasource from './assembly/datasource'
+
+export const createFormItem = function(type) {
+ let obj={}
+ // 表单
+ if (type==='input') {
+ obj=new MInput()
+ } else if (type==='textarea') {
+ obj=new MTextarea()
+ } else if (type==='inputNumber') {
+ obj=new MInputNumber()
+ } else if (type==='select') {
+ obj=new MSelect()
+ } else if (type==='switch') {
+ obj=new Mswitch()
+ } else if (type==='slider') {
+ obj=new MSlider()
+ } else if (type==='timeSelect') {
+ obj=new Mtimeselect()
+ } else if (type==='timePicker') {
+ obj=new MTimepicker()
+ } else if (type==='datePicker') {
+ obj=new MDatePicker()
+ } else if (type==='radio') {
+ obj=new MRadio()
+ } else if (type==='checkbox') {
+ obj=new MCheckbox()
+ } else if (type==='tableForm') {
+ obj=new MTableForm()
+ } else if (type==='divider') {
+ obj=new MDivider()
+ } else if (type==='p') {
+ obj=new MP()
+ } else if (type==='imageUpload') {
+ obj=new MImageUpload()
+ } else if (type==='fileUpload') {
+ obj=new MFileUpload()
+ } else if (type==='colorSelect') {
+ obj=new MColorSelect()
+ } else if (type==='iconSelect') {
+ obj=new MIconSelct()
+ } else if (type==='tab') {
+ obj=new MTab()
+ } else if (type==='department') {
+ obj=new MDepartment()
+ } else if (type==='role') {
+ obj=new MRole()
+ } else if (type==='user') {
+ obj=new MUser()
+ } else if (type==='post') {
+ obj=new MPost()
+ } else if (type==='chinaArea') {
+ obj=new MChinaArea()
+ }
+ // 详情
+ else if (type==='inputReadOnly') {
+ obj=new MInputReadOnly()
+ } else if (type==='textareaReadOnly') {
+ obj=new MTextareaReadOnly()
+ } else if (type==='image') {
+ obj=new MImage()
+ } else if (type==='file') {
+ obj=new MFile()
+ } else if (type==='box') {
+ obj=new MBox()
+ } else if (type==='link') {
+ obj=new MLink()
+ } else if (type==='iframe') {
+ obj=new MIframe()
+ }
+
+ // 2021-04-20 新增
+ else if (type==='htmlEditor') {
+ obj=new MHtmlEditor()
+ } else if (type==='button') {
+ obj=new MButton()
+ } else if (type==='cascader') {
+ obj=new MCascader()
+ } else if (type==='datasource') {
+ obj=new MDatasource()
+ }
+ return obj
+}
\ No newline at end of file
diff --git a/src/views/page/plugin/attributeform.vue b/src/views/page/plugin/attributeform.vue
new file mode 100644
index 0000000000000000000000000000000000000000..042da5e6b54125af2bf659877985b00461a0c09b
--- /dev/null
+++ b/src/views/page/plugin/attributeform.vue
@@ -0,0 +1,2826 @@
+
+
+
+
+ 关联流程
+
+
+
+
+
+
+
+
+
+
+
+ 必填
+
+
+
+
+
+ 必填
+ 此id已存在!
+
+
+
+
+
+ 删除
+
+
+
+
+ 增加表单
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.fieldKey }}
+
+
+
+
+ 字段名称不能为系统关键字
+ 由英文字母组成
+
+
+
+
+
+ {{ item.columnComment }}
+ {{ item.fieldName }}
+
+
+ 字段名称不能为系统关键字
+ 由英文字母组成
+
+
+
+
+
+ {{defaultLimitText}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 设计表单
+
+
+
+ 配置
+
+
+
+ 设计表单
+
+
+
+ 设计表单
+
+
+ 配置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 网络设置
+ 打开地址
+
+
+
+
+
+
+
+
+
+
+
+ 配置
+
+
+
+ 配置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 格式错误
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 按钮
+ 回显
+ 删除
+
+
+
+
+ 增加选项
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 配置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+ 增加选项
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 配置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.columnComment }}
+ {{ item.fieldName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+ 增加选项
+
+
+
+
+
+
+
+
+ {{ item.columnComment }}
+ {{ item.fieldName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+ 增加选项
+
+
+
+
+ {{ item.columnComment }}
+ {{ item.fieldName }}
+
+
+
+
+
+
+
+ {{ item.columnComment }}
+ {{ item.fieldName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 配置
+
+
+
+ 配置
+
+
+
+
+
+
+ 配置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 必填
+
+
+
+
+
+
+
+ 配置
+
+
+
+
+
+
+
+ 参数
+ 删除
+
+
+
+
+ 增加按钮
+
+
+
+
+
+
+
+
+ 必填
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+ 增加按钮
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+ 添加
+
+
+ 确定
+ 取消
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 必填
+
+
+
+
+
+
+
+
+
+ 配置
+
+
+
+
+
+
+
+
+
+ 上一步
+ 下一步
+ 不跳转
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+ 添加
+
+
+
+
+
+ 保存
+ 取消
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 必填
+
+
+
+
+
+
+ 配置
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 参数
+ 删除
+
+
+
+
+ 增加按钮
+
+
+
+
+ 确认
+ 取消
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/components/dialogInfo.vue b/src/views/page/plugin/components/dialogInfo.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3e2f1c71f17c146ec59cc41e6881f06d49e9db62
--- /dev/null
+++ b/src/views/page/plugin/components/dialogInfo.vue
@@ -0,0 +1,389 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/plugin/datasource.vue b/src/views/page/plugin/datasource.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7ffbce9337691daf5374d04fc5d91f6730d5d663
--- /dev/null
+++ b/src/views/page/plugin/datasource.vue
@@ -0,0 +1,460 @@
+
+
+
+ {{labelText ? labelText : '数据来源'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+ 添加
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+ 添加
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+ 新增一行
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/design/detailDesign.vue b/src/views/page/plugin/design/detailDesign.vue
new file mode 100644
index 0000000000000000000000000000000000000000..5df9150c7a530fd7388d133dee319eaa7422f38c
--- /dev/null
+++ b/src/views/page/plugin/design/detailDesign.vue
@@ -0,0 +1,336 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/design/formDesign.vue b/src/views/page/plugin/design/formDesign.vue
new file mode 100644
index 0000000000000000000000000000000000000000..329867ee51b6a6ab550c7e5eea44befb40ac2162
--- /dev/null
+++ b/src/views/page/plugin/design/formDesign.vue
@@ -0,0 +1,619 @@
+
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/design/levelDesign.vue b/src/views/page/plugin/design/levelDesign.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9fbeff8b24ca8ca83c7d13e1795f70193ebd77a8
--- /dev/null
+++ b/src/views/page/plugin/design/levelDesign.vue
@@ -0,0 +1,300 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/design/process.vue b/src/views/page/plugin/design/process.vue
new file mode 100644
index 0000000000000000000000000000000000000000..18f6c8855ca4b88b9e459eab1b8d894b3ec0bacf
--- /dev/null
+++ b/src/views/page/plugin/design/process.vue
@@ -0,0 +1,440 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/design/processDesign.vue b/src/views/page/plugin/design/processDesign.vue
new file mode 100644
index 0000000000000000000000000000000000000000..0878acb44293e97dcf0e05431346f8db046b6699
--- /dev/null
+++ b/src/views/page/plugin/design/processDesign.vue
@@ -0,0 +1,575 @@
+
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/formItemSetting.vue b/src/views/page/plugin/formItemSetting.vue
new file mode 100644
index 0000000000000000000000000000000000000000..141375c72bc208bf4fd5996dd77c68c0e6c60607
--- /dev/null
+++ b/src/views/page/plugin/formItemSetting.vue
@@ -0,0 +1,1125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+ 增加选项
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.columnComment }}
+ {{
+ item.fieldName
+ }}
+
+
+
+
+
+
+ {{ item.columnComment }}
+ {{
+ item.fieldName
+ }}
+
+
+
+
+
+
+ {{ item.columnComment }}
+ {{
+ item.fieldName
+ }}
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/forms.vue b/src/views/page/plugin/forms.vue
new file mode 100644
index 0000000000000000000000000000000000000000..eb456be62d2368ac53a743ecebbd412582c7a5a4
--- /dev/null
+++ b/src/views/page/plugin/forms.vue
@@ -0,0 +1,1056 @@
+
+
+
+ {{title}}
+ 导出
+
+ 导入
+
+ 数据结构
+ 保存
+ 预览
+
+
+
+
+
+
+
+
+
+
+
+
自定义JSQL
+
+
+
+
JSQL
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/reportTable.vue b/src/views/page/plugin/reportTable.vue
new file mode 100644
index 0000000000000000000000000000000000000000..4b770c0dcf067a6f025a4f2070c16ecdd431ba0a
--- /dev/null
+++ b/src/views/page/plugin/reportTable.vue
@@ -0,0 +1,359 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{bi.label}}
+
+
+
+
+ |
+
+
+
+
+ |
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/sectionForm.vue b/src/views/page/plugin/sectionForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..43456b66225bb5835c1d9006339c712251c3829c
--- /dev/null
+++ b/src/views/page/plugin/sectionForm.vue
@@ -0,0 +1,576 @@
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/showForm.vue b/src/views/page/plugin/showForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e51cb85f71a4582aa074e3c117cb68282e8f564a
--- /dev/null
+++ b/src/views/page/plugin/showForm.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
提交信息
+
+
+
+ {{item.name}}
+
+
+ 审核
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/stepBar.vue b/src/views/page/plugin/stepBar.vue
new file mode 100644
index 0000000000000000000000000000000000000000..03cfe8810173eac788e6c02b5040b6441275137c
--- /dev/null
+++ b/src/views/page/plugin/stepBar.vue
@@ -0,0 +1,708 @@
+
+
+
+
+
+
+
+
+
+
+
*
+
+
+
+
+
+
+
+
+
+
+
+
{{ci.text}}
+
+
{{ci.text}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{bi.name}}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/tabForm.vue b/src/views/page/plugin/tabForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..4d07562e6a10694bacc47bdd6423d9a315eaed00
--- /dev/null
+++ b/src/views/page/plugin/tabForm.vue
@@ -0,0 +1,638 @@
+
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/tableForm.vue b/src/views/page/plugin/tableForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..301ad688ace9d8d4e819d965f564ef9034790204
--- /dev/null
+++ b/src/views/page/plugin/tableForm.vue
@@ -0,0 +1,338 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+ this.dynamicValidateForm.domains.push({})">新增
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/plugin/userForm.vue b/src/views/page/plugin/userForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b74e49faaa5244a28b2f8704226e396061d9408a
--- /dev/null
+++ b/src/views/page/plugin/userForm.vue
@@ -0,0 +1,374 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ node.label }}
+
+
+
+
+ {{scope.row.roleName | formatRoleName}}
+
+
+
+
+ 确定
+ 取消
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/router.js b/src/views/page/router.js
new file mode 100644
index 0000000000000000000000000000000000000000..90748d12a03757fe23e8b137f94a55c3a49946b1
--- /dev/null
+++ b/src/views/page/router.js
@@ -0,0 +1,124 @@
+let path = ''
+export default [
+ {
+ path: path + '/pageList',
+ name: '列表页',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/list/index'),
+ meta: {
+ keepAlive: false,
+ isTab: true,
+ isAuth: false
+ }
+ },
+ {
+ path: path + '/form',
+ name: '表单设计',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/show/formDesignList'),
+ meta: {
+ keepAlive: false,
+ isTab: true,
+ isAuth: false
+ }
+ },
+ {
+ path: path + '/formList',
+ name: '表单设计',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/form/list'),
+ meta: {
+ keepAlive: false,
+ isTab: true,
+ isAuth: false
+ }
+ },
+ {
+ path: path + '/form/info',
+ name: '表单',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/show/info'),
+ meta: {
+ keepAlive: true,
+ isTab: true,
+ isAuth: false
+ }
+ },
+ {
+ path: path + '/design',
+ name: '列表设计页',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/design/list'),
+ meta: {
+ keepAlive: true,
+ isTab: true,
+ isAuth: false
+ }
+ },
+ {
+ path: path + '/crud/design',
+ name: '列表设计',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/list/design'),
+ meta: {
+ keepAlive: true,
+ isTab: true,
+ isAuth: false
+ }
+ },
+ {
+ path: path + '/show',
+ name: '详情页',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/show/list'),
+ meta: {
+ keepAlive: true,
+ isTab: true,
+ isAuth: false
+ }
+ },
+ {
+ path: path + '/normalform/design',
+ name: '普通表单设计器',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/form/normal'),
+ meta: {
+ keepAlive: true,
+ isTab: true,
+ isAuth: false
+ }
+ },
+ {
+ path: path + '/levelform/design',
+ name: '多级表单设计器',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/form/level'),
+ meta: {
+ keepAlive: true,
+ isTab: true,
+ isAuth: false
+ }
+ },
+ {
+ path: path + '/stepform/design',
+ name: '步骤表单设计器',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/form/step'),
+ meta: {
+ keepAlive: true,
+ isTab: true,
+ isAuth: false
+ }
+ },
+ {
+ path: path + '/detailform/design',
+ name: '详情表单设计器',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/form/detail'),
+ meta: {
+ keepAlive: true,
+ isTab: true,
+ isAuth: false
+ }
+ }
+]
diff --git a/src/views/page/views/design/coder.vue b/src/views/page/views/design/coder.vue
new file mode 100644
index 0000000000000000000000000000000000000000..33e23a853f6476b0444d269e700bb5582d52a7a1
--- /dev/null
+++ b/src/views/page/views/design/coder.vue
@@ -0,0 +1,93 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/views/design/datasourceDesign.vue b/src/views/page/views/design/datasourceDesign.vue
new file mode 100644
index 0000000000000000000000000000000000000000..89e446082c6e3b083d662ecacdcfb5c7da97ade6
--- /dev/null
+++ b/src/views/page/views/design/datasourceDesign.vue
@@ -0,0 +1,739 @@
+
+
+
+
+
+
+ -
+ {{item.info}}
+ {{item.tableName}}
+
+
+
+
+
+
+
+
+ 关联字段:
+
+
+
+
+
+
+
+
+
+
+
+ 显示字段:
+
+
+
+
+
+
+ 关联关系:
+
+
+
+
+
+
+ 确定
+ 取消
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/views/design/list.vue b/src/views/page/views/design/list.vue
new file mode 100644
index 0000000000000000000000000000000000000000..8f8120d15ac81035f8e8ba1f12eab91dbeea5fcb
--- /dev/null
+++ b/src/views/page/views/design/list.vue
@@ -0,0 +1,1417 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 版本号:
+
+
+
+
+
+
+ 回滚
+ 取消
+
+
+
+
+
+
+
列表数据结构
+
+
+
+
+
查询条件数据结构
+
+
+
+
+
+
+
自定义JSQL
+
+
+
+
JSQL
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/views/design/list/basic.vue b/src/views/page/views/design/list/basic.vue
new file mode 100644
index 0000000000000000000000000000000000000000..2114a4741a13fa779e2d8d29a2a1b0f3c4b47f23
--- /dev/null
+++ b/src/views/page/views/design/list/basic.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/views/design/list/button.vue b/src/views/page/views/design/list/button.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3e664b869ecd9b25ce8818bad5bc175636343c22
--- /dev/null
+++ b/src/views/page/views/design/list/button.vue
@@ -0,0 +1,1423 @@
+
+
+
+
+
+
diff --git a/src/views/page/views/design/list/customStatistics.vue b/src/views/page/views/design/list/customStatistics.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e052881e487dfe897f2266a5def966c397b24d4a
--- /dev/null
+++ b/src/views/page/views/design/list/customStatistics.vue
@@ -0,0 +1,309 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/views/design/list/iframe.vue b/src/views/page/views/design/list/iframe.vue
new file mode 100644
index 0000000000000000000000000000000000000000..57d0ae78c28596a17f209c74d6614d0cfbf067b5
--- /dev/null
+++ b/src/views/page/views/design/list/iframe.vue
@@ -0,0 +1,72 @@
+
+
+
+ 页面地址:
+
+
+
+
+
+
+ 展示位置:
+ 顶部
+ 底部
+
+
+ 高度:
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/views/design/list/parameter.vue b/src/views/page/views/design/list/parameter.vue
new file mode 100644
index 0000000000000000000000000000000000000000..318d6fe430cd30743a97026d73ef781c4dd07752
--- /dev/null
+++ b/src/views/page/views/design/list/parameter.vue
@@ -0,0 +1,81 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/views/design/list/search.vue b/src/views/page/views/design/list/search.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3860986c6c1eeaddc8c1fd305aa03110f0596991
--- /dev/null
+++ b/src/views/page/views/design/list/search.vue
@@ -0,0 +1,394 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/views/design/list/sort.vue b/src/views/page/views/design/list/sort.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b3a570cfa28d9c518eb833b6814b9e37b1807929
--- /dev/null
+++ b/src/views/page/views/design/list/sort.vue
@@ -0,0 +1,123 @@
+
+
+
+
+ 删除
+
+
+
+ 新增一行
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/views/design/list/table.vue b/src/views/page/views/design/list/table.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3b79623101a0fff02dfe9f130f9864800160cf0a
--- /dev/null
+++ b/src/views/page/views/design/list/table.vue
@@ -0,0 +1,1424 @@
+
+
+
+
+
+
diff --git a/src/views/page/views/form/detail.vue b/src/views/page/views/form/detail.vue
new file mode 100644
index 0000000000000000000000000000000000000000..5812b2093038c73f8deaf01cb024bdc6169eaa68
--- /dev/null
+++ b/src/views/page/views/form/detail.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/views/form/level.vue b/src/views/page/views/form/level.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3dce4e7fc279757d8e9369d707e8ac7f4a79b58b
--- /dev/null
+++ b/src/views/page/views/form/level.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/views/form/list.vue b/src/views/page/views/form/list.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9f060b385a5048288b0a61c2f82adc1f9572899a
--- /dev/null
+++ b/src/views/page/views/form/list.vue
@@ -0,0 +1,682 @@
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+ 设计
+ 发布
+ 卸载
+
+ 删除
+
+
+ {{getFormTypeText(scope.row.type)}}
+
+
+ {{getIsDeployText(scope.row.isDeploy)}}
+
+
+ 复制
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/views/form/normal.vue b/src/views/page/views/form/normal.vue
new file mode 100644
index 0000000000000000000000000000000000000000..151d32b7354a31546b9b38cfbbf55569b92f3996
--- /dev/null
+++ b/src/views/page/views/form/normal.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/views/form/process.vue b/src/views/page/views/form/process.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c0a9246cc9ee12664d2e1f93322410d7e1cf94b0
--- /dev/null
+++ b/src/views/page/views/form/process.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/views/form/step.vue b/src/views/page/views/form/step.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c44f8a1d108a72e038b92eaae041105220320cff
--- /dev/null
+++ b/src/views/page/views/form/step.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/views/list/design.vue b/src/views/page/views/list/design.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b7a6093b14ad30f294df299d3fc9a1eff4c1a877
--- /dev/null
+++ b/src/views/page/views/list/design.vue
@@ -0,0 +1,482 @@
+
+
+
+
+
+
+
{{infoData.name}}
+
{{infoData.isDeploy ? '已发布' : '未发布'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 上一步
+ 下一步
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 所有的数据都会以网络请求到此地址进行数据转换。可进行业务二次对接。
+
+
+
+
+ {{ scope.row.desc }}
+
+
+
+
+ 回调地址
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/views/list/index.vue b/src/views/page/views/list/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..688c6c4a5e1eb02df69593c672e37d5f2cc53d16
--- /dev/null
+++ b/src/views/page/views/list/index.vue
@@ -0,0 +1,824 @@
+
+
+
+
+ 新增
+
+
+
+
+
+ 编辑
+ 设计
+ 发布
+ 卸载
+
+ 删除
+
+
+ {{getIsDeployText(scope.row.isDeploy)}}
+
+
+ 复制
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 请选择上级菜单
+
+
+
+
+
+
+ 选择模式
+
+ 设计
+ 开发
+
+
+ 确定
+ 取消
+
+
+
+
+
+
diff --git a/src/views/page/views/list/menu.vue b/src/views/page/views/list/menu.vue
new file mode 100644
index 0000000000000000000000000000000000000000..77f1e0062fa7191af7b752e99cfd4f8b414b9d88
--- /dev/null
+++ b/src/views/page/views/list/menu.vue
@@ -0,0 +1,530 @@
+
+
+
+
+
+
diff --git a/src/views/page/views/show/dialogInfo.vue b/src/views/page/views/show/dialogInfo.vue
new file mode 100644
index 0000000000000000000000000000000000000000..bdd04dfbc1e58fd88ab6caa47e6b12938f58631d
--- /dev/null
+++ b/src/views/page/views/show/dialogInfo.vue
@@ -0,0 +1,396 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/page/views/show/formDesignList.vue b/src/views/page/views/show/formDesignList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..d745204df505623275200aecf75c8705007cd180
--- /dev/null
+++ b/src/views/page/views/show/formDesignList.vue
@@ -0,0 +1,1093 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{designData.name || data.name}}
+
{{designData.isDeploy ? '已发布' : '未发布'}}
+
+
+
{{data.name || data.name}}
+
{{data.isDeploy ? '已发布' : '未发布'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PC
+ Mobile
+ 双端
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 所有的数据都会以网络请求到此地址进行数据转换。可进行业务二次对接。
+
+
+
+
+ {{ scope.row.desc }}
+
+
+
+
+ 回调地址
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/page/views/show/info.vue b/src/views/page/views/show/info.vue
new file mode 100644
index 0000000000000000000000000000000000000000..8157c53b8ad4007cc72bf9e64ad2dcfcc2746344
--- /dev/null
+++ b/src/views/page/views/show/info.vue
@@ -0,0 +1,526 @@
+
+
+
+
+
+
diff --git a/src/views/page/views/show/list.vue b/src/views/page/views/show/list.vue
new file mode 100644
index 0000000000000000000000000000000000000000..29a466716cf29b77039684a04eba40848e1a1055
--- /dev/null
+++ b/src/views/page/views/show/list.vue
@@ -0,0 +1,1396 @@
+
+
+
+
+

+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+ {{scope.row[item.prop]}}
+
+
+
+
+
+
+
+
+
+ {{item.name}}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/report/components/common.js b/src/views/report/components/common.js
new file mode 100644
index 0000000000000000000000000000000000000000..1f6b4fea97a360c3eef7604071e7adcf15b9fe96
--- /dev/null
+++ b/src/views/report/components/common.js
@@ -0,0 +1,466 @@
+import Vue from 'vue'
+import { Message,MessageBox } from 'element-ui'
+import MSG_LIST from './message'
+import moment from 'moment'
+import {getSelectData} from "@/api/index"
+const commonUtil = {}
+/**
+ * @description:消息展示
+ * @param showClose 是否显示关闭按钮 boolean message 消息内容 type 消息类型 success/warning/info/error duration 显示时间, 毫秒。设为 0 则不会自动关闭
+ */
+commonUtil.showMessage = function(obj)
+{
+ Message({
+ showClose: (obj.showClose == undefined)?true:obj.showClose,
+ message: obj.message,
+ type: (obj.type == undefined)?'success':obj.type,
+ duration: (obj.duration == undefined)?3000:obj.duration
+ })
+}
+
+/**
+ * @description: 获取错误消息
+ * @param msgid 消息的key
+ * @param msgParams 消息参数
+ */
+commonUtil.getMessageFromList = function(msgid,msgParams)
+{
+ let msg = MSG_LIST[msgid];
+ if ($.trim(msg) == "") {
+ msg = msgid + "[该消息不存在。]";
+ return msg;
+ }
+ if (msgParams != null) {
+ for (var i=0; i 0)
+ {
+ for (let index = 0; index < responseData.data.length; index++) {
+ tableData.push(responseData.data[index])
+ }
+ }
+ tablePage.pageTotal = Number(responseData.total);
+ }
+}
+//清空map对象
+commonUtil.clearObj = function(obj)
+{
+ for(var i in obj) {
+ if(obj[i] instanceof Array)
+ {
+ obj[i] = [];
+ }else if(obj[i] instanceof Object)
+ {
+ obj[i] = Object;
+ }
+ else{
+ obj[i] = null;
+ }
+
+ }
+}
+
+commonUtil.removeEmpty = function (obj)
+{
+ for(var i in obj)
+ {
+ if(obj[i] == "")
+ {
+ delete obj[i]
+ }
+ }
+}
+
+//获取uuid
+commonUtil.getUuid = function()
+{
+ var len = 32;//32长度
+ var radix = 16;//16进制
+ var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
+ var uuid = [], i;
+ radix = radix || chars.length;
+ if(len) {
+ for(i = 0; i < len; i++)uuid[i] = chars[0 | Math.random() * radix];
+ } else {
+ var r;
+ uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
+ uuid[14] = '4';
+ for(i = 0; i < 36; i++) {
+ if(!uuid[i]) {
+ r = 0 | Math.random() * 16;
+ uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
+ }
+ }
+ }
+ return uuid.join('');
+}
+//对象赋值
+commonUtil.coperyProperties = function(target,source)
+{
+ if(source.id)
+ {
+ target.id = source.id;
+ }
+ for(var i in target) {
+ if(i in source)
+ {
+ target[i] = source[i];
+ }
+
+ }
+}
+
+//获取表格数据字典值,数据字典定义在前台js文件中
+commonUtil.getTableCodeName = function(prop,row,codeType)
+{
+ var value = row[prop];
+ return commonUtil.getDictionaryValueName(codeType,value)
+}
+
+//获取表格数据字典值
+commonUtil.formatterTableValue = function(row, column)
+{
+ var type = column.property;
+ var value = row[column.property];
+ if(type)
+ {
+ return commonUtil.getDictionaryValueName(type,value)
+ }else{
+ return "-"
+ }
+}
+//获取表格数据字典值,数据字典定义在前台js文件中
+commonUtil.returnScore = function(prop,row,codeType)
+{
+ if(row.appealStatus.toString() == '3'){
+ return row.score
+ }else{
+ return " "
+ }
+}
+commonUtil.getSystemCodeName = function(prop,row,codeType)
+{
+ var value = row[prop];
+ let result = commonUtil.getSysCodeValueName(value,codeType);
+ return result;
+}
+
+/**
+ * @description: 获取后台定义的数据字典名称
+ * @param {type}
+ */
+commonUtil.getSysCodeValueName = function(value,codeType)
+{
+ var codeValues = JSON.parse(localStorage.getItem("codeValues"));
+ return codeValues[codeType+":"+value]?codeValues[[codeType+":"+value]]:"";
+}
+
+/**
+ * @description: 根据数据字典类型获取数据字典所有的值
+ * @param {codeType} 数据字典类型
+ */
+commonUtil.getSysCodeValues = function(codeType){
+ let result = [];
+ let data = commonUtil.doSyncPost("/api/sysCodeValue/selectValByType",{codeType:codeType});
+ result = data.responseData;
+ return result;
+}
+
+/**
+ * @description: 根据地区编码获取地区
+ * @param {areaCode} 地区编码
+ */
+commonUtil.getAreaName = function(areaCode)
+{
+ let areaName = "";
+ let data = commonUtil.doSyncPost("/api/sysArea/getAreaNameByCode",{areaCode:areaCode});
+ areaName = data.responseData;
+ return areaName;
+}
+/**
+ * @description: 获取下级地区,如果要获取一级地区则传'000000'
+ * @param {type}
+ */
+commonUtil.getNextArea = function(areaCode)
+{
+ let areas = [];
+ let data = commonUtil.doSyncPost("/api/sysArea/getNextAreasByCode",{areaCode:areaCode});
+ areas = data.responseData;
+ return areas;
+}
+/**
+ * @description: 初始化所有数据字典的值
+ * @param {type}
+ */
+commonUtil.initCodeTypeValue = function(){
+ let data = commonUtil.doSyncPost("/api/sysCodeValue/getAllVal",{});
+ // commonUtil.codeValues = data.responseData;
+ localStorage.setItem("codeValues", JSON.stringify(data.responseData));
+}
+
+commonUtil.formArea = function(prop,row){
+ return row.provinceName+row.cityName+row.reginName
+}
+
+commonUtil.disabled = function(){
+ return true;
+}
+commonUtil.undisabled = function(){
+ return false;
+}
+
+//三个连续字符判断
+commonUtil.LxStr = function(str){
+ var arr = str.split('');
+ var flag = true;
+ for (var i = 1; i < arr.length-1; i++) {
+ var firstIndex = arr[i-1].charCodeAt();
+ var secondIndex = arr[i].charCodeAt();
+ var thirdIndex = arr[i+1].charCodeAt();
+ if((thirdIndex - secondIndex == 1)&&(secondIndex - firstIndex==1)){
+ flag = false;
+ return flag;
+ }
+
+ }
+ for (var i = 1; i < arr.length-1; i++) {
+ var firstIndex = arr[i-1].charCodeAt();
+ var secondIndex = arr[i].charCodeAt();
+ var thirdIndex = arr[i+1].charCodeAt();
+ if((firstIndex - secondIndex == 1)&&(secondIndex - thirdIndex==1)){
+ flag = false;
+ return flag
+ }
+ }
+ return flag;
+}
+//设置cookie
+commonUtil.setCookie = function(key,value) {
+ //字符串拼接cookie
+ window.document.cookie = key+"="+value;
+}
+
+//获取cookie
+commonUtil.getCookie = function(key){
+ if (window.document.cookie.length > 0){
+ var arr = document.cookie.split('; ');
+ for (var i = 0; i < arr.length; i++) {
+ var arr2 = arr[i].split('='); //再次切割
+ //判断查找相对应的值
+ if (arr2[0] == key) {
+ return arr2[1];
+ }
+ }
+ }
+}
+//校验身份证的合法性
+commonUtil.idcardValid = function(code){
+ if(!code)
+ {
+ return true;
+ }
+ code = code.toUpperCase();
+ var city = {11: "北京",12: "天津",13: "河北",14: "山西",15: "内蒙古",21: "辽宁",22: "吉林",23: "黑龙江 ",31: "上海",32: "江苏",33: "浙江",34: "安徽",35: "福建",
+ 36: "江西",37: "山东",41: "河南",42: "湖北 ",43: "湖南",44: "广东",45: "广西",46: "海南",50: "重庆",51: "四川",52: "贵州",53: "云南",54: "西藏 ",61: "陕西",62: "甘肃",
+ 63: "青海",64: "宁夏",65: "新疆",71: "台湾",81: "香港",82: "澳门",91: "国外 "};
+ if(!city[code.substr(0, 2)])
+ {
+ return false;
+ }else{
+ code = code.split('');
+ //∑(ai×Wi)(mod 11)
+ //加权因子
+ var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
+ //校验位
+ var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
+ var sum = 0;
+ var ai = 0;
+ var wi = 0;
+ for(var i = 0; i < 17; i++) {
+ ai = code[i];
+ wi = factor[i];
+ sum += ai * wi;
+ }
+ var last = parity[sum % 11];
+ if(parity[sum % 11] != code[17]) {
+ return false;
+ }
+ }
+ return true;
+}
+
+//form表单校验身份证号是否合法
+commonUtil.idcardValidator = function(rule, value, callback){
+ if(commonUtil.idcardValid(value))
+ {
+ callback();
+ }else{
+ callback(new Error(commonUtil.getMessageFromList("error.idcard.validate")));
+ }
+}
+//启用禁用显示
+commonUtil.label = function(row){
+ if(row.status == 1)
+ {
+ return "禁用";
+ }else{
+ return "启用";
+ }
+}
+/**
+*判断是否是数字
+*
+**/
+commonUtil.isRealNum = function (val){
+ // isNaN()函数 把空串 空格 以及NUll 按照0来处理 所以先去除,
+ if(val === "" || val ==null){
+ return false;
+ }
+ if(!isNaN(val)){
+ //对于空数组和只有一个数值成员的数组或全是数字组成的字符串,isNaN返回false,例如:'123'、[]、[2]、['123'],isNaN返回false, //所以如果不需要val包含这些特殊情况,则这个判断改写为if(!isNaN(val) && typeof val === 'number' )
+ return true;
+ } else{
+ return false;
+ }
+}
+
+//秒转时分秒
+commonUtil.secondToDate = function (result) {
+ var h = Math.floor(result / 3600) < 10 ? '0' + Math.floor(result / 3600) : Math.floor(result / 3600);
+ var m = Math.floor((result / 60 % 60)) < 10 ? '0' + Math.floor((result / 60 % 60)) : Math.floor((result / 60 % 60));
+ var s = Math.floor((result % 60)) < 10 ? '0' + Math.floor((result % 60)) : Math.floor((result % 60));
+ result = h + "小时" + m + "分" + s + "秒";
+ return result;
+}
+commonUtil.isNumber = function(val){
+ if (isNaN(val)) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+//判断值是否是空
+commonUtil.isEmpty = function(val)
+{
+ var result = false;
+ if(!val || val == null || val == '')
+ {
+ result = true;
+ }
+ return result;
+}
+
+//从数组中获取元素和下标
+commonUtil.getItemIndexFromList = function (list, attr, val) {
+ var result = {
+ index:-1,
+ item:null
+ };
+ if (list && list.length > 0) {
+ for (let index = 0; index < list.length; index++) {
+ const element = list[index];
+ if (val == element[attr]) {
+ result.index = index;
+ result.item = element;
+ break;
+ }
+ }
+ }
+ return result;
+}
+
+//生成随机16进制颜色
+commonUtil.color16 = function(){
+ var str = "#";
+ //一个十六进制的值的数组
+ var arr = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];
+ for (var i=0;i<6;i++){
+ var num = parseInt(Math.random()*16); //随机产生0-15之间的一个数
+ str += arr[num]; //产生的每个随机数都是一个索引,根据索引找到数组中对应的值,拼接到一起
+ }
+ return str;
+}
+export default commonUtil;
diff --git a/src/views/report/components/message.js b/src/views/report/components/message.js
new file mode 100644
index 0000000000000000000000000000000000000000..7b6056e35d710a9e533ca6f8486b6e3fa9438b2c
--- /dev/null
+++ b/src/views/report/components/message.js
@@ -0,0 +1,81 @@
+let MSG_LIST = new Array();
+//错误消息start
+MSG_LIST["error.system"] = "系统异常,请重试。";
+MSG_LIST["error.input.notnull"] = "{0}不能为空。";
+MSG_LIST["error.input.length"] = "{0}长度为{1}到{2}个字符之间。";
+MSG_LIST["error.input.min.length"] = "{0}输入长度请大于等于{1}个字符。";
+MSG_LIST["error.input.max.length"] = "{0}输入长度请小于等于{1}个字符。";
+MSG_LIST["error.input.format"] = "{0}请输入{1}格式的数据。";
+MSG_LIST["error.date.format"] = "{0}格式错误,请选择日期。";
+MSG_LIST["error.checkbox.notnull"] = "请至少选择一个{0}。";
+MSG_LIST["error.select.notnull"] = "请选择{0}。";
+MSG_LIST["error.regexp.format"] = "{0}输入格式错误,请重新输入。";
+MSG_LIST["error.mobile.format"] = "{0}请输入正确的手机号码。";
+MSG_LIST["error.phone.format"] = "{0}请输入正确的座机号码。";
+MSG_LIST["error.mobilephone.format"] = "请输入正确的手机号码或者座机号码。";
+MSG_LIST["error.idcard.format"] = "请输入正确的身份证号。";
+MSG_LIST["error.input.float.format"] = "{0}小数点后请保留{1}位以内。";
+MSG_LIST["error.batchdelete.empty"] = "请选择需要删除的数据。";
+MSG_LIST["error.sort.input"] = "排序请输入正整数";
+MSG_LIST["error.score.input"] = "分值请输入正整数";
+MSG_LIST["error.sort.input.max"] = "排序请输入小于999999的正整数";
+MSG_LIST["error.delete"] = "数据删除失败,请重试。";
+MSG_LIST["error.upload"] = "文件上传失败,请重试。";
+MSG_LIST["error.upload.empty"] = "请选择需要上传的文件。";
+MSG_LIST["error.upload.exceed"] = "最多可上传{0}个文件。";
+MSG_LIST["error.upload.type"] = "文件{0}无法上传,请上传格式为{1}结尾的文件。";
+MSG_LIST["error.auth.select"] = "请选择授权内容。";
+MSG_LIST["error.length.range"] = "{0}长度范围错误,maxLength需要大于等于minLength。";
+MSG_LIST["error.number.range"] = "{0}请输入大于等于{1}小于等于{2}的数。";
+MSG_LIST["error.number.min"] = "{0}请输入大于等于{1}的数。";
+MSG_LIST["error.number.max"] = "{0}请输入小于等于{1}的数。";
+MSG_LIST["error.compare.range"] = "{0}大小范围错误,max需要大于等于min";
+MSG_LIST["error.search.param"] = "查询参数错误,请检查必须参数是否填写,已填写的参数格式是否正确";
+MSG_LIST["error.identify.code"] = "验证码输入错误,请重新输入。";
+MSG_LIST["error.org.role.param"] = "请先选择用户所属组织。";
+MSG_LIST["error.confirmpwd"] = "两次密码输入的不一致,请重新输入。";
+MSG_LIST["error.menutype.select"] = "请先选择菜单类型。";
+MSG_LIST["error.hospital.select"] = "请选择医院。";
+MSG_LIST["error.dept.select"] = "请选择科室。";
+MSG_LIST["error.add.doctorhospital"] = "请添加医生执业机构。";
+MSG_LIST["error.doctorhospital.select"] = "执业机构中有非系统数据。";
+MSG_LIST["error.add.repeat"] = "{0}已添加,不允许重复添加。";
+MSG_LIST["error.idcard.validate"] = "无效的身份证号码,请重新输入。";
+MSG_LIST["error.upload.size"] = "文件太大,请上传{0}M以内的文件。";
+MSG_LIST["error.authtype.select"] = "请选择入驻类型。";
+MSG_LIST["error.accountName.format"] = "账号格式错误,请输入字母数字,字符允许.@_-,长度为8到18位。";
+MSG_LIST["error.doctor.select"] = "请选择医生。";
+MSG_LIST["error.exist.isDefault"] = "已经设置默认执业地点,不允许重复设置。";
+MSG_LIST["error.exist.isMain"] = "已经设置主执业地点,不允许重复设置。";
+MSG_LIST["error.doctorhospital.isDefault"] = "未禁用的执业地点请设置一个执业机构为默认执业地点。";
+MSG_LIST["error.doctorhospital.isMain"] = "未禁用的执业地点请设置一个执业机构为主执业地点。";
+MSG_LIST["error.fee.added"] = "该职称的诊费已设置。";
+MSG_LIST["error.fees.empty"] = "请添加诊费设置。";
+MSG_LIST["error.notexist.hospital"] = "该医院档案不存在,请先创建医院档案或选择医院档案";
+MSG_LIST["error.notexist.approvalStatus"] = "请勾选审核意见";
+MSG_LIST["error.notexist.dept"] = "该科室档案不存在,请先创建医院科室档案或选择医院科室档案";
+MSG_LIST["error.notexist.reason"] = "审批意见不存在";
+MSG_LIST["error.notexist.changeType"] = "请选择审批类型";
+MSG_LIST["error.suggestionfee.compare"] = "建议诊费设置错误,结束值不能小于开始值";
+MSG_LIST["error.suggestionfee.region"] = "请添加应用城市。";
+MSG_LIST["error.video.outdate"] = "视频文件最多保存14天,该视频文件已过期,无法下载。";
+
+//错误消息end
+
+//确认消息start
+MSG_LIST["confirm.delete.select"] = "此操作将会删除选中数据,是否继续?";
+MSG_LIST["confirm.delete"] = "此操作将会删除数据,是否继续?";
+MSG_LIST["confirm.stopaccount"] = "此操作将会禁用掉该医院下的所有后台账号和医生账号,是否继续?";
+MSG_LIST["confirm.startaccount"] = "此操作将会启用该医院下的所有后台账号和医生账号,是否继续?";
+MSG_LIST["confirm.delete.primarydept"] = "确定删除此一级科室?删除后,此科室下的二级科室将同步删除。";
+MSG_LIST["confirm.delete.data"] = "确定删除{0}?";
+MSG_LIST["confirm.delete.recommenddept"] = "确定删除此科室?删除后科室下的推荐医生将同步删除。";
+MSG_LIST["confirm.savebatch.hospitalfee"] = "确定提交该医院对应职称下所有医生的服务规则?确定则提交此页的所有设置项,点击取消关闭此页面。";
+MSG_LIST["confirm.delete.suggestionfee"] = "确定删除此条诊费建议范围?";
+//确认消息end
+
+//通知成功消息start
+MSG_LIST["info.delete"] = "数据删除成功。";
+MSG_LIST["info.apitest.success"] = "接口测试成功,返回数据结构:{0}";
+//通知成功消息end
+export default MSG_LIST;
diff --git a/src/views/report/components/screen/api.js b/src/views/report/components/screen/api.js
new file mode 100644
index 0000000000000000000000000000000000000000..49e9d43d299ddfeca2f082579eb7eb54204f0bbd
--- /dev/null
+++ b/src/views/report/components/screen/api.js
@@ -0,0 +1,9 @@
+import request from '@/router/axios'
+let base = '/mgr/report'
+// 获取设计
+export function xxxx (id) {
+ return request({
+ url: base + `/api/screen/template/${id}`,
+ method: 'get'
+ })
+}
\ No newline at end of file
diff --git a/src/views/report/components/screen/draggables.js b/src/views/report/components/screen/draggables.js
new file mode 100644
index 0000000000000000000000000000000000000000..c6782062295b237057027f281ae098acd912a9df
--- /dev/null
+++ b/src/views/report/components/screen/draggables.js
@@ -0,0 +1,8 @@
+import draggablesComponent from './draggables.vue';
+
+const draggables={
+ install: function (Vue) {
+ Vue.component('draggables', draggablesComponent)
+ }
+}
+export default draggables
\ No newline at end of file
diff --git a/src/views/report/components/screen/draggables.vue b/src/views/report/components/screen/draggables.vue
new file mode 100644
index 0000000000000000000000000000000000000000..5f518f95c46f6409ff250cbb28c4de98b03aff00
--- /dev/null
+++ b/src/views/report/components/screen/draggables.vue
@@ -0,0 +1,470 @@
+
+
+
+
+
+ {{ item.content }}
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+ -
+ 序号
+ {{ column.name }}
+
+
+
+
+
+
+
+ {{ t + 1 }}
+ {{ d[column.key] }}
+
+
+
+
+
+
+ 复制
+ 删除
+
+
+
+
+
+
+
diff --git a/src/views/report/components/screen/tabform.js b/src/views/report/components/screen/tabform.js
new file mode 100644
index 0000000000000000000000000000000000000000..d6be579c28ff7bc162d2df672e6885e376027dfe
--- /dev/null
+++ b/src/views/report/components/screen/tabform.js
@@ -0,0 +1,7 @@
+import tabFormComponent from './tabform.vue';
+const tabForm={
+ install: function (Vue) {
+ Vue.component('tabForm', tabFormComponent)
+ }
+}
+export default tabForm
diff --git a/src/views/report/components/screen/tabform.vue b/src/views/report/components/screen/tabform.vue
new file mode 100644
index 0000000000000000000000000000000000000000..a697d73ab97304f516e99aff3ce864ed04cb5ecb
--- /dev/null
+++ b/src/views/report/components/screen/tabform.vue
@@ -0,0 +1,2287 @@
+
+
+
+
+
+
+
+ px
+
+
+
+
+ px
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 自定义
+ 接口
+ 数据集
+
+ 编辑
+ 接口配置
+ 数据集配置
+
+
+
+
+
+
+ ms
+
+
+
+
+ pt
+
+
+
+
+
+
+
+
+
+
+ px
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 秒
+
+
+
+
+
+
+
+
+
+
+
+ 新增
+ 重置
+
+
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+ 自定义
+ 接口
+ 数据集
+
+ 编辑
+ 接口配置
+ 数据集配置
+
+
+
+
+
+
+ ms
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+ %
+
+
+
+
+
+
+
+
+ px
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+
+
+ px
+
+
+
+
+
+
+
+
+
+
+ pt
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+ px
+
+
+
+
+
+
+
+
+ pt
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+ 行
+
+
+
+
+
+
+
+
+ ms
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+
+
+ 自定义
+ 接口
+ 数据集
+
+ 编辑
+ 接口配置
+ 数据集配置
+
+
+
+ 自定义
+ 接口
+ 数据集
+
+ 编辑
+ 接口配置
+ 数据集配置
+
+
+
+
+
+
+ ms
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ pt
+
+
+
+
+
+
+
+
+
+
+ px
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ post请求
+ get请求
+
+
+
+
+ 添加参数
+
+
+
+
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+ 添加属性
+
+
+
+
+ 删除
+
+
+
+ 返回值属性说明
+
+
+ 接口测试
+
+
+
+
+
+
+
+ 添加数据集管理数据集
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 执行
+ 格式化
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ %
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/report/components/screen/tabformjs.js b/src/views/report/components/screen/tabformjs.js
new file mode 100644
index 0000000000000000000000000000000000000000..84d45455448290777e675a40176229ae1a0766cd
--- /dev/null
+++ b/src/views/report/components/screen/tabformjs.js
@@ -0,0 +1,1225 @@
+import Vue from 'vue'
+import VueCodemirror from 'vue-codemirror';
+import 'codemirror/lib/codemirror.css';
+Vue.use(VueCodemirror);
+import validate from '../validate'
+Vue.use(validate);
+import { codemirror } from 'vue-codemirror'
+import sqlFormatter from "sql-formatter";
+import 'codemirror/mode/javascript/javascript.js'
+import 'codemirror/lib/codemirror.css'
+import 'codemirror/addon/hint/show-hint.css'
+import 'codemirror/theme/eclipse.css';
+import 'codemirror/theme/material-palenight.css';
+import "codemirror/addon/fold/foldgutter.css"
+import 'codemirror/addon/fold/foldcode.js';
+import 'codemirror/addon/fold/foldgutter.js';
+import 'codemirror/addon/fold/xml-fold.js';
+import 'codemirror/addon/fold/indent-fold.js';
+import "codemirror/addon/fold/brace-fold";
+import 'codemirror/addon/fold/markdown-fold.js';
+import 'codemirror/addon/fold/comment-fold.js';
+import 'codemirror/addon/selection/active-line';
+// import 'codemirror/addon/edit/closeBrackets';
+// import 'codemirror/addon/edit/matchBrackets';
+import 'codemirror/addon/hint/sql-hint.js';
+import Axios from 'axios'
+import store from "@/store";
+import commonUtil from '../common'
+
+import ImageSelect from "@/views/chart/components/imageSelect/ImageSelect"; // progress bar style
+
+export default {
+ components: {ImageSelect},
+ props: {
+ component: {
+ type: Object,
+ default: () => ({})
+ },
+ chartsComponents: {
+ type: Object,
+ default: () => ({}),
+ },
+ },
+ data () {
+ return {
+ dialogVisible: false, // 选择图片
+ defaultLabel: '',
+ paramInfo: null,
+ commonUtil: commonUtil,
+ commonConstants: {
+ componentsType: {
+ panel: "panel", //画布
+ text: "text", //文本
+ picture: "picture", //图片
+ histogram: "histogram", //柱状图
+ lineChart: "lineChart", //折线图
+ pieChart: "pieChart", //饼图
+ gauge: "gauge", //仪表盘
+ table: "table", //表格
+ date: "date", //日期
+ delete: "delete", //删除的组件
+ },
+ },
+ selectUtil: {
+ textType: [
+ { value: "text", label: "普通文本" },
+ { value: "marquee", label: "滚动文本" },
+ { value: "link", label: "超链接" },
+ ],
+ textAlign: [
+ { value: "left", label: "左对齐" },
+ { value: "center", label: "居中对齐" },
+ { value: "right", label: "右对齐" },
+ ],
+ fontWeight: [
+ { value: "normal", label: "正常" },
+ { value: "bold", label: "加粗" },
+ ],
+ chartTheme: [
+ { value: "dark", label: "默认" },
+ { value: "dark-blue", label: "dark-blue" },
+ { value: "fresh-cu", label: "fresh-cu" },
+ { value: "gray", label: "gray" },
+ { value: "green", label: "green" },
+ { value: "macarons2", label: "macarons2" },
+ { value: "red", label: "red" },
+ { value: "vintage", label: "vintage" },
+ ],
+ orient: [
+ { value: "horizontal", label: "水平" },
+ { value: "vertical", label: "垂直" },
+ ],
+ labelPosition: [
+ { value: "outside", label: "饼图扇区外侧" },
+ { value: "inside", label: "饼图扇区内部" },
+ { value: "center", label: "饼图中心位置" },
+ ],
+ roseType: [
+ { value: "", label: "普通饼图" },
+ { value: "radius", label: "南丁格尔玫瑰图" },
+ ],
+ gaugeIconType: [
+ { value: "circle", label: "circle" },
+ { value: "rect", label: "rect" },
+ { value: "roundRect", label: "roundRect" },
+ { value: "triangle", label: "triangle" },
+ { value: "diamond", label: "diamond" },
+ { value: "pin", label: "pin" },
+ { value: "arrow", label: "arrow" },
+ { value: "none", label: "none" },
+ ],
+ dateFormat: [
+ { value: "1", label: "年-月-日 时:分:秒" },
+ { value: "2", label: "年-月-日 时:分" },
+ { value: "3", label: "年-月-日" },
+ { value: "4", label: "年-月" },
+ { value: "5", label: "时:分:秒" },
+ { value: "6", label: "时:分" },
+ { value: "7", label: "星期几" },
+ ]
+ ,
+ verticalAlign: [
+ { value: "top", label: "顶端对齐" },
+ { value: "middle", label: "垂直居中" },
+ { value: "bottom", label: "底端对齐" },
+ ],
+ resultType: [
+ { value: "String", label: "字符串/数字" },
+ { value: "Array", label: "数组" },
+ { value: "ObjectArray", label: "对象数组" },
+ { value: "Object", label: "对象" },
+ ]
+
+ },
+ predefineColors: [
+ "#000000",
+ '#ff4500',
+ '#ff8c00',
+ '#ffd700',
+ '#90ee90',
+ '#00ced1',
+ '#1e90ff',
+ '#c71585',
+ '#FF0000',
+ ],
+ showEditCategoryDialog: false,//显示编辑x轴类目对话框
+ cateGorytableData: [],//类目表格数据
+ categoryDialog: false,//单个类目对话框
+ categoryForm: {
+ type: "1",
+ index: null,
+ content: ""
+ },//单个类目form表单
+ apiDialog: false,
+ apiForm: {//接口表单
+ url: "",//请求地址
+ requestType: "post",//请求类型 post get
+ params: [],//请求参数
+ resultType: "",//返回值类型
+ resultTypeProp: [],//返回值属性
+ type: "1",//1 目录 2数据
+ },
+ dataSetDialog: false,//数据集配置
+ dataSetForm: {//数据集表单
+ dataSetId: "",//选中的数据集id
+ column: null,//选中的数据列
+ isMulti: false,
+ type: "",//1目录 2数据
+ },
+ dataSets: [],//数据集
+ dataColumn: [],//数据列
+ addDatasetsDialogVisiable: false,
+ sqlForm: {
+ id: "",
+ datasetName: "",//数据集名称
+ datasourceId: "",//数据源id
+ },//sql表单
+ dataSource: [],
+ //sql解析对应的列表格数据
+ sqlColumnTableData: {
+ tableData: [],
+ tablePage: {
+ currentPage: 1,
+ pageSize: 10,
+ pageTotal: 0,
+ pageSizeRange: [5, 10, 20, 50]
+ },
+ },
+ tableData: [],
+ cmOptions: {//codemirror参数配置
+ tabSize: 4,
+ mode: { name: 'text/x-mysql' },
+ theme: "eclipse",
+ styleActiveLine: true,
+ lineNumbers: true,
+ line: true,
+ foldgutter: true,
+ gutters: ["CodeMirror-linenumbers", "CodeMirror-foldgutter", "CodeMirror-lint-markers"],
+ lineWrapping: true, //代码折叠
+ foldGutter: true,
+ matchBrackets: true, //括号匹配
+ autoCloseBrackets: true,
+ },
+ showDatasetsDialog: false,//数据集管理dialog
+ customColumnDataDialogVisiable: false,
+ tableColumnDialogVisiable: false,
+ tableColumnForm: {
+ name: "",
+ key: "",
+ width: "",
+ type: "1",//1新增 2编辑
+ index: null
+ },
+ paramDialog: false,
+ paramForm: {
+ paramName: "",
+ paramCode: "",
+ defaultValue: "",
+ },
+ propDialog: false,
+ propForm: {
+ propName: "",
+ },
+ fileList: [],
+ header: {
+ "Authorization": 'Bearer '+store.getters.access_token
+ },
+ }
+ },
+ methods: {
+ handleFocus(type) {
+ if(type == 'bg') {
+ this.paramInfo = {
+ bucketName: 'jvs-public',
+ module: 'report',
+ label: '大屏'
+ }
+ }else{
+ this.paramInfo = {
+ bucketName: 'jvs-public',
+ module: 'report',
+ label: '大屏图片'
+ }
+ }
+ this.defaultLabel = '背景'
+ this.$refs.imgselector.init()
+ this.dialogVisible = true
+ },
+ // 确认选择
+ handleConfirm(obj) {
+ this.$set(this.component, 'imgUrl', obj.fileLink)
+ this.handleClose()
+ },
+ // dialog 关闭
+ handleClose() {
+ this.dialogVisible = false
+ this.defaultLabel = '背景'
+ },
+ //宽度改变事件
+ changeWidth (component) {
+ if (this.commonConstants.componentsType.histogram==component.type||this.commonConstants.componentsType.lineChart==component.type||this.commonConstants.componentsType.pieChart==component.type) {
+ this.chartsComponents[component.id].resize();
+ }
+ },
+ //高度改变事件
+ changeHeight (component) {
+ if (this.commonConstants.componentsType.histogram==component.type||this.commonConstants.componentsType.lineChart==component.type||this.commonConstants.componentsType.pieChart==component.type) {
+ this.chartsComponents[component.id].resize();
+ }
+ },
+ //重新加载chart
+ reLoadChart (component) {
+ if (component.options.backgroundColor==null) {
+ component.options.backgroundColor='';
+ }
+ this.chartsComponents[component.id].setOption(component.options, true);
+ // component.chart.setOption(component.options,true);
+ },
+ reInitChart (component) {
+ this.chartsComponents[component.id].dispose();
+ // component.chart.dispose();
+ var chart=this.$echarts.init(document.getElementById(component.id), component.theme);
+ chart.setOption(component.options, true);
+ this.chartsComponents[component.id]=chart;
+ },
+ //编辑类目
+ editXcategory (component) {
+ this.showEditCategoryDialog=true;
+ this.cateGorytableData=[];
+
+ if (component.options.xAxis.data&&component.options.xAxis.data.length>0) {
+ for (let index=0; index {
+ if (valid) {
+ if (this.categoryForm.type=='1') {
+ var row={ content: this.categoryForm.content }
+ this.cateGorytableData.push(row)
+ } else {
+ this.cateGorytableData[this.categoryForm.index].content=this.categoryForm.content
+ }
+ this.categoryDialog=false;
+ } else {
+ return false;
+ }
+ });
+ },
+ //删除全部类目
+ deleteAllCategory () {
+ this.cateGorytableData=[];
+ },
+ //删除单个类目
+ deleteCategory (index) {
+ this.cateGorytableData.splice(index, 1)
+ },
+ //确认修改类目
+ confirmChangeCategory () {
+ if (this.cateGorytableData&&this.cateGorytableData.length>0) {
+ var categories=new Array();
+ for (let index=0; index {
+ if (res.data.code == 0) {
+ this.$message.success(res.data.msg || '测试通过')
+ }
+ });
+ },
+ apiCategoryConfirm () {
+ this.$refs['apiForm'].validate((valid) => {
+ if (valid) {
+ if (this.component.type==this.commonConstants.componentsType.histogram||this.component.type==this.commonConstants.componentsType.lineChart) {//柱状图和折线图
+ let obj={
+ url: this.apis.screenDesign.getApiResultApi,
+ params: this.apiForm,
+ }
+ if (this.apiForm.type=="1") {
+ obj.url=this.apis.screenDesign.getCategoryApiResultApi;
+ }
+ this.commonUtil.doPost(obj).then(response => {
+ this.getApiResultCallback(response);
+ });
+ } else if (this.component.type==this.commonConstants.componentsType.pieChart) {//饼图
+ let obj={
+ url: this.apis.screenDesign.getPieApiResultApi,
+ params: this.apiForm,
+ }
+ this.commonUtil.doPost(obj).then(response => {
+ this.getPieApiResultCallback(response);
+ });
+ } else if (this.component.type==this.commonConstants.componentsType.table) {//表格
+ let obj={
+ url: this.apis.screenDesign.getTableApiResultApi,
+ params: this.apiForm,
+ }
+ this.commonUtil.doPost(obj).then(response => {
+ this.getTableApiResultCallback(response);
+ });
+ } else if (this.component.type==this.commonConstants.componentsType.text) {
+ let obj={
+ url: this.apis.screenDesign.getTextApiResultApi,
+ params: this.apiForm,
+ }
+ this.commonUtil.doPost(obj).then(response => {
+ this.getTextApiResultCallback(response);
+ });
+ }
+ else if (this.component.type==this.commonConstants.componentsType.gauge) {
+ let obj={
+ url: this.apis.screenDesign.getGaugeApiResult,
+ params: this.apiForm,
+ }
+ this.commonUtil.doPost(obj).then(response => {
+ this.getGaugeApiResultCallback(response);
+ });
+ }
+ }
+ });
+ },
+ //获取柱形图折线图接口返回数据回调
+ getApiResultCallback (response) {
+ if (response.code=="200") {
+ if (this.apiForm.type=="1") {
+ this.component.options.xAxis.data=response.responseData;
+ this.component.options.apiSettings.url=this.apiForm.url;
+ this.component.options.apiSettings.requestType=this.apiForm.requestType;
+ this.component.options.apiSettings.params=this.apiForm.params;
+ this.component.options.apiSettings.resultType=this.apiForm.resultType;
+ this.component.options.apiSettings.resultTypeProp=this.apiForm.resultTypeProp;
+ } else {
+ if (response.responseData&&response.responseData.length>0) {
+ var series=new Array();
+ var type="bar";
+ if (this.component.type==this.commonConstants.componentsType.histogram) {
+ type="bar";
+ } else if (this.component.type==this.commonConstants.componentsType.lineChart) {
+ type="line";
+ }
+ if (response.responseData[0] instanceof Array) {
+ for (let index=0; index {
+ if (valid) {
+ let obj={
+ url: this.apis.reportDesign.execSqlApi,
+ params: { tplSql: this.$refs.codeMirror.codemirror.getValue(), datasourceId: this.sqlForm.datasourceId },
+ removeEmpty: false,
+ }
+ this.commonUtil.doPost(obj).then(response => {
+ if (response.code=="200") {
+ this.sqlColumnTableData.tableData=response.responseData;
+ this.sqlColumnTableData.tablePage.pageTotal=response.responseData.length;
+ }
+ });
+ }
+ });
+ },
+ //sql语句列表修改当前页触发事件
+ handleCurrentChange: function (val) {
+ this.sqlColumnTableData.tablePage.currentPage=val;
+ },
+ //sql语句列表修改当每页显示条数触发事件
+ handleSizeChange: function (val) {
+ this.sqlColumnTableData.tablePage.pageSize=val;
+ },
+ formatSql () {//sql格式化
+ let sqlContent="";
+ sqlContent=this.$refs.codeMirror.codemirror.getValue();
+ this.$refs.codeMirror.codemirror.setValue(sqlFormatter.format(sqlContent))
+ },
+ addDataSet () {
+ let tplId=this.$route.query.tplId;;//tplId
+ let tplSql=this.$refs.codeMirror.codemirror.getValue();
+ if (tplSql==null||tplSql=="") {
+ this.commonUtil.showMessage({ message: "sql语句不能为空", type: this.commonConstants.messageType.error })
+ return;
+ }
+ this.$refs['sqlRef'].validate((valid) => {
+ if (valid) {
+ let obj={
+ url: this.apis.reportDesign.addDataSetApi,
+ params: { id: this.sqlForm.id, tplId: tplId, tplSql: tplSql, datasourceId: this.sqlForm.datasourceId, datasetName: this.sqlForm.datasetName },
+ removeEmpty: false,
+ }
+ this.commonUtil.doPost(obj).then(response => {
+ if (response.code=="200") {
+ this.addDatasetsDialogVisiable=false;
+ this.getDataSets();
+ }
+ });
+ } else {
+ return;
+ }
+ });
+ },
+ //显示数据集页面
+ showDatasetDialog () {
+ this.addDatasetsDialogVisiable=true;
+ this.getScreenTplDateSource();
+ },
+ //获取数据集
+ getDataSets () {
+ let tplId=this.$route.query.tplId;;//tplId
+ let obj={
+ url: `/mgr/report/api/reportTplDataset/getScreenDataBySql`, // QAQAQAQAQAQAQAQAQAQAQAQ
+ params: { tplId: tplId },
+ removeEmpty: false,
+ }
+ this.commonUtil.doPost(obj).then(response => {
+ if (response.code=="200") {
+ this.dataSets=response.responseData;
+ }
+ });
+ },
+ //获取模板关联的数据源
+ getScreenTplDateSource () {
+ let tplId=this.$route.query.tplId;;//tplId
+ let obj={
+ url: this.apis.reportDesign.getReportTplDateSourceApi,
+ params: { tplId: tplId },
+ removeEmpty: false,
+ }
+ this.commonUtil.doPost(obj).then(response => {
+ if (response.code=="200") {
+ this.dataSource=response.responseData
+ }
+ });
+ },
+ //修改数据集,获取数据集对应的列
+ changeDataset () {
+ if (this.dataSetForm.dataSetId) {
+ this.getDatasetColumn(this.dataSetForm.dataSetId);
+ } else {
+ this.dataColumn=[];
+ }
+ },
+ getDatasetColumn (dataSetId) {
+ let obj={
+ url: this.apis.screenDesign.getTplDatasetColumnsApi,
+ params: { id: dataSetId },
+ removeEmpty: false,
+ }
+ this.commonUtil.doPost(obj).then(response => {
+ if (response.code=="200") {
+ this.dataColumn=response.responseData;
+ }
+ });
+ },
+ datasetEditDialog () {
+ this.showDatasetsDialog=true;
+ },
+ //编辑数据集
+ editDatasets (index, item) {
+ this.addDatasetsDialogVisiable=true;
+ this.getScreenTplDateSource();
+ this.sqlForm.datasetName=item.datasetName;
+ this.sqlForm.datasourceId=item.datasourceId;
+ this.sqlForm.id=item.id;
+ this.$nextTick(() => {
+ this.$refs.codeMirror.codemirror.setValue(item.tplSql)
+ this.execSql();
+ });
+
+ },
+ //删除数据集
+ deleteDatasets (index, item) {
+ let obj={
+ url: this.apis.screenDesign.deleteDatasetApi,
+ messageContent: this.commonUtil.getMessageFromList("confirm.delete", null),
+ callback: this.getDataSets,
+ params: { id: item.id },
+ type: "get",
+ }
+ //弹出删除确认框
+ this.commonUtil.showConfirm(obj)
+ },
+ //确认目录绑定数据集
+ dataSetCategoryConfirm () {
+ this.$refs['dataSetForm'].validate((valid) => {
+ if (valid) {
+ var params={ dataSetId: this.dataSetForm.dataSetId };
+ if (this.dataSetForm.isMulti) {
+ params.props=this.dataSetForm.column;
+ } else {
+ params.props=[this.dataSetForm.column];
+ }
+ let obj={
+ params: params,
+ removeEmpty: false,
+ }
+ if (this.component.type==this.commonConstants.componentsType.pieChart) {
+ obj.url=this.apis.screenDesign.getScreenPieDataBySqlApi;
+ } else if (this.component.type==this.commonConstants.componentsType.histogram||this.component.type==this.commonConstants.componentsType.lineChart) {
+ obj.url=this.apis.screenDesign.getScreenDataBySqlApi;
+ } else if (this.component.type==this.commonConstants.componentsType.table) {
+ obj.url=this.apis.screenDesign.getScreenTableDataBySqlApi;
+ } else if (this.component.type==this.commonConstants.componentsType.text) {
+ obj.url=this.apis.screenDesign.getScreenTextDataBySqlApi
+ } else if (this.component.type==this.commonConstants.componentsType.gauge) {
+ obj.url=this.apis.screenDesign.getScreenGaugeDataBySqlApi
+ }
+ this.commonUtil.doPost(obj).then(response => {
+ if (response.code=="200") {
+ if (this.dataSetForm.type=="1") {
+ this.component.options.xAxis.data=response.responseData[0];
+ this.component.options.categoryDataSetSettings.dataSetId=this.dataSetForm.dataSetId;
+ this.component.options.categoryDataSetSettings.column=this.dataSetForm.column;
+ this.reLoadChart(this.component);
+ } else if (this.dataSetForm.type=="2") {
+ this.component.options.columnDataSetSettings.dataSetId=this.dataSetForm.dataSetId;
+ this.component.options.columnDataSetSettings.column=this.dataSetForm.column;
+ if (response.responseData) {
+ if (this.component.type==this.commonConstants.componentsType.pieChart) {
+ this.component.options.series[0].data=response.responseData;
+ } else if (this.component.type==this.commonConstants.componentsType.histogram||this.component.type==this.commonConstants.componentsType.lineChart) {
+ var type="bar";
+ if (this.component.type==this.commonConstants.componentsType.lineChart) {
+ type="line";
+ }
+ var series=new Array();
+ for (let index=0; index {
+ this.$refs.dataCodeMirror.codemirror.setValue(dataContent);
+ });
+
+ },
+ closeCustomColumnDataDialog () {
+ this.customColumnDataDialogVisiable=false;
+ this.$refs.dataCodeMirror.codemirror.setValue("");
+ },
+ formatData () {//sql格式化
+ let sqlContent="";
+ sqlContent=this.$refs.dataCodeMirror.codemirror.getValue();
+ if (sqlContent) {
+ this.$refs.dataCodeMirror.codemirror.setValue(sqlFormatter.format(sqlContent));
+ }
+
+ },
+ confirmCustomColumnData () {
+ let sqlContent=this.$refs.dataCodeMirror.codemirror.getValue();
+ if (sqlContent.trim()) {
+ if (this.component.type==this.commonConstants.componentsType.histogram||this.component.type==this.commonConstants.componentsType.lineChart
+ ||this.component.type==this.commonConstants.componentsType.pieChart||this.component.type==this.commonConstants.componentsType.gauge) {
+ var type="bar";
+ if (this.component.type==this.commonConstants.componentsType.histogram) {
+ type="bar";
+ } else if (this.component.type==this.commonConstants.componentsType.lineChart) {
+ type="line";
+ } else if (this.component.type==this.commonConstants.componentsType.pieChart) {
+ type="pie";
+ } else if (this.component.type==this.commonConstants.componentsType.gauge) {
+ type="gauge";
+ }
+ if (type=="bar"||type=="line") {
+ var series=new Array();
+ let arrs=sqlContent.split(";");
+ for (let index=0; index {
+ if (valid) {
+ if (this.tableColumnForm.type=="1") {
+ var obj={
+ name: this.tableColumnForm.name,
+ key: this.tableColumnForm.key,
+ style: { width: this.tableColumnForm.width }
+ }
+ this.component.tableColumn.push(obj);
+ } else {
+ this.component.tableColumn[this.tableColumnForm.index].name=this.tableColumnForm.name;
+ this.component.tableColumn[this.tableColumnForm.index].key=this.tableColumnForm.key;
+ this.component.tableColumn[this.tableColumnForm.index].style.width=this.tableColumnForm.width;
+ }
+ this.tableColumnForm.name="";
+ this.tableColumnForm.key="";
+ this.tableColumnForm.width="";
+ this.tableColumnForm.type="1";
+ this.tableColumnForm.index=null;
+ this.tableColumnDialogVisiable=false;
+ this.$parent.$parent.$parent.$refs['draggable'].$refs[this.component.id][0].reset()
+ }
+ })
+ },
+ //删除列
+ deleteTableColumn (index) {
+ this.component.tableColumn.splice(index, 1);
+ this.$parent.$parent.$parent.$refs['draggable'].$refs[this.component.id][0].reset()
+ },
+ //重写加载表格
+ reLoadTable (component) {
+ this.$parent.$parent.$parent.$refs['draggable'].$refs[this.component.id][0].reset()
+ },
+ //修改表体行高
+ changeTableLineHeight (component) {
+ component.options.singleHeight=component.bodyStyle.height;
+ this.reLoadTable(component);
+ },
+ //数据源修改
+ dataSourceChange () {
+ if (this.commonConstants.componentsType.text==this.component.type||this.commonConstants.componentsType.table==this.component.type) {//文本框和表格
+ if (this.component.columnDataSource=="1") {
+ this.component.isRefresh=false;
+ }
+ } else if (this.commonConstants.componentsType.histogram==this.component.type||this.commonConstants.componentsType.lineChart==this.component.type) {
+ if (this.component.options.categoryDataSource=='1'&&this.component.options.columnDataSource=='1') {
+ this.component.isRefresh=false;
+ }
+ } else if (this.commonConstants.componentsType.pieChart==this.component.type) {
+ if (this.component.options.columnDataSource=='1') {
+ this.component.isRefresh=false;
+ }
+ }
+ },
+ //添加参数
+ addParam () {
+ this.paramDialog=true;
+ },
+ paramConfirm () {
+ this.$refs['paramForm'].validate((valid) => {
+ if (valid) {
+ //校验是否已经有该参数
+ if (this.checkParamName(this.paramForm.paramName, this.apiDialog? this.apiForm.params:this.dataSetForm.params)) {
+ this.commonUtil.showMessage({ message: "该参数名称已经存在,请勿重复添加。", type: "error" })
+ return;
+ }
+ if (this.checkParamCode(this.paramForm.paramCode, this.apiDialog? this.apiForm.params:this.dataSetForm.params)) {
+ this.commonUtil.showMessage({ message: "该参数编码已经存在,请勿重复添加。", type: "error" })
+ return;
+ }
+ var param={
+ paramName: this.paramForm.paramName,
+ paramCode: this.paramForm.paramCode,
+ defaultValue: this.paramForm.defaultValue,
+ paramValue: "",
+ }
+ if (this.apiDialog) {
+ this.apiForm.params.push(param);
+ } else {
+ this.dataSetForm.params.push(param);
+ }
+
+ this.paramCancle();
+ }
+ })
+ },
+ paramCancle () {
+ this.paramDialog=false;
+ this.commonUtil.clearObj(this.paramForm);
+ this.$refs['paramForm'].resetFields();//校验重置
+ },
+ checkParamCode (paramCode, params) {
+ var result=false;
+ for (let index=0; index {
+ if (valid) {
+ var prop={
+ propName: this.propForm.propName,
+ }
+ this.apiForm.resultTypeProp.push(prop);
+ this.propCancle();
+ }
+ })
+ },
+ propCancle () {
+ this.propDialog=false;
+ this.commonUtil.clearObj(this.propForm);
+ this.$refs['propForm'].resetFields();//校验重置
+ },
+ deleteProp (row, index) {
+ this.apiForm.resultTypeProp.splice(index, 1)
+ },
+ // 图片上传
+ beforeUpload (file) {
+ if (file.size>20971520) {
+ // this.limitShow = true
+ this.$message.error('文件大小不得超过20M')
+ return false
+ } else {
+ }
+ },
+ onChange (file, fileList) {
+ this.fileList=fileList
+ },
+ successHandle (res, file, fileList) {
+ if (res.code==0) {
+ this.$set(this.component, 'imgUrl', res.data.fileLink)
+ } else {
+ this.$refs.uploadBtn.clearFiles()
+ this.$message.error(res.msg)
+ }
+ },
+ errHandle (err, file, fileList) {
+ this.$refs.uploadBtn.clearFiles()
+ this.$message.error(err)
+ },
+ }
+}
diff --git a/src/views/report/components/validate.js b/src/views/report/components/validate.js
new file mode 100644
index 0000000000000000000000000000000000000000..8ec3f7c0028d2c362a0b1b5ee33f844ad0e2510b
--- /dev/null
+++ b/src/views/report/components/validate.js
@@ -0,0 +1,144 @@
+import commonUtil from './common'
+const validate = {}
+validate.install = function (Vue, options) {
+ Vue.prototype.filter_rules = function (controlName,item){
+ let rules = [];
+ if(!item)
+ {
+ return rules;
+ }
+ if(item.required){
+ //必须输入校验
+ let message = commonUtil.getMessageFromList("error.input.notnull",[controlName]);
+ if(item.valueType)
+ {
+ rules.push({ type:item.valueType,required: true, message: message, trigger: 'change' });
+ }else{
+ rules.push({ required: true, message: message, trigger: 'change' });
+ }
+ }
+ //字符串长度校验
+ if(item.minLength && item.maxLength){
+ if(item.maxLength < item.minLength)
+ {
+ let message = commonUtil.getMessageFromList("error.length.range",[controlName]);
+ commonUtil.showMessage({message:message,type: this.commonConstants.messageType.error})
+ }else{
+ //最大长度和最小长度校验
+ let message = commonUtil.getMessageFromList("error.input.length",[controlName,item.minLength,item.maxLength]);
+ rules.push({ min: item.minLength,max:item.maxLength, message: message, trigger: 'change' });
+ }
+
+ }else if(item.minLength && ! item.maxLength)
+ {//最小长度校验
+ let message = commonUtil.getMessageFromList("error.input.min.length",[controlName,item.minLength]);
+ rules.push({ min: item.minLength, message: message, trigger: 'change' });
+ }else if(!item.minLength && item.maxLength){
+ //最大长度
+ let message = commonUtil.getMessageFromList("error.input.max.length",[controlName,item.maxLength]);
+ rules.push({ max: item.maxLength, message: message, trigger: 'change' });
+ }
+ if(item.length)
+ {//固定长度
+ let message = commonUtil.getMessageFromList("error.input.fixedlength",[controlName,item.length]);
+ rules.push({ min:item.length,max: item.length, message: message, trigger: 'change' });
+ }
+ //浮点类型的数据
+ if(item.float)
+ {
+ let numbermessage =commonUtil.getMessageFromList("error.input.format",[controlName,'数字'])
+ rules.push({ type: 'string', pattern:/^[+-]?(0|([1-9]\d*))(\.\d+)?$/g,message: numbermessage, trigger: 'change' });
+ let message =commonUtil.getMessageFromList("error.input.float.format",[controlName,item.float]);
+ rules.push({ type: 'string', pattern:eval('/^-?\\d+(\\.\\d{1,'+item.float+'})?$/'),message: message, trigger: 'change' });
+ }
+ if(item.type){
+ let type = item.type;
+ let message;
+ switch(type) {
+ case 'email'://邮箱
+ message =commonUtil.getMessageFromList("error.input.format",[controlName,'邮箱'])
+ rules.push({ type: 'email', message: message, trigger: 'change' });
+ break;
+ case 'mobile'://手机号
+ message =commonUtil.getMessageFromList("error.mobile.format",[controlName])
+ rules.push({ type: 'string', pattern:/^(1[0-9])\d{9}$/,message: message, trigger: 'change' });
+ break;
+ case 'phone'://座机号码
+ message =commonUtil.getMessageFromList("error.phone.format",[controlName])
+ rules.push({ type: 'string', pattern:/^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})$/,message: message, trigger: 'change' });
+ break;
+ case 'mobilephone'://手机号或者座机号码
+ message =commonUtil.getMessageFromList("error.mobilephone.format",[controlName])
+ rules.push({ type: 'string', pattern:/^(0[0-9]{2,3}-)?([2-9][0-9]{6,7})$|(1[0-9])\d{9}$/,message: message, trigger: 'change' });
+ break;
+ case 'number'://数字
+ message =commonUtil.getMessageFromList("error.input.format",[controlName,'数字'])
+ rules.push({ type: 'string', pattern:/^[+-]?(0|([1-9]\d*))(\.\d+)?$/g,message: message, trigger: 'change' });
+ break;
+ case 'integer'://整数类型
+ message =commonUtil.getMessageFromList("error.input.format",[controlName,'整数'])
+ rules.push({ type: 'string', pattern:'^-?\\d+$',message: message, trigger: 'change' });
+ break;
+ case 'url'://超链接
+ message =commonUtil.getMessageFromList("error.input.format",[controlName,'超链接'])
+ rules.push({ type: 'url', message: message, trigger: 'change' });
+ break;
+ case 'positiveInt'://>=0整数
+ let numbermessage =commonUtil.getMessageFromList("error.input.format",[controlName,'数字'])
+ rules.push({ type: 'string', pattern:/^[+-]?(0|([1-9]\d*))(\.\d+)?$/g,message: numbermessage, trigger: 'change' });
+ message =commonUtil.getMessageFromList("error.input.format",[controlName,'大于等于0的整数'])
+ rules.push({ type: 'string', pattern:'^\\+?\\d*$',message: message, trigger: 'change' });
+ break;
+ case 'idcard'://身份证号
+ message =commonUtil.getMessageFromList("error.idcard.format")
+ rules.push({ type: 'string', pattern:/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/,message: message, trigger: 'change' });
+ break;
+ case 'accountName'://账号名称格式
+ message =commonUtil.getMessageFromList("error.accountName.format")
+ rules.push({ type: 'string', pattern:/^([a-z]|[A-Z]|[a-zA-Z0-9.@_-]){8,18}$/,message: message, trigger: 'change' });
+ break;
+ case 'positiveNumber'://账号名称格式
+ message =commonUtil.getMessageFromList("error.accountName.format")
+ rules.push({ type: 'string', pattern:/^([a-z]|[A-Z]|[a-zA-Z0-9.@_-]){8,18}$/,message: message, trigger: 'change' });
+ break;
+ case 'letter'://字母
+ message =commonUtil.getMessageFromList("error.input.format",[controlName,'英文字母'])
+ rules.push({ type: 'string', pattern:/^[a-zA-Z]+$/,message: message, trigger: 'change' });
+ break;
+ }
+ };
+ //自定义正则表达式
+ if(item.regexp){
+ let message =commonUtil.getMessageFromList("error.regexp.format",[controlName]);
+ rules.push({ type: 'string', pattern:eval(item.regexp),message: message, trigger: 'change' });
+ }
+ if(commonUtil.isRealNum(item.max) && commonUtil.isRealNum(item.min))
+ {
+ if(item.max Number(value)});
+ }
+
+ }else if(commonUtil.isRealNum(item.max) && !commonUtil.isRealNum(item.min)){
+ let message =commonUtil.getMessageFromList("error.number.max",[controlName,item.max])
+ rules.push({ type: 'number', max:item.max,message: message, trigger: 'change', transform:(value) => Number(value)});
+ }else if(!commonUtil.isRealNum(item.max) && commonUtil.isRealNum(item.min)){
+ let message =commonUtil.getMessageFromList("error.number.min",[controlName,item.min])
+ rules.push({ type: 'number', min:item.min,message: message, trigger: 'change', transform:(value) => Number(value)});
+ }
+ if(item.validator)
+ {
+ rules.push({ validator: item.validator, trigger: 'change' });
+ }
+ return rules;
+ }
+
+
+ }
+
+ export default validate
+
\ No newline at end of file
diff --git a/src/views/report/router.js b/src/views/report/router.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a6b36cc12c1184e7deef3bbf74101da2d95fb70
--- /dev/null
+++ b/src/views/report/router.js
@@ -0,0 +1,112 @@
+export default [
+ {
+ path: '/report/type',
+ name: '报表类型管理',
+ component: () =>
+ import( /* webpackChunkName: "page" */ './views/types/index.vue'),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: '/report/datasource',
+ name: '数据集管理',
+ component: () =>
+ import( /* webpackChunkName: "page" */ './views/datasource/index'),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: '/report/screenTemplate',
+ name: '大屏模板管理',
+ component: () =>
+ import( /* webpackChunkName: "page" */ './views/screen/template'),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: '/report/screenDesign',
+ name: '大屏设计',
+ component: () =>
+ import( /* webpackChunkName: "page" */ './views/screen/screenDesign.vue'),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: '/report/screenPreview',
+ name: '大屏预览',
+ component: () =>
+ import( /* webpackChunkName: "page" */ './views/screen/preview/index.vue'),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ // {
+ // path: '/reportTpl',
+ // name: '报表模板管理',
+ // component: () =>
+ // import( /* webpackChunkName: "page" */ './views/'),
+ // meta: {
+ // keepAlive: true,
+ // isTab: false,
+ // isAuth: false
+ // }
+ // },
+ // {
+ // path: '/roleReport',
+ // name: '查看报表',
+ // component: () =>
+ // import( /* webpackChunkName: "page" */ './views/'),
+ // meta: {
+ // keepAlive: true,
+ // isTab: false,
+ // isAuth: false
+ // }
+ // },
+ // {
+ // path: '/screenManage',
+ // name: '大屏管理',
+ // component: () =>
+ // import( /* webpackChunkName: "page" */ './views/'),
+ // meta: {
+ // keepAlive: true,
+ // isTab: false,
+ // isAuth: false
+ // }
+ // },
+ // {
+ // path: '/reportDesign',
+ // name: '报表设计',
+ // component: () =>
+ // import( /* webpackChunkName: "page" */ './views/'),
+ // meta: {
+ // keepAlive: true,
+ // isTab: false,
+ // isAuth: false
+ // }
+ // },
+ // {
+ // path: '/screenView',
+ // name: '大屏',
+ // component: () =>
+ // import( /* webpackChunkName: "page" */ './views/'),
+ // meta: {
+ // keepAlive: true,
+ // isTab: false,
+ // isAuth: false
+ // }
+ // }
+]
diff --git a/src/views/report/views/datasource/api.js b/src/views/report/views/datasource/api.js
new file mode 100644
index 0000000000000000000000000000000000000000..35faa820c4cf32e35b8439cd28431fcbc636a64f
--- /dev/null
+++ b/src/views/report/views/datasource/api.js
@@ -0,0 +1,36 @@
+import request from '@/router/axios'
+let base = '/mgr/report'
+// 列表
+export function getTableList (params) {
+ return request({
+ url: base + `/api/reportDatasource/page`,
+ method: 'get',
+ params: params
+ })
+}
+
+// 新增
+export function addRow (data) {
+ return request({
+ url: base + `/api/reportDatasource/save`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 编辑
+export function editRow (data) {
+ return request({
+ url: base + `/api/reportDatasource/update`,
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除
+export function delRow (id) {
+ return request({
+ url: base + `/api/reportDatasource/${id}`,
+ method: 'delete'
+ })
+}
\ No newline at end of file
diff --git a/src/views/report/views/datasource/index.vue b/src/views/report/views/datasource/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..a435c4d33a934e9fffde5277cd9ea0235a4d6064
--- /dev/null
+++ b/src/views/report/views/datasource/index.vue
@@ -0,0 +1,138 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/views/report/views/screen/api.js b/src/views/report/views/screen/api.js
new file mode 100644
index 0000000000000000000000000000000000000000..5e642b8bcd699a9165c59203a3e3ad8c8fdb5966
--- /dev/null
+++ b/src/views/report/views/screen/api.js
@@ -0,0 +1,54 @@
+import request from '@/router/axios'
+let base = '/mgr/report'
+
+// 列表
+export function getTableList (params) {
+ return request({
+ url: base + `/api/screen/template/page`,
+ method: 'get',
+ params: params
+ })
+}
+
+// 新增
+export function addRow (data) {
+ return request({
+ url: base + `/api/screen/template/save`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 编辑
+export function editRow (data) {
+ return request({
+ url: base + `/api/screen/template/update`,
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除
+export function delRow (id) {
+ return request({
+ url: base + `/api/screen/template/${id}`,
+ method: 'delete'
+ })
+}
+
+// 获取设计
+export function getScreenDesignInfo (id) {
+ return request({
+ url: base + `/api/screen/template/${id}`,
+ method: 'get'
+ })
+}
+
+// 保存设计
+export function saveDesign (data) {
+ return request({
+ url: base + `/api/screen/template/design`,
+ method: 'post',
+ data: data
+ })
+}
\ No newline at end of file
diff --git a/src/views/report/views/screen/commonConstants.js b/src/views/report/views/screen/commonConstants.js
new file mode 100644
index 0000000000000000000000000000000000000000..58edef68a448436d45b665c0dcb3d7019abf4350
--- /dev/null
+++ b/src/views/report/views/screen/commonConstants.js
@@ -0,0 +1,620 @@
+import moment from 'moment'
+
+export const commonConstants={
+ componentsType: {
+ panel: "panel",//画布
+ text: "text",//文本
+ picture: "picture",//图片
+ histogram: "histogram",//柱状图
+ lineChart: "lineChart",//折线图
+ pieChart: "pieChart",//饼图
+ gauge: "gauge",//仪表盘
+ table: "table",//表格
+ date: "date",//日期
+ delete: "delete",//删除的组件
+ },
+ screenTextInit: {
+ type: 'text',
+ textType: "text",//文本类型
+ x: 0,//初始化横坐标
+ y: 0,//初始化纵坐标
+ w: 200,//文本组件初始化宽度
+ h: 50,//文本组件初始化高度
+ style: {
+ display: 'table-cell', textAlign: 'center', verticalAlign: "middle", fontSize: "14", color: "#ffffff", letterSpacing: "1", background: "", fontWeight: false
+ },
+ zindex: 'auto',
+ content: "文本",
+ columnDataSource: "1",//柱体数据来源 1自定义 2接口 3数据集
+ dataApiSettings: {//柱体数据接口配置
+ url: "",//请求地址
+ requestType: "post",//请求类型 post get
+ params: "",//请求参数
+ resultType: "",//返回值类型
+ resultTypeProp: "",//返回值属性
+ },
+ columnDataSetSettings: {//柱体数据数据集配置
+ dataSetId: "",//数据集id
+ column: "",//cloumn属性
+ },
+ isRefresh: false,//是否定时刷新
+ refreshTime: 0,//定时刷新时间,单位(ms)
+ speed: 10,//滚动速度
+ href: "",
+ },
+ screenPictureInit: {
+ type: 'picture',
+ x: 0,//初始化横坐标
+ y: 0,//初始化纵坐标
+ w: 200,//图片组件初始化宽度
+ h: 200,//图片组件初始化高度
+ // style:{
+ // display:'table-cell',textAlign:'center', verticalAlign:"middle",fontSize:"14",color:"#000000",letterSpacing:"1",background:"",fontWeight:false
+ // },
+ imgUrl: "",
+ zindex: 'auto',
+ },
+ screenHistogramInit: {
+ type: 'histogram',
+ x: 0,//初始化横坐标
+ y: 0,//初始化纵坐标
+ w: 300,//文本组件初始化宽度
+ h: 200,//文本组件初始化高度
+ active: false,
+ zindex: 'auto',
+ theme: "dark",//主题
+ isRefresh: false,//是否定时刷新
+ refreshTime: 0,//定时刷新时间,单位(ms)
+ options: {
+ backgroundColor: '#100C2A',
+ title: {
+ show: true,//ture or false
+ text: "柱状图",
+ x: 'center',//'left' 'center' 'right'
+ textStyle: {//标题样式
+ color: '#1E90FF',
+ fontWeight: 'normal',//'normal' 'bold'
+ fontSize: 20
+ }
+ },
+ tooltip: {
+ show: true,
+ trigger: 'axis',
+ axisPointer: {
+ type: 'shadow'
+ }
+ },
+ legend: {
+ show: true,
+ left: 0,
+ top: 0
+ },
+ xAxis: {//x轴属性
+ type: 'category',
+ data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
+ axisLabel: {//x坐标是否显示,间隔和字体倾斜
+ show: true,
+ interval: 0,
+ rotate: 30,
+ color: '#FFFFFF',//字体颜色
+ fontWeight: 'normal',//'normal','bold'
+ fontSize: 12,
+ overflow: 'truncate',
+ ellipsis: '...',
+ width: 40
+ },
+ },
+ yAxis: {
+ show: true,
+ axisLabel: {//x坐标是否显示,间隔和字体倾斜
+ show: true,
+ rotate: 0,
+ color: '#FFFFFF',//字体颜色
+ fontWeight: 'normal',//'normal','bold'
+ fontSize: 12,
+ overflow: 'truncate',
+ ellipsis: '...',
+ width: 40
+ },
+ },
+
+ categoryDataSource: "1",//类目数据来源 1自定义 2接口 3数据集
+ apiSettings: {
+ url: "",//请求地址
+ requestType: "post",//请求类型 post get
+ params: "",//请求参数
+ resultType: "",//返回值类型
+ resultTypeProp: "",//返回值属性
+ },
+ //类目数据集配置
+ categoryDataSetSettings: {
+ dataSetId: "",//数据集id
+ column: "",//cloumn属性
+ },
+ columnDataSource: "1",//柱体数据来源 1自定义 2接口 3数据集
+ dataApiSettings: {//柱体数据接口配置
+ url: "",//请求地址
+ requestType: "post",//请求类型 post get
+ params: "",//请求参数
+ resultType: "",//返回值类型
+ resultTypeProp: "",//返回值属性
+ },
+ columnDataSetSettings: {//柱体数据数据集配置
+ dataSetId: "",//数据集id
+ column: [],//cloumn属性
+ },
+ series: [
+ {
+ name: "系列名称",
+ data: [120, 200, 150, 80, 70, 110, 130],
+ type: 'bar',
+ barGap: 0,
+ itemStyle: {
+ color: '#00adff',//柱体颜色
+ },
+
+ smooth: 20,//柱体宽度
+ },
+ ],
+ }
+ },
+ screenLineChartInit: {
+ type: 'lineChart',
+ x: 0,//初始化横坐标
+ y: 0,//初始化纵坐标
+ w: 300,//文本组件初始化宽度
+ h: 200,//文本组件初始化高度
+ active: false,
+ zindex: 'auto',
+ theme: "dark",//主题
+ isRefresh: false,//是否定时刷新
+ refreshTime: 0,//定时刷新时间,单位(ms)
+ options: {
+ backgroundColor: '#100C2A',
+ title: {
+ show: true,//ture or false
+ text: "折线图",
+ x: 'center',//'left' 'center' 'right'
+ textStyle: {//标题样式
+ color: '#1E90FF',
+ fontWeight: 'normal',//'normal' 'bold'
+ fontSize: 20
+ }
+ },
+ tooltip: {
+ show: true,
+ trigger: 'axis',
+ axisPointer: {
+ type: 'shadow'
+ }
+ },
+ legend: {
+ show: true,
+ left: 0,
+ top: 0
+ },
+ xAxis: {//x轴属性
+ type: 'category',
+ data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],
+ axisLabel: {//x坐标是否显示,间隔和字体倾斜
+ show: true,
+ interval: 0,
+ rotate: 30,
+ color: '#FFFFFF',//字体颜色
+ fontWeight: 'normal',//'normal','bold'
+ fontSize: 12,
+ overflow: 'truncate',
+ ellipsis: '...',
+ width: 40
+ },
+ },
+ yAxis: {
+ show: true,
+ axisLabel: {//x坐标是否显示,间隔和字体倾斜
+ show: true,
+ rotate: 0,
+ color: '#FFFFFF',//字体颜色
+ fontWeight: 'normal',//'normal','bold'
+ fontSize: 12,
+ overflow: 'truncate',
+ ellipsis: '...',
+ width: 40
+ },
+ },
+
+ categoryDataSource: "1",//类目数据来源 1自定义 2接口 3数据集
+ apiSettings: {
+ url: "",//请求地址
+ requestType: "post",//请求类型 post get
+ params: "",//请求参数
+ resultType: "",//返回值类型
+ resultTypeProp: "",//返回值属性
+ },
+ //类目数据集配置
+ categoryDataSetSettings: {
+ dataSetId: "",//数据集id
+ column: "",//cloumn属性
+ },
+ columnDataSource: "1",//柱体数据来源 1自定义 2接口 3数据集
+ dataApiSettings: {//柱体数据接口配置
+ url: "",//请求地址
+ requestType: "post",//请求类型 post get
+ params: "",//请求参数
+ resultType: "",//返回值类型
+ resultTypeProp: "",//返回值属性
+ },
+ columnDataSetSettings: {//柱体数据数据集配置
+ dataSetId: "",//数据集id
+ column: [],//cloumn属性
+ },
+ series: [
+ {
+ name: "系列名称",
+ data: [120, 200, 150, 80, 70, 110, 130],
+ type: 'line',
+ barGap: 0,
+ itemStyle: {
+ color: '#00adff',//折线颜色颜色
+ },
+ smooth: false,//平滑曲线
+ },
+ ],
+ }
+ },
+ screenPieChartInit: {
+ type: 'pieChart',
+ x: 0,//初始化横坐标
+ y: 0,//初始化纵坐标
+ w: 450,//文本组件初始化宽度
+ h: 240,//文本组件初始化高度
+ active: false,
+ zindex: 'auto',
+ theme: "dark",//主题
+ isRefresh: false,//是否定时刷新
+ refreshTime: 0,//定时刷新时间,单位(ms)
+ options: {
+ backgroundColor: '#100C2A',
+ title: {
+ show: true,//ture or false
+ text: "饼图",
+ x: 'center',//'left' 'center' 'right'
+ textStyle: {//标题样式
+ color: '#1E90FF',
+ fontWeight: 'normal',//'normal' 'bold'
+ fontSize: 20
+ }
+ },
+ tooltip: {
+ show: true,
+ trigger: 'item',
+ },
+ legend: {
+ show: true,
+ left: 0,
+ top: 0,
+ orient: 'vertical'
+ },
+ columnDataSource: "1",//柱体数据来源 1自定义 2接口 3数据集
+ dataApiSettings: {//柱体数据接口配置
+ url: "",//请求地址
+ requestType: "post",//请求类型 post get
+ params: "",//请求参数
+ resultType: "",//返回值类型
+ resultTypeProp: "",//返回值属性
+ },
+ columnDataSetSettings: {//柱体数据数据集配置
+ dataSetId: "",//数据集id
+ column: [],//cloumn属性
+ },
+ series: [
+ {
+ name: "访问来源",
+ roseType: "",
+ label: {
+ show: true,
+ position: 'outside',
+ formatter: '{b}'
+ },
+ data: [
+ { value: 1048,name: '搜索引擎', itemStyle: {color: '#4992FF'} },
+ { value: 735, name: '直接访问', itemStyle: {color: '#7CFFB2'} },
+ { value: 580, name: '邮件营销', itemStyle: {color: '#FDDD60'} },
+ { value: 484, name: '联盟广告', itemStyle: {color: '#FF6E76'} },
+ { value: 300, name: '视频广告', itemStyle: {color: '#58D9F9'} }
+ ],
+ type: 'pie',
+ radius: ['0%', '50%'],
+ },
+ ],
+ }
+ },
+ screenTableInit: {
+ type: 'table',
+ x: 0,//初始化横坐标
+ y: 0,//初始化纵坐标
+ w: 300,//文本组件初始化宽度
+ h: 300,//文本组件初始化高度
+ // style:{
+ // display:'table-cell',textAlign:'center', verticalAlign:"middle",fontSize:"14",color:"#000000",letterSpacing:"1",background:"",fontWeight:false
+ // },
+ zindex: 'auto',
+ isRefresh: false,//是否定时刷新
+ refreshTime: 0,//定时刷新时间,单位(ms)
+ //数据列
+ tableColumn: [{ "name": "销售数量", "key": "count", "style": { "width": '40' } }, { "name": "日期", "key": "date", "style": { "width": '40' } }],
+
+ headStyle: {
+ height: 40,//高度
+ backgroundColor: '#2570a1',
+ color: "#00FFFF",//字体颜色
+ fontSize: 12,//字体大小
+ fontWeight: 'bold',//是否加粗 normal 和bold
+ },//表头样式
+ style: {//整体样式
+ showIndex: true,//是否显示序号
+ isBorder: true,//是否显示边框
+ borderColor: '#FFFFFF',//边框颜色
+ borderWidth: 1,//边框宽度
+ borderStyle: 'solid',//边框样式
+ indexWidth: '20',
+ },
+ bodyStyle: {//表体样式
+ oddRowColor: '#33a3dc',//奇数行颜色
+ evenRowColor: '#2570a1',//偶数行颜色
+ height: 30,//行高
+ color: '#ffffff',//字体颜色
+ fontSize: 12,//字体大小
+ fontWeight: 'normal',//是否加粗
+ },
+ options: {//表格配置项
+ step: 0.5, // 数值越大速度滚动越快
+ limitMoveNum: 2, // 开始无缝滚动的数据量 this.dataList.length
+ hoverStop: true, // 是否开启鼠标悬停stop
+ direction: 1, // 0向下 1向上 2向左 3向右
+ openWatch: true, // 开启数据实时监控刷新dom
+ singleHeight: 30, // 单步运动停止的高度(默认值0是无缝不停止的滚动) direction => 0/1
+ singleWidth: 0, // 单步运动停止的宽度(默认值0是无缝不停止的滚动) direction => 2/3
+ waitTime: 1000, // 单步运动停止的时间(默认值1000ms)
+ },
+ columnDataSource: "1",//柱体数据来源 1自定义 2接口 3数据集
+ dataApiSettings: {//柱体数据接口配置
+ url: "",//请求地址
+ requestType: "post",//请求类型 post get
+ params: "",//请求参数
+ },
+ columnDataSetSettings: {//柱体数据数据集配置
+ dataSetId: "",//数据集id
+ column: [],//cloumn属性
+ },
+ data: [{
+ 'count': '100',
+ 'date': '2021-08-01'
+ }, {
+ 'count': '95',
+ 'date': '2021-08-02'
+ }, {
+ 'count': '112',
+ 'date': '2021-08-03'
+ }, {
+ 'count': '125',
+ 'date': '2021-08-04'
+ }, {
+ 'count': '144',
+ 'date': '2021-08-05'
+ }, {
+ 'count': '168',
+ 'date': '2021-08-06'
+ }, {
+ 'count': '158',
+ 'date': '2021-08-07'
+ }, {
+ 'count': '99',
+ 'date': '2021-08-08'
+ }],//表格数据
+ },
+ screenDateInit: {
+ type: 'date',
+ x: 0,//初始化横坐标
+ y: 0,//初始化纵坐标
+ w: 200,//图片组件初始化宽度
+ h: 50,//图片组件初始化高度
+ style: {
+ display: 'table-cell', textAlign: 'center', verticalAlign: "middle", fontSize: "14", color: "#ffffff", letterSpacing: "1", background: "", fontWeight: false
+ },
+ zindex: 'auto',
+ content: "",
+ format: "1",
+ },
+ screenGaugeInit: {
+ type: 'gauge',
+ x: 0,//初始化横坐标
+ y: 0,//初始化纵坐标
+ w: 450,//文本组件初始化宽度
+ h: 240,//文本组件初始化高度
+ active: false,
+ zindex: 'auto',
+ theme: "dark",//主题
+ isRefresh: false,//是否定时刷新
+ refreshTime: 0,//定时刷新时间,单位(ms)
+ options: {
+ backgroundColor: '#100C2A',
+ title: {
+ show: true,//ture or false
+ text: "仪表盘",
+ x: 'center',//'left' 'center' 'right'
+ textStyle: {//标题样式
+ color: '#1E90FF',
+ fontWeight: 'normal',//'normal' 'bold'
+ fontSize: 20
+ }
+ },
+ tooltip: {
+ show: false,
+ trigger: 'item',
+ },
+ columnDataSource: "1",//柱体数据来源 1自定义 2接口 3数据集
+ dataApiSettings: {//柱体数据接口配置
+ url: "",//请求地址
+ requestType: "post",//请求类型 post get
+ params: "",//请求参数
+ resultType: "",//返回值类型
+ resultTypeProp: "",//返回值属性
+ },
+ columnDataSetSettings: {//柱体数据数据集配置
+ dataSetId: "",//数据集id
+ column: [],//cloumn属性
+ },
+ series: [{
+ name: '',
+ type: 'gauge',
+ radius: 90,
+ min: 0,
+ max: 100,
+ startAngle: 225,// 仪表盘起始角度,默认 225。圆心 正右手侧为0度,正上方为90度,正左手侧为180度。
+ endAngle: -45,
+ splitNumber: 10,
+ axisLine: {
+ show: true,
+ lineStyle: {
+ width: 10,
+ color: [[1, '#E6EBF8']]
+ }
+ },
+ progress: {
+ show: true,
+ width: 10,
+ itemStyle: {
+ color: "#1E90FF"
+ }
+ },
+ splitLine: {
+ show: true,
+ length: 10,//分割线长度
+ distance: 10,//分割线与轴线的距离
+ lineStyle: {
+ color: "#63677A",
+ width: 3,
+ }
+ },
+ axisTick: {
+ show: true,
+ splitNumber: 5,
+ length: 6,
+ distance: 10,
+ lineStyle: {
+ color: "#63677A",
+ width: 1,
+ }
+ },
+ axisLabel: {
+ show: true,
+ distance: 15,
+ color: "#FCFAFA",
+ fontSize: 12
+ },
+ anchor: {
+ show: true,
+ size: 16,
+ icon: 'circle',
+ itemStyle: {
+ color: "#fff",
+ borderWidth: 2,
+ borderColor: '#00CED1'
+ }
+ },
+ pointer: {
+ show: true,
+ length: '40%',
+ icon: 'triangle',
+ width: 10,
+ itemStyle: {
+ color: "#FF8C00"
+ }
+ },
+ title: {
+ show: true,
+ offsetCenter: [0, 30],
+ color: '#FCFAFA',
+ fontWeight: 'normal',
+ fontSize: 16,
+ },
+ detail: {
+ show: true,
+ color: '#FCFAFA',
+ valueAnimation: true,
+ formatter: '{value}',
+ fontSize: 20,
+ fontWeight: 'bold',
+ offsetCenter: [0, 50]
+ },
+ data: [{
+ value: 90,
+ name: '得分'
+ }]
+ }]
+ }
+ }
+}
+
+export const commonUtil={
+ getUuid: function () {
+ var len=32;//32长度
+ var radix=16;//16进制
+ var chars='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
+ var uuid=[], i;
+ radix=radix||chars.length;
+ if (len) {
+ for (i=0; i {
+ if (res.data.code==0) {
+ this.screenProperties.id=res.data.data.id;
+ this.screenProperties.width=res.data.data.width;
+ this.screenProperties.height=res.data.data.height;
+ this.screenProperties.imgUrl=res.data.data.imgUrl;
+ this.screenProperties.background=res.data.data.background;
+ this.activated=this.screenProperties;
+ this.formActivatedData(this.activated)
+ if (res.data.data.components!=null&&res.data.data.components.length>0) {
+ for (let index=0; index {
+ this.initChart();
+ this.initDate();
+ });
+ }
+ });
+ },
+ //初始化图表
+ initChart () {
+ if (this.components&&this.components.length>0) {
+ for (let index=0; index0) {
+ for (let index=0; index {
+ var self=this;
+ setTimeout(function () { self.refreshTime(component) }, 0)
+ }, 100)
+ }
+ }
+ }
+ },
+ //添加组件
+ addComponenet (type) {
+ if (this.activated) {
+ this.activated.active=false;
+ if (this.activated.type==this.commonConstants.componentsType.picture) {
+ this.activated.zindex=98;
+ } else {
+ this.activated.zindex=99;
+ }
+ }
+ if (type==this.commonConstants.componentsType.text) {//文本框
+ var obj=JSON.parse(JSON.stringify(this.commonConstants.screenTextInit))
+ obj.id=this.commonUtil.getUuid();
+ this.components.push(obj);
+ } else if (type==this.commonConstants.componentsType.picture) {//图片
+ var obj=JSON.parse(JSON.stringify(this.commonConstants.screenPictureInit))
+ obj.id=this.commonUtil.getUuid();
+ this.components.push(obj);
+ }
+ else if (type==this.commonConstants.componentsType.histogram) {//柱状图
+ var obj=JSON.parse(JSON.stringify(this.commonConstants.screenHistogramInit))
+ obj.id=this.commonUtil.getUuid();
+ this.components.push(obj);
+ this.$nextTick(() => {
+ var histogram=this.$echarts.init(document.getElementById(obj.id), obj.theme);
+ // 绘制图表
+ histogram.setOption(obj.options);
+ this.chartsComponents[obj.id]=histogram;
+ });
+ } else if (type==this.commonConstants.componentsType.lineChart) {//折线图
+ var obj=JSON.parse(JSON.stringify(this.commonConstants.screenLineChartInit))
+ obj.id=this.commonUtil.getUuid();
+ this.components.push(obj);
+ this.$nextTick(() => {
+ var lineChart=this.$echarts.init(document.getElementById(obj.id), obj.theme);
+ // 绘制图表
+ lineChart.setOption(obj.options);
+ this.chartsComponents[obj.id]=lineChart;
+ });
+ } else if (type==this.commonConstants.componentsType.pieChart) {//饼图
+ var obj=JSON.parse(JSON.stringify(this.commonConstants.screenPieChartInit))
+ obj.id=this.commonUtil.getUuid();
+ this.components.push(obj);
+ this.$nextTick(() => {
+ var pieChart=this.$echarts.init(document.getElementById(obj.id), obj.theme);
+ // 绘制图表
+ pieChart.setOption(obj.options);
+ this.formActivatedData(pieChart)
+ console.log(pieChart)
+ this.chartsComponents[obj.id]=pieChart;
+ });
+ } else if (type==this.commonConstants.componentsType.table) {
+ //表格
+ var obj=JSON.parse(JSON.stringify(this.commonConstants.screenTableInit))
+ obj.id=this.commonUtil.getUuid();
+ this.components.push(obj);
+ } else if (type==this.commonConstants.componentsType.date) {
+ //日期
+ var obj=JSON.parse(JSON.stringify(this.commonConstants.screenDateInit))
+ obj.id=this.commonUtil.getUuid();
+ obj.content=this.commonUtil.getCurrentDate(obj);
+ this.components.push(obj);
+ setInterval(() => {
+ var self=this;
+ setTimeout(function () { self.refreshTime(obj) }, 0)
+ }, 1000)
+ } else if (type==this.commonConstants.componentsType.gauge) {//仪表盘
+ var obj=JSON.parse(JSON.stringify(this.commonConstants.screenGaugeInit))
+ obj.id=this.commonUtil.getUuid();
+ this.components.push(obj);
+ this.$nextTick(() => {
+ var guage=this.$echarts.init(document.getElementById(obj.id), obj.theme);
+ // 绘制图表
+ guage.setOption(obj.options);
+ this.chartsComponents[obj.id]=guage;
+ });
+ }
+ },
+ clickPanel () {
+ if (!this.isBubblingEvent) {
+ if (this.activated) {
+ this.activated.active=false;
+ if (this.activated.type==this.commonConstants.componentsType.picture) {
+ this.activated.zindex=98;
+ } else {
+ this.activated.zindex=99;
+ }
+ }
+ this.activated=this.screenProperties;
+ this.formActivatedData(this.activated)
+ } else {
+ this.isBubblingEvent=false;
+ }
+ },
+ selectComponent (item) {
+ if (this.activated) {
+ this.activated.active=false;
+ if (this.activated.type==this.commonConstants.componentsType.picture) {
+ this.activated.zindex=98;
+ } else {
+ this.activated.zindex=99;
+ }
+ }
+ item.active=true;
+ item.zindex=100
+ this.activated=item;
+ this.formActivatedData(this.activated)
+ },
+ //保存大屏模板
+ save () {
+ var params={
+ id: this.screenProperties.id,
+ width: this.screenProperties.width,
+ height: this.screenProperties.height,
+ imgUrl: this.screenProperties.imgUrl,
+ background: this.screenProperties.background,
+ }
+ if (this.components!=null&&this.components.length>0) {
+ var components=new Array();
+ for (let index=0; index {
+ if (res.data && res.data.code == 0) {
+ this.$message.success('保存成功')
+ this.components=[];
+ this.getScreenDesign();
+ }
+ });
+ },
+ async preview () {
+ await this.save();
+ this.$openUrl(`/jvs-report-ui/#/report/screenPreview?tplId=${this.screenProperties.id}`, '_blank')
+ },
+ refreshTime (component) {
+ component.content=this.commonUtil.getCurrentDate(component);
+ },
+
+ keyDown () {
+ document.onkeydown=(e) => {
+ //事件对象兼容
+ let e1=e||event||window.event||arguments.callee.caller.arguments[0]
+ //键盘按键判断:左箭头-37;上箭头-38;右箭头-39;下箭头-40
+ if (this.activated&&this.activated.type!=this.commonConstants.componentsType.panel) {
+ if (e1&&e1.keyCode==37) {
+ // 按下左箭头
+ this.activated.x=this.activated.x-1
+ return false;
+ } else if (e1&&e1.keyCode==39) {
+ // 按下右箭头
+ this.activated.x=this.activated.x+1
+ return false;
+ } else if (e1&&e1.keyCode==38) {//上箭头
+ this.activated.y=this.activated.y-1
+ return false;
+ } else if (e1&&e1.keyCode==40) {//下箭头
+ this.activated.y=this.activated.y+1
+ return false;
+ }
+ }
+
+ }
+ },
+ copyComponent (component) {
+ component.active=false;
+ var obj=JSON.parse(JSON.stringify(component));
+ obj.active=false;
+ obj.id=this.commonUtil.getUuid();
+ obj.primaryKey=null;
+ this.activated=obj;
+ this.formActivatedData(this.activated)
+ this.components.push(obj);
+ obj.x=obj.x+10;
+ obj.y=obj.y+10;
+ if (obj.type==this.commonConstants.componentsType.histogram||obj.type==this.commonConstants.componentsType.lineChart||obj.type==this.commonConstants.componentsType.pieChart||obj.type==this.commonConstants.componentsType.gauge) {
+ this.$nextTick(() => {
+ var chart=this.$echarts.init(document.getElementById(obj.id), obj.theme);
+ // 绘制图表
+ chart.setOption(obj.options);
+ this.chartsComponents[obj.id]=chart;
+ });
+ } else if (obj.type==this.commonConstants.componentsType.date) {
+ setInterval(() => {
+ var self=this;
+ setTimeout(function () { self.refreshTime(obj) }, 0)
+ }, 1000)
+ }
+ },
+ formActivatedData (obj) {
+ if(obj.options && obj.options.series) {
+ for (let i=0; i {
+ if (res.data && res.data.code == 0) {
+ this.screenProperties.id=res.data.data.id;
+ this.screenProperties.width=res.data.data.width;
+ this.screenProperties.height=res.data.data.height;
+ this.screenProperties.imgUrl=res.data.data.imgUrl;
+ this.screenProperties.background=res.data.data.background ;
+ if (res.data.data.components!=null&&res.data.data.components.length>0) {
+ for (let index=0; index {
+ this.initChart();
+ this.initDate();
+ });
+ }
+ });
+ },
+ //初始化图表
+ initChart () {
+ if (this.components&&this.components.length>0) {
+ for (let index=0; index0) {
+ for (let index=0; index {
+ var self=this;
+ setTimeout(function () { self.refreshTime(component) }, 0)
+ }, 100)
+ }
+ }
+ }
+ },
+ refreshTime (component) {
+ component.content=this.commonUtil.getCurrentDate(component);
+ }
+ }
+}
diff --git a/src/views/report/views/screen/preview/index.vue b/src/views/report/views/screen/preview/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..d7a2fdce64db3ed066c2b2b4d06686a49b8c4f23
--- /dev/null
+++ b/src/views/report/views/screen/preview/index.vue
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
diff --git a/src/views/report/views/screen/screenDesign.vue b/src/views/report/views/screen/screenDesign.vue
new file mode 100644
index 0000000000000000000000000000000000000000..796dca4e38367c03ccb6d72da4b9070cc1f9fcbe
--- /dev/null
+++ b/src/views/report/views/screen/screenDesign.vue
@@ -0,0 +1,323 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/report/views/screen/template.vue b/src/views/report/views/screen/template.vue
new file mode 100644
index 0000000000000000000000000000000000000000..432a8a12ad6be4120419e6fc058463fe28783396
--- /dev/null
+++ b/src/views/report/views/screen/template.vue
@@ -0,0 +1,166 @@
+
+
+
+
+ 设计
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/report/views/types/api.js b/src/views/report/views/types/api.js
new file mode 100644
index 0000000000000000000000000000000000000000..e0b0f7d577d321a9ab5be7a79ef8aa66749182a7
--- /dev/null
+++ b/src/views/report/views/types/api.js
@@ -0,0 +1,36 @@
+import request from '@/router/axios'
+let base = '/mgr/report'
+// 列表
+export function getTableList (params) {
+ return request({
+ url: base + `/api/reportDatasource/getTableList`,
+ method: 'get',
+ params: params
+ })
+}
+
+// 新增
+export function addRow (data) {
+ return request({
+ url: base + `/api/reportDatasource/insert`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 编辑
+export function editRow (data) {
+ return request({
+ url: base + `/api/reportDatasource/update`,
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除
+export function delRow (id) {
+ return request({
+ url: base + `/api/reportDatasource/delete/${id}`,
+ method: 'delete'
+ })
+}
\ No newline at end of file
diff --git a/src/views/report/views/types/index.vue b/src/views/report/views/types/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..42b609d6c911c2cca8e9b4b91faa5cc3ca81f724
--- /dev/null
+++ b/src/views/report/views/types/index.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/views/rule/api/rule.js b/src/views/rule/api/rule.js
new file mode 100644
index 0000000000000000000000000000000000000000..45e236ac0f87ec08491c2bef0d482344807ef5c6
--- /dev/null
+++ b/src/views/rule/api/rule.js
@@ -0,0 +1,250 @@
+import request from '@/router/axios'
+
+// 保存一个新的 逻辑
+export function SavaJSON (obj) {
+ return request({
+ url: `/mgr/rule/rule`,
+ method: 'put',
+ params: obj
+ })
+}
+
+// 获取所有逻辑 (分页)
+export function getList (obj) {
+ return request({
+ url: `/mgr/rule/rule/page`,
+ method: 'get',
+ params: obj
+ })
+}
+
+// 删除
+export function delEdition (id) {
+ return request({
+ url: `/mgr/rule/rule/${id}`,
+ method: 'delete'
+ })
+}
+
+// 修改信息
+export function editJSON (id, obj) {
+ return request({
+ url: `/mgr/rule/rule/${id}`,
+ method: 'put',
+ data: obj
+ })
+}
+
+// 根据key获取一个逻辑的设计信息
+export function getTemplatejson (key) {
+ return request({
+ url: `/mgr/rule/rule/${key}`,
+ method: 'get'
+ })
+}
+
+// 定时任务设置
+export function setTask (id, data) {
+ return request({
+ url: `/mgr/rule/rule/task/${id}`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 获取所有方法
+export function getFuncList () {
+ return request({
+ url: `/mgr/rule/custom/function/list`,
+ method: 'get'
+ })
+}
+
+// 获取所有的方法分组
+export function getFuncGroup () {
+ return request({
+ url: `/mgr/rule/custom/function/group`,
+ method: 'get'
+ })
+}
+
+// 根据逻辑Key获取所有的版本号
+export function getVersionList (key) {
+ return request({
+ url: `/mgr/rule/rule/versions/${key}`,
+ method: 'get'
+ })
+}
+
+// 保存当前设计信息
+export function saveOrUpdateDesign (data) {
+ return request({
+ url: `/mgr/rule/rule/design`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 测试运行逻辑 cron
+export function getCronList (data) {
+ return request({
+ url: `/mgr/rule/cron`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 删除版本号
+export function delVersion (id) {
+ return request({
+ url: `/mgr/rule/rule/design/${id}`,
+ method: 'delete'
+ })
+}
+
+// 获取类型资源信息
+export function getClassType (key) {
+ return request({
+ url: `/mgr/rule/resources/getClassType`,
+ method: 'get'
+ })
+}
+
+// 方法测试
+export function testFunction (data) {
+ return request({
+ url: `/mgr/rule/custom/function/test`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 逻辑测试
+export function testLJ (id, data) {
+ return request({
+ url: `/mgr/rule/design/${id}`,
+ method: 'get', //'put',
+ // data: data
+ })
+}
+
+// 代码说明
+export function getCodeDoc () {
+ return request({
+ url: `/mgr/rule/design/doc`,
+ method: 'get'
+ })
+}
+
+// 逻辑得 启用 和 禁用
+export function enable (id) {
+ return request({
+ url: `/mgr/rule/rule/design/enable/${id}`,
+ method: 'get'
+ })
+}
+
+// 分页查询某一个逻辑执行的日志服务
+export function pageLog (key, params) {
+ return request({
+ url: `/mgr/rule/log/page/${key}`,
+ method: 'get',
+ params: params
+ })
+}
+
+// 保存逻辑变量
+export function saveParameter (data) {
+ return request({
+ url: `/mgr/rule/design/saveParameter`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 保存自定义配置参数
+export function saveCustomOption (code, data) {
+ return request({
+ url: `/mgr/rule/design/customOption/${code}`,
+ method: 'post',
+ data: data
+ })
+}
+
+
+
+// // 导出文件
+// export function exportWordGet (data) {
+// return postRequest(`/rule-design/export/word`, data)
+// }
+
+// // 获取备注
+// export function getExportWord (id) {
+// return postRequest(`/rule-design/export/${id}`)
+// }
+
+// // ----
+// // 获取渲染json 数据
+// export function getTemplatejson (id) {
+// return getRequest(`/rule-design/rule/${id}`)
+// }
+
+// // 保存一个设计图的草稿
+// export function saveHtml (obj) {
+// return postRequest(`/rule-design/rule/rendering`, obj)
+// }
+
+// // 获取表 视图列表
+// export function getBiao () {
+// return getRequest(`/rule-design/dynamic-table/getAll`)
+// }
+
+// 获取 可 执行得方法列表
+// export function getFuncs () {
+// return getRequest(`/rule-design/custom/function/list`)
+// }
+
+// // 获取所有的数据类型
+// export function getClassType () {
+// return getRequest(`/rule-design/resources/getClassType`)
+// }
+
+// // 测试运行
+// export function testrun (id, obj) {
+// return postRequest(`/rule-design/test/run/${id}`, obj)
+// }
+
+// // 获取所有运算符
+// export function fetchOperator () {
+// return getRequest(`/rule-design/resources/operator`)
+// }
+
+// // 获取所有运算符
+// export function fetchOperator2 () {
+// return getRequest(`/rule-design/resources/if/operator`)
+// }
+
+// // 生成逻辑代码
+// export function Generation (id) {
+// return getRequest(`/rule-design/design/${id}`)
+// }
+
+// // 方法的测试
+// export function functiontest (data) {
+// return postRequest(`/rule-design/custom/function/test/`, data)
+// }
+
+// // 逻辑的测试
+// export function ruletest (id, data, type) {
+// return putRequest(`/rule-design/design/${id}/${type}`, data)
+// }
+
+// // 逻辑的测试
+// export function jsonExport (data) {
+// return postRequest(`/rule-design/json/export`, data)
+// }
+
+// // 风控参数获取
+// export function riskParameter (secret) {
+// return getRequest(`/rule-design/pi/risk/parameter/${secret}`)
+// }
diff --git a/src/views/rule/components/cron.vue b/src/views/rule/components/cron.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3649e16a18dc09c0dce4894aa324139f5004d9a4
--- /dev/null
+++ b/src/views/rule/components/cron.vue
@@ -0,0 +1,141 @@
+
+
+
+
+ 秒
+
+
+
+ 分
+
+
+
+ 时
+
+
+
+ 日
+
+
+
+ 月
+
+
+
+ 周
+
+
+
+ 年
+
+
+
+
+
+
+
+
+
diff --git a/src/views/rule/components/cron/day.vue b/src/views/rule/components/cron/day.vue
new file mode 100644
index 0000000000000000000000000000000000000000..2fc99e5c404c0e701421cb4151d5718adeb9836a
--- /dev/null
+++ b/src/views/rule/components/cron/day.vue
@@ -0,0 +1,168 @@
+
+
+
+ 每日
+
+
+ 不指定
+
+
+ 周期
+ 从
+
+ 至
+
+ 日
+
+
+ 循环
+ 从
+
+ 日开始,每
+
+ 日执行一次
+
+
+ 工作日
+ 本月
+
+ 号,最近的工作日
+
+
+ 本月最后一天
+
+
+ 具体天数(可多选)
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/rule/components/cron/hour.vue b/src/views/rule/components/cron/hour.vue
new file mode 100644
index 0000000000000000000000000000000000000000..393bd8027aa5ea5641c4610def20f3bd8ad25eee
--- /dev/null
+++ b/src/views/rule/components/cron/hour.vue
@@ -0,0 +1,150 @@
+
+
+
+ 每时
+
+
+ 周期
+ 从
+
+ 至
+
+ 时
+
+
+ 循环
+ 从
+
+ 时开始,每
+
+ 时执行一次
+
+
+ 具体小时数(可多选)
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/rule/components/cron/month.vue b/src/views/rule/components/cron/month.vue
new file mode 100644
index 0000000000000000000000000000000000000000..206a09d8e8ab8aec06d88bc1e555843bb1fde56b
--- /dev/null
+++ b/src/views/rule/components/cron/month.vue
@@ -0,0 +1,151 @@
+
+
+
+ 每月
+
+
+ 不指定
+
+
+ 周期
+ 从
+
+ 至
+
+ 月
+
+
+ 循环
+ 从
+
+ 月开始,每
+
+ 月执行一次
+
+
+ 具体月份(可多选)
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/rule/components/cron/secondAndMinute.vue b/src/views/rule/components/cron/secondAndMinute.vue
new file mode 100644
index 0000000000000000000000000000000000000000..76b0c82417c1e7378de8ecfb6fd248e8c8946911
--- /dev/null
+++ b/src/views/rule/components/cron/secondAndMinute.vue
@@ -0,0 +1,149 @@
+
+
+
+
+ 每{{lable}}
+
+
+ 循环
+ 从
+
+ {{lable}}开始,每
+
+ {{lable}}执行一次
+
+
+ 具体秒数(可多选)
+
+
+
+
+
+
+ 周期
+ 从
+
+ 至
+
+ {{lable}}
+
+
+
+
+
+
+
diff --git a/src/views/rule/components/cron/week.vue b/src/views/rule/components/cron/week.vue
new file mode 100644
index 0000000000000000000000000000000000000000..94ca7d46d1fa126c97328ff83346af47dd5af44c
--- /dev/null
+++ b/src/views/rule/components/cron/week.vue
@@ -0,0 +1,165 @@
+
+
+
+ 每周
+
+
+ 不指定
+
+
+ 周期
+ 从星期
+
+ 至星期
+
+
+
+ 循环
+ 从星期
+
+ 开始,每
+
+ 天执行一次
+
+
+ 指定周
+ 本月第
+
+ 周,星期
+
+
+
+ 本月最后一个
+ 星期
+
+
+
+ 具体天(可多选)
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/rule/components/cron/year.vue b/src/views/rule/components/cron/year.vue
new file mode 100644
index 0000000000000000000000000000000000000000..59513f3712288d4bb07a91998dc414f5ff0d99d8
--- /dev/null
+++ b/src/views/rule/components/cron/year.vue
@@ -0,0 +1,130 @@
+
+
+
+ 每年
+
+
+ 不指定
+
+
+ 周期
+ 从
+
+ 至
+
+ 年
+
+
+
+
+
+
+
diff --git a/src/views/rule/components/g6-editor/Base/Edge.js b/src/views/rule/components/g6-editor/Base/Edge.js
new file mode 100644
index 0000000000000000000000000000000000000000..ccc7f5095ef56bb15babefb5ad10b2a35765bc3e
--- /dev/null
+++ b/src/views/rule/components/g6-editor/Base/Edge.js
@@ -0,0 +1,14 @@
+class Edge {
+ constructor(id, source, target, controlPoints, sourceAnchor, targetAnchor, shape,style,label) {
+ this.id = id
+ this.source = source
+ this.target = target
+ this.controlPoints = controlPoints
+ this.sourceAnchor = sourceAnchor
+ this.targetAnchor = targetAnchor
+ this.shape = shape
+ this.style=style
+ this.label=label
+ }
+}
+export default Edge;
\ No newline at end of file
diff --git a/src/views/rule/components/g6-editor/Base/Editor.js b/src/views/rule/components/g6-editor/Base/Editor.js
new file mode 100644
index 0000000000000000000000000000000000000000..8e2289af6dd4cb538946810c3afb37c88e25c2e9
--- /dev/null
+++ b/src/views/rule/components/g6-editor/Base/Editor.js
@@ -0,0 +1,34 @@
+import { uniqueId } from '../../../utils';
+import eventBus from "../../../utils/eventBus";
+
+export default class Editor {
+ constructor() {
+ this.id = uniqueId();
+ }
+ getGrpah() {
+ return this.graph
+ }
+ emit(event, params) {
+ if (event === 'afterAddPage') {
+ this.graph = params.graph
+ }
+ eventBus.$emit(event, params)
+ }
+ on(event) {
+ switch (event) {
+ case 'changeNodeData':
+ this.graph.refresh()
+ break
+ }
+ }
+ add(type, item) {
+ this.graph.add(type, item)
+ }
+ update(item, model) {
+ this.graph.update(item, model)
+ }
+ remove(item) {
+ const node = this.graph.findById(item.id)
+ this.graph.remove(node)
+ }
+}
\ No newline at end of file
diff --git a/src/views/rule/components/g6-editor/Base/Node.js b/src/views/rule/components/g6-editor/Base/Node.js
new file mode 100644
index 0000000000000000000000000000000000000000..98f6d04d6ccdd00499001984b5fee7091e560fc3
--- /dev/null
+++ b/src/views/rule/components/g6-editor/Base/Node.js
@@ -0,0 +1,14 @@
+class Node extends Object{
+ constructor(params) {
+ super()
+ this.id = params.id
+
+ for (let key in params) {
+ this[key] = params[key]||0
+ }
+ this.size = params.size.split('*')
+ this.parent = params.parent // 所属组
+ this.index = params.index // 渲染层级
+ }
+}
+export default Node;
\ No newline at end of file
diff --git a/src/views/rule/components/g6-editor/ContextMenu/index.vue b/src/views/rule/components/g6-editor/ContextMenu/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..19d2c9152522951f994f7e5a6129c44676d8b81d
--- /dev/null
+++ b/src/views/rule/components/g6-editor/ContextMenu/index.vue
@@ -0,0 +1,175 @@
+
+
+
+ -
+
+
+ -
+ {{ menu.name }}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/rule/components/g6-editor/DetailPanel/index.vue b/src/views/rule/components/g6-editor/DetailPanel/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b3f25a050f99925ff0223a1fb5dba67cf39685cb
--- /dev/null
+++ b/src/views/rule/components/g6-editor/DetailPanel/index.vue
@@ -0,0 +1,331 @@
+
+
+
+
+
+
+ {{node.name}}
+
+
+
+ 设置
+ 说明 | 示例
+
+
+
+
+
变量名称
+
+
+
+ {{item.description}}
+
+ {{(item.parent && item.parent.length > 0) ? (item.parent.join('.') + '.' + item.key) : item.key}}
+
+
+ {{item.key}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/rule/components/g6-editor/Flow/customEdge.js b/src/views/rule/components/g6-editor/Flow/customEdge.js
new file mode 100644
index 0000000000000000000000000000000000000000..5c8a87a823428936221920fe94aff89ba56522fa
--- /dev/null
+++ b/src/views/rule/components/g6-editor/Flow/customEdge.js
@@ -0,0 +1,202 @@
+// import G6 from "@antv/g6/build/g6";
+import G6 from "@antv/g6";
+import { uniqueId } from '../../../utils'
+const MIN_ARROW_SIZE = 3
+
+const customEdge = {
+ init() {
+ const dashArray = [
+ [0, 1],
+ [0, 2],
+ [1, 2],
+ [0, 1, 1, 2],
+ [0, 2, 1, 2],
+ [1, 2, 1, 2],
+ [2, 2, 1, 2],
+ [3, 2, 1, 2],
+ [4, 2, 1, 2]
+ ];
+
+ const lineDash = [4,2,1,2];
+ const interval = 9;
+ G6.registerEdge('customEdge', {
+ draw(cfg, group) {
+ let sourceNode, targetNode, start, end
+ if (typeof (cfg.source) === 'string') {
+ cfg.source = cfg.sourceNode
+ }
+ if(!cfg.start){
+ cfg.start={
+ x:0,
+ y:17
+ }
+ }
+ if(!cfg.end){
+ cfg.end={
+ x:0,
+ y:-17
+ }
+ }
+ if (!cfg.source.x) {
+ cfg.source.getModel && (sourceNode = cfg.source.getModel())
+ start = { x: sourceNode.x + cfg.start.x, y: sourceNode.y + cfg.start.y }
+ } else {
+ start = cfg.source
+ }
+ if (typeof (cfg.target) === 'string') {
+ cfg.target = cfg.targetNode
+ }
+ if (!cfg.target.x) {
+
+ targetNode = cfg.target.getModel()
+ end = { x: targetNode.x + cfg.end.x, y: targetNode.y + cfg.end.y }
+ } else {
+ end = cfg.target
+ }
+
+ let path = []
+ let hgap = Math.abs(end.x - start.x)
+ if (end.x > start.x) {
+ path = [
+ ['M', start.x, start.y],
+ [
+ 'C',
+ start.x,
+ start.y + hgap / (hgap / 50),
+ end.x,
+ end.y - hgap / (hgap / 50),
+ end.x,
+ end.y - 4
+ ],
+ [
+ 'L',
+ end.x,
+ end.y
+ ]
+ ]
+ } else {
+ path = [
+ ['M', start.x, start.y],
+ [
+ 'C',
+ start.x,
+ start.y + hgap / (hgap / 50),
+ end.x,
+ end.y - hgap / (hgap / 50),
+ end.x,
+ end.y - 4
+ ],
+ [
+ 'L',
+ end.x,
+ end.y
+ ]
+ ]
+ }
+ let lineWidth = 1;
+ lineWidth = lineWidth > MIN_ARROW_SIZE ? lineWidth : MIN_ARROW_SIZE;
+ const width = lineWidth * 10 / 3;
+ const halfHeight = lineWidth * 4 / 3;
+ const radius = lineWidth * 4;
+ const endArrowPath = [
+ ['M', -width, halfHeight],
+ ['L', 0, 0],
+ ['L', -width, -halfHeight],
+ ['A', radius, radius, 0, 0, 1, -width, halfHeight],
+ ['Z']
+ ];
+ const keyShape = group.addShape('path', {
+ attrs: {
+ id: 'edge' + uniqueId(),
+ path: path,
+ stroke: '#b8c3ce',
+ lineAppendWidth: 10,
+ endArrow: {
+ path: endArrowPath,
+ }
+ }
+ });
+ // 增加连线的样式即线上文本
+ if (cfg.label) {
+ group.addShape('text', {
+ attrs: {
+ id: 'edgeText' + uniqueId(),
+ x: end.x - (end.x - start.x) / 2,
+ y: end.y - (end.y - start.y) / 2,
+ text: cfg.label,
+ fill: cfg.textColor ? cfg.textColor : '#000000'
+ }
+ })
+ }
+ return keyShape
+ },
+ afterDraw(cfg, group) {
+ if (cfg.source.getModel && cfg.source.getModel().isDoingStart && cfg.target.getModel().isDoingEnd) {
+ const shape = group.get('children')[0];
+ const length = shape.getTotalLength(); // G 增加了 totalLength 的接口
+ let totalArray = [];
+ for (var i = 0; i < length; i += interval) {
+ totalArray = totalArray.concat(lineDash);
+ }
+ let index = 0;
+ shape.animate({
+ onFrame() {
+ const cfg = {
+ lineDash: dashArray[index].concat(totalArray)
+ };
+ index = (index + 1) % interval;
+ return cfg;
+ },
+ repeat: true
+ }, 3000);
+ }
+ },
+ setState(name, value, item) {
+ const group = item.getContainer();
+ const shape = group.get("children")[0];
+ const selectStyles = () => {
+ shape.attr("stroke", "#6ab7ff");
+ };
+ const unSelectStyles = () => {
+ shape.attr("stroke", "#b8c3ce");
+ };
+
+ switch (name) {
+ case "selected":
+ case "hover":
+ if (value) {
+ selectStyles()
+ } else {
+ unSelectStyles()
+ }
+ break;
+ }
+ }
+ });
+ G6.registerEdge('link-edge', {
+ draw(cfg, group) {
+ let start, end;
+ const { startPoint, endPoint } = cfg;
+ start = startPoint
+ end = endPoint
+ let path = []
+ path = [
+ ['M', start.x, start.y],
+ ['L', end.x, end.y]
+ ]
+ const keyShape = group.addShape('path', {
+ attrs: {
+ id: 'edge' + uniqueId(),
+ path: path,
+ stroke: '#1890FF',
+ strokeOpacity: 0.9,
+ lineDash: [5, 5]
+ }
+ });
+ return keyShape
+ },
+ });
+ }
+}
+
+export default customEdge
diff --git a/src/views/rule/components/g6-editor/Flow/customNode.js b/src/views/rule/components/g6-editor/Flow/customNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..cd5255830b5296d38c24bc7e0f8cd8f58ad2ea63
--- /dev/null
+++ b/src/views/rule/components/g6-editor/Flow/customNode.js
@@ -0,0 +1,224 @@
+// import G6 from "@antv/g6/build/g6";
+import G6 from "@antv/g6";
+import { uniqueId } from '../../../utils'
+import Shape from '@antv/g6/es/shape'
+const customNode = {
+ init() {
+ G6.registerNode("customNode", {
+ draw(cfg, group) {
+ let size = cfg.size;
+ if(!size){
+ size=[170,34]
+ }
+ // 此处必须是NUMBER 不然bbox不正常
+ const width = parseInt(size[0]);
+ const height = parseInt(size[1]);
+ const color = cfg.color;
+ // 此处必须有偏移 不然drag-node错位
+ const offsetX = -width / 2
+ const offsetY = -height / 2
+ const mainId = 'rect' + uniqueId()
+ const shape = group.addShape("rect", {
+ attrs: {
+ id: mainId,
+ x: offsetX,
+ y: offsetY,
+ width: width,
+ height: height,
+ stroke: "#ced4d9",
+ fill: '#fff',//此处必须有fill 不然不能触发事件
+ radius: 4
+ }
+ });
+ group.addShape("rect", {
+ attrs: {
+ x: offsetX,
+ y: offsetY,
+ width: 4,
+ height: height,
+ fill: color,
+ parent: mainId,
+ radius: [4, 0, 0, 4]
+ }
+ });
+ group.addShape("image", {
+ attrs: {
+ x: offsetX + 16,
+ y: offsetY + 8,
+ width: 20,
+ height: 16,
+ img: cfg.image,
+ parent: mainId
+ }
+ });
+ group.addShape("image", {
+ attrs: {
+ x: offsetX + width - 32,
+ y: offsetY + 8,
+ width: 16,
+ height: 16,
+ parent: mainId,
+ img: cfg.stateImage
+ }
+ });
+ if(cfg.backImage){
+ const clip = new Shape.Rect({
+ attrs: {
+ x: offsetX,
+ y: offsetY,
+ width: width,
+ height: height,
+ fill:'#fff',
+ radius: 4
+ }
+ });
+ group.addShape("image", {
+ attrs: {
+ x: offsetX,
+ y: offsetY,
+ width: width,
+ height: height,
+ img: cfg.backImage,
+ clip: clip
+ }
+ });
+ }
+ if (cfg.label) {
+ group.addShape("text", {
+ attrs: {
+ id: 'label' + uniqueId(),
+ x: offsetX + width / 2,
+ y: offsetY + height / 2,
+ textAlign: "center",
+ textBaseline: "middle",
+ text: cfg.label,
+ parent: mainId,
+ fill: "#565758"
+ }
+ });
+ }
+ if (cfg.inPoints) {
+ for (let i = 0; i < cfg.inPoints.length; i++) {
+ let x,
+ y = 0;
+ //0为顶 1为底
+ if (cfg.inPoints[i][0] === 0) {
+ y = 0;
+ } else {
+ y = height;
+ }
+ x = width * cfg.inPoints[i][1];
+ const id = 'circle' + uniqueId()
+ group.addShape("circle", {
+ attrs: {
+ id: 'circle' + uniqueId(),
+ parent: id,
+ x: x + offsetX,
+ y: y + offsetY,
+ r: 10,
+ isInPointOut: true,
+ fill: "#1890ff",
+ opacity: 0
+ }
+ });
+ group.addShape("circle", {
+ attrs: {
+ id: id,
+ x: x + offsetX,
+ y: y + offsetY,
+ r: 3,
+ isInPoint: true,
+ fill: "#fff",
+ stroke: "#1890ff",
+ opacity: 0
+ }
+ });
+ }
+ }
+ if (cfg.outPoints) {
+ for (let i = 0; i < cfg.outPoints.length; i++) {
+ let x,
+ y = 0;
+ //0为顶 1为底
+ if (cfg.outPoints[i][0] === 0) {
+ y = 0;
+ } else {
+ y = height;
+ }
+ x = width * cfg.outPoints[i][1];
+ const id = 'circle' + uniqueId()
+ group.addShape("circle", {
+ attrs: {
+ id: 'circle' + uniqueId(),
+ parent: id,
+ x: x + offsetX,
+ y: y + offsetY,
+ r: 10,
+ isOutPointOut: true,
+ fill: "#1890ff",
+ opacity: 0//默認0 需要時改成0.3
+ }
+ });
+ group.addShape("circle", {
+ attrs: {
+ id: id,
+ x: x + offsetX,
+ y: y + offsetY,
+ r: 3,
+ isOutPoint: true,
+ fill: "#fff",
+ stroke: "#1890ff",
+ opacity: 0
+ }
+ });
+ }
+ }
+ //group.sort()
+ // 添加文本、更多图形
+ return shape;
+ },
+ //设置状态
+ setState(name, value, item) {
+ const group = item.getContainer();
+ const shape = group.get("children")[0]; // 顺序根据 draw 时确定
+
+ const children = group.findAll(g => {
+ return g.attrs.parent === shape.attrs.id
+ });
+ const circles = group.findAll(circle => {
+ return circle.attrs.isInPoint || circle.attrs.isOutPoint;
+ });
+ const selectStyles = () => {
+ shape.attr("fill", "#f3f9ff");
+ shape.attr("stroke", "#6ab7ff");
+ shape.attr("cursor", "move");
+ children.forEach(child => {
+ child.attr("cursor", "move");
+ });
+ circles.forEach(circle => {
+ circle.attr('opacity', 1)
+ })
+ };
+ const unSelectStyles = () => {
+ shape.attr("fill", "#fff");
+ shape.attr("stroke", "#ced4d9");
+ circles.forEach(circle => {
+ circle.attr('opacity', 0)
+ })
+ };
+ switch (name) {
+ case "selected":
+ case "hover":
+ if (value) {
+ selectStyles()
+ } else {
+ unSelectStyles()
+ }
+ break;
+ }
+ }
+ });
+ }
+}
+
+export default customNode
diff --git a/src/views/rule/components/g6-editor/Flow/index.vue b/src/views/rule/components/g6-editor/Flow/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..41020d34689fce60ff8c1effaf440d62dcaf3203
--- /dev/null
+++ b/src/views/rule/components/g6-editor/Flow/index.vue
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
diff --git a/src/views/rule/components/g6-editor/Flow/teamNode.js b/src/views/rule/components/g6-editor/Flow/teamNode.js
new file mode 100644
index 0000000000000000000000000000000000000000..66ea2a826602cf5707eebda3383610e134605ee9
--- /dev/null
+++ b/src/views/rule/components/g6-editor/Flow/teamNode.js
@@ -0,0 +1,83 @@
+// import G6 from "@antv/g6/build/g6";
+import G6 from "@antv/g6";
+import { uniqueId } from '../../../utils'
+import openSvg from '../assets/icons/open.svg'
+import closeSvg from '../assets/icons/close.svg'
+const teamNode = {
+ init() {
+ G6.registerNode("teamNode", {
+ draw(cfg, group) {
+ const padding = 10
+ const top=20
+ // 此处必须是NUMBER 不然bbox不正常
+ const width = cfg.width + padding * 2
+ const height = cfg.height + padding * 2
+ // 此处必须有偏移 不然drag-node错位
+ const offsetX = -width / 2
+ const offsetY = -height / 2-top
+ const mainId = 'rect' + uniqueId()
+ const shape = group.addShape("rect", {
+ attrs: {
+ id: mainId,
+ x: offsetX,
+ y: offsetY,
+ width: width,
+ height: height+top,
+ stroke: "#ced4d9",
+ fill: '#f2f4f5',//此处必须有fill 不然不能触发事件
+ radius: 4
+ }
+ });
+
+ group.addShape("text", {
+ attrs: {
+ id: 'label' + uniqueId(),
+ x: offsetX+padding,
+ y: offsetY+padding,
+ textBaseline:'top',
+ text: cfg.label || '新建分组',
+ parent: mainId,
+ fill: "#565758"
+ }
+ });
+ group.addShape("image", {
+ attrs: {
+ x: offsetX + width - 26,
+ y: offsetY + 8,
+ width: 16,
+ height: 16,
+ img: closeSvg
+ }
+ });
+ // 添加文本、更多图形
+ return shape;
+ },
+ //设置状态
+ setState(name, value, item) {
+ const group = item.getContainer();
+ const shape = group.get("children")[0]; // 顺序根据 draw 时确定
+ const selectStyles = () => {
+ shape.attr("stroke", "#6ab7ff");
+ shape.attr("cursor", "move");
+ };
+ const unSelectStyles = () => {
+ shape.attr("stroke", "#ced4d9");
+ };
+
+ switch (name) {
+ case "selected":
+ case "hover":
+ if (value) {
+ selectStyles()
+ } else {
+ unSelectStyles()
+ }
+ break;
+ }
+ }
+ });
+
+ }
+}
+
+export default teamNode
diff --git a/src/views/rule/components/g6-editor/G6Editor/index.vue b/src/views/rule/components/g6-editor/G6Editor/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..4349b02263813c21f4513aed47fd0bdbdba5d280
--- /dev/null
+++ b/src/views/rule/components/g6-editor/G6Editor/index.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
diff --git a/src/views/rule/components/g6-editor/ItemPanel/index.vue b/src/views/rule/components/g6-editor/ItemPanel/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..8d90a65e741fb2d0de12a1ac65221493c29bf436
--- /dev/null
+++ b/src/views/rule/components/g6-editor/ItemPanel/index.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/rule/components/g6-editor/ItemPanel/item.vue b/src/views/rule/components/g6-editor/ItemPanel/item.vue
new file mode 100644
index 0000000000000000000000000000000000000000..b038a1d0bfff6058ad6eb667967a3a881bb79b8b
--- /dev/null
+++ b/src/views/rule/components/g6-editor/ItemPanel/item.vue
@@ -0,0 +1,267 @@
+
+
+
+
+
+
+
+ {{tp.label}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/rule/components/g6-editor/Minimap/index.vue b/src/views/rule/components/g6-editor/Minimap/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..6e477dddbd5406784839a927d00fcf8bbff6ebe2
--- /dev/null
+++ b/src/views/rule/components/g6-editor/Minimap/index.vue
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
diff --git a/src/views/rule/components/g6-editor/Page/index.vue b/src/views/rule/components/g6-editor/Page/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..21c4bd1c7e3621c7bea12e53306c756e6711b60b
--- /dev/null
+++ b/src/views/rule/components/g6-editor/Page/index.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/rule/components/g6-editor/Toolbar/index.vue b/src/views/rule/components/g6-editor/Toolbar/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..38fa44c76e78123ba874c2521f964d5466977d59
--- /dev/null
+++ b/src/views/rule/components/g6-editor/Toolbar/index.vue
@@ -0,0 +1,346 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 控制台输出数据
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/rule/components/g6-editor/assets/bg.jpg b/src/views/rule/components/g6-editor/assets/bg.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..787fac9b81f5dc2fe2121c8cd63cc6b7b5379c4e
Binary files /dev/null and b/src/views/rule/components/g6-editor/assets/bg.jpg differ
diff --git a/src/views/rule/components/g6-editor/assets/icons/close.svg b/src/views/rule/components/g6-editor/assets/icons/close.svg
new file mode 100644
index 0000000000000000000000000000000000000000..09d68e0eef56fe08e8f873d3d839a2c0962b74ba
--- /dev/null
+++ b/src/views/rule/components/g6-editor/assets/icons/close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/views/rule/components/g6-editor/assets/icons/ok.svg b/src/views/rule/components/g6-editor/assets/icons/ok.svg
new file mode 100644
index 0000000000000000000000000000000000000000..b525e83269fea8ccd0dfc5b84b6506a33d00527c
--- /dev/null
+++ b/src/views/rule/components/g6-editor/assets/icons/ok.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/views/rule/components/g6-editor/assets/icons/open.svg b/src/views/rule/components/g6-editor/assets/icons/open.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4044677497fe8180cdea57ac3a0d3724476cff47
--- /dev/null
+++ b/src/views/rule/components/g6-editor/assets/icons/open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/views/rule/components/g6-editor/assets/logo.png b/src/views/rule/components/g6-editor/assets/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..f3d2503fc2a44b5053b0837ebea6e87a2d339a43
Binary files /dev/null and b/src/views/rule/components/g6-editor/assets/logo.png differ
diff --git a/src/views/rule/components/g6-editor/behavior/add-edge.js b/src/views/rule/components/g6-editor/behavior/add-edge.js
new file mode 100644
index 0000000000000000000000000000000000000000..7c28889cdcf4d176782620084cf3862adb415a2b
--- /dev/null
+++ b/src/views/rule/components/g6-editor/behavior/add-edge.js
@@ -0,0 +1,159 @@
+
+import eventBus from "../../../utils/eventBus";
+import { uniqueId } from '../../../utils'
+import { mode } from "crypto-js";
+let startPoint=null
+let startItem=null
+let endPoint={}
+let activeItem=null
+let curInPoint=null
+export default {
+ getEvents () {
+ return {
+ mousemove: 'onMousemove',
+ mouseup: 'onMouseup',
+ 'node:mouseover': 'onMouseover',
+ 'node:mouseleave': 'onMouseleave'
+ };
+ },
+ onMouseup (e) {
+ const item=e.item
+ if (item&&item.getType()==='node') {
+ const group=item.getContainer()
+ if (e.target.attrs.isInPoint) {
+ const children=group.cfg.children
+ children.map(child => {
+ if (child.attrs.isInPointOut&&child.attrs.parent===e.target.attrs.id) {
+ activeItem=child
+ }
+ })
+ curInPoint=e.target
+ } else if (e.target.attrs.isInPointOut) {
+ activeItem=e.target
+ const children=group.cfg.children
+ children.map(child => {
+ if (child.attrs.isInPoint&&child.attrs.id===e.target.attrs.parent) {
+ curInPoint=child
+ }
+ })
+ }
+ if (activeItem) {
+ const endX=parseInt(curInPoint.attrs.x)
+ const endY=parseInt(curInPoint.attrs.y)
+ endPoint={ x: endX, y: endY };
+ if (this.edge) {
+ this.graph.removeItem(this.edge);
+ const model={
+ id: 'edge'+uniqueId(),
+ source: startItem,
+ target: item,
+ sourceId: startItem._cfg.id,
+ targetId: item._cfg.id,
+ start: startPoint,
+ end: endPoint,
+ shape: 'customEdge',
+ type: 'edge'
+ }
+ eventBus.$emit('addItem', model)
+ }
+ } else {
+ if (this.edge)
+ this.graph.removeItem(this.edge);
+ }
+ } else {
+ if (this.edge)
+ this.graph.removeItem(this.edge);
+ }
+ this.graph.find("node", node => {
+ const group=node.get('group')
+ const children=group.cfg.children
+ children.map(child => {
+ if (child.attrs.isInPointOut) {
+ child.attr("opacity", "0")
+ }
+ if (child.attrs.isInPoint) {
+ child.attr("opacity", "0")
+ }
+ if (child.attrs.isOutPoint) {
+ child.attr("opacity", "0")
+ child.attr("fill", "#fff")
+ }
+ })
+ })
+ if (startItem) {
+ this.graph.setItemState(startItem, 'hover', false);
+ }
+
+ this.graph.paint()
+ startPoint=null
+ startItem=null
+ endPoint={}
+ activeItem=null
+ curInPoint=null
+ this.graph.setMode('default')
+ },
+ onMousemove (e) {
+ const item=e.item
+ if (!startPoint) {
+ this.graph.find("node", node => {
+ const group=node.get('group')
+ const children=group.cfg.children
+ children.map(child => {
+ if (child.attrs.isInPointOut) {
+ child.attr("opacity", "0.3")
+ }
+ if (child.attrs.isInPoint) {
+ child.attr("opacity", "1")
+ }
+ })
+ })
+ const startX=parseInt(e.target.attrs.x)
+ const startY=parseInt(e.target.attrs.y)
+ startPoint={ x: startX, y: startY };
+ startItem=item
+ this.edge=this.graph.addItem('edge', {
+ source: item,
+ target: item,
+ start: startPoint,
+ end: startPoint,
+ shape: 'link-edge'
+ });
+ } else {
+ const point={ x: e.x, y: e.y };
+ if (this.edge) {
+ // 增加边的过程中,移动时边跟着移动
+ this.graph.updateItem(this.edge, {
+ // start: startPoint,
+ target: point
+ });
+ }
+ }
+ },
+ onMouseover (e) {
+ const item=e.item
+ if (item&&item.getType()==='node') {
+ if (e.target.attrs.isInPointOut&&!this.hasTran) {
+ this.hasTran=true
+ // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ // e.target.transform([
+ // ['t', 0, 3],
+ // ['s', 1.2, 1.2],
+ // ])
+ }
+ this.graph.paint()
+ }
+ },
+ onMouseleave () {
+ this.graph.find("node", node => {
+ const group=node.get('group')
+ const children=group.cfg.children
+ children.map(child => {
+ if (child.attrs.isInPointOut) {
+ child.resetMatrix()
+ }
+ })
+ })
+ this.hasTran=false
+ this.graph.paint()
+ }
+}
diff --git a/src/views/rule/components/g6-editor/behavior/add-menu.js b/src/views/rule/components/g6-editor/behavior/add-menu.js
new file mode 100644
index 0000000000000000000000000000000000000000..ee328a996e509def8c0899327c3fe1272c117a7d
--- /dev/null
+++ b/src/views/rule/components/g6-editor/behavior/add-menu.js
@@ -0,0 +1,21 @@
+import eventBus from "../../../utils/eventBus";
+export default {
+ getEvents() {
+ return {
+ 'node:contextmenu': 'onContextmenu',
+ 'edge:contextmenu': 'onContextmenu',
+ 'mousedown': 'onMousedown',
+ 'canvas:click':'onCanvasClick'
+ };
+ },
+ onContextmenu(e) {
+ eventBus.$emit('contextmenuClick',e)
+ },
+ onMousedown(e) {
+ eventBus.$emit('mousedown',e)
+ },
+ onCanvasClick(e){
+ eventBus.$emit('canvasClick',e)
+ }
+
+};
diff --git a/src/views/rule/components/g6-editor/behavior/drag-item.js b/src/views/rule/components/g6-editor/behavior/drag-item.js
new file mode 100644
index 0000000000000000000000000000000000000000..709a82ac225cfeed5d0c7857935d2d3becdb41b1
--- /dev/null
+++ b/src/views/rule/components/g6-editor/behavior/drag-item.js
@@ -0,0 +1,295 @@
+import { merge, isString } from 'lodash';
+import eventBus from "../../../utils/eventBus";
+const delegateStyle = {
+ fill: '#F3F9FF',
+ fillOpacity: 0.5,
+ stroke: '#1890FF',
+ strokeOpacity: 0.9,
+ lineDash: [5, 5]
+}
+const body = document.body;
+
+export default {
+ isDrag: false,
+ nodeEvent: null,
+ getDefaultCfg() {
+ return {
+ updateEdge: true,
+ delegate: true,
+ delegateStyle: {}
+ };
+ },
+ getEvents() {
+ return {
+ // 'node:mousedown': 'onMousedown',
+ 'mousemove': 'onMousemove',
+ 'mouseup': 'onMouseup',
+ // 'node:dragstart': 'onDragStart',
+ // 'node:drag': 'onDrag',
+ // 'node:dragend': 'onDragEnd',
+ 'canvas:mouseleave': 'onOutOfRange'
+ };
+ },
+ getNode(e) {
+ if (!this.shouldBegin.call(this, e)) {
+ return;
+ }
+ this.isDrag = true
+ this.nodeEvent = e
+ const { item } = e;
+ const graph = this.graph;
+
+ this.targets = [];
+
+ // 获取所有选中的元素
+ const nodes = graph.findAllByState('node', 'selected');
+ if(!item) {
+ return;
+ }
+ const currentNodeId = item.get('id');
+
+ // 当前拖动的节点是否是选中的节点
+ const dragNodes = nodes.filter(node => {
+ const nodeId = node.get('id');
+ return currentNodeId === nodeId;
+ });
+
+ // 只拖动当前节点
+ if (dragNodes.length === 0) {
+ this.target = item;
+ } else {
+ // 拖动多个节点
+ if (nodes.length > 1) {
+ nodes.forEach(node => {
+ this.targets.push(node);
+ });
+ } else {
+ this.targets.push(item);
+ }
+ }
+
+ this.origin = {
+ x: e.x,
+ y: e.y
+ };
+
+ this.point = {};
+ this.originPoint = {};
+ },
+ onMousemove(e) {
+
+ if (!this.origin) {
+ this.getNode(e)
+ }
+ if(!this.isDrag){
+ return
+ }
+ if (!this.get('shouldUpdate').call(this, e)) {
+ return;
+ }
+ // 当targets中元素时,则说明拖动的是多个选中的元素
+ if (this.targets&&this.targets.length > 0) {
+ this._updateDelegate(e, this.nodeEvent);
+ } else {
+ // 只拖动单个元素
+ if(this.target) {
+ this._update(this.target, e, this.nodeEvent, true);
+ }
+ }
+ },
+ onMouseup(e) {
+ if (this.shape) {
+ this.shape.remove();
+ this.shape = null;
+ }
+
+ if (this.target) {
+ const delegateShape = this.target.get('delegateShape');
+ if (delegateShape) {
+ delegateShape.remove();
+ this.target.set('delegateShape', null);
+ }
+ }
+
+ if (this.targets&&this.targets.length > 0) {
+ // 获取所有已经选中的节点
+ this.targets.forEach(node => this._update(node, e));
+ } else if (this.target) {
+ // this._update(this.target, e);
+ const origin = this.origin;
+ const model = this.target.get('model');
+ const nodeId = this.target.get('id');
+ if (!this.point[nodeId]) {
+ this.point[nodeId] = {
+ x: model.x,
+ y: model.y
+ };
+ }
+
+ const x = e.x - origin.x + this.point[nodeId].x;
+ const y = e.y - origin.y + this.point[nodeId].y;
+ const data = {}
+ data.item = this.target
+ data.oldModel = this.origin
+ data.newModel = { x, y }
+ eventBus.$emit('updateItem', data)
+ }
+ this.point = {};
+ this.origin = null;
+ this.originPoint = {};
+ if(this.targets)this.targets.length = 0;
+ this.target = null;
+ // 终止时需要判断此时是否在监听画布外的 mouseup 事件,若有则解绑
+ const fn = this.fn;
+ if (fn) {
+ body.removeEventListener('mouseup', fn, false);
+ this.fn = null;
+ }
+ this.isDrag = false
+ this.nodeEvent = null
+ this.graph.setMode('default')
+ },
+ // 若在拖拽时,鼠标移出画布区域,此时放开鼠标无法终止 drag 行为。在画布外监听 mouseup 事件,放开则终止
+ onOutOfRange(e) {
+ const self = this;
+ if (this.origin) {
+ const canvasElement = self.graph.get('canvas').get('el');
+ const fn = ev => {
+ if (ev.target !== canvasElement) {
+ self.onDragEnd(e);
+ }
+ };
+ this.fn = fn;
+ body.addEventListener('mouseup', fn, false);
+ }
+ },
+ _update(item, e, nodeEvent, force) {
+ const origin = this.origin;
+ const model = item.get('model');
+ const nodeId = item.get('id');
+ if (!this.point[nodeId]) {
+ this.point[nodeId] = {
+ x: model.x,
+ y: model.y
+ };
+ }
+
+ const x = e.x - origin.x + this.point[nodeId].x;
+ const y = e.y - origin.y + this.point[nodeId].y;
+ // 拖动单个未选中元素
+ if (force) {
+ this._updateDelegate(e, nodeEvent, x, y);
+ return;
+ }
+
+ const pos = { x, y };
+
+ if (this.get('updateEdge')) {
+ this.graph.updateItem(item, pos);
+ } else {
+ item.updatePosition(pos);
+ this.graph.paint();
+ }
+ },
+
+ /**
+ * 更新拖动元素时的delegate
+ * @param {Event} e 事件句柄
+ * @param {number} x 拖动单个元素时候的x坐标
+ * @param {number} y 拖动单个元素时候的y坐标
+ */
+ _updateDelegate(e, nodeEvent, x, y) {
+ const bbox = nodeEvent.item.get('keyShape').getBBox();
+ if (!this.shape) {
+ // 拖动多个
+ const parent = this.graph.get('group');
+ const attrs = merge({}, delegateStyle, this.delegateStyle);
+ if (this.targets.length > 0) {
+ const { x, y, width, height, minX, minY } = this.calculationGroupPosition();
+ this.originPoint = { x, y, width, height, minX, minY };
+ // model上的x, y是相对于图形中心的,delegateShape是g实例,x,y是绝对坐标
+ this.shape = parent.addShape('rect', {
+ attrs: {
+ width,
+ height,
+ x,
+ y,
+ ...attrs
+ }
+ });
+ } else if (this.target) {
+ this.shape = parent.addShape('rect', {
+ attrs: {
+ width: bbox.width,
+ height: bbox.height,
+ x: x - bbox.width / 2,
+ y: y - bbox.height / 2,
+ ...attrs
+ }
+ });
+ this.target.set('delegateShape', this.shape);
+ }
+ this.shape.set('capture', false);
+ }
+
+ if (this.targets.length > 0) {
+ const clientX = e.x - this.origin.x + this.originPoint.minX;
+ const clientY = e.y - this.origin.y + this.originPoint.minY;
+ this.shape.attr({
+ x: clientX,
+ y: clientY
+ });
+ } else if (this.target) {
+ this.shape.attr({
+ x: x - bbox.width / 2,
+ y: y - bbox.height / 2
+ });
+ }
+ this.graph.paint();
+ },
+ /**
+ * 计算delegate位置,包括左上角左边及宽度和高度
+ * @memberof ItemGroup
+ * @return {object} 计算出来的delegate坐标信息及宽高
+ */
+ calculationGroupPosition() {
+ const graph = this.graph;
+
+ const nodes = graph.findAllByState('node', 'selected');
+ const minx = [];
+ const maxx = [];
+ const miny = [];
+ const maxy = [];
+
+ // 获取已节点的所有最大最小x y值
+ for (const id of nodes) {
+ const element = isString(id) ? graph.findById(id) : id;
+ const bbox = element.getBBox();
+ const { minX, minY, maxX, maxY } = bbox;
+ minx.push(minX);
+ miny.push(minY);
+ maxx.push(maxX);
+ maxy.push(maxY);
+ }
+
+ // 从上一步获取的数组中,筛选出最小和最大值
+ const minX = Math.floor(Math.min(...minx));
+ const maxX = Math.floor(Math.max(...maxx));
+ const minY = Math.floor(Math.min(...miny));
+ const maxY = Math.floor(Math.max(...maxy));
+
+ const x = minX - 20;
+ const y = minY + 10;
+ const width = maxX - minX;
+ const height = maxY - minY;
+
+ return {
+ x,
+ y,
+ width,
+ height,
+ minX,
+ minY
+ };
+ }
+};
diff --git a/src/views/rule/components/g6-editor/behavior/hover-edge.js b/src/views/rule/components/g6-editor/behavior/hover-edge.js
new file mode 100644
index 0000000000000000000000000000000000000000..e546b10d8c494d2a8f0d90d9520af6db55cb551a
--- /dev/null
+++ b/src/views/rule/components/g6-editor/behavior/hover-edge.js
@@ -0,0 +1,82 @@
+
+import Util from '@antv/g6/es/util'
+import eventBus from "../../../utils/eventBus";
+export default {
+ getEvents() {
+ return {
+ 'edge:mouseover': 'onMouseover',
+ 'edge:mouseleave': 'onMouseleave',
+ "edge:click": "onClick",
+ };
+ },
+ onMouseover(e) {
+ const self = this;
+ const item = e.item;
+ const graph = self.graph;
+ if (item.hasState('selected')) {
+ return
+ } else {
+ if (self.shouldUpdate.call(self, e)) {
+ graph.setItemState(item, 'hover', true);
+ }
+ }
+ graph.paint();
+ },
+ onMouseleave(e) {
+ const self = this;
+ const item = e.item;
+ const graph = self.graph;
+ const group = item.getContainer()
+ group.find(g => {
+ if (g.attrs.isInPoint || g.attrs.isOutPoint) {
+ g.attr("fill", "#fff")
+ }
+ });
+ if (self.shouldUpdate.call(self, e)) {
+ if (!item.hasState('selected'))
+ graph.setItemState(item, 'hover', false);
+ }
+ graph.paint();
+ },
+ onClick(e) {
+ const self = this;
+ const item = e.item;
+ const graph = self.graph;
+ const autoPaint = graph.get('autoPaint');
+ graph.setAutoPaint(false);
+ const selectedNodes = graph.findAllByState('node', 'selected');
+ for(let i in selectedNodes) {
+ graph.setItemState(selectedNodes[i], 'selected', false);
+ }
+ // selectedNodes.foreach(node => {
+ // graph.setItemState(node, 'selected', false);
+ // });
+ if (!self.keydown || !self.multiple) {
+ const selected = graph.findAllByState('edge', 'selected');
+ for(let i in selected) {
+ if (selected[i] !== item) {
+ graph.setItemState(selected[i], 'selected', false);
+ }
+ }
+ // selected.foreach(selected, edge => {
+ // if (edge !== item) {
+ // graph.setItemState(edge, 'selected', false);
+ // }
+ // });
+ }
+ if (item.hasState('selected')) {
+ if (self.shouldUpdate.call(self, e)) {
+ graph.setItemState(item, 'selected', false);
+ }
+ eventBus.$emit('nodeselectchange', { target: item, select: false });
+ } else {
+ if (self.shouldUpdate.call(self, e)) {
+ graph.setItemState(item, 'selected', true);
+ }
+ eventBus.$emit('nodeselectchange', { target: item, select: true, selectType: 'click' });
+ }
+ graph.setAutoPaint(autoPaint);
+ graph.paint();
+ },
+
+};
diff --git a/src/views/rule/components/g6-editor/behavior/hover-node.js b/src/views/rule/components/g6-editor/behavior/hover-node.js
new file mode 100644
index 0000000000000000000000000000000000000000..c0c4d6af2aee88a1586e2b6352f4dd4d3b2c2cf6
--- /dev/null
+++ b/src/views/rule/components/g6-editor/behavior/hover-node.js
@@ -0,0 +1,94 @@
+import eventBus from "../../../utils/eventBus";
+export default {
+ getEvents() {
+ return {
+ 'node:mouseover': 'onMouseover',
+ 'node:mouseleave': 'onMouseleave',
+ "node:mousedown": "onMousedown"
+ };
+ },
+ onMouseover(e) {
+ const self = this;
+ const item = e.item;
+ const graph = self.graph;
+ const group = item.getContainer()
+
+ const autoPaint = graph.get('autoPaint');
+ graph.setAutoPaint(false);
+ if (e.target.attrs.isOutPointOut || e.target.attrs.isOutPoint) {
+ group.find(g => {
+ if (g.attrs.isInPoint || g.attrs.isOutPoint) {
+ g.attr("fill", "#fff")
+ }
+ if (g.attrs.isOutPoint) {
+ if (g.attrs.id === e.target.attrs.parent) {
+ group.find(gr => {
+ if (gr.attrs.id === g.attrs.id) {
+ gr.attr('fill', "#1890ff")
+ gr.attr('opacity',1)
+ }
+ })
+ }
+ if (g.attrs.id === e.target.attrs.id) {
+ g.attr("fill", "#1890ff")
+ g.attr('opacity',1)
+ }
+
+ }
+ });
+ e.target.attr("cursor", "crosshair");
+ this.graph.paint();
+ }
+ if (item.hasState('selected')) {
+ // 移入选中
+ if (self.shouldUpdate.call(self, e)) {
+ if(['start', 'end'].indexOf(item._cfg.model.nodeType) == -1) {
+ graph.setItemState(item, 'selected', true);
+ }
+ }
+ return
+ } else {
+ if (self.shouldUpdate.call(self, e)) {
+ graph.setItemState(item, 'hover', true);
+ if(['start', 'end'].indexOf(item._cfg.model.nodeType) == -1) {
+ graph.setItemState(item, 'selected', true);
+ eventBus.$emit('nodeselectchange', { target: item, select: true, selectType: 'hover' });
+ }
+ }
+ }
+ graph.setAutoPaint(autoPaint);
+ graph.paint();
+ },
+ onMouseleave(e) {
+ const self = this;
+ const item = e.item;
+ const graph = self.graph;
+ const group = item.getContainer()
+ group.find(g => {
+ if (g.attrs.isInPoint || g.attrs.isOutPoint) {
+ g.attr("fill", "#fff")
+ }
+ });
+ if (self.shouldUpdate.call(self, e)) {
+ if(!item.hasState('selected'))
+ graph.setItemState(item, 'hover', false);
+ }
+ graph.paint();
+ },
+ onMousedown(e) {
+ if(e.target.attrs.isOutPoint ||e.target.attrs.isOutPointOut){
+ this.graph.setMode('addEdge')
+ }else{
+ // 左键移动节点
+ if(e.originalEvent.button == 0) {
+ this.graph.setMode('moveNode')
+ }else{
+ // 右键执行 contextmenuClick
+ if(e.originalEvent.button == 2) {
+ eventBus.$emit('contextmenuClick',e)
+ }
+ }
+ }
+ },
+
+};
diff --git a/src/views/rule/components/g6-editor/behavior/index.js b/src/views/rule/components/g6-editor/behavior/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..9e258510db5edfd93d38844416ed2059526d3b08
--- /dev/null
+++ b/src/views/rule/components/g6-editor/behavior/index.js
@@ -0,0 +1,29 @@
+// import G6 from "@antv/g6/build/g6";
+import G6 from "@antv/g6";
+import hoverNode from './hover-node'
+import addLine from './add-edge'
+import dragItem from './drag-item'
+import selectNode from './select-node'
+import hoverEdge from "./hover-edge";
+import keyboard from './keyboard'
+import mulitSelect from './mulit-select'
+import addMenu from './add-menu'
+
+const behavors = {
+ 'hover-node': hoverNode,
+ 'add-edge': addLine,
+ 'drag-item': dragItem,
+ 'select-node': selectNode,
+ 'hover-edge': hoverEdge,
+ 'keyboard':keyboard,
+ 'mulit-select':mulitSelect,
+ 'add-menu':addMenu
+}
+
+export function initBehavors() {
+ for (let key in behavors) {
+ G6.registerBehavior(key, behavors[key])
+ }
+}
+
+
diff --git a/src/views/rule/components/g6-editor/behavior/keyboard.js b/src/views/rule/components/g6-editor/behavior/keyboard.js
new file mode 100644
index 0000000000000000000000000000000000000000..02b203e78a11f98d0e7666c5ab4b311d8175008a
--- /dev/null
+++ b/src/views/rule/components/g6-editor/behavior/keyboard.js
@@ -0,0 +1,28 @@
+import eventBus from "../../../utils/eventBus";
+export default {
+ getDefaultCfg() {
+ return {
+ backKeyCode: 8,
+ deleteKeyCode: 46
+ };
+ },
+ getEvents() {
+ return {
+ keyup: 'onKeyUp',
+ keydown: 'onKeyDown'
+ };
+ },
+
+ onKeyDown(e) {
+ const code = e.keyCode || e.which;
+ switch (code) {
+ case this.deleteKeyCode:
+ case this.backKeyCode:
+ // eventBus.$emit('deleteItem')
+ break
+ }
+ },
+ onKeyUp() {
+ this.keydown = false;
+ }
+};
diff --git a/src/views/rule/components/g6-editor/behavior/mulit-select.js b/src/views/rule/components/g6-editor/behavior/mulit-select.js
new file mode 100644
index 0000000000000000000000000000000000000000..675359a329bd8ef69c5ee0e94b4fd04feb873a66
--- /dev/null
+++ b/src/views/rule/components/g6-editor/behavior/mulit-select.js
@@ -0,0 +1,83 @@
+import Util from '@antv/g6/es/util'
+import eventBus from "../../../utils/eventBus";
+import { uniqueId,getBox } from '../../../utils'
+import config from '../global'
+export default {
+ getDefaultCfg() {
+ return {
+ };
+ },
+ getEvents() {
+ return {
+ 'canvas:mouseenter': 'onCanvasMouseenter',
+ 'canvas:mousedown': 'onCanvasMousedown',
+ mousemove: 'onMousemove',
+ mouseup: 'onMouseup'
+ };
+ },
+ onCanvasMouseenter() {
+ // console.log(this.graph.get('canvas'));
+ const canvas = document.getElementById('graph-container').children[0]
+ canvas.style.cursor = 'crosshair'
+ // this.graph.paint();
+ },
+
+ onCanvasMousedown(e) {
+ const attrs = config.delegateStyle
+ const width = 0, height = 0, x = e.x, y = e.y
+ const parent = this.graph.get('group');
+ this.shape = parent.addShape('rect', {
+ attrs: {
+ id: 'rect' + uniqueId(),
+ width,
+ height,
+ x,
+ y,
+ ...attrs
+ }
+ })
+ },
+ onMousemove(e) {
+ if (this.shape) {
+ const width = e.x - this.shape.attrs.x
+ const height = e.y - this.shape.attrs.y
+ this.shape.attr({
+ width,
+ height
+ })
+ this.graph.paint()
+ }
+ },
+ onMouseup() {
+ const canvas = document.getElementById('graph-container').children[0]
+ canvas.style.cursor = 'default'
+ const selected = this.graph.findAllByState('node', 'selected');
+ selected.foreach(node => {
+ this.graph.setItemState(node, 'selected', false);
+ eventBus.$emit('nodeselectchange', { target: node, select: false });
+ });
+ if (this.shape) {
+ this.addTeam()
+ this.shape.remove();
+ this.shape = null
+ }
+ this.graph.paint()
+ eventBus.$emit('muliteSelectEnd')
+ this.graph.setMode('default')
+ },
+ addTeam() {
+ const { x, y, width, height } = this.shape.attrs
+ const { x1, y1, x2, y2 } = getBox(x, y, width, height)
+ this.graph.findAll('node', node => {
+ const { x: nodeX, y: nodeY, width: nodeWidth, height: nodeHeight } = node.getBBox()
+ const nodeBox = getBox(nodeX, nodeY, nodeWidth, nodeHeight)
+ if ((x2 >= nodeBox.x1 && nodeBox.x1 >= x1) &&
+ (x2 >= nodeBox.x2 && nodeBox.x2 >= x1) &&
+ (y2 >= nodeBox.y1 && nodeBox.y1 >= y1) &&
+ (y2 >= nodeBox.y2 && nodeBox.y2 >= y1)) {
+ this.graph.setItemState(node, 'selected', true);
+ }
+ })
+
+ },
+};
diff --git a/src/views/rule/components/g6-editor/behavior/select-node.js b/src/views/rule/components/g6-editor/behavior/select-node.js
new file mode 100644
index 0000000000000000000000000000000000000000..ae3810f1ee2409575202208198f17afd06c95f19
--- /dev/null
+++ b/src/views/rule/components/g6-editor/behavior/select-node.js
@@ -0,0 +1,96 @@
+
+import Util from '@antv/g6/es/util'
+import eventBus from "../../../utils/eventBus";
+export default {
+ getDefaultCfg () {
+ return {
+ multiple: true,
+ keyCode: 16
+ };
+ },
+ getEvents () {
+ return {
+ 'node:click': 'onClick',
+ 'node:dblclick': 'onDBClick',
+ 'canvas:click': 'onCanvasClick',
+ 'canvas:mouseover': 'onCanvasMouseover',
+ keyup: 'onKeyUp',
+ keydown: 'onKeyDown'
+ };
+ },
+ onClick (e) {
+ const self=this;
+ const item=e.item;
+ const graph=self.graph;
+ eventBus.$emit('nodeClick', {graph: graph, e: e})
+ },
+ onDBClick (e) {
+ const self=this;
+ const item=e.item;
+ const graph=self.graph;
+ const autoPaint=graph.get('autoPaint');
+ graph.setAutoPaint(false);
+ const selectedEdges=graph.findAllByState('edge', 'selected');
+ selectedEdges.forEach(edge => {
+ graph.setItemState(edge, 'selected', false);
+ });
+ if (!self.keydown||!self.multiple) {
+ const selected=graph.findAllByState('node', 'selected');
+ selected.forEach(node => {
+ if (node!==item) {
+ graph.setItemState(node, 'selected', false);
+ }
+ });
+ }
+ if (['start', 'end'].indexOf(item._cfg.model.nodeType)==-1) {
+ if (item.hasState('selected')) {
+ if (self.shouldUpdate.call(self, e)) {
+ graph.setItemState(item, 'selected', true);
+ }
+ eventBus.$emit('nodeselectchange', { target: item, select: true, selectType: 'click' });
+ } else {
+ if (self.shouldUpdate.call(self, e)) {
+ graph.setItemState(item, 'selected', true);
+ }
+ eventBus.$emit('nodeselectchange', { target: item, select: true, selectType: 'click' });
+ }
+ }
+ graph.setAutoPaint(autoPaint);
+ graph.paint();
+ eventBus.$emit('nodeClick', false)
+ },
+ onCanvasClick () {
+ const graph=this.graph;
+ const autoPaint=graph.get('autoPaint');
+ graph.setAutoPaint(false);
+ const selected=graph.findAllByState('node', 'selected');
+ selected.forEach(node => {
+ graph.setItemState(node, 'selected', false);
+ eventBus.$emit('nodeselectchange', { target: node, select: false });
+ });
+
+ const selectedEdges=graph.findAllByState('edge', 'selected');
+ selectedEdges.forEach(edge => {
+ graph.setItemState(edge, 'selected', false);
+ eventBus.$emit('nodeselectchange', { target: edge, select: false });
+ })
+
+ graph.paint();
+ graph.setAutoPaint(autoPaint);
+ },
+ onCanvasMouseover () {
+ const graph=this.graph;
+ graph.paint();
+ },
+ onKeyDown (e) {
+ const code=e.keyCode||e.which;
+ if (code===this.keyCode) {
+ this.keydown=true;
+ } else {
+ this.keydown=false;
+ }
+ },
+ onKeyUp () {
+ this.keydown=false;
+ }
+};
diff --git a/src/views/rule/components/g6-editor/command/index.js b/src/views/rule/components/g6-editor/command/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..fe28e531487659d3cae5c29a6fa48a63c14c0e7d
--- /dev/null
+++ b/src/views/rule/components/g6-editor/command/index.js
@@ -0,0 +1,155 @@
+import { uniqueId } from '../../../utils'
+class command {
+ editor = null;
+ undoList = []
+ redoList = []
+ constructor(editor) {
+ this.editor = editor;
+ }
+ executeCommand(key, datas) {
+ const list = []
+ datas.map(data => {
+ let model = data
+ if (key === 'add') {
+ model.id = data.type + uniqueId()
+ }
+ if (key === 'delete') {
+ if (data.getType() === 'node') {
+ const edges = data.getEdges()
+ model = data.getModel()
+ model.type = data.getType()
+ model.id = data.get('id')
+ edges.forEach(edge => {
+ let edgeModel = edge.getModel()
+ edgeModel.type = 'edge'
+ edgeModel.id = edge.get('id')
+ list.push(edgeModel)
+ })
+ } else if (data.getType() === 'edge') {
+ model = data.getModel()
+ model.type = data.getType()
+ model.id = data.get('id')
+ }
+ }
+ list.push(model)
+
+ this.doCommand(key, model)
+
+ });
+ this.undoList.push({ key, datas: list })
+ if(key==='delete'){
+ this.redoList =[]
+ }
+ this.editor.emit(key, { undoList: this.undoList, redoList: this.redoList })
+ }
+ doCommand(key, data) {
+ switch (key) {
+ case 'add':
+ this.add(data.type, data)
+ break;
+ case "update":
+ this.update(data.item, data.newModel)
+ break
+ case "delete":
+ this.remove(data)
+ break
+ }
+ }
+ add(type, item) {
+ this.editor.add(type, item)
+ }
+ update(item, model) {
+ this.editor.update(item, model)
+ }
+ remove(item) {
+ this.editor.remove(item)
+ }
+ undo() {
+ const undoData = this.undoList.pop()
+ const edgeList = []
+ const list = []
+ for (let i = 0; i < undoData.datas.length; i++) {
+ const data = undoData.datas[i]
+ if (data.type === 'edge') {
+ edgeList.push(data)
+ continue
+ }
+ list.push(data)
+ this.doundo(undoData.key, data)
+ }
+ for (let i = 0; i < edgeList.length; i++) {
+ const edge = edgeList[i]
+ if (edge.source.destroyed) {
+ edge.source = edge.sourceId
+
+ }
+ if (edge.target.destroyed) {
+ edge.target = edge.targetId
+ }
+ list.push(edge)
+ this.doundo(undoData.key, edge)
+ }
+ this.redoList.push({ key: undoData.key, datas: list })
+ this.editor.emit(undoData.key, { undoList: this.undoList, redoList: this.redoList })
+ }
+ doundo(key, data) {
+ switch (key) {
+ case 'add':
+ this.remove(data)
+ break;
+ case "update":
+ this.update(data.item, data.oldModel)
+ break
+ case "delete":
+ this.add(data.type, data)
+ break
+ }
+ }
+ redo() {
+ const redoData = this.redoList.pop()
+ const list = []
+ const edgeList = []
+ for (let i = 0; i < redoData.datas.length; i++) {
+ const data = redoData.datas[i]
+ if (data.type === 'edge') {
+ edgeList.push(data)
+ continue
+ }
+ list.push(data)
+ this.doredo(redoData.key, data)
+ }
+ for (let i = 0; i < edgeList.length; i++) {
+ const edge = edgeList[i]
+ if (edge.source.destroyed) {
+ edge.source = edge.sourceId
+
+ }
+ if (edge.target.destroyed) {
+ edge.target = edge.targetId
+ }
+ list.push(edge)
+ this.doredo(redoData.key, edge)
+ }
+ this.undoList.push({ key: redoData.key, datas: list })
+
+ this.editor.emit(redoData.key, { undoList: this.undoList, redoList: this.redoList })
+ }
+ doredo(key, data) {
+ switch (key) {
+ case 'add':
+ this.add(data.type, data)
+ break;
+ case "update":
+ this.update(data.item, data.newModel)
+ break
+ case "delete":
+ this.remove(data)
+ break
+ }
+ }
+ delete(item) {
+ this.executeCommand('delete', [item])
+ }
+}
+
+export default command;
\ No newline at end of file
diff --git a/src/views/rule/components/g6-editor/global.js b/src/views/rule/components/g6-editor/global.js
new file mode 100644
index 0000000000000000000000000000000000000000..bee83dd42bdafe14c56f2544d090007e0ba7130b
--- /dev/null
+++ b/src/views/rule/components/g6-editor/global.js
@@ -0,0 +1,65 @@
+/**
+ * @fileOverview global config
+ */
+
+export default {
+ version: '0.0.1-beat',
+ rootContainerClassName: 'root-container',
+ nodeContainerClassName: 'node-container',
+ edgeContainerClassName: 'edge-container',
+ groupContainerClassName:'group-container',
+ defaultNode: {
+ type: 'circle',
+ style: {
+ fill: '#fff'
+ },
+ size: 40,
+ color: '#333'
+ },
+ defaultEdge: {
+ type: 'line',
+ style: {},
+ size: 1,
+ color: '#333'
+ },
+ nodeLabel: {
+ style: {
+ fill: '#595959',
+ textAlign: 'center',
+ textBaseline: 'middle'
+ },
+ offset: 5 // 节点的默认文本不居中时的偏移量
+ },
+ edgeLabel: {
+ style: {
+ fill: '#595959',
+ textAlign: 'center',
+ textBaseline: 'middle'
+ }
+ },
+ // 节点应用状态后的样式,默认仅提供 active 和 selected 用户可以自己扩展
+ nodeStateStyle: {
+ active: {
+ fillOpacity: 0.8
+ },
+ selected: {
+ lineWidth: 2
+ }
+ },
+ edgeStateStyle: {
+ active: {
+ strokeOpacity: 0.8
+ },
+ selected: {
+ lineWidth: 2
+ }
+ },
+ loopPosition: 'top',
+ delegateStyle: {
+ fill: '#F3F9FF',
+ fillOpacity: 0.5,
+ stroke: '#1890FF',
+ strokeOpacity: 0.9,
+ lineDash: [5, 5]
+ }
+};
diff --git a/src/views/rule/const/icon/biaoji.png b/src/views/rule/const/icon/biaoji.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2a606ec39d0562c097489e9f11234ec68c1e24d
Binary files /dev/null and b/src/views/rule/const/icon/biaoji.png differ
diff --git a/src/views/rule/const/icon/duanxin.png b/src/views/rule/const/icon/duanxin.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e233912c44ce9f60bb982c64aff667bff1272fb
Binary files /dev/null and b/src/views/rule/const/icon/duanxin.png differ
diff --git a/src/views/rule/const/icon/excel.png b/src/views/rule/const/icon/excel.png
new file mode 100644
index 0000000000000000000000000000000000000000..6303905c0b565c8eb185ba6855cecf960bbc705c
Binary files /dev/null and b/src/views/rule/const/icon/excel.png differ
diff --git a/src/views/rule/const/icon/http.png b/src/views/rule/const/icon/http.png
new file mode 100644
index 0000000000000000000000000000000000000000..cf213ebfb9cebfc9bc9a56a8226612f72882745e
Binary files /dev/null and b/src/views/rule/const/icon/http.png differ
diff --git a/src/views/rule/const/icon/jiaoben.png b/src/views/rule/const/icon/jiaoben.png
new file mode 100644
index 0000000000000000000000000000000000000000..78ca440845c7e85dced718fc8e27498e9bddf964
Binary files /dev/null and b/src/views/rule/const/icon/jiaoben.png differ
diff --git a/src/views/rule/const/icon/shujuku.png b/src/views/rule/const/icon/shujuku.png
new file mode 100644
index 0000000000000000000000000000000000000000..0c6379da7ae415dc9ce3b67dacefe154b8c1b24d
Binary files /dev/null and b/src/views/rule/const/icon/shujuku.png differ
diff --git a/src/views/rule/const/icon/tianqi.png b/src/views/rule/const/icon/tianqi.png
new file mode 100644
index 0000000000000000000000000000000000000000..016d365bd856d0a75236735235c84d9b7476b69c
Binary files /dev/null and b/src/views/rule/const/icon/tianqi.png differ
diff --git a/src/views/rule/const/icon/youjian.png b/src/views/rule/const/icon/youjian.png
new file mode 100644
index 0000000000000000000000000000000000000000..68abec02c0ff8aabcb13da4c8c3d4f50899770b0
Binary files /dev/null and b/src/views/rule/const/icon/youjian.png differ
diff --git "a/src/views/rule/const/img/\344\273\243\347\240\201\346\250\241\345\274\217.png" "b/src/views/rule/const/img/\344\273\243\347\240\201\346\250\241\345\274\217.png"
new file mode 100644
index 0000000000000000000000000000000000000000..02105c28ad6c7cb039afa29466e6e11037541b6f
Binary files /dev/null and "b/src/views/rule/const/img/\344\273\243\347\240\201\346\250\241\345\274\217.png" differ
diff --git "a/src/views/rule/const/img/\344\277\235\345\255\230.png" "b/src/views/rule/const/img/\344\277\235\345\255\230.png"
new file mode 100644
index 0000000000000000000000000000000000000000..49afd1d8b877f57b4420e40713c53f6fa37181cb
Binary files /dev/null and "b/src/views/rule/const/img/\344\277\235\345\255\230.png" differ
diff --git "a/src/views/rule/const/img/\345\205\263\351\227\255.png" "b/src/views/rule/const/img/\345\205\263\351\227\255.png"
new file mode 100644
index 0000000000000000000000000000000000000000..6c831ddede88f5a8b6a564c25b9d8508970a80a9
Binary files /dev/null and "b/src/views/rule/const/img/\345\205\263\351\227\255.png" differ
diff --git "a/src/views/rule/const/img/\345\220\257\347\224\250.png" "b/src/views/rule/const/img/\345\220\257\347\224\250.png"
new file mode 100644
index 0000000000000000000000000000000000000000..a151f9a20af8be46c36f30bc256cfa3dd847f8e4
Binary files /dev/null and "b/src/views/rule/const/img/\345\220\257\347\224\250.png" differ
diff --git "a/src/views/rule/const/img/\345\256\232\346\227\266.png" "b/src/views/rule/const/img/\345\256\232\346\227\266.png"
new file mode 100644
index 0000000000000000000000000000000000000000..eeba7c8c682c46a02b466ad9574fe7a5da66fada
Binary files /dev/null and "b/src/views/rule/const/img/\345\256\232\346\227\266.png" differ
diff --git "a/src/views/rule/const/img/\346\265\213\350\257\225.png" "b/src/views/rule/const/img/\346\265\213\350\257\225.png"
new file mode 100644
index 0000000000000000000000000000000000000000..5ea1e5dfe2fb42d1d08fd01e0c3330bc279fac6b
Binary files /dev/null and "b/src/views/rule/const/img/\346\265\213\350\257\225.png" differ
diff --git a/src/views/rule/router.js b/src/views/rule/router.js
new file mode 100644
index 0000000000000000000000000000000000000000..ec046f05443ff9bfcdf74948cf9b406f04709c1b
--- /dev/null
+++ b/src/views/rule/router.js
@@ -0,0 +1,20 @@
+const base= '' // '/rule-design-ui'
+export default [
+ {
+ path: base+'/ruleList',
+ name: '列表',
+ component: () =>
+ import( /* webpackChunkName: "page" */ './views/list'),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: base + '/ruleDesign',
+ name: 'design',
+ component: () =>
+ import( /* webpackChunkName: "page" */ './views/newDesign') // design')
+ }
+]
diff --git a/src/views/rule/utils/eventBus.js b/src/views/rule/utils/eventBus.js
new file mode 100644
index 0000000000000000000000000000000000000000..865cbb2560c134e9489623ff47230351c4450dda
--- /dev/null
+++ b/src/views/rule/utils/eventBus.js
@@ -0,0 +1,2 @@
+import Vue from 'vue';
+export default new Vue();
\ No newline at end of file
diff --git a/src/views/rule/utils/index.js b/src/views/rule/utils/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..6c820b719d331e7d2686e58a48e48437c191934f
--- /dev/null
+++ b/src/views/rule/utils/index.js
@@ -0,0 +1,30 @@
+import merge from 'lodash/merge';
+import pick from 'lodash/pick';
+import uniqueId from 'lodash/uniqueId';
+import upperFirst from 'lodash/upperFirst';
+
+const toQueryString = obj => Object.keys(obj).map(key => `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`).join('&');
+
+const addListener = (target, eventName, handler) => {
+ if (typeof handler === 'function') target.on(eventName, handler);
+};
+
+const getBox=(x, y, width, height)=> {
+ const x1 = (x + width) < x ? (x + width) : x
+ const x2 = (x + width) > x ? (x + width) : x
+ const y1 = (y + height) < y ? (y + height) : y
+ const y2 = (y + height) > y ? (y + height) : y
+ return {
+ x1, x2, y1, y2
+ }
+}
+
+export {
+ merge,
+ pick,
+ toQueryString,
+ uniqueId,
+ upperFirst,
+ addListener,
+ getBox
+};
\ No newline at end of file
diff --git a/src/views/rule/views/design/coder.vue b/src/views/rule/views/design/coder.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9a03d829f5af8dafb7f51b7169c453d4f48bcaee
--- /dev/null
+++ b/src/views/rule/views/design/coder.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/rule/views/design/form.vue b/src/views/rule/views/design/form.vue
new file mode 100644
index 0000000000000000000000000000000000000000..fdb527adf4e255652c97dfdec02cd6cc027a57b5
--- /dev/null
+++ b/src/views/rule/views/design/form.vue
@@ -0,0 +1,195 @@
+
+
+
+
+
+
+
+
+
+
+
+ 外部调用
+ 内部调用
+
+
+
+
+
+
+ 提示:开关会自动控制操作xxl-job进行动态生成定时任务
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 可选择自动生成,可直接输入cron表达式
+
+
+
+
+
+
+ {{item}}
+
+
+ 保存
+ 取消
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/rule/views/design/setting.vue b/src/views/rule/views/design/setting.vue
new file mode 100644
index 0000000000000000000000000000000000000000..8ce6454e3ffa966ee160b98cf5323103a72c5d52
--- /dev/null
+++ b/src/views/rule/views/design/setting.vue
@@ -0,0 +1,625 @@
+
+
+
+
+
+
+
+
+
+
+
+ 参数名
+ 参数值
+ 操作
+
+
+
+
+
+
+
+
+
+
+ 删除
+
+
+
+
添加
+
+
+
+
必填
+
+
+
+
+
+
+
+ 测试
+
+
+
+
测试
+
+
测试结果
+
![]()
+
+
+
+
+
+
+
+ {{cp.name}}
+ 操作
+
+
+
添加
+
+
+ 保存
+ 取消
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/views/rule/views/design/variable.vue b/src/views/rule/views/design/variable.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e47b2ba31c84da87e20ab5a9f8e74053ae74ba86
--- /dev/null
+++ b/src/views/rule/views/design/variable.vue
@@ -0,0 +1,351 @@
+
+
+
+ 导入json
+
+
+
+ 保存
+
+
+
+
仅支持对象格式数据的json导入,且对象不能为空
+
+
+ 导入
+
+
+
+
+
+
+
diff --git a/src/views/rule/views/list.vue b/src/views/rule/views/list.vue
new file mode 100644
index 0000000000000000000000000000000000000000..31915d96aeab0b1c44bcb6aa9b64aa1781bda459
--- /dev/null
+++ b/src/views/rule/views/list.vue
@@ -0,0 +1,552 @@
+
+
+
+
+
+ 新增
+
+
+ 复制
+
+
+ 修改
+ 设计
+ 日志
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/rule/views/newDesign.vue b/src/views/rule/views/newDesign.vue
new file mode 100644
index 0000000000000000000000000000000000000000..d4149a984c46a1c8db1b58b3d86c51af8a8d1b28
--- /dev/null
+++ b/src/views/rule/views/newDesign.vue
@@ -0,0 +1,1238 @@
+
+
+
+
+
+
+
+
{{LjName}}
+
{{formData.enable ? '启用': '禁用'}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
提示:设计模式保存时会替换代码模式的修改,请谨慎操作!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 添加参数
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 判断条件
+ 删除组
+
+
+
+
+ (
+
+
+
+
+
+ 删除
+ 添加
+ )
+
+
+
+
+
添加一组
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/upms/router.js b/src/views/upms/router.js
index 99cfdae70773559962a3437903722afa1c6a2264..0821d264f05303dbafe723c33624f1f0677ea852 100644
--- a/src/views/upms/router.js
+++ b/src/views/upms/router.js
@@ -318,6 +318,17 @@ export default [
isAuth: false
}
},
+ {
+ path: '/project',
+ name: '项目管理',
+ component: () =>
+ import ( /* webpackChunkName: "page" */ './views/projectManage/index'),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
{
path: '/bulletin',
name: '公告管理',
diff --git a/src/views/upms/views/department/index.vue b/src/views/upms/views/department/index.vue
index b13728b8d310324fa52588b667566c17cfc84921..b3d2fadca2480be6bb905b0d20a3da0601ba8c82 100644
--- a/src/views/upms/views/department/index.vue
+++ b/src/views/upms/views/department/index.vue
@@ -20,7 +20,7 @@
>
添加部门
-
+
+
全部
.el-tree-node__content{
diff --git a/src/views/upms/views/department/option.js b/src/views/upms/views/department/option.js
index 372f8eb3a67464e49e49d79d44bf186290bedbbf..57b150f863a4f5a96c5da39b694c5c29b495712c 100644
--- a/src/views/upms/views/department/option.js
+++ b/src/views/upms/views/department/option.js
@@ -1,4 +1,5 @@
import Vue from "vue"
+import store from "@/store";
export const tableOption = {
page: true,
align: 'center',
@@ -25,7 +26,7 @@ export const tableOption = {
slot: true
},
{
- label: '用户名',
+ label: '账号',
prop: 'accountName',
span: 6,
formSlot: true,
@@ -33,7 +34,7 @@ export const tableOption = {
{ required: true, message: '请输入用户名', trigger: 'blur' }
],
display: false,
- hide: true
+ hide: store.getters.userInfo.adminFlag ? false : true
},
{
label: '姓名',
diff --git a/src/views/upms/views/group/index.vue b/src/views/upms/views/group/index.vue
index a3fb0e3a85699e4f367e554dae5070d8410b6dfd..0c22befabe2e0989d59e10d2755b47f7bc63a387 100644
--- a/src/views/upms/views/group/index.vue
+++ b/src/views/upms/views/group/index.vue
@@ -2,7 +2,7 @@
- 添加群组
+ 添加团队
移出
@@ -18,11 +18,12 @@
{{ritem}}
-
-
-
+
+
全部
{
if (res.data.code==0) {
@@ -167,7 +181,7 @@ export default {
}
})
},
- // 群组更多
+ // 团队更多
morePost (item) {
if(this.lastPost) {
this.lastPost.moretool = false
@@ -183,7 +197,7 @@ export default {
}
})
},
- // 群组选中
+ // 团队选中
groupHandleClick (data, node, dom) {
this.selectOneData = data
if(this.groupId == data.id) {
@@ -207,9 +221,9 @@ export default {
}
this.postForm = {}
if (method == 'add') {
- this.title = "添加群组"
+ this.title = "添加团队"
}else{
- this.title = '修改群组'
+ this.title = '修改团队'
let obj = JSON.parse(JSON.stringify(data))
if(obj.customScope) {
if(obj.customScope.startsWith('{')) {
@@ -218,12 +232,15 @@ export default {
this.groupIds = temp.jobIds
}
}
+ if(obj.principalId) {
+ obj.principal = obj.principalId
+ }
this.postForm = obj
}
this.dialogVisible = true
},
remove (data) {
- this.$confirm('将删除此群组, 是否继续?', '提示', {
+ this.$confirm('将删除此团队, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@@ -232,7 +249,7 @@ export default {
if(res.data.code == 0) {
this.$message.success({
showClose: true,
- message: '删除群组成功',
+ message: '删除团队成功',
})
this.getGroupTree()
}
@@ -247,16 +264,15 @@ export default {
this.customizeList = []
this.groupIds = []
},
- // 提交 群组
+ // 提交 团队
groupSubmitHandle (form) {
let obj = JSON.parse(JSON.stringify(form))
- // let custObj = {deptIds: this.deptIds, jobIds: this.groupIds}
- // obj.customScope = JSON.stringify(custObj)
+ delete obj.principal
this.groupFormOption.submitLoading = true
if(this.method == 'add') {
addGroup(obj).then(res => {
if(res.data.code == 0) {
- this.$message.success('添加群组成功')
+ this.$message.success('添加团队成功')
this.groupFormOption.submitLoading = false
this.handleClose()
this.getGroupTree()
@@ -268,7 +284,7 @@ export default {
if(this.method == 'edit') {
editGroup(obj).then(res => {
if(res.data.code == 0) {
- this.$message.success('修改群组成功')
+ this.$message.success('修改团队成功')
this.groupFormOption.submitLoading = false
this.handleClose()
this.getGroupTree()
@@ -279,7 +295,7 @@ export default {
}
},
delUSerGroup (row) {
- this.$confirm('将移出该用户群组, 是否继续?', '提示', {
+ this.$confirm('将移出该用户团队, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
@@ -313,6 +329,12 @@ export default {
this.getList()
}
})
+ },
+ queryAllHandle () {
+ this.groupId = ""
+ this.$refs.groupTree.setCurrentKey(null)
+ this.$forceUpdate()
+ this.getList()
}
}
}
@@ -360,12 +382,12 @@ export default {
}
.treeBox {
position: absolute;
- //top: 134px;
- top: 94px;
+ //top: 94px;
+ top: 72px;
left: 0;
width: 250px;
- //height: calc(100% - 134px);
- height: calc(100% - 94px);
+ //height: calc(100% - 94px);
+ height: calc(100% - 72px);
overflow: hidden;
overflow-y: auto;
padding-left: 20px;
@@ -373,6 +395,21 @@ export default {
padding-top: 20px;
padding-bottom: 20px;
box-sizing: border-box;
+ .treeBox-title{
+ font-size: 14px;
+ padding-left: 24px;
+ display: block;
+ background: #fff;
+ height: 35px;
+ line-height: 35px;
+ cursor: pointer;
+ }
+ .treeBox-title:hover{
+ background: #EFF2F7;
+ }
+ .treeBox-title-check{
+ background: #F5F7FA;
+ }
.customize-tree-node {
flex: 1;
display: flex;
@@ -396,7 +433,7 @@ export default {
}
}
.el-tree{
- min-height: calc(100% - 19px);
+ min-height: calc(100% - 35px);
}
.el-tree-node{
.el-tree-node__content{
diff --git a/src/views/upms/views/postList/index.vue b/src/views/upms/views/postList/index.vue
index 67b6800a4fc0ccdc5954bfa744a3c3d6afa0f6b2..6616cd488c795d5cd63c245fbcc2257cf599b660 100644
--- a/src/views/upms/views/postList/index.vue
+++ b/src/views/upms/views/postList/index.vue
@@ -23,6 +23,7 @@
+
全部
{
+ return request({
+ url: base + `/JvsApp/page`,
+ method: 'get',
+ params: params
+ })
+}
+
+// 新增
+export const add = (data) => {
+ return request({
+ url: base + `/JvsApp/save`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 编辑
+export const edit = (data) => {
+ return request({
+ url: base + `/JvsApp/edit`,
+ method: 'put',
+ data: data
+ })
+}
+
+// 删除
+export const del = (id) => {
+ return request({
+ url: base + `/JvsApp/del/${id}`,
+ method: 'delete',
+ })
+}
+
+// 分页查询模板
+export const templateList = (params) => {
+ return request({
+ url: base + `/JvsApp/template`,
+ method: 'get',
+ params: params
+ })
+}
+
+// 发布
+export const publish = (id) => {
+ return request({
+ url: base + `/JvsApp/deploy/${id}`,
+ method: 'put',
+ })
+}
+
+// 发布到模板
+export const publishToTemplate = (data) => {
+ return request({
+ url: base + `/JvsApp/deployTemplate`,
+ method: 'post',
+ data: data
+ })
+}
+
+// 卸载
+export const unload = (id) => {
+ return request({
+ url: base + `/JvsApp/unload/${id}`,
+ method: 'put',
+ })
+}
+
+// 获取应用类型字典
+export const getProjectType = (params) => {
+ return request({
+ url: `/mgr/jvs-auth//api/dict/type/jvsapp`,
+ method: 'get',
+ })
+}
diff --git a/src/views/upms/views/projectManage/components/projectDialog.vue b/src/views/upms/views/projectManage/components/projectDialog.vue
new file mode 100644
index 0000000000000000000000000000000000000000..d8e4070137790dad34aca3ae7eb6b855ec697746
--- /dev/null
+++ b/src/views/upms/views/projectManage/components/projectDialog.vue
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
{{ item.name }}
+
{{ item.description }}
+
{{ item.type }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/upms/views/projectManage/index.vue b/src/views/upms/views/projectManage/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..cbbe39c21515af1fa88ac47042ec6298d0a4ac7f
--- /dev/null
+++ b/src/views/upms/views/projectManage/index.vue
@@ -0,0 +1,511 @@
+
+
+
+
+ 新增
+ 从模板新增
+
+
+ 编辑
+ 查看
+ 发布
+ 发布到模板
+ 卸载
+
+
+ {{getIsDeployText(scope.row.isDeploy)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/upms/views/projectManage/option.js b/src/views/upms/views/projectManage/option.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f5caf45070d02435b7cc8d7d782a45e9878fff9
--- /dev/null
+++ b/src/views/upms/views/projectManage/option.js
@@ -0,0 +1,43 @@
+export const tableOption={
+ page: true,
+ addBtn: false,
+ editBtn: false,
+ canncal: false,
+ viewBtn: false,
+ align: 'center',
+ menuAlign: 'center',
+ search: true,
+ cancal: false,
+ showoverflow: true,
+ column: [
+ {
+ label: '实例名称',
+ search: true,
+ prop: 'name',
+ },
+ {
+ label: '分类',
+ prop: 'type',
+ },
+ {
+ label: "图标",
+ prop: "icon",
+ type: 'iconSelect',
+ hide: true
+ },
+ {
+ label: '状态',
+ prop: 'isDeploy',
+ headerExplain: true,
+ explainContent: '未发布:应用管理员可查看;已发布:权限设置人员可查看',
+ slot: true,
+ },
+ {
+ label: "创建时间",
+ prop: "createTime",
+ addDisplay: false,
+ editDisplay: false,
+ // sort: true
+ },
+ ]
+}
diff --git a/src/views/upms/views/role/index.vue b/src/views/upms/views/role/index.vue
index cf1017b4837b981f07603d976a59a04c60b525ed..767bcef55b80cc81aa4a91d9403f635279593e8b 100644
--- a/src/views/upms/views/role/index.vue
+++ b/src/views/upms/views/role/index.vue
@@ -22,6 +22,16 @@
+
@@ -225,11 +235,13 @@ export default {
},
roleHandleClick (data, node, dom) {
this.page.currentPage = 1
- if(this.roleId == data.id) {
- this.roleId = ""
- this.$forceUpdate()
- }else{
- this.roleId = data.id
+ if(data) {
+ if(this.roleId == data.id) {
+ this.roleId = ""
+ this.$forceUpdate()
+ }else{
+ this.roleId = data.id
+ }
}
this.getList()
},
@@ -465,12 +477,12 @@ export default {
.role-list-box{
.role-tree {
position: absolute;
- //top: 134px;
- top: 94px;
+ //top: 94px;
+ top: 72px;
left: 0;
width: 250px;
- //height: calc(100% - 134px);
- height: calc(100% - 94px);
+ //height: calc(100% - 94px);
+ height: calc(100% - 72px);
overflow: hidden;
overflow-y: auto;
padding-left: 20px;
diff --git a/src/views/upms/views/tenantRole/index.vue b/src/views/upms/views/tenantRole/index.vue
index 859e62a879d106435eceadcdb4c6624b2dd7da3c..9dbf0c3f7e4843a47d8afabe0db3753376effdee 100644
--- a/src/views/upms/views/tenantRole/index.vue
+++ b/src/views/upms/views/tenantRole/index.vue
@@ -22,6 +22,16 @@
+
@@ -469,12 +479,12 @@ export default {
.role-list-box{
.role-tree {
position: absolute;
- //top: 134px;
- top: 94px;
+ //top: 94px;
+ top: 72px;
left: 0;
width: 250px;
- //height: calc(100% - 134px);
- height: calc(100% - 94px);
+ //height: calc(100% - 94px);
+ height: calc(100% - 72px);
overflow: hidden;
overflow-y: auto;
padding-left: 20px;
diff --git a/src/views/upms/views/userLoginLogs/index.vue b/src/views/upms/views/userLoginLogs/index.vue
index ef8806f661ae2ecf002dab93825565ea2efe2097..ca825ef09c0cbc0c3053120bbfa03a58076e2545 100644
--- a/src/views/upms/views/userLoginLogs/index.vue
+++ b/src/views/upms/views/userLoginLogs/index.vue
@@ -33,18 +33,22 @@ export default {
page: true,
search: true,
showOverflow: true,
+ hideTop: true,
column: [
{
label: "账号",
prop: "accountName",
+ search: true
},
{
label: "姓名",
prop: "realName",
+ search: true
},
{
label: "登录类型",
- prop: "loginType"
+ prop: "loginType",
+ search: true
},
{
label: "IP",
diff --git a/src/views/weixin-mp/api/wx-account-fans.js b/src/views/weixin-mp/api/wx-account-fans.js
new file mode 100644
index 0000000000000000000000000000000000000000..3ecad034e51eecb69259af01c1e2fcad3b0bb48e
--- /dev/null
+++ b/src/views/weixin-mp/api/wx-account-fans.js
@@ -0,0 +1,48 @@
+import request from "@/router/axios";
+
+export function fetchList(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/account/fans/list`,
+ method: 'get',
+ params: data
+ })
+}
+
+export function createRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/account/fans/add`,
+ method: 'post',
+ data: data
+ })
+}
+
+export function updateRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/account/fans/update`,
+ method: 'post',
+ data: data
+ })
+}
+export function deleteRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/account/fans/delete`,
+ method: 'post',
+ params: data
+ })
+}
+
+export function syncAccountFans(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/account/fans/syncAccountFans`,
+ method: 'post',
+ data: data
+ })
+}
+
+export function sendMsg(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/account/fans/sendMsg`,
+ method: 'post',
+ data: data
+ })
+}
diff --git a/src/views/weixin-mp/api/wx-account.js b/src/views/weixin-mp/api/wx-account.js
new file mode 100644
index 0000000000000000000000000000000000000000..2e3fea760c6a32d9ec74d4db21a708f0518f886b
--- /dev/null
+++ b/src/views/weixin-mp/api/wx-account.js
@@ -0,0 +1,54 @@
+import request from "@/router/axios";
+
+export function fetchList(data) {
+ return request({
+ url: '/mgr/weixin-mp/wx/account/list',
+ method: 'get',
+ params: data
+ })
+}
+
+export function createRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/account/add`,
+ method: 'post',
+ data: data
+ })
+}
+
+export function updateRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/account/update`,
+ method: 'post',
+ data: data
+ })
+}
+export function deleteRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/account/delete`,
+ method: 'post',
+ params: data
+ })
+}
+
+export function fetchAllAccount() {
+ return request({
+ url: `/mgr/weixin-mp/wx/account/listAll`,
+ method: 'post'
+ })
+}
+
+export function generateQRUrl(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/account/generateQRUrl`,
+ method: 'post',
+ data
+ })
+}
+
+export function listTreeWxAccount() {
+ return request({
+ url: `/mgr/weixin-mp/wx/account/listTreeWxAccount`,
+ method: 'post'
+ })
+}
diff --git a/src/views/weixin-mp/api/wx-fans-msg.js b/src/views/weixin-mp/api/wx-fans-msg.js
new file mode 100644
index 0000000000000000000000000000000000000000..6fb3502056dceb6d67e975642a08475e39086cd7
--- /dev/null
+++ b/src/views/weixin-mp/api/wx-fans-msg.js
@@ -0,0 +1,41 @@
+import request from "@/router/axios";
+
+export function fetchList(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/fans/msg/list`,
+ method: 'get',
+ params: data
+ })
+}
+
+export function createRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/fans/msg/add`,
+ method: 'post',
+ data: data
+ })
+}
+
+export function updateRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/fans/msg/update`,
+ method: 'post',
+ data: data
+ })
+}
+
+export function updateResContent(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/fans/msg/updateResContent`,
+ method: 'post',
+ data: data
+ })
+}
+
+export function deleteRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/fans/msg/delete`,
+ method: 'post',
+ params: data
+ })
+}
diff --git a/src/views/weixin-mp/api/wx-menu.js b/src/views/weixin-mp/api/wx-menu.js
new file mode 100644
index 0000000000000000000000000000000000000000..bd11d68f09194f0f52eb310ba1cf0d9da50ed988
--- /dev/null
+++ b/src/views/weixin-mp/api/wx-menu.js
@@ -0,0 +1,53 @@
+import request from "@/router/axios";
+
+export function fetchList(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/menu/list`,
+ method: 'post',
+ params:data
+ })
+}
+
+export function createRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/menu/add`,
+ method: 'post',
+ data: data
+ })
+}
+
+export function updateRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/menu/update`,
+ method: 'post',
+ data: data
+ })
+}
+export function deleteRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/menu/delete`,
+ method: 'post',
+ params: data
+ })
+}
+
+export function listTreeMenu() {
+ return request({
+ url: `/mgr/weixin-mp/wx/menu/listTreeMenu`,
+ method: 'post'
+ })
+}
+export function validateData(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/menu/validateData`,
+ method: 'post',
+ data
+ })
+}
+export function syncAccountMenu(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/menu/syncAccountMenu`,
+ method: 'post',
+ data
+ })
+}
diff --git a/src/views/weixin-mp/api/wx-news-template.js b/src/views/weixin-mp/api/wx-news-template.js
new file mode 100644
index 0000000000000000000000000000000000000000..ab4213f8be7d8f7861758d46f39680c4f4fce851
--- /dev/null
+++ b/src/views/weixin-mp/api/wx-news-template.js
@@ -0,0 +1,82 @@
+import request from "@/router/axios";
+
+export function fetchList(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/news/template/list`,
+ method: 'get',
+ params:data
+ })
+}
+
+export function createRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/news/template/add`,
+ method: 'post',
+ data
+ })
+}
+
+export function updateRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/news/template/update`,
+ method: 'post',
+ data
+ })
+}
+export function deleteRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/news/template/delete`,
+ method: 'post',
+ params:data
+ })
+}
+
+export function addNews(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/news/template/addNews`,
+ method: 'post',
+ data
+ })
+}
+
+export function getNews(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/news/template/getNews`,
+ method: 'post',
+ params:data
+ })
+}
+
+export function uploadNews(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/news/template/uploadNews`,
+ method: 'post',
+ data
+ })
+}
+//查询已经上传的图文
+export function fetchAllNewsTpl(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/news/template/listAll`,
+ method: 'post',
+ params:data
+ })
+}
+
+//查询过滤某个公众号下的粉丝
+export function filterFans(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/news/template/filterFans`,
+ method: 'post',
+ params:data
+ })
+}
+
+export function sendNewsPreview(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/news/template/sendNewsPreview`,
+ method: 'post',
+ data
+ })
+}
+
diff --git a/src/views/weixin-mp/api/wx-text-template.js b/src/views/weixin-mp/api/wx-text-template.js
new file mode 100644
index 0000000000000000000000000000000000000000..33ed4e2f104e8cb6c5c35064f30ba69fcf70387a
--- /dev/null
+++ b/src/views/weixin-mp/api/wx-text-template.js
@@ -0,0 +1,39 @@
+import request from "@/router/axios";
+
+export function fetchList(data) {
+ return request({
+ url: '/mgr/weixin-mp//wx/text/template/list',
+ method: 'get',
+ params: data
+ })
+}
+
+export const createRow = (data) => {
+ return request({
+ url: `/mgr/weixin-mp/wx/text/template/add`,
+ method: 'post',
+ data: data
+ })
+}
+
+export function updateRow(data) {
+ return request({
+ url: '/mgr/weixin-mp/wx/text/template/update',
+ method: 'post',
+ data: data
+ })
+}
+export function deleteRow(data) {
+ return request({
+ url: '/mgr/weixin-mp/wx/text/template/delete',
+ method: 'post',
+ data:data
+ })
+}
+
+export function fetchAllTextTpl() {
+ return request({
+ url: '/mgr/weixin-mp/wx/text/template/listAll',
+ method: 'post'
+ })
+}
diff --git a/src/views/weixin-mp/api/wx_receive_text.js b/src/views/weixin-mp/api/wx_receive_text.js
new file mode 100644
index 0000000000000000000000000000000000000000..95d731bd4bcb23389cdad03c648f22c1b08c67fa
--- /dev/null
+++ b/src/views/weixin-mp/api/wx_receive_text.js
@@ -0,0 +1,32 @@
+import request from "@/router/axios";
+
+export function fetchList(data) {
+ return request({
+ url: '/api/wx/receive/text/list',
+ method: 'post',
+ params:data
+ })
+}
+
+export function createRow(data) {
+ return request({
+ url: '/api/wx/receive/text/add',
+ method: 'post',
+ data
+ })
+}
+
+export function updateRow(data) {
+ return request({
+ url: '/api/wx/receive/text/update',
+ method: 'post',
+ data
+ })
+}
+export function deleteRow(data) {
+ return request({
+ url: '/api/wx/receive/text/delete',
+ method: 'post',
+ params:data
+ })
+}
diff --git a/src/views/weixin-mp/api/wx_subscribe_text.js b/src/views/weixin-mp/api/wx_subscribe_text.js
new file mode 100644
index 0000000000000000000000000000000000000000..87db639d30e455192725fbac9fa7ed9092066e55
--- /dev/null
+++ b/src/views/weixin-mp/api/wx_subscribe_text.js
@@ -0,0 +1,33 @@
+import request from "@/router/axios";
+
+export function fetchList(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/subscribe/text/list`,
+ method: 'get',
+ params: data
+ })
+}
+
+export function createRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/subscribe/text/add`,
+ method: 'post',
+ data: data
+ })
+}
+
+export function updateRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/subscribe/text/update`,
+ method: 'post',
+ data: data
+ })
+}
+export function deleteRow(data) {
+ return request({
+ url: `/mgr/weixin-mp/wx/subscribe/text/delete`,
+ method: 'post',
+ params: data
+ })
+}
+
diff --git a/src/views/weixin-mp/router.js b/src/views/weixin-mp/router.js
new file mode 100644
index 0000000000000000000000000000000000000000..eae451ef8d5c00f55907dafb7f08c484d20e69ac
--- /dev/null
+++ b/src/views/weixin-mp/router.js
@@ -0,0 +1,92 @@
+export default [
+ {
+ path: '/accountList',
+ name: '账号管理',
+ component: () =>
+ import( /* webpackChunkName: "page" */ './views/system/accountList'),
+ meta: {
+ keepAlive: true,
+ isTab: true,
+ isAuth: false
+ }
+ },
+ {
+ path: "/subscribeTextList",
+ name: "欢迎语管理",
+ component: () =>
+ import(/* webpackChunkName: "page" */ "./views/system/subscribeTextList"),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: "/menuList",
+ name: "公众号菜单",
+ component: () =>
+ import(/* webpackChunkName: "page" */ "./views/system/menuList"),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: "/accountFansList",
+ name: "粉丝管理",
+ component: () =>
+ import(/* webpackChunkName: "page" */ "./views/system/accountFansList"),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: "/fansMsgList",
+ name: "粉丝消息",
+ component: () =>
+ import(/* webpackChunkName: "page" */ "./views/system/fansMsgList"),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+
+ // 素材管理
+ {
+ path: "/textTemplateList",
+ name: "文本管理",
+ component: () =>
+ import(/* webpackChunkName: "page" */ "./views/material/textTemplateList"),
+ meta: {
+ keepAlive: true,
+ isTab: false,
+ isAuth: false
+ }
+ },
+ {
+ path: '/newsTemplateList',
+ name: '图文管理',
+ component: () =>
+ import( /* webpackChunkName: "page" */ './views/material/newsTemplateList'),
+ meta: {
+ keepAlive: true,
+ isTab: true,
+ isAuth: false
+ }
+ },
+ {
+ path: '/newsTemplateForm',
+ name: '编辑图文',
+ component: () =>
+ import( /* webpackChunkName: "page" */ './views/material/newsTemplateForm'),
+ meta: {
+ keepAlive: true,
+ isTab: true,
+ isAuth: false
+ }
+ }
+]
diff --git a/src/views/weixin-mp/views/components/TreeTable/README-table.md b/src/views/weixin-mp/views/components/TreeTable/README-table.md
new file mode 100644
index 0000000000000000000000000000000000000000..05326dfad820cd58af9a235e4dd2c708c1715ec9
--- /dev/null
+++ b/src/views/weixin-mp/views/components/TreeTable/README-table.md
@@ -0,0 +1,220 @@
+
+- [Enlgish](#Brief)
+
+# 中文
+
+## 写在前面
+
+此组件仅提供一个创建 `TreeTable` 的解决思路。它基于`element-ui`的 table 组件实现,通过`el-table`的`row-style`方法,在里面判断元素是否需要隐藏或者显示,从而实现`TreeTable`的展开与收起。
+
+并且本组件充分利用 `vue` 插槽的特性来方便用户自定义。
+
+`evel.js` 里面,`addAttrs` 方法会给数据添加几个属性,`treeTotable` 会对数组扁平化。这些操作都不会破坏源数据,只是会新增属性。
+
+## Props 说明
+
+| Attribute | Description | Type | Default |
+| :--------------: | :--------------------------------- | :-----: | :------: |
+| data | 原始展示数据 | Array | [] |
+| columns | 列属性 | Array | [] |
+| defaultExpandAll | 默认是否全部展开 | Boolean | false |
+| defaultChildren | 指定子树为节点对象的某个属性值 | String | children | |
+| indent | 相邻级节点间的水平缩进,单位为像素 | Number | 50 |
+
+> 任何 `el-table` 的属性都支持,例如`border`、`fit`、`size`或者`@select`、`@cell-click`等方法。详情属性见`el-table`文档。
+
+---
+
+### 代码示例
+
+```html
+
+```
+
+#### data(**必填**)
+
+```js
+const data = [
+ {
+ name:'1'
+ children: [
+ {
+ name: '1-1'
+ },
+ {
+ name: '1-2'
+ }
+ ]
+ },
+ {
+ name: `2`
+ }
+]
+```
+
+#### columns(**必填**)
+
+- label: 显示在表头的文字
+- key: 对应 data 的 key。treeTable 将显示相应的 value
+- expand: `true` or `false`。若为 true,则在该列显示展开收起图标
+- checkbox: `true` or `false`。若为 true,则在该列显示`checkbox`
+- width: 每列的宽度,为一个数字(可选)。例如`200`
+- align: 对齐方式 `left/center/right`
+- header-align: 表头对齐方式 `left/center/right`
+
+```javascript
+const columns = [
+ {
+ label: 'Checkbox',
+ checkbox: true
+ },
+ {
+ label: '',
+ key: 'id',
+ expand: true
+ },
+ {
+ label: 'Event',
+ key: 'event',
+ width: 200,
+ align: 'left'
+ },
+ {
+ label: 'Scope',
+ key: 'scope'
+ }
+]
+```
+
+> 树表组件将会根据 columns 的 key 属性生成具名插槽,如果你需要对列数据进行自定义,通过插槽即可实现
+
+```html
+
+ level: {{ scope.row._level }}
+ expand: {{ scope.row._expand }}
+ select: {{ scope.row._select }}
+
+```
+
+## Events
+
+目前提供了几个方法,不过只是`beta`版本,之后很可能会修改。
+
+```js
+this.$refs.TreeTable.addChild(row, data) //添加子元素
+this.$refs.TreeTable.addBrother(row, data) //添加兄弟元素
+this.$refs.TreeTable.delete(row) //删除该元素
+```
+
+## 其他
+
+如果有其他的需求,请参考[el-table](http://element-cn.eleme.io/#/en-US/component/table)的 api 自行修改 index.vue
+
+# English
+
+## Brief
+
+This component only provides a solution for creating `TreeTable`. It is based on the `element-ui` table component. It uses the `row-style` method of `el-table` to determine whether the element needs to be hidden or displayed.
+
+And this component makes full use of the features of the `vue` slot to make it user-friendly.
+
+In `evel.js`, the `addAttrs` method adds several properties to the data, and `treeTotable` flattens the array. None of these operations will destroy the source data, just add properties.
+
+## Props
+
+| Attribute | Description | Type | Default |
+| :--------------: | :----------------------------------------------------------- | :-----: | :------: |
+| data | original display data | Array | [] |
+| columns | column attribute | Array | [] |
+| defaultExpandAll | whether to expand all nodes by default | Boolean | false |
+| defaultChildren | specify which node object is used as the node's subtree | String | children | |
+| indent | horizontal indentation of nodes in adjacent levels in pixels | Number | 50 |
+
+> Any of the `el-table` properties are supported, such as `border`, `fit`, `size` or `@select`, `@cell-click`. See the ʻel-table` documentation for details.
+
+---
+
+### Example
+
+```html
+
+```
+
+#### data(**Required**)
+
+```js
+const data = [
+ {
+ name:'1'
+ children: [
+ {
+ name: '1-1'
+ },
+ {
+ name: '1-2'
+ }
+ ]
+ },
+ {
+ name: `2`
+ }
+]
+```
+
+#### columns(**Required**)
+
+- label: text displayed in the header
+- key: data.key will show in column
+- expand: `true` or `false`
+- checkbox: `true` or `false`
+- width: column width 。such as `200`
+- align: alignment `left/center/right`
+- header-align: alignment of the table header `left/center/right`
+
+```javascript
+const columns = [
+ {
+ label: 'Checkbox',
+ checkbox: true
+ },
+ {
+ label: '',
+ key: 'id',
+ expand: true
+ },
+ {
+ label: 'Event',
+ key: 'event',
+ width: 200,
+ align: 'left'
+ },
+ {
+ label: 'Scope',
+ key: 'scope'
+ }
+]
+```
+
+> The tree table component will generate a named slot based on the key property of columns. If you need to customize the column data, you can do it through the slot.
+
+```html
+
+ level: {{ scope.row._level }}
+ expand: {{ scope.row._expand }}
+ select: {{ scope.row._select }}
+
+```
+
+## Events
+
+Several methods are currently available, but only the `beta` version, which is likely to be modified later.
+
+```js
+this.$refs.TreeTable.addChild(row, data) //Add child elements
+this.$refs.TreeTable.addBrother(row, data) //Add a sibling element
+this.$refs.TreeTable.delete(row) //Delete the element
+```
+
+## Other
+
+If you have other requirements, please refer to the [el-table](http://element-cn.eleme.io/#/en-US/component/table) api to modify the index.vue
diff --git a/src/views/weixin-mp/views/components/TreeTable/eval-bak.js b/src/views/weixin-mp/views/components/TreeTable/eval-bak.js
new file mode 100644
index 0000000000000000000000000000000000000000..e388c2cda7efc628bafa683a8cfe0921de49726e
--- /dev/null
+++ b/src/views/weixin-mp/views/components/TreeTable/eval-bak.js
@@ -0,0 +1,29 @@
+/**
+ * @Author: jianglei
+ * @Date: 2017-10-12 12:06:49
+ */
+'use strict'
+import Vue from 'vue'
+export default function treeToArray(data, expandAll, parent = null, level = null) {
+ let tmp = []
+ Array.from(data).forEach(function(record) {
+ if (record._expanded === undefined) {
+ Vue.set(record, '_expanded', expandAll)
+ }
+ let _level = 1
+ if (level !== undefined && level !== null) {
+ _level = level + 1
+ }
+ Vue.set(record, '_level', _level)
+ // 如果有父元素
+ if (parent) {
+ Vue.set(record, 'parent', parent)
+ }
+ tmp.push(record)
+ if (record.children && record.children.length > 0) {
+ const children = treeToArray(record.children, expandAll, record, _level)
+ tmp = tmp.concat(children)
+ }
+ })
+ return tmp
+}
diff --git a/src/views/weixin-mp/views/components/TreeTable/eval.js b/src/views/weixin-mp/views/components/TreeTable/eval.js
new file mode 100644
index 0000000000000000000000000000000000000000..8659ead813f95e33c18b919d475faf120d7e6f04
--- /dev/null
+++ b/src/views/weixin-mp/views/components/TreeTable/eval.js
@@ -0,0 +1,48 @@
+import Vue from 'vue'
+
+// Flattened array
+export default function treeToArray(data, children = 'children') {
+ let tmp = []
+ data.forEach((item, index) => {
+ Vue.set(item, '_index', index)
+ tmp.push(item)
+ if (item[children] && item[children].length > 0) {
+ const res = treeToArray(item[children], children)
+ tmp = tmp.concat(res)
+ }
+ })
+ return tmp
+}
+
+export function addAttrs(data, { parent = null, preIndex = false, level = 0, expand = false, children = 'children', show = true, select = false } = {}) {
+ data.forEach((item, index) => {
+ const _id = (preIndex ? `${preIndex}-${index}` : index) + ''
+ Vue.set(item, '_id', _id)
+ Vue.set(item, '_level', level)
+ Vue.set(item, '_expand', expand)
+ Vue.set(item, '_parent', parent)
+ Vue.set(item, '_show', show)
+ Vue.set(item, '_select', select)
+ if (item[children] && item[children].length > 0) {
+ addAttrs(item[children], {
+ parent: item,
+ level: level + 1,
+ expand,
+ preIndex: _id,
+ children,
+ status,
+ select
+ })
+ }
+ })
+}
+
+export function cleanParentAttr(data, children = 'children') {
+ data.forEach(item => {
+ item._parent = null
+ if (item[children] && item[children].length > 0) {
+ addAttrs(item[children], children)
+ }
+ })
+ return data
+}
diff --git a/src/views/weixin-mp/views/components/TreeTable/index-bak.vue b/src/views/weixin-mp/views/components/TreeTable/index-bak.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f559a74de0bf0f01dae6db7bc6643ec23938ba58
--- /dev/null
+++ b/src/views/weixin-mp/views/components/TreeTable/index-bak.vue
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row[column.value] }}
+
+
+
+ {{ scope.row[column.value] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/weixin-mp/views/components/TreeTable/index.vue b/src/views/weixin-mp/views/components/TreeTable/index.vue
new file mode 100644
index 0000000000000000000000000000000000000000..65aa1f4c1fcc1f422170d4c17c0a06fb66464817
--- /dev/null
+++ b/src/views/weixin-mp/views/components/TreeTable/index.vue
@@ -0,0 +1,201 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row[item.key] }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/weixin-mp/views/components/TreeTable/readme-bak.md b/src/views/weixin-mp/views/components/TreeTable/readme-bak.md
new file mode 100644
index 0000000000000000000000000000000000000000..05326dfad820cd58af9a235e4dd2c708c1715ec9
--- /dev/null
+++ b/src/views/weixin-mp/views/components/TreeTable/readme-bak.md
@@ -0,0 +1,220 @@
+
+- [Enlgish](#Brief)
+
+# 中文
+
+## 写在前面
+
+此组件仅提供一个创建 `TreeTable` 的解决思路。它基于`element-ui`的 table 组件实现,通过`el-table`的`row-style`方法,在里面判断元素是否需要隐藏或者显示,从而实现`TreeTable`的展开与收起。
+
+并且本组件充分利用 `vue` 插槽的特性来方便用户自定义。
+
+`evel.js` 里面,`addAttrs` 方法会给数据添加几个属性,`treeTotable` 会对数组扁平化。这些操作都不会破坏源数据,只是会新增属性。
+
+## Props 说明
+
+| Attribute | Description | Type | Default |
+| :--------------: | :--------------------------------- | :-----: | :------: |
+| data | 原始展示数据 | Array | [] |
+| columns | 列属性 | Array | [] |
+| defaultExpandAll | 默认是否全部展开 | Boolean | false |
+| defaultChildren | 指定子树为节点对象的某个属性值 | String | children | |
+| indent | 相邻级节点间的水平缩进,单位为像素 | Number | 50 |
+
+> 任何 `el-table` 的属性都支持,例如`border`、`fit`、`size`或者`@select`、`@cell-click`等方法。详情属性见`el-table`文档。
+
+---
+
+### 代码示例
+
+```html
+
+```
+
+#### data(**必填**)
+
+```js
+const data = [
+ {
+ name:'1'
+ children: [
+ {
+ name: '1-1'
+ },
+ {
+ name: '1-2'
+ }
+ ]
+ },
+ {
+ name: `2`
+ }
+]
+```
+
+#### columns(**必填**)
+
+- label: 显示在表头的文字
+- key: 对应 data 的 key。treeTable 将显示相应的 value
+- expand: `true` or `false`。若为 true,则在该列显示展开收起图标
+- checkbox: `true` or `false`。若为 true,则在该列显示`checkbox`
+- width: 每列的宽度,为一个数字(可选)。例如`200`
+- align: 对齐方式 `left/center/right`
+- header-align: 表头对齐方式 `left/center/right`
+
+```javascript
+const columns = [
+ {
+ label: 'Checkbox',
+ checkbox: true
+ },
+ {
+ label: '',
+ key: 'id',
+ expand: true
+ },
+ {
+ label: 'Event',
+ key: 'event',
+ width: 200,
+ align: 'left'
+ },
+ {
+ label: 'Scope',
+ key: 'scope'
+ }
+]
+```
+
+> 树表组件将会根据 columns 的 key 属性生成具名插槽,如果你需要对列数据进行自定义,通过插槽即可实现
+
+```html
+
+ level: {{ scope.row._level }}
+ expand: {{ scope.row._expand }}
+ select: {{ scope.row._select }}
+
+```
+
+## Events
+
+目前提供了几个方法,不过只是`beta`版本,之后很可能会修改。
+
+```js
+this.$refs.TreeTable.addChild(row, data) //添加子元素
+this.$refs.TreeTable.addBrother(row, data) //添加兄弟元素
+this.$refs.TreeTable.delete(row) //删除该元素
+```
+
+## 其他
+
+如果有其他的需求,请参考[el-table](http://element-cn.eleme.io/#/en-US/component/table)的 api 自行修改 index.vue
+
+# English
+
+## Brief
+
+This component only provides a solution for creating `TreeTable`. It is based on the `element-ui` table component. It uses the `row-style` method of `el-table` to determine whether the element needs to be hidden or displayed.
+
+And this component makes full use of the features of the `vue` slot to make it user-friendly.
+
+In `evel.js`, the `addAttrs` method adds several properties to the data, and `treeTotable` flattens the array. None of these operations will destroy the source data, just add properties.
+
+## Props
+
+| Attribute | Description | Type | Default |
+| :--------------: | :----------------------------------------------------------- | :-----: | :------: |
+| data | original display data | Array | [] |
+| columns | column attribute | Array | [] |
+| defaultExpandAll | whether to expand all nodes by default | Boolean | false |
+| defaultChildren | specify which node object is used as the node's subtree | String | children | |
+| indent | horizontal indentation of nodes in adjacent levels in pixels | Number | 50 |
+
+> Any of the `el-table` properties are supported, such as `border`, `fit`, `size` or `@select`, `@cell-click`. See the ʻel-table` documentation for details.
+
+---
+
+### Example
+
+```html
+
+```
+
+#### data(**Required**)
+
+```js
+const data = [
+ {
+ name:'1'
+ children: [
+ {
+ name: '1-1'
+ },
+ {
+ name: '1-2'
+ }
+ ]
+ },
+ {
+ name: `2`
+ }
+]
+```
+
+#### columns(**Required**)
+
+- label: text displayed in the header
+- key: data.key will show in column
+- expand: `true` or `false`
+- checkbox: `true` or `false`
+- width: column width 。such as `200`
+- align: alignment `left/center/right`
+- header-align: alignment of the table header `left/center/right`
+
+```javascript
+const columns = [
+ {
+ label: 'Checkbox',
+ checkbox: true
+ },
+ {
+ label: '',
+ key: 'id',
+ expand: true
+ },
+ {
+ label: 'Event',
+ key: 'event',
+ width: 200,
+ align: 'left'
+ },
+ {
+ label: 'Scope',
+ key: 'scope'
+ }
+]
+```
+
+> The tree table component will generate a named slot based on the key property of columns. If you need to customize the column data, you can do it through the slot.
+
+```html
+
+ level: {{ scope.row._level }}
+ expand: {{ scope.row._expand }}
+ select: {{ scope.row._select }}
+
+```
+
+## Events
+
+Several methods are currently available, but only the `beta` version, which is likely to be modified later.
+
+```js
+this.$refs.TreeTable.addChild(row, data) //Add child elements
+this.$refs.TreeTable.addBrother(row, data) //Add a sibling element
+this.$refs.TreeTable.delete(row) //Delete the element
+```
+
+## Other
+
+If you have other requirements, please refer to the [el-table](http://element-cn.eleme.io/#/en-US/component/table) api to modify the index.vue
diff --git a/src/views/weixin-mp/views/material/newsTemplateForm.vue b/src/views/weixin-mp/views/material/newsTemplateForm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ba5c5de841f3f9b6f8b59158528171256e8451e1
--- /dev/null
+++ b/src/views/weixin-mp/views/material/newsTemplateForm.vue
@@ -0,0 +1,433 @@
+
+
+
+ 防止达到微信API接口访问上限,请先保存草稿,再发布到微信
+ 草稿
+ 发布
+
+
+
+
+
+
+
![]()
+
{{item.title ? item.title : '标题'}}
+
+
+
+
+
{{item.title ? item.title : '标题'}}
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/weixin-mp/views/material/newsTemplateList.vue b/src/views/weixin-mp/views/material/newsTemplateList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..4cd21e771e05fc6bf125996597ad906e8f5ec13c
--- /dev/null
+++ b/src/views/weixin-mp/views/material/newsTemplateList.vue
@@ -0,0 +1,299 @@
+
+
+
+
+ 新增
+
+
+ {{scope.row.isUpload ? '是' : '否'}}
+
+
+ 编辑
+ 图文
+ 预览
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/weixin-mp/views/material/textTemplateList.vue b/src/views/weixin-mp/views/material/textTemplateList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..cf21e81f25972593a218c6c6f7c1db1f7f2a336b
--- /dev/null
+++ b/src/views/weixin-mp/views/material/textTemplateList.vue
@@ -0,0 +1,156 @@
+
+
+
+
+ 新增
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/weixin-mp/views/system/accountFansList.vue b/src/views/weixin-mp/views/system/accountFansList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..1bf200b7786373bc6d0313ee734bfb999187ad69
--- /dev/null
+++ b/src/views/weixin-mp/views/system/accountFansList.vue
@@ -0,0 +1,310 @@
+
+
+
+
+
+
+
+ {{ scope.row.nicknameStr }}
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 回复
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/weixin-mp/views/system/accountList.vue b/src/views/weixin-mp/views/system/accountList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..a346710ae6094bb227ec0a9b0592170627ba6d97
--- /dev/null
+++ b/src/views/weixin-mp/views/system/accountList.vue
@@ -0,0 +1,183 @@
+
+
+
+
+ 新增
+
+
+ 编辑
+ 生成二维码
+ 删除
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/weixin-mp/views/system/fansMsgList.vue b/src/views/weixin-mp/views/system/fansMsgList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..74af5d0e5f95d58c52deecb58482bb81c516918c
--- /dev/null
+++ b/src/views/weixin-mp/views/system/fansMsgList.vue
@@ -0,0 +1,236 @@
+
+
+
+
+ {{ scope.row.nicknameStr }}
+
+
+ {{ item.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 回复
+ 删除
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/weixin-mp/views/system/menuList.vue b/src/views/weixin-mp/views/system/menuList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9ef6efc5a5dc948f5d0aa2f7b528d2550017f197
--- /dev/null
+++ b/src/views/weixin-mp/views/system/menuList.vue
@@ -0,0 +1,602 @@
+
+
+
+
+
+
+
+
+
+ 同步菜单
+ 刷新
+ {{ expandAllTitle }}
+ 新增
+
+
+
+
+
+
+ {{ formatMenuType(scope.row) }}
+
+
+ {{ formatMenuLevel(scope.row) }}
+
+
+
+ 添加下级
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/weixin-mp/views/system/receiveTextList.vue b/src/views/weixin-mp/views/system/receiveTextList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..782a512d887274d2ca9030eeb907c75d4a48176b
--- /dev/null
+++ b/src/views/weixin-mp/views/system/receiveTextList.vue
@@ -0,0 +1,312 @@
+
+
+
+
+
+
+
+ 查询
+ 刷新
+ 新增
+
+
+
+
+
+ {{ scope.row.wxAccountName }}
+
+
+
+
+ {{ scope.row.receiveText }}
+
+
+
+
+ {{ scope.row.msgType == '1' ? '文本消息':'图文消息' }}
+
+
+
+
+ {{ scope.row.tplName }}
+
+
+
+
+ {{ scope.row.tplContent }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/weixin-mp/views/system/subscribeTextList.vue b/src/views/weixin-mp/views/system/subscribeTextList.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3770780105d66d881d89203c3019203c37613eb5
--- /dev/null
+++ b/src/views/weixin-mp/views/system/subscribeTextList.vue
@@ -0,0 +1,193 @@
+
+
+
+
+ 新增
+
+
+ 编辑
+ 删除
+
+
+
+
+
+
+
+
+
+
diff --git a/vue.config.js b/vue.config.js
index ab7d2b3e1ffc8bcc0cfddb008271132d159bc391..9840e1e580a956c4104671de2f1f9a5c7debba86 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -3,11 +3,9 @@
* https://cli.vuejs.org/zh/config/#%E7%9B%AE%E6%A0%87%E6%B5%8F%E8%A7%88%E5%99%A8
*
*/
-// const url = "http://www.demo.jvs.bctools.cn" // "http://10.1.0.48:10000"
-const url = "http://www.bctools.cn" // "http://10.1.0.48:10000"
+const url = "http://localhost:10000" // "http://10.1.0.48:10000"
// 基础路径,发布前修改这里,当前配置打包出来的资源都是相对路径
-// const wsUrl = "http://www.demo.jvs..bctools.cn" // "http://10.1.0.48:10000"
-const wsUrl = "http://www.bctools.cn" //
+const wsUrl = "http://localhost:10000" // "http://10.1.0.48:10000"
let path = "jvs-ui";
module.exports = {
@@ -17,8 +15,6 @@ module.exports = {
assetsDir: path + "/static",
//静太资源文件
indexPath: path + "/index.html",
- //打包文件路径
- outputDir: 'docker/dist',
lintOnSave: true,
productionSourceMap: false,