From e13278606d3facef443c5c65e07b42c52c7a38d5 Mon Sep 17 00:00:00 2001 From: ludc Date: 星期三, 22 十一月 2023 17:12:46 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- Source/UBCS-WEB/package.json | 4 Source/UBCS-WEB/src/components/Master/MasterEditBulk.vue | 40 +++++ Source/UBCS-WEB/src/views/statistic/statisticPage.vue | 23 +++ Source/UBCS-WEB/src/views/wel/Statistic.vue | 35 ++-- Source/UBCS-WEB/src/components/Master/MasterTransfer.vue | 2 Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue | 59 ++++++-- Source/UBCS-WEB/src/components/StatisticsComponent/lineChart.vue | 103 ++++++++++++++ Source/UBCS-WEB/src/components/BatchImport/index.vue | 81 +++++++++-- Source/UBCS-WEB/src/main.js | 2 Source/UBCS-WEB/src/views/MasterData/items.vue | 8 + Source/UBCS-WEB/vue.config.js | 4 Source/UBCS-WEB/src/components/Master/MasterTree.vue | 1 12 files changed, 310 insertions(+), 52 deletions(-) diff --git a/Source/UBCS-WEB/package.json b/Source/UBCS-WEB/package.json index 8553d6c..3d5663c 100644 --- a/Source/UBCS-WEB/package.json +++ b/Source/UBCS-WEB/package.json @@ -16,6 +16,7 @@ "babel-polyfill": "^6.26.0", "classlist-polyfill": "^1.2.0", "crypto-js": "^4.1.1", + "echarts": "4.9.0", "element-ui": "^2.15.6", "instead": "^1.0.3", "js-base64": "^2.5.1", @@ -27,10 +28,12 @@ "node-gyp": "^4.0.0", "nprogress": "^0.2.0", "portfinder": "^1.0.23", + "save": "^2.9.0", "script-loader": "^0.7.2", "vue": "^2.6.10", "vue-axios": "^2.1.2", "vue-clipboard2": "^0.3.3", + "vue-echarts": "5.0.0-beta.0", "vue-flowchart-editor": "^1.0.2", "vue-i18n": "^8.7.0", "vue-router": "^3.0.1", @@ -40,6 +43,7 @@ "@vue/cli-plugin-babel": "^3.1.1", "@vue/cli-plugin-eslint": "^3.1.5", "@vue/cli-service": "^3.1.4", + "@vue/composition-api": "^1.7.2", "chai": "^4.1.2", "node-sass": "^6.0.1", "sass-loader": "^10.0.5", diff --git a/Source/UBCS-WEB/src/components/BatchImport/index.vue b/Source/UBCS-WEB/src/components/BatchImport/index.vue index 3df3124..02d31db 100644 --- a/Source/UBCS-WEB/src/components/BatchImport/index.vue +++ b/Source/UBCS-WEB/src/components/BatchImport/index.vue @@ -14,7 +14,7 @@ </ul> <div class="radio_box" - v-show="currentTypeObj[type]['upParams'] === 'classifyAttr'" + v-show="currentTypeObj[type]['upParams'] === 'classifyAttr' && this.type !== 'bulkEdit'" > <span>鍒嗙被鐨勮矾寰勪娇鐢ㄧ殑灞炴��:</span> <el-radio-group v-model="classifyAttr"> @@ -65,8 +65,14 @@ size="small" @click="downloadTemplateFun" :loading="downloadLoading" - >涓嬭浇瀵煎叆妯℃澘</el-button - > + v-if="type !== 'bulkEdit'" + >涓嬭浇瀵煎叆妯℃澘</el-button> + <el-button type="primary" + size="small" + :loading="downloadLoading" + @click="downloadTemplateFun" + v-if="type === 'bulkEdit'" + >涓嬭浇缂栬緫妯℃澘</el-button> <el-button size="small" @click="dialogVisible = false">鍏抽棴</el-button> </template> <ShowImportData @@ -93,6 +99,8 @@ downloadBatchImportApplyTemplate, downloadBatchApplyCodeTemplate, } from "../../api/batchImport/index"; +import {exportCode} from '@/api/GetItem' +import func from "@/util/func"; import FormTemplate from "../FormTemplate/FormTemplate.vue"; import { getToken } from "@/util/auth"; import codeApply from "@/mixins/codeApply.js"; @@ -116,6 +124,14 @@ type: { type: String, default: "", + }, + tableHeadFindData:{ + type:Array, + default:[] + }, + selectRow:{ + type:Array, + default:[] }, resetTable: Function }, @@ -146,7 +162,7 @@ return this.currentTypeObj[this.type]["action"]; }, upParams() { - if (this.type === "historyImport" || this.type === "batchApplyCode") { + if (this.type === "historyImport" || this.type === "batchApplyCode" || this.type === "bulkEdit") { return { codeClassifyOid: this.codeClassifyOid, classifyAttr: this.classifyAttr, @@ -169,6 +185,7 @@ }, data() { return { + exportArrTwo: {}, classifyAttr: "id", downloadLoading: false, showVisible: false, @@ -189,8 +206,19 @@ downloadTemplateFun: downloadHistoryImportTemplate, upParams: "classifyAttr", }, + bulkEdit:{ + title: "鎵归噺缂栬緫瀵煎叆", + tipList: [ + "1.鏍囬甯︿簲瑙掓槦鐨勮〃绀哄叧閿睘鎬э紝甯︽槦鍙疯〃绀哄繀杈撻」", + "2.姣忔浠呰兘鏈�澶氬鍏�5000鏉℃暟鎹�(鍙�氳繃nacos杩涜閰嶇疆锛屾帹鑽�5000/娆″鍏�)锛屽鏋滃嚭閿欎細杩斿洖閿欒鐨勬暟鎹拰鍘熷洜锛屼絾鏄纭暟鎹彲浠ョ户缁繚瀛�", + "3.璇锋寜鐓т笅杞界殑缂栬緫妯℃澘鎵�浣跨敤鐨勯厤缃繘琛屽叿浣撻厤缃�" + ], + action: "/api/ubcs-code/mdmEngineController/batchImportHistoryData", + downloadTemplateFun: downloadHistoryImportTemplate, + upParams: "classifyAttr", + }, batchImportApply: { - title: "鎵归噺鐢宠缂栫爜", + title: "鎵归噺瀵煎叆鐢宠", tipList: [ "1.鏍囬甯︿簲瑙掓槦鐨勮〃绀哄叧閿睘鎬э紝甯︽槦鍙疯〃绀哄繀杈撻」", "2.璇蜂竴瀹氬厛閫夋嫨/杈撳叆缂栫爜瑙勫垯鐨勭爜娈靛�煎悗鍐嶉�夋嫨excel鏂囦欢", @@ -239,17 +267,38 @@ }, // 涓嬭浇瀵煎叆妯℃澘 downloadTemplateFun() { - this.downloadLoading = true; - this.downloadTemplateApi({ - codeClassifyOid: this.codeClassifyOid, - }) - .then((res) => { - this.$utilFunc.downloadFileByBlob(res.data, this.title + "妯℃澘.xls"); - this.downloadLoading = false; - }) - .catch(() => { - this.downloadLoading = false; - }); + if(this.type !== 'bulkEdit'){ + this.downloadLoading = true; + this.downloadTemplateApi({ + codeClassifyOid: this.codeClassifyOid, + }) + .then((res) => { + this.$utilFunc.downloadFileByBlob(res.data, this.title + "妯℃澘.xls"); + this.downloadLoading = false; + }) + .catch(() => { + this.downloadLoading = false; + }); + return; + } + if(this.type === 'bulkEdit'){ + this.tableHeadFindData.map(item => item.prop) + .forEach((prop, index) => { + this.exportArrTwo[`attrIdIndexMap[${index}]`] = prop; + }); + exportCode({ + codeClassifyOid: this.codeClassifyOid, + 'conditionMap[oid]': this.ids, ...this.exportArrTwo, + limit: -1 + }).then(res => { + // console.log('res',res) + if (res) { + func.downloadFileByBlobHandler(res); + this.$message.success('涓嬭浇鎴愬姛锛岃鏌ョ湅锛�') + } + }) + return; + } }, onSuccess(res) { if (Object.keys(res.data).length === 0) { diff --git a/Source/UBCS-WEB/src/components/Master/MasterEditBulk.vue b/Source/UBCS-WEB/src/components/Master/MasterEditBulk.vue new file mode 100644 index 0000000..6853226 --- /dev/null +++ b/Source/UBCS-WEB/src/components/Master/MasterEditBulk.vue @@ -0,0 +1,40 @@ +<template> + <el-dialog + v-if="dialogVisible" + v-dialogDrag + title="鎵归噺淇敼" + :visible.sync="dialogVisible" + append-to-body + ></el-dialog> +</template> + +<script> +export default { + name: "MasterEditBulk", + props: { + visible: { + type: Boolean, + default: false, + }, + }, + data(){ + return{ + + } + }, + computed:{ + dialogVisible: { + get() { + return this.visible; + }, + set(val) { + this.$emit("update:visible", val); + }, + }, + } +} +</script> + +<style scoped> + +</style> diff --git a/Source/UBCS-WEB/src/components/Master/MasterTransfer.vue b/Source/UBCS-WEB/src/components/Master/MasterTransfer.vue index 8d3d9df..7ddabc7 100644 --- a/Source/UBCS-WEB/src/components/Master/MasterTransfer.vue +++ b/Source/UBCS-WEB/src/components/Master/MasterTransfer.vue @@ -112,7 +112,7 @@ }, value: { handler(newval, oldval) { - //console.log('value', newval) + // console.log('value', newval) } } }, diff --git a/Source/UBCS-WEB/src/components/Master/MasterTree.vue b/Source/UBCS-WEB/src/components/Master/MasterTree.vue index c1e383e..3948716 100644 --- a/Source/UBCS-WEB/src/components/Master/MasterTree.vue +++ b/Source/UBCS-WEB/src/components/Master/MasterTree.vue @@ -211,6 +211,7 @@ this.TableRend(); // TableHeadRend() 鏂规硶瀹屾垚鍚庡啀鎵ц TableRend() this.$emit('nodeClick', this.templateOids) this.$emit("codeClassifyOid", this.nodeClickList.oid) + this.$emit("nodeClickList", this.nodeClickList) } catch (error) { // 澶勭悊閿欒 this.$message.error(error) diff --git a/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue b/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue index af69b6f..5025b4b 100644 --- a/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue +++ b/Source/UBCS-WEB/src/components/MasterCrud/VciMasterCrud.vue @@ -62,7 +62,7 @@ </el-link> </template> </el-table-column> - <el-table-column v-for="item in this.tableHeadFindData" v-if="!item.hidden && item.prop !== 'id' && item.prop !== 'lcstatus'" + <el-table-column v-for="item in this.tableHeadFindData" v-if="!item.hidden && item.prop !== 'id' && item.prop !== 'lcstatus' && Object.keys(item.referConfig).length <= 0" :key="item.id" :formatter="item.formatter" :label="item.label" :prop="item.prop" @@ -71,7 +71,14 @@ :width="item.width" align="center"> </el-table-column> - + <!-- 鍙傜収鏁版嵁--> + <el-table-column v-for="(item,index) in referArray" key="index" v-if="Object.keys(item.referConfig).length > 0 && !item.hidden" :label="item.title" prop="jiliangdw" + :show-overflow-tooltip="true" :sortable="item.sortable" :width="item.width" + align="center"> + <template slot-scope="scope"> + <span>{{ scope.row.jiliangdwname }}</span> + </template> + </el-table-column> </el-table> </div> </el-row> @@ -100,7 +107,7 @@ :visible.sync="editvisible" type="edit" @submit="EditSumbit"></FormTemplateDialog> <!-- 鎵归噺缂栬緫--> - <FormBulkEdit :visible.sync="bulkeditvisible"></FormBulkEdit> +<!-- <MasterEditBulk :visible.sync="bulkeditvisible" ></MasterEditBulk>--> <!-- 鏁版嵁璇︽儏--> <FormTemplateDialog :codeClassifyOid="this.codeClassifyOid" :codeRuleOid="this.codeRuleOid" :rowOid="this.LinkObject.oid" :templateOid="templateOid" @@ -133,6 +140,10 @@ :tableData="tableData" :tableHeadData="tableHeadFindData" :templateOid="templateOid" :visible.sync="dialogPush"></MasterTransfer> + <!-- 瀵煎叆--> + <BatchImport v-if="batchImportData.visible" v-bind="batchImportData" :resetTable="CrudRend" + :visible.sync="batchImportData.visible" :tableHeadData="tableHeadFindData" :selectRow="selectRow"> + </BatchImport> <!-- 鐩镐技椤�--> <ResembleQueryDialog :codeClassifyOid="codeClassifyOid" :codeRuleOid="this.codeRuleOid" :rowOid="rowOid" :templateOid="templateOid" :visible.sync="similarVisible"></ResembleQueryDialog> @@ -144,12 +155,6 @@ </el-pagination> </div> </div> - </div> - <div> -<!-- 瀵煎叆--> - <BatchImport v-if="batchImportData.visible" v-bind="batchImportData" :resetTable="CrudRend" - :visible.sync="batchImportData.visible"> - </BatchImport> </div> <div class="bottom"> <el-collapse v-model="visibleNames" @change="handleCollapse"> @@ -179,6 +184,7 @@ import SetPersonnel from "@/components/template/SetPersonnel"; import ResembleQueryDialog from "@/components/FormTemplate/ResembleQueryDialog.vue"; import BatchImport from '@/components/BatchImport' +import MasterEditBulk from '@/components/Master/MasterEditBulk' import {validatenull} from "@/util/validate"; import fileInHtml from "@/components/file/inHtml.vue"; import {getUserInfo} from "@/api/system/user"; @@ -191,6 +197,7 @@ ResembleQueryDialog, BatchImport, fileInHtml, + MasterEditBulk }, name: "Crud.vue", props: { @@ -239,7 +246,10 @@ Treedata: { type: Array }, - + nodeClickList:{ + type:Array, + default:[] + } }, data() { return { @@ -250,8 +260,12 @@ LinkList: [], isCodeArrayPushed: false, // 缂栫爜鏁扮粍娣诲姞鏍囪瘑鍙橀噺 CodeArray: [], + //鐢熷懡鍛ㄦ湡鏁扮粍 lcstatusArray:[], + //鍙傜収鏁版嵁鏁扮粍 + referArray:[], islcstatusPushed:false, + isReferPushed:false, // 鐘舵�佹悳绱� statusSelect: "all", // 鍏抽敭瀛楁煡璇� @@ -426,7 +440,16 @@ // console.log('lcstatusArray', this.lcstatusArray); this.islcstatusPushed = true; } - // console.log('new',newval) + if(!this.isReferPushed){ + if (newval.find(item => Object.keys(item.referConfig).length > 0)) { + this.referArray.push(newval.find(item => Object.keys(item.referConfig).length > 0)); + }else { + this.referArray.push([]) + } + } + this.isReferPushed=true; + console.log('new',this.referArray) + console.log('ss',newval.find(item => Object.keys(item.referConfig).length > 0)) this.WupinFindValue = '' }, }, @@ -521,7 +544,7 @@ // 鏍囧噯淇 if (uniqueFlag === 'CODEAMEND') return this.codeAMENDHandler() //鎵归噺缂栬緫 - if (uniqueFlag === 'bulkEdit') return this.bulkEditHandler() + if (uniqueFlag === 'bulkEdit') return this.bulkEditHandler("bulkEdit") }); }, //鏍囧噯鐢宠 @@ -548,7 +571,12 @@ } }, //鎵归噺缂栬緫 - bulkEditHandler(){ + bulkEditHandler(type){ + console.log(this.nodeClickList) + if(this.nodeClickList.children.length >= 1){ + this.$message.warning('褰撳墠閫夋嫨鐨勫垎绫讳笉鏄彾瀛愯妭鐐癸紝涓嶅厑璁告壒閲忕紪杈戯紒') + return; + } if(this.selectRow.length <= 0){ this.$message.warning('璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹紒') return; @@ -556,7 +584,9 @@ const Editing = this.selectRow.every(item => item.lcstatus === 'Editing'); if (Editing) { - this.bulkeditvisible = true; + this.batchImportData.visible = true + this.batchImportData.type = type + this.batchImportData.codeClassifyOid = this.codeClassifyOid } else { this.$message.warning('閫夋嫨鐨勬暟鎹腑鏈夌紪鐮佺姸鎬佷笉鏄�滅紪杈戜腑鈥濓紝涓嶅彲缂栬緫锛�'); } @@ -574,6 +604,7 @@ // const requestData = this.selectRow.forEach(item => { // return { oids: item.oid, btmName: item.btmname }; // }); + const oids = this.selectRow.map(item => item.oid).join(','); applyGroupCode({oids, btmName: this.selectRow[0].btmname}).then(res => { if (res.data.code == 200) { diff --git a/Source/UBCS-WEB/src/components/StatisticsComponent/lineChart.vue b/Source/UBCS-WEB/src/components/StatisticsComponent/lineChart.vue new file mode 100644 index 0000000..6ea8c1d --- /dev/null +++ b/Source/UBCS-WEB/src/components/StatisticsComponent/lineChart.vue @@ -0,0 +1,103 @@ +<template> + <div id="main"> + <basic-container> + <v-chart :options="option" ref="chart" style="width: 100%;height:100vh"></v-chart> + </basic-container> + </div> +</template> + +<script> +import 'echarts' +import 'echarts/lib/chart/line'; +import 'echarts/lib/component/tooltip'; +import 'echarts/lib/component/title'; +import 'echarts/lib/component/legend'; +export default { + name: "statisticPage", + data() { + return { + option: { + color: ['red','black'], + legend: { + data: ['鍥句緥1', '鍥句緥2', '鍥句緥3'], + }, + dataset: [ + { + id: 'dataset_raw', + source: [ + { month: 1, total: 1000, newly: 800 }, + { month: 2, total: 5000, newly: 1000 }, + { month: 3, total: 1800, newly: 1400 }, + { month: 4, total: 1500, newly: 1200 }, + { month: 5, total: 1000, newly: 1200 }, + { month: 6, total: 1500, newly: 1200 }, + { month: 7, total: 1500, newly: 1200 }, + { month: 8, total: 1500, newly: 1000 }, + { month: 9, total: 1500, newly: 1200 }, + { month: 10, total: 1500, newly: 1200 }, + { month: 11, total: 1500, newly: 1200 }, + { month: 12, total: 1500, newly: 1200 }, + ], + }, + ], + title: { + text: '涓婚搴撴暟鎹粺璁″垎鏋�', + left:'center', + textAlign:'center' + }, + tooltip: { + trigger: 'axis', + }, + xAxis: { + type: 'category', + nameLocation: 'middle', + name:'month', + // data: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] // 鏈堜唤鏁版嵁 + }, + yAxis: { + name: 'Number', + type: 'value', + }, + series: [ + { + type: 'line', + datasetId: 'dataset_raw', + showSymbol: false, + encode: { + x: 'month', + y: 'total', + itemName: 'month', + tooltip: ['total'], + }, + }, + { + type: 'line', + datasetId: 'dataset_raw', + showSymbol: false, + encode: { + x: 'month', + y: 'newly', + itemName: 'month', + tooltip: ['newly'], + }, + }, + ], + } + }; + }, + mounted() { + import('echarts').then((echarts) => { + // console.log(echarts) + this.$nextTick(() => { + const chartDom = this.$refs.chart.$el; + const myChart = echarts.init(chartDom); + myChart.setOption(this.option); + }); + }); + }, +} +</script> + +<style scoped> + +</style> diff --git a/Source/UBCS-WEB/src/main.js b/Source/UBCS-WEB/src/main.js index b4c69fe..da4a596 100644 --- a/Source/UBCS-WEB/src/main.js +++ b/Source/UBCS-WEB/src/main.js @@ -24,6 +24,8 @@ import website from '@/config/website'; import crudCommon from '@/mixins/crud'; import Divider from './components/Divider'; +import ECharts from 'vue-echarts' +Vue.component('v-chart', ECharts) // 涓氬姟缁勪欢 import tenantPackage from './views/system/tenantpackage'; import enupackage from "@/views/modeling/enupackage"; diff --git a/Source/UBCS-WEB/src/views/MasterData/items.vue b/Source/UBCS-WEB/src/views/MasterData/items.vue index 49816c3..f84b48b 100644 --- a/Source/UBCS-WEB/src/views/MasterData/items.vue +++ b/Source/UBCS-WEB/src/views/MasterData/items.vue @@ -15,6 +15,7 @@ @tableHeadBttoms="tableHeadBttoms" @tableHeadDataFateher="tableHeadDatas" @tableHeadFindData="tableHeadFindDatas" + @nodeClickList="nodeClickLists" @total="totals" > </master-tree> @@ -35,6 +36,7 @@ :tableHeadFindData="tableHeadFindData" :templateOid="templateOid" :total="this.total" + :nodeClickList="this.nodeClickList" @currentPage="currentPages" @pageSize="pageSizes" > @@ -67,12 +69,16 @@ total: "", isLoading: false, tableHeadFindData: {}, - TreeValue: '' + TreeValue: '', + nodeClickList:[] } }, created() { }, methods: { + nodeClickLists(val){ + this.nodeClickList=val; + }, TreeValueEmit(val) { this.TreeValue = val }, diff --git a/Source/UBCS-WEB/src/views/statistic/statisticPage.vue b/Source/UBCS-WEB/src/views/statistic/statisticPage.vue new file mode 100644 index 0000000..8707be1 --- /dev/null +++ b/Source/UBCS-WEB/src/views/statistic/statisticPage.vue @@ -0,0 +1,23 @@ +<template> +<lineChart></lineChart> +</template> + +<script> +import lineChart from "../../components/StatisticsComponent/lineChart" + +export default { + components: { + lineChart + }, + name: "statisticPage", + data(){ + return{ + + } + } +} +</script> + +<style scoped> + +</style> diff --git a/Source/UBCS-WEB/src/views/wel/Statistic.vue b/Source/UBCS-WEB/src/views/wel/Statistic.vue index 691cf38..0eda3f5 100644 --- a/Source/UBCS-WEB/src/views/wel/Statistic.vue +++ b/Source/UBCS-WEB/src/views/wel/Statistic.vue @@ -9,6 +9,7 @@ top='-40px'> <el-table ref="TableBox" + v-loading="TableLoading" :data="Crud.data" border style="width: 100%" @@ -66,6 +67,7 @@ name: "Statistic", data() { return { + TableLoading: false, loading: true, Crud: { form: '', @@ -120,30 +122,27 @@ // console.log(row) this.SelectRow = row; }, - SaveHandler() { + async SaveHandler() { if (this.SelectRow.length <= 0) { - this.$message.warning('璇烽�夋嫨涓�鏉℃暟鎹紒') - return + this.$message.warning('璇烽�夋嫨涓�鏉℃暟鎹紒'); + return; } - let mdmNameList = []; - mdmNameList = this.SelectRow.map(item => { - return item.code - }) - console.log(mdmNameList) - save(this.userId, mdmNameList).then(res => { - console.log(res) - if (res.data.code === 200) { - this.$message.success('淇濆瓨鎴愬姛锛�') - //娓呴櫎宸叉湁鏁扮粍涓璸ush鏁版嵁 + this.TableLoading = true; + try { + const {data: {code}} = await save(this.userId, this.SelectRow.map(item => item.code)); + if (code === 200) { + this.$message.success('淇濆瓨鎴愬姛锛�'); this.newData = []; - this.option.data = [] - this.MasterGetList() + this.option.data = []; + this.MasterGetList(); this.dialogTableVisible = false; - //瀛椾綋鍜岃竟妗嗛噸鏂板姞杞� + this.TableLoading = false; this.loading = true; - this.FontInfo() + this.FontInfo(); } - }) + } catch { + this.TableLoading = false; + } }, MoreHandler() { this.dialogTableVisible = true; diff --git a/Source/UBCS-WEB/vue.config.js b/Source/UBCS-WEB/vue.config.js index 264ceae..fcfbd7d 100644 --- a/Source/UBCS-WEB/vue.config.js +++ b/Source/UBCS-WEB/vue.config.js @@ -26,9 +26,9 @@ proxy: { '/api': { //鏈湴鏈嶅姟鎺ュ彛鍦板潃 - target: 'http://127.0.0.1:37000', + // target: 'http://127.0.0.1:37000', // target: 'http://192.168.1.51:37000', - // target: 'http://dev.vci-tech.com:37000', + target: 'http://dev.vci-tech.com:37000', //yxc // target: 'http:// 192.168.0.104:37000', // target: 'http://192.168.0.105:37000', -- Gitblit v1.9.3