学 赵 1 year ago
parent
commit
de63165831
  1. BIN
      code/WebApp/vue/SettleAccount-vue.rar
  2. 21
      code/WebApp/vue/package.json
  3. BIN
      code/WebApp/vue/src/api.rar
  4. 80
      code/WebApp/vue/src/api/monitor/job.js
  5. 35
      code/WebApp/vue/src/api/monitor/jobLog.js
  6. 9
      code/WebApp/vue/src/api/monitor/server.js
  7. BIN
      code/WebApp/vue/src/assets/iconfont.rar
  8. BIN
      code/WebApp/vue/src/assets/img/win-logo-1.png
  9. 7
      code/WebApp/vue/src/axios/index.js
  10. 0
      code/WebApp/vue/src/components/1.vue
  11. 64
      code/WebApp/vue/src/components/CreateCom/Job-Select.vue
  12. 64
      code/WebApp/vue/src/components/CreateCom/Xh-JS-Select copy.vue
  13. 67
      code/WebApp/vue/src/components/CreateCom/Xh-JS-Select-Label.vue
  14. 5
      code/WebApp/vue/src/components/CreateCom/Xh-JS-Select.vue
  15. BIN
      code/WebApp/vue/src/components/CreateCom/XhSwitch.rar
  16. 752
      code/WebApp/vue/src/components/ImportExcel-benteng/index-1.vue
  17. 256
      code/WebApp/vue/src/components/ImportExcel-benteng/index.vue
  18. 387
      code/WebApp/vue/src/components/ImportExcel-faw/index-1.vue
  19. 142
      code/WebApp/vue/src/components/ImportExcel-faw/index.vue
  20. 461
      code/WebApp/vue/src/components/ImportExcel-hq/index-1.vue
  21. 252
      code/WebApp/vue/src/components/ImportExcel-hq/index.vue
  22. 814
      code/WebApp/vue/src/components/ImportExcel-vw/index-1.vue
  23. 177
      code/WebApp/vue/src/components/ImportExcel-vw/index.vue
  24. 4
      code/WebApp/vue/src/components/ImportExcel/index.vue
  25. 766
      code/WebApp/vue/src/components/ImportTxt/index-1.vue
  26. 109
      code/WebApp/vue/src/components/ImportTxt/index.vue
  27. BIN
      code/WebApp/vue/src/components/ImportTxt/index525.rar
  28. 2
      code/WebApp/vue/src/components/Pagination/index.vue
  29. 93
      code/WebApp/vue/src/components/PasteExcel/index.vue
  30. 594
      code/WebApp/vue/src/components/UploadFiles/index.vue
  31. 136
      code/WebApp/vue/src/directive/scrollx/index.js
  32. 1
      code/WebApp/vue/src/icons/svg/BOM.svg
  33. 1
      code/WebApp/vue/src/icons/svg/业务.svg
  34. 1
      code/WebApp/vue/src/icons/svg/供货.svg
  35. 1
      code/WebApp/vue/src/icons/svg/单据导入.svg
  36. 1
      code/WebApp/vue/src/icons/svg/发货.svg
  37. 1
      code/WebApp/vue/src/icons/svg/发运.svg
  38. 1
      code/WebApp/vue/src/icons/svg/售后.svg
  39. 1
      code/WebApp/vue/src/icons/svg/售后报表.svg
  40. 1
      code/WebApp/vue/src/icons/svg/器具.svg
  41. 1
      code/WebApp/vue/src/icons/svg/客户零件.svg
  42. 1
      code/WebApp/vue/src/icons/svg/库房.svg
  43. 1
      code/WebApp/vue/src/icons/svg/报表.svg
  44. 1
      code/WebApp/vue/src/icons/svg/日历.svg
  45. 1
      code/WebApp/vue/src/icons/svg/索赔授权.svg
  46. 1
      code/WebApp/vue/src/icons/svg/销售.svg
  47. 1
      code/WebApp/vue/src/icons/svg/零件类型.svg
  48. BIN
      code/WebApp/vue/src/layout-old.rar
  49. 116
      code/WebApp/vue/src/layout/components/ManagerNavbar.vue
  50. 350
      code/WebApp/vue/src/layout/components/Sidebar.vue
  51. 93
      code/WebApp/vue/src/layout/components/Sidebar/SidebarItem.vue
  52. 154
      code/WebApp/vue/src/layout/firstLayout.vue
  53. 21
      code/WebApp/vue/src/main.js
  54. 36
      code/WebApp/vue/src/permission.js
  55. 55
      code/WebApp/vue/src/router/index.js
  56. 190
      code/WebApp/vue/src/router/modules/basedata.js
  57. 173
      code/WebApp/vue/src/router/modules/benteng-out-data.js
  58. 63
      code/WebApp/vue/src/router/modules/bentengdata.js
  59. 44
      code/WebApp/vue/src/router/modules/bt_menu.js
  60. 119
      code/WebApp/vue/src/router/modules/businessdata.js
  61. 4
      code/WebApp/vue/src/router/modules/first.js
  62. 153
      code/WebApp/vue/src/router/modules/fis.js
  63. 44
      code/WebApp/vue/src/router/modules/fisprint.js
  64. 88
      code/WebApp/vue/src/router/modules/hq-out-data.js
  65. 125
      code/WebApp/vue/src/router/modules/hq_menu.js
  66. 64
      code/WebApp/vue/src/router/modules/hq_out_order.js
  67. 286
      code/WebApp/vue/src/router/modules/hqdata.js
  68. 133
      code/WebApp/vue/src/router/modules/jf-out-data.js
  69. 43
      code/WebApp/vue/src/router/modules/jfdata.js
  70. 12
      code/WebApp/vue/src/router/modules/jobtimedata.js
  71. 95
      code/WebApp/vue/src/router/modules/newjit-basedata.js
  72. 72
      code/WebApp/vue/src/router/modules/vw-out-data.js
  73. 106
      code/WebApp/vue/src/router/modules/vwFisData.js
  74. 56
      code/WebApp/vue/src/router/modules/vwKBNoBarcodedata.js
  75. 104
      code/WebApp/vue/src/router/modules/vwKBdata.js
  76. 181
      code/WebApp/vue/src/router/modules/vw_menu.js
  77. 54
      code/WebApp/vue/src/router/modules/vw_out_order.js
  78. 74
      code/WebApp/vue/src/router/modules/vwdata.js
  79. 29
      code/WebApp/vue/src/router/modules/wheeldata.js
  80. 2
      code/WebApp/vue/src/settings.js
  81. 3
      code/WebApp/vue/src/store/getters.js
  82. 155
      code/WebApp/vue/src/store/modules/app.js
  83. 59
      code/WebApp/vue/src/store/modules/customer.js
  84. 23
      code/WebApp/vue/src/store/modules/permission.js
  85. 51
      code/WebApp/vue/src/store/modules/user.js
  86. 2
      code/WebApp/vue/src/styles/sidebar.scss
  87. 1
      code/WebApp/vue/src/utils/crmindex.js
  88. 45
      code/WebApp/vue/src/utils/dom.js
  89. 139
      code/WebApp/vue/src/views/PersonCenter/components/EditPassword.vue
  90. 6
      code/WebApp/vue/src/views/PersonCenter/index.vue
  91. 9
      code/WebApp/vue/src/views/SystemOrgUserRole/index.vue
  92. 598
      code/WebApp/vue/src/views/SystemOrgUserRole/model/CrmRelativeProduct.vue
  93. 524
      code/WebApp/vue/src/views/dashboard/admin/components/PanelGroup.vue
  94. 131
      code/WebApp/vue/src/views/employee/index.vue
  95. 9
      code/WebApp/vue/src/views/job/index.vue
  96. 9
      code/WebApp/vue/src/views/log/index.vue
  97. 14
      code/WebApp/vue/src/views/login/index.vue
  98. 642
      code/WebApp/vue/src/views/newJit/baseData/assemblyCfg/index.vue
  99. 354
      code/WebApp/vue/src/views/newJit/baseData/billM100/detail.vue
  100. 571
      code/WebApp/vue/src/views/newJit/baseData/billM100/index.vue

BIN
code/WebApp/vue/SettleAccount-vue.rar

Binary file not shown.

21
code/WebApp/vue/package.json

@ -52,7 +52,6 @@
"driver.js": "0.9.5",
"dropzone": "5.5.1",
"echarts": "4.2.1",
"el-table-transfer": "^0.1.4",
"element-ui": "2.13.0",
"file-saver": "2.0.1",
"fuse.js": "3.4.4",
@ -61,6 +60,7 @@
"jszip": "3.2.1",
"lockr": "^0.8.5",
"moment": "^2.29.1",
"node-sass": "^4.14.1",
"normalize.css": "^7.0.0",
"nprogress": "0.2.0",
"path-to-regexp": "2.4.0",
@ -73,15 +73,14 @@
"vue": "2.6.10",
"vue-bus": "^1.2.1",
"vue-count-to": "1.0.13",
"vue-cropper": "^0.5.8",
"vue-cropper": "^0.5.5",
"vue-i18n": "7.3.2",
"vue-infinite-scroll": "^2.0.2",
"vue-lazyload": "^1.3.3",
"vue-loader": "^15.9.5",
"vue-router": "3.0.2",
"vue-splitpane": "1.0.4",
"vue-style-loader": "^4.1.3",
"vuedraggable": "^2.24.3",
"vuedraggable": "^2.20.0",
"vuex": "3.1.0",
"xlsx": "0.14.1"
},
@ -90,10 +89,10 @@
"@babel/register": "7.0.0",
"@vue/cli-plugin-babel": "3.5.3",
"@vue/cli-plugin-eslint": "^3.9.1",
"@vue/cli-plugin-unit-jest": "^4.5.15",
"@vue/cli-service": "^4.5.15",
"@vue/cli-plugin-unit-jest": "^4.5.9",
"@vue/cli-service": "^4.5.9",
"@vue/test-utils": "1.0.0-beta.29",
"autoprefixer": "^9.8.8",
"autoprefixer": "^9.5.1",
"babel-core": "7.0.0-bridge.0",
"babel-eslint": "10.0.1",
"babel-jest": "^26.6.3",
@ -105,9 +104,7 @@
"html-webpack-plugin": "3.2.0",
"husky": "1.3.1",
"lint-staged": "8.1.5",
"mini-css-extract-plugin": "^2.4.6",
"mockjs": "1.0.1-beta3",
"node-sass": "^4.14.1",
"plop": "2.3.0",
"postcss-loader": "^4.0.4",
"postcss-px-to-viewport": "^1.1.1",
@ -115,13 +112,11 @@
"sass-loader": "^7.1.0",
"script-ext-html-webpack-plugin": "2.1.3",
"script-loader": "0.7.2",
"serve-static": "^1.14.2",
"serve-static": "^1.13.2",
"svg-sprite-loader": "4.1.3",
"svgo": "1.2.0",
"vue-happy-scroll": "^2.1.1",
"vue-template-compiler": "2.6.10",
"webpack": "^4.46.0",
"webpack-cli": "^4.9.1"
"vue-template-compiler": "2.6.10"
},
"engines": {
"node": ">=8.9",

BIN
code/WebApp/vue/src/api.rar

Binary file not shown.

80
code/WebApp/vue/src/api/monitor/job.js

@ -0,0 +1,80 @@
import request from '@/utils/request'
// 查询定时任务调度列表
export function listJob(query) {
return request({
url: '/monitor/job/list',
method: 'get',
params: query
})
}
// 查询定时任务调度详细
export function getJob(jobId) {
return request({
url: '/monitor/job/' + jobId,
method: 'get'
})
}
// 新增定时任务调度
export function addJob(data) {
return request({
url: '/monitor/job',
method: 'post',
data: data
})
}
// 修改定时任务调度
export function updateJob(data) {
return request({
url: '/monitor/job',
method: 'put',
data: data
})
}
// 删除定时任务调度
export function delJob(jobId) {
return request({
url: '/monitor/job/' + jobId,
method: 'delete'
})
}
// 导出定时任务调度
export function exportJob(query) {
return request({
url: '/monitor/job/export',
method: 'get',
params: query
})
}
// 任务状态修改
export function changeJobStatus(jobId, status) {
const data = {
jobId,
status
}
return request({
url: '/monitor/job/changeStatus',
method: 'put',
data: data
})
}
// 定时任务立即执行一次
export function runJob(jobId, jobGroup) {
const data = {
jobId,
jobGroup
}
return request({
url: '/monitor/job/run',
method: 'put',
data: data
})
}

35
code/WebApp/vue/src/api/monitor/jobLog.js

@ -0,0 +1,35 @@
import request from '@/utils/request'
// 查询调度日志列表
export function listJobLog(query) {
return request({
url: '/monitor/jobLog/list',
method: 'get',
params: query
})
}
// 删除调度日志
export function delJobLog(jobLogId) {
return request({
url: '/monitor/jobLog/' + jobLogId,
method: 'delete'
})
}
// 清空调度日志
export function cleanJobLog() {
return request({
url: '/monitor/jobLog/clean',
method: 'delete'
})
}
// 导出调度日志
export function exportJobLog(query) {
return request({
url: '/monitor/jobLog/export',
method: 'get',
params: query
})
}

9
code/WebApp/vue/src/api/monitor/server.js

@ -0,0 +1,9 @@
import request from '@/utils/request'
// 查询服务器详细
export function getServer() {
return request({
url: '/monitor/server',
method: 'get'
})
}

BIN
code/WebApp/vue/src/assets/iconfont.rar

Binary file not shown.

BIN
code/WebApp/vue/src/assets/img/win-logo-1.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

7
code/WebApp/vue/src/axios/index.js

@ -15,13 +15,8 @@ axios.defaults.timeout = 10000
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8;'
//TODO:配置读取
axios.defaults.headers['Accept-Language'] = "zh-Hans"
// axios.defaults.baseURL = '';
axios.defaults.baseURL = config.base.ip + ':' + config.base.backend_port
//axios.defaults.baseURL = 'http://localhost:44344'; //?? 登录调试
// POST传参序列化
axios.interceptors.request.use((config) => {
// eslint-disable-next-line eqeqeq

0
code/WebApp/vue/src/components/1.vue

64
code/WebApp/vue/src/components/CreateCom/Job-Select.vue

@ -1,64 +0,0 @@
<template>
<el-select
v-model="dataValue"
style="width: 200px"
placeholder="请选择版本"
@change="valueChange"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
<script type="text/javascript">
import stringMixin from "./stringMixin";
export default {
name: "JobSelect",
components: {},
props: {
options: {
type: Array,
default: () => {
return [];
},
},
},
data() {
return {
dataValue: "",
};
},
created() {},
watch: {
options: {
handler(newVal) {
if (newVal == "" || newVal == "undefined") {
//TODO
} else {
//
this.dataValue = this.options[0].value;
}
},
immediate: true,
},
},
computed: {},
methods: {
//
valueChange(val) {
/** 回调筛选数据 */
this.$emit("value-change", {
index: this.index,
value: val,
data: this.options,
});
},
},
};
</script>
<style lang="scss" scoped>
</style>

64
code/WebApp/vue/src/components/CreateCom/Xh-JS-Select copy.vue

@ -1,64 +0,0 @@
<template>
<el-select
v-model="dataValue"
style="width: 200px"
placeholder="请选择"
@change="valueChange"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
<script type="text/javascript">
import stringMixin from "./stringMixin";
export default {
name: "XhJSSelect",
components: {},
props: {
options: {
type: Array,
default: () => {
return [];
},
},
},
data() {
return {
dataValue: "",
};
},
created() {},
watch: {
options: {
handler(newVal) {
if (newVal == "" || newVal == "undefined") {
//TODO
} else {
//
this.dataValue = this.options[0].value;
}
},
immediate: true,
},
},
computed: {},
methods: {
//
valueChange(val) {
/** 回调筛选数据 */
this.$emit("value-change", {
index: this.index,
value: val,
data: this.options,
});
},
},
};
</script>
<style lang="scss" scoped>
</style>

67
code/WebApp/vue/src/components/CreateCom/Xh-JS-Select-Label.vue

@ -1,67 +0,0 @@
<template>
<el-select
v-model="dataValue"
style="width: 200px"
placeholder="请选择"
@change="valueChange"
>
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
<script type="text/javascript">
import stringMixin from "./stringMixin";
export default {
name: "XhJSSelect",
components: {},
props: {
options: {
type: Array,
default: () => {
return [];
},
},
},
data() {
return {
dataValue: "",
};
},
created() {},
watch: {
options: {
handler(newVal) {
if (newVal == "" || newVal == "undefined") {
//TODO
} else {
//
this.dataValue = this.options[0].value;
}
},
immediate: true,
},
},
computed: {},
methods: {
//
valueChange(val) {
const obj = this.options.find((item) => {
return item.value == val;//id
});
/** 回调筛选数据 */
this.$emit("value-change", {
index: this.index,
value: obj.label,
data: this.options,
});
},
},
};
</script>
<style lang="scss" scoped>
</style>

5
code/WebApp/vue/src/components/CreateCom/Xh-JS-Select.vue

@ -30,6 +30,7 @@ export default {
data() {
return {
dataValue: "",
dataLable: "",
};
},
created() {},
@ -41,6 +42,7 @@ export default {
} else {
//
this.dataValue = this.options[0].value;
//this.dataLable = this.options[0].label;
}
},
immediate: true,
@ -50,10 +52,11 @@ export default {
methods: {
//
valueChange(val) {
/** 回调筛选数据 */
/** 回调筛选数据 */-
this.$emit("value-change", {
index: this.index,
value: val,
//label: this.dataLable,
data: this.options,
});
},

BIN
code/WebApp/vue/src/components/CreateCom/XhSwitch.rar

Binary file not shown.

752
code/WebApp/vue/src/components/ImportExcel-benteng/index-1.vue

@ -0,0 +1,752 @@
<template>
<el-dialog
:visible="show"
:title="'导入' + crmTypeName"
:append-to-body="true"
:close-on-click-modal="false"
width="600px"
@close="closeView"
>
<div class="dialog-body">
<div v-if="stepsActive == 1" class="step-section">
<div class="sections">
<div class="sections__title" v-loading="loading">
导入说明
<div class="sections__tips">
1提供的导入模板需要.xlsx文件格式不支持.xls文件即不支持Excel97-2003!
</div>
<div class="sections__tips">
2模板名称可以进行修改但不要删除模板中设置的字段
</div>
<div class="sections__tips">
3导入文件大小请勿超过100MB且目前只支持单个Sheet页签
</div>
</div>
</div>
<div class="sections">
<div class="sections__title">导入条件设置没有则不用设置</div>
<div class="sections__tips">
<span class="demonstration">选择版本</span>
<el-select
v-model="versionValue"
clearable
:disabled="isEditYearMont"
style="width: 188px"
placeholder="请选择"
>
<el-option
v-for="item in factoryList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<span class="demonstration">选择工厂</span>
<el-select
v-model="FacotryValue"
clearable
:disabled="isEditFactory"
style="width: 188px"
placeholder="请选择"
>
<el-option
v-for="item in facotryList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
</div>
<div class="sections">
<div class="sections__title">请选择需要导入的文件</div>
<div class="content">
<flexbox class="file-select">
<el-upload
ref="upload"
class="avatar-uploader"
drag
action="#"
:http-request="httpRequestfiles"
:headers="httpHeader"
:file-list="fileuploadList"
:before-upload="beforeAvatarUpload"
:before-remove="beforeRemove"
:on-remove="handleRemove"
multiple
:limit="10"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
</el-upload>
</flexbox>
</div>
</div>
</div>
<div
v-loading="loading"
v-else-if="stepsActive == 2"
element-loading-text="数据导入中,请耐心等待..."
element-loading-spinner="el-icon-loading"
class="step-section"
/>
<div
v-loading="loading"
v-else-if="stepsActive == 3"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px; margin-top: -20px" shadow="always">
<i class="wk wk-success result-info__icon" />
<p class="result-info__detail">
结果
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
</p>
<el-button
v-if="this.resultData && this.resultData.errSize > 0"
class="result-info__btn--err"
type="text"
@click="downloadErrData"
>下载错误数据</el-button
>
</el-card>
</div>
</div>
<div
v-loading="loading"
v-else-if="stepsActive == 4"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px" shadow="always">
<i class="wk wk-success result-info__icon" />
<p class="result-info__detail">
结果
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
</p>
</el-card>
</div>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-popover
v-model="historyPopoverShow"
placement="top"
width="800"
popper-class="no-padding-popover"
trigger="click"
>
</el-popover>
<!-- <el-button @click="closeView">取消</el-button> -->
<el-button :class="{ 'is-hidden': !showCancel }" @click="closeView"
>取消</el-button
>
<el-button v-if="sureTitle" type="primary" @click="sureClick">{{
sureTitle
}}</el-button>
</span>
</el-dialog>
</template>
<script>
import { downloadFile } from "@/utils/crmindex.js";
import { getToken } from "@/utils/auth"; // get token from cookie
export default {
name: "CRMImport", //
props: {
show: {
type: Boolean,
default: false,
},
// CRM
crmType: {
type: String,
default: "",
},
},
data() {
return {
options: [
{
value: "3",
label: "新增",
},
{
value: "0",
label: "修改",
},
],
loading: false,
fieldList: [],
factoryList: [], //
FacotryValue: "", //
facotryList: [], //
versionValue: "",
stateValue: "",
config: 1, // 1 2
/** 编辑控制 */
isEditFactory: false, //
isEditYearMont: false, //
isState: true, //
//file: { name: "" },
stepsActive: 1,
stepList: [
{
icon: "wk wk-upload",
title: "上传文件",
status: "wait",
},
{
icon: "wk wk-data-import",
title: "导入数据",
status: "wait",
},
{
icon: "wk wk-success",
title: "导入完成",
status: "wait",
},
],
//resultData: null,
resultData: {
totalSize: 0,
errSize: 0,
errTemplate: "",
errMessage: "",
successMessage: "",
},
processData: {
count: 0,
status: "",
},
messageId: null,
intervalTimer: null,
fileuploadList: [],
isLt2M: "",
isFileType: "",
historyPopoverShow: false,
yeareVale: "",
monthVale: "",
page: 1,
listQuery: {
Filters: [
{
logic: 0,
column: "project",
action: 0,
value: "factory",
}, //
],
SkipCount: 0,
MaxResultCount: 1000,
},
listQueryCustom: {
Filters: [
{
logic: 0,
column: "customerCode",
action: 0,
value: "T51Z40",
}, //
],
SkipCount: 0,
MaxResultCount: 1000,
},
};
},
computed: {
sureTitle() {
return {
1: "立即导入",
2: "导入中",
3: "确定",
}[this.stepsActive];
},
showCancel() {
return this.stepsActive != 2;
},
getMoudleDisable() {
if (this.crmType == "btcarconsign") {
//
this.isEditYearMont = false;
this.isEditFactory = true;
}
},
crmTypeName() {
return (
{
btcarseq: "奔腾-轿车车序输入表",
btcarkb: "奔腾-轿车看板输入表",
btcarconsign: "奔腾-轿车结算数据输入表",
}[this.crmType] || ""
);
},
getWebApi() {
if (this.FacotryValue === "T51Z40-A") {
//轿
return (
{
btcarseq: "/api/settleaccount/BTCarSeqFirst/ExcelImport",
btcarkb: "/api/settleaccount/BTCarKBFirst/ExcelImport",
btcarconsign: "/api/settleaccount/BTCarConsign/ExcelImport",
}[this.crmType] || ""
);
} else if (this.FacotryValue === "T51Z40-B") {
//轿
return (
{
btcarseq: "/api/settleaccount/BTCarSeqSecond/ExcelImport",
btcarkb: "/api/settleaccount/BTCarKBSecond/ExcelImport",
btcarconsign: "/api/settleaccount/BTCarConsign/ExcelImport",
}[this.crmType] || ""
);
} else {
alert("请正确选择相关导入工厂!");
}
},
getImportTemplate() {
//
return (
{
btcarseq: "奔腾-轿车车序输入表.xlsx",
btcarkb: "奔腾-轿车看板输入表.xlsx",
}[this.crmType] || ""
);
},
httpHeader() {
//token
return {
Authorization: "Bearer " + getToken(),
};
},
},
watch: {
show: function (val) {
this.stepsActive = 1;
this.getAllYearMonth(); //
this.getAllFactory(); //
this.getMoudleDisable(); //
if (val) {
this.stepsActive = 1;
} else {
if (this.stepsActive == 3) {
//
this.stepsActive = 1;
this.stepList = [
{
icon: "wk wk-upload",
title: "上传文件",
status: "wait",
},
{
icon: "wk wk-data-import",
title: "导入数据",
status: "wait",
},
{
icon: "wk wk-success",
title: "导入完成",
status: "wait",
},
];
this.resultData = null;
}
}
},
stepsActive() {
this.$emit(
"status",
{
1: "wait",
2: "process",
3: "finish",
}[this.stepsActive]
);
},
},
mounted() {},
methods: {
getAllYearMonth() {
//
// this.listQuery.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/CentralizedControl/openlist")
.then((response) => {
this.factoryList = [];
response.forEach((element) => {
let options = {};
options.value = element.version;
options.label = element.version;
this.factoryList.push(options);
});
})
.catch(() => {
this.listLoading = false;
});
},
getAllFactory() {
this.listQueryCustom.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/Factory/list", this.listQueryCustom)
.then((response) => {
//
this.facotryList = [];
response.items.forEach((element) => {
let options = {};
options.value = element.code;
options.label = element.desc;
this.facotryList.push(options);
});
})
.catch(() => {
this.listLoading = false;
});
},
handleImportExcelClick() {
//
this.fileuploadList = [];
//this.$refs.upload.clearFiles();
},
httpRequestfiles(data) {
let _this = this;
let rd = new FileReader(); //
let file = data.file;
this.fileuploadList.push(file);
rd.readAsDataURL(file); // base64
},
beforeAvatarUpload(file) {
var FileExt = file.name.replace(/.+\./, "");
if (["xlsx"].indexOf(FileExt.toLowerCase()) === -1) {
this.$message({
type: "warning",
message: "只支持xlsx类型文件!",
});
this.isFileType = "0";
return false;
} else {
this.isFileType = "1";
}
this.isLt2M = file.size / 1024 / 1024 < 100 ? "1" : "0";
if (this.isLt2M === "0") {
this.$message.error("上传文件大小不能超过 100MB!");
}
return this.isLt2M === "1" ? true : false;
},
beforeRemove(file, fileList) {
if (this.isLt2M === "1" && this.isFileType === "1") {
return this.$confirm(`确定移除 ${file.name}`);
}
},
handleRemove(file, fileList) {
//
const index = this.fileuploadList.indexOf(file.originFileObj);
const newFileList = this.fileuploadList.slice();
newFileList.splice(index, 1);
this.fileuploadList = newFileList;
},
//
sureClick() {
if (
this.fileuploadList === [] ||
JSON.stringify(this.fileuploadList) === "[]"
) {
this.$message.error("请选择导入文件");
return false;
}
if (this.stepsActive == 1) {
if (this.stepList[0].status == "wait") {
this.stepsActive = 2;
let alertInfo = "";
if (this.FacotryValue === "T51Z40-A") {
alertInfo = "轿车一厂";
} else {
alertInfo = "轿车二厂";
}
this.$confirm("当前导入的数据是:" + alertInfo + "请确认?", "提示", {
confirmButtonText: "确认",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.saveTemplateData();
})
.catch(() => {
this.$message({
type: "info",
message: "已取消删除",
});
this.stepsActive = 1;
});
// setTimeout(() => {
// this.saveTemplateData();
// }, 1000);
if (this.stepList[1].status == "finish") {
}
} else {
if (this.fileuploadList === "[]") {
this.$message.error("请选择导入文件");
}
}
} else {
this.closeView();
}
},
saveTemplateData() {
this.loading = true;
//--
if (JSON.stringify(this.fileuploadList) != "[]") {
let fd = new FormData();
const { fileuploadList } = this;
fileuploadList.forEach((file) => {
fd.append("files", file); //
});
fd.append("branchId", "3FA85F64-5717-4562-B3FC-2C963F66AFA6");
fd.append("year", "2021");
fd.append("period", "03");
fd.append("customerCode", this.FacotryValue);
fd.append("factory", this.FacotryValue);
fd.append("version", this.versionValue);
const webapi = this.getWebApi;
console.log("奔腾轿车导入条件:" + JSON.stringify(webapi));
this.$axios
.posts(webapi, fd)
.then(async (res) => {
console.log("奔腾导入条件:" + JSON.stringify(res));
if (res === "Success") {
if (this.isLt2M === "1" && this.isFileType === "1") {
this.$notify({
title: "成功",
message: "数据导入成功!",
type: "success",
duration: 2000,
});
this.stepList[1].status = "finish";
this.resultData.successMessage = "数据导入成功!";
this.stepsActive = 4;
}
} else {
this.stepList[0].status = "wait";
this.resultData.errTemplate = res; //
this.resultData.errSize = 1; //0
this.resultData.successMessage = "数据导入失败!";
this.stepsActive = 3;
}
this.$emit("status", "finish");
this.loading = false;
})
.catch(() => {
this.loading = false;
});
} else {
this.loading = false;
this.$message({
message: "未上传任何附件,请查检!",
type: "warning",
});
}
},
/**
* 下载错误模板
*/
downloadErrData() {
let fileNameOfProject = this.resultData.errTemplate;
this.$axios
.BolbGets(
"/api/settleaccount/getblobfile/download/" + fileNameOfProject
)
.then((response) => {
if (fileNameOfProject.indexOf("_") != -1) {
let downName =
fileNameOfProject.slice(0, fileNameOfProject.lastIndexOf("_")) +
fileNameOfProject.slice(fileNameOfProject.lastIndexOf("."));
downloadFile(response, downName);
this.$notify({
title: "成功",
message: "错误数据-导出成功!",
type: "success",
duration: 2000,
});
} else {
downloadFile(response, fileNameOfProject);
this.$notify({
title: "成功",
message: "错误数据-导出成功!",
type: "success",
duration: 2000,
});
}
this.listLoading = false;
})
.catch((error) => {
this.listLoading = false;
});
},
//
closeView() {
this.$emit("update:show", false);
this.$emit("close", this.stepsActive == 3 ? "finish" : "");
},
},
};
</script>
<style scoped lang="scss">
@import "@/styles/xr-theme.scss";
.el-steps {
margin-bottom: 15px;
/deep/ .el-step__title {
font-size: 14px;
}
/deep/ .el-step.is-simple .el-step__arrow::before,
/deep/ .el-step.is-simple .el-step__arrow::after {
height: 10px;
width: 2px;
}
/deep/ .el-step.is-simple .el-step__arrow::after {
transform: rotate(45deg) translateY(3px);
}
/deep/ .el-step.is-simple .el-step__arrow::before {
transform: rotate(-45deg) translateY(-2px);
}
}
.step-section {
min-height: 300px;
/deep/ .el-loading-spinner {
top: 45%;
.el-icon-loading {
font-size: 40px;
color: #999;
}
.el-loading-text {
color: #333;
}
}
}
.sections {
font-size: 14px;
color: #333;
&__title {
font-weight: 600;
}
&__tips {
padding-left: 30px;
margin: 8px 0 15px;
color: #999;
font-size: 12px;
line-height: 1.4;
}
.download {
cursor: pointer;
color: #2362fb;
}
}
.sections__tips + .content {
padding-top: 0;
}
.content {
padding: 10px 10px 10px 30px;
.el-select {
width: 400px;
}
.user-cell {
width: 400px;
}
}
#importInputFile {
display: none;
}
.file-select {
.el-input {
width: 400px;
}
button {
margin-left: 20px;
}
}
.is-hidden {
visibility: hidden;
}
.history-btn {
float: left;
margin-left: 15px;
}
//
.result-info {
text-align: center;
padding-top: 50px;
&__icon {
font-size: 40px;
color: $xr-color-primary;
}
&__des {
margin-top: -15px;
color: #333;
font-size: 30px;
}
&__detail {
margin-top: 35px;
font-size: 20px;
color: #666;
&--all {
color: #333;
font-weight: 600;
}
&--suc {
color: $xr-color-primary;
font-weight: 600;
}
&--err {
margin-top: 25px;
color: #f94e4e;
font-weight: 600;
}
}
&__btn--err {
margin-top: 10px;
font-size: 20px;
}
}
</style>

256
code/WebApp/vue/src/components/ImportExcel-base/index.vue → code/WebApp/vue/src/components/ImportExcel-benteng/index.vue

@ -42,7 +42,7 @@
<el-select
v-model="versionValue"
clearable
:disabled="isEditFactory"
:disabled="isEditYearMont"
style="width: 188px"
placeholder="请选择"
>
@ -53,6 +53,21 @@
:value="item.value"
></el-option>
</el-select>
<span class="demonstration">选择工厂</span>
<el-select
v-model="FacotryValue"
clearable
:disabled="isEditFactory"
style="width: 188px"
placeholder="请选择"
>
<el-option
v-for="item in facotryList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
</div>
<div class="sections">
@ -93,10 +108,11 @@
<div
v-loading="loading"
v-if="stepsActive == 2"
element-loading-text="导入中"
element-loading-text="数据导入中,请耐心等待..."
element-loading-spinner="el-icon-loading"
class="step-section"
/>
<div
v-loading="loading"
v-else-if="stepsActive == 3"
@ -109,6 +125,7 @@
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
<el-button
v-if="this.resultData && this.resultData.errSize > 0"
class="result-info__btn--err"
@ -121,7 +138,11 @@
</div>
</div>
<div v-loading="loading" v-if="stepsActive == 4" class="step-section">
<div
v-loading="loading"
v-else-if="stepsActive == 4"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px" shadow="always">
<i class="el-icon-success" />
@ -130,13 +151,6 @@
>{{ this.resultData.successMessage }}
</span>
</p>
<!-- <p class="result-info__des">数据导入结果</p>
<p class="result-info__detail">
导入成功数据
<span class="result-info__detail--all"
>{{ this.resultData.totalSize }} </span
>条有效数据
</p> -->
</el-card>
</div>
</div>
@ -195,8 +209,8 @@ export default {
loading: false,
fieldList: [],
factoryList: [], //
YearMonthValue: "", //
yearMonthList: [], //
FacotryValue: "", //
facotryList: [], //
versionValue: "",
stateValue: "",
config: 1, // 1 2
@ -262,7 +276,7 @@ export default {
logic: 0,
column: "customerCode",
action: 0,
value: "U22000",
value: "T51Z40",
}, //
],
SkipCount: 0,
@ -275,103 +289,69 @@ export default {
sureTitle() {
return {
1: "立即导入",
// 2: "...",
// 3: "",
// 4: "",
2: "取消导入",
3: "确定",
4: "确定",
}[this.stepsActive];
},
showCancel() {
return this.stepsActive == 1;
},
getMoudleDisable() {
if (this.crmType == "prebatch") {
//
this.isEditYearMont = true;
this.isEditFactory = true;
this.isState = false;
} else {
if (this.crmType == "btcarconsign") {
//
this.isEditYearMont = false;
this.isEditFactory = false;
this.isEditFactory = true;
}
},
crmTypeName() {
return (
{
invoice: "大众发票汇总",
vWKanBan: "大众看板结算明细",
scrapClaims: "CP7报废和索赔",
sparePart: "大众备件结算明细",
hqHPlatform: "红旗H平台导入",
hqMPlatform: "红旗M平台导入",
bomdatabase: "产品结构BOM",
prebatch: "预批量",
secondaryPriceRatio: "二配结算价格比例",
factory: "工厂设置",
// materialRelation: "",
carMaterialConfig: "车型代码与零件匹配",
materialRelationSupplier: "供应商零件设置表",
material: "物料主数据",
inventorydetail: "库存明细",
codeSetting: "通用代码设置",
estimatedSum: "应付暂估汇总",
estimatedInventoryDetail: "应付暂估收货明细",
customerStorageLocation: "客户存储地点",
secondaryAdjustment: "二配数量调整输入",
secondaryDiscount: "二配折扣调整输入",
btcarseq: "奔腾-轿车车序输入表",
btcarkb: "奔腾-轿车看板输入表",
btcarconsign: "奔腾-轿车结算数据输入表",
}[this.crmType] || ""
);
},
getWebApi() {
return (
{
invoice: "/api/settleaccount/Invoices/ExcelImport", //
vWKanBan: "/api/settleaccount/VWKanBan/ExcelImport", //
scrapClaims: "/api/settleaccount/ScrapClaims/ExcelImport", //CP7
sparePart: "/api/settleaccount/SparePart/ExcelImport", //
hqHPlatform: "/api/settleaccount/HQHPlatform/ExcelImport", //H
hqMPlatform: "/api/settleaccount/HQMPlatform/ExcelImport", //M
bomdatabase: "/api/settleaccount/bom/ExcelImport",
prebatch: "/api/settleaccount/Prebatch/ExcelImport",
secondaryPriceRatio:
"/api/settleaccount/SecondaryPriceRatio/ExcelImport",
factory: "/api/settleaccount/Factory/ExcelImport",
// materialRelation:
// "/api/settleaccount/MaterialRelationshipDetail/ExcelImport-TH",
carMaterialConfig: "/api/settleaccount/CarMaterialConfig/ExcelImport",
materialRelationSupplier:
"/api/settleaccount/SupplierItemSetUp/ExcelImport",
material: "/api/settleaccount/Material/ExcelImport-TH",
inventorydetail: "/api/settleaccount/InventoryDetail/ExcelImport",
codeSetting: "/api/settleaccount/CodeSetting/ExcelImport",
estimatedSum: "/api/settleaccount/EstimatedSum/ExcelImport",
estimatedInventoryDetail:
"/api/settleaccount/EstimatedInventoryDetail/ExcelImport",
customerStorageLocation:
"/api/settleaccount/CustomerStorageLocation/ExcelImport",
secondaryAdjustment:
"/api/settleaccount/SecondaryAdjustment/ExcelImport",
secondaryDiscount: "/api/settleaccount/SecondaryDiscount/ExcelImport",
}[this.crmType] || ""
);
if (this.crmType == "btcarconsign") {
return (
{
btcarconsign: "/api/settleaccount/BTCarConsign/ExcelImport",
}[this.crmType] || ""
);
} else {
if (this.FacotryValue === "T51Z40-A") {
//轿
return (
{
btcarseq: "/api/settleaccount/BTCarSeqFirst/ExcelImport",
btcarkb: "/api/settleaccount/BTCarKBFirst/ExcelImport",
}[this.crmType] || ""
);
} else if (this.FacotryValue === "T51Z40-B") {
//轿
return (
{
btcarseq: "/api/settleaccount/BTCarSeqSecond/ExcelImport",
btcarkb: "/api/settleaccount/BTCarKBSecond/ExcelImport",
}[this.crmType] || ""
);
} else {
//alert("");
this.$message({
message: "请正确选择相关导入工厂!",
type: "warning",
});
}
}
},
getImportTemplate() {
//
return (
{
invoice: "大众发票汇总导入.xlsx",
bomdatabase: "产品结构Bom导入模板.xlsx",
secondaryPriceRatio: "二配价格比例导入模板.xlsx",
factory: "工厂设置模板.xlsx",
materialRelation: "零件匹配关系.xlsx",
carMaterialConfig: "车型代码与零件匹配.xlsx",
materialRelationSupplier: "供应商零件设置表.xlsx",
material: "物料主数据.xlsx",
inventorydetail: "库存明细信息.xlsx",
codeSetting: "通用代码设置数据.xlsx",
estimatedSum: "应付暂估汇总.xlsx",
estimatedInventoryDetail: "应付暂估收货明细.xlsx",
customerStorageLocation: "客户存储地点.xlsx",
secondaryAdjustment: "二配调整输入.xlsx",
btcarseq: "奔腾-轿车车序输入表.xlsx",
btcarkb: "奔腾-轿车看板输入表.xlsx",
}[this.crmType] || ""
);
},
@ -386,6 +366,7 @@ export default {
show: function (val) {
this.stepsActive = 1;
this.getAllYearMonth(); //
this.getAllFactory(); //
this.getMoudleDisable(); //
if (val) {
this.stepsActive = 1;
@ -429,6 +410,8 @@ export default {
mounted() {},
methods: {
getAllYearMonth() {
//
// this.listQuery.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/CentralizedControl/openlist")
.then((response) => {
@ -444,6 +427,24 @@ export default {
this.listLoading = false;
});
},
getAllFactory() {
this.listQueryCustom.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/Factory/list", this.listQueryCustom)
.then((response) => {
//
this.facotryList = [];
response.items.forEach((element) => {
let options = {};
options.value = element.code;
options.label = element.desc;
this.facotryList.push(options);
});
})
.catch(() => {
this.listLoading = false;
});
},
handleImportExcelClick() {
//
this.fileuploadList = [];
@ -488,6 +489,16 @@ export default {
},
//
sureClick() {
if (
this.crmType == "btcarconsign" ||
this.crmType == "btcarseq" ||
this.crmType == "btcarkb"
) {
if (this.versionValue == "") {
this.$message.error("必须选择版本!");
return false;
}
}
if (
this.fileuploadList === [] ||
JSON.stringify(this.fileuploadList) === "[]"
@ -495,12 +506,44 @@ export default {
this.$message.error("请选择导入文件");
return false;
}
if (this.stepsActive == 1) {
if (this.stepList[0].status == "wait") {
this.stepsActive = 2;
this.saveTemplateData();
this.activeName = "second";
console.log(this.crmTypeName);
let alertInfo = "";
if (this.crmType == "btcarconsign") {
this.saveTemplateData();
} else {
if (this.FacotryValue === "T51Z40-A") {
alertInfo = "轿车一厂";
} else if (this.FacotryValue === "T51Z40-B") {
alertInfo = "轿车二厂";
}
this.$confirm(
"当前导入的数据是:" + alertInfo + "请确认?",
"提示",
{
confirmButtonText: "确认",
cancelButtonText: "取消",
type: "warning",
}
)
.then(() => {
this.saveTemplateData();
})
.catch(() => {
this.$message({
type: "info",
message: "已取消删除",
});
this.stepsActive = 1;
});
}
// setTimeout(() => {
// this.saveTemplateData();
// }, 1000);
if (this.stepList[1].status == "finish") {
}
} else {
@ -515,25 +558,31 @@ export default {
saveTemplateData() {
this.loading = true;
//
//--
if (JSON.stringify(this.fileuploadList) != "[]") {
let fd = new FormData();
const { fileuploadList } = this;
let factorInfo = "";
if (this.crmType == "btcarconsign") {
factorInfo = "bengtengjiesuan ";
} else {
factorInfo = this.FacotryValue;
}
fileuploadList.forEach((file) => {
fd.append("files", file); //
});
fd.append("branchId", "3FA85F64-5717-4562-B3FC-2C963F66AFA6");
fd.append("year", "2021");
fd.append("period", "03");
fd.append("customerCode", "03");
fd.append("factory", this.YearMonthValue);
fd.append("customerCode", factorInfo);
fd.append("factory", this.FacotryValue);
fd.append("version", this.versionValue);
const webapi = this.getWebApi;
console.log("奔腾轿车导入条件:" + JSON.stringify(webapi));
this.$axios
.posts(webapi, fd)
.then(async (res) => {
console.log("大众导入条件:" + JSON.stringify(res));
console.log("奔腾导入条件:" + JSON.stringify(res));
if (res === "Success") {
if (this.isLt2M === "1" && this.isFileType === "1") {
this.$notify({
@ -553,11 +602,7 @@ export default {
this.resultData.successMessage = "数据导入失败!";
this.stepsActive = 3;
}
console.log(this.stepsActive);
this.$emit("status", "finish");
// this.$nextTick(() => {
// this.loading = false;
// });
this.loading = false;
})
.catch(() => {
@ -660,10 +705,6 @@ export default {
transform: translateX(297px) !important;
}
}
/deep/.el-tabs__item {
padding: 0 20px;
}
.el-steps {
margin-bottom: 15px;
@ -686,7 +727,7 @@ export default {
}
.step-section {
min-height: 250px;
min-height: 300px;
/deep/ .el-loading-spinner {
top: 45%;
@ -764,8 +805,8 @@ export default {
text-align: center;
.el-card {
border: none;
height: 250px !important;
}
//boxpadding
/deep/.el-card__body {
padding: 60px 20px 20px 20px;
}
@ -788,7 +829,7 @@ export default {
}
&__detail {
margin-top: 25px;
margin-top: 35px;
font-size: 20px;
color: #666;
&--all {
@ -814,3 +855,6 @@ export default {
}
}
</style>

387
code/WebApp/vue/src/components/ImportExcel-qad/index.vue → code/WebApp/vue/src/components/ImportExcel-faw/index-1.vue

@ -7,141 +7,138 @@
width="600px"
@close="closeView"
>
<el-tabs
v-model="activeName"
:class="stepsActive == 1 ? '' : 'el-tabs__active-go'"
@tab-click="handleClick"
>
<el-tab-pane
label="①文件上传"
name="first"
:disabled="stepsActive == 2 ? true : false"
>
<div class="dialog-body">
<div v-if="stepsActive == 1" class="step-section">
<div class="sections">
<div class="sections__title" v-loading="loading">
导入说明
<div class="sections__tips">
1提供的导入模板需要.xlsx文件格式不支持.xls文件即不支持Excel97-2003!
</div>
<div class="sections__tips">
2模板名称可以进行修改但不要删除模板中设置的字段
</div>
<div class="sections__tips">
3导入文件大小请勿超过100MB且目前只支持单个Sheet页签
</div>
</div>
<div class="dialog-body">
<div v-if="stepsActive == 1" class="step-section">
<div class="sections">
<div class="sections__title" v-loading="loading">
导入说明
<div class="sections__tips">
1提供的导入模板需要.xlsx文件格式不支持.xls文件即不支持Excel97-2003!
</div>
<div class="sections">
<div class="sections__title">
导入条件设置没有则不用设置
</div>
<div class="sections__tips">
<span class="demonstration">选择版本</span>
<el-select
v-model="versionValue"
clearable
:disabled="isEditFactory"
style="width: 188px"
placeholder="请选择"
>
<el-option
v-for="item in factoryList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
<div class="sections__tips">
2模板名称可以进行修改但不要删除模板中设置的字段
</div>
<div class="sections">
<div class="sections__title">请选择需要导入的文件</div>
<div class="content">
<flexbox class="file-select">
<el-upload
ref="upload"
class="avatar-uploader"
drag
action="#"
:http-request="httpRequestfiles"
:headers="httpHeader"
:file-list="fileuploadList"
:before-upload="beforeAvatarUpload"
:before-remove="beforeRemove"
:on-remove="handleRemove"
multiple
:limit="10"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
</el-upload>
</flexbox>
</div>
<div class="sections__tips">
3导入文件大小请勿超过100MB且目前只支持单个Sheet页签
</div>
</div>
</div>
</el-tab-pane>
<el-tab-pane
label="②导入数据"
name="second"
:disabled="stepsActive == 2 ? false : true"
>
<div
v-loading="loading"
v-if="stepsActive == 2"
element-loading-text="导入中"
element-loading-spinner="el-icon-loading"
class="step-section"
/>
<div
v-loading="loading"
v-else-if="stepsActive == 3"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px; margin-top: -20px" shadow="always">
<i class="el-icon-error" />
<p class="result-info__detail">
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
<el-button
v-if="this.resultData && this.resultData.errSize > 0"
class="result-info__btn--err"
type="text"
@click="downloadErrData"
>下载错误数据</el-button
>
</p>
</el-card>
<div class="sections">
<div class="sections__title">导入条件设置没有则不用设置</div>
<div class="sections__tips">
<span class="demonstration">选择版本</span>
<el-select
v-model="versionValue"
clearable
:disabled="isEditFactory"
style="width: 188px"
placeholder="请选择"
>
<el-option
v-for="item in factoryList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<!-- <span class="demonstration">选择工厂</span>
<el-select
v-model="FacotryValue"
clearable
:disabled="isEditYearMont"
style="width: 188px"
placeholder="请选择"
>
<el-option
v-for="item in facotryList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select> -->
</div>
</div>
<div class="sections">
<div class="sections__title">请选择需要导入的文件</div>
<div class="content">
<flexbox class="file-select">
<el-upload
ref="upload"
class="avatar-uploader"
drag
action="#"
:http-request="httpRequestfiles"
:headers="httpHeader"
:file-list="fileuploadList"
:before-upload="beforeAvatarUpload"
:before-remove="beforeRemove"
:on-remove="handleRemove"
multiple
:limit="10"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
</el-upload>
</flexbox>
</div>
</div>
</div>
<div
v-loading="loading"
v-else-if="stepsActive == 2"
element-loading-text="数据导入中,请耐心等待..."
element-loading-spinner="el-icon-loading"
class="step-section"
/>
<div v-loading="loading" v-if="stepsActive == 4" class="step-section">
<div class="result-info">
<el-card style="height: 300px" shadow="always">
<i class="el-icon-success" />
<p class="result-info__detail">
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
</p>
<!-- <p class="result-info__des">数据导入结果</p>
<div
v-loading="loading"
v-else-if="stepsActive == 3"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px; margin-top: -20px" shadow="always">
<i class="wk wk-success result-info__icon" />
<p class="result-info__detail">
导入成功数据
结果
<span class="result-info__detail--all"
>{{ this.resultData.totalSize }} </span
>条有效数据
</p> -->
</el-card>
</div>
>{{ this.resultData.successMessage }}
</span>
</p>
<el-button
v-if="this.resultData && this.resultData.errSize > 0"
class="result-info__btn--err"
type="text"
@click="downloadErrData"
>下载错误数据</el-button
>
</el-card>
</div>
</el-tab-pane>
</el-tabs>
</div>
<div
v-loading="loading"
v-else-if="stepsActive == 4"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px" shadow="always">
<i class="wk wk-success result-info__icon" />
<p class="result-info__detail">
结果
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
</p>
</el-card>
</div>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-popover
v-model="historyPopoverShow"
@ -195,8 +192,8 @@ export default {
loading: false,
fieldList: [],
factoryList: [], //
YearMonthValue: "", //
yearMonthList: [], //
FacotryValue: "", //
facotryList: [], //
versionValue: "",
stateValue: "",
config: 1, // 1 2
@ -262,42 +259,39 @@ export default {
logic: 0,
column: "customerCode",
action: 0,
value: "U22000",
value: "T51Z59",
}, //
],
SkipCount: 0,
MaxResultCount: 1000,
},
activeName: "first",
};
},
computed: {
sureTitle() {
return {
1: "立即导入",
// 2: "...",
// 3: "",
// 4: "",
2: "导入中",
3: "确定",
}[this.stepsActive];
},
showCancel() {
return this.stepsActive == 1;
},
getMoudleDisable() {
this.isEditYearMont = false;
this.isEditFactory = false;
return this.stepsActive != 2;
},
crmTypeName() {
return (
{
ItemInvoicePrice: "QAD出库账单",
jfcarkb: "解放-看板输入表",
jfcarconsign: "解放-结算数据输入表",
}[this.crmType] || ""
);
},
getWebApi() {
return (
{
ItemInvoicePrice: "/api/settleaccount/ItemInvoicePrice/ExcelImport",
//
jfcarkb: "/api/settleaccount/JFCarKB/ExcelImport",
jfcarconsign: "/api/settleaccount/JFCarConsign/ExcelImport",
}[this.crmType] || ""
);
},
@ -305,7 +299,8 @@ export default {
//
return (
{
bomdatabase: "产品结构Bom导入模板.xlsx",
btcarseq: "解放-看板输入表.xlsx",
btcarkb: "解放-结算数据输入表.xlsx",
}[this.crmType] || ""
);
},
@ -320,7 +315,7 @@ export default {
show: function (val) {
this.stepsActive = 1;
this.getAllYearMonth(); //
this.getMoudleDisable(); //
this.getAllFactory(); //
if (val) {
this.stepsActive = 1;
} else {
@ -363,6 +358,8 @@ export default {
mounted() {},
methods: {
getAllYearMonth() {
//
// this.listQuery.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/CentralizedControl/openlist")
.then((response) => {
@ -378,6 +375,24 @@ export default {
this.listLoading = false;
});
},
getAllFactory() {
this.listQueryCustom.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/Factory/list", this.listQueryCustom)
.then((response) => {
//
this.facotryList = [];
response.items.forEach((element) => {
let options = {};
options.value = element.code;
options.label = element.desc;
this.facotryList.push(options);
});
})
.catch(() => {
this.listLoading = false;
});
},
handleImportExcelClick() {
//
this.fileuploadList = [];
@ -429,12 +444,15 @@ export default {
this.$message.error("请选择导入文件");
return false;
}
if (this.stepsActive == 1) {
if (this.stepList[0].status == "wait") {
this.stepsActive = 2;
this.saveTemplateData();
this.activeName = "second";
console.log(this.crmTypeName);
// setTimeout(() => {
// this.saveTemplateData();
// }, 1000);
if (this.stepList[1].status == "finish") {
}
} else {
@ -449,7 +467,6 @@ export default {
saveTemplateData() {
this.loading = true;
//
//--
if (JSON.stringify(this.fileuploadList) != "[]") {
let fd = new FormData();
@ -457,13 +474,17 @@ export default {
fileuploadList.forEach((file) => {
fd.append("files", file); //
});
fd.append("branchId", "3FA85F64-5717-4562-B3FC-2C963F66AFA6");
fd.append("year", "2021");
fd.append("period", "03");
fd.append("customerCode", "V85Z27");
fd.append("factory", "V85Z27");
fd.append("version", this.versionValue);
const webapi = this.getWebApi;
this.$axios
.posts(webapi, fd)
.then(async (res) => {
console.log("大众导入条件:" + JSON.stringify(res));
console.log("解放导入条件:" + JSON.stringify(fd));
if (res === "Success") {
if (this.isLt2M === "1" && this.isFileType === "1") {
this.$notify({
@ -483,7 +504,6 @@ export default {
this.resultData.successMessage = "数据导入失败!";
this.stepsActive = 3;
}
console.log(this.stepsActive);
this.$emit("status", "finish");
// this.$nextTick(() => {
// this.loading = false;
@ -491,10 +511,6 @@ export default {
this.loading = false;
})
.catch(() => {
this.stepList[1].status = "finish";
this.resultData.errSize = 0;
this.resultData.successMessage = "导入模板有错误,请检查!";
this.stepsActive = 3;
this.loading = false;
});
} else {
@ -546,54 +562,12 @@ export default {
closeView() {
this.$emit("update:show", false);
this.$emit("close", this.stepsActive == 3 ? "finish" : "");
this.activeName = "first";
},
handleClick(tab) {
// console.log(tab.index)
// console.log(tab.name)
if (tab.name == "first") {
// console.log(tab.name)
this.fileuploadList = [];
this.stepsActive = 1;
}
},
},
};
</script>
<style scoped lang="scss">
@import "@/styles/xr-theme.scss";
/deep/.el-dialog {
margin-top: 9vh !important;
}
/deep/.el-dialog__body {
padding: 20px 20px;
}
//TabsFlex
/deep/.el-tabs__nav {
width: 100%;
display: flex;
align-items: center;
justify-content: space-around;
}
//el-tab-pane线
/deep/.el-tabs__nav-wrap::after {
height: 0 !important;
}
//Tabsel-tab-pane线
/deep/.el-tabs__active-bar {
left: 90px;
width: 90px !important;
}
//Tabsel-tab-pane线
/deep/ .el-tabs__active-go {
.el-tabs__active-bar {
transform: translateX(297px) !important;
}
}
/deep/.el-tabs__item {
padding: 0 20px;
}
.el-steps {
margin-bottom: 15px;
@ -616,7 +590,7 @@ export default {
}
.step-section {
min-height: 250px;
min-height: 300px;
/deep/ .el-loading-spinner {
top: 45%;
@ -692,23 +666,11 @@ export default {
//
.result-info {
text-align: center;
.el-card {
border: none;
height: 250px !important;
}
/deep/.el-card__body {
padding: 60px 20px 20px 20px;
}
i {
font-size: 60px;
}
// icon
.el-icon-error {
color: red;
}
//icon
.el-icon-success {
color: chartreuse;
padding-top: 50px;
&__icon {
font-size: 40px;
color: $xr-color-primary;
}
&__des {
@ -718,7 +680,7 @@ export default {
}
&__detail {
margin-top: 25px;
margin-top: 35px;
font-size: 20px;
color: #666;
&--all {
@ -744,3 +706,6 @@ export default {
}
}
</style>

142
code/WebApp/vue/src/components/ImportExcel-expend/index.vue → code/WebApp/vue/src/components/ImportExcel-faw/index.vue

@ -53,6 +53,21 @@
:value="item.value"
></el-option>
</el-select>
<!-- <span class="demonstration">选择工厂</span>
<el-select
v-model="FacotryValue"
clearable
:disabled="isEditYearMont"
style="width: 188px"
placeholder="请选择"
>
<el-option
v-for="item in facotryList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select> -->
</div>
</div>
<div class="sections">
@ -93,10 +108,11 @@
<div
v-loading="loading"
v-if="stepsActive == 2"
element-loading-text="导入中"
element-loading-text="数据导入中,请耐心等待..."
element-loading-spinner="el-icon-loading"
class="step-section"
/>
<div
v-loading="loading"
v-else-if="stepsActive == 3"
@ -121,7 +137,11 @@
</div>
</div>
<div v-loading="loading" v-if="stepsActive == 4" class="step-section">
<div
v-loading="loading"
v-else-if="stepsActive == 4"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px" shadow="always">
<i class="el-icon-success" />
@ -130,13 +150,6 @@
>{{ this.resultData.successMessage }}
</span>
</p>
<!-- <p class="result-info__des">数据导入结果</p>
<p class="result-info__detail">
导入成功数据
<span class="result-info__detail--all"
>{{ this.resultData.totalSize }} </span
>条有效数据
</p> -->
</el-card>
</div>
</div>
@ -195,8 +208,8 @@ export default {
loading: false,
fieldList: [],
factoryList: [], //
YearMonthValue: "", //
yearMonthList: [], //
FacotryValue: "", //
facotryList: [], //
versionValue: "",
stateValue: "",
config: 1, // 1 2
@ -262,7 +275,7 @@ export default {
logic: 0,
column: "customerCode",
action: 0,
value: "U22000",
value: "T51Z59",
}, //
],
SkipCount: 0,
@ -275,37 +288,28 @@ export default {
sureTitle() {
return {
1: "立即导入",
// 2: "...",
// 3: "",
// 4: "",
2: "取消导入",
3: "确定",
4: "确定",
}[this.stepsActive];
},
showCancel() {
return this.stepsActive == 1;
},
getMoudleDisable() {
if (this.crmType == "prebatch") {
//
this.isEditYearMont = true;
this.isEditFactory = true;
this.isState = false;
} else {
this.isEditYearMont = false;
this.isEditFactory = false;
}
},
crmTypeName() {
return (
{
settlementCrossReference: "结算件对照关系",
jfcarkb: "解放-看板输入表",
jfcarconsign: "解放-结算数据输入表",
}[this.crmType] || ""
);
},
getWebApi() {
return (
{
settlementCrossReference:
"/api/settleaccount/SettlementCrossReference/ExcelImport",
//
jfcarkb: "/api/settleaccount/JFCarKB/ExcelImport",
jfcarconsign: "/api/settleaccount/JFCarConsign/ExcelImport",
}[this.crmType] || ""
);
},
@ -313,7 +317,8 @@ export default {
//
return (
{
settlementCrossReference: "结算件对照关系.xlsx",
btcarseq: "解放-看板输入表.xlsx",
btcarkb: "解放-结算数据输入表.xlsx",
}[this.crmType] || ""
);
},
@ -328,7 +333,7 @@ export default {
show: function (val) {
this.stepsActive = 1;
this.getAllYearMonth(); //
this.getMoudleDisable(); //
this.getAllFactory(); //
if (val) {
this.stepsActive = 1;
} else {
@ -371,6 +376,8 @@ export default {
mounted() {},
methods: {
getAllYearMonth() {
//
// this.listQuery.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/CentralizedControl/openlist")
.then((response) => {
@ -386,6 +393,24 @@ export default {
this.listLoading = false;
});
},
getAllFactory() {
this.listQueryCustom.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/Factory/list", this.listQueryCustom)
.then((response) => {
//
this.facotryList = [];
response.items.forEach((element) => {
let options = {};
options.value = element.code;
options.label = element.desc;
this.facotryList.push(options);
});
})
.catch(() => {
this.listLoading = false;
});
},
handleImportExcelClick() {
//
this.fileuploadList = [];
@ -400,28 +425,15 @@ export default {
},
beforeAvatarUpload(file) {
var FileExt = file.name.replace(/.+\./, "");
// if (["xlsx"].indexOf(FileExt.toLowerCase()) === -1) {
// this.$message({
// type: "warning",
// message: "xlsx",
// });
// this.isFileType = "0";
// return false;
// } else {
// this.isFileType = "1";
// }
if (
["xlsx"].indexOf(FileExt.toLowerCase()) === 0 ||
["csv"].indexOf(FileExt.toLowerCase()) === 0
) {
this.isFileType = "1";
} else {
if (["xlsx"].indexOf(FileExt.toLowerCase()) === -1) {
this.$message({
type: "warning",
message: "只支持xlsx类型文件!",
});
this.isFileType = "0";
return false;
} else {
this.isFileType = "1";
}
this.isLt2M = file.size / 1024 / 1024 < 100 ? "1" : "0";
if (this.isLt2M === "0") {
@ -443,6 +455,15 @@ export default {
},
//
sureClick() {
if (
this.crmType == "jfcarconsign" ||
this.crmType == "jfcarkb"
) {
if (this.versionValue == "") {
this.$message.error("必须选择版本!");
return false;
}
}
if (
this.fileuploadList === [] ||
JSON.stringify(this.fileuploadList) === "[]"
@ -450,12 +471,15 @@ export default {
this.$message.error("请选择导入文件");
return false;
}
if (this.stepsActive == 1) {
if (this.stepList[0].status == "wait") {
this.stepsActive = 2;
this.saveTemplateData();
this.activeName = "second";
console.log(this.crmTypeName);
// setTimeout(() => {
// this.saveTemplateData();
// }, 1000);
if (this.stepList[1].status == "finish") {
}
} else {
@ -470,7 +494,6 @@ export default {
saveTemplateData() {
this.loading = true;
//
//--
if (JSON.stringify(this.fileuploadList) != "[]") {
let fd = new FormData();
@ -481,14 +504,14 @@ export default {
fd.append("branchId", "3FA85F64-5717-4562-B3FC-2C963F66AFA6");
fd.append("year", "2021");
fd.append("period", "03");
fd.append("customerCode", "03");
fd.append("factory", this.YearMonthValue);
fd.append("customerCode", "V85Z27");
fd.append("factory", "V85Z27");
fd.append("version", this.versionValue);
const webapi = this.getWebApi;
this.$axios
.posts(webapi, fd)
.then(async (res) => {
console.log("大众导入条件:" + JSON.stringify(res));
console.log("解放导入条件:" + JSON.stringify(fd));
if (res === "Success") {
if (this.isLt2M === "1" && this.isFileType === "1") {
this.$notify({
@ -508,7 +531,6 @@ export default {
this.resultData.successMessage = "数据导入失败!";
this.stepsActive = 3;
}
console.log(this.stepsActive);
this.$emit("status", "finish");
// this.$nextTick(() => {
// this.loading = false;
@ -615,10 +637,6 @@ export default {
transform: translateX(297px) !important;
}
}
/deep/.el-tabs__item {
padding: 0 20px;
}
.el-steps {
margin-bottom: 15px;
@ -641,7 +659,7 @@ export default {
}
.step-section {
min-height: 250px;
min-height: 300px;
/deep/ .el-loading-spinner {
top: 45%;
@ -717,10 +735,11 @@ export default {
//
.result-info {
text-align: center;
.el-card {
border: none;
height: 250px !important;
}
//boxpadding
/deep/.el-card__body {
padding: 60px 20px 20px 20px;
}
@ -743,7 +762,7 @@ export default {
}
&__detail {
margin-top: 25px;
margin-top: 35px;
font-size: 20px;
color: #666;
&--all {
@ -769,3 +788,6 @@ export default {
}
}
</style>

461
code/WebApp/vue/src/components/ImportExcel-invoice/index.vue → code/WebApp/vue/src/components/ImportExcel-hq/index-1.vue

@ -7,143 +7,130 @@
width="600px"
@close="closeView"
>
<el-tabs
v-model="activeName"
:class="stepsActive == 1 ? '' : 'el-tabs__active-go'"
@tab-click="handleClick"
>
<el-tab-pane
label="①文件上传"
name="first"
:disabled="stepsActive == 2 ? true : false"
>
<div class="dialog-body">
<div v-if="stepsActive == 1" class="step-section">
<div class="sections">
<div class="sections__title" v-loading="loading">
导入说明
<div class="sections__tips">
1提供的导入模板不支持.xls文件即不支持Excel97-2003!
</div>
<div class="sections__tips">
2模板名称可以进行修改但不要删除模板中设置的字段
</div>
<div class="sections__tips">
3导入文件大小请勿超过100MB且目前只支持单个Sheet页签
</div>
</div>
<div class="dialog-body">
<div v-if="stepsActive == 1" class="step-section">
<div class="sections">
<div class="sections__title" v-loading="loading">
导入说明
<div class="sections__tips">
1提供的导入模板需要.xlsx文件格式不支持.xls文件即不支持Excel97-2003!
</div>
<div class="sections">
<div class="sections__title">
导入条件设置没有则不用设置
</div>
<div class="sections__tips">
<span class="demonstration">选择版本</span>
<el-select
v-model="versionValue"
clearable
:disabled="isEditFactory"
style="width: 188px"
placeholder="请选择"
>
<el-option
v-for="item in factoryList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
<div class="sections__tips">
2模板名称可以进行修改但不要删除模板中设置的字段
</div>
<div class="sections">
<div class="sections__title">请选择需要导入的文件</div>
<div class="content">
<flexbox class="file-select">
<el-upload
ref="upload"
class="avatar-uploader"
drag
action="#"
:http-request="httpRequestfiles"
:headers="httpHeader"
:file-list="fileuploadList"
:before-upload="beforeAvatarUpload"
:before-remove="beforeRemove"
:on-remove="handleRemove"
multiple
:limit="10"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
</el-upload>
</flexbox>
</div>
<div class="sections__tips">
3导入文件大小请勿超过100MB且目前只支持单个Sheet页签
</div>
</div>
</div>
</el-tab-pane>
<el-tab-pane
label="②导入数据"
name="second"
:disabled="stepsActive == 2 ? false : true"
>
<div
v-loading="loading"
v-if="stepsActive == 2"
element-loading-text="导入中"
element-loading-spinner="el-icon-loading"
class="step-section"
/>
<div
v-loading="loading"
v-else-if="stepsActive == 3"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px; margin-top: -20px" shadow="always">
<i class="el-icon-error" />
<p class="result-info__detail">
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
<el-button
v-if="this.resultData && this.resultData.errSize > 0"
class="result-info__btn--err"
type="text"
@click="downloadErrData"
>下载错误数据</el-button
>
</p>
</el-card>
<div class="sections">
<div class="sections__title">导入条件设置没有则不用设置</div>
<div class="sections__tips">
<span class="demonstration">选择版本</span>
<el-select
v-model="versionValue"
clearable
:disabled="isEditFactory"
style="width: 188px"
placeholder="请选择"
>
<el-option
v-for="item in factoryList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
</div>
<div v-loading="loading" v-if="stepsActive == 4" class="step-section">
<div class="result-info">
<el-card style="height: 300px" shadow="always">
<i class="el-icon-success" />
<p class="result-info__detail">
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
</p>
<p class="result-info__detail">
<router-link
:to="{
name: 'BackGroundWork',
params: { taskId: this.resultData.taskId },
}"
>[单击跳转至后台监控界面]</router-link
>
</p>
</el-card>
<div class="sections">
<div class="sections__title">请选择需要导入的文件</div>
<div class="content">
<flexbox class="file-select">
<el-upload
ref="upload"
class="avatar-uploader"
drag
action="#"
:http-request="httpRequestfiles"
:headers="httpHeader"
:file-list="fileuploadList"
:before-upload="beforeAvatarUpload"
:before-remove="beforeRemove"
:on-remove="handleRemove"
multiple
:limit="10"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
</el-upload>
</flexbox>
</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
<div
v-loading="loading"
v-else-if="stepsActive == 2"
element-loading-text="数据导入中,请耐心等待..."
element-loading-spinner="el-icon-loading"
class="step-section"
/>
<div
v-loading="loading"
v-else-if="stepsActive == 3"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px; margin-top: -20px" shadow="always">
<i class="wk wk-success result-info__icon" />
<p class="result-info__detail">
结果
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
</p>
<el-button
v-if="this.resultData && this.resultData.errSize > 0"
class="result-info__btn--err"
type="text"
@click="downloadErrData"
>下载错误数据</el-button
>
</el-card>
</div>
</div>
<div
v-loading="loading"
v-else-if="stepsActive == 4"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px" shadow="always">
<i class="wk wk-success result-info__icon" />
<p class="result-info__detail">
结果
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
</p>
<!-- <p class="result-info__des">数据导入结果</p>
<p class="result-info__detail">
导入成功数据
<span class="result-info__detail--all"
>{{ this.resultData.totalSize }} </span
>条有效数据
</p> -->
</el-card>
</div>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-popover
v-model="historyPopoverShow"
@ -197,7 +184,7 @@ export default {
loading: false,
fieldList: [],
factoryList: [], //
YearMonthValue: "TH", //
YearMonthValue: "", //
yearMonthList: [], //
versionValue: "",
stateValue: "",
@ -232,7 +219,6 @@ export default {
errTemplate: "",
errMessage: "",
successMessage: "",
taskId: "",
},
processData: {
count: 0,
@ -271,20 +257,18 @@ export default {
SkipCount: 0,
MaxResultCount: 1000,
},
activeName: "first",
};
},
computed: {
sureTitle() {
return {
1: "立即导入",
// 2: "...",
// 3: "",
// 4: "",
2: "导入中",
3: "确定",
}[this.stepsActive];
},
showCancel() {
return this.stepsActive == 1;
return this.stepsActive != 2;
},
getMoudleDisable() {
if (
@ -322,17 +306,24 @@ export default {
this.isEditFactory = false;
}
},
crmTypeName() {
crmTypeName() {
return (
{
invoice: "开票数据",
standardKanban: "红旗-标准看板输入表",
specialKanban: "红旗-特殊看板输入表",
standardConsign: "红旗-标准结算数据输入表",
specialConsign: "红旗-特殊结算数据输入表",
}[this.crmType] || ""
);
},
getWebApi() {
return (
{
invoice: "/api/settleaccount/Invoices/ExcelImport-TH",
//
standardKanban: "/api/settleaccount/HQKBs/ExcelImport",
specialKanban: "/api/settleaccount/HQSpecKBs/ExcelImport",
standardConsign: "/api/settleaccount/HQConsign/ExcelImport",
specialConsign: "/api/settleaccount/HQSpecConsign/ExcelImport",
}[this.crmType] || ""
);
},
@ -340,7 +331,10 @@ export default {
//
return (
{
invoice: "发票模板.xlsx",
standardKanban: "红旗-标准看板输入表.xlsx",
specialKanban: "红旗-特殊看板输入表.xlsx",
standardConsign: "红旗-标准结算数据输入表.xlsx",
specialConsign: "红旗-特殊结算数据输入表.xlsx",
}[this.crmType] || ""
);
},
@ -355,6 +349,7 @@ export default {
show: function (val) {
this.stepsActive = 1;
this.getAllYearMonth(); //
this.getAllFactory(); //
this.getMoudleDisable(); //
if (val) {
this.stepsActive = 1;
@ -397,7 +392,27 @@ export default {
},
mounted() {},
methods: {
// getAllYearMonth() {
// //
// this.factoryList = [];
// //this.listQuery.SkipCount = (this.page - 1) * 500;
// this.$axios
// .posts("/api/settleaccount/CentralizedControl/openlist")
// .then((response) => {
// response.items.forEach((element) => {
// let options = {};
// options.value = element.version;
// options.label = element.version;
// this.factoryList.push(options);
// });
// })
// .catch(() => {
// this.listLoading = false;
// });
// },
getAllYearMonth() {
//
// this.listQuery.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/CentralizedControl/openlist")
.then((response) => {
@ -413,6 +428,24 @@ export default {
this.listLoading = false;
});
},
getAllFactory() {
//
this.yearMonthList = [];
this.listQueryCustom.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/Factory/list", this.listQueryCustom)
.then((response) => {
response.items.forEach((element) => {
let options = {};
options.value = element.code;
options.label = element.desc;
this.yearMonthList.push(options);
});
})
.catch(() => {
this.listLoading = false;
});
},
handleImportExcelClick() {
//
this.fileuploadList = [];
@ -457,6 +490,10 @@ export default {
},
//
sureClick() {
if(this.versionValue===""){
this.$message.error("请选择版本");
return false;
}
if (
this.fileuploadList === [] ||
JSON.stringify(this.fileuploadList) === "[]"
@ -468,8 +505,9 @@ export default {
if (this.stepList[0].status == "wait") {
this.stepsActive = 2;
this.saveTemplateData();
this.activeName = "second";
console.log(this.crmTypeName);
// setTimeout(() => {
// this.saveTemplateData();
// }, 1000);
if (this.stepList[1].status == "finish") {
}
} else {
@ -495,49 +533,33 @@ export default {
fd.append("branchId", "3FA85F64-5717-4562-B3FC-2C963F66AFA6");
fd.append("year", "2021");
fd.append("period", "03");
//fd.append("customerCode", "03");
//fd.append("factory", "TH");
fd.append("customerCode", "T51Z59");
fd.append("factory", this.YearMonthValue);
fd.append("version", this.versionValue);
const webapi = this.getWebApi;
this.$axios
.posts(webapi, fd)
.then(async (res) => {
console.log("发票导入条件:" + JSON.stringify(res));
if (Number.isInteger(res)) {
this.resultData.taskId = res;
this.$notify({
title: "成功",
message: "文件上传成功!",
type: "success",
duration: 2000,
});
this.stepList[1].status = "finish";
this.resultData.successMessage =
"文件已经上传至后台,任务号:" +
res +
",请在后台作业监控界面中查看进度!";
this.stepsActive = 4;
console.log("红旗导入条件:" + JSON.stringify(res));
if (res === "Success") {
if (this.isLt2M === "1" && this.isFileType === "1") {
this.$notify({
title: "成功",
message: "数据导入成功!",
type: "success",
duration: 2000,
});
this.stepList[1].status = "finish";
this.resultData.successMessage = "数据导入成功!";
this.stepsActive = 4;
}
} else {
this.stepList[0].status = "wait";
this.resultData.errTemplate = res; //
this.resultData.errSize = 1;//0
this.resultData.successMessage = "数据导入失败!";
this.stepsActive = 3;
}
// if (res === "Success") {
// if (this.isLt2M === "1" && this.isFileType === "1") {
// this.$notify({
// title: "",
// message: "",
// type: "success",
// duration: 2000,
// });
// this.stepList[1].status = "finish";
// this.resultData.successMessage = "";
// this.stepsActive = 4;
// }
// } else {
// this.stepList[0].status = "wait";
// this.resultData.errTemplate = res; //
// this.resultData.errSize = 1; //0
// this.resultData.successMessage = "";
// this.stepsActive = 3;
// }
console.log(this.stepsActive);
this.$emit("status", "finish");
// this.$nextTick(() => {
// this.loading = false;
@ -545,10 +567,6 @@ export default {
this.loading = false;
})
.catch(() => {
this.stepList[1].status = "finish";
this.resultData.errSize = 0;
this.resultData.successMessage = "导入模板有错误,请检查!";
this.stepsActive = 3;
this.loading = false;
});
} else {
@ -559,10 +577,6 @@ export default {
});
}
},
goTo() {
//
this.$router.push("/views/ux/backGroundWork");
},
/**
* 下载错误模板
@ -604,54 +618,12 @@ export default {
closeView() {
this.$emit("update:show", false);
this.$emit("close", this.stepsActive == 3 ? "finish" : "");
this.activeName = "first";
},
handleClick(tab) {
// console.log(tab.index)
// console.log(tab.name)
if (tab.name == "first") {
// console.log(tab.name)
this.fileuploadList = [];
this.stepsActive = 1;
}
},
},
};
</script>
<style scoped lang="scss">
@import "@/styles/xr-theme.scss";
/deep/.el-dialog {
margin-top: 9vh !important;
}
/deep/.el-dialog__body {
padding: 20px 20px;
}
//TabsFlex
/deep/.el-tabs__nav {
width: 100%;
display: flex;
align-items: center;
justify-content: space-around;
}
//el-tab-pane线
/deep/.el-tabs__nav-wrap::after {
height: 0 !important;
}
//Tabsel-tab-pane线
/deep/.el-tabs__active-bar {
left: 90px;
width: 90px !important;
}
//Tabsel-tab-pane线
/deep/ .el-tabs__active-go {
.el-tabs__active-bar {
transform: translateX(297px) !important;
}
}
/deep/.el-tabs__item {
padding: 0 20px;
}
.el-steps {
margin-bottom: 15px;
@ -674,7 +646,7 @@ export default {
}
.step-section {
min-height: 250px;
min-height: 300px;
/deep/ .el-loading-spinner {
top: 45%;
@ -750,23 +722,11 @@ export default {
//
.result-info {
text-align: center;
.el-card {
border: none;
height: 250px !important;
}
/deep/.el-card__body {
padding: 60px 20px 20px 20px;
}
i {
font-size: 60px;
}
// icon
.el-icon-error {
color: red;
}
//icon
.el-icon-success {
color: chartreuse;
padding-top: 50px;
&__icon {
font-size: 40px;
color: $xr-color-primary;
}
&__des {
@ -776,7 +736,7 @@ export default {
}
&__detail {
margin-top: 25px;
margin-top: 35px;
font-size: 20px;
color: #666;
&--all {
@ -802,3 +762,10 @@ export default {
}
}
</style>

252
code/WebApp/vue/src/components/ImportExcel-hq/index.vue

@ -53,16 +53,6 @@
:value="item.value"
></el-option>
</el-select>
<span class="demonstration">适合功能</span>
<el-select
v-model="valueSelect"
clearable
placeholder="请选结算或二配"
size="medium"
>
<el-option label="结算" value="R0003"></el-option>
<el-option label="二配" value="R0001"></el-option>
</el-select>
</div>
</div>
<div class="sections">
@ -103,10 +93,11 @@
<div
v-loading="loading"
v-if="stepsActive == 2"
element-loading-text="导入中"
element-loading-text="数据导入中,请耐心等待..."
element-loading-spinner="el-icon-loading"
class="step-section"
/>
<div
v-loading="loading"
v-else-if="stepsActive == 3"
@ -119,6 +110,7 @@
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
<el-button
v-if="this.resultData && this.resultData.errSize > 0"
class="result-info__btn--err"
@ -131,24 +123,27 @@
</div>
</div>
<div v-loading="loading" v-if="stepsActive == 4" class="step-section">
<div
v-loading="loading"
v-else-if="stepsActive == 4"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px" shadow="always">
<i class="el-icon-success" />
<p class="result-info__detail">
结果
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
</p>
<p class="result-info__detail">
<router-link
:to="{
name: 'BackGroundWork',
params: { taskId: this.resultData.taskId },
}"
>[单击跳转至后台监控界面]</router-link
>
</p>
<!-- <p class="result-info__des">数据导入结果</p>
<p class="result-info__detail">
导入成功数据
<span class="result-info__detail--all"
>{{ this.resultData.totalSize }} </span
>条有效数据
</p> -->
</el-card>
</div>
</div>
@ -210,7 +205,6 @@ export default {
YearMonthValue: "", //
yearMonthList: [], //
versionValue: "",
valueSelect: "",
stateValue: "",
config: 1, // 1 2
/** 编辑控制 */
@ -243,7 +237,6 @@ export default {
errTemplate: "",
errMessage: "",
successMessage: "",
taskId: "",
},
processData: {
count: 0,
@ -289,26 +282,68 @@ export default {
sureTitle() {
return {
1: "立即导入",
// 2: "...",
// 3: "",
// 4: "",
2: "取消导入",
3: "确定",
4: "确定",
}[this.stepsActive];
},
showCancel() {
return this.stepsActive == 1;
},
getMoudleDisable() {
if (
this.crmType == "codeSetting" ||
this.crmType == "factory" ||
this.crmType == "customerStorageLocation" ||
this.crmType == "materialRelationSupplier" ||
this.crmType == "carMaterialConfig" ||
this.crmType == "materialRelation"
) {
//
this.isEditYearMont = true;
this.isEditFactory = true;
} else if (
this.crmType == "secondaryPriceRatio" ||
this.crmType == "secondaryAdjustment" ||
this.crmType == "secondaryDiscount" ||
this.crmType == "estimatedInventoryDetail" ||
this.crmType == "estimatedSum"
) {
//
this.isEditYearMont = true;
this.isEditFactory = false;
} else if (this.crmType == "material") {
//
this.isEditYearMont = false;
this.isEditFactory = true;
} else if (this.crmType == "prebatch") {
//
this.isEditYearMont = true;
this.isEditFactory = true;
this.isState = false;
} else {
this.isEditYearMont = false;
this.isEditFactory = false;
}
},
crmTypeName() {
return (
{
materialRelation: "总成与结算件关系",
standardKanban: "红旗-标准看板输入表",
specialKanban: "红旗-特殊看板输入表",
standardConsign: "红旗-标准结算数据输入表",
specialConsign: "红旗-特殊结算数据输入表",
}[this.crmType] || ""
);
},
getWebApi() {
return (
{
materialRelation:
"/api/settleaccount/MaterialRelationshipDetail/ExcelImport-TH",
//
standardKanban: "/api/settleaccount/HQKBs/ExcelImport",
specialKanban: "/api/settleaccount/HQSpecKBs/ExcelImport",
standardConsign: "/api/settleaccount/HQConsign/ExcelImport",
specialConsign: "/api/settleaccount/HQSpecConsign/ExcelImport",
}[this.crmType] || ""
);
},
@ -316,19 +351,10 @@ export default {
//
return (
{
// bomdatabase: "Bom.xlsx",
// secondaryPriceRatio: ".xlsx",
// factory: ".xlsx",
// materialRelation: ".xlsx",
// carMaterialConfig: ".xlsx",
// materialRelationSupplier: ".xlsx",
// material: ".xlsx",
// inventorydetail: ".xlsx",
// codeSetting: ".xlsx",
// estimatedSum: ".xlsx",
// estimatedInventoryDetail: ".xlsx",
// customerStorageLocation: ".xlsx",
// secondaryAdjustment: ".xlsx",
standardKanban: "红旗-标准看板输入表.xlsx",
specialKanban: "红旗-特殊看板输入表.xlsx",
standardConsign: "红旗-标准结算数据输入表.xlsx",
specialConsign: "红旗-特殊结算数据输入表.xlsx",
}[this.crmType] || ""
);
},
@ -343,6 +369,8 @@ export default {
show: function (val) {
this.stepsActive = 1;
this.getAllYearMonth(); //
this.getAllFactory(); //
this.getMoudleDisable(); //
if (val) {
this.stepsActive = 1;
} else {
@ -384,7 +412,27 @@ export default {
},
mounted() {},
methods: {
// getAllYearMonth() {
// //
// this.factoryList = [];
// //this.listQuery.SkipCount = (this.page - 1) * 500;
// this.$axios
// .posts("/api/settleaccount/CentralizedControl/openlist")
// .then((response) => {
// response.items.forEach((element) => {
// let options = {};
// options.value = element.version;
// options.label = element.version;
// this.factoryList.push(options);
// });
// })
// .catch(() => {
// this.listLoading = false;
// });
// },
getAllYearMonth() {
//
// this.listQuery.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/CentralizedControl/openlist")
.then((response) => {
@ -400,6 +448,24 @@ export default {
this.listLoading = false;
});
},
getAllFactory() {
//
this.yearMonthList = [];
this.listQueryCustom.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/Factory/list", this.listQueryCustom)
.then((response) => {
response.items.forEach((element) => {
let options = {};
options.value = element.code;
options.label = element.desc;
this.yearMonthList.push(options);
});
})
.catch(() => {
this.listLoading = false;
});
},
handleImportExcelClick() {
//
this.fileuploadList = [];
@ -444,6 +510,10 @@ export default {
},
//
sureClick() {
if (this.versionValue === "") {
this.$message.error("请选择版本");
return false;
}
if (
this.fileuploadList === [] ||
JSON.stringify(this.fileuploadList) === "[]"
@ -451,20 +521,14 @@ export default {
this.$message.error("请选择导入文件");
return false;
}
if (this.versionValue === "") {
this.$message.error("必需选择版本!");
return;
}
if (this.valueSelect === "") {
this.$message.error("必需选择适用功能!");
return;
}
if (this.stepsActive == 1) {
if (this.stepList[0].status == "wait") {
this.stepsActive = 2;
this.saveTemplateData();
this.activeName = "second";
console.log(this.crmTypeName);
// setTimeout(() => {
// this.saveTemplateData();
// }, 1000);
if (this.stepList[1].status == "finish") {
}
} else {
@ -487,51 +551,36 @@ export default {
fileuploadList.forEach((file) => {
fd.append("files", file); //
});
// fd.append("branchId", "3FA85F64-5717-4562-B3FC-2C963F66AFA6");
// fd.append("year", "2021");
// fd.append("period", "03");
fd.append("customerCode", this.valueSelect);
fd.append("branchId", "3FA85F64-5717-4562-B3FC-2C963F66AFA6");
fd.append("year", "2021");
fd.append("period", "03");
fd.append("customerCode", "T51Z59");
fd.append("factory", this.YearMonthValue);
fd.append("version", this.versionValue);
const webapi = this.getWebApi;
this.$axios
.posts(webapi, fd)
.then(async (res) => {
console.log("总成与结算件的导入条件:" + JSON.stringify(res));
if (Number.isInteger(res)) {
this.resultData.taskId = res;
this.$notify({
title: "成功",
message: "文件上传成功!",
type: "success",
duration: 2000,
});
this.stepList[1].status = "finish";
this.resultData.successMessage =
"文件已经上传至后台,任务号:" +
res +
",请在后台作业监控界面中查看进度!";
this.stepsActive = 4;
console.log("红旗导入条件:" + JSON.stringify(res));
if (res === "Success") {
if (this.isLt2M === "1" && this.isFileType === "1") {
this.$notify({
title: "成功",
message: "数据导入成功!",
type: "success",
duration: 2000,
});
this.stepList[1].status = "finish";
this.resultData.successMessage = "数据导入成功!";
this.stepsActive = 4;
}
} else {
this.stepList[0].status = "wait";
this.resultData.errTemplate = res; //
this.resultData.errSize = 1; //0
this.resultData.successMessage = "数据导入失败!";
this.stepsActive = 3;
}
// if (res === "Success") {
// if (this.isLt2M === "1" && this.isFileType === "1") {
// this.$notify({
// title: "",
// message: "",
// type: "success",
// duration: 2000,
// });
// this.stepList[1].status = "finish";
// this.resultData.successMessage = "";
// this.stepsActive = 4;
// }
// } else {
// this.stepList[0].status = "wait";
// this.resultData.errTemplate = res; //
// this.resultData.errSize = 1; //0
// this.resultData.successMessage = "";
// this.stepsActive = 3;
// }
console.log(this.stepsActive);
this.$emit("status", "finish");
// this.$nextTick(() => {
// this.loading = false;
@ -553,10 +602,7 @@ export default {
});
}
},
goTo() {
//
this.$router.push("/views/ux/backGroundWork");
},
/**
* 下载错误模板
*/
@ -641,10 +687,6 @@ export default {
transform: translateX(297px) !important;
}
}
/deep/.el-tabs__item {
padding: 0 20px;
}
.el-steps {
margin-bottom: 15px;
@ -667,7 +709,7 @@ export default {
}
.step-section {
min-height: 250px;
min-height: 300px;
/deep/ .el-loading-spinner {
top: 45%;
@ -743,10 +785,11 @@ export default {
//
.result-info {
text-align: center;
.el-card {
border: none;
height: 250px !important;
}
//boxpadding
/deep/.el-card__body {
padding: 60px 20px 20px 20px;
}
@ -769,7 +812,7 @@ export default {
}
&__detail {
margin-top: 25px;
margin-top: 35px;
font-size: 20px;
color: #666;
&--all {
@ -795,3 +838,10 @@ export default {
}
}
</style>

814
code/WebApp/vue/src/components/ImportExcel-vw/index-1.vue

@ -0,0 +1,814 @@
<template>
<el-dialog
:visible="show"
:title="'导入' + crmTypeName"
:append-to-body="true"
:close-on-click-modal="false"
width="600px"
@close="closeView"
>
<div class="dialog-body">
<div v-if="stepsActive == 1" class="step-section">
<div class="sections">
<div class="sections__title" v-loading="loading">
导入说明
<div class="sections__tips">
1提供的导入模板需要.xlsx文件格式不支持.xls文件即不支持Excel97-2003!
</div>
<div class="sections__tips">
2模板名称可以进行修改但不要删除模板中设置的字段
</div>
<div class="sections__tips">
3导入文件大小请勿超过100MB且目前只支持单个Sheet页签
</div>
</div>
</div>
<div class="sections">
<div class="sections__title">导入条件设置没有则不用设置</div>
<div class="sections__tips">
<span class="demonstration">选择版本</span>
<el-select
v-model="versionValue"
clearable
:disabled="isEditFactory"
style="width: 188px"
placeholder="请选择"
>
<el-option
v-for="item in factoryList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<span class="demonstration">选择工厂</span>
<el-select
v-model="YearMonthValue"
clearable
:disabled="isEditYearMont"
style="width: 188px"
placeholder="请选择"
>
<el-option
v-for="item in yearMonthList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
</div>
<div class="sections">
<div class="sections__title">请选择需要导入的文件</div>
<div class="content">
<flexbox class="file-select">
<el-upload
ref="upload"
class="avatar-uploader"
drag
action="#"
:http-request="httpRequestfiles"
:headers="httpHeader"
:file-list="fileuploadList"
:before-upload="beforeAvatarUpload"
:before-remove="beforeRemove"
:on-remove="handleRemove"
multiple
:limit="10"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
</el-upload>
</flexbox>
</div>
</div>
</div>
<div
v-loading="loading"
v-else-if="stepsActive == 2"
element-loading-text="数据导入中,请耐心等待..."
element-loading-spinner="el-icon-loading"
class="step-section"
/>
<div
v-loading="loading"
v-else-if="stepsActive == 3"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px; margin-top: -20px" shadow="always">
<i class="wk wk-success result-info__icon" />
<p class="result-info__detail">
结果
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
</p>
<el-button
v-if="this.resultData && this.resultData.errSize > 0"
class="result-info__btn--err"
type="text"
@click="downloadErrData"
>下载错误数据</el-button
>
</el-card>
</div>
</div>
<div
v-loading="loading"
v-else-if="stepsActive == 4"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px" shadow="always">
<i class="wk wk-success result-info__icon" />
<p class="result-info__detail">
结果
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
</p>
<!-- <p class="result-info__des">数据导入结果</p>
<p class="result-info__detail">
导入成功数据
<span class="result-info__detail--all"
>{{ this.resultData.totalSize }} </span
>条有效数据
</p> -->
</el-card>
</div>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-popover
v-model="historyPopoverShow"
placement="top"
width="800"
popper-class="no-padding-popover"
trigger="click"
>
</el-popover>
<!-- <el-button @click="closeView">取消</el-button> -->
<el-button :class="{ 'is-hidden': !showCancel }" @click="closeView"
>取消</el-button
>
<el-button v-if="sureTitle" type="primary" @click="sureClick">{{
sureTitle
}}</el-button>
</span>
</el-dialog>
</template>
<script>
import { downloadFile } from "@/utils/crmindex.js";
import { getToken } from "@/utils/auth"; // get token from cookie
export default {
name: "CRMImport", //
props: {
show: {
type: Boolean,
default: false,
},
// CRM
crmType: {
type: String,
default: "",
},
},
data() {
return {
options: [
{
value: "3",
label: "新增",
},
{
value: "0",
label: "修改",
},
],
loading: false,
fieldList: [],
factoryList: [], //
YearMonthValue: "", //
yearMonthList: [], //
versionValue: "",
stateValue: "",
config: 1, // 1 2
/** 编辑控制 */
isEditFactory: false, //
isEditYearMont: false, //
isState: true, //
//file: { name: "" },
stepsActive: 1,
stepList: [
{
icon: "wk wk-upload",
title: "上传文件",
status: "wait",
},
{
icon: "wk wk-data-import",
title: "导入数据",
status: "wait",
},
{
icon: "wk wk-success",
title: "导入完成",
status: "wait",
},
],
//resultData: null,
resultData: {
totalSize: 0,
errSize: 0,
errTemplate: "",
errMessage: "",
successMessage: "",
},
processData: {
count: 0,
status: "",
},
messageId: null,
intervalTimer: null,
fileuploadList: [],
isLt2M: "",
isFileType: "",
historyPopoverShow: false,
yeareVale: "",
monthVale: "",
page: 1,
listQuery: {
Filters: [
{
logic: 0,
column: "project",
action: 0,
value: "factory",
}, //
],
SkipCount: 0,
MaxResultCount: 1000,
},
listQueryCustom: {
Filters: [
{
logic: 0,
column: "customerCode",
action: 0,
value: "U22000",
}, //
],
SkipCount: 0,
MaxResultCount: 1000,
},
};
},
computed: {
sureTitle() {
return {
1: "立即导入",
2: "导入中",
3: "确定",
}[this.stepsActive];
},
showCancel() {
return this.stepsActive != 2;
},
getMoudleDisable() {
if (
this.crmType == "codeSetting" ||
this.crmType == "factory" ||
this.crmType == "customerStorageLocation" ||
this.crmType == "materialRelationSupplier" ||
this.crmType == "carMaterialConfig" ||
this.crmType == "materialRelation"
) {
//
this.isEditYearMont = true;
this.isEditFactory = true;
} else if (
this.crmType == "secondaryPriceRatio" ||
this.crmType == "secondaryAdjustment" ||
this.crmType == "secondaryDiscount" ||
this.crmType == "estimatedInventoryDetail" ||
this.crmType == "estimatedSum"
) {
//
this.isEditYearMont = true;
this.isEditFactory = false;
} else if (this.crmType == "material") {
//
this.isEditYearMont = false;
this.isEditFactory = true;
} else if (this.crmType == "prebatch") {
//
this.isEditYearMont = true;
this.isEditFactory = true;
this.isState = false;
} else {
this.isEditYearMont = false;
this.isEditFactory = false;
}
},
crmTypeName() {
return (
{
bomdatabase: "产品结构BOM",
prebatch: "预批量",
secondaryPriceRatio: "二配结算价格比例",
factory: "工厂设置",
materialRelation: "零件匹配关系",
carMaterialConfig: "车型代码与零件匹配",
materialRelationSupplier: "供应商零件设置表",
material: "物料主数据",
inventorydetail: "库存明细",
codeSetting: "通用代码设置",
estimatedSum: "应付暂估汇总",
estimatedInventoryDetail: "应付暂估收货明细",
customerStorageLocation: "客户存储地点",
secondaryAdjustment: "二配数量调整输入",
secondaryDiscount: "二配折扣调整输入",
}[this.crmType] || ""
);
},
getWebApi() {
return (
{
bomdatabase: "/api/settleaccount/bom/ExcelImport",
prebatch: "/api/settleaccount/Prebatch/ExcelImport",
secondaryPriceRatio:
"/api/settleaccount/SecondaryPriceRatio/ExcelImport",
factory: "/api/settleaccount/Factory/ExcelImport",
materialRelation:
"/api/settleaccount/MaterialRelationship/ExcelImport",
carMaterialConfig: "/api/settleaccount/CarMaterialConfig/ExcelImport",
materialRelationSupplier:
"/api/settleaccount/SupplierItemSetUp/ExcelImport",
material: "/api/settleaccount/material/ExcelImport",
inventorydetail: "/api/settleaccount/InventoryDetail/ExcelImport",
codeSetting: "/api/settleaccount/CodeSetting/ExcelImport",
estimatedSum: "/api/settleaccount/EstimatedSum/ExcelImport",
estimatedInventoryDetail:
"/api/settleaccount/EstimatedInventoryDetail/ExcelImport",
customerStorageLocation:
"/api/settleaccount/CustomerStorageLocation/ExcelImport",
secondaryAdjustment:
"/api/settleaccount/SecondaryAdjustment/ExcelImport",
secondaryDiscount: "/api/settleaccount/SecondaryDiscount/ExcelImport",
}[this.crmType] || ""
);
},
getImportTemplate() {
//
return (
{
bomdatabase: "产品结构Bom导入模板.xlsx",
secondaryPriceRatio: "二配价格比例导入模板.xlsx",
factory: "工厂设置模板.xlsx",
materialRelation: "零件匹配关系.xlsx",
carMaterialConfig: "车型代码与零件匹配.xlsx",
materialRelationSupplier: "供应商零件设置表.xlsx",
material: "物料主数据.xlsx",
inventorydetail: "库存明细信息.xlsx",
codeSetting: "通用代码设置数据.xlsx",
estimatedSum: "应付暂估汇总.xlsx",
estimatedInventoryDetail: "应付暂估收货明细.xlsx",
customerStorageLocation: "客户存储地点.xlsx",
secondaryAdjustment: "二配调整输入.xlsx",
}[this.crmType] || ""
);
},
httpHeader() {
//token
return {
Authorization: "Bearer " + getToken(),
};
},
},
watch: {
show: function (val) {
this.stepsActive = 1;
this.getAllYearMonth(); //
this.getAllFactory(); //
this.getMoudleDisable(); //
if (val) {
this.stepsActive = 1;
} else {
if (this.stepsActive == 3) {
//
this.stepsActive = 1;
this.stepList = [
{
icon: "wk wk-upload",
title: "上传文件",
status: "wait",
},
{
icon: "wk wk-data-import",
title: "导入数据",
status: "wait",
},
{
icon: "wk wk-success",
title: "导入完成",
status: "wait",
},
];
this.resultData = null;
}
}
},
stepsActive() {
this.$emit(
"status",
{
1: "wait",
2: "process",
3: "finish",
}[this.stepsActive]
);
},
},
mounted() {},
methods: {
// getAllYearMonth() {
// //
// this.factoryList = [];
// //this.listQuery.SkipCount = (this.page - 1) * 500;
// this.$axios
// .posts("/api/settleaccount/CentralizedControl/openlist")
// .then((response) => {
// response.items.forEach((element) => {
// let options = {};
// options.value = element.version;
// options.label = element.version;
// this.factoryList.push(options);
// });
// })
// .catch(() => {
// this.listLoading = false;
// });
// },
getAllYearMonth() {
//
// this.listQuery.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/CentralizedControl/openlist")
.then((response) => {
this.factoryList = [];
response.forEach((element) => {
let options = {};
options.value = element.version;
options.label = element.version;
this.factoryList.push(options);
});
})
.catch(() => {
this.listLoading = false;
});
},
getAllFactory() {
//
this.yearMonthList = [];
this.listQueryCustom.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/Factory/list", this.listQueryCustom)
.then((response) => {
response.items.forEach((element) => {
let options = {};
options.value = element.code;
options.label = element.desc;
this.yearMonthList.push(options);
});
})
.catch(() => {
this.listLoading = false;
});
},
handleImportExcelClick() {
//
this.fileuploadList = [];
//this.$refs.upload.clearFiles();
},
httpRequestfiles(data) {
let _this = this;
let rd = new FileReader(); //
let file = data.file;
this.fileuploadList.push(file);
rd.readAsDataURL(file); // base64
},
beforeAvatarUpload(file) {
var FileExt = file.name.replace(/.+\./, "");
if (["xlsx"].indexOf(FileExt.toLowerCase()) === -1) {
this.$message({
type: "warning",
message: "只支持xlsx类型文件!",
});
this.isFileType = "0";
return false;
} else {
this.isFileType = "1";
}
this.isLt2M = file.size / 1024 / 1024 < 100 ? "1" : "0";
if (this.isLt2M === "0") {
this.$message.error("上传文件大小不能超过 100MB!");
}
return this.isLt2M === "1" ? true : false;
},
beforeRemove(file, fileList) {
if (this.isLt2M === "1" && this.isFileType === "1") {
return this.$confirm(`确定移除 ${file.name}`);
}
},
handleRemove(file, fileList) {
//
const index = this.fileuploadList.indexOf(file.originFileObj);
const newFileList = this.fileuploadList.slice();
newFileList.splice(index, 1);
this.fileuploadList = newFileList;
},
//
sureClick() {
if (
this.fileuploadList === [] ||
JSON.stringify(this.fileuploadList) === "[]"
) {
this.$message.error("请选择导入文件");
return false;
}
if (this.stepsActive == 1) {
if (this.stepList[0].status == "wait") {
this.stepsActive = 2;
this.saveTemplateData();
// setTimeout(() => {
// this.saveTemplateData();
// }, 1000);
if (this.stepList[1].status == "finish") {
}
} else {
if (this.fileuploadList === "[]") {
this.$message.error("请选择导入文件");
}
}
} else {
this.closeView();
}
},
saveTemplateData() {
this.loading = true;
//
//--
if (JSON.stringify(this.fileuploadList) != "[]") {
let fd = new FormData();
const { fileuploadList } = this;
fileuploadList.forEach((file) => {
fd.append("files", file); //
});
fd.append("branchId", "3FA85F64-5717-4562-B3FC-2C963F66AFA6");
fd.append("year", "2021");
fd.append("period", "03");
fd.append("customerCode", "03");
fd.append("factory", this.YearMonthValue);
fd.append("version", this.versionValue);
const webapi = this.getWebApi;
this.$axios
.posts(webapi, fd)
.then(async (res) => {
console.log("大众导入条件:" + JSON.stringify(res));
if (res === "Success") {
if (this.isLt2M === "1" && this.isFileType === "1") {
this.$notify({
title: "成功",
message: "数据导入成功!",
type: "success",
duration: 2000,
});
this.stepList[1].status = "finish";
this.resultData.successMessage = "数据导入成功!";
this.stepsActive = 4;
}
} else {
this.stepList[0].status = "wait";
this.resultData.errTemplate = res; //
this.resultData.errSize = 1;//0
this.resultData.successMessage = "数据导入失败!";
this.stepsActive = 3;
}
this.$emit("status", "finish");
// this.$nextTick(() => {
// this.loading = false;
// });
this.loading = false;
})
.catch(() => {
this.loading = false;
});
} else {
this.loading = false;
this.$message({
message: "未上传任何附件,请查检!",
type: "warning",
});
}
},
/**
* 下载错误模板
*/
downloadErrData() {
let fileNameOfProject = this.resultData.errTemplate;
this.$axios
.BolbGets(
"/api/settleaccount/getblobfile/download/" + fileNameOfProject
)
.then((response) => {
if (fileNameOfProject.indexOf("_") != -1) {
let downName =
fileNameOfProject.slice(0, fileNameOfProject.lastIndexOf("_")) +
fileNameOfProject.slice(fileNameOfProject.lastIndexOf("."));
downloadFile(response, downName);
this.$notify({
title: "成功",
message: "错误数据-导出成功!",
type: "success",
duration: 2000,
});
} else {
downloadFile(response, fileNameOfProject);
this.$notify({
title: "成功",
message: "错误数据-导出成功!",
type: "success",
duration: 2000,
});
}
this.listLoading = false;
})
.catch((error) => {
this.listLoading = false;
});
},
//
closeView() {
this.$emit("update:show", false);
this.$emit("close", this.stepsActive == 3 ? "finish" : "");
},
},
};
</script>
<style scoped lang="scss">
@import "@/styles/xr-theme.scss";
.el-steps {
margin-bottom: 15px;
/deep/ .el-step__title {
font-size: 14px;
}
/deep/ .el-step.is-simple .el-step__arrow::before,
/deep/ .el-step.is-simple .el-step__arrow::after {
height: 10px;
width: 2px;
}
/deep/ .el-step.is-simple .el-step__arrow::after {
transform: rotate(45deg) translateY(3px);
}
/deep/ .el-step.is-simple .el-step__arrow::before {
transform: rotate(-45deg) translateY(-2px);
}
}
.step-section {
min-height: 300px;
/deep/ .el-loading-spinner {
top: 45%;
.el-icon-loading {
font-size: 40px;
color: #999;
}
.el-loading-text {
color: #333;
}
}
}
.sections {
font-size: 14px;
color: #333;
&__title {
font-weight: 600;
}
&__tips {
padding-left: 30px;
margin: 8px 0 15px;
color: #999;
font-size: 12px;
line-height: 1.4;
}
.download {
cursor: pointer;
color: #2362fb;
}
}
.sections__tips + .content {
padding-top: 0;
}
.content {
padding: 10px 10px 10px 30px;
.el-select {
width: 400px;
}
.user-cell {
width: 400px;
}
}
#importInputFile {
display: none;
}
.file-select {
.el-input {
width: 400px;
}
button {
margin-left: 20px;
}
}
.is-hidden {
visibility: hidden;
}
.history-btn {
float: left;
margin-left: 15px;
}
//
.result-info {
text-align: center;
padding-top: 50px;
&__icon {
font-size: 40px;
color: $xr-color-primary;
}
&__des {
margin-top: -15px;
color: #333;
font-size: 30px;
}
&__detail {
margin-top: 35px;
font-size: 20px;
color: #666;
&--all {
color: #333;
font-weight: 600;
}
&--suc {
color: $xr-color-primary;
font-weight: 600;
}
&--err {
margin-top: 25px;
color: #f94e4e;
font-weight: 600;
}
}
&__btn--err {
margin-top: 10px;
font-size: 20px;
}
}
</style>

177
code/WebApp/vue/src/components/ImportExcel-vw/index.vue

@ -53,7 +53,7 @@
:value="item.value"
></el-option>
</el-select>
<!-- <span class="demonstration">选择工厂</span>
<span class="demonstration">选择工厂</span>
<el-select
v-model="YearMonthValue"
clearable
@ -67,7 +67,7 @@
:label="item.label"
:value="item.value"
></el-option>
</el-select> -->
</el-select>
</div>
</div>
<div class="sections">
@ -145,15 +145,13 @@
>{{ this.resultData.successMessage }}
</span>
</p>
<p class="result-info__detail">
<router-link
:to="{
name: 'BackGroundWork',
params: { taskId: this.resultData.taskId },
}"
>[单击跳转至后台监控界面]</router-link
>
</p>
<!-- <p class="result-info__des">数据导入结果</p>
<p class="result-info__detail">
导入成功数据
<span class="result-info__detail--all"
>{{ this.resultData.totalSize }} </span
>条有效数据
</p> -->
</el-card>
</div>
</div>
@ -247,7 +245,6 @@ export default {
errTemplate: "",
errMessage: "",
successMessage: "",
taskId: "",
},
processData: {
count: 0,
@ -307,7 +304,8 @@ export default {
this.crmType == "factory" ||
this.crmType == "customerStorageLocation" ||
this.crmType == "materialRelationSupplier" ||
this.crmType == "carMaterialConfig"
this.crmType == "carMaterialConfig" ||
this.crmType == "materialRelation"
) {
//
this.isEditYearMont = true;
@ -315,6 +313,8 @@ export default {
} else if (
this.crmType == "secondaryPriceRatio" ||
this.crmType == "secondaryAdjustment" ||
this.crmType == "secondaryAdjustmentBT" ||
this.crmType == "secondaryAdjustmentHQ" ||
this.crmType == "secondaryDiscount" ||
this.crmType == "estimatedInventoryDetail" ||
this.crmType == "estimatedSum"
@ -324,8 +324,8 @@ export default {
this.isEditFactory = false;
} else if (this.crmType == "material") {
//
this.isEditYearMont = true;
this.isEditFactory = false;
this.isEditYearMont = false;
this.isEditFactory = true;
} else if (this.crmType == "prebatch") {
//
this.isEditYearMont = true;
@ -339,16 +339,54 @@ export default {
crmTypeName() {
return (
{
settleAccount: "大众已结算数据",
unSettleAccount: "大众未结数据",
bomdatabase: "产品结构BOM",
prebatch: "预批量",
secondaryPriceRatio: "二配结算价格比例",
factory: "工厂设置",
materialRelation: "零件匹配关系",
carMaterialConfig: "车型代码与零件匹配",
materialRelationSupplier: "供应商零件设置表",
material: "物料主数据",
inventorydetail: "库存明细",
codeSetting: "通用代码设置",
estimatedSum: "应付暂估汇总",
estimatedInventoryDetail: "应付暂估收货明细",
customerStorageLocation: "客户存储地点",
secondaryAdjustment: "二配数量调整输入",
secondaryAdjustmentBT: "奔腾-二配数量调整输入",
secondaryAdjustmentHQ:"红旗-二配数量调整输入",
secondaryDiscount: "二配折扣调整输入",
}[this.crmType] || ""
);
},
getWebApi() {
return (
{
settleAccount: "/api/settleaccount/SettleAccount/ExcelImport-PG",
unSettleAccount: "/api/settleaccount/UnSettleAccount/ExcelImport",
bomdatabase: "/api/settleaccount/bom/ExcelImport",
prebatch: "/api/settleaccount/Prebatch/ExcelImport",
secondaryPriceRatio:
"/api/settleaccount/SecondaryPriceRatio/ExcelImport",
factory: "/api/settleaccount/Factory/ExcelImport",
materialRelation:
"/api/settleaccount/MaterialRelationship/ExcelImport",
carMaterialConfig: "/api/settleaccount/CarMaterialConfig/ExcelImport",
materialRelationSupplier:
"/api/settleaccount/SupplierItemSetUp/ExcelImport",
material: "/api/settleaccount/material/ExcelImport",
inventorydetail: "/api/settleaccount/InventoryDetail/ExcelImport",
codeSetting: "/api/settleaccount/CodeSetting/ExcelImport",
estimatedSum: "/api/settleaccount/EstimatedSum/ExcelImport",
estimatedInventoryDetail:
"/api/settleaccount/EstimatedInventoryDetail/ExcelImport",
customerStorageLocation:
"/api/settleaccount/CustomerStorageLocation/ExcelImport",
secondaryAdjustment:
"/api/settleaccount/SecondaryAdjustment/ExcelImport",
secondaryAdjustmentBT://
"/api/settleaccount/SecondaryAdjustmentBT/ExcelImport",
secondaryAdjustmentHQ://
"/api/settleaccount/SecondaryAdjustmentHQ/ExcelImport",
secondaryDiscount: "/api/settleaccount/SecondaryDiscount/ExcelImport",
}[this.crmType] || ""
);
},
@ -356,19 +394,21 @@ export default {
//
return (
{
// bomdatabase: "Bom.xlsx",
// secondaryPriceRatio: ".xlsx",
// factory: ".xlsx",
// materialRelation: ".xlsx",
// carMaterialConfig: ".xlsx",
// materialRelationSupplier: ".xlsx",
// material: ".xlsx",
// inventorydetail: ".xlsx",
// codeSetting: ".xlsx",
// estimatedSum: ".xlsx",
// estimatedInventoryDetail: ".xlsx",
// customerStorageLocation: ".xlsx",
// secondaryAdjustment: ".xlsx",
bomdatabase: "产品结构Bom导入模板.xlsx",
secondaryPriceRatio: "二配价格比例导入模板.xlsx",
factory: "工厂设置模板.xlsx",
materialRelation: "零件匹配关系.xlsx",
carMaterialConfig: "车型代码与零件匹配.xlsx",
materialRelationSupplier: "供应商零件设置表.xlsx",
material: "物料主数据.xlsx",
inventorydetail: "库存明细信息.xlsx",
codeSetting: "通用代码设置数据.xlsx",
estimatedSum: "应付暂估汇总.xlsx",
estimatedInventoryDetail: "应付暂估收货明细.xlsx",
customerStorageLocation: "客户存储地点.xlsx",
secondaryAdjustment: "二配调整输入.xlsx",
secondaryAdjustmentBT: "奔腾-二配调整输入.xlsx",
secondaryAdjustmentHQ:"红旗-二配调整输入xlsx"
}[this.crmType] || ""
);
},
@ -383,6 +423,7 @@ export default {
show: function (val) {
this.stepsActive = 1;
this.getAllYearMonth(); //
this.getAllFactory(); //
this.getMoudleDisable(); //
if (val) {
this.stepsActive = 1;
@ -441,6 +482,24 @@ export default {
this.listLoading = false;
});
},
getAllFactory() {
//
this.yearMonthList = [];
this.listQueryCustom.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/Factory/list", this.listQueryCustom)
.then((response) => {
response.items.forEach((element) => {
let options = {};
options.value = element.code;
options.label = element.desc;
this.yearMonthList.push(options);
});
})
.catch(() => {
this.listLoading = false;
});
},
handleImportExcelClick() {
//
this.fileuploadList = [];
@ -485,6 +544,22 @@ export default {
},
//
sureClick() {
if (
this.crmType == "secondaryPriceRatio" ||
this.crmType == "secondaryAdjustment" ||
this.crmType == "secondaryAdjustmentBT" ||
this.crmType == "secondaryAdjustmentHQ" ||
this.crmType == "secondaryDiscount" ||
this.crmType == "estimatedInventoryDetail" ||
this.crmType == "inventorydetail" ||
this.crmType == "bomdatabase" ||
this.crmType == "estimatedSum"
) {
if (this.versionValue == "") {
this.$message.error("必须选择版本!");
return false;
}
}
if (
this.fileuploadList === [] ||
JSON.stringify(this.fileuploadList) === "[]"
@ -524,26 +599,31 @@ export default {
fd.append("year", "2021");
fd.append("period", "03");
fd.append("customerCode", "03");
fd.append("factory", this.YearMonthValue);
fd.append("version", this.versionValue);
const webapi = this.getWebApi;
this.$axios
.posts(webapi, fd)
.then(async (res) => {
console.log("大众导入条件:" + JSON.stringify(res));
if (Number.isInteger(res)) {
this.resultData.taskId = res;
this.$notify({
title: "成功",
message: "文件上传成功!",
type: "success",
duration: 2000,
});
this.stepList[1].status = "finish";
this.resultData.successMessage =
"文件已经上传至后台,任务号:" +
res +
",请在后台作业监控界面中查看进度!";
this.stepsActive = 4;
if (res === "Success") {
if (this.isLt2M === "1" && this.isFileType === "1") {
this.$notify({
title: "成功",
message: "数据导入成功!",
type: "success",
duration: 2000,
});
this.stepList[1].status = "finish";
this.resultData.successMessage = "数据导入成功!";
this.stepsActive = 4;
}
} else {
this.stepList[0].status = "wait";
this.resultData.errTemplate = res; //
this.resultData.errSize = 1; //0
this.resultData.successMessage = "数据导入失败!";
this.stepsActive = 3;
}
console.log(this.stepsActive);
this.$emit("status", "finish");
@ -567,10 +647,7 @@ export default {
});
}
},
goTo() {
//
this.$router.push("/views/ux/backGroundWork");
},
/**
* 下载错误模板
*/

4
code/WebApp/vue/src/components/ImportExcel/index.vue

@ -298,7 +298,7 @@ export default {
return (
{
bomdatabase: "产品结构BOM",
// materialRelation: "",
materialRelation: "零件匹配关系",
material: "物料主数据",
inventorydetail: "库存明细",
codeSetting: "通用代码设置",
@ -311,7 +311,7 @@ export default {
return (
{
bomdatabase: "/api/settleaccount/bom/ExcelImport",
// materialRelation: "/api/settleaccount/materialRelation/ExcelImport",
materialRelation: "/api/settleaccount/materialRelation/ExcelImport",
material: "/api/settleaccount/material/ExcelImport",
inventorydetail: "/api/settleaccount/InventoryDetail​/ExcelImport",
codeSetting: "/api/settleaccount/CodeSetting/ExcelImport",

766
code/WebApp/vue/src/components/ImportTxt/index-1.vue

@ -0,0 +1,766 @@
<template>
<el-dialog
:visible="show"
:title="'导入' + crmTypeName"
:append-to-body="true"
:close-on-click-modal="false"
width="600px"
@close="closeView"
>
<div class="dialog-body">
<div v-if="stepsActive == 1" class="step-section">
<div class="sections">
<div class="sections__title" v-loading="loading">
导入说明
<div class="sections__tips">
1提供的导入模板需要.txt文本格式
</div>
<div class="sections__tips">
2模板名称可以进行修改但不要删除模板中设置的字段
</div>
<div class="sections__tips">3导入文件大小请勿超过100MB</div>
</div>
</div>
<div class="sections">
<div class="sections__title">
导入条件设置没有则不用设置
</div>
<div class="sections__tips">
<span class="demonstration">选择版本</span>
<el-select
v-model="versionValue"
clearable
:disabled="isEditFactory"
style="width: 188px"
placeholder="请选择"
>
<el-option
v-for="item in factoryList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<span class="demonstration">大众厂线</span>
<el-select
v-model="CarModekValue"
clearable
:disabled="isEditYearMont"
style="width: 188px"
placeholder="请选择"
>
<el-option
v-for="item in carModelList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
<div class="sections__tips">
<span class="demonstration">开始时间</span>
<el-date-picker
v-model="startTimeVale"
:disabled="isTimeUse"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择日期时间"
>
</el-date-picker>
</div>
<div class="sections__tips">
<span class="demonstration">结束时间</span>
<el-date-picker
v-model="endTimeVale"
:disabled="isTimeUse"
type="datetime"
value-format="yyyy-MM-dd HH:mm:ss"
placeholder="选择日期时间"
>
</el-date-picker>
</div>
</div>
<div class="sections">
<div class="sections__title">请选择需要导入的文件</div>
<div class="content">
<flexbox class="file-select">
<el-upload
ref="upload"
class="avatar-uploader"
drag
action="#"
:http-request="httpRequestfiles"
:headers="httpHeader"
:file-list="fileuploadList"
:before-upload="beforeAvatarUpload"
:before-remove="beforeRemove"
:on-remove="handleRemove"
multiple
:limit="10"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
</el-upload>
</flexbox>
</div>
</div>
</div>
<div
v-loading="loading"
v-else-if="stepsActive == 2"
element-loading-text="数据导入中,请耐心等待..."
element-loading-spinner="el-icon-loading"
class="step-section"
/>
<div
v-loading="loading"
v-else-if="stepsActive == 3"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px; margin-top: -20px" shadow="always">
<i class="wk wk-success result-info__icon" />
<!-- <p class="result-info__detail">
导入成功数据
<span class="result-info__detail--all"
>{{ this.resultData.totalSize }} </span
>条有效数据
</p> -->
<p class="result-info__detail">
结果
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
</p>
<el-button
v-if="this.resultData && this.resultData.errSize > 0"
class="result-info__btn--err"
type="text"
@click="downloadErrData"
>下载错误数据</el-button
>
</el-card>
</div>
</div>
<div
v-loading="loading"
v-else-if="stepsActive == 4"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px" shadow="always">
<!-- <i class="wk wk-success result-info__icon" />
<p class="result-info__des">数据导入结果</p>
<p class="result-info__detail">
导入成功数据
<span class="result-info__detail--all"
>{{ this.resultData.totalSize }} </span
>条有效数据
</p> -->
<i class="wk wk-success result-info__icon" />
<p class="result-info__detail">
结果
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
</p>
</el-card>
</div>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-popover
v-model="historyPopoverShow"
placement="top"
width="800"
popper-class="no-padding-popover"
trigger="click"
>
</el-popover>
<!-- <el-button @click="closeView">取消</el-button> -->
<el-button :class="{ 'is-hidden': !showCancel }" @click="closeView"
>取消</el-button
>
<el-button v-if="sureTitle" type="primary" @click="sureClick">{{
sureTitle
}}</el-button>
</span>
</el-dialog>
</template>
<script>
import { downloadFile } from "@/utils/crmindex.js";
import { getToken } from "@/utils/auth"; // get token from cookie
import { formatTimeToTimestamp } from "@/utils/index";
export default {
name: "CRMImport", //
props: {
show: {
type: Boolean,
default: false,
},
// CRM
crmType: {
type: String,
default: "",
},
},
data() {
return {
loading: false,
fieldList: [],
factoryList: [], //
CarModekValue: [], //
carModelList: [], //
versionValue: "",
config: 1, // 1 2
/** 编辑控制 */
isEditFactory: false, //
isEditYearMont: false, //
isTimeUse: false, //
//file: { name: "" },
stepsActive: 1,
stepList: [
{
icon: "wk wk-upload",
title: "上传文件",
status: "wait",
},
{
icon: "wk wk-data-import",
title: "导入数据",
status: "wait",
},
{
icon: "wk wk-success",
title: "导入完成",
status: "wait",
},
],
//resultData: null,
resultData: {
totalSize: 0,
errSize: 0,
errTemplate: "",
errMessage: "",
successMessage: "",
},
processData: {
count: 0,
status: "",
},
messageId: null,
intervalTimer: null,
fileuploadList: [],
isLt2M: "",
isFileType: "",
historyPopoverShow: false,
startTimeVale: "",
endTimeVale: "",
page: 1,
listQuery: {
Filters: [
{
logic: 0,
column: "version",
action: 0,
value: "",
}, //
],
SkipCount: 0,
MaxResultCount: 1000,
},
listQueryCustom: {
Filters: [
{
logic: 0,
column: "project",
action: 0,
value: "生产线",
}, //
],
SkipCount: 0,
MaxResultCount: 1000,
},
};
},
computed: {
sureTitle() {
return {
1: "立即导入",
2: "导入中",
3: "确定",
}[this.stepsActive];
},
showCancel() {
return this.stepsActive != 2;
},
getMoudleDisable() {
if (this.crmType == "settleAccount") {
this.isEditYearMont = true;
//this.isEditFactory = true;
this.isTimeUse = true;
} else if (this.crmType == "material") {
//-
this.isEditYearMont = true;
this.isEditFactory = false;
} else if (
this.crmType == "estimatedSum" ||
this.crmType == "estimatedInventoryDetail"
) {
this.isEditYearMont = false;
this.isEditFactory = true;
} else {
this.isEditYearMont = false;
this.isEditFactory = false;
}
},
crmTypeName() {
return (
{
fis: "FIS发运数据",
settleAccount: "R3数据",
}[this.crmType] || ""
);
},
getWebApi() {
return (
{
fis: "/api/settleaccount/fis/ExcelImport",
settleAccount: "/api/settleaccount/SettleAccount/ExcelImport",
}[this.crmType] || ""
);
},
getImportTemplate() {
//
return (
{
fis: "FIS发运数据导入模板.xlsx",
settleAccount: "R3数据模板.xlsx",
}[this.crmType] || ""
);
},
httpHeader() {
//token
return {
Authorization: "Bearer " + getToken(),
};
},
},
watch: {
show: function (val) {
this.stepsActive = 1;
this.getAllFactory(); //
this.getAllCarModel(); //
this.getMoudleDisable(); //
if (val) {
this.stepsActive = 1;
} else {
if (this.stepsActive == 3) {
//
this.stepsActive = 1;
this.stepList = [
{
icon: "wk wk-upload",
title: "上传文件",
status: "wait",
},
{
icon: "wk wk-data-import",
title: "导入数据",
status: "wait",
},
{
icon: "wk wk-success",
title: "导入完成",
status: "wait",
},
];
this.resultData = null;
}
}
},
stepsActive() {
this.$emit(
"status",
{
1: "wait",
2: "process",
3: "finish",
}[this.stepsActive]
);
},
},
mounted() {},
methods: {
getAllFactory() {
//
this.factoryList = [];
// this.listQuery.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/CentralizedControl/openlist")
.then((response) => {
response.forEach((element) => {
let options = {};
options.value = element.version;
options.label = element.version;
this.factoryList.push(options);
});
})
.catch(() => {
this.listLoading = false;
});
},
getAllCarModel() {
//
this.carModelList = [];
this.listQueryCustom.SkipCount = (this.page - 1) * 500;
console.log(JSON.stringify(this.listQueryCustom));
this.$axios
.posts("/api/settleaccount/CodeSetting/list", this.listQueryCustom)
.then((response) => {
response.items.forEach((element) => {
let options = {};
options.value = element.value;
options.label = element.description;
this.carModelList.push(options);
});
})
.catch(() => {
this.listLoading = false;
});
},
handleImportExcelClick() {
//
this.fileuploadList = [];
//this.$refs.upload.clearFiles();
},
httpRequestfiles(data) {
let _this = this;
let rd = new FileReader(); //
let file = data.file;
this.fileuploadList.push(file);
rd.readAsDataURL(file); // base64
},
beforeAvatarUpload(file) {
var FileExt = file.name.replace(/.+\./, "");
if (["txt"].indexOf(FileExt.toLowerCase()) === -1) {
this.$message({
type: "warning",
message: "只支持txt文本类型文件!",
});
this.isFileType = "0";
return false;
} else {
this.isFileType = "1";
}
this.isLt2M = file.size / 1024 / 1024 < 100 ? "1" : "0";
if (this.isLt2M === "0") {
this.$message.error("上传文件大小不能超过 100MB!");
}
return this.isLt2M === "1" ? true : false;
},
beforeRemove(file, fileList) {
if (this.isLt2M === "1" && this.isFileType === "1") {
return this.$confirm(`确定移除 ${file.name}`);
}
},
handleRemove(file, fileList) {
//
const index = this.fileuploadList.indexOf(file.originFileObj);
const newFileList = this.fileuploadList.slice();
newFileList.splice(index, 1);
this.fileuploadList = newFileList;
},
//
sureClick() {
if (this.startTimeVale && this.endTimeVale) {
if (
formatTimeToTimestamp(this.startTimeVale) >=
formatTimeToTimestamp(this.endTimeVale)
) {
this.$message.error("开始时间必须小于结束时间!");
return false;
}
}
if (
this.fileuploadList === [] ||
JSON.stringify(this.fileuploadList) === "[]"
) {
this.$message.error("请选择导入文件");
return false;
}
if (this.stepsActive == 1) {
if (this.stepList[0].status == "wait") {
this.stepsActive = 2;
this.saveTemplateData();
// setTimeout(() => {
// this.saveTemplateData();
// }, 1000);
if (this.stepList[1].status == "finish") {
}
} else {
if (this.fileuploadList === "[]") {
this.$message.error("请选择导入文件");
}
}
} else {
this.closeView();
}
},
saveTemplateData() {
this.loading = true;
//
//--
if (JSON.stringify(this.fileuploadList) != "[]") {
let fd = new FormData();
const { fileuploadList } = this;
fileuploadList.forEach((file) => {
fd.append("files", file); //
});
fd.append("branchId", "3FA85F64-5717-4562-B3FC-2C963F66AFA6");
fd.append("year", "2021");
fd.append("period", "03");
fd.append("customerCode", "03");
fd.append("factory", "03");
fd.append("beginDate", this.startTimeVale);
fd.append("endDate", this.endTimeVale);
fd.append("model", this.CarModekValue);
fd.append("version", this.versionValue);
const webapi = this.getWebApi;
this.$axios
.posts(webapi, fd)
.then(async (res) => {
console.log("导入条件:" + JSON.stringify(res));
if (res === "Success") {
if (this.isLt2M === "1" && this.isFileType === "1") {
this.$notify({
title: "成功",
message: "数据导入成功!",
type: "success",
duration: 2000,
});
this.stepList[1].status = "finish";
this.resultData.successMessage = "数据导入成功!";
this.stepsActive = 4;
}
} else {
this.stepList[0].status = "wait";
this.resultData.errTemplate = res; //
this.resultData.errSize = 1;//0
this.resultData.successMessage = "数据导入失败!";
this.stepsActive = 3;
}
this.$emit("status", "finish");
this.loading = false;
})
.catch(() => {
this.loading = false;
});
} else {
this.loading = false;
this.$message({
message: "未上传任何附件,请查检!",
type: "warning",
});
}
},
/**
* 下载错误模板
*/
downloadErrData() {
let fileNameOfProject = this.resultData.errTemplate;
this.$axios
.BolbGets(
"/api/settleaccount/getblobfile/download/" + fileNameOfProject
)
.then((response) => {
if (fileNameOfProject.indexOf("_") != -1) {
let downName =
fileNameOfProject.slice(0, fileNameOfProject.lastIndexOf("_")) +
fileNameOfProject.slice(fileNameOfProject.lastIndexOf("."));
downloadFile(response, downName);
this.$notify({
title: "成功",
message: "错误数据-导出成功!",
type: "success",
duration: 2000,
});
} else {
downloadFile(response, fileNameOfProject);
this.$notify({
title: "成功",
message: "错误数据-导出成功!",
type: "success",
duration: 2000,
});
}
this.listLoading = false;
})
.catch((error) => {
this.listLoading = false;
});
},
//
closeView() {
this.$emit("update:show", false);
this.$emit("close", this.stepsActive == 3 ? "finish" : "");
},
},
};
</script>
<style scoped lang="scss">
@import "@/styles/xr-theme.scss";
.el-steps {
margin-bottom: 15px;
/deep/ .el-step__title {
font-size: 14px;
}
/deep/ .el-step.is-simple .el-step__arrow::before,
/deep/ .el-step.is-simple .el-step__arrow::after {
height: 10px;
width: 2px;
}
/deep/ .el-step.is-simple .el-step__arrow::after {
transform: rotate(45deg) translateY(3px);
}
/deep/ .el-step.is-simple .el-step__arrow::before {
transform: rotate(-45deg) translateY(-2px);
}
}
.step-section {
min-height: 300px;
/deep/ .el-loading-spinner {
top: 45%;
.el-icon-loading {
font-size: 40px;
color: #999;
}
.el-loading-text {
color: #333;
}
}
}
.sections {
font-size: 14px;
color: #333;
&__title {
font-weight: 600;
}
&__tips {
padding-left: 30px;
margin: 8px 0 15px;
color: #999;
font-size: 12px;
line-height: 1.4;
}
.download {
cursor: pointer;
color: #2362fb;
}
}
.sections__tips + .content {
padding-top: 0;
}
.content {
padding: 10px 10px 10px 30px;
.el-select {
width: 400px;
}
.user-cell {
width: 400px;
}
}
#importInputFile {
display: none;
}
.file-select {
.el-input {
width: 400px;
}
button {
margin-left: 20px;
}
}
.is-hidden {
visibility: hidden;
}
.history-btn {
float: left;
margin-left: 15px;
}
//
.result-info {
text-align: center;
padding-top: 50px;
&__icon {
font-size: 40px;
color: $xr-color-primary;
}
&__des {
margin-top: -15px;
color: #333;
font-size: 30px;
}
&__detail {
margin-top: 35px;
font-size: 20px;
color: #666;
&--all {
color: #333;
font-weight: 600;
}
&--suc {
color: $xr-color-primary;
font-weight: 600;
}
&--err {
margin-top: 25px;
color: #f94e4e;
font-weight: 600;
}
}
&__btn--err {
margin-top: 10px;
font-size: 20px;
}
}
</style>

109
code/WebApp/vue/src/components/ImportTxt/index.vue

@ -151,13 +151,13 @@
<span class="result-info__detail--all"
>{{ this.resultData.successMessage }}
</span>
<!-- <el-button
<el-button
v-if="this.resultData && this.resultData.errSize > 0"
class="result-info__btn--err"
type="text"
@click="downloadErrData"
>下载错误数据</el-button
> -->
>
</p>
</el-card>
</div>
@ -345,7 +345,6 @@ export default {
{
fis: "FIS发运数据",
settleAccount: "R3数据",
AssemblyCfgERP:"总成SAP数据",
}[this.crmType] || ""
);
},
@ -354,7 +353,6 @@ export default {
{
fis: "/api/settleaccount/fis/ExcelImport",
settleAccount: "/api/settleaccount/SettleAccount/ExcelImport",
AssemblyCfgERP:"/api/newjit/assembly-cfg-erp/import",
}[this.crmType] || ""
);
},
@ -364,7 +362,6 @@ export default {
{
fis: "FIS发运数据导入模板.xlsx",
settleAccount: "R3数据模板.xlsx",
AssemblyCfgERP:"BOM-批量导入模板.txt",
}[this.crmType] || ""
);
},
@ -427,7 +424,7 @@ export default {
this.factoryList = [];
// this.listQuery.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/newjit/assembly-cfg-erp/import")
.posts("/api/settleaccount/CentralizedControl/openlist")
.then((response) => {
response.forEach((element) => {
let options = {};
@ -440,25 +437,25 @@ export default {
this.listLoading = false;
});
},
// getAllCarModel() {
// //
// this.carModelList = [];
// this.listQueryCustom.SkipCount = (this.page - 1) * 500;
// console.log(JSON.stringify(this.listQueryCustom));
// this.$axios
// .posts("/api/settleaccount/CodeSetting/list", this.listQueryCustom)
// .then((response) => {
// response.items.forEach((element) => {
// let options = {};
// options.value = element.value;
// options.label = element.description;
// this.carModelList.push(options);
// });
// })
// .catch(() => {
// this.listLoading = false;
// });
// },
getAllCarModel() {
//
this.carModelList = [];
this.listQueryCustom.SkipCount = (this.page - 1) * 500;
console.log(JSON.stringify(this.listQueryCustom));
this.$axios
.posts("/api/settleaccount/CodeSetting/list", this.listQueryCustom)
.then((response) => {
response.items.forEach((element) => {
let options = {};
options.value = element.value;
options.label = element.description;
this.carModelList.push(options);
});
})
.catch(() => {
this.listLoading = false;
});
},
handleImportExcelClick() {
//
this.fileuploadList = [];
@ -503,6 +500,10 @@ export default {
},
//
sureClick() {
if (this.versionValue == "") {
this.$message.error("必须选择版本!");
return false;
}
if (this.startTimeVale && this.endTimeVale) {
if (
formatTimeToTimestamp(this.startTimeVale) >=
@ -563,48 +564,24 @@ export default {
.posts(webapi, fd)
.then(async (res) => {
console.log("导入条件:" + JSON.stringify(res));
if(this.crmType !== "AssemblyCfgERP"){
if (res === "Success") {
if (this.isLt2M === "1" && this.isFileType === "1") {
this.$notify({
title: "成功",
message: "数据导入成功!",
type: "success",
duration: 2000,
});
this.stepList[1].status = "finish";
this.resultData.successMessage = "数据导入成功!";
this.stepsActive = 4;
}
} else {
this.stepList[0].status = "wait";
this.resultData.errTemplate = res; //
this.resultData.errSize = 1; //0
this.resultData.successMessage = "数据导入失败!";
this.stepsActive = 3;
}
}
else{
console.log(res.status)
if (res.status === true) {
if (this.isLt2M === "1" && this.isFileType === "1") {
this.$notify({
title: "成功",
message: "数据导入成功!",
type: "success",
duration: 2000,
});
this.stepList[1].status = "finish";
this.resultData.successMessage = "数据导入成功!";
this.stepsActive = 4;
}
} else {
this.stepList[0].status = "wait";
this.resultData.errTemplate = res; //
this.resultData.errSize = 1; //0
this.resultData.successMessage = res.message;
this.stepsActive = 3;
if (res === "Success") {
if (this.isLt2M === "1" && this.isFileType === "1") {
this.$notify({
title: "成功",
message: "数据导入成功!",
type: "success",
duration: 2000,
});
this.stepList[1].status = "finish";
this.resultData.successMessage = "数据导入成功!";
this.stepsActive = 4;
}
} else {
this.stepList[0].status = "wait";
this.resultData.errTemplate = res; //
this.resultData.errSize = 1; //0
this.resultData.successMessage = "数据导入失败!";
this.stepsActive = 3;
}
this.$emit("status", "finish");
this.loading = false;

BIN
code/WebApp/vue/src/components/ImportTxt/index525.rar

Binary file not shown.

2
code/WebApp/vue/src/components/Pagination/index.vue

@ -35,7 +35,7 @@ export default {
pageSizes: {
type: Array,
default() {
return [15, 50, 100, 500]
return [15, 200, 300, 500]
}
},
layout: {

93
code/WebApp/vue/src/components/PasteExcel/index.vue

@ -1,93 +0,0 @@
<template>
<el-dialog v-loading="loading" @close="hiddenView">
<flexbox class="content">
<div class="book">
<el-input type="text" v-model="paster" @paste.native="pasteMe" />
<el-table :data="tableData">
<el-table-column
prop="name"
label="说明:只支持从Excel上粘贴复制,不支持手输!"
width="120"
>
</el-table-column>
</el-table>
</div>
</flexbox>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submiteBillNo()">确定录入</el-button>
</div>
</el-dialog>
</template>
<script>
export default {
props: {
typeName: {
type: String,
default: "",
},
},
data() {
return {
loading: false,
paster: "",
pasterValue: "",
tableData: [
{
name: "单据号",
},
],
};
},
methods: {
submiteBillNo() {
var getbillNo = this.pasterValue.substring(
0,
this.pasterValue.length - 1
);
this.$emit("savebillNo", { biilNo: getbillNo, billName: this.typeName });
this.hiddenView();
},
hiddenView() {
this.$emit("close");
},
pasteMe(e) {
let source = e.clipboardData.getData("Text");
//
let rows = source.split("\r\n"); //
this.pasterValue = "";
for (let i = 0; i < rows.length; i++) {
if (rows[i] != "") {
//
let columns = rows[i].split("\t"); //
// console.log(columns);
let dataone = {}; //
for (let j = 0; j < columns.length; j++) {
// tableDatajkey
let keys = Object.keys(this.tableData[j]); // key
dataone[keys[j]] = columns[j];
this.pasterValue += columns[j] + ",";
}
this.tableData.push(dataone);
console.log(this.tableData);
}
}
},
},
};
</script>
<style lang="scss" scoped>
.book {
width: 50%;
height: 400px;
border: 1px solid red;
margin: 0 auto;
margin-top: 50px;
overflow-y: scroll;
}
.el-input__inner {
height: 100px !important;
}
</style>

594
code/WebApp/vue/src/components/UploadFiles/index.vue

@ -0,0 +1,594 @@
<template>
<el-dialog
:visible="show"
:title="'导入' + crmTypeName"
:append-to-body="true"
:close-on-click-modal="false"
width="600px"
@close="closeView"
>
<div class="dialog-body">
<div v-if="stepsActive == 1" class="step-section">
<div class="sections">
<div class="sections__title" v-loading="loading">
导入说明
<div class="sections__tips">
1提供的导入模板需要文本格式.txt文件格式
</div>
<div class="sections__tips">
2请勿删除模板中设置的字段
</div>
<div class="sections__tips">3导入文件大小请勿超过100MB</div>
</div>
</div>
<div class="sections">
<div class="sections__title">
导入条件设置工厂无则不用设置
</div>
<div class="sections__tips">
<span class="demonstration">选择年份</span>
<el-date-picker
v-model="yeareVale"
style="width: 188px"
type="year"
format="yyyy 年"
value-format="yyyy"
placeholder="选择年"
>
</el-date-picker>
<span class="demonstration">选择月份</span>
<el-date-picker
v-model="monthVale"
style="width: 188px"
type="month"
format=" MM 月"
value-format="MM"
placeholder="选择月"
>
</el-date-picker>
</div>
<div class="sections__tips">
<span class="demonstration">选择工厂</span>
<el-select
v-model="selectValue"
clearable
style="width: 188px"
placeholder="请选择"
>
<el-option
v-for="item in factoryList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</div>
</div>
<div class="sections">
<div class="sections__title">请选择需要导入的文件</div>
<div class="content">
<flexbox class="file-select">
<el-upload
ref="upload"
class="avatar-uploader"
drag
action="#"
:http-request="httpRequestfiles"
:headers="httpHeader"
:file-list="fileuploadList"
:before-upload="beforeAvatarUpload"
:before-remove="beforeRemove"
:on-remove="handleRemove"
multiple
:limit="1"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
</el-upload>
</flexbox>
</div>
</div>
</div>
<div
v-loading="loading"
v-else-if="stepsActive == 2"
element-loading-text="数据导入中,请耐心等待..."
element-loading-spinner="el-icon-loading"
class="step-section"
/>
<div
v-loading="loading"
v-else-if="stepsActive == 3"
class="step-section"
>
<div class="result-info">
<el-card style="height: 300px; margin-top: -20px" shadow="always">
<i class="wk wk-success result-info__icon" />
<p class="result-info__detail">
导入成功数据
<span class="result-info__detail--all"
>{{ this.resultData.totalSize }} </span
>条有效数据
</p>
</el-card>
</div>
</div>
</div>
<span slot="footer" class="dialog-footer">
<el-popover
v-model="historyPopoverShow"
placement="top"
width="800"
popper-class="no-padding-popover"
trigger="click"
>
</el-popover>
<!-- <el-button @click="closeView">取消</el-button> -->
<el-button :class="{ 'is-hidden': !showCancel }" @click="closeView"
>取消</el-button
>
<el-button v-if="sureTitle" type="primary" @click="sureClick">{{
sureTitle
}}</el-button>
</span>
</el-dialog>
</template>
<script>
import { downloadFile } from "@/utils/crmindex.js";
import { getToken } from "@/utils/auth"; // get token from cookie
export default {
name: "CRMImport", //
props: {
show: {
type: Boolean,
default: false,
},
// CRM
crmType: {
type: String,
default: "",
},
},
data() {
return {
loading: false,
fieldList: [],
factoryList: [], //
selectValue: [], //
config: 1, // 1 2
//file: { name: "" },
page: 1,
listQuery: {
Filters: [
{
logic: 0,
column: "description",
action: 0,
value: "工厂",
}, //
],
SkipCount: 0,
MaxResultCount: 1000,
},
stepsActive: 1,
stepList: [
{
icon: "wk wk-upload",
title: "上传文件",
status: "wait",
},
{
icon: "wk wk-data-import",
title: "导入数据",
status: "wait",
},
{
icon: "wk wk-success",
title: "导入完成",
status: "wait",
},
],
//resultData: null,
resultData: {
totalSize: 0,
errSize: 0,
errTemplate: "",
errMessage: "",
},
processData: {
count: 0,
status: "",
},
messageId: null,
intervalTimer: null,
fileuploadList: [],
isLt2M: "",
isFileType: "",
historyPopoverShow: false,
yeareVale: "",
monthVale: "",
};
},
computed: {
sureTitle() {
return {
1: "立即导入",
2: "最小化",
3: "确定",
}[this.stepsActive];
},
showCancel() {
return this.stepsActive != 2;
},
crmTypeName() {
return (
{
fis: "FIS发运数据",
materialRelation: "零件匹配关系",
material: "物料主数据",
inventorydetail: "库存明细",
codeSetting: "通用代码设置",
estimatedSum: "应付暂估汇总",
estimatedInventoryDetail: "应付暂估收货明细",
}[this.crmType] || ""
);
},
getWebApi() {
return (
{
fis: "/api/settleaccount/FIS/ExcelImport",
materialRelation: "/api/settleaccount/materialRelation/ExcelImport",
material: "/api/settleaccount/material/ExcelImport",
inventorydetail: "/api/settleaccount/InventoryDetail​/ExcelImport",
codeSetting: "/api/settleaccount/CodeSetting/ExcelImport",
estimatedSum: "/api/settleaccount/EstimatedSum/ExcelImport",
estimatedInventoryDetail:
"/api/settleaccount/EstimatedInventoryDetail/ExcelImport",
}[this.crmType] || ""
);
},
httpHeader() {
//token
return {
Authorization: "Bearer " + getToken(),
};
},
},
watch: {
show: function (val) {
this.getAllFactory();
if (val) {
this.stepsActive = 1;
} else {
if (this.stepsActive == 3) {
//
this.stepsActive = 1;
this.stepList = [
{
icon: "wk wk-upload",
title: "上传文件",
status: "wait",
},
{
icon: "wk wk-data-import",
title: "导入数据",
status: "wait",
},
{
icon: "wk wk-success",
title: "导入完成",
status: "wait",
},
];
this.resultData = null;
}
}
},
stepsActive() {
this.$emit(
"status",
{
1: "wait",
2: "process",
3: "finish",
}[this.stepsActive]
);
},
},
mounted() {},
methods: {
getAllFactory() {
//
this.factoryList = [];
this.listQuery.SkipCount = (this.page - 1) * 500;
this.$axios
.posts("/api/settleaccount/CodeSetting/list", this.listQuery)
.then((response) => {
response.items.forEach((element) => {
let options = {};
options.value = element.project;
options.label = element.value;
this.factoryList.push(options);
});
})
.catch(() => {
this.listLoading = false;
});
},
handleImportExcelClick() {
//
this.fileuploadList = [];
//this.$refs.upload.clearFiles();
},
httpRequestfiles(data) {
let _this = this;
let rd = new FileReader(); //
let file = data.file;
this.fileuploadList.push(file);
rd.readAsDataURL(file); // base64
},
beforeAvatarUpload(file) {
var FileExt = file.name.replace(/.+\./, "");
if (["txt"].indexOf(FileExt.toLowerCase()) === -1) {
this.$message({
type: "warning",
message: "只支持文本txt类型文件!",
});
this.isFileType = "0";
return false;
} else {
this.isFileType = "1";
}
this.isLt2M = file.size / 1024 / 1024 < 100 ? "1" : "0";
if (this.isLt2M === "0") {
this.$message.error("上传文件大小不能超过 100MB!");
}
return this.isLt2M === "1" ? true : false;
},
beforeRemove(file, fileList) {
if (this.isLt2M === "1" && this.isFileType === "1") {
return this.$confirm(`确定移除 ${file.name}`);
}
},
handleRemove(file, fileList) {
//
const index = this.fileuploadList.indexOf(file.originFileObj);
const newFileList = this.fileuploadList.slice();
newFileList.splice(index, 1);
this.fileuploadList = newFileList;
},
//
sureClick() {
if (
this.fileuploadList === [] ||
JSON.stringify(this.fileuploadList) === "[]"
) {
this.$message.error("请选择导入文件");
return false;
}
if (this.stepsActive == 1) {
if (this.stepList[0].status == "wait") {
this.stepsActive = 2;
this.loading = true;
setTimeout(() => {
this.saveTemplateData();
}, 1000);
if (this.stepList[1].status == "finish") {
}
} else {
if (this.fileuploadList === "[]") {
this.$message.error("请选择导入文件");
}
}
} else {
this.closeView();
}
},
saveTemplateData() {
//
//--
if (JSON.stringify(this.fileuploadList) != "[]") {
let fd = new FormData();
const { fileuploadList } = this;
fileuploadList.forEach((file) => {
fd.append("files", file); //
});
fd.append("yeareVale", this.yeareVale);
fd.append("monthVale", this.monthVale);
const webapi = this.getWebApi;
this.$axios
.posts(webapi, fd)
.then((res) => {
//
this.loading = false;
this.resultData = res;
this.stepList[1].status = "finish";
this.resultData.totalSize = res.length; //
if (
this.isLt2M === "1" &&
this.isFileType === "1" &&
res.totalSize > 0
) {
this.$notify({
title: "成功",
message: "数据导入成功!",
type: "success",
duration: 2000,
});
}
this.stepsActive = 3;
this.$emit("status", "finish");
})
.catch(() => {
this.loading = false;
});
} else {
this.loading = false;
this.$message({
message: "未上传任何附件,请查检!",
type: "warning",
});
}
},
//
closeView() {
this.$emit("update:show", false);
this.$emit("close", this.stepsActive == 3 ? "finish" : "");
},
},
};
</script>
<style scoped lang="scss">
@import "@/styles/xr-theme.scss";
.el-steps {
margin-bottom: 15px;
/deep/ .el-step__title {
font-size: 14px;
}
/deep/ .el-step.is-simple .el-step__arrow::before,
/deep/ .el-step.is-simple .el-step__arrow::after {
height: 10px;
width: 2px;
}
/deep/ .el-step.is-simple .el-step__arrow::after {
transform: rotate(45deg) translateY(3px);
}
/deep/ .el-step.is-simple .el-step__arrow::before {
transform: rotate(-45deg) translateY(-2px);
}
}
.step-section {
min-height: 300px;
/deep/ .el-loading-spinner {
top: 45%;
.el-icon-loading {
font-size: 40px;
color: #999;
}
.el-loading-text {
color: #333;
}
}
}
.sections {
font-size: 14px;
color: #333;
&__title {
font-weight: 600;
}
&__tips {
padding-left: 30px;
margin: 8px 0 15px;
color: #999;
font-size: 12px;
line-height: 1.4;
}
.download {
cursor: pointer;
color: #2362fb;
}
}
.sections__tips + .content {
padding-top: 0;
}
.content {
padding: 10px 10px 10px 30px;
.el-select {
width: 400px;
}
.user-cell {
width: 400px;
}
}
#importInputFile {
display: none;
}
.file-select {
.el-input {
width: 400px;
}
button {
margin-left: 20px;
}
}
.is-hidden {
visibility: hidden;
}
.history-btn {
float: left;
margin-left: 15px;
}
//
.result-info {
text-align: center;
padding-top: 50px;
&__icon {
font-size: 40px;
color: $xr-color-primary;
}
&__des {
margin-top: -15px;
color: #333;
font-size: 30px;
}
&__detail {
margin-top: 35px;
font-size: 20px;
color: #666;
&--all {
color: #333;
font-weight: 600;
}
&--suc {
color: $xr-color-primary;
font-weight: 600;
}
&--err {
margin-top: 25px;
color: #f94e4e;
font-weight: 600;
}
}
&__btn--err {
margin-top: 10px;
font-size: 20px;
}
}
</style>

136
code/WebApp/vue/src/directive/scrollx/index.js

@ -1,136 +0,0 @@
// 盒子滚动条拖拽
import { on, off } from '@/utils/dom'
import Vue from 'vue'
import { debounce } from 'throttle-debounce'
let targetDrag = { // 托拽
isDown: false,
coord: {
x: 0,
y: 0
}
}
let dom = null
let ignoreClass = [] // 忽略的类名
const scrollMousedown = event => {
dom.style.cursor = 'pointer'
targetDrag.isDown = true
targetDrag.coord.x = event.pageX
targetDrag.coord.y = event.pageY
}
const scrollMouseup = event => {
dom.style.cursor = 'default'
targetDrag.isDown = false
targetDrag.coord.x = 0
targetDrag.coord.y = 0
}
const scrollMousemove = event => {
const movX = targetDrag.coord.x - event.pageX
targetDrag.coord.x = event.pageX
if (checkDomIsIgnore(event)) {
dom.style.cursor = 'default'
targetDrag.isDown = false
} else if (targetDrag.isDown) {
dom.scrollLeft = dom.scrollLeft + movX
}
}
const scrollMouseout = event => {
dom.style.cursor = 'default'
targetDrag.isDown = false
}
const scrollMousewheel = event => {
if (checkIsIgnore(event)) {
dom.style.cursor = 'default'
targetDrag.isDown = false
} else {
dom.scrollLeft += event.deltaY
}
}
/**
* 检查dom是否忽略
* @param {*} e
*/
const checkDomIsIgnore = debounce(300, (e) => {
let ignore = false
ignoreClass.forEach(element => {
var items = document.getElementsByClassName(element)
if (items && !ignore) {
for (let index = 0; index < items.length; index++) {
const element = items[index]
if (element.contains(e.target)) {
ignore = true
break
}
}
}
})
return ignore
})
/**
* 忽略滚轮
* @param {*} e
*/
const checkIsIgnore = (e) => {
let ignore = false
ignoreClass.forEach(element => {
var items = document.getElementsByClassName(element)
if (items && !ignore) {
for (let index = 0; index < items.length; index++) {
const element = items[index]
const rect = element.getBoundingClientRect()
if ((e.clientY > rect.top && (e.clientY < (rect.top + rect.height))) && (e.clientX > rect.left && (e.clientX < (rect.left + rect.width)))) {
ignore = true
break
}
}
}
})
return ignore
}
export default Vue.directive('scrollx', {
bind: function(el, binding, vnode) {
const valueData = binding.value
ignoreClass = valueData.ignoreClass
},
inserted: function(el) {
dom = el
// 鼠标按下
on(el, 'mousedown', scrollMousedown)
on(el, 'mouseout', scrollMouseout)
on(el, 'wheel', scrollMousewheel)
// 鼠标释放
on(el, 'mouseup', scrollMouseup)
// 鼠标托拽
on(el, 'mousemove', scrollMousemove)
},
unbind: function(el) {
off(el, 'mousedown', scrollMousedown)
off(el, 'mouseup', scrollMouseup)
off(el, 'mouseout', scrollMouseout)
off(el, 'wheel', scrollMousewheel)
off(el, 'mousemove', scrollMousemove)
// 清空
targetDrag = { // 托拽
isDown: false,
coord: {
x: 0,
y: 0
}
}
}
})

1
code/WebApp/vue/src/icons/svg/BOM.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622532176185" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4873" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M512 70.656c59.392 0 117.76 11.264 172.032 34.816 52.224 22.528 99.328 54.272 140.288 94.208 40.96 40.96 72.704 88.064 94.208 140.288 22.528 54.272 34.816 111.616 34.816 172.032 0 59.392-11.264 117.76-34.816 172.032-22.528 52.224-54.272 99.328-94.208 140.288-40.96 40.96-88.064 72.704-140.288 94.208-54.272 23.552-112.64 34.816-172.032 34.816-59.392 0-117.76-11.264-172.032-34.816-52.224-22.528-99.328-54.272-140.288-94.208-40.96-40.96-72.704-88.064-94.208-140.288-22.528-54.272-34.816-112.64-34.816-172.032 0-59.392 11.264-117.76 34.816-172.032 22.528-52.224 54.272-99.328 94.208-140.288 40.96-40.96 88.064-72.704 140.288-94.208 55.296-22.528 112.64-34.816 172.032-34.816M512 20.48C240.64 20.48 20.48 240.64 20.48 512s220.16 491.52 491.52 491.52 491.52-220.16 491.52-491.52S783.36 20.48 512 20.48z m0 0" fill="#8a8a8a" p-id="4874"></path><path d="M88.064 672.768V377.856h114.688c19.456 0 35.84 2.048 48.128 6.144 13.312 4.096 23.552 12.288 33.792 25.6 9.216 13.312 14.336 27.648 14.336 45.056 0 16.384-5.12 30.72-14.336 43.008-9.216 12.288-22.528 19.456-38.912 23.552 20.48 4.096 36.864 12.288 47.104 25.6 10.24 13.312 16.384 28.672 16.384 47.104 0 22.528-7.168 41.984-22.528 57.344-15.36 15.36-37.888 23.552-68.608 23.552H88.064zM138.24 501.76h64.512c13.312 0 23.552-4.096 31.744-12.288 8.192-8.192 11.264-18.432 11.264-30.72 0-13.312-4.096-23.552-13.312-29.696-9.216-6.144-19.456-9.216-30.72-9.216h-63.488v81.92z m0 126.976h68.608c14.336 0 25.6-4.096 34.816-11.264 8.192-7.168 12.288-18.432 12.288-30.72s-4.096-22.528-13.312-30.72c-8.192-8.192-19.456-12.288-33.792-12.288h-68.608v84.992zM465.92 677.888c-38.912 0-69.632-14.336-91.136-44.032s-32.768-65.536-32.768-108.544c0-43.008 11.264-78.848 34.816-107.52s54.272-43.008 92.16-43.008 68.608 14.336 91.136 43.008c22.528 28.672 33.792 65.536 33.792 108.544 0 46.08-11.264 81.92-34.816 110.592-24.576 26.624-55.296 40.96-93.184 40.96z m0-43.008c19.456 0 35.84-8.192 49.152-23.552 13.312-15.36 19.456-45.056 19.456-86.016 0-33.792-5.12-60.416-16.384-79.872-11.264-19.456-27.648-28.672-51.2-28.672-46.08 0-68.608 36.864-68.608 110.592 0 35.84 6.144 62.464 17.408 80.896 12.288 17.408 28.672 26.624 50.176 26.624zM931.84 672.768h-54.272V414.72l-81.92 258.048H768l-81.92-258.048v258.048h-43.008V377.856h82.944l61.44 190.464 60.416-190.464H931.84v294.912z" fill="#8a8a8a" p-id="4875"></path></svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

1
code/WebApp/vue/src/icons/svg/业务.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622537264732" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="14720" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M74.752 898.56h875.008v32.768H74.752v-32.768zM136.704 791.04h99.328c34.816 0 62.976-28.16 62.976-62.464v-198.656c0-34.816-28.16-62.464-62.976-62.464H136.704c-34.816 0-62.464 28.16-62.464 62.464v198.656c0 34.304 28.16 62.464 62.464 62.464z m-30.208-261.12c0-16.896 13.312-30.208 30.208-30.208h99.328c16.896 0 30.208 13.312 30.208 30.208v198.656c0 16.896-13.312 30.208-30.208 30.208H136.704c-16.896 0-30.208-13.312-30.208-30.208v-198.656zM462.336 791.04h99.328c34.816 0 62.464-28.16 62.464-62.464V156.16c0-34.816-28.16-62.464-62.464-62.464H462.336c-34.816 0-62.464 28.16-62.464 62.464v572.416c-0.512 34.304 27.648 62.464 62.464 62.464zM432.128 155.648c0-16.896 13.312-30.208 30.208-30.208h99.328c16.896 0 30.208 13.312 30.208 30.208v572.416c0 16.896-13.312 30.208-30.208 30.208H462.336c-16.896 0-30.208-13.312-30.208-30.208V155.648zM787.456 791.04h99.328c34.816 0 62.464-28.16 62.464-62.464V325.632c0-34.816-28.16-62.464-62.464-62.464h-99.328c-34.816 0-62.464 28.16-62.464 62.464v402.432c0 34.816 28.16 62.976 62.464 62.976z m-30.208-465.408c0-16.896 13.312-30.208 30.208-30.208h99.328c16.896 0 30.208 13.312 30.208 30.208v402.432c0 16.896-13.312 30.208-30.208 30.208h-99.328c-16.896 0-30.208-13.312-30.208-30.208V325.632z" fill="" p-id="14721"></path></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

1
code/WebApp/vue/src/icons/svg/供货.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622602045529" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5042" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M827.164911 686.308303h-574.257967a25.678202 25.678202 0 1 1 0-51.356404h574.257967a30.440341 30.440341 0 0 0 30.767155-25.818265l60.13368-293.478502c-1.447317-9.337528-13.44604-19.18862-30.206903-19.18862h-686.308303a25.678202 25.678202 0 0 1 0-51.356404h686.308303c45.053572 0 81.703369 32.681348 81.703369 72.459217a25.398076 25.398076 0 0 1-0.513564 5.13564l-60.693931 296.279761A81.703369 81.703369 0 0 1 827.164911 686.308303z m116.719099-368.832354z" fill="#5BBD0E" p-id="5043"></path><path d="M224.847672 519.446679a25.678202 25.678202 0 0 1-25.3047-21.56969l-51.356404-317.475949a25.724889 25.724889 0 0 1-0.326813-4.108513c0-13.25929-14.006292-24.464323-30.346966-24.464323h-51.356404a25.678202 25.678202 0 1 1 0-51.356404h51.356404c44.213195 0 80.349428 32.681348 81.656682 73.533033l51.076277 315.655131a25.678202 25.678202 0 0 1-21.476314 29.459901 25.958328 25.958328 0 0 1-3.921762 0.326814z" fill="#5BBD0E" p-id="5044"></path><path d="M906.533899 817.033694h-592.933024c-40.571559 0-73.999909-29.366525-81.329868-71.432089v-0.933753l-65.362695-476.213924A25.678202 25.678202 0 1 1 217.657776 261.450782l65.362695 475.793735c2.427757 13.212602 11.85866 28.47946 30.67378 28.479461h592.933023a25.678202 25.678202 0 0 1 0 51.356403z" fill="#5BBD0E" p-id="5045"></path><path d="M357.954133 924.415265m-56.025168 0a56.025168 56.025168 0 1 0 112.050336 0 56.025168 56.025168 0 1 0-112.050336 0Z" fill="#5BBD0E" p-id="5046"></path><path d="M824.830529 924.415265m-56.025167 0a56.025168 56.025168 0 1 0 112.050335 0 56.025168 56.025168 0 1 0-112.050335 0Z" fill="#5BBD0E" p-id="5047"></path><path d="M876.186933 653.626955l-625.614371 9.337528-46.68764-368.832353h718.989651l-46.68764 359.494825z" fill="#5BBD0D" p-id="5048"></path></svg>

Before

Width:  |  Height:  |  Size: 2.1 KiB

1
code/WebApp/vue/src/icons/svg/单据导入.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622535513697" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10088" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M457.6 996.4H134.2C60.2 996.4 0 936.3 0 862.2V160.4c0-74 60.2-134.2 134.2-134.2h623.7c74 0 134.2 60.2 134.2 134.2v232.9c0 11.3-9.3 20.6-20.6 20.6s-20.6-9.3-20.6-20.6V160.4c0-51.4-41.6-93.1-93.1-93.1H134.2c-51.4 0-93.1 41.6-93.1 93.1v701.8c0 51.4 41.6 93.1 93.1 93.1h323.4c11.3 0 20.6 9.3 20.6 20.6s-9.3 20.5-20.6 20.5z m0 0" fill="#3f81c1" p-id="10089"></path><path d="M1023.7 595.4c0-0.5 0-0.5 0 0 1.5-7.7-0.5-15.9-6.2-21.6L911.1 470.4l-1.5-1.5c-0.5-0.5-1-1-2.1-1.5-0.5-0.5-1.5-0.5-2.1-1-0.5-0.5-1-0.5-2.1-1-0.5-0.5-1.5-0.5-2.1-0.5-0.5 0-1.5-0.5-2.1-0.5H890c-1 0-1.5 0.5-2.1 0.5s-1.5 0.5-2.1 0.5c-0.5 0.5-1.5 0.5-2.1 1-0.5 0.5-1 0.5-1.5 1s-1.5 1-2.1 1.5c-0.5 0.5-1 0.5-1.5 1L533.2 815.4c-3.1 3.1-5.1 6.7-5.7 10.8 0 0.5-0.5 1-0.5 1.5-3.6 14.9-16.5 75.1 1.5 110l1.5 3.1 2.6 2.6c12.9 12.9 33.4 17 56 17 19.5 0 41.1-3.1 61.7-5.7 4.6-0.5 9.3-1 13.4-2.1 0 0 6.2-4.1 8.7-6.7l345-339.9c2.6-2.6 4.1-5.1 5.1-8.2 0.7-0.4 1.2-1.4 1.2-2.4zM645.3 909.5" fill="#3f81c1" p-id="10090"></path><path d="M743.5 284.3H281.8c-11.3 0-20.6-9.3-20.6-20.6s9.3-20.6 20.6-20.6h461.7c11.3 0 20.6 9.3 20.6 20.6-0.1 11.4-9.3 20.6-20.6 20.6z m0 0M605.7 588.7H281.8c-11.3 0-20.6-9.3-20.6-20.6s9.3-20.6 20.6-20.6h323.9c11.3 0 20.6 9.3 20.6 20.6-0.1 11.4-9.3 20.6-20.6 20.6z m0 0M522.9 740.4H281.8c-11.3 0-20.6-9.3-20.6-20.6s9.3-20.6 20.6-20.6h241.1c11.3 0 20.6 9.3 20.6 20.6s-8.8 20.6-20.6 20.6z m0 0M743.5 436.5H281.8c-11.3 0-20.6-9.3-20.6-20.6s9.3-20.6 20.6-20.6h461.7c11.3 0 20.6 9.3 20.6 20.6-0.1 11.4-9.3 20.6-20.6 20.6z m0 0M180.5 286.4h-29.3c-11.3 0-20.6-9.3-20.6-20.6s9.3-20.6 20.6-20.6h29.3c11.3 0 20.6 9.3 20.6 20.6-0.1 11.3-9.3 20.6-20.6 20.6z m0 0M180.5 436.5h-29.3c-11.3 0-20.6-9.3-20.6-20.6s9.3-20.6 20.6-20.6h29.3c11.3 0 20.6 9.3 20.6 20.6-0.1 11.4-9.3 20.6-20.6 20.6z m0 0M180.5 599.5h-29.3c-11.3 0-20.6-9.3-20.6-20.6s9.3-20.6 20.6-20.6h29.3c11.3 0 20.6 9.3 20.6 20.6-0.1 11.3-9.3 20.6-20.6 20.6z m0 0M180.5 740.4h-29.3c-11.3 0-20.6-9.3-20.6-20.6s9.3-20.6 20.6-20.6h29.3c11.3 0 20.6 9.3 20.6 20.6-0.1 11.3-9.3 20.6-20.6 20.6z m0 0" fill="#3f81c1" p-id="10091"></path></svg>

Before

Width:  |  Height:  |  Size: 2.4 KiB

1
code/WebApp/vue/src/icons/svg/发货.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622601685053" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2526" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M806.787879 667.151515a93.090909 93.090909 0 1 1 0 186.181818 93.090909 93.090909 0 0 1 0-186.181818z m-480.969697 0a93.090909 93.090909 0 1 1 0 186.181818 93.090909 93.090909 0 0 1 0-186.181818z m480.969697 46.545455a46.545455 46.545455 0 1 0 0 93.090909 46.545455 46.545455 0 0 0 0-93.090909z m-480.969697 0a46.545455 46.545455 0 1 0 0 93.090909 46.545455 46.545455 0 0 0 0-93.090909z m302.545454-527.515152a38.787879 38.787879 0 0 1 38.710303 36.243394L667.151515 224.969697v54.287515l151.117576 0.015515a54.30303 54.30303 0 0 1 33.295515 11.403637l2.777212 2.327272 120.397576 107.008a54.30303 54.30303 0 0 1 18.121697 37.282909l0.108606 3.304728V729.212121h-69.818182a23.272727 23.272727 0 0 1-2.234182-46.436848L923.151515 682.666667l23.272727-0.015515v-242.036364a7.757576 7.757576 0 0 0-1.706666-4.856243l-0.899879-0.961939-120.397576-107.023515a7.757576 7.757576 0 0 0-3.754666-1.830788L818.269091 325.818182 667.151515 325.802667V682.666667h23.272727a23.272727 23.272727 0 0 1 2.234182 46.436848L690.424242 729.212121h-248.242424a23.272727 23.272727 0 0 1-2.234182-46.436848L442.181818 682.666667H620.606061V232.727273H170.666667v116.363636a23.272727 23.272727 0 0 1-21.038546 23.164121L147.393939 372.363636a23.272727 23.272727 0 0 1-23.164121-21.038545L124.121212 349.090909v-124.121212a38.787879 38.787879 0 0 1 36.243394-38.710303L162.909091 186.181818h465.454545z m-480.969697 434.424243a23.272727 23.272727 0 0 1 23.164122 21.038545L170.666667 643.878788V682.666667h38.787878a23.272727 23.272727 0 0 1 23.164122 21.038545L232.727273 705.939394a23.272727 23.272727 0 0 1-21.038546 23.164121L209.454545 729.212121h-46.545454a38.787879 38.787879 0 0 1-38.710303-36.243394L124.121212 690.424242v-46.545454A23.272727 23.272727 0 0 1 147.393939 620.606061z m124.121213-77.575758a23.272727 23.272727 0 0 1 2.234181 46.436849L271.515152 589.575758h-232.727273a23.272727 23.272727 0 0 1-2.234182-46.436849L38.787879 543.030303h232.727273z m536.60703-170.666667a38.787879 38.787879 0 0 1 27.430788 11.357091l52.968727 52.968728A38.787879 38.787879 0 0 1 899.878788 464.120242V535.272727a38.787879 38.787879 0 0 1-38.787879 38.787879h-124.121212a38.787879 38.787879 0 0 1-38.787879-38.787879v-124.121212a38.787879 38.787879 0 0 1 38.787879-38.787879z m-3.211637 46.545455H744.727273v108.606061h108.60606v-60.183273L804.910545 418.909091zM318.060606 465.454545a23.272727 23.272727 0 0 1 2.234182 46.436849L318.060606 512h-232.727273a23.272727 23.272727 0 0 1-2.234181-46.436848L85.333333 465.454545h232.727273z m46.545455-77.575757a23.272727 23.272727 0 0 1 2.234181 46.436848L364.606061 434.424242h-248.242425a23.272727 23.272727 0 0 1-2.234181-46.436848L116.363636 387.878788h248.242425z" fill="#333333" p-id="2527"></path></svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

1
code/WebApp/vue/src/icons/svg/发运.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622534301304" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9271" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M510 498.9c0 11.3-9.1 20.5-20.1 20.5h-362c-11.1 0-20.1-9.3-20.1-20.5 0-11.3 9.1-20.5 20.1-20.5h362c11-0.1 20.1 9.2 20.1 20.5zM375.2 368.6c0 11.3-9.1 20.5-20.1 20.5H127.9c-11.1 0-20.1-9.3-20.1-20.5 0-11.3 9.1-20.5 20.1-20.5h227.3c11 0 20 9.2 20 20.5zM267.4 238.3c0 11.3-9.1 20.5-20.1 20.5H127.9c-11.1 0-20.1-9.3-20.1-20.5 0-11.3 9.1-20.5 20.1-20.5h119.5c11 0.1 20 9.2 20 20.5z m676.2 253.3l-274.1 0.4c-3.3 0-6.5-1.3-8.8-3.7-2.3-2.3-3.7-5.5-3.7-8.9V311.3c0-6.9 5.6-12.5 12.4-12.5h172.3c4.5 0 8.6 2.4 10.8 6.3l98.7 173.3c1.5 2.7 1.5 6.1 0 8.8-1.6 2.7-4.5 4.4-7.6 4.4zM1024 474c0.1-12-5.8-26.4-11.3-37.4l-0.6-1.2c-4.6-8.8-8.7-15.1-8.7-15.1L900.5 239.8c-3.7-6.5-10.6-10.5-18-10.5h-226v-40.9c0-44.1-31.5-80.2-70.1-80.2H70.1c-38.6-0.1-70.1 36-70.1 80.2v543.8c0.1 36.7 29.6 66.4 66.1 66.5h81.4c3.1-30.1 17.4-57.9 41.4-79.3 26.3-23.5 61-36.5 97.9-36.5 72.7 0 132.5 50.9 139.2 115.8h172.8c6.7-64.8 66.5-115.8 139.2-115.8 72.6 0 132.5 50.9 139.2 115.8h80.6c36.5-0.1 66-29.8 66.1-66.5V474.3l0.1-0.3zM738 732.2c-50.1 0-90.8 35.2-90.8 78.6v26.8c0 43.3 40.8 78.6 90.8 78.6 50.1 0 90.8-35.2 90.9-78.6v-26.8c0-43.3-40.8-78.6-90.9-78.6z m-451.2 0c-24.8 0-48 8.5-65.3 24-16.5 14.7-25.6 34.1-25.6 54.6v26.8c0 20.4 9.1 39.8 25.6 54.6 17.3 15.5 40.5 24 65.3 24 50.1 0 90.9-35.2 90.9-78.6v-26.8c-0.1-43.4-40.8-78.6-90.9-78.6z" fill="#3E82FE" p-id="9272"></path></svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

1
code/WebApp/vue/src/icons/svg/售后.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622534008325" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6259" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M934.4 256C864 134.4 755.2 51.2 620.8 19.2c-185.6-51.2-384 6.4-512 153.6l-89.6-57.6 6.4 224c0 19.2 25.6 32 38.4 19.2l192-115.2-89.6-44.8c115.2-121.6 288-166.4 448-128 115.2 32 217.6 108.8 275.2 211.2 64 108.8 76.8 230.4 44.8 345.6-32 115.2-108.8 217.6-211.2 275.2-108.8 64-230.4 76.8-345.6 44.8C256 915.2 160 838.4 96 729.6c-6.4-12.8-25.6-19.2-38.4-12.8-12.8 6.4-19.2 25.6-12.8 38.4C115.2 876.8 224 960 358.4 998.4c44.8 19.2 89.6 25.6 134.4 25.6 89.6 0 179.2-25.6 256-70.4C870.4 883.2 953.6 774.4 985.6 640c38.4-128 19.2-262.4-51.2-384z" p-id="6260"></path><path d="M665.6 716.8V582.4H339.2v140.8h64V704H608v19.2h57.6z m-262.4-57.6v-32H608v32H403.2zM377.6 300.8C352 345.6 326.4 384 288 416c6.4 19.2 19.2 38.4 25.6 64l25.6-25.6v115.2h57.6v-6.4h300.8v-38.4H550.4v-25.6H672v-38.4H550.4v-19.2H672v-38.4H550.4V384h140.8v-38.4h-128c-6.4-19.2-19.2-32-25.6-51.2L480 307.2c6.4 12.8 12.8 25.6 12.8 38.4H416c6.4-6.4 12.8-19.2 12.8-25.6l-51.2-19.2z m115.2 224h-96v-25.6h102.4v25.6z m0-64h-96v-19.2h102.4v19.2z m0-76.8v25.6h-96V384h96z" p-id="6261"></path></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

1
code/WebApp/vue/src/icons/svg/售后报表.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622616785265" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6755" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M358.5 503h142v34h-142v-34z m142 171h-279V196h580v260.9h35V162h-649v546h123.1l-88 154h34.2l93.6-154h150.1v-34z m0-85h-142v34h142v-34zM557 386.1l-131-131-143 143 24.1 24.1L426 303.4l131 131 161-161-24.1-24.1L557 386.1z m150.4 134.6c-22.6 0-44.3 9-60.3 25s-25 37.7-25 60.3c0 47.1 38.2 85.3 85.3 85.3 47.1 0 85.3-38.2 85.3-85.3 0.1-47.1-38.1-85.3-85.3-85.3z m0 136.5c-28.3 0-51.2-22.9-51.2-51.2 0-28.3 22.9-51.2 51.2-51.2 28.3 0 51.2 22.9 51.2 51.2 0 28.3-22.9 51.2-51.2 51.2z m68.3 51.2c22.6 0 44.3 9 60.3 25s25 37.7 25 60.3V862h-34.1v-68.3c0-28.3-22.9-51.2-51.2-51.2H639.2c-28.3 0-51.2 22.9-51.2 51.2V862h-34.1v-68.3c0-22.6 9-44.3 25-60.3s37.7-25 60.3-25h136.5z" fill="#1D1717" p-id="6756"></path></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

1
code/WebApp/vue/src/icons/svg/器具.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622532681822" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2820" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M1011.2 185.6l-12.8-51.2L876.8 256c-12.8 12.8-32 19.2-51.2 19.2-19.2 0-38.4-12.8-51.2-25.6-25.6-25.6-25.6-70.4 0-96L889.6 32l-51.2-12.8C768-6.4 704 0 640 32c-57.6 32-102.4 89.6-121.6 153.6-12.8 51.2-12.8 108.8 6.4 160L345.6 524.8c-128-51.2-275.2 12.8-326.4 147.2-19.2 57.6-19.2 108.8-6.4 166.4l12.8 51.2 121.6-115.2c32-38.4 83.2-32 108.8-6.4 12.8 12.8 19.2 32 19.2 57.6s-6.4 38.4-19.2 51.2l-121.6 121.6 51.2 12.8c25.6 6.4 44.8 12.8 70.4 12.8 44.8 0 83.2-12.8 121.6-32 57.6-32 102.4-89.6 121.6-153.6 12.8-51.2 12.8-108.8-6.4-160l179.2-179.2c128 51.2 275.2-12.8 326.4-147.2 25.6-51.2 25.6-108.8 12.8-166.4z m-70.4 147.2c-38.4 102.4-147.2 147.2-249.6 108.8l-38.4-12.8-236.8 236.8 12.8 38.4c19.2 38.4 19.2 76.8 12.8 115.2-12.8 51.2-44.8 89.6-89.6 115.2-32 12.8-57.6 25.6-89.6 25.6l38.4-32c25.6-25.6 38.4-57.6 38.4-102.4s-12.8-76.8-38.4-102.4c-25.6-25.6-57.6-38.4-102.4-38.4-38.4 0-70.4 12.8-102.4 44.8l-32 32c0-19.2 6.4-44.8 12.8-64 38.4-102.4 147.2-147.2 249.6-108.8l38.4 12.8 236.8-236.8-12.8-38.4c-19.2-38.4-19.2-83.2-6.4-121.6 12.8-51.2 44.8-89.6 89.6-115.2 25.6-12.8 57.6-25.6 89.6-25.6l-38.4 38.4c-51.2 51.2-51.2 134.4 0 185.6 25.6 25.6 57.6 44.8 96 44.8s70.4-12.8 102.4-38.4l32-32c0 25.6-6.4 44.8-12.8 70.4z" fill="#444444" p-id="2821"></path></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

1
code/WebApp/vue/src/icons/svg/客户零件.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622534190701" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8449" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M449.170286 67.145143c196.315429 0 192.950857 143.506286 192.950857 194.121143 0 62.976-9.508571 107.008-24.429714 138.020571-16.310857 33.645714-31.012571 58.075429-31.451429 58.660572-11.264 12.580571-7.899429 39.497143 5.778286 49.883428 13.750857 10.24 38.912 0.658286 50.102857-11.922286 3.364571-3.657143 80.457143-91.721143 80.457143-234.642285 0-76.653714-20.553143-129.097143-64.658286-177.956572C608.768 28.964571 536.576 0 449.170286 0 282.404571 0 184.246857 90.185143 184.246857 255.707429c0 71.899429 10.093714 123.099429 30.866286 175.835428 20.992 53.248 53.394286 100.425143 99.181714 144.384v55.149714c-30.500571 5.339429-82.358857 15.36-134.802286 31.085715-48.347429 14.262857-87.405714 30.208-115.858285 47.542857-42.203429 25.526857-63.561143 138.971429-63.561143 171.666286 0 53.686857 60.196571 74.24 183.954286 123.245714 83.456 32.987429 182.125714 13.677714 185.490285 14.555428 2.852571 0.731429 6.070857 0 8.850286 0a32.182857 32.182857 0 0 0 31.158857-21.723428c4.608-15.872 4.608-49.737143-31.158857-52.809143-35.766857-3.072-84.114286 23.405714-163.254857-8.045714-106.642286-42.276571-137.508571-35.401143-137.508572-55.222857 0-18.870857-10.24-104.009143 88.722286-133.339429 75.264-22.454857 187.392-52.882286 188.196572-53.028571 15.652571-2.194286 35.035429-24.356571 35.035428-38.765715V563.931429c0-7.826286-10.752-24.868571-16.822857-30.427429-85.650286-78.409143-113.371429-145.554286-113.371429-277.869714 0-62.902857 17.700571-102.180571 48.128-136.265143 32.914286-36.717714 73.508571-52.297143 141.677715-52.297143z m409.965714 622.372571H661.138286a32.914286 32.914286 0 1 0 0 65.901715h197.997714a33.060571 33.060571 0 0 0 0-65.901715z m32.914286-131.876571H628.224c-72.850286 0-131.949714 59.026286-131.949714 131.876571v197.778286c0 72.777143 59.099429 131.803429 131.949714 131.803429h263.972571c72.850286 0 131.949714-59.026286 131.949715-131.803429V689.517714c0-72.850286-59.099429-131.876571-131.949715-131.876571z m72.265143 329.654857c0 36.425143-35.693714 73.289143-72.192 73.289143H628.150857c-36.425143 0-65.974857-36.864-65.974857-73.289143V689.517714c0-36.498286 29.549714-73.289143 65.974857-73.289143h263.972572c36.498286 0 72.192 36.790857 72.192 73.289143v197.778286z m-171.154286-65.901714H661.138286a32.914286 32.914286 0 1 0 0 65.901714h132.022857a33.060571 33.060571 0 0 0 0-65.901714z" p-id="8450"></path></svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

1
code/WebApp/vue/src/icons/svg/库房.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622533021736" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3640" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M348.16 608.64H268.8c-29.44 0-36.48 7.04-36.48 40.96v85.12c0 33.92 6.4 40.96 36.48 40.96h79.36c29.44 0 36.48-7.04 36.48-40.96v-85.12c3.2-33.92-3.84-40.96-36.48-40.96z m0-211.2H268.8c-29.44 0-36.48 7.04-36.48 40.96v85.12c0 33.92 6.4 40.96 36.48 40.96h79.36c29.44 0 36.48-7.04 36.48-40.96V438.4c3.2-33.92-3.84-40.96-36.48-40.96z m0 422.4H268.8c-29.44 0-36.48 7.04-36.48 40.96v85.12c0 33.92 6.4 40.96 36.48 40.96h79.36c29.44 0 36.48-7.04 36.48-40.96v-85.12c3.2-34.56-3.84-40.96-36.48-40.96z" p-id="3641"></path><path d="M1011.2 366.72L539.52 16C536.32 12.8 533.12 8.96 526.08 5.76c-16.64-7.04-35.84-3.2-42.88 13.44L14.72 369.92c-12.8 14.08-16.64 37.76-6.4 51.2 9.6 17.28 29.44 23.68 46.08 13.44l33.28-23.68v575.36c0 20.48 16.64 37.76 36.48 37.76s36.48-17.28 36.48-37.76V356.48l349.44-262.4 356.48 265.6 76.16 54.4 26.24 17.28c16.64 10.24 36.48 3.2 46.08-13.44 12.8-13.44 12.8-37.76-3.84-51.2z" p-id="3642"></path><path d="M757.12 547.2v74.88H529.28v67.84h227.84v74.88h76.16v-74.88h82.56V622.08h-82.56V547.2h-76.16z" p-id="3643"></path><path d="M694.4 727.68H615.04v74.88H529.28v67.84h85.76v85.12h79.36v-74.88h231.04V812.8h-231.04v-85.12z" p-id="3644"></path></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

1
code/WebApp/vue/src/icons/svg/报表.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622602452321" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6547" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M696.20736 166.86592c24.37632 21.66272 27.7504 27.51488 51.75808 48.85504-15.62624 15.19616-195.00032 187.07456-204.12416 195.92704a1480110.4896 1480110.4896 0 0 0-100.41856-84.26496c-12.53376 12.04736-283.41248 268.27776-293.2992 277.80096-0.73216 0.70656-1.11104 1.72032-1.6128 2.53952 12.92288 11.392 38.6816 38.80448 44.24192 33.52064 7.1168-6.76352 243.83488-232.0896 252.91264-240.92672l102.67136 84.34176c9.14944-8.94464 234.2912-235.2896 239.00672-240.1024 26.52672 23.01952 26.83392 25.02144 53.376 48.0512 1.4592-7.11168 56.2176-181.2224 57.82016-188.11904v-1.07008c-2.46784 0.28672-187.10016 60.21632-202.33216 63.44704zM793.5488 850.3296h71.68V412.48256h-71.68v437.84704zM603.82208 850.18112h71.68v-327.30624h-71.68v327.30624zM408.064 850.14016h71.68v-249.28768h-71.68v249.28768zM233.32864 850.12992h71.68v-152.86272h-71.68v152.86272z" p-id="6548"></path><path d="M940.8 911.66208H119.89504V87.0912c0-8.48384-5.97504-15.36-13.34784-15.36h-29.6192c-7.3728 0-13.34784 6.87616-13.34784 15.36v869.00224c0 3.35872 1.47456 6.38976 3.82464 8.73984 0.11264 0.128 0.24064 0.24064 0.3584 0.36864 0.1536 0.14848 0.29184 0.30208 0.45056 0.43008 2.34496 2.35008 5.36576 3.80928 8.71424 3.80928h863.87712c8.48896 0 15.36-5.96992 15.36-13.34784v-31.0784c-0.00512-7.3728-6.87616-13.35296-15.36512-13.35296z" p-id="6549"></path></svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

1
code/WebApp/vue/src/icons/svg/日历.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622532359157" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="8457" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M507.056 833.35h-308.99c-27.191 0-49.439-7.416-66.742-24.72-7.416-7.415-9.888-17.303-9.888-27.19V311.774c0-27.191 29.663-49.438 64.27-51.91h64.27c9.888 0 14.832-2.472 14.832-9.888v-19.775c4.943-19.776 19.775-29.663 44.494-29.663 19.776 0 34.607 12.36 37.08 32.135v2.472c2.471 27.19 2.471 27.19 34.606 27.19h269.44c12.36 0 17.303-2.471 17.303-12.359v-17.303c2.472-19.776 19.776-29.663 42.023-29.663 22.247 0 37.079 12.36 39.55 29.663 0 9.887-4.943 22.247 2.473 27.19 9.887 4.945 24.719 2.473 37.078 2.473h37.08c37.078 2.472 66.741 24.719 66.741 54.382V781.44c0 32.135-32.135 54.382-76.63 56.854-98.876-4.944-205.169-4.944-308.99-4.944z m2.472-422.699h-308.99c-12.36 0-17.304 2.472-17.304 12.36v341.125c0 14.832 7.416 17.304 22.247 17.304h608.094c22.247 0 22.247 0 22.247-17.304V425.483c0-12.36-2.472-14.832-17.303-14.832h-308.99z" fill="#1296DB" p-id="8458"></path><path d="M316.718 707.282h-39.55c-17.304 0-24.72-7.416-27.192-19.775v-42.023c0-12.36 9.888-19.776 24.72-19.776h84.045c17.303 0 24.719 7.416 24.719 22.248v39.55c0 12.36-7.416 19.776-24.72 19.776h-42.022z m192.81 0h-39.55c-17.304 0-27.192-7.416-27.192-19.775v-39.551c0-14.832 7.416-19.776 24.72-22.248h81.573c14.831 0 24.72 7.416 24.72 19.776v42.023c0 12.36-9.889 19.775-24.72 19.775h-39.55z m192.81-81.574h42.023c14.831 0 24.72 7.416 22.247 19.776v44.495c0 12.36-9.888 19.775-24.72 19.775h-84.044c-14.832 0-24.72-7.416-24.72-19.775v-42.023c0-12.36 9.888-19.776 24.72-19.776 14.831-4.943 29.663-2.472 44.494-2.472z m-192.81-59.326h-42.023c-17.303 0-24.719-4.944-24.719-19.775v-44.495c0-12.36 7.416-17.303 22.247-17.303h86.518c14.831 0 22.247 7.416 24.719 19.775v42.023c0 12.36-7.416 19.775-24.72 19.775h-42.022z m-192.81-81.573h42.023c14.831 0 24.719 7.416 24.719 17.303v44.495c0 12.36-7.416 17.303-22.247 17.303h-86.518c-14.831 0-22.247-4.943-22.247-17.303V499.64c0-12.36 9.888-17.303 24.72-17.303 12.359 2.472 24.718 2.472 39.55 2.472z m383.148 81.573h-42.022c-14.832 0-24.72-7.415-24.72-19.775v-44.495c0-12.36 7.416-17.303 22.248-17.303h86.517c14.831 0 22.247 7.416 22.247 17.303v44.495c0 9.888-7.416 17.303-22.247 17.303-12.36 2.472-27.191 2.472-42.023 2.472z" fill="#1296DB" p-id="8459"></path></svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

1
code/WebApp/vue/src/icons/svg/索赔授权.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622535730094" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13853" width="64" height="64" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M733.9 709.9c-22.9 0-41.3 18.9-40.7 41.9 0.6 20.7 17.1 38 37.8 39.5 23.8 1.7 43.7-17.2 43.7-40.6 0-22.6-18.3-40.8-40.8-40.8z" p-id="13854"></path><path d="M734.9 653.8c-81.3 0.1-149.4 68.2-149.5 149.5-0.1 82.7 67 149.7 149.7 149.7 82.2-0.1 149.4-67.3 149.5-149.5 0.1-82.7-67-149.7-149.7-149.7z m13.9 163.4v28.9h13.8c7.6 0 13.8 6.2 13.8 13.8 0 7.6-6.2 13.8-13.8 13.8h-13.7V915c0 4.9-2.6 9.5-6.9 11.9-4.3 2.5-9.5 2.5-13.8 0-4.3-2.4-6.9-7-6.9-11.9v-97.8c-34.7-7-58.4-39.2-54.9-74.4s33.2-62 68.6-61.9v0.1c35.4 0 65 26.8 68.5 61.9 3.6 35.1-20 67.2-54.7 74.3zM627.9 117.8c0-26.1-19-47.8-42.4-47.8H394.3c-23.5 0-42.4 21.6-42.4 47.8s19 47.8 42.4 47.8h192.1c22.6-0.1 41.5-21.7 41.5-47.8zM639.7 646.8V627c0-1.9-1.5-3.4-3.4-3.4h-87.1c-1.9 0-3.4 1.5-3.4 3.4v60c0 1.9 1.5 3.4 3.4 3.4h41.5c13.6-17.3 30.1-32.1 49-43.6z" p-id="13855"></path><path d="M551.7 804.8c0-25.2 5.1-49.3 14.3-71.1h-16.9c-1.9 0-3.4 1.5-3.4 3.4V751c0 1.9-1.5 3.4-3.4 3.4h-36.5c-1.9 0-3.4-1.5-3.4-3.4V583.8c0-1.9 1.5-3.4 3.4-3.4h172.7c1.9 0 3.4 1.5 3.4 3.4v45.5c16.8-5.1 34.6-7.8 53-7.8 42.6 0 81.8 14.5 112.9 38.9V215.2c0-62.2-30.7-105.5-93.8-105.5h-80c-2 0-3.5 1.7-3.3 3.7 0.4 3.6 0.4 7.6 0.4 11.6 0 38.7-25.2 76.6-55 76.6H357.4c-31.4 0-56.7-37.7-56.8-76.3v-0.5c0.6-4 0.8-7.5 1.2-11.3 0.2-2-1.3-3.7-3.3-3.7h-80.9c-68.5 0-85.6 43.2-85.6 105.5V832c0 66.7 23.4 104.6 90.1 104.6h385.5c-34.5-33.4-55.9-80.1-55.9-131.8z m-66.3-415c0-1.9 1.5-3.4 3.4-3.4h73.8c2.3 0 4-2.3 3.1-4.5-3.4-9.1-6.7-17.2-10.6-24.8-1-2 0.2-4.4 2.4-4.8l37.9-6.8c1.6-0.3 3.1 0.6 3.7 2.1 4.6 11.9 8.7 23.9 12.6 36.5 0.4 1.4 1.7 2.4 3.2 2.4h76.2c1.9 0 3.4 1.5 3.4 3.4v36.5c0 1.9-1.5 3.4-3.4 3.4H488.8c-1.9 0-3.4-1.5-3.4-3.4v-36.6z m-6.3 120c0-1.9 1.5-3.4 3.4-3.4h42.7c2.3 0 3.9-2.2 3.2-4.4-5-15.4-11.8-30.8-18.7-45.6-0.8-1.8 0-3.8 1.8-4.6l35.2-13.8c1.6-0.6 3.5 0.1 4.3 1.7 9.8 20.9 17.3 42.5 23.3 64.2 0.4 1.5 1.7 2.5 3.2 2.5h33c1.4 0 2.6-0.8 3.1-2.1 8.3-20.9 15.7-42.4 22.5-64.8 0.6-1.8 2.5-2.8 4.3-2.2l36.8 13c1.7 0.6 2.6 2.5 2.1 4.2-5.5 16.1-11.7 31.6-19.1 47.1-1.1 2.2 0.6 4.8 3 4.8h39c1.9 0 3.4 1.5 3.4 3.4v37.5c0 1.9-1.5 3.4-3.4 3.4H482.5c-1.9 0-3.4-1.5-3.4-3.4v-37.5zM315 365.5c0-1.9 1.5-3.4 3.4-3.4H464c1.9 0 3.4 1.5 3.4 3.4v277.4c0 1.9-1.5 3.4-3.4 3.4h-32c-1.9 0-3.4-1.5-3.4-3.4V407c0-1.9-1.5-3.4-3.4-3.4H358c-1.9 0-3.4 1.5-3.4 3.4v242.1c0 1.9-1.5 3.4-3.4 3.4h-33c-1.9 0-3.4-1.5-3.4-3.4V365.5z m9 392.9c-1.5 0.8-3.4 0.3-4.4-1.2l-19.8-31.3c-1-1.6-0.5-3.8 1.2-4.7 28-14.9 46.7-32.4 57.2-53.2 0.1-0.1 0.1-0.2 0.1-0.3 9.8-24.3 16.1-54.9 17-92.7V434c0-1.9 1.5-3.4 3.4-3.4h27.5c1.9 0 3.4 1.5 3.4 3.4v141.8c-0.9 50.5-8.1 90.1-22.6 119.9-13 26.3-33.8 47.4-63 62.7zM484.2 724l-25.6 25.6c-1.5 1.5-4 1.3-5.2-0.5-12.8-20-29.5-42.3-51.4-65.3-1.3-1.3-1.2-3.4 0.1-4.7l22.4-21.6c1.3-1.2 3.3-1.3 4.6 0 20.8 19.5 39.3 40.5 55.4 62.2 1.1 1.3 0.9 3.1-0.3 4.3z" p-id="13856"></path></svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

1
code/WebApp/vue/src/icons/svg/销售.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622535656080" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13047" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="128"><defs><style type="text/css"></style></defs><path d="M512 0C229.7 0 0 229.7 0 512s229.7 512 512 512 512-229.7 512-512S794.3 0 512 0z m0 969.1C260 969.1 54.9 764 54.9 512 54.9 260 260 54.9 512 54.9S969.1 260 969.1 512c0 252-205.1 457.1-457.1 457.1z m123.9-724.9L554.6 394c-21.7 40.6-34.9 67.6-39.8 81h-1.4c-14.3-32.5-54.6-109.4-121.1-230.8h-76.5L458 488.5H341.4v54h136.7v74.4H341.4v54.6h136.7v108.3h67.8V671.5h131.8v-54.6H545.9v-74.4h131.8v-54H564.6l143.6-244.3h-72.3z" p-id="13048"></path></svg>

Before

Width:  |  Height:  |  Size: 820 B

1
code/WebApp/vue/src/icons/svg/零件类型.svg

@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1622533807892" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4468" xmlns:xlink="http://www.w3.org/1999/xlink" width="64" height="64"><defs><style type="text/css"></style></defs><path d="M751.2 906.4l-579.2-0.8c-28.8 0-52.8-23.2-52.8-52.8V168.8c0-28.8 23.2-52.8 52.8-52.8h225.6v245.6l63.2-60.8 65.6 60.8V116.8h224c28.8 0 52.8 23.2 52.8 52.8v184c0 14.4 12 26.4 26.4 26.4s26.4-12 26.4-26.4v-184C856 111.2 808.8 64 750.4 64H172c-58.4 0.8-104.8 48-104.8 105.6v684.8c0 58.4 47.2 105.6 105.6 105.6H752c14.4 0 26.4-12 26.4-26.4-0.8-15.2-12.8-27.2-27.2-27.2z" p-id="4469"></path><path d="M514.4 485.6c0-14.4-12-26.4-26.4-26.4H224.8c-14.4 0-26.4 12-26.4 26.4s12 26.4 26.4 26.4H488c15.2-0.8 26.4-12 26.4-26.4z m-289.6 184c-14.4 0-26.4 12-26.4 26.4s12 26.4 26.4 26.4h158.4c14.4 0 26.4-12 26.4-26.4s-12-26.4-26.4-26.4H224.8z m512.8-100.8c-45.6-1.6-84 34.4-85.6 80.8-1.6 45.6 34.4 84.8 80.8 85.6h2.4c45.6 0 83.2-36.8 83.2-82.4 0-45.6-36-82.4-80.8-84z m0 122.4c-21.6 0-39.2-17.6-39.2-39.2s17.6-39.2 39.2-39.2 39.2 17.6 39.2 39.2-17.6 39.2-39.2 39.2z" p-id="4470"></path><path d="M955.2 608.8c-1.6-7.2-4-13.6-8.8-19.2-4.8-5.6-12-8.8-19.2-8.8-24.8 0-44.8-20.8-45.6-45.6 0.8-6.4 1.6-12 4-17.6 6.4-15.2 1.6-32.8-11.2-42.4l-52.8-30.4c-4.8-1.6-9.6-2.4-14.4-2.4-10.4 0-20 4-26.4 11.2-9.6 10.4-22.4 18.4-36 20.8-14.4-3.2-27.2-10.4-36.8-21.6-10.4-10.4-26.4-13.6-40.8-8l-56 30.4c-13.6 9.6-18.4 27.2-11.2 42.4 2.4 5.6 4 11.2 4 17.6 0 24.8-20.8 44.8-45.6 45.6-7.2 0-13.6 3.2-18.4 8.8-4.8 5.6-8 12-8.8 19.2-2.4 14.4-4 28.8-4.8 43.2 0.8 14.4 2.4 28.8 4.8 43.2 1.6 7.2 4 13.6 8.8 19.2 4.8 5.6 11.2 8 18.4 8.8 24.8 0 44.8 20.8 45.6 45.6-0.8 6.4-1.6 12-4 17.6-6.4 15.2-1.6 32.8 11.2 42.4l52.8 29.6c14.4 5.6 30.4 2.4 40.8-8.8 9.6-11.2 23.2-19.2 37.6-22.4 14.4 3.2 28 11.2 37.6 22.4 10.4 11.2 26.4 14.4 40.8 8.8l50.4-29.6c13.6-9.6 18.4-27.2 11.2-42.4-2.4-5.6-4-11.2-4-17.6 0-24.8 20-45.6 45.6-45.6 7.2 0 14.4-3.2 19.2-8.8 4.8-5.6 8-12 8.8-19.2 2.4-14.4 4-28.8 4.8-43.2 0.8-14.4 0-28.8-1.6-43.2z m-41.6 71.2c-44 6.4-77.6 44-77.6 88.8 0 8.8 1.6 17.6 4.8 26.4l-37.6 20.8c-4.8-4.8-10.4-8.8-16-12.8-15.2-12-33.6-19.2-52.8-19.2-18.4 0.8-35.2 7.2-49.6 19.2-5.6 4-10.4 8.8-15.2 12.8l-36-20c14.4-47.2-11.2-97.6-58.4-112-4.8-1.6-9.6-2.4-13.6-3.2-0.8-8.8-0.8-18.4 0-27.2-0.8-8.8-0.8-18.4 0-27.2 48.8-5.6 83.2-49.6 77.6-98.4-0.8-5.6-1.6-10.4-3.2-15.2l39.2-20.8c4.8 4.8 10.4 8.8 16 12.8 14.4 11.2 31.2 17.6 48.8 18.4 17.6-0.8 34.4-7.2 48.8-17.6 5.6-4 10.4-8 15.2-12.8l36.8 20.8a76.8 76.8 0 0 0-4.8 26.4c0 44.8 32.8 82.4 77.6 88.8 0.8 8.8 0.8 18.4 0 27.2v24z" p-id="4471"></path></svg>

Before

Width:  |  Height:  |  Size: 2.7 KiB

BIN
code/WebApp/vue/src/layout-old.rar

Binary file not shown.

116
code/WebApp/vue/src/layout/components/ManagerNavbar.vue

@ -0,0 +1,116 @@
<template>
<div class="navbar">
<img
:src="logo"
class="logo" >
<div class="nav-title">
系统设置
</div>
<div
class="back-home"
@click="enterHome">返回首页</div>
<div
class="go-out"
@click="enterLogin">退出系统</div>
</div>
</template>
<script>
import { Loading } from 'element-ui'
import { mapGetters } from 'vuex'
export default {
components: {},
props: {
navIndex: {
type: Number,
default: 0
}
},
data() {
return {}
},
computed: {
...mapGetters(['logo'])
},
mounted() {},
methods: {
enterHome() {
this.$router.replace({
path: '/'
})
},
enterLogin() {
this.$confirm('退出登录?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
.then(() => {
var loading = Loading.service({
target: document.getElementById('#app')
})
this.$store
.dispatch('user/logout')
.then(() => {
loading.close()
this.$router.push('/login')
})
.catch(() => {
loading.close()
})
})
.catch(() => {})
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
.navbar {
height: 45px;
min-height: 45px;
display: flex;
align-items: center;
padding: 0 90px 0 30px;
background-color: white;
.logo {
width: 150px;
height: 40px;
display: block;
flex-shrink: 0;
margin-right: 60px;
}
.nav-title {
flex: 1;
font-size: 16px;
color: #333333;
}
}
.back-home {
width: 94px;
height: 36px;
line-height: 36px;
background-color: #3e84e9;
border-radius: 3px;
text-align: center;
color: #fff;
font-size: 14px;
margin-right: 10px;
cursor: pointer;
}
.go-out {
width: 94px;
height: 36px;
line-height: 36px;
background-color: #c2c2c2;
border-radius: 3px;
text-align: center;
color: #fff;
font-size: 14px;
cursor: pointer;
}
</style>

350
code/WebApp/vue/src/layout/components/Sidebar.vue

@ -0,0 +1,350 @@
<template>
<div class="container">
<el-popover
v-if="createButtonTitle != ''"
:offset="addOffset"
:visible-arrow="false"
placement="right"
popper-class="no-padding-popover"
trigger="hover">
<slot name="add"/>
<div
slot="reference"
:style="{ 'background-color': createButtonBackgroundColor }"
class="create-button"
@click="quicklyCreate">
<div
v-show="!buttonNameCollapse"
class="button-name">{{ createButtonTitle }}</div>
<div
v-show="!buttonNameCollapse"
class="button-line"/>
<i
:class="createButtonIcon"
class="button-mark"/>
</div>
</el-popover>
<el-menu
:default-active="activeIndex"
:style="{'border-right-color': backgroundColor}"
:text-color="textColor"
:background-color="backgroundColor"
:active-text-color="activeTextColor"
:collapse="isCollapse()"
class="el-menu-vertical"
:unique-opened="false"
:collapse-transition="false"
@select="handleselect"
>
<template
v-for="(item, index) in getShowMenu(items)">
<router-link
v-if="!item.children"
:key="index"
:to="getFullPath(item.path)">
<el-menu-item
:index="getFullPath(item.path)"
:class="{'menu-item-select': activeIndex == getFullPath(item.path)}"
class="menu-item-defalt">
<i class="iconfont" :class="item.meta.icon" :style="{ 'color': activeIndex == getFullPath(item.path) ? activeTextColor : textColor, fontSize: item.meta.fontSize || '16px'}"/>
<span slot="title">{{ item.meta.title }}</span>
<el-badge
v-if="item.meta.num && item.meta.num > 0"
:max="99"
:value="item.meta.num"/>
</el-menu-item>
</router-link>
<el-submenu
v-else
:key="index"
:index="getFullPath(item.path)">
<template
v-if="!item.hidden"
slot="title">
<i
:class="item.meta.icon"
:style="{fontSize: item.meta.fontSize || '16px'}"
class="iconfont"/>
<span slot="title">{{ item.meta.title }}</span>
</template>
<router-link
v-for="(subitem, subindex) in getShowMenu(item.children)"
:key="subindex"
:to="getFullPath(subitem.path)">
<el-menu-item
:index="getFullPath(subitem.path)"
:class="{'menu-item-select': activeIndex == getFullPath(subitem.path) }"
class="menu-item-defalt">
{{ subitem.meta.title }}
</el-menu-item>
</router-link>
</el-submenu>
</template>
</el-menu>
<div
:style="{ 'background-color':backgroundColor }"
class="sidebar-bottom">
<div class="sidebar-container">
<img
:style="{ 'right': buttonNameCollapse ? '3px' : '0' }"
class="collapse-button"
src="@/assets/img/collapse_white.png"
alt=""
@click="toggleSideBarClick">
</div>
</div>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import variables from '@/styles/variables.scss'
import Logo from './Sidebar/Logo'
export default {
inject: ['reload'], //
name: 'Sidebar',
components: { Logo },
props: {
mainRouter: {
type: String,
default: ''
},
addOffset: {
type: Number,
default: 70
},
/** 选择项目 */
items: {
type: Array,
default: () => {
return []
}
},
backgroundColor: {
type: String,
default: '#2D3037'
},
activeTextColor: {
type: String,
default: '#fff'
},
textColor: {
type: String,
default: '#bebec0'
},
selectLineColor: {
type: String,
default: '#3E84E9'
},
selectBackgroundColor: {
type: String,
default: '#454E57'
},
createButtonTitle: {
type: String,
default: ''
},
createButtonBackgroundColor: {
type: String,
default: '#3E84E9'
},
createButtonIcon: {
type: String,
default: 'el-icon-arrow-right'
}
},
data() {
return {
collapse: false, //
buttonNameCollapse: false,
}
},
computed: {
...mapGetters(['activeIndex',
'sidebar'])
},
watch: {
// collapse: function(val) {
// if (val) {
// this.buttonNameCollapse = val
// } else {
// setTimeout(() => {
// this.buttonNameCollapse = val
// }, 300)
// }
// }
'$route': function(){
// this.reload();
}
},
mounted() {
},
methods: {
variables() {
return variables
},
isCollapse() {
return !this.sidebar.opened
},
showLogo() {
return this.$store.state.settings.sidebarLogo
},
toggleSideBarClick() {
this.$store.dispatch('toggleSideBar')
},
//
quicklyCreate() {
this.$emit('quicklyCreate')
},
getFullPath(path) {
return `/${this.mainRouter}/${path}`
},
getShowMenu(array) {
return array.filter(item => {
return !item.hidden
})
},
handleselect: function (a, b) {
this.reload() //
},
}
}
</script>
<style lang="scss" scoped>
.container {
position: relative;
height: 100%;
}
.el-menu-vertical:not(.el-menu--collapse) {
width: 200px;
min-height: 200px;
}
.el-menu-vertical {
height: 100%;
overflow: auto;
padding-bottom: 48px;
.el-submenu.is-active {
.el-submenu__title {
.wukong {
color: white;
}
span {
color: white;
}
}
}
}
.menu-item-icon-container {
display: inline-block;
margin-right: 10px;
.menu-item-icon-flex {
width: 22px;
height: 22px;
position: relative;
.menu-item-icon {
display: block;
}
}
}
.menu-item-defalt {
border-left: 2px solid transparent;
height: 46px;
line-height: 46px;
}
.menu-item-select {
border-left: 2px solid #3e84e9;
background-color: #454e57 !important;
}
.create-button-container {
padding: 15px 12px 15px 12px;
color: white;
font-size: 14px;
cursor: pointer;
position: absolute;
top: 0;
left: 0;
right: 0;
z-index: 2;
.create-button {
display: flex;
align-items: center;
justify-content: center;
box-sizing: border-box;
padding: 0 15px;
height: 36px;
border-radius: 4px;
.button-name {
flex: 1;
}
.button-line {
height: 10px;
background-color: white;
width: 1px;
margin: 0 20px 0 10px;
opacity: 0.3;
}
.button-mark {
width: 12px;
}
}
}
.side-bar {
height: 32px;
padding: 0 16px 16px;
position: absolute;
bottom: 0;
left: 0;
right: 0;
background: #eee;
}
.sidebar-bottom {
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: 48px;
.sidebar-container {
position: relative;
height: 48px;
/*display: none;*/
}
}
.collapse-button {
position: absolute;
top: 0;
padding: 18px 20px;
}
.wukong {
margin-right: 8px;
}
//
.el-badge {
position: absolute;
right: 15px;
top: 5px;
/deep/ .el-badge__content {
border-width: 0;
}
}
</style>

93
code/WebApp/vue/src/layout/components/Sidebar/SidebarItem.vue

@ -1,37 +1,16 @@
<template>
<div v-if="!item.hidden">
<template
v-if="
hasOneShowingChild(item.children, item) &&
(!onlyOneChild.children || onlyOneChild.noShowingChildren) &&
!item.alwaysShow
"
>
<template v-if="hasOneShowingChild(item.children,item) && (!onlyOneChild.children||onlyOneChild.noShowingChildren)&&!item.alwaysShow">
<app-link v-if="onlyOneChild.meta" :to="resolvePath(onlyOneChild.path)">
<el-menu-item
:index="resolvePath(onlyOneChild.path)"
:class="{ 'submenu-title-noDropdown': !isNest }"
>
<item
:icon="onlyOneChild.meta.icon || (item.meta && item.meta.icon)"
:title="generateTitle(onlyOneChild.meta.title)"
/>
<el-menu-item :index="resolvePath(onlyOneChild.path)" :class="{'submenu-title-noDropdown':!isNest}">
<item :icon="onlyOneChild.meta.icon||(item.meta&&item.meta.icon)" :title="generateTitle(onlyOneChild.meta.title)" />
</el-menu-item>
</app-link>
</template>
<el-submenu
v-else
ref="subMenu"
:index="resolvePath(item.path)"
popper-append-to-body
>
<el-submenu v-else ref="subMenu" :index="resolvePath(item.path)" popper-append-to-body>
<template slot="title">
<item
v-if="item.meta"
:icon="item.meta && item.meta.icon"
:title="generateTitle(item.meta.title)"
/>
<item v-if="item.meta" :icon="item.meta && item.meta.icon" :title="generateTitle(item.meta.title)" />
</template>
<sidebar-item
v-for="child in item.children"
@ -42,84 +21,78 @@
class="nest-menu"
/>
</el-submenu>
<!-- <el-badge
v-if="item.meta.num && item.meta.num > 0"
:max="99"
:value="item.meta.num"
/>
<el-badge v-if="item.meta.title == '系统内通知'" :max="99" value="7" /> -->
</div>
</template>
<script>
import path from "path";
import { generateTitle } from "@/utils/i18n";
import { isExternal } from "@/utils/validate";
import Item from "./Item";
import AppLink from "./Link";
import FixiOSBug from "./FixiOSBug";
import path from 'path'
import { generateTitle } from '@/utils/i18n'
import { isExternal } from '@/utils/validate'
import Item from './Item'
import AppLink from './Link'
import FixiOSBug from './FixiOSBug'
export default {
name: "SidebarItem",
name: 'SidebarItem',
components: { Item, AppLink },
mixins: [FixiOSBug],
props: {
// route object
item: {
type: Object,
required: true,
required: true
},
isNest: {
type: Boolean,
default: false,
default: false
},
basePath: {
type: String,
default: "",
},
default: ''
}
},
data() {
// To fix https://github.com/PanJiaChen/vue-admin-template/issues/237
// TODO: refactor with render function
this.onlyOneChild = null;
return {};
this.onlyOneChild = null
return {}
},
methods: {
hasOneShowingChild(children = [], parent) {
const showingChildren = children.filter((item) => {
const showingChildren = children.filter(item => {
if (item.hidden) {
return false;
return false
} else {
// Temp set(will be used if only has one showing child)
this.onlyOneChild = item;
return true;
this.onlyOneChild = item
return true
}
});
})
// When there is only one child router, the child router is displayed by default
if (showingChildren.length === 1) {
return true;
return true
}
// Show parent if there are no child router to display
if (showingChildren.length === 0) {
this.onlyOneChild = { ...parent, path: "", noShowingChildren: true };
return true;
this.onlyOneChild = { ... parent, path: '', noShowingChildren: true }
return true
}
return false;
return false
},
resolvePath(routePath) {
if (isExternal(routePath)) {
return routePath;
return routePath
}
if (isExternal(this.basePath)) {
return this.basePath;
return this.basePath
}
return path.resolve(this.basePath, routePath);
return path.resolve(this.basePath, routePath)
},
generateTitle,
},
};
generateTitle
}
}
</script>

154
code/WebApp/vue/src/layout/firstLayout.vue

@ -0,0 +1,154 @@
<template>
<el-container>
<el-header class="nav-container">
<navbar :nav-index="0" @nav-items-click="navClick" />
</el-header>
<el-container>
<el-aside width="auto" class="aside-container">
<sidebar :items="sidebarItems" main-router="first"> </sidebar>
</el-aside>
<el-main id="workbench-main-container">
<div :class="{ 'fixed-header': fixedHeader }">
<tags-view v-if="needTagsView" />
</div>
<app-main />
</el-main>
</el-container>
</el-container>
</template>
<script>
import { mapGetters, mapState } from "vuex";
import { Navbar, Sidebar, AppMain, TagsView } from "./components";
import { vueTestRouterMenu } from "@/router/modules/first";
import Lockr from "lockr";
export default {
name: "Layout",
components: {
Navbar,
Sidebar,
AppMain,
TagsView,
},
data() {
return {
addDialog: false,
list: [
{
label: "日志",
icon: "log",
},
{
label: "审批",
icon: "examine",
},
{
label: "任务",
icon: "task",
},
{
label: "日程",
icon: "schedule",
},
{
label: "公告",
icon: "notice",
},
],
//
showCategorySelect: false,
isCreate: false, //
createInfo: {}, // id
};
},
computed: {
...mapGetters(["first", "firstRouters", "roles"]),
...mapState({
sidebar: (state) => state.app.sidebar,
device: (state) => state.app.device,
showSettings: (state) => state.settings.showSettings,
needTagsView: (state) => state.settings.tagsView,
fixedHeader: (state) => state.settings.fixedHeader,
}),
sidebarItems() {
// const workbenchMenus = this.firstRouters.children
// console.log(this.firstRouters)
// return workbenchMenus
let currentUserRoles = Lockr.get("userRoles");
for (let index = 0; index < vueTestRouterMenu.length; index++) {
const routerMenuItem = vueTestRouterMenu[index];
for (let j = 0; j < routerMenuItem.children.length; j++) {
if (routerMenuItem.children[j].meta.roles)
routerMenuItem.children[j].hidden = !this.in_array(
routerMenuItem.children[j].meta.roles,
this.roles
);
}
}
return vueTestRouterMenu;
},
},
created() {},
methods: {
navClick(index) {},
//
addSkip(val) {
switch (val.label) {
case "日志":
// this.$router.push({ path: 'journal', query: { routerKey: 1 }})
break;
case "审批":
this.showCategorySelect = true;
break;
case "任务":
// this.$router.push({ path: 'task', query: { routerKey: 1 }})
break;
case "日程":
//this.$router.push({ path: 'schedule-new', query: { routerKey: 1 }})
break;
case "公告":
//this.$router.push({ path: 'notice-new', query: { routerKey: 1 }})
break;
}
},
in_array(stringToSearch, arrayToSearch) {
for (let s = 0; s < arrayToSearch.length; s++) {
const thisEntry = arrayToSearch[s].toString();
if (thisEntry == stringToSearch) {
return true;
}
}
return false;
},
},
};
</script>
<style lang="scss" scoped>
@import "./styles/common.scss";
.el-container {
min-height: 0;
}
.aside-container {
position: relative;
background-color: #2d3037;
box-sizing: border-box;
border-right: solid 1px #e6e6e6;
overflow: visible;
}
.nav-container {
padding: 0;
/*box-shadow: 0px 1px 2px #dbdbdb;*/
z-index: 100;
min-width: 1200px;
height: 45px !important;
}
.quick-add {
height: 178px;
}
</style>

21
code/WebApp/vue/src/main.js

@ -10,9 +10,6 @@ import './styles/element-variables.scss'
import '@/styles/index.scss' // global css
import elTableTransfer from 'el-table-transfer'
Vue.use(elTableTransfer)
import App from './App'
import store from './store'
import router from './router'
@ -54,10 +51,10 @@ import 'vue-happy-scroll/docs/happy-scroll.css'
* Currently MockJs will be used in the production environment,
* please remove it before going online ! ! !
*/
if (process.env.NODE_ENV === 'production') {
const { mockXHR } = require('../mock')
mockXHR()
}
// if (process.env.NODE_ENV === 'production') {
// const { mockXHR } = require('../mock')
// mockXHR()
// }
Vue.use(Element, {
size: Cookies.get('size') || 'medium', // set element-ui default size
@ -98,16 +95,6 @@ import clickoutside from './directive'
Vue.directive('clickoutside', clickoutside)
// 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
// 当被绑定的元素插入到 DOM 中时……
inserted: function (el) {
// 聚焦元素
el.focus()
el.querySelector('input').focus()
}
})
//自定义指令
import empty from './directive/empty'

36
code/WebApp/vue/src/permission.js

@ -1,16 +1,17 @@
import router from './router'
import store from './store'
import { Message } from 'element-ui'
import {Message} from 'element-ui'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
import { getToken } from '@/utils/auth' // get token from cookie
import {getToken} from '@/utils/auth' // get token from cookie
import getPageTitle from '@/utils/get-page-title'
import Lockr from "lockr";
NProgress.configure({ showSpinner: false }) // NProgress Configuration
NProgress.configure({showSpinner: false}) // NProgress Configuration
const whiteList = ['/login', '/auth-redirect'] // no redirect whitelist
router.beforeEach(async(to, from, next) => {
router.beforeEach(async (to, from, next) => {
// start progress bar
NProgress.start()
@ -23,28 +24,27 @@ router.beforeEach(async(to, from, next) => {
if (hasToken) {
if (to.path === '/login') {
// if is logged in, redirect to the home page
next({ path: '/' })
next({path: '/'})
//next({path: '/first/dashboard'})
NProgress.done()
} else {
// determine whether the user has obtained his permission roles through getInfo
const hasRoles = store.getters.roles && store.getters.roles.length > 0
//获取当前组织ID
const hasOrg = Lockr.get("currentorgID")
if (hasRoles) {
next()
} else {
try {
// get user info
// note: roles must be a object array! such as: ['admin'] or ,['developer','editor']
const { roles } = await store.dispatch('user/getPermissions')
let {roles} = await store.dispatch('user/getPermissions')
// generate accessible routes map based on roles
const accessRoutes = await store.dispatch('permission/generateRoutes', roles)
// dynamically add accessible routes
router.addRoutes(accessRoutes)
// hack method to ensure that addRoutes is complete
// set the replace: true, so the navigation will not leave a history record
next({...to, replace: true})
// generate accessible routes map based on roles
const accessRoutes = await store.dispatch('permission/generateRoutes', roles)
// dynamically add accessible routes,动态挂载路由
router.addRoutes(accessRoutes)
// hack method to ensure that addRoutes is complete
// set the replace: true, so the navigation will not leave a history record
next({ ...to, replace: true })
} catch (error) {
// remove token and go to login page to re-login
await store.dispatch('user/resetToken')
@ -62,7 +62,7 @@ router.beforeEach(async(to, from, next) => {
next()
} else {
// other pages that do not have permission to access are redirected to the login page.
next(`/login?redirect=${to.path}`)
next(`/login?redirect=${to.path}`)
NProgress.done()
}
}

55
code/WebApp/vue/src/router/index.js

@ -10,20 +10,17 @@ import Layout from '@/layout'
import { managerRouter } from './modules/manager'
import personRouter from './modules/person'
import basedataRouter from './modules/basedata'
import billdataRouter from './modules/vwKBdata'
//import businessdataRouter from './modules/businessdata'
import vwFisDataRouter from './modules/vwFisData'
import BTOutDataRouter from './modules/benteng-out-data'
import bentengdataRouter from './modules/bentengdata'
import businessdataRouter from './modules/businessdata'
import JFOutDataRouter from './modules/jf-out-data'
import JFdataRouter from './modules/jfdata'
import vwdataRouter from './modules/vwdata'
import vwoutdataRouter from './modules/vw-out-data'
import wheeldataRouter from './modules/wheeldata'
import vwNoBarcodeRouter from './modules/vwKBNoBarcodedata'
import HQdataRouter from './modules/hqdata'
import HQOutDataRouter from './modules/hq-out-data'
import JobTimeDataRouter from './modules/jobtimedata'
import vwMenudataRouter from './modules/vw_menu'
import hqMenudataRouter from './modules/hq_menu'
import btcarDataRouter from './modules/bt_menu'
import vwOutOrderDataRouter from './modules/vw_out_order'
//import newjitRouter from './modules/newjit-basedata'
import pgfis from './modules/fis'
import pgfisPrint from './modules/fisprint'
/**
* Note: sub-menu only appear when route children.length >= 1
* Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
@ -65,8 +62,6 @@ export const constantRoutes = [
{
path: '/login',
component: () => import('@/views/login/index'),
//component: () => import('@/views/pg-fis/basedate/partSwitch'), //?? one
//component: () => import('@/views/pg-fis/basedate/assemblyCfg'), //?? one
hidden: true
},
{
@ -92,8 +87,7 @@ export const constantRoutes = [
children: [
{
path: 'dashboard',
component: () => import('@/views/pg-fis/basedate/m100Online/normalPritIndex.vue'),//fis
//component: () => import('@/views/ux/backGroundWork'),
component: () => import('@/views/dashboard/admin/index'),
name: 'Dashboard',
meta: {
title: '系统首页',
@ -174,21 +168,20 @@ export const asyncRoutes = [
]
},
/** when your routing map is too long, you can split it into small modules **/
managerRouter,//系统首页
personRouter,//系统管理
// basedataRouter,//基础数据维护
//vwMenudataRouter,//大众
//hqMenudataRouter,//红旗
//vwOutOrderDataRouter,
//btcarDataRouter,//一汽轿车
//vwFisDataRouter,//结算与开票数据导入
//billdataRouter,//销售结算与开票报表
//businessdataRouter,
//wheeldataRouter,//大众看板和备件
pgfisPrint,//排序单打印
pgfis,//派格fis
JobTimeDataRouter,//后台作业监控
managerRouter,
personRouter,
basedataRouter,
businessdataRouter,
wheeldataRouter,
vwdataRouter,
vwoutdataRouter,
bentengdataRouter,
BTOutDataRouter,
JFdataRouter,
JFOutDataRouter,
HQdataRouter,
HQOutDataRouter,
JobTimeDataRouter,
// 404 page must be placed at the end !!!
{ path: '*', redirect: '/404', hidden: true }

190
code/WebApp/vue/src/router/modules/basedata.js

@ -1,23 +1,23 @@
/** 车轮数据比对路由 */
/** 客户管理路由 */
//import Layout from '@/layout/firstLayout'
import Layout from '@/layout'
const basedataRouter = {
path: '/cpat/base',
path: '/basedata',
component: Layout,
redirect: 'basedata',
name: '基础数据维护',
//hidden: true,
name: 'BaseData',
//hidden: false,
meta: {
//requiresAuth: true,
title: '基础数据维护',
//requiresAuth: false,
title: '基础数据',
index: 0,
type: 'crm',
//type: 'crm',
icon: '基础数据',
keepAlive: false,
//keepAlive: false,
},
children: [
{
path: 'date-control',
path: '/centralizedControl',
component: () => import('@/views/ux/basedata/centralizedControl/index'),
name: 'CentralizedControl',//命名路由
meta: {
@ -27,59 +27,161 @@ const basedataRouter = {
}
},
{
path: 'material',
component: () => import('@/views/ux/basedata/material/index'),
name: 'material',//命名路由
meta: { title: '物料主数据', roles: ['SettleAccount.Materials'], icon: '物料' }
path: '/factory',
component: () => import('@/views/ux/basedata/factory/index'),
name: 'Factory',//命名路由
meta: { title: '工厂设置', roles: ['SettleAccount.Factorys'], icon: '工厂' }
},
{
path: 'code-setting',
path: '/codeSetting',
component: () => import('@/views/ux/basedata/codeSetting/index'),
name: 'codeSetting',//命名路由
meta: { title: '通用代码设置', roles: ['SettleAccount.CodeSettings'], icon: '通用' }
},
{
path: 'part-settlement',
component: () => import('@/views/ux/basedata/partsSettlement/index'),
name: 'partsSettlement',//命名路由
meta: {
title: '总成与结算件关系',
roles: ['SettleAccount.MaterialRelationships'],
icon: '零件'
}
path: '/material',
component: () => import('@/views/ux/basedata/material/index'),
name: 'material',//命名路由
meta: { title: '物料主数据', roles: ['SettleAccount.Materials'], icon: '物料' }
},
{
path: 'priceList',
component: () => import('@/views/ux/basedata/priceList/index'),
name: 'PriceList',//命名路由
path: '/customerStorageLocation',
component: () => import('@/views/ux/basedata/customerStorageLocation/index'),
name: 'customerStorageLocation',
meta: {
title: '标准价格单',
roles: ['SettleAccount.PriceLists'],
icon: '结算'
title: '客户存储地点',
roles: ['SettleAccount.CustomerStorageLocations'],
icon: '客户'
}
},
{
path: 'wms-kanban',
component: () => import('@/views/ux/vw/dataInput/wmsKanban'),
name: 'WMSVWKanBan',
path: '/partsSettlement',
component: () => import('@/views/ux/basedata/partsSettlement/index'),
name: 'partsSettlement',//命名路由
meta: { title: '零件匹配关系', roles: ['SettleAccount.MaterialRelationships'], icon: '零件' }
},
{
path: '/materialRelationSupplier',
component: () => import('@/views/ux/basedata/materialRelationSupplier/index'),
name: 'materialRelationSupplier',//命名路由
meta: {
title: '大众看板发货明细',
roles: ['SettleAccount.Reports'],
icon: '供货'
title: '供应商零件设置',
roles: ['SettleAccount.SupplierItemSetUps'],//控制页面角色(可以设置多个角色)
icon: '供应商'
}
},
{
path: 'wms-sparepart',
component: () => import('@/views/ux/vw/dataInput/wmsSparePart'),
name: 'WMSSparePart',//命名路由
},
{
path: '/carMaterialConfig',
component: () => import('@/views/ux/basedata/carMaterialConfig/index'),
name: 'CarMaterialConfig',//命名路由
meta: {
title: '大众备件发货明细',
roles: ['SettleAccount.Reports'],
icon: '客户零件'
title: '车型代码与零件匹配',
roles: ['SettleAccount.CarMaterialConfigs'],//控制页面角色(可以设置多个角色)
icon: '车型'
}
}
},
// {
// path: '/modulesManager',
// component: () => import('@/views/ux/basedata/modulesManager/index'),
// name: 'ModulesManager',//命名路由
// meta: {
// title: '模板管理',
// roles: ['SettleAccount.StockUnsettledDiffReports'],//控制页面角色(可以设置多个角色)
// icon: '客户'
// }
// }
]
}
export default basedataRouter
// /** 客户管理路由 */
// //import Layout from '@/layout/firstLayout'
// import Layout from '@/layout'
// const basedataRouter = {
// path: '/centralizedControl',
// component: Layout,
// redirect: '/centralizedControl',
// name: 'basedata',
// //hidden: false,
// meta: {
// //requiresAuth: false,
// title: '基础数据',
// index: 0,
// //type: 'crm',
// icon: '基础数据',
// //keepAlive: false,
// },
// children: [
// {
// path: 'centralizedControl',
// component: () => import('@/views/ux/basedata/centralizedControl/index'),
// name: 'CentralizedControl',//命名路由
// meta: {
// title: '期间设置',
// roles: ['SettleAccount.CentralizedControls'],
// icon: '期间'
// }
// },
// {
// path: 'factory',
// component: () => import('@/views/ux/basedata/factory/index'),
// name: 'Factory',//命名路由
// meta: { title: '工厂设置', roles: ['SettleAccount.Factorys'], icon: '工厂' }
// },
// {
// path: 'codeSetting',
// component: () => import('@/views/ux/basedata/codeSetting/index'),
// name: 'codeSetting',//命名路由
// meta: { title: '通用代码设置', roles: ['SettleAccount.CodeSettings'], icon: '通用' }
// },
// {
// path: 'material',
// component: () => import('@/views/ux/basedata/material/index'),
// name: 'material',//命名路由
// meta: { title: '物料主数据', roles: ['SettleAccount.Materials'], icon: '物料' }
// },
// {
// path: 'customerStorageLocation',
// component: () => import('@/views/ux/basedata/customerStorageLocation/index'),
// name: 'customerStorageLocation',
// meta: {
// title: '客户存储地点',
// roles: ['SettleAccount.CustomerStorageLocations'],
// icon: '客户'
// }
// },
// {
// path: 'partsSettlement',
// component: () => import('@/views/ux/basedata/partsSettlement/index'),
// name: 'partsSettlement',//命名路由
// meta: { title: '零件匹配关系', roles: ['SettleAccount.MaterialRelationships'], icon: '零件' }
// },
// {
// path: 'materialRelationSupplier',
// component: () => import('@/views/ux/basedata/materialRelationSupplier/index'),
// name: 'materialRelationSupplier',//命名路由
// meta: {
// title: '供应商零件设置',
// roles: ['SettleAccount.SupplierItemSetUps'],//控制页面角色(可以设置多个角色)
// icon: '供应商'
// }
// },
// {
// path: 'carMaterialConfig',
// component: () => import('@/views/ux/basedata/carMaterialConfig/index'),
// name: 'CarMaterialConfig',//命名路由
// meta: {
// title: '车型代码与零件匹配',
// roles: ['SettleAccount.CarMaterialConfigs'],//控制页面角色(可以设置多个角色)
// icon: '车型'
// }
// }
// ]
// }
// export default basedataRouter

173
code/WebApp/vue/src/router/modules/benteng-out-data.js

@ -0,0 +1,173 @@
/** 车轮数据比对路由 */
//import Layout from '@/layout/firstLayout'
import Layout from '@/layout'
const BTOutDataRouter = {
path: '/bt',
component: Layout,
redirect: 'bt',
name: '奔腾-数据输出',
meta: {
requiresAuth: true,
title: '奔腾-数据输出',
index: 0,
type: 'crm',
icon: '奔腾',
keepAlive: false,
},
children: [
{
path: '/bt-stockUnsettledDiffReport',
component: () => import('@/views/ux/benteng-out-data/stockUnsettledDiffReport'),
name: 'stockUnsettledDiffReport',//命名路由
meta: {
title: '看板未结数与期末库存差异',
roles: ['SettleAccount.StockUnsettledDiffReports'],
icon: '调整'
}
},
{
path: '/bt-stockSettledDiffReport',
component: () => import('@/views/ux/benteng-out-data/stockSettledDiffReport'),
name: 'stockSettledDiffReport',
meta: {
title: '结算数据对比',
roles: ['SettleAccount.StockSettledDiffReports'],
icon: '结算对比'
}
},
{
path: '/bt-kb-not-consign',
component: () => import('@/views/ux/benteng-out-data/btNotConsignReport'),
name: 'btkbnotconsign',
meta: {
title: '发出未结算',
roles: ['SettleAccount.BTNotConsignReports'],
icon: '未结算'
}
},
{
path: '/bt-stockFisDiffReport',
component: () => import('@/views/ux/benteng-out-data/stockFisDiffReport'),
name: 'stockFisDiffReport',
meta: {
title: '看板发运对比',
roles: ['SettleAccount.StockFisDiffReports'],
icon: '库存对比'
}
},
{
path: '/bt-seq-kb-diff',
component: () => import('@/views/ux/benteng-out-data/btSeqKBDiffReport'),
name: 'btseqkbdiff',
meta: {
title: '车序与看板差异',
roles: ['SettleAccount.BTNotConsignReports'],
icon: '发运对比'
}
}
,
{
path: '/bt-secondaryActuralDiffReport',
component: () => import('@/views/ux/benteng-out-data/secondaryActuralDiffReport'),
name: 'btsecondaryActuralDiffReport',
meta: {
title: '轿车二配相关',
roles: ['SettleAccount.SecondaryReports'],
icon: '二配'
}
}
]
}
export default BTOutDataRouter
// /** 车轮数据比对路由 */
// //import Layout from '@/layout/firstLayout'
// import Layout from '@/layout'
// const BTOutDataRouter = {
// path: '/bt-stockUnsettledDiffReport',
// component: Layout,
// redirect: '/bt-stockUnsettledDiffReport',
// name: '奔腾-数据输出',
// meta: {
// requiresAuth: true,
// title: '奔腾-数据输出',
// index: 0,
// type: 'crm',
// icon: '奔腾',
// keepAlive: false,
// },
// children: [
// {
// path: 'bt-stockUnsettledDiffReport',
// component: () => import('@/views/ux/benteng-out-data/stockUnsettledDiffReport'),
// name: 'stockUnsettledDiffReport',//命名路由
// meta: {
// title: '看板未结数与期末库存差异',
// roles: ['SettleAccount.StockUnsettledDiffReports'],
// icon: '调整'
// }
// },
// {
// path: 'bt-stockSettledDiffReport',
// component: () => import('@/views/ux/benteng-out-data/stockSettledDiffReport'),
// name: 'stockSettledDiffReport',
// meta: {
// title: '结算数据对比',
// roles: ['SettleAccount.StockSettledDiffReports'],
// icon: '结算对比'
// }
// },
// {
// path: 'bt-kb-not-consign',
// component: () => import('@/views/ux/benteng-out-data/btNotConsignReport'),
// name: 'btkbnotconsign',
// meta: {
// title: '发出未结算',
// roles: ['SettleAccount.BTNotConsignReports'],
// icon: '未结算'
// }
// },
// {
// path: 'bt-stockFisDiffReport',
// component: () => import('@/views/ux/benteng-out-data/stockFisDiffReport'),
// name: 'stockFisDiffReport',
// meta: {
// title: '看板发运对比',
// roles: ['SettleAccount.StockFisDiffReports'],
// icon: '库存对比'
// }
// },
// {
// path: 'bt-seq-kb-diff',
// component: () => import('@/views/ux/benteng-out-data/btSeqKBDiffReport'),
// name: 'btseqkbdiff',
// meta: {
// title: '车序与看板差异',
// roles: ['SettleAccount.BTNotConsignReports'],
// icon: '发运对比'
// }
// }
// ,
// {
// path: 'bt-secondaryActuralDiffReport',
// component: () => import('@/views/ux/benteng-out-data/secondaryActuralDiffReport'),
// name: 'btsecondaryActuralDiffReport',
// meta: {
// title: '轿车二配相关',
// roles: ['SettleAccount.SecondaryReports'],
// icon: '二配'
// }
// }
// ]
// }
// export default BTOutDataRouter

63
code/WebApp/vue/src/router/modules/bentengdata.js

@ -0,0 +1,63 @@
/** 车轮数据比对路由 */
//import Layout from '@/layout/firstLayout'
import Layout from '@/layout'
const bentengdataRouter = {
path: '/bt-car-seq',
component: Layout,
redirect: 'bt-car-seq',
name: '奔腾-数据输入',
meta: {
//requiresAuth: true,
title: '奔腾-数据输入',
index: 0,
type: 'crm',
icon: '奔腾',
keepAlive: false,
},
children: [
{
path: '/bt-car-seq',
component: () => import('@/views/ux/benteng/BTCarSeq'),
name: 'btcarseq',//命名路由
meta: {
title: '轿车车序',
roles: ['SettleAccount.BTCarSeqFirsts'],
icon: '轿车车序'
}
},
{
path: '/bt-car-kb',
component: () => import('@/views/ux/benteng/BTCarKB'),
name: 'BTCarKB',
meta: {
title: '轿车看板',
roles: ['SettleAccount.BTCarKBFirsts'],
icon: '看板'
}
},
{
path: '/bt-car-consign',
component: () => import('@/views/ux/benteng/BTCarConsign'),
name: 'BTCarConsign',
meta: {
title: '轿车结算数据',
roles: ['SettleAccount.BTCarConsigns'],
icon: '轿车结算数据'
}
},
{
path: '/secondaryAdjustmentBT',
component: () => import('@/views/ux/benteng/secondaryAdjustment'),
name: 'SecondaryAdjustmentBT',//命名路由
meta: {
title: '奔腾-二配数量调整',
roles: ['SettleAccount.BTCarConsigns'],
icon: '二配'
}
}
]
}
export default bentengdataRouter

44
code/WebApp/vue/src/router/modules/bt_menu.js

@ -1,44 +0,0 @@
//大众-FIS结算-路由
import Layout from '@/layout'
const btcarDataRouter = {
path: '/cpat',
component: Layout,
redirect: 'pg',
name: 'btcar',
//hidden: true,
meta: {
//requiresAuth: true,
title: '一轿奔腾',
index: 0,
type: 'crm',
icon: '单据导入',
keepAlive: false,
},
children: [
{
path: 'hq-car-platform',
component: () => import('@/views/ux/vw/dataInput/hq_bt'),
name: 'ERPEI',//命名路由
meta: {
title: '一轿奔腾导入',
roles: ['SettleAccount.Boms'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: 'hq-car-platform-export',
component: () => import('@/views/ux/vw/dataInput/hq_m'),
name: 'ERPEI',//命名路由
meta: {
title: '一轿奔腾结算核对输出',
//roles: ['SettleAccount.Boms'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
]
}
export default btcarDataRouter

119
code/WebApp/vue/src/router/modules/businessdata.js

@ -1,62 +1,73 @@
/** 数据比对路由 */
/** 业务数据路由 */
//import Layout from '@/layout/firstLayout'
import Layout from '@/layout'
const businessdataRouter = {
path: '/wms-js',
component: Layout,
redirect: 'wms-js',
name: '大众备件结算',
meta: {
//requiresAuth: true,
title: '大众看板备件发货',
index: 0,
type: 'crm',
icon: '业务',
keepAlive: false,
path: '/bomdatabase',
component: Layout,
redirect: 'bomdatabase',
name: 'BomdataBase',
meta: {
//requiresAuth: true,
title: '数据输入',
index: 0,
type: 'crm',
icon: '输入',
keepAlive: false,
},
children: [
{
path: '/bomdatabase',
component: () => import('@/views/ux/basedata/bomdatabase/index'),
name: 'Bomdatabase',//命名路由
meta: {
title: '产品结构',
roles: ['SettleAccount.Boms'],//控制页面角色(可以设置多个角色)
icon: '产品'
}
},
children: [
// {
// path: '/yu-fahuo-kb',
// component: () => import('@/views/ux/businessdata/deliverGoodsDrag'),
// name: 'jfcarkb',//命名路由
// meta: {
// title: '结算与开票数据对比',
// roles: ['SettleAccount.Reports'],
// icon: '发货'
// }
// },
// {
// path: '/jf-car-kb',
// component: () => import('@/views/ux/businessdata/deliverGoods'),
// name: 'jfcarkb',//命名路由
// meta: {
// title: '备件发出未结算数据',
// roles: ['SettleAccount.Reports'],
// icon: '发货'
// }
// },
{
path: '/wms-kanban',
component: () => import('@/views/ux/vw/dataInput/wmsKanban'),
name: 'WMSVWKanBan',
meta: {
title: '大众看板发货明细',
roles: ['SettleAccount.Reports'],
icon: '供货'
}
},
{
path: '/wms-sparepart',
component: () => import('@/views/ux/vw/dataInput/wmsSparePart'),
name: 'WMSSparePart',//命名路由
meta: {
title: '大众备件发货明细',
roles: ['SettleAccount.Reports'],
icon: '客户零件'
}
}
]
{
path: '/inventoryDetail',
component: () => import('@/views/ux/basedata/inventoryDetail/index'),
name: 'inventoryDetail',
meta: {
title: '库存明细',
roles: ['SettleAccount.InventoryDetails'],
icon: '库存'
}
},
{
path: '/estimatedSum',
component: () => import('@/views/ux/basedata/estimatedSum/index'),
name: 'estimatedSum',
meta: {
title: '应付暂估汇总',
roles: ['SettleAccount.EstimatedSums'],
icon: '应付暂估汇总'
}
},
{
path: '/estimatedInventoryDetail',
component: () => import('@/views/ux/basedata/estimatedInventoryDetail/index'),
name: 'estimatedInventoryDetail',
meta: {
title: '应付暂估收货明细',
roles: ['SettleAccount.EstimatedInventoryDetails'],
icon: '应付暂估收货明细'
}
},
{
path: '/secondaryPriceRatio',
component: () => import('@/views/ux/basedata/secondaryPriceRatio/index'),
name: 'secondaryPriceRatio',
meta: {
title: '产品结算价格',
roles: ['SettleAccount.SecondaryPriceRatios'],
icon: '结算'
}
}
]
}
export default businessdataRouter

4
code/WebApp/vue/src/router/modules/first.js

@ -1,5 +1,5 @@
/** 项目管理路由 */
import Layout from '@/layout/firstLayout'
//import Layout from '@/layout/firstLayout'
import basedataRouter from './basedata'
import businessdataRouter from './businessdata'
import wheeldataRouter from './wheeldata'
@ -63,7 +63,7 @@ const customerRouter = {
const fistRouter = {
path: '/first',
component: Layout,
//component: Layout,
redirect: '/first/dashboard',
name: 'first',
hidden: false,

153
code/WebApp/vue/src/router/modules/fis.js

@ -1,153 +0,0 @@
/** 派格fis路由 */
//import Layout from '@/layout/firstLayout'
import Layout from '@/layout'
const pgfis = {
path: '/pg-fis',
component: Layout,
redirect: 'fis',
name: 'pgfis',
meta: {
//requiresAuth: true,
title: 'JIT数据管理',
index: 0,
type: 'crm',
icon: '业务',
keepAlive: false,
},
children: [
{
path: '/customerPartCfg',
component: () => import('@/views/pg-fis/basedate/customerPartCfg'),
name: 'customerPartCfg',//命名路由
meta: {
title: '客户零件管理',
roles: ['SettleAccount.Reports'],
icon: '发货'
}
},
{
path: '/pg-assemblyCfg',
component: () => import('@/views/pg-fis/basedate/assemblyCfg'),
name: 'pg-assemblyCfg',//命名路由
meta: {
title: '总成模块管理',
roles: ['SettleAccount.Reports'],
icon: '发货'
}
},
{
path: '/pg-partSwitch',
component: () => import('@/views/pg-fis/basedate/partSwitch'),
name: 'pg-partSwitch',//命名路由
meta: {
title: '零件切换管理',
roles: ['SettleAccount.Reports'],
icon: '发货'
}
},
{
path: '/pg-unknownAssembly',
component: () => import('@/views/pg-fis/basedate/unknownAssembly'),
name: 'pg-unknownAssembly',//命名路由
meta: {
title: '未知总成模块管理',
roles: ['SettleAccount.Reports'],
icon: '发货'
}
},
{
path: '/pg-workLine',
component: () => import('@/views/pg-fis/basedate/productLine'),
name: 'pg-workLine',
meta: {
title: '生产线权限',
roles: ['SettleAccount.Reports'],
icon: '供货'
}
},
{
path: '/pg-M100BIll',
component: () => import('@/views/pg-fis/basedate/m100BIll'),
name: 'pg-M100BIll',//命名路由
meta: {
title: 'M100单据信息维护',
roles: ['SettleAccount.Reports'],
icon: '客户零件'
}
},
// {
// path: '/pg-M100Online',
// component: () => import('@/views/pg-fis/basedate/m100Online'),
// name: 'pg-M100Online',//命名路由
// meta: {
// title: 'M100上线信息',
// roles: ['SettleAccount.Reports'],
// icon: '客户零件'
// }
// },
// {
// path: '/pg-m100normal-print',
// component: () => import('@/views/pg-fis/basedate/m100Online/normalPritIndex.vue'),
// name: 'pg-M100Online',//命名路由
// meta: {
// title: '日常打印M100信息',
// //roles: ['SettleAccount.Reports'],
// icon: '客户零件'
// }
// },
// {
// path: '/select',
// component: () => import('@/views/pg-fis/basedate/select'),
// name: 'select',//命名路由
// meta: {
// title: 'M100查询',
// roles: ['SettleAccount.Reports'],
// icon: '客户零件'
// }
// },
{
path: '/pg-R100Online',
component: () => import('@/views/pg-fis/basedate/r100Online'),
name: 'pg-R100Online',//命名路由
meta: {
title: 'R100上线信息',
roles: ['SettleAccount.Reports'],
icon: '客户零件'
}
},
{
path: '/pg-weldingAssembly',
component: () => import('@/views/pg-fis/basedate/weldingAssembly'),
name: 'pg-weldingAssembly',//命名路由
meta: {
title: '焊装总装对比',
roles: ['SettleAccount.Reports'],
icon: '客户零件'
}
},
{
path: '/pg-logRemind',
component: () => import('@/views/pg-fis/basedate/logRemind'),
name: 'pg-logRemind',//命名路由
meta: {
title: '系统内通知',
roles: ['SettleAccount.Reports'],
icon: '客户零件'
}
},
{
path: '/pg-repeatR100',
component: () => import('@/views/pg-fis/basedate/repeatR100'),
name: 'pg-repeatR100',//命名路由
meta: {
title: '重复报文',
roles: ['SettleAccount.Reports'],
icon: '客户零件'
}
}
]
}
export default pgfis

44
code/WebApp/vue/src/router/modules/fisprint.js

@ -1,44 +0,0 @@
/** 派格fis路由 */
//import Layout from '@/layout/firstLayout'
import Layout from '@/layout'
const pgfisPrint = {
path: '/pg-fis-print',
component: Layout,
redirect: 'fisprint',
name: 'pgfis',
meta: {
//requiresAuth: true,
title: '排序单打印',
index: 0,
type: 'crm',
icon: '业务',
keepAlive: false,
},
children: [
{
path: '/pg-m100normal-print',
component: () => import('@/views/pg-fis/basedate/m100Online/normalPritIndex.vue'),
name: 'pg-M100Online',//命名路由
meta: {
title: '日常打印M100信息',
//roles: ['SettleAccount.Reports'],
icon: '客户零件'
}
},
{
path: '/select',
component: () => import('@/views/pg-fis/basedate/select'),
name: 'select',//命名路由
meta: {
title: 'M100查询',
//roles: ['SettleAccount.Reports'],
icon: '结算对比'
}
}
]
}
export default pgfisPrint

88
code/WebApp/vue/src/router/modules/hq-out-data.js

@ -0,0 +1,88 @@
/** 车轮数据比对路由 */
//import Layout from '@/layout/firstLayout'
import Layout from '@/layout'
const HQOutDataRouter = {
path: '/hq',
component: Layout,
redirect: 'hq',
name: 'HQ',
meta: {
//requiresAuth: true,
title: '红旗-数据输出',
index: 0,
type: 'crm',
icon: '红旗',
keepAlive: false,
},
children: [
{
path: '/hq-standardUnConsign',
component: () => import('@/views/ux/hq-out-data/standardUnConsign'),
name: 'StandardUnConsign',//命名路由
meta: {
title: '标准看板发出未结算',
roles: ['SettleAccount.HQNotConsignReports'],
icon: '未结算'
}
},
{
path: '/hq-specialUnConsign',
component: () => import('@/views/ux/hq-out-data/specialUnConsign'),
name: 'SpecialUnConsign',
meta: {
title: '特殊看板发出未结算',
roles: ['SettleAccount.HQSPNotConsignReports'],
icon: '结算对比'
}
},
{
path: '/hq-stockFisDiffReport',
component: () => import('@/views/ux/hq-out-data/stockFisDiffReport'),
name: 'StockFisDiffReport',
meta: {
title: '看板发运对比',
roles: ['SettleAccount.HQNotConsignReports'],
icon: '发运对比'
}
},
{
path: '/hq-stockSettledDiffReport',
component: () => import('@/views/ux/hq-out-data/stockSettledDiffReport'),
name: 'StockFisDiffReport',
meta: {
title: '结算数据对比',
roles: ['SettleAccount.HQSPNotConsignReports'],
icon: '结算对比'
}
},
{
path: '/hq-stockUnsettledDiffReport',
component: () => import('@/views/ux/hq-out-data/stockUnsettledDiffReport'),
name: 'stockUnsettledDiffReport',//命名路由
meta: {
title: '看板未结数与期末库存差异',
roles: ['SettleAccount.HQSPNotConsignReports'],
icon: '调整'
}
}
,
{
path: '/bt-secondaryActuralDiffReportHQ',
component: () => import('@/views/ux/hq-out-data/secondaryActuralDiffReport'),
name: 'SecondaryActuralDiffReportHQ',
meta: {
title: '红旗二配相关',
roles: ['SettleAccount.HQSPNotConsignReports'],
icon: '二配'
}
}
]
}
export default HQOutDataRouter

125
code/WebApp/vue/src/router/modules/hq_menu.js

@ -1,125 +0,0 @@
import Layout from '@/layout'
const hqMenudataRouter = {
path: '/capt-hq',
component: Layout,
redirect: 'ux/vw/dataInput/hq_h',
name: 'HQData',
meta: {
title: '红旗工厂',
icon: '红旗',
//roles: ['SettleAccount.HQConsigns', 'SettleAccount.HQSpecConsigns', 'SettleAccount.HQKBs', 'SettleAccount.HQSpecKBs'],
keepAlive: false,
},
children: [
{
path: '/import-h-data',
name: 'import-h-data',//命名路由-二级
component: () => import('@/views/ux/vw/dataInput/hq_h'),
redirect: 'ux/vw/dataInput/hq_h',
meta: {
title: 'H平台',
// roles: ['SettleAccount.HQKBs', 'SettleAccount.HQSpecKBs'],
icon: '看板'
},
children: [
{
path: 'hq-H-platform',
component: () => import('@/views/ux/vw/dataInput/hq_h'),
name: 'ERPEI',//命名路由
meta: {
title: '红旗H平台导入',
roles: ['SettleAccount.Boms'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: 'hq-H-platform-export',
component: () => import('@/views/ux/vw/dataInput/ScrapClaims'),
name: 'ScrapClaims',
meta: {
title: 'H平台结算差异输出',
roles: ['SettleAccount.FISs'],
icon: '文件'
}
}
]
},
{
path: '/export-m-data',
component: () => import('@/views/ux/vw/dataInput/hq_m'),
name: 'export-m-data',//命名路由
redirect: '/ux/vw/dataInput/hq_m',
meta: {
title: 'M平台',
//roles: ['SettleAccount.HQConsigns', 'SettleAccount.HQSpecConsigns'],
icon: '结算'
},
children: [
{
path: 'hq-M-platform',
component: () => import('@/views/ux/vw/dataInput/hq_m'),
name: 'ERPEI',//命名路由
meta: {
title: '红旗M平台导入',
//roles: ['SettleAccount.Boms'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: 'hq-M-platform-export',
component: () => import('@/views/ux/billManage/sparePart'),
name: 'SparePartReport',//命名路由
meta: {
title: 'H平台结算差异输出',
//roles: ['abpvnext_master.ProjectPeople'],//控制页面角色(可以设置多个角色)
icon: '二配'
}
}
]
},
{
path: '/export-f-data',
component: () => import('@/views/ux/vw/dataInput/hq_f'),
name: 'export-f-data',//命名路由
redirect: '/ux/vw/dataInput/hq_f',
meta: {
title: 'F平台',
//roles: ['SettleAccount.HQConsigns', 'SettleAccount.HQSpecConsigns'],
icon: '结算'
},
children: [
{
path: 'hq-F-platform',
component: () => import('@/views/ux/vw/dataInput/hq_f'),
name: 'ERPEI',//命名路由
meta: {
title: '红旗F平台导入',
//roles: ['SettleAccount.Boms'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: 'hq-F-platform-export',
component: () => import('@/views/ux/billManage/sparePart'),
name: 'SparePartReport',//命名路由
meta: {
title: 'F平台结算差异输出',
//roles: ['abpvnext_master.ProjectPeople'],//控制页面角色(可以设置多个角色)
icon: '二配'
}
}
]
}
]
}
export default hqMenudataRouter

64
code/WebApp/vue/src/router/modules/hq_out_order.js

@ -1,64 +0,0 @@
//大众-FIS结算-路由
import Layout from '@/layout'
const hqOutOrderDataRouter = {
path: '/cpat-order',
component: Layout,
redirect: 'pg',
name: '业务数据',
//hidden: true,
meta: {
//requiresAuth: true,
title: '红旗出库单管理',
index: 0,
type: 'crm',
icon: '单据导入',
keepAlive: false,
},
children: [
{
path: 'hq-h-outorder',
component: () => import('@/views/ux/billManage/vwOutOrder/index'),
name: 'SettleAccount',//命名路由
meta: {
title: '大众准时化出库单',
roles: ['SettleAccount.SettleAccounts'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: 'hq-m-outorder',
component: () => import('@/views/ux/billManage/kanbanOutOrder/index'),
name: 'SettleAccount',//命名路由
meta: {
title: '大众看板出库单',
roles: ['SettleAccount.SettleAccounts'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: 'hq-f-withoutorder',
component: () => import('@/views/ux/billManage/kanbanWithOutOrder/index'),
name: 'SettleAccount',//命名路由
meta: {
title: '大众无条码看板出库单',
roles: ['SettleAccount.SettleAccounts'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: 'hq-car-outorder',
component: () => import('@/views/ux/billManage/sparepartOutOrder/index'),
name: 'Invoices',//命名路由
meta: {
title: '大众备件出库单',
roles: ['SettleAccount.Invoices'],
icon: '对比'
}
},
]
}
export default hqOutOrderDataRouter

286
code/WebApp/vue/src/router/modules/hqdata.js

@ -0,0 +1,286 @@
// /** 车轮数据比对路由 */
// //import Layout from '@/layout/firstLayout'
// import Layout from '@/layout'
// const HQdataRouter = {
// path: '/qh-car',
// component: Layout,
// redirect: 'hq-car',
// name: '红旗-数据输入',
// meta: {
// //requiresAuth: true,
// title: '红旗-数据输入',
// // index: 0,
// // type: 'crm',
// icon: '红旗',
// keepAlive: false,
// },
// children: [
// {
// path: 'kanban',
// name: 'hqcarkb',//命名路由
// component: () => import('@/views/ux/hqdata/index'),
// redirect: 'kanban',
// meta: {
// title: '看板输入表',
// icon: '看板'
// },
// children: [
// {
// path: 'standardKanban',
// component: () => import('@/views/ux/hqdata/standardKanban'),
// name: 'StandardKanban',
// meta: {
// title: '标准看板',
// roles: ['SettleAccount.HQKBs'],
// icon: '标准看板'
// }
// },
// {
// path: 'specialKanban',
// component: () => import('@/views/ux/hqdata/specialKanban'),
// name: 'SpecialKanban',
// meta: {
// title: '特殊看板',
// roles: ['SettleAccount.HQSpecKBs'],
// icon: '特殊看板'
// }
// }
// ]
// },
// {
// path: 'jiesuan',
// component: () => import('@/views/ux/hqdata/index'),
// name: 'hqcarjs',//命名路由
// redirect: 'jiesuan',
// meta: {
// title: '结算输入表',
// icon: '结算'
// },
// children: [
// {
// path: 'consign',
// component: () => import('@/views/ux/hqdata/standardConsign'),
// name: 'StandardConsign',
// meta: {
// title: '标准结算数据',
// roles: ['SettleAccount.HQConsigns'],
// icon: '标准看板'
// }
// },
// {
// path: 'spec-consign',
// component: () => import('@/views/ux/hqdata/specialConsign'),
// name: 'SpecialConsign',
// meta: {
// title: '特殊结算数据',
// roles: ['SettleAccount.HQSpecConsigns'],
// icon: '特殊看板'
// }
// }
// ]
// }
// ]
// }
// export default HQdataRouter
import Layout from '@/layout'
// 嵌套路由的使用:第一层
import FirstIndex from '@/views/ux/hqdata/index'
// 嵌套路由的使用:第二层
import SecondJSIndex from '@/views/ux/hqdata/jiesuan/index'
import SecondKBIndex from '@/views/ux/hqdata/kanban/index'
const HQdataRouter = {
path: '/ux/hqdata',
component: Layout,
redirect: 'ux/hqdata/kanban/standardKanban',
name: 'HQData',
meta: {
//requiresAuth: true,
title: '红旗-数据输入',
//index: 0,
// type: 'crm',
icon: '红旗',
roles: ['SettleAccount.HQConsigns', 'SettleAccount.HQSpecConsigns', 'SettleAccount.HQKBs', 'SettleAccount.HQSpecKBs'],
keepAlive: false,
},
children: [
{
path: '/kanban',
name: 'Kanban',//命名路由-二级
component: () => import('@/views/ux/hqdata/index'),
redirect: 'ux/hqdata/kanban/standardKanban',
meta: {
title: '看板输入表',
roles: ['SettleAccount.HQKBs', 'SettleAccount.HQSpecKBs'],
icon: '看板'
},
children: [
{
path: '/standardKanban',
component: () => import('@/views/ux/hqdata/kanban/standardKanban'),
name: 'StandardKanban',
meta: {
title: '标准看板',
roles: ['SettleAccount.HQKBs'],
icon: '标准看板'
}
},
{
path: '/specialKanban',
component: () => import('@/views/ux/hqdata/kanban/specialKanban'),
name: 'SpecialKanban',
meta: {
title: '特殊看板',
roles: ['SettleAccount.HQSpecKBs'],
icon: '特殊看板'
}
}
]
},
{
path: '/jiesuan',
component: () => import('@/views/ux/hqdata/index'),
name: 'Jiesuan',//命名路由
redirect: '/ux/hqdata/jiesuan/standardConsign',
meta: {
title: '结算输入表',
roles: ['SettleAccount.HQConsigns', 'SettleAccount.HQSpecConsigns'],
icon: '结算'
},
children: [
{
path: '/standardConsign',
component: () => import('@/views/ux/hqdata/jiesuan/standardConsign'),
name: 'StandardConsign',
meta: {
title: '标准结算数据',
roles: ['SettleAccount.HQConsigns'],
icon: '标准看板'
}
},
{
path: '/specialConsign',
component: () => import('@/views/ux/hqdata/jiesuan/specialConsign'),
name: 'SpecialConsign',
meta: {
title: '特殊结算数据',
roles: ['SettleAccount.HQSpecConsigns'],
icon: '特殊看板'
}
}
]
},
{
path: '/secondaryAdjustmentHQ',
component: () => import('@/views/ux/hqdata/secondaryAdjustment'),
name: 'SecondaryAdjustmentHQ',//命名路由
meta: {
title: '红旗-二配数量调整',
roles: ['SettleAccount.HQSpecKBs'],
icon: '二配'
}
}
]
}
export default HQdataRouter
// /** 车轮数据比对路由 */
// //import Layout from '@/layout/firstLayout'
// import Layout from '@/layout'
// const HQdataRouter = {
// path: '/hqdata',
// component: Layout,
// redirect: 'qh-car',
// name: 'qh-car',
// meta: {
// //requiresAuth: true,
// title: '红旗-数据输入',
// //index: 0,
// // type: 'crm',
// icon: '红旗',
// keepAlive: false,
// },
// children: [
// {
// path: '/qh-car/kanban',
// name: 'hqcarKB',//命名路由
// component: () => import('@/views/ux/hqdata/kanban/index'),
// redirect: 'kanban',
// meta: {
// title: '看板输入表',
// icon: '看板'
// },
// children: [
// {
// path: '/standardKanban',
// component: () => import('@/views/ux/hqdata/kanban/standardKanban'),
// name: 'StandardKanban',
// meta: {
// title: '标准看板',
// roles: ['SettleAccount.HQKBs'],
// icon: '标准看板'
// }
// },
// {
// path: '/specialKanban',
// component: () => import('@/views/ux/hqdata/kanban/specialKanban'),
// name: '/SpecialKanban',
// meta: {
// title: '特殊看板',
// roles: ['SettleAccount.HQSpecKBs'],
// icon: '特殊看板'
// }
// }
// ]
// },
// {
// path: '/qh-car/jiesuan',
// component: () => import('@/views/ux/hqdata/jiesuan/index'),
// name: 'hqcarjs',//命名路由
// redirect: 'jiesuan',
// meta: {
// title: '结算输入表',
// icon: '结算'
// },
// children: [
// {
// path: '/consign',
// component: () => import('@/views/ux/hqdata/jiesuan/standardConsign'),
// name: 'StandardConsign',
// meta: {
// title: '标准结算数据',
// roles: ['SettleAccount.HQConsigns'],
// icon: '标准看板'
// }
// },
// {
// path: '/spec-consign',
// component: () => import('@/views/ux/hqdata/jiesuan/specialConsign'),
// name: 'SpecialConsign',
// meta: {
// title: '特殊结算数据',
// roles: ['SettleAccount.HQSpecConsigns'],
// icon: '特殊看板'
// }
// }
// ]
// }
// ]
// }
// export default HQdataRouter

133
code/WebApp/vue/src/router/modules/jf-out-data.js

@ -0,0 +1,133 @@
// /** 车轮数据比对路由 */
// //import Layout from '@/layout/firstLayout'
// import Layout from '@/layout'
// const JFOutDataRouter = {
// path: '/jf-out',
// component: Layout,
// redirect: '/jf-out',
// name: '解放-数据输出',
// meta: {
// //requiresAuth: true,
// title: '解放-数据输出',
// index: 0,
// type: 'crm',
// icon: '一汽',
// keepAlive: false,
// },
// children: [
// {
// path: 'jf-stockUnsettledDiffReport',
// component: () => import('@/views/ux/faw-out-data/stockUnsettledDiffReport'),
// name: 'stockUnsettledDiffReport',//命名路由
// meta: {
// title: '未结与期末库存对比',
// roles: ['SettleAccount.StockUnsettledDiffReports'],
// icon: '库存对比'
// }
// },
// {
// path: 'jf-stockSettledDiffReport',
// component: () => import('@/views/ux/faw-out-data/stockSettledDiffReport'),
// name: 'stockSettledDiffReport',
// meta: {
// title: '结算数据对比',
// roles: ['SettleAccount.StockSettledDiffReports'],
// icon: '结算对比'
// }
// },
// {
// path: 'jf-stockFisDiffReport',
// component: () => import('@/views/ux/faw-out-data/stockFisDiffReport'),
// name: 'stockFisDiffReport',
// meta: {
// title: '发运数据对比',
// roles: ['SettleAccount.StockFisDiffReports'],
// icon: '发运对比'
// }
// },
// {
// path: 'jf-kb-not-consign',
// component: () => import('@/views/ux/faw-out-data/jfNotConsignReport'),
// name: 'jfkbnotconsign',
// meta: {
// title: '看板发出未结算',
// roles: ['SettleAccount.JFNotConsignReports'],
// icon: '未结算'
// }
// }
// ]
// }
// export default JFOutDataRouter
/** 车轮数据比对路由 */
//import Layout from '@/layout/firstLayout'
import Layout from '@/layout'
const JFOutDataRouter = {
path: '/jf-out',
component: Layout,
redirect: 'jf-out',
name: '解放-数据输出',
meta: {
//requiresAuth: true,
title: '解放-数据输出',
index: 0,
type: 'crm',
icon: '一汽',
keepAlive: false,
},
children: [
{
path: '/jf-stockUnsettledDiffReport',
component: () => import('@/views/ux/faw-out-data/stockUnsettledDiffReport'),
name: 'stockUnsettledDiffReport',//命名路由
meta: {
title: '未结与期末库存对比',
roles: ['SettleAccount.StockUnsettledDiffReports'],
icon: '库存对比'
}
},
{
path: '/jf-stockSettledDiffReport',
component: () => import('@/views/ux/faw-out-data/stockSettledDiffReport'),
name: 'stockSettledDiffReport',
meta: {
title: '结算数据对比',
roles: ['SettleAccount.StockSettledDiffReports'],
icon: '结算对比'
}
},
{
path: '/jf-stockFisDiffReport',
component: () => import('@/views/ux/faw-out-data/stockFisDiffReport'),
name: 'stockFisDiffReport',
meta: {
title: '发运数据对比',
roles: ['SettleAccount.StockFisDiffReports'],
icon: '发运对比'
}
},
{
path: '/jf-kb-not-consign',
component: () => import('@/views/ux/faw-out-data/jfNotConsignReport'),
name: 'jfkbnotconsign',
meta: {
title: '看板发出未结算',
roles: ['SettleAccount.JFNotConsignReports'],
icon: '未结算'
}
}
]
}
export default JFOutDataRouter

43
code/WebApp/vue/src/router/modules/jfdata.js

@ -0,0 +1,43 @@
/** 车轮数据比对路由 */
//import Layout from '@/layout/firstLayout'
import Layout from '@/layout'
const JFdataRouter = {
path: '/jf-in',
component: Layout,
redirect: 'jf-in',
name: '解放-数据输入',
meta: {
//requiresAuth: true,
title: '解放-数据输入',
index: 0,
type: 'crm',
icon: '一汽',
keepAlive: false,
},
children: [
{
path: '/jf-car-kb',
component: () => import('@/views/ux/fawdata/JFCarKB'),
name: 'jfcarkb',//命名路由
meta: {
title: '解放看板',
roles: ['SettleAccount.JFCarKBs'],
icon: '看板'
}
},
{
path: '/jf-car-consign',
component: () => import('@/views/ux/fawdata/JFCarConsign'),
name: 'JFCarConsign',
meta: {
title: '解放结算数据',
roles: ['SettleAccount.JFCarConsigns'],
icon: '结算'
}
}
]
}
export default JFdataRouter

12
code/WebApp/vue/src/router/modules/jobtimedata.js

@ -19,13 +19,23 @@ const JobTimeDataRouter = {
{
path: '/backGroundWork',
component: () => import('@/views/ux/backGroundWork'),
name: 'BackGroundWork',
name: 'StockFisDiffReport',
meta: {
title: '后台作业监控',
//roles: ['SettleAccount.HQSPNotConsignReports'],
icon: '结算对比'
}
},
{
path: '/druid',
//component: () => import('@/views/ux/hq-out-data/stockUnsettledDiffReport'),
name: 'stockUnsettledDiffReport',//命名路由
meta: {
title: '服务监控',
//roles: ['SettleAccount.HQSPNotConsignReports'],
icon: '调整'
}
}
]
}

95
code/WebApp/vue/src/router/modules/newjit-basedata.js

@ -1,95 +0,0 @@
/** jit路由 */
import Layout from '@/layout'
const newjitRouter = {
path: '/newjit-basedata',
component: Layout,
redirect: 'newjit-basedata',
name: 'Newjit',
//hidden: true,
meta: {
//requiresAuth: true,
title: 'FIS数据管理',
index: 0,
type: 'crm',
icon: '基础数据',
keepAlive: false,
},
children: [
// {
// path: '/excludePartCfgs',
// component: () => import('@/views/newJit/baseData/excludePartCfgs/index'),
// name: 'ExcludePartCfgs',//命名路由
// meta: {
// title: '排除零件配置',
// //roles: [],
// icon: '客户零件'
// }
// },
{
path: '/repeatM100',
component: () => import('@/views/newJit/baseData/repeatR100/index'),
name: 'RepeatM100',//命名路由
meta: {
title: '重复报文查询',
//roles: [],
icon: '期间'
}
},
{
path: '/billM100',
component: () => import('@/views/newJit/baseData/billM100/index'),
name: 'BillM100',//命名路由
meta: {
title: 'M100上线信息',
//roles: [],
icon: '工厂'
}
},
// {
// path: '/billM100Manager',
// component: () => import('@/views/newJit/baseData/billM100Manager/index'),
// name: 'BillM100Manager',//命名路由
// meta: {
// title: 'M100信息管理',
// //roles: [],
// icon: '输入'
// }
// },
{
path: '/assemblyCfg',
component: () => import('@/views/newJit/baseData/assemblyCfg/index'),
name: 'AssemblyCfg',//命名路由
meta: {
title: '总成模块管理',
//roles: [],
icon: '批量'
}
},
{
path: '/unknownAssembly',
component: () => import('@/views/newJit/baseData/unknownAssembly/index'),
name: 'UnknownAssembly',//命名路由
meta: {
title: '未知总成管理',
//roles: [],
icon: '未结算'
}
}
,
{
path: '/logRemind',
component: () => import('@/views/newJit/baseData/logRemind/index'),
name: 'LogRemind',//命名路由
meta: {
title: '系统内通知',
//roles: [],
icon: 'log',
num: 0
}
}
]
}
export default newjitRouter

72
code/WebApp/vue/src/router/modules/vw-out-data.js

@ -0,0 +1,72 @@
/** 大众-数据输出-路由 */
//import Layout from '@/layout/firstLayout'
import Layout from '@/layout'
const vwoutdataRouter = {
path: '/vwout',
component: Layout,
redirect: 'vwout',
name: 'vw-out',
meta: {
title: '大众-数据输出',
index: 0,
icon: '大众'
},
children: [
{
path: '/sendUnsettledDiffReport',
component: () => import('@/views/ux/vw/dataOut/sendUnsettledDiffReport'),
name: 'sendUnsettledDiffReport',//命名路由
meta: { title: 'FIS发出未结算', roles: ['SettleAccount.SendUnsettledDiffReports'], icon: '未结算' }
},
{
path: '/stockFisDiffReport',
component: () => import('@/views/ux/vw/dataOut/stockFisDiffReport'),
name: 'stockFisDiffReport',//命名路由
meta: { title: 'FIS发运数据对比', roles: ['SettleAccount.StockFisDiffReports'], icon: '发运对比' }
},
{
path: '/stockUnsettledDiffReport',
component: () => import('@/views/ux/vw/dataOut/stockUnsettledDiffReport'),
name: 'stockUnsettledDiffReport',//命名路由
meta: { title: 'FIS未结数量与期末对比', roles: ['SettleAccount.StockUnsettledDiffReports'], icon: '库存对比' }
},
{
path: '/stockSettledDiffReport',
component: () => import('@/views/ux/vw/dataOut/stockSettledDiffReport'),
name: 'stockSettledDiffReport',//命名路由
meta: { title: 'R3结算数据对比', roles: ['SettleAccount.StockSettledDiffReports'], icon: '结算对比' }
},
{
path: '/secondaryActuralAdjustmentReport',
component: () => import('@/views/ux/vw/dataOut/secondaryActuralAdjustmentReport'),
hidden: false,
name: 'secondaryActuralAdjustmentReport',
meta: {
title: '实际二配调整后',
roles: ['SettleAccount.SecondaryReports'],
type: 'crm', icon: '调整'
}
},
{
path: '/secondaryActuralDiffReport',
component: () => import('@/views/ux/vw/dataOut/secondaryActuralDiffReport'),
hidden: false,
name: 'secondaryActuralDiffReport',
meta: {
title: '二配对比',
roles: ['SettleAccount.SecondaryReports'],
type: 'crm',icon:'二配对比'
}
},
// {
// path: 'r32',
// component: () => import('@/views/ux/vw/dataOut/fis'),
// name: 'R3',//命名路由
// meta: { title: '二配对比输出表', icon: 'gongyingshang' }
// }
]
}
export default vwoutdataRouter

106
code/WebApp/vue/src/router/modules/vwFisData.js

@ -1,106 +0,0 @@
//大众-FIS结算-路由
import Layout from '@/layout'
const vwFisDataRouter = {
path: '/cpat',
component: Layout,
redirect: 'pg',
name: '业务数据',
//hidden: true,
meta: {
//requiresAuth: true,
title: '大众结算与开票导入',
index: 0,
type: 'crm',
icon: '单据导入',
keepAlive: false,
},
children: [
{
path: 'unsettle-account',
component: () => import('@/views/ux/vw/dataInput/r3-open'),
name: 'SettleAccount',//命名路由
meta: {
title: 'FIS未结算数据导入',
roles: ['SettleAccount.SettleAccounts'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: 'settle-account-finish',
component: () => import('@/views/ux/vw/dataInput/r3'),
name: 'SettleAccount',//命名路由
meta: {
title: 'FIS已结算数据导入',
roles: ['SettleAccount.SettleAccounts'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: 'invoice',
component: () => import('@/views/ux/basedata/Invoice/index'),
name: 'Invoices',//命名路由
meta: {
title: '大众发票汇总导入',
roles: ['SettleAccount.Invoices'],
icon: '对比'
}
},
{
path: 'kan-ban',
component: () => import('@/views/ux/vw/dataInput/vwKanBan/index'),
name: 'VWKanBan',//命名路由
meta: {
title: '看板结算明细导入',
//roles: ['SettleAccount.ItemInvoicePrices'],
icon: '发运'
}
},
{
path: 'scrap-claims',
component: () => import('@/views/ux/vw/dataInput/ScrapClaims'),
name: 'ScrapClaims',
meta: {
title: 'CP7报废和索赔导入',
roles: ['SettleAccount.FISs'],
icon: '文件'
}
},
{
path: 'spare-part',
component: () => import('@/views/ux/vw/dataInput/SparePart'),
name: 'SparePart',//命名路由
meta: {
title: '大众备件结算明细导入',
roles: ['SettleAccount.Boms'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: 'hq-H-platform',
component: () => import('@/views/ux/vw/dataInput/hq_h'),
name: 'ERPEI',//命名路由
meta: {
title: '红旗H平台导入',
roles: ['SettleAccount.Boms'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: 'hq-M-platform',
component: () => import('@/views/ux/vw/dataInput/hq_m'),
name: 'ERPEI',//命名路由
meta: {
title: '红旗M平台导入',
//roles: ['SettleAccount.Boms'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
]
}
export default vwFisDataRouter

56
code/WebApp/vue/src/router/modules/vwKBNoBarcodedata.js

@ -1,56 +0,0 @@
//FIS结算
import Layout from '@/layout'
const vwNoBarcodeRouter = {
path: '/vwnobarcodedata',
component: Layout,
redirect: 'vwnobarcodedata',
name: 'basedata',
//hidden: true,
meta: {
//requiresAuth: true,
title: '大众看板结算(无条码)',
index: 0,
type: 'crm',
icon:'单据导入',
keepAlive: false,
},
children: [
{
path: '/vwr3-js',
component: () => import('@/views/ux/billManage/FisUnSettledDiff'),
name: 'R3js',//命名路由
meta: { title: '发出未结算数据',
//roles: ['abpvnext_master.Customer'],//控制页面角色(可以设置多个角色)
icon: '销售' }
},
{
path: '/settlement',
component: () => import('@/views/ux/billManage/FisUnSettledDiff'),
name: 'FisUnSettledDiff',//命名路由
meta: { title: '定价与结算单价对比',
//roles: ['abpvnext_master.ProjectPeople'],//控制页面角色(可以设置多个角色)
icon: '客户零件' }
},
{
path: '/claimDemage',
component: () => import('@/views/ux/billManage/claimDemage'),
name: 'ClaimDemage',
meta: {
title: '库存与开票数据比对',
icon: '索赔授权'
}
},
{
path: '/settlement',
component: () => import('@/views/ux/billManage/FisUnSettledDiff'),
name: 'FisUnSettledDiff',//命名路由
meta: { title: '开票汇总数据',
//roles: ['abpvnext_master.ProjectPeople'],//控制页面角色(可以设置多个角色)
icon: '客户零件' }
},
]
}
export default vwNoBarcodeRouter

104
code/WebApp/vue/src/router/modules/vwKBdata.js

@ -1,104 +0,0 @@
//FIS结算
import Layout from '@/layout'
const billdataRouter = {
path: '/cpat-report',
component: Layout,
redirect: 'vw-car-kb',
name: 'basedata',
//hidden: true,
meta: {
//requiresAuth: true,
title: '大众结算与开票报表',
index: 0,
type: 'crm',
icon: '销售',
keepAlive: false,
},
children: [
{
path: 'unsettled-detail',//大众准时化未结明细表(包含漏结,漏结要有标识)
component: () => import('@/views/ux/billManage/IssuedUnsettled/index'),
name: 'UnsettledDetail',//命名路由
meta: {
title: '大众准时化未结明细',
roles: ['SettleAccount.Reports'],//控制页面角色(可以设置多个角色)
icon: '报表'
}
},
{
path: 'unsettled-diff',
component: () => import('@/views/ux/billManage/UnSettledDiff/index'),
name: 'UnSettledDiff',//命名路由
meta: {
title: '大众准时化未结比对',
roles: ['SettleAccount.Reports'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: 'unsettle-diff/export',
component: () => import('@/views/ux/billManage/UnSettleDiffExport'),
name: 'UnSettleDiffExport',//命名路由
meta: {
title: '准时化未结差异比对',
roles: ['SettleAccount.Reports'],//控制页面角色(可以设置多个角色)
icon: '售后'
}
},
{
path: 'invoice-settled/diff',
component: () => import('@/views/ux/billManage/InvoiceSettledDiff'),
name: 'InvoiceSettledDiff',//命名路由
meta: {
title: '发票与结算核对汇总',
roles: ['SettleAccount.Reports'],//控制页面角色(可以设置多个角色)
icon: '结算对比'
}
},
{
path: 'invoice-settled/detaildiff',
component: () => import('@/views/ux/billManage/InvoiceSettledDetailDiff'),
name: 'InvoiceSettledDetailDiff',//命名路由
meta: {
title: '发票与结算核对明细',
roles: ['SettleAccount.Reports'],//控制页面角色(可以设置多个角色)
icon: '结算对比'
}
},
// {
// path: 'FisUnSettledDiff',
// component: () => import('@/views/ux/billManage/FisUnSettledDiff'),
// name: 'FisUnSettledDiff',//命名路由
// meta: {
// title: '准时化交货与结算核对',
// roles: ['SettleAccount.Reports'],//控制页面角色(可以设置多个角色)
// icon: '看板'
// }
// },
{
path: 'unInvoice-settled/detailDiff',
component: () => import('@/views/ux/billManage/UnInvoiceSettledDetailDiff'),
name: 'UnInvoiceSettledDetailDiff',//命名路由
meta: {
title: '准时化结算数量差异比对',
roles: ['SettleAccount.Reports'],//控制页面角色(可以设置多个角色)
icon: '售后'
}
},
{
path: 'settle-doorPanel',
component: () => import('@/views/ux/billManage/SettleDoorPanel'),
name: 'SettleDoorPanel',//命名路由
meta: {
title: '准时化结算门板价格差异',
roles: ['SettleAccount.Reports'],//控制页面角色(可以设置多个角色)
icon: '售后'
}
},
]
}
export default billdataRouter

181
code/WebApp/vue/src/router/modules/vw_menu.js

@ -1,181 +0,0 @@
import Layout from '@/layout'
const vwMenudataRouter = {
path: '/capt-vw',
component: Layout,
redirect: 'ux/basedata/Invoice/index',
name: 'HQData',
meta: {
title: '大众工厂',
icon: 'vw',
//roles: ['SettleAccount.HQConsigns', 'SettleAccount.HQSpecConsigns', 'SettleAccount.HQKBs', 'SettleAccount.HQSpecKBs'],
keepAlive: false,
},
children: [
{
path: '/import-data',
name: 'import-data',//命名路由-二级
component: () => import('@/views/ux/billManage/index'),
redirect: 'ux/basedata/Invoice/index',
meta: {
title: '数据导入',
// roles: ['SettleAccount.HQKBs', 'SettleAccount.HQSpecKBs'],
icon: '看板'
},
children: [
{
path: 'invoice',
component: () => import('@/views/ux/basedata/Invoice/index'),
name: 'Invoices',
meta: {
title: '发票汇总',
roles: ['SettleAccount.Invoices'],
icon: '对比'
}
},
{
path: 'settle-account-finish',
component: () => import('@/views/ux/vw/dataInput/r3'),
name: 'SettleAccount',
meta: {
title: 'FIS结算明细',
roles: ['SettleAccount.SettleAccounts'],//控制页面角色(可以设置多个角色)
icon: '库存'
}
},
{
path: 'unsettle-account',
component: () => import('@/views/ux/vw/dataInput/r3'),
name: 'SettleAccount',
meta: {
title: 'FIS未结明细',
roles: ['SettleAccount.SettleAccounts'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: 'kan-ban',
component: () => import('@/views/ux/vw/dataInput/vwKanBan/index'),
name: 'VWKanBan',//命名路由
meta: {
title: '大众看板结算导入',
roles: ['SettleAccount.SettleAccounts'],//控制页面角色(可以设置多个角色)
icon: '看板'
}
},
{
path: 'spare-part',
component: () => import('@/views/ux/vw/dataInput/SparePart'),
name: 'SparePart',//命名路由
meta: {
title: '大众备件结算导入',
roles: ['SettleAccount.Boms'],//控制页面角色(可以设置多个角色)
icon: '工厂'
}
},
{
path: 'scrap-claims',
component: () => import('@/views/ux/vw/dataInput/ScrapClaims'),
name: 'ScrapClaims',
meta: {
title: 'CP7报废和索赔导入',
roles: ['SettleAccount.FISs'],
icon: '文件'
}
},
]
},
{
path: '/export-data',
component: () => import('@/views/ux/billManage/index'),
name: 'export-data',//命名路由
redirect: 'export-data',
meta: {
title: '数据输出',
//roles: ['SettleAccount.HQConsigns', 'SettleAccount.HQSpecConsigns'],
icon: '结算'
},
children: [
{
path: '/invoice-settled/diff',
component: () => import('@/views/ux/billManage/InvoiceSettledDiff'),
name: 'InvoiceSettledDiff',//命名路由
meta: {
title: '发票与结算核对汇总',
roles: ['SettleAccount.Reports'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: '/invoice-settled/detaildiff',
component: () => import('@/views/ux/billManage/InvoiceSettledDetailDiff'),
name: 'InvoiceSettledDetailDiff',//命名路由
meta: {
title: '准时化结算核对明细',
roles: ['SettleAccount.Reports'],//控制页面角色(可以设置多个角色)
icon: '结算对比'
}
},
{
path: '/unInvoice-settled/detailDiff',
component: () => import('@/views/ux/billManage/UnInvoiceSettledDetailDiff'),
name: 'UnInvoiceSettledDetailDiff',//命名路由
meta: {
title: '准时化量差价差输出',
roles: ['SettleAccount.Reports'],//控制页面角色(可以设置多个角色)
icon: '售后'
}
},
{
path: '/unsettle-diff/export',
component: () => import('@/views/ux/billManage/UnSettleDiffExport'),
name: 'UnSettleDiffExport',//命名路由
meta: {
title: '准时化未结核对',
roles: ['SettleAccount.Reports'],//控制页面角色(可以设置多个角色)
icon: '器具'
}
},
{
path: '/unsettled-detail',//大众准时化未结明细表(包含漏结,漏结要有标识)
component: () => import('@/views/ux/billManage/IssuedUnsettled/index'),
name: 'UnsettledDetail',//命名路由
meta: {
title: '准时化未结明细',
roles: ['SettleAccount.Reports'],//控制页面角色(可以设置多个角色)
icon: '报表'
}
},
{
path: '/kbwithcode',
component: () => import('@/views/ux/billManage/kanBanWithCode'),
name: 'KanBanWithCode',//命名路由
meta: {
title: '看板结算输出',
//roles: ['SettleAccount.EstimatedStockDiffReports'],//控制页面角色(可以设置多个角色)
icon: '看板'
}
},
{
path: '/vwsparepart',
component: () => import('@/views/ux/billManage/sparePart'),
name: 'SparePartReport',//命名路由
meta: {
title: '备件结算输出',
//roles: ['abpvnext_master.ProjectPeople'],//控制页面角色(可以设置多个角色)
icon: '供货'
}
}
]
}
]
}
export default vwMenudataRouter

54
code/WebApp/vue/src/router/modules/vw_out_order.js

@ -1,54 +0,0 @@
//大众-FIS结算-路由
import Layout from '@/layout'
const vwOutOrderDataRouter = {
path: '/cpat-order',
component: Layout,
redirect: 'pg',
name: '业务数据',
//hidden: true,
meta: {
//requiresAuth: true,
title: '大众出库单管理',
index: 0,
type: 'crm',
icon: '单据导入',
keepAlive: false,
},
children: [
{
path: 'vw-out-order',
component: () => import('@/views/ux/billManage/vwOutOrder/index'),
name: 'SettleAccount',//命名路由
meta: {
title: '大众准时化出库单',
roles: ['SettleAccount.SettleAccounts'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
{
path: 'kanban-out-order',
component: () => import('@/views/ux/billManage/kanbanOutOrder/index'),
name: 'SettleAccount',//命名路由
meta: {
title: '大众看板出库单',
roles: ['SettleAccount.SettleAccounts'],//控制页面角色(可以设置多个角色)
icon: '结算'
}
},
// {
// path: 'invoice',
// component: () => import('@/views/ux/basedata/Invoice/index'),
// name: 'Invoices',//命名路由
// meta: {
// title: '大众发票汇总导入',
// roles: ['SettleAccount.Invoices'],
// icon: '对比'
// }
// },
]
}
export default vwOutOrderDataRouter

74
code/WebApp/vue/src/router/modules/vwdata.js

@ -0,0 +1,74 @@
//import Layout from '@/layout/firstLayout'
import Layout from '@/layout'
const vwdataRouter = {
path: '/vw-in',
component: Layout,
redirect: 'vw-in',
name: '大众-数据输入',
meta: {
//requiresAuth: true,
title: '大众-数据输入',
index: 0,
type: 'crm',
icon: '大众',
keepAlive: false,
},
children: [
{
path: '/prebatch',
component: () => import('@/views/ux/vw/dataInput/prebatch'),
name: 'Prebatch',
meta: {
title: '预批量输入表',//名称显示 在侧边栏
roles: ['SettleAccount.Prebatchs'],//控制页面角色(可以设置多个角色)
icon: '批量'//图标显示在侧边栏
}
},
{
path: '/fis',
component: () => import('@/views/ux/vw/dataInput/fis'),
name: 'FIS',
meta: {
title: 'FIS文件输入表',
roles: ['SettleAccount.FISs'],
icon: '文件'
}
},
{
path: '/r3',
component: () => import('@/views/ux/vw/dataInput/r3'),
name: 'R3',//命名路由
meta: {
title: 'R3文件输入表',
roles: ['SettleAccount.SettleAccounts'],
icon: 'R3'
}
},
{
path: '/secondaryAdjustment',
component: () => import('@/views/ux/vw/dataInput/secondaryAdjustment'),
name: 'SecondaryAdjustment',//命名路由
meta: {
title: '二配数量调整',
roles: ['SettleAccount.SecondaryAdjustments'],
icon: '二配'
}
},
{
path: '/secondaryDiscount',
component: () => import('@/views/ux/vw/dataInput/secondaryDiscount'),
name: 'SecondaryDiscount',//命名路由
meta: {
title: '二配折扣调整',
roles: ['SettleAccount.SecondaryAdjustments'],
icon: '折扣'
}
},
]
}
export default vwdataRouter

29
code/WebApp/vue/src/router/modules/wheeldata.js

@ -1,15 +1,15 @@
/**大众看板、备件数据比对路由 */
/** 车轮数据比对路由 */
//import Layout from '@/layout/firstLayout'
import Layout from '@/layout'
const wheeldataRouter = {
path: '/cpat/report/',
path: '/wheeldata',
component: Layout,
redirect: 'cpat',//重定向
redirect: 'wheeldata',//重定向
name: 'WheelData',
meta: {
// requiresAuth: true,
title: '大众看板、备件报表',
title: '数据输出',
//index: 0,
// type: 'crm',
icon: '对比',
@ -18,26 +18,15 @@ const wheeldataRouter = {
},
children: [
{
path: 'kbwithcode',
component: () => import('@/views/ux/billManage/kanBanWithCode'),
name: 'KanBanWithCode',//命名路由
path: '/estimatedStockDiffReport',
component: () => import('@/views/ux/vw/dataOut/estimatedStockDiffReport'),
name: 'estimatedStockDiffReport',//命名路由
meta: {
title: '大众看板结算与交货核对',
//roles: ['SettleAccount.EstimatedStockDiffReports'],//控制页面角色(可以设置多个角色)
title: '暂估对比表',
roles: ['SettleAccount.EstimatedStockDiffReports'],//控制页面角色(可以设置多个角色)
icon: '对比'
}
},
{
path: 'vwsparepart',
component: () => import('@/views/ux/billManage/sparePart'),
name: 'SparePartReport',//命名路由
meta: {
title: '大众备件结算核对',
//roles: ['abpvnext_master.ProjectPeople'],//控制页面角色(可以设置多个角色)
icon: '二配'
}
}
]
}

2
code/WebApp/vue/src/settings.js

@ -1,5 +1,5 @@
module.exports = {
title: '长春派格汽车塑料技术有限公司结算管理系统',
title: 'ERP结算分析系统',
/**
* @type {boolean} true | false

3
code/WebApp/vue/src/store/getters.js

@ -30,7 +30,6 @@ const getters = {
userInfo: state => state.user.userInfo,
manage: state => state.user.manage,
manageRouters: state => state.permission.manageRouters,
isLoading:state=>state.app.isLoading,
messageNum: state => state.customer.messageNum,
isLoading:state=>state.app.isLoading
}
export default getters

155
code/WebApp/vue/src/store/modules/app.js

@ -152,3 +152,158 @@ export default {
actions
}
//export default app
// import Cookies from 'js-cookie'
// import { getLanguage } from '@/lang/index'
// const state = {
// sidebar: {
// opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
// withoutAnimation: false,
// activeIndex: ''
// },
// device: 'desktop',
// language: getLanguage(),
// size: Cookies.get('size') || 'medium',
// navbar: {
// activeIndex: '' // 导航目前是第几个 个人中心需要
// },
// logo: '',
// isLoading:null
// }
// const mutations = {
// TOGGLE_SIDEBAR: state => {
// state.sidebar.opened = !state.sidebar.opened
// state.sidebar.withoutAnimation = false
// if (state.sidebar.opened) {
// Cookies.set('sidebarStatus', 1)
// } else {
// Cookies.set('sidebarStatus', 0)
// }
// },
// CLOSE_SIDEBAR: (state, withoutAnimation) => {
// Cookies.set('sidebarStatus', 0)
// state.sidebar.opened = false
// state.sidebar.withoutAnimation = withoutAnimation
// },
// TOGGLE_DEVICE: (state, device) => {
// state.device = device
// },
// SET_LANGUAGE: (state, language) => {
// state.language = language
// Cookies.set('language', language)
// },
// SET_SIZE: (state, size) => {
// state.size = size
// Cookies.set('size', size)
// },
// SET_ACTIVEINDEX: (state, path) => {
// state.sidebar.activeIndex = path
// },
// SET_NAVACTIVEINDEX: (state, path) => {
// state.navbar.activeIndex = path
// },
// }
// const actions = {
// toggleSideBar({ commit }) {
// commit('TOGGLE_SIDEBAR')
// },
// closeSideBar({ commit }, { withoutAnimation }) {
// commit('CLOSE_SIDEBAR', withoutAnimation)
// },
// toggleDevice({ commit }, device) {
// commit('TOGGLE_DEVICE', device)
// },
// setLanguage({ commit }, language) {
// commit('SET_LANGUAGE', language)
// },
// setSize({ commit }, size) {
// commit('SET_SIZE', size)
// }
// }
// const app = {
// // namespaced: true,
// state: {
// sidebar: {
// opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true,
// withoutAnimation: false,
// activeIndex: ''
// },
// device: 'desktop',
// language: getLanguage(),
// size: Cookies.get('size') || 'medium',
// navbar: {
// activeIndex: '' // 导航目前是第几个 个人中心需要
// },
// logo: '',
// isLoading:null
// },
// mutations: {
// TOGGLE_SIDEBAR: state => {
// state.sidebar.opened = !state.sidebar.opened
// state.sidebar.withoutAnimation = false
// if (state.sidebar.opened) {
// Cookies.set('sidebarStatus', 1)
// } else {
// Cookies.set('sidebarStatus', 0)
// }
// },
// CLOSE_SIDEBAR: (state, withoutAnimation) => {
// Cookies.set('sidebarStatus', 0)
// state.sidebar.opened = false
// state.sidebar.withoutAnimation = withoutAnimation
// },
// TOGGLE_DEVICE: (state, device) => {
// state.device = device
// },
// SET_LANGUAGE: (state, language) => {
// state.language = language
// Cookies.set('language', language)
// },
// SET_SIZE: (state, size) => {
// state.size = size
// Cookies.set('size', size)
// },
// SET_ACTIVEINDEX: (state, path) => {
// state.sidebar.activeIndex = path
// },
// SET_NAVACTIVEINDEX: (state, path) => {
// state.navbar.activeIndex = path
// },
// setLoading(state, isLoading) {
// // console.log(isLoading);
// state.isLoading = isLoading;
// }
// },
// actions: {
// toggleSideBar({ commit }) {
// commit('TOGGLE_SIDEBAR')
// },
// closeSideBar({ commit }, { withoutAnimation }) {
// commit('CLOSE_SIDEBAR', withoutAnimation)
// },
// toggleDevice({ commit }, device) {
// commit('TOGGLE_DEVICE', device)
// },
// setLanguage({ commit }, language) {
// commit('SET_LANGUAGE', language)
// },
// setSize({ commit }, size) {
// commit('SET_SIZE', size)
// },
// onLoading(state, isLoading) {
// state.commit('setLoading', isLoading);
// }
// }
// }
// // export default {
// // namespaced: true,
// // state,
// // mutations,
// // actions
// // }
// export default app

59
code/WebApp/vue/src/store/modules/customer.js

@ -1,59 +0,0 @@
import axiosMethods from '../../axios/index.js'
/**
* 消息记录
*/
const app = {
state: {
// 待办事项消息
messageNum: {
todayCustomer: 0,
followLeads: 0,
followCustomer: 0,
checkContract: 0,
checkReceivables: 0,
remindReceivablesPlan: 0,
endContract: 0,
totalCount: 0
}
},
mutations: {
/**
* 更改待办事项
*/
SET_MESSAGENUM: (state, messageNum) => {
let totalCount = 0
for (const key in messageNum) {
if (key != 'totalCount') {
totalCount += (messageNum[key] || 0)
}
}
messageNum.totalCount = totalCount
state.messageNum = messageNum
}
},
actions: {
// 登录
GetMessageNum({
commit
}) {
return new Promise((resolve, reject) => {
axiosMethods.gets("/api/newjit/log-remind/getlist")
.then(response => {
commit('SET_MESSAGENUM', response.totalCount)
//commit('SET_CRMROUTERSNUM', response.totalCount)
resolve(response)
})
.catch(error => {
reject(error)
})
})
}
}
}
export default app

23
code/WebApp/vue/src/store/modules/permission.js

@ -1,7 +1,7 @@
import { asyncRoutes, constantRoutes } from '@/router'
import {asyncRoutes, constantRoutes} from '@/router'
import Layout from "@/layout/index";
import axiosMethods from "../../axios";
import router, { resetRouter } from '@/router'
import router, {resetRouter} from '@/router'
/**
*
@ -45,7 +45,7 @@ function checkAuth(router, authInfo) {
* @param {*} routers
* @param {*} authInfo
*/
const filterAsyncRouter = function (routers, authInfo) {
const filterAsyncRouter = function(routers, authInfo) {
const res = []
routers.forEach(router => {
const tmp = {
@ -83,7 +83,7 @@ function hasPermission(roles, route) {
export function filterAsyncRoutes(routes, roles) {
const res = []
routes.forEach(route => {
const tmp = { ...route }
const tmp = {...route}
if (hasPermission(roles, tmp)) {
if (tmp.children) {
tmp.children = filterAsyncRoutes(tmp.children, roles)
@ -120,24 +120,15 @@ const mutations = {
const element = routes[index]
if (element.name == 'first') {
state.firstRouters = element
} else if (element.name == 'manager') {
}else if (element.name == 'manager') {
state.manageRouters = element
}
}
},
/**
* 客户管理待办消息数
*/
// SET_CRMROUTERSNUM: (state, num) => {
// const messageItem = state.routes.children[1]
// alert(messageItem)
// messageItem.meta.num = num
// Vue.set(state.routes.children, 1, messageItem)
// }
}
}
const actions = {
generateRoutes({ commit }, roles) {
generateRoutes({commit}, roles) {
return new Promise(resolve => {
let accessedRoutes
if (roles.includes('admin')) {

51
code/WebApp/vue/src/store/modules/user.js

@ -77,7 +77,7 @@ const actions = {
userLogin({commit}, data) { // 用户登录
return new Promise((resolve, reject) => {
axiosMethods.instancePosts('/connect/token', data)
axiosMethods.instancePosts('/api/connect-token', data)
.then(response => {
commit('SET_TOKEN', response.access_token)
//token存缓存中
@ -122,6 +122,55 @@ const actions = {
})
})
},
// userLogin({commit}, data) { // 用户登录
// return new Promise((resolve, reject) => {
// axiosMethods.instancePosts('/connect/token', data)
// .then(response => {
// commit('SET_TOKEN', response.access_token)
// //token存缓存中
// Lockr.set('Admin-Token', response.access_token)
// let userInfoCurrent = {
// "deptName": "",
// "img": "",
// "createTime": "",
// "lastLoginTime": "",
// "num": "",
// "sex": null,
// "mobile": "",
// "realname": "",
// "parentName": null,
// "post": "",
// "userId": 3,
// "parentId": 0,
// "lastLoginIp": "",
// "deptId": '',
// "email": null,
// "username": "",
// "status": ''
// }
// //获取登录人信息
// axiosMethods.gets('/api/base/user/current').then(response => {
// userInfoCurrent['username']=response.userName
// userInfoCurrent['realname']=response.userName
// userInfoCurrent['email']=response.email
// userInfoCurrent['mobile']=response.phoneNumber
// userInfoCurrent['userId']=response.id
// //userInfo 前端写在vuex中
// commit('SET_USERINFO', userInfoCurrent)
// //userInfo 存缓存中
// Lockr.set('loginUserInfo', userInfoCurrent)
// //alert(JSON.stringify(Lockr.get("loginUserInfo").userId))
// })
// setToken(response.access_token)
// resolve()
// }).catch((error) => {
// reject(error)
// })
// })
// },
// get user info
getInfo({commit}) {
return new Promise((resolve, reject) => {

2
code/WebApp/vue/src/styles/sidebar.scss

@ -54,7 +54,7 @@
}
.svg-icon {
margin-right: 16px;
margin-right: 5px;
}
.el-menu {

1
code/WebApp/vue/src/utils/crmindex.js

@ -443,7 +443,6 @@ export function downloadFile(res, fileName) {
});
}
export function downloadFileV1(res, fileName) {
if (!res) {
return

45
code/WebApp/vue/src/utils/dom.js

@ -1,45 +0,0 @@
/**
* 功能dom绑定事件
* 参数element(dom节点)
* event(事件名称)
* handler(回调)
*返回
* */
export const on = (function() {
if (document.addEventListener) {
return function(element, event, handler) {
if (element && event && handler) {
element.addEventListener(event, handler, false)
}
}
} else {
return function(element, event, handler) {
if (element && event && handler) {
element.attachEvent('on' + event, handler)
}
}
}
})()
/**
* 功能移除dom绑定的事件
* 参数element(dom节点)
* event(事件名称)
* handler(回调函数)
* 返回
* */
export const off = (function() {
if (document.removeEventListener) {
return function(element, event, handler) {
if (element && event) {
element.removeEventListener(event, handler, false)
}
}
} else {
return function(element, event, handler) {
if (element && event) {
element.detachEvent('on' + event, handler)
}
}
}
})()

139
code/WebApp/vue/src/views/PersonCenter/components/EditPassword.vue

@ -5,65 +5,62 @@
:visible.sync="showDialog"
:before-close="hiddenView"
title="编辑密码"
width="500px">
width="500px"
>
<el-form
ref="ruleForm"
:model="ruleForm"
ref="form"
:model="form"
:rules="rules"
label-width="80px"
label-position="top">
<el-form-item
label="原密码"
prop="oldPwd">
<el-input v-model="ruleForm.currentPassword"/>
label-position="top"
>
<el-form-item label="原密码" prop="currentPassword">
<el-input v-model="form.currentPassword" />
</el-form-item>
<el-form-item
label="新密码"
prop="password">
<el-input v-model="ruleForm.newPassword" />
<el-form-item label="新密码" prop="newPassword">
<el-input v-model="form.newPassword" />
</el-form-item>
</el-form>
<span
slot="footer"
class="dialog-footer">
<el-button
type="primary"
@click="save"> </el-button>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="save"> </el-button>
<el-button @click="hiddenView"> </el-button>
</span>
</el-dialog>
</template>
<script type="text/javascript">
import { mapGetters } from 'vuex'
import { adminUsersResetPassword } from '@/api/personCenter/personCenter'
import { removeAuth } from '@/utils/auth'
import { mapGetters } from "vuex";
import { adminUsersResetPassword } from "@/api/personCenter/personCenter";
import { removeAuth } from "@/utils/auth";
import permission from "@/directive/permission/index.js";
function validCase(str) {
var re =/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{6,}$/;
return re.test(str);
var re = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{6,}$/;
return re.test(str);
}
const validateNameInput = (rule, value, callback) => {
if (!value || value <= 0) {
return callback(new Error('此项必填!'))
return callback(new Error("此项必填!"));
}
// else if (!validCase(value)) {
// callback(new Error("., ('a'-'z')., ('A'-'Z')."));
// }
else {
callback()
callback();
}
}
};
const ruleForm = {
currentPassword: "",
newPassword: "",
};
export default {
name: 'EditPassword', //
name: "EditPassword", //
components: {},
directives: { permission },
props: {
show: {
type: Boolean,
default: false
}
default: false,
},
},
data() {
return {
@ -71,71 +68,69 @@ export default {
showDialog: false,
rules: {
currentPassword: [
{ required: true, message: '请输入原密码', trigger: 'blur' },
{ min: 6, max: 12, message: '长度在 6 到 12 个字符', trigger: 'blur' }
{ required: true, message: "请输入原密码", trigger: "blur" },
{
min: 6,
max: 12,
message: "长度在 6 到 12 个字符",
trigger: "blur",
},
],
newPassword: [
{ required: true, trigger: 'blur' ,validator: validateNameInput },
{ min: 6, max: 12, message: '长度在 6 到 12 个字符', trigger: 'blur' }
]
{ required: true, trigger: "blur", validator: validateNameInput },
{
min: 6,
max: 12,
message: "长度在 6 到 12 个字符",
trigger: "blur",
},
],
},
ruleForm: {
"currentPassword": "",
"newPassword": ""
}
}
form: Object.assign({}, ruleForm),
};
},
computed: {
...mapGetters(['userInfo'])
...mapGetters(["userInfo"]),
},
watch: {
show: {
handler(val) {
this.showDialog = val
//this.ruleForm.id = this.userInfo.id
this.$nextTick(() => {
this.$refs["form"].resetFields();
});
this.showDialog = val;
},
deep: true,
immediate: true
}
immediate: true,
},
},
mounted() {},
methods: {
hiddenView() {
this.$emit('close')
this.$emit("close");
},
save() {
this.$refs.ruleForm.validate(valid => {
this.$refs.form.validate((valid) => {
if (valid) {
this.loading = true
//this.ruleForm['userName']=this.userInfo.username
//this.ruleForm['email']=this.userInfo.email
// adminUsersResetPassword(this.userInfo.userId,this.ruleForm)
// .then(res => {
// this.loading = false
// this.$emit('close')
// })
// .catch(() => {
// this.loading = false
// })
adminUsersResetPassword(this.ruleForm)
.then(res => {
this.loading = false
this.loading = true;
adminUsersResetPassword(this.form)
.then((res) => {
this.loading = false;
setTimeout(() => {
this.$message.success('修改成功')
this.$emit('close')
}, 200)
this.$message.success("修改成功");
this.$emit("close");
}, 200);
})
.catch(() => {
this.loading = false
})
this.loading = false;
});
} else {
return false
return false;
}
})
}
}
}
});
},
},
};
</script>
<style lang="scss" scoped>
</style>

6
code/WebApp/vue/src/views/PersonCenter/index.vue

@ -101,11 +101,11 @@ export default {
showEditPassword: false,
list: [
{ name: '姓名', props: 'realname' },
{ name: '性别', props: 'sex' },
{ name: '电话', props: 'phonenumber' },
{ name: '登录名', props: 'username' },
{ name: '邮箱', props: 'email' },
{ name: '部门', props: 'deptName' },
{ name: '岗位', props: 'post' },
// { name: '', props: 'deptName' },
// { name: '', props: 'post' },
// { name: '', props: 'parentName' }
]
}

9
code/WebApp/vue/src/views/SystemOrgUserRole/index.vue

@ -246,9 +246,14 @@
this.getList();
},
methods: {
getList() {
getList(data) {
this.listLoading = true;
this.listQuery.SkipCount = (this.page - 1) * 10;
// this.listQuery.SkipCount = (this.page - 1) * 10;
if (data != undefined) {
this.listQuery.SkipCount = (this.page - 1) * data.limit;
} else {
this.listQuery.SkipCount = (this.page - 1) * 15;
}
this.$axios
.gets("/api/base/userOrgRole/all", this.listQuery)
.then(response => {

598
code/WebApp/vue/src/views/SystemOrgUserRole/model/CrmRelativeProduct.vue

@ -6,11 +6,13 @@
v-model="listQuery.Filter"
placeholder="按名称搜索..."
@keyup.enter.native="handleFilter"
class="search-container">
class="search-container"
>
<el-button
slot="append"
icon="el-icon-search"
@click.native="handleFilter"/>
@click.native="handleFilter"
/>
</el-input>
</flexbox>
<el-table
@ -25,12 +27,14 @@
style="width: 100%"
@select-all="selectAll"
@selection-change="handleSelectionChange"
@row-click="handleRowClick">
@row-click="handleRowClick"
>
<el-table-column
show-overflow-tooltip
type="selection"
align="center"
width="55"/>
width="55"
/>
<el-table-column
v-for="(item, index) in fieldList"
:key="index"
@ -38,353 +42,361 @@
:label="item.name"
:width="150"
:formatter="fieldFormatter"
show-overflow-tooltip/>
<el-table-column/>
show-overflow-tooltip
/>
<el-table-column />
</el-table>
<div class="table-footer">
<el-button
:disabled="currentPage <= 1"
@click.native="changePage('up')">上一页
<el-button :disabled="currentPage <= 1" @click.native="changePage('up')"
>上一页
</el-button>
<el-button
:disabled="currentPage >= totalPage"
@click.native="changePage('down')">下一页
@click.native="changePage('down')"
>下一页
</el-button>
</div>
<div class="handle-bar">
<el-button @click.native="closeView">取消</el-button>
<el-button
type="primary"
@click.native="confirmClick">确定
</el-button>
<el-button type="primary" @click.native="confirmClick">确定 </el-button>
</div>
</div>
</template>
<script type="text/javascript">
//
const projectTypeOptions = [
{ key: 0, display_name: "个" },
{ key: 1, display_name: "套" },
{ key: 2, display_name: "次" },
{ key: 3, display_name: "人天" },
];
const projectTypeKeyValue = projectTypeOptions.reduce((acc, cur) => {
acc[cur.key] = cur.display_name;
return acc;
}, {});
//
const projectTypeOptions = [
{key: 0, display_name: '个'},
{key: 1, display_name: '套'},
{key: 2, display_name: '次'},
{key: 3, display_name: '人天'}
]
const projectTypeKeyValue = projectTypeOptions.reduce((acc, cur) => {
acc[cur.key] = cur.display_name
return acc
}, {})
export default {
name: 'CrmRelativeProduct', // CRMCell
props: {
/** 多选框 只能选一个 */
radio: {
type: Boolean,
default: true
export default {
name: "CrmRelativeProduct", // CRMCell
props: {
/** 多选框 只能选一个 */
radio: {
type: Boolean,
default: true,
},
/** 已选信息 */
selectedData: {
type: Object,
default: () => {
return {};
},
/** 已选信息 */
selectedData: {
type: Object,
default: () => {
return {}
}
},
/** 已选信息 */
filedString: {
type: String,
default: () => {
return "";
},
/** 已选信息 */
filedString: {
type: String,
default: () => {
return ''
}
}
},
data() {
return {
loading: false, //
isCreate: false, //
list: [], //
fieldList: [], //
currentPage: 1, //
totalPage: 1, //
otherItems: [],
page: 1,
listQuery: {
Filter: "",
Sorting: "",
SkipCount: 0,
MaxResultCount: 10
},
selectedItem: [] //
},
data() {
return {
loading: false, //
isCreate: false, //
list: [], //
fieldList: [], //
currentPage: 1, //
totalPage: 1, //
otherItems: [],
page: 1,
listQuery: {
Filter: "",
Sorting: "",
SkipCount: 0,
MaxResultCount: 10,
},
selectedItem: [], //
};
},
computed: {},
watch: {
//
selectedData: function () {
this.checkItemsWithSelectedData();
},
},
mounted() {
//
this.getFieldList();
},
created() {},
methods: {
/** 格式化字段 */
fieldFormatter(row, column) {
//
if (column.property === "unit") {
return this.typeFilter(row[column.property]);
}
return row[column.property] || "--";
},
typeFilter(type) {
return projectTypeKeyValue[type];
},
/**
* 刷新列表
*/
refreshList() {
this.currentPage = 1;
this.getList();
},
computed: {},
watch: {
//
selectedData: function () {
this.checkItemsWithSelectedData()
/** 获取字段 */
getFieldList() {
if (this.fieldList.length == 0) {
this.fieldList = this.getDefaultField();
}
if (this.filedString == "user") {
this.fieldList = this.getUserField();
} else if (this.filedString == "org") {
this.fieldList = this.getOrgField();
}
//
this.getList();
},
mounted() {//
this.getFieldList();
/** 获取列表请求 */
getDefaultField() {
return [
{ name: "产品编码", field: "code", formType: "text" },
{ name: "产品名称", field: "name", formType: "text" },
{ name: "规格", field: "model", formType: "text" },
{ name: "单位", field: "unit", formType: "text" },
{ name: "单价(元)", field: "price", formType: "text" },
];
},
created() {
getUserField() {
return [
{ name: "用户名", field: "userName", formType: "text" },
{ name: "所属机构", field: "orgIdToName", formType: "text" },
{ name: "邮箱", field: "email", formType: "text" },
{ name: "电话", field: "phoneNumber", formType: "text" },
];
},
methods: {
/** 格式化字段 */
fieldFormatter(row, column) {
//
if (column.property === 'unit') {
return this.typeFilter(row[column.property])
}
return row[column.property] || '--'
},
typeFilter(type) {
return projectTypeKeyValue[type]
},
/**
* 刷新列表
*/
refreshList() {
this.currentPage = 1
this.getList()
},
/** 获取字段 */
getFieldList() {
if (this.fieldList.length == 0) {
this.fieldList = this.getDefaultField();
}
if (this.filedString == 'user') {
this.fieldList = this.getUserField();
} else if (this.filedString == 'org') {
this.fieldList = this.getOrgField();
}
//
this.getList();
},
/** 获取列表请求 */
getDefaultField() {
return [
{name: '产品编码', field: 'code', formType: 'text'},
{name: '产品名称', field: 'name', formType: 'text'},
{name: '规格', field: 'model', formType: 'text'},
{name: '单位', field: 'unit', formType: 'text'},
{name: '单价(元)', field: 'price', formType: 'text'}
]
},
getUserField() {
return [
{name: '用户名', field: 'userName', formType: 'text'},
{name: '所属机构', field: 'orgIdToName', formType: 'text'},
{name: '邮箱', field: 'email', formType: 'text'},
{name: '电话', field: 'phoneNumber', formType: 'text'}
]
},
getOrgField() {
return [
{name: '机构名称', field: 'name', formType: 'text'},
{name: '全称', field: 'fullName', formType: 'text'},
{name: '排序', field: 'sort', formType: 'text'},
{name: '机构类型', field: 'categoryId', formType: 'text'},
]
},
/** 获取列表数据 */
getList() {
this.loading = true
this.listQuery.SkipCount = (this.page - 1) * 10;
this.list = [];
if (this.filedString == 'user') {
this.$axios.gets("/api/base/user", this.listQuery).then(response => {
getOrgField() {
return [
{ name: "机构名称", field: "name", formType: "text" },
{ name: "全称", field: "fullName", formType: "text" },
{ name: "排序", field: "sort", formType: "text" },
{ name: "机构类型", field: "categoryId", formType: "text" },
];
},
/** 获取列表数据 */
getList(data) {
this.loading = true;
//this.listQuery.SkipCount = (this.page - 1) * 10;
if (data != undefined) {
this.listQuery.SkipCount = (this.page - 1) * data.limit;
} else {
this.listQuery.SkipCount = (this.page - 1) * 15;
}
this.list = [];
if (this.filedString == "user") {
this.$axios
.gets("/api/base/user", this.listQuery)
.then((response) => {
this.list = response.items;
this.totalPage = response.totalCount;
this.loading = false;
})
.catch(() => {
this.loading = false
});
} else if (this.filedString == 'org') {
this.$axios.gets("/api/base/branch/paged", this.listQuery).then(response => {
.catch(() => {
this.loading = false;
});
} else if (this.filedString == "org") {
this.$axios
.gets("/api/base/branch/paged", this.listQuery)
.then((response) => {
this.list = response.items;
this.totalPage = response.totalCount;
this.loading = false;
})
.catch(() => {
this.loading = false
});
}
},
/** 获取列表数据 */
getOrgList() {
this.loading = true
this.listQuery.SkipCount = (this.page - 1) * 10;
this.list = [];
this.$axios.gets("/api/base/branch/paged", this.listQuery).then(response => {
.catch(() => {
this.loading = false;
});
}
},
/** 获取列表数据 */
getOrgList(data) {
this.loading = true;
//this.listQuery.SkipCount = (this.page - 1) * 10;
if (data != undefined) {
this.listQuery.SkipCount = (this.page - 1) * data.limit;
} else {
this.listQuery.SkipCount = (this.page - 1) * 15;
}
this.list = [];
this.$axios
.gets("/api/base/branch/paged", this.listQuery)
.then((response) => {
this.list = response.items;
this.totalPage = response.totalCount;
this.loading = false;
})
.catch(() => {
this.loading = false
});
},
//
checkItemsWithSelectedData() {
const selectedArray = this.selectedData.map(item => {
item.has = false
return item
})
const selectedRows = []
this.otherItems = []
.catch(() => {
this.loading = false;
});
},
//
checkItemsWithSelectedData() {
const selectedArray = this.selectedData.map((item) => {
item.has = false;
return item;
});
this.list.forEach((item, index) => {
selectedArray.forEach((selectedItem, selectedIndex) => {
if (item['Id'] == selectedItem['Id']) {
selectedItem.has = true
selectedRows.push(item)
}
})
})
const selectedRows = [];
this.otherItems = [];
this.list.forEach((item, index) => {
selectedArray.forEach((selectedItem, selectedIndex) => {
if (!selectedItem.has) {
this.otherItems.push(selectedItem)
if (item["Id"] == selectedItem["Id"]) {
selectedItem.has = true;
selectedRows.push(item);
}
})
});
});
this.$nextTick(() => {
this.$refs.relativeTable.clearSelection()
selectedRows.forEach(row => {
this.$refs.relativeTable.toggleRowSelection(row, true)
})
})
},
/** 列表操作 */
//
handleRowClick(row, column, event) {
},
//
handleSelectionChange(val) {
/** 单选逻辑 */
if (this.radio) {
// this.$refs.relativeTable.clearSelection();
val.forEach((row, index) => {
if (index === val.length - 1) return
this.$refs.relativeTable.toggleRowSelection(row, false)
})
if (val.length === 0) {
this.selectedItem = []
} else {
this.selectedItem = val.length === 1 ? val : [val[val.length - 1]]
}
} else {
this.selectedItem = this.otherItems.concat(val)
selectedArray.forEach((selectedItem, selectedIndex) => {
if (!selectedItem.has) {
this.otherItems.push(selectedItem);
}
});
// this.$emit('changeCheckout', {
// data: this.selectedItem
//})
},
clearAll() {
this.$refs.relativeTable.clearSelection()
},
// Checkbox
selectAll() {
},
//
searchInput() {
this.currentPage = 1
this.totalPage = 1
this.getList()
},
changePage(type) {
if (type == 'up') {
this.currentPage = this.currentPage - 1
} else if (type == 'down') {
this.currentPage = this.currentPage + 1
}
if (this.currentPage <= this.totalPage && this.currentPage >= 1) {
this.getList()
this.$nextTick(() => {
this.$refs.relativeTable.clearSelection();
selectedRows.forEach((row) => {
this.$refs.relativeTable.toggleRowSelection(row, true);
});
});
},
/** 列表操作 */
//
handleRowClick(row, column, event) {},
//
handleSelectionChange(val) {
/** 单选逻辑 */
if (this.radio) {
// this.$refs.relativeTable.clearSelection();
val.forEach((row, index) => {
if (index === val.length - 1) return;
this.$refs.relativeTable.toggleRowSelection(row, false);
});
if (val.length === 0) {
this.selectedItem = [];
} else {
this.selectedItem = val.length === 1 ? val : [val[val.length - 1]];
}
},
//
closeView() {
this.$emit('close')
},
//
confirmClick() {
this.$emit('changeCheckout', {data: this.selectedItem})
this.$emit('close')
},
handleFilter() {
this.page = 1;
} else {
this.selectedItem = this.otherItems.concat(val);
}
// this.$emit('changeCheckout', {
// data: this.selectedItem
//})
},
clearAll() {
this.$refs.relativeTable.clearSelection();
},
// Checkbox
selectAll() {},
//
searchInput() {
this.currentPage = 1;
this.totalPage = 1;
this.getList();
},
changePage(type) {
if (type == "up") {
this.currentPage = this.currentPage - 1;
} else if (type == "down") {
this.currentPage = this.currentPage + 1;
}
if (this.currentPage <= this.totalPage && this.currentPage >= 1) {
this.getList();
},
}
}
}
},
//
closeView() {
this.$emit("close");
},
//
confirmClick() {
this.$emit("changeCheckout", { data: this.selectedItem });
this.$emit("close");
},
handleFilter() {
this.page = 1;
this.getList();
},
},
};
</script>
<style lang="scss" scoped>
.cr-body-content {
position: relative;
background-color: white;
border-bottom: 1px solid #e6e6e6;
}
.cr-body-content {
position: relative;
background-color: white;
border-bottom: 1px solid #e6e6e6;
}
.content-header {
position: relative;
padding: 10px 0px;
.content-header {
position: relative;
padding: 10px 0px;
.search-container {
margin: 0 20px;
width: 200px;
}
.create-button {
position: absolute;
right: 10px;
top: 15px;
}
.search-container {
margin: 0 20px;
width: 200px;
}
//
.table-footer {
padding: 8px 20px;
.create-button {
position: absolute;
right: 10px;
top: 15px;
}
}
.el-table /deep/ thead th {
font-weight: 400;
font-size: 12px;
}
//
.table-footer {
padding: 8px 20px;
}
.el-table /deep/ tbody tr td {
font-size: 12px;
}
.el-table /deep/ thead th {
font-weight: 400;
font-size: 12px;
}
.el-table /deep/ thead .el-checkbox {
display: none;
}
.el-table /deep/ tbody tr td {
font-size: 12px;
}
body .el-table th.gutter {
display: table-cell !important;
}
.el-table /deep/ thead .el-checkbox {
display: none;
}
.el-table /deep/ .el-table__body-wrapper {
height: calc(100% - 48px) !important;
}
body .el-table th.gutter {
display: table-cell !important;
}
.el-table /deep/ .el-table__body-wrapper {
height: calc(100% - 48px) !important;
}
.handle-bar {
height: 50px;
position: absolute;
bottom: 0;
left: 0;
right: 0;
z-index: 2;
.handle-bar {
height: 50px;
position: absolute;
bottom: 0;
left: 0;
right: 0;
z-index: 2;
button {
float: right;
margin-top: 10px;
margin-right: 10px;
}
button {
float: right;
margin-top: 10px;
margin-right: 10px;
}
}
</style>

524
code/WebApp/vue/src/views/dashboard/admin/components/PanelGroup.vue

@ -6,10 +6,13 @@
<svg-icon icon-class="peoples" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">
库存总数
</div>
<count-to :start-val="0" :end-val="totalCount" :duration="2600" class="card-panel-num" />
<div class="card-panel-text">库存总数</div>
<count-to
:start-val="0"
:end-val="totalCount"
:duration="2600"
class="card-panel-num"
/>
<span class="card-panel-text"></span>
</div>
</div>
@ -20,10 +23,13 @@
<svg-icon icon-class="shopping" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">
暂估汇总
</div>
<count-to :start-val="0" :end-val="totalCountContract" :duration="2600" class="card-panel-num" />
<div class="card-panel-text">暂估汇总</div>
<count-to
:start-val="0"
:end-val="totalCountContract"
:duration="2600"
class="card-panel-num"
/>
<span class="card-panel-text"></span>
</div>
</div>
@ -37,10 +43,13 @@
<svg-icon icon-class="money" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">
合同金额/
</div>
<count-to :start-val="0" :end-val="totalAmount" :duration="3000" class="card-panel-num" />
<div class="card-panel-text">合同金额/</div>
<count-to
:start-val="0"
:end-val="totalAmount"
:duration="3000"
class="card-panel-num"
/>
</div>
</div>
</el-col>
@ -50,10 +59,13 @@
<svg-icon icon-class="job" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">
待开票/
</div>
<count-to :start-val="0" :end-val="totalInvoicedAmountAmount" :duration="3200" class="card-panel-num" />
<div class="card-panel-text">待开票/</div>
<count-to
:start-val="0"
:end-val="totalInvoicedAmountAmount"
:duration="3200"
class="card-panel-num"
/>
</div>
</div>
</el-col>
@ -66,10 +78,13 @@
<svg-icon icon-class="org" class-name="card-panel-icon" />
</div>
<div class="card-panel-description">
<div class="card-panel-text">
待回款/
</div>
<count-to :start-val="0" :end-val="totalhuikuanAmount" :duration="3600" class="card-panel-num" />
<div class="card-panel-text">待回款/</div>
<count-to
:start-val="0"
:end-val="totalhuikuanAmount"
:duration="3600"
class="card-panel-num"
/>
</div>
</div>
</el-col>
@ -77,271 +92,288 @@
</template>
<script>
import CountTo from 'vue-count-to'
import CountTo from "vue-count-to";
export default {
components: {
CountTo
},
data() {
return {
listCards3: [
{
image: require('@/assets/customer_images/Money_icon.png'),
title: '合同总额',
description: '描述',
price:'300'
}
],
listCards4: [
{
image: require('@/assets/customer_images/kaipiaoxinxi.png'),
title: '待开票总额',
price:'400'
}
],
listCards5: [
{
image: require('@/assets/customer_images/huikuan.png'),
title: '待回款总额',
price:'400'
}
],
listCards1: [
{
image: require('@/assets/customer_images/leijixiangmushu.png'),//
title: '项目数',
description: '描述'
}
],
listCards2: [
{
image: require('@/assets/customer_images/hetong.png'),
title: '合同数',
description: '描述'
}
],
elementLoadingText: "正在加载...",
options: [
{
value: "0",
label: "项目列表日志",
},
{
value: "1",
label: "附件列表日志",
},
],
value:"0",
newsList: [],
paginationLog: {
total: 0,
page: 1,
pageSize: 10,
export default {
components: {
CountTo,
},
data() {
return {
listCards3: [
{
image: require("@/assets/customer_images/Money_icon.png"),
title: "合同总额",
description: "描述",
price: "300",
},
],
listCards4: [
{
image: require("@/assets/customer_images/kaipiaoxinxi.png"),
title: "待开票总额",
price: "400",
},
],
listCards5: [
{
image: require("@/assets/customer_images/huikuan.png"),
title: "待回款总额",
price: "400",
},
],
listCards1: [
{
image: require("@/assets/customer_images/leijixiangmushu.png"), //
title: "项目数",
description: "描述",
},
form: {},
activeName: 'first',
list: null,
// headDetails: [
// { title: '', value: '' },
// { title: '', value: '' },
// { title: '', value: '' }
// ],
listContracts:null,
listPaymentAmount:null,
paymentAmout1:[],
paymentAmout2:[],
paymentAmout3:[],
fileList:[],
checkCustomer:[],
customerList:[],
totalCount: 0,
totalCountContract:0,
totalFileCount: 0,
listLoading: true,
formLoading: false,
propsCustomerId:"",
listQuery: {
Sorting: "",
SkipCount: 0,
MaxResultCount: 10
],
listCards2: [
{
image: require("@/assets/customer_images/hetong.png"),
title: "合同数",
description: "描述",
},
listQueryImg: {
CustomerId: "",
Sorting: "",
SkipCount: 0,
MaxResultCount: 10
],
elementLoadingText: "正在加载...",
options: [
{
value: "0",
label: "项目列表日志",
},
{
value: "1",
label: "附件列表日志",
},
],
value: "0",
newsList: [],
paginationLog: {
total: 0,
page: 1,
pageFiles: 1,
pageImg: 1,
multipleSelection: [],
formTitle: "",
isEdit: false,
activeNames: ['1']
};
},
created() {
this.getList();
this.getContractList();
this.getAmount();
},
computed:{
totalAmount(){//
let totalAmountAll=0;
this.paymentAmout3.map((item)=>{totalAmountAll+=item.totalAmount})
return totalAmountAll;
pageSize: 10,
},
totalInvoicedAmountAmount(){//
let invoAmount=0;
this.paymentAmout1.map((item)=>{invoAmount+=item.invoicedAmount})
return invoAmount;
form: {},
activeName: "first",
list: null,
// headDetails: [
// { title: '', value: '' },
// { title: '', value: '' },
// { title: '', value: '' }
// ],
listContracts: null,
listPaymentAmount: null,
paymentAmout1: [],
paymentAmout2: [],
paymentAmout3: [],
fileList: [],
checkCustomer: [],
customerList: [],
totalCount: 0,
totalCountContract: 0,
totalFileCount: 0,
listLoading: true,
formLoading: false,
propsCustomerId: "",
listQuery: {
Sorting: "",
SkipCount: 0,
MaxResultCount: 10,
},
totalhuikuanAmount(){//
let hkAmount=0;
this.paymentAmout1.map((item)=>{hkAmount+=item.huikuanAmount})
return hkAmount;
listQueryImg: {
CustomerId: "",
Sorting: "",
SkipCount: 0,
MaxResultCount: 10,
},
page: 1,
pageFiles: 1,
pageImg: 1,
multipleSelection: [],
formTitle: "",
isEdit: false,
activeNames: ["1"],
};
},
created() {
this.getList();
this.getContractList();
this.getAmount();
},
computed: {
totalAmount() {
//
let totalAmountAll = 0;
this.paymentAmout3.map((item) => {
totalAmountAll += item.totalAmount;
});
return totalAmountAll;
},
totalInvoicedAmountAmount() {
//
let invoAmount = 0;
this.paymentAmout1.map((item) => {
invoAmount += item.invoicedAmount;
});
return invoAmount;
},
totalhuikuanAmount() {
//
let hkAmount = 0;
this.paymentAmout1.map((item) => {
hkAmount += item.huikuanAmount;
});
return hkAmount;
},
},
methods: {
handleSetLineChartData(type) {
this.$emit("handleSetLineChartData", type);
},
getList(data) {
//
this.listLoading = true;
if (data != undefined) {
this.listQuery.SkipCount = (this.page - 1) * data.limit;
} else {
this.listQuery.SkipCount = (this.page - 1) * 15;
}
// this.$axios.gets("/api/abpvnext_master/project/all", this.listQuery).then(response => {
// this.totalCount = response.totalCount;
// });
},
methods: {
handleSetLineChartData(type) {
this.$emit('handleSetLineChartData', type)
},
getList() {//
this.listLoading = true;
this.listQuery.SkipCount = (this.page - 1) * 10;
// this.$axios.gets("/api/abpvnext_master/project/all", this.listQuery).then(response => {
// this.totalCount = response.totalCount;
// });
},
getContractList() {//
this.listLoading = true;
this.listQuery.SkipCount = (this.page - 1) * 10;
// this.$axios.gets("/api/abpvnext_master/contract/all", this.listQuery).then(response => {
// this.listContracts = response.items;
// this.totalCountContract = response.totalCount;//
// this.paymentAmout3=[];
// this.paymentAmout3=this.listContracts;//
// });
},
getAmount() {//
this.listLoading = true;
this.listQuery.SkipCount = (this.page - 1) * 10;
// this.$axios.gets("/api/abpvnext_master/customer/GetAmount", this.listQuery).then(response => {
// this.paymentAmout1=[];
// this.paymentAmout1=response.items;
// });
},
}
}
getContractList() {
//
this.listLoading = true;
this.listQuery.SkipCount = (this.page - 1) * 10;
// this.$axios.gets("/api/abpvnext_master/contract/all", this.listQuery).then(response => {
// this.listContracts = response.items;
// this.totalCountContract = response.totalCount;//
// this.paymentAmout3=[];
// this.paymentAmout3=this.listContracts;//
// });
},
getAmount() {
//
this.listLoading = true;
this.listQuery.SkipCount = (this.page - 1) * 10;
// this.$axios.gets("/api/abpvnext_master/customer/GetAmount", this.listQuery).then(response => {
// this.paymentAmout1=[];
// this.paymentAmout1=response.items;
// });
},
},
};
</script>
<style lang="scss" scoped>
.panel-group {
margin-top: 18px;
.card-panel-col {
margin-bottom: 32px;
}
.card-panel {
height: 108px;
cursor: pointer;
font-size: 12px;
position: relative;
overflow: hidden;
color: #666;
background: #fff;
box-shadow: 4px 4px 40px rgba(0, 0, 0, .05);
border-color: rgba(0, 0, 0, .05);
&:hover {
.card-panel-icon-wrapper {
color: #fff;
}
.icon-people {
background: #40c9c6;
}
.panel-group {
margin-top: 18px;
.icon-message {
background: #36a3f7;
}
.card-panel-col {
margin-bottom: 32px;
}
.icon-money {
background: #f4516c;
}
.card-panel {
height: 108px;
cursor: pointer;
font-size: 12px;
position: relative;
overflow: hidden;
color: #666;
background: #fff;
box-shadow: 4px 4px 40px rgba(0, 0, 0, 0.05);
border-color: rgba(0, 0, 0, 0.05);
.icon-shopping {
background: #34bfa3
}
&:hover {
.card-panel-icon-wrapper {
color: #fff;
}
.icon-people {
color: #40c9c6;
background: #40c9c6;
}
.icon-message {
color: #36a3f7;
background: #36a3f7;
}
.icon-money {
color: #f4516c;
background: #f4516c;
}
.icon-shopping {
color: #34bfa3
background: #34bfa3;
}
}
.card-panel-icon-wrapper {
float: left;
margin: 14px 0 0 14px;
padding: 16px;
transition: all 0.38s ease-out;
border-radius: 6px;
}
.icon-people {
color: #40c9c6;
}
.card-panel-icon {
float: left;
font-size: 48px;
}
.icon-message {
color: #36a3f7;
}
.card-panel-description {
float: center;
font-weight: bold;
margin: 26px;
margin-left: 0px;
.icon-money {
color: #f4516c;
}
.card-panel-text {
line-height: 18px;
color: rgba(0, 0, 0, 0.45);
font-size: 16px;
margin-bottom: 12px;
}
.icon-shopping {
color: #34bfa3;
}
.card-panel-num {
font-size: 20px;
}
}
.card-panel-icon-wrapper {
float: left;
margin: 14px 0 0 14px;
padding: 16px;
transition: all 0.38s ease-out;
border-radius: 6px;
}
}
@media (max-width:550px) {
.card-panel-description {
display: none;
.card-panel-icon {
float: left;
font-size: 48px;
}
.card-panel-icon-wrapper {
float: none !important;
width: 100%;
height: 100%;
margin: 0 !important;
.card-panel-description {
float: center;
font-weight: bold;
margin: 26px;
margin-left: 0px;
.svg-icon {
display: block;
margin: 14px auto !important;
float: none !important;
.card-panel-text {
line-height: 18px;
color: rgba(0, 0, 0, 0.45);
font-size: 16px;
margin-bottom: 12px;
}
.card-panel-num {
font-size: 20px;
}
}
}
}
@media (max-width: 550px) {
.card-panel-description {
display: none;
}
.card-panel-icon-wrapper {
float: none !important;
width: 100%;
height: 100%;
margin: 0 !important;
.svg-icon {
display: block;
margin: 14px auto !important;
float: none !important;
}
}
}
</style>

131
code/WebApp/vue/src/views/employee/index.vue

@ -21,7 +21,7 @@
:expand-on-click-node="false"
lazy
@node-click="handleNodeClick"
style="margin-top:15px"
style="margin-top: 15px"
/>
</el-col>
<el-col :xs="15" :sm="18" :md="19" :lg="20" :xl="20">
@ -32,7 +32,7 @@
clearable
size="small"
placeholder="搜索..."
style="width: 200px;"
style="width: 200px"
class="filter-item"
@keyup.enter.native="handleFilter"
/>
@ -42,8 +42,9 @@
type="success"
icon="el-icon-search"
@click="handleFilter"
>搜索</el-button>
<div style="padding: 6px 0;">
>搜索</el-button
>
<div style="padding: 6px 0">
<el-button
class="filter-item"
size="mini"
@ -51,7 +52,8 @@
icon="el-icon-plus"
@click="handleCreate"
v-permission="['AbpIdentity.Users.Create']"
>新增</el-button>
>新增</el-button
>
<el-button
class="filter-item"
size="mini"
@ -59,7 +61,8 @@
icon="el-icon-edit"
v-permission="['AbpIdentity.Users.Update']"
@click="handleUpdate()"
>修改</el-button>
>修改</el-button
>
<el-button
slot="reference"
class="filter-item"
@ -68,7 +71,8 @@
size="mini"
v-permission="['AbpIdentity.Users.Delete']"
@click="handleDelete()"
>删除</el-button>
>删除</el-button
>
</div>
</div>
<el-dialog
@ -100,7 +104,7 @@
v-model="form.orgId"
:load-options="loadOrgs"
:options="orgs"
style="width: 184px;"
style="width: 184px"
placeholder="选择所属机构"
/>
</el-form-item>
@ -113,7 +117,12 @@
v-model="form.jobs"
placeholder="选择岗位"
>
<el-option v-for="item in jobData" :key="item.id" :label="item.name" :value="item.id" />
<el-option
v-for="item in jobData"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
<el-form-item label="关联用户" prop="userId">
@ -121,9 +130,13 @@
v-model="form.userIdToName"
readonly
placeholder="请选择"
style="width: 184px;"
style="width: 184px"
>
<el-button slot="append" icon="el-icon-search" @click="handleSelectUser()"></el-button>
<el-button
slot="append"
icon="el-icon-search"
@click="handleSelectUser()"
></el-button>
</el-input>
</el-form-item>
<el-form-item label="性别" prop="gender">
@ -132,7 +145,7 @@
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="状态" style="margin:left" prop="enabled">
<el-form-item label="状态" style="margin: left" prop="enabled">
<el-radio-group v-model="form.enabled" style="width: 140px">
<el-radio :label="true">启用</el-radio>
<el-radio :label="false">禁用</el-radio>
@ -141,7 +154,13 @@
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="small" type="text" @click="cancel">取消</el-button>
<el-button size="small" v-loading="formLoading" type="primary" @click="save">确认</el-button>
<el-button
size="small"
v-loading="formLoading"
type="primary"
@click="save"
>确认</el-button
>
</div>
</el-dialog>
@ -157,7 +176,7 @@
size="small"
v-model="listQuery.Filter"
placeholder="搜索..."
style="width: 200px;"
style="width: 200px"
class="filter-item"
@keyup.enter.native="userHandleFilter"
/>
@ -167,7 +186,8 @@
type="primary"
icon="el-icon-search"
@click="userHandleFilter"
>搜索</el-button>
>搜索</el-button
>
</div>
<el-table
@ -176,19 +196,24 @@
height="300"
@row-click="userHandleRowClick"
>
<el-table-column label="用户名" prop="userName" align="center" width="150px">
<template slot-scope="{row}">
<span class="link-type">{{row.userName}}</span>
<el-table-column
label="用户名"
prop="userName"
align="center"
width="150px"
>
<template slot-scope="{ row }">
<span class="link-type">{{ row.userName }}</span>
</template>
</el-table-column>
<el-table-column label="邮箱" align="center" width="200px">
<template slot-scope="scope">
<span>{{scope.row.email}}</span>
<span>{{ scope.row.email }}</span>
</template>
</el-table-column>
<el-table-column label="电话" align="center" width="200px">
<template slot-scope="scope">
<span>{{scope.row.phoneNumber}}</span>
<span>{{ scope.row.phoneNumber }}</span>
</template>
</el-table-column>
</el-table>
@ -206,35 +231,43 @@
v-loading="listLoading"
:data="list"
size="small"
style="width: 90%;"
style="width: 90%"
@sort-change="sortChange"
@selection-change="handleSelectionChange"
@row-click="handleRowClick"
>
<el-table-column type="selection" width="44px"></el-table-column>
<el-table-column label="岗位名称" prop="name" sortable="custom" align="center" width="150px">
<template slot-scope="{row}">
<span class="link-type" @click="handleUpdate(row)">{{row.name}}</span>
<el-table-column
label="岗位名称"
prop="name"
sortable="custom"
align="center"
width="150px"
>
<template slot-scope="{ row }">
<span class="link-type" @click="handleUpdate(row)">{{
row.name
}}</span>
</template>
</el-table-column>
<el-table-column label="性别" prop="gender" align="center">
<template slot-scope="scope">
<span>{{scope.row.gender | displayGender}}</span>
<span>{{ scope.row.gender | displayGender }}</span>
</template>
</el-table-column>
<el-table-column label="电话" prop="phone" align="center">
<template slot-scope="scope">
<span>{{scope.row.phone}}</span>
<span>{{ scope.row.phone }}</span>
</template>
</el-table-column>
<el-table-column label="邮箱" prop="email" align="center">
<template slot-scope="scope">
<span>{{scope.row.email}}</span>
<span>{{ scope.row.email }}</span>
</template>
</el-table-column>
<el-table-column label="所属机构" prop="orgIdToName" align="center">
<template slot-scope="scope">
<span>{{scope.row.orgIdToName}}</span>
<span>{{ scope.row.orgIdToName }}</span>
</template>
</el-table-column>
<!-- <el-table-column label="关联用户" prop="userId" align="center">
@ -248,12 +281,12 @@
v-model="scope.row.enabled"
active-color="#409EFF"
inactive-color="#F56C6C"
@change="changeEnabled(scope.row, scope.row.enabled,)"
@change="changeEnabled(scope.row, scope.row.enabled)"
/>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="125">
<template slot-scope="{row}">
<template slot-scope="{ row }">
<el-button
type="primary"
size="mini"
@ -265,7 +298,7 @@
type="danger"
size="mini"
@click="handleDelete(row)"
:disabled="row.userName==='admin'"
:disabled="row.userName === 'admin'"
v-permission="['AbpIdentity.Users.Delete']"
icon="el-icon-delete"
/>
@ -274,7 +307,7 @@
</el-table>
<pagination
v-show="totalCount>0"
v-show="totalCount > 0"
:total="totalCount"
:page.sync="page"
:limit.sync="listQuery.MaxResultCount"
@ -344,7 +377,7 @@ export default {
orgName: "",
orgs: [],
orgData: [],
jobData:[],
jobData: [],
userList: null,
totalCount: 0,
listLoading: true,
@ -380,20 +413,22 @@ export default {
}
//TODO:
setTimeout(() => {
this.$axios
.gets("/api/base/branch/all", params)
.then((response) => {
if (resolve) {
resolve(response.items);
} else {
this.orgData = response.items;
}
});
this.$axios.gets("/api/base/branch/all", params).then((response) => {
if (resolve) {
resolve(response.items);
} else {
this.orgData = response.items;
}
});
}, 100);
},
getList() {
getList(data) {
this.listLoading = true;
this.listQuery.SkipCount = (this.page - 1) * 10;
if (data != undefined) {
this.listQuery.SkipCount = (this.page - 1) * data.limit;
} else {
this.listQuery.SkipCount = (this.page - 1) * 15;
}
this.$axios
.gets("/api/base/employee/all", this.listQuery)
.then((response) => {
@ -479,9 +514,13 @@ export default {
});
});
},
getUserList() {
getUserList(data) {
this.userListLoading = true;
this.listQuery.SkipCount = (this.page - 1) * 10;
if (data != undefined) {
this.listQuery.SkipCount = (this.page - 1) * data.limit;
} else {
this.listQuery.SkipCount = (this.page - 1) * 15;
}
this.$axios
.gets("/api/identity/users", this.listQuery)
.then((response) => {

9
code/WebApp/vue/src/views/job/index.vue

@ -197,9 +197,14 @@ export default {
this.getList();
},
methods: {
getList() {
getList(data) {
this.listLoading = true;
this.listQuery.SkipCount = (this.page - 1) * 10;
//this.listQuery.SkipCount = (this.page - 1) * 10;
if (data != undefined) {
this.listQuery.SkipCount = (this.page - 1) * data.limit;
} else {
this.listQuery.SkipCount = (this.page - 1) * 15;
}
this.$axios
.gets("/api/base/job/all", this.listQuery)
.then(response => {

9
code/WebApp/vue/src/views/log/index.vue

@ -103,9 +103,14 @@ export default {
this.getList();
},
methods:{
getList() {
getList(data) {
this.listLoading = true;
this.listQuery.SkipCount = (this.page - 1) * 10;
//this.listQuery.SkipCount = (this.page - 1) * 10;
if (data != undefined) {
this.listQuery.SkipCount = (this.page - 1) * data.limit;
} else {
this.listQuery.SkipCount = (this.page - 1) * 15;
}
this.$axios
.gets("/api/base/auditLogging/all", this.listQuery)
.then(response => {

14
code/WebApp/vue/src/views/login/index.vue

@ -1,18 +1,14 @@
<template>
<div class="wrapper">
<div class="left">
<div class="container"><span class="one">SAS/JIT-长春派格汽车塑料技术有限公司结算管理系统</span><span class="two"></span></div>
<!-- <div class="container"><span class="one">闻荫科技-长春派格结算管理系统</span><span class="two"></span></div> -->
<div class="container"><span class="one">闻荫科技-ERP结算分析系统</span><span class="two"></span></div>
<div class="left-pic"/>
<div class="">
<div class="copyright">
长春市闻荫科技
<a
target="_blank"
href="http://www.ccwin-in.com">©2021 闻荫科技-长春派格结算管理系统</a>
href="http://www.ccwin-in.com">©2021 闻荫科技-ERP结算分析系统</a>
</div>
</div>
</div>
@ -26,7 +22,7 @@
label-position="left"
>
<div class="title-container">
<h3 class="title"><span style="color:#f98a05">用户</span><span style="color:#555555">{{ $t('login.title') }}</span></h3>
<h3 class="title"><span style="color:#f98a05">会员</span><span style="color:#555555">{{ $t('login.title') }}</span></h3>
<lang-select class="set-language" />
</div>
@ -119,7 +115,7 @@ export default {
tenant: undefined,
username: "",
password: "",
//org:'',
org:'',
client_id: config.client.client_id,
client_secret: config.client.client_secret,
grant_type: config.client.grant_type,
@ -227,7 +223,7 @@ export default {
<style lang="scss">
$dark_gray: #ccc;
$light_gray: rgb(15, 13, 13);
$light_gray: #333;
$login_theme: #00aaee;
$bg:#283443;

642
code/WebApp/vue/src/views/newJit/baseData/assemblyCfg/index.vue

@ -1,642 +0,0 @@
<!--总成模块信息管理页-->
<template>
<div class="cr-body-content">
<flexbox class="content-header">
<el-form
:model="listQuery"
ref="queryForm"
v-show="showSearch"
:inline="true"
>
<!-- <el-form-item>
<el-button
class="filter-item"
size="mini"
type="primary"
icon="el-icon-plus"
@click="handleCreate"
>新增
</el-button>
</el-form-item> -->
<el-form-item label="总成名称" prop="ErpAssemblyName ">
<el-input
v-model="listQuery.ErpAssemblyName"
placeholder="请输入总成名称"
clearable
size="small"
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="总成编码" prop="ErpAssemblyCode ">
<el-input
v-model="listQuery.ErpAssemblyCode"
placeholder="请输入总成编码"
clearable
size="small"
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleFilter"
>搜索</el-button
>
<el-button
icon="el-icon-refresh"
size="mini"
@click="resetQuery('queryForm')"
>重置</el-button
>
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
style="margin-left: 15px"
@click="handleDownload()"
>导出(Excel)
</el-button>
</el-form-item>
</el-form>
</flexbox>
<div class="l-table">
<!--表格渲染-->
<el-table
ref="multipleTable"
v-loading="listLoading"
element-loading-text="拼命加载中..."
element-loading-spinner="el-icon-loading"
class="cr-table"
:data="list"
:height="tableHeight"
:cell-style="cellStyle"
:header-cell-style="headerRowStyle"
size="small"
stripe
border
highlight-current-row
style="width: 100%"
@sort-change="sortChange"
@selection-change="handleSelectionChange"
@row-click="handleRowClick"
>
<!-- <el-table-column
label="ERP总成名称"
prop="erpAssemblyName"
sortable="custom"
align="center"
width="420px"
>
<template slot-scope="scope">
<span class="link-type" @click="handleDrawerOpen(scope.row)">{{
scope.row.erpAssemblyName
}}</span>
</template>
</el-table-column>
<el-table-column
label="ERP总成编码"
prop="erpAssemblyCode "
sortable="custom"
align="center"
>
<template slot-scope="scope">
<span>{{ scope.row.erpAssemblyCode }}</span>
</template>
</el-table-column> -->
<el-table-column
label="ERP总成编码"
prop="erpAssemblyCode"
sortable="custom"
align="center"
width="420px"
>
<template slot-scope="scope">
<span class="link-type" @click="handleDrawerOpen(scope.row)">{{
scope.row.erpAssemblyCode
}}</span>
</template>
</el-table-column>
<el-table-column
label="ERP总成名称"
prop="erpAssemblyName "
sortable="custom"
align="center"
>
<template slot-scope="scope">
<span>{{ scope.row.erpAssemblyName }}</span>
</template>
</el-table-column>
<el-table-column
label="ERP总成版本"
prop="erpAssemblyVersion "
sortable="custom"
align="center"
>
<template slot-scope="scope">
<span>{{ scope.row.erpAssemblyVersion }}</span>
</template>
</el-table-column>
</el-table>
<!--表单渲染-->
<el-dialog
:visible.sync="dialogFormVisible"
:close-on-click-modal="false"
:title="formTitle"
width="700px"
>
<el-form
ref="form"
:inline="true"
:model="form"
:rules="rules"
size="small"
label-width="120px"
>
<el-row>
<el-col :md="4" :xs="24">
<el-form-item label="ERP总成名称" required />
</el-col>
<el-col :md="8" :xs="24">
<el-form-item prop="erpAssemblyName ">
<el-input
style="width: 150px"
v-model="form.erpAssemblyName"
:disabled="isEdit"
/>
</el-form-item>
</el-col>
<el-col :md="4" :xs="24">
<el-form-item
style="width: 150px"
label="是否覆盖原版本"
required
/>
</el-col>
<el-col :md="8" :xs="24">
<el-form-item prop="isCover ">
<el-switch
v-model="form.isCover"
active-color="#409EFF"
inactive-color="#F56C6C"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="text" @click="dialogFormVisible = false"
>取消</el-button
>
<el-button v-loading="formLoading" type="primary" @click="save"
>确认</el-button
>
</div>
</el-dialog>
</div>
<div class="table-footer">
<!-- 分页控件 style="margin-top: -25px;margin-bottom:-25px;float:right;"-->
<pagination
v-show="totalCount > 0"
:total="totalCount"
:page.sync="page"
:limit.sync="listQuery.MaxResultCount"
@pagination="getList"
/>
<!-- 抽屉控件 -->
<el-drawer
title="信息详细页"
size="75%"
direction="rtl"
:visible.sync="drawer"
:before-close="handleDrawerClose"
>
<div>
<Detail
v-bind:customerInfos="customerInfos"
style="margin-top: -35px"
></Detail>
</div>
</el-drawer>
</div>
</div>
</template>
<script>
import Pagination from "@/components/Pagination";
import permission from "@/directive/permission/index.js";
import CRMTableHead from "../../components/CRMTableHead";
import importExcel from "@/components/ImportExcel-vw";
import Lockr from "lockr";
import moment from "moment";
import Detail from "./detail.vue";
import { downloadFile } from "@/utils/crmindex.js";
//
const bomUnit = [
{ key: 0, display_name: "PC" },
{ key: 1, display_name: "TON" },
{ key: 2, display_name: "Other" },
];
const projectTypeKeyValue = bomUnit.reduce((acc, cur) => {
acc[cur.key] = cur.display_name;
return acc;
}, {});
export default {
name: "AssemblyCfg",
components: { Pagination, CRMTableHead, importExcel, Detail },
directives: { permission },
filters: {
IsCustomerSignFilter(status) {
//
const statusMap = {
true: "是",
false: "否",
};
return statusMap[status];
},
},
data() {
const validVersion = (rule, value, callback) => {
let numberReg = /^\d{6}$/;
if (!numberReg.test(value)) {
callback(new Error("只能为6位数字!"));
} else {
callback();
}
};
return {
crmType: "bomdatabase",
rules: {
erpAssemblyName: [
{ required: true, message: "必须输入!", trigger: "blur" },
],
},
valueSelect: "",
customerInfos: [],
dialogOptions: [],
versionValue: "",
searchContent: "", //
showExcelImport: false,
form: {},
drawer: false,
list: null,
totalCount: 0,
listLoading: true,
customerInfo: {
bomId: "",
},
//
filterObj: {
type: Object,
default: () => {
return {};
},
},
listQuery: {
SkipCount: 0,
MaxResultCount: 15,
ErpAssemblyName: undefined,
ErpAssemblyCode: undefined,
},
listExportQuery: {
erpAssemblyCode: undefined,
erpAssemblyName: undefined,
},
page: 1,
//
showSearch: true,
bomUnit,
multipleSelection: [],
drawer: false,
dialogFormVisible: false,
formTitle: "",
isEdit: false,
formLoading: false,
dialogFormVisible: false,
tableHeight: document.documentElement.clientHeight - 280,
};
},
mounted() {
var self = this;
window.onresize = function () {
var offsetHei = document.documentElement.clientHeight;
self.tableHeight = offsetHei - 190;
};
},
created() {
this.getList();
},
computed: {
getDefaultField() {
var tempsTabs = [];
// tempsTabs.push({
// label: "ERP",
// prop: "erpAssemblyName ",
// width: 220,
// });
tempsTabs.push({
label: "ERP总成版本",
prop: "erpAssemblyVersion ",
width: 100,
});
return tempsTabs;
},
},
methods: {
//
handleDrawerOpen(param) {
this.drawer = true;
var parentId = param.id; //id
this.customerInfos = [
{
ParentId: parentId,
},
];
},
handleDrawerClose(done) {
done();
},
save() {
this.$refs.form.validate((valid) => {
if (valid) {
console.log("保存参数:" + JSON.stringify(this.form));
this.formLoading = true;
if (this.isEdit) {
this.$axios
.puts("/api/newjit/assembly-cfg-erp/" + this.form.id, this.form)
.then((response) => {
this.formLoading = false;
this.$notify({
title: "成功",
message: "更新成功",
type: "success",
duration: 2000,
});
this.dialogFormVisible = false;
this.getList();
})
.catch(() => {
this.formLoading = false;
});
} else {
//insert
console.log(JSON.stringify(this.form));
this.$axios
.posts("/api/newjit/assembly-cfg-erp", this.form)
.then((response) => {
this.formLoading = false;
this.$notify({
title: "成功",
message: "新增成功",
type: "success",
duration: 2000,
});
this.dialogFormVisible = false;
this.getList();
})
.catch(() => {
this.formLoading = false;
});
}
}
});
},
/** 新增 */
handleCreate() {
this.$nextTick(() => {
this.$refs["form"].resetFields();
});
this.formTitle = "新增";
this.isEdit = false;
this.form = {};
this.dialogFormVisible = true;
},
/** 修改 */
handleUpdate(row) {
this.formTitle = "修改";
this.isEdit = true;
if (row) {
this.fetchData(row.id);
this.dialogFormVisible = true;
} else {
if (this.multipleSelection.length != 1) {
this.$message({
message: "编辑必须选择单行",
type: "warning",
});
return;
} else {
this.fetchData(this.multipleSelection[0].id);
this.dialogFormVisible = true;
}
}
},
/** 删除 */
handleDelete(row) {
if (row) {
this.$confirm("是否删除" + row.name + "?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$axios
.deletes("/api/newjit/assembly-cfg-erp/" + row.id)
.then((response) => {
const index = this.list.indexOf(row);
this.list.splice(index, 1);
this.$notify({
title: "成功",
message: "删除成功",
type: "success",
duration: 2000,
});
});
})
.catch(() => {
this.$message({
type: "info",
message: "已取消删除",
});
});
} else {
this.$alert("暂时不支持批量删除", "提示", {
confirmButtonText: "确定",
callback: (action) => {
//
},
});
}
},
fetchData(id) {
//
this.$axios
.gets("/api/newjit/assembly-cfg-erp/" + id)
.then((response) => {
this.form = response.item;
});
},
/** 导出功能 */
handleDownload() {
this.listLoading = true;
this.listExportQuery.erpAssemblyCode = this.listQuery.ErpAssemblyCode;
this.listExportQuery.erpAssemblyName = this.listQuery.ErpAssemblyName;
console.log(JSON.stringify(this.listExportQuery));
this.$axios
.posts("/api/newjit/assembly-cfg-erp/export", this.listExportQuery)
.then((res) => {
let filename = res.item;
this.$axios
.BolbGets("/api/newjit/exclude-part-cfg/download/" + filename)
.then((response) => {
if (filename.indexOf("_") != -1) {
let downName =
filename.slice(0, filename.lastIndexOf("_")) +
filename.slice(filename.lastIndexOf("."));
downloadFile(response, downName);
this.$notify({
title: "成功",
message: "数据-导出成功!",
type: "success",
duration: 2000,
});
} else {
downloadFile(response, filename);
this.$notify({
title: "成功",
message: "数据-导出成功!",
type: "success",
duration: 2000,
});
}
this.listLoading = false;
});
});
this.listLoading = false;
},
/** 重置按钮操作 */
resetQuery(refName) {
//this.$refs[refName].resetFields();
this.listQuery.ErpAssemblyName = "";
this.listQuery.ErpAssemblyCode = "";
this.handleQuery();
},
/** 搜索按钮操作 */
handleQuery() {
this.listQuery.SkipCount = 1;
this.getList();
},
selectValue(params) {
//
this.versionValue = params.value;
this.getList();
},
selectOptionsChange(item) {
this.getList();
},
importExcelData() {
//
this.showExcelImport = false;
//this.getList();
},
/** 刷新列表 */
handleHandle(data) {
if (data.type !== "edit") {
this.getList();
}
},
/** 格式化字段 */
fieldFormatter(row, column) {
if (column.property === "billStatus") {
return { 0: "未生效", 2: "已生效", 3: "已发布" }[row[column.property]];
}
if (column.property == "onlineTime" || column.property == "receiveTime") {
var date = row[column.property];
if (date == undefined) {
return "";
}
return moment(date).format("YYYY-MM-DD HH:mm:ss");
}
return row[column.property] || "--";
},
roleFilter(type) {
return projectTypeKeyValue[type];
},
getList() {
this.listLoading = true;
this.listQuery.SkipCount = (this.page - 1) * 10;
this.$axios
.gets("/api/newjit/assembly-cfg-erp/list", this.listQuery)
.then((response) => {
this.list = response.items;
this.totalCount = response.totalCount;
setTimeout(() => {
//
this.listLoading = false;
}, 500);
})
.catch(() => {
this.listLoading = false;
});
},
handleFilter() {
this.page = 1;
this.getList();
},
sortChange(data) {
const { prop, order } = data;
if (!prop || !order) {
this.handleFilter();
return;
}
this.listQuery.Sorting = prop + " " + order;
this.handleFilter();
},
handleSelectionChange(val) {
this.multipleSelection = val;
},
/** 通过回调控制style */
cellStyle({ row, column, rowIndex, columnIndex }) {
if (column.property === "qty") {
return { textAlign: "right" };
} else {
return { textAlign: "left" };
}
},
/** 通过回调控制表头style */
headerRowStyle({ row, column, rowIndex, columnIndex }) {
if (column.property === "qty") {
return { textAlign: "right", background: "#FAFAFA" };
} else {
return { textAlign: "left", background: "#FAFAFA" };
}
},
handleRowClick(row, column, event) {
this.$refs.multipleTable.clearSelection();
this.$refs.multipleTable.toggleRowSelection(row);
},
},
};
</script>
<style lang="scss" scoped>
@import "../../../ux/styles/crmtable.scss";
</style>

354
code/WebApp/vue/src/views/newJit/baseData/billM100/detail.vue

@ -1,354 +0,0 @@
<!--M100上线信息-明细数据-->
<template>
<div class="cr-body-content">
<!--表格渲染-->
<el-table
ref="multipleTable"
v-loading="listLoading"
element-loading-text="拼命加载中..."
element-loading-spinner="el-icon-loading"
class="cr-table"
:data="list"
:height="tableHeight"
:cell-style="cellStyle"
:header-cell-style="headerRowStyle"
size="small"
stripe
border
highlight-current-row
style="width: 100%"
@sort-change="sortChange"
@selection-change="handleSelectionChange"
@row-click="handleRowClick"
:row-key="getRowKeys"
:expand-row-keys="expands"
@expand-change="exChange"
>
<!-- <el-table-column type="selection" width="44px"></el-table-column> -->
<!-- <el-table-column
prop="总成名称"
label="erpAssemblyName"
sortable
width="180"
>
</el-table-column>
<el-table-column
prop="erpAssemblyVersion"
label="总成版本号"
sortable
width="180"
>
style="width: calc(100% - 47px)"
class="two-list"
</el-table-column> -->
<el-table-column type="expand" prop="details">
<template slot-scope="scope">
<el-table :data="scope.row.details">
<el-table-column
prop="partCode"
label="客户零件代码"
></el-table-column>
<el-table-column
prop="partNum"
label="客户零件数量"
></el-table-column>
<el-table-column prop="description" label="描述"></el-table-column>
<el-table-column prop="isKey" label="是否Key件">
<template slot-scope="scope">
<span v-if="scope.row.isKey == true">
<span style="color: #00b46d"></span>
</span>
<span v-else>
<span style="color: #d75c89"></span>
</span>
</template>
</el-table-column>
</el-table>
</template>
</el-table-column>
<el-table-column
v-for="(item, index) in getDefaultField"
:key="index"
:prop="item.prop"
:label="item.label"
:min-width="item.width"
:formatter="fieldFormatter"
sortable="custom"
show-overflow-tooltip
:gutter="0"
>
<template slot="header" slot-scope="scope">
{{ scope.column.label }}
</template>
</el-table-column>
<el-table-column
prop="erpAssemblyVersion"
label="总成版本号"
sortable
width="360"
>
</el-table-column>
</el-table>
<div class="table-footer">
<!-- 分页控件 style="margin-top: -25px;margin-bottom:-25px;float:right;"-->
<pagination
v-show="totalCount > 0"
:total="totalCount"
:page.sync="page"
:limit.sync="listQuery.MaxResultCount"
@pagination="getList"
/>
</div>
</div>
</template>
<script>
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
import permission from "@/directive/permission/index.js";
import CRMTableHead from "../../components/CRMTableHead";
import { downloadFile } from "@/utils/crmindex.js";
import Detail from "./detail";
export default {
name: "sendUnsettledDiffReport",
components: { Pagination, CRMTableHead, Detail },
directives: { permission },
filters: {
IsCustomerSignFilter(status) {
//
const statusMap = {
true: "是",
false: "否",
};
return statusMap[status];
},
},
props: {
customerInfos: {
type: Array,
default: () => {
return [];
},
},
},
data() {
return {
crmType: "stockFisDiffReport",
rules: {
//
erpMaterialCode: [
{ required: true, message: "必须输入!", trigger: "blur" },
],
},
expands: [], //id
getRowKeys: (row) => {
return row.id; //id
},
searchContent: "", //
customerInfo: {
parentId: "",
},
form: {
dicDetailID: "",
customerId: "",
projectId: "",
},
list: null,
totalCount: 0,
listLoading: true,
formLoading: false,
//
filterObj: {
type: Object,
default: () => {
return {};
},
},
listQuery: {
Filters: [
{
logic: 0,
column: "Enabled",
action: 0,
value: "true",
}, //
],
SkipCount: 0,
MaxResultCount: 15,
id: "",
},
page: 1,
dialogFormVisible: false,
multipleSelection: [],
formTitle: "",
drawer: false,
showExcelImport: false,
tableHeight: document.documentElement.clientHeight - 260,
isEdit: false,
};
},
mounted() {
var self = this;
window.onresize = function () {
var offsetHei = document.documentElement.clientHeight;
self.tableHeight = offsetHei - 190;
};
},
created() {
this.getList();
},
watch: {
customerInfos: {
handler(newVal) {
if (newVal == "" || newVal == "undefined") {
//TODO
} else {
newVal.forEach((element) => {
this.customerInfo.parentId = element.ParentId;
});
if (this.customerInfo.parentId != "") {
this.getList();
}
}
},
immediate: true,
},
},
computed: {
/** 列表字段 */
getDefaultField() {
var tempsTabs = [];
tempsTabs.push({
label: "总成编号",
prop: "erpAssemblyCode",
width: 160,
});
tempsTabs.push({
label: "总成名称",
prop: "erpAssemblyName",
width: 160,
});
// tempsTabs.push({
// label: "",
// prop: "erpAssemblyName",
// width: 160,
// });
return tempsTabs;
},
},
methods: {
exChange(row, rowList) {
this.loading = true;
var that = this;
if (rowList.length) {
that.expands = [];
if (row) {
that.expands.push(row.id); // id
}
} else {
that.expands = [];
}
},
/** 刷新列表 */
handleHandle(data) {
if (data.type !== "edit") {
this.getList();
}
},
/** 格式化字段 */
fieldFormatter(row, column) {
return row[column.property] || "--";
},
importExcelData() {
//
this.showExcelImport = false;
this.getList();
},
getList() {
this.listLoading = true;
console.log("详表条件:" + JSON.stringify(this.customerInfo.parentId));
//alert("" + JSON.stringify(this.customerInfo.parentId));
let vehicleAssemblyId = { vehicleAssemblyId: this.customerInfo.parentId };
this.$axios
.gets("/api/newjit/assembly-cfg-vehicle/list", vehicleAssemblyId)
.then((response) => {
this.list = response;
setTimeout(() => {
//
this.listLoading = false;
}, 500);
})
.catch(() => {
this.listLoading = false;
});
},
/** 筛选操作 */
handleFilter() {
this.page = 1;
this.getList();
this.listQuery.Filters = [];
if (this.searchContent != "") {
var column = "partCode";
let filter = {
logic: 0,
column: column,
action: 6,
value: this.searchContent,
};
this.listQuery.Filters.push(filter);
}
this.getList();
},
resetQuery() {},
sortChange(data) {
const { prop, order } = data;
if (!prop || !order) {
this.handleFilter();
return;
}
this.listQuery.Sorting = prop + " " + order;
this.handleFilter();
},
handleSelectionChange(val) {
this.multipleSelection = val;
},
/** 通过回调控制style */
cellStyle({ row, column, rowIndex, columnIndex }) {
if (
column.property === "fisQty" ||
column.property === "diffQty" ||
column.property === "stockQty"
) {
return { textAlign: "right" };
} else {
return { textAlign: "left" };
}
},
/** 通过回调控制表头style */
headerRowStyle({ row, column, rowIndex, columnIndex }) {
if (
column.property === "fisQty" ||
column.property === "diffQty" ||
column.property === "stockQty"
) {
return { textAlign: "right", background: "#FAFAFA" };
} else {
return { textAlign: "left", background: "#FAFAFA" };
}
},
handleRowClick(row, column, event) {
this.$refs.multipleTable.clearSelection();
this.$refs.multipleTable.toggleRowSelection(row);
},
},
};
</script>
<style lang="scss" scoped>
@import "../../../ux/styles/crmtable.scss";
</style>

571
code/WebApp/vue/src/views/newJit/baseData/billM100/index.vue

@ -1,571 +0,0 @@
<!--M100上线信息页-->
<template>
<div class="cr-body-content">
<flexbox class="content-header">
<el-form
:model="listQuery"
ref="queryForm"
v-show="showSearch"
:inline="true"
>
<el-form-item label="起始顺序号" prop="HostSNBegin">
<el-input
v-model="listQuery.HostSNBegin"
placeholder="起始顺序号"
clearable
size="small"
style="width: 120px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="结束顺序号" prop="HostSNEnd">
<el-input
v-model="listQuery.HostSNEnd"
placeholder="结束顺序号"
clearable
size="small"
style="width: 120px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="KNR" prop="KNR">
<el-input
v-model="listQuery.KNR"
placeholder="请输入KNR号"
clearable
size="small"
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="底盘号" prop="VIN">
<el-input
v-model="listQuery.VIN"
placeholder="请输入底盘号"
clearable
size="small"
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="车型代码" prop="VehicleModelCode">
<el-input
v-model="listQuery.VehicleModelCode"
placeholder="请输入车型代码"
clearable
size="small"
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="版本" prop="Version">
<el-input
v-model="listQuery.Version"
placeholder="请输入版本"
clearable
size="small"
style="width: 240px"
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="上线日期">
<el-date-picker
v-model="OnlineTimeVale"
size="small"
style="width: 380px"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetimerange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<el-form-item label="接收日期">
<el-date-picker
v-model="ReceiveTimeVale"
size="small"
style="width: 380px"
value-format="yyyy-MM-dd HH:mm:ss"
type="datetimerange"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
></el-date-picker>
</el-form-item>
<!-- <el-form-item label="单据状态" prop="BillStatus">
<el-select
v-model="listQuery.BillStatus"
placeholder="请选择"
style="width: 200px"
>
<el-option label="未领取生产任务" :value="1"></el-option>
<el-option label="已领取生产任务" :value="2"></el-option>
<el-option label="完成生产任务" :value="3"></el-option>
</el-select>
</el-form-item> -->
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleFilter"
>搜索</el-button
>
<el-button
icon="el-icon-refresh"
size="mini"
@click="resetQuery('queryForm')"
>重置</el-button
>
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
style="margin-left: 15px"
@click="handleDownload()"
>导出(Excel)查询信息
</el-button>
</el-form-item>
</el-form>
</flexbox>
<div class="l-table">
<!--表格渲染-->
<el-table
ref="multipleTable"
v-loading="listLoading"
element-loading-text="拼命加载中..."
element-loading-spinner="el-icon-loading"
class="cr-table"
:data="list"
:height="tableHeight"
:cell-style="cellStyle"
:header-cell-style="headerRowStyle"
size="small"
stripe
border
highlight-current-row
style="width: 100%"
@sort-change="sortChange"
@selection-change="handleSelectionChange"
@row-click="handleRowClick"
>
<el-table-column
label="底盘号"
prop="vin "
sortable="custom"
align="center"
fixed
width="180px"
>
<template slot-scope="scope">
<span class="link-type" @click="handleDrawerOpen(scope.row)">{{
scope.row.vin
}}</span>
</template>
</el-table-column>
<el-table-column
v-for="(item, index) in getDefaultField"
:key="index"
:prop="item.prop"
:label="item.label"
:min-width="item.width"
:formatter="fieldFormatter"
sortable="custom"
show-overflow-tooltip
:gutter="0"
>
<template slot="header" slot-scope="scope">
{{ scope.column.label }}
</template>
</el-table-column>
</el-table>
</div>
<div class="table-footer">
<!-- 分页控件 style="margin-top: -25px;margin-bottom:-25px;float:right;"-->
<pagination
v-show="totalCount > 0"
:total="totalCount"
:page.sync="page"
:limit.sync="listQuery.MaxResultCount"
@pagination="getList"
/>
<!-- 导入Excel组件 -->
<importExcel
ref="importexcel"
:show="showExcelImport"
:crmType="crmType"
@close="importExcelData"
/>
<!-- 抽屉控件 -->
<el-drawer
title="信息详细页"
size="75%"
direction="rtl"
:visible.sync="drawer"
:before-close="handleDrawerClose"
>
<div>
<Detail
v-bind:customerInfos="customerInfos"
style="margin-top: -35px"
></Detail>
</div>
</el-drawer>
</div>
</div>
</template>
<script>
import Pagination from "@/components/Pagination";
import permission from "@/directive/permission/index.js";
import CRMTableHead from "../../components/CRMTableHead";
import importExcel from "@/components/ImportExcel-vw";
import Lockr from "lockr";
import moment from "moment";
import Detail from "./detail.vue";
import { downloadFile } from "@/utils/crmindex.js";
//
const bomUnit = [
{ key: 0, display_name: "PC" },
{ key: 1, display_name: "TON" },
{ key: 2, display_name: "Other" },
];
const projectTypeKeyValue = bomUnit.reduce((acc, cur) => {
acc[cur.key] = cur.display_name;
return acc;
}, {});
export default {
name: "BillM100",
components: { Pagination, CRMTableHead, importExcel, Detail },
directives: { permission },
filters: {
IsCustomerSignFilter(status) {
//
const statusMap = {
true: "是",
false: "否",
};
return statusMap[status];
},
},
data() {
return {
crmType: "bomdatabase",
OnlineTimeVale: [],
ReceiveTimeVale: [],
customerInfos: [],
versionValue: "",
versionList: [], //
searchContent: "", //
showExcelImport: false,
form: {},
drawer: false,
list: null,
totalCount: 0,
listLoading: true,
customerInfo: {
bomId: "",
},
//
filterObj: {
type: Object,
default: () => {
return {};
},
},
listQuery: {
SkipCount: 0,
MaxResultCount: 15,
HostSNBegin: undefined,
HostSNEnd: undefined,
VIN: undefined,
OnlineTimeBegin: undefined,
OnlineTimeEnd: undefined,
ReceiveTimeBegin: undefined,
ReceiveTimeEnd: undefined,
VehicleModelCode: undefined,
Version: undefined,
KNR: undefined,
},
page: 1,
//
showSearch: true,
bomUnit,
multipleSelection: [],
drawer: false,
tableHeight: document.documentElement.clientHeight - 280,
};
},
mounted() {
var self = this;
window.onresize = function () {
var offsetHei = document.documentElement.clientHeight;
self.tableHeight = offsetHei - 280;
};
},
created() {
this.getList();
},
computed: {
getDefaultField() {
var tempsTabs = [];
tempsTabs.push({ label: "流水号", prop: "serialNum", width: 100 });
tempsTabs.push({ label: "大众顺序号", prop: "hostSN", width: 120 });
tempsTabs.push({
label: "KNR",
prop: "knr",
width: 120,
});
// tempsTabs.push({
// label: "",
// prop: "vin",
// width: 130,
// });
tempsTabs.push({
label: "上线时间",
prop: "onlineTime",
width: 150,
});
tempsTabs.push({
label: "接收时间",
prop: "receiveTime",
width: 180,
});
tempsTabs.push({
label: "车型代码",
prop: "vehicleModelCode",
width: 120,
});
tempsTabs.push({
label: "版本",
prop: "version",
width: 150,
});
tempsTabs.push({ label: "单据状态", prop: "billStatus", width: 120 });
tempsTabs.push({
label: "车型名称",
prop: "vehicleModelName",
width: 120,
});
return tempsTabs;
},
},
methods: {
//
handleDrawerOpen(param) {
this.drawer = true;
var parentId = param.assemblyID; //id
this.customerInfos = [
{
ParentId: parentId,
},
];
},
handleDrawerClose(done) {
done();
},
/** 导出功能 */
handleDownload() {
this.listLoading = true;
// if (this.OnlineTimeVale != []) {
// this.listQuery.OnlineTimeBegin = this.OnlineTimeVale
// ? this.OnlineTimeVale[0] || ""
// : "";
// this.listQuery.OnlineTimeEnd = this.OnlineTimeVale
// ? this.OnlineTimeVale[1] || ""
// : "";
// }
// if (this.ReceiveTimeVale != []) {
// this.listQuery.ReceiveTimeBegin = this.ReceiveTimeVale[0];
// this.listQuery.ReceiveTimeEnd = this.ReceiveTimeVale[1];
// }
if (this.OnlineTimeVale != []) {
this.listQuery.OnlineTimeBegin = this.OnlineTimeVale
? this.OnlineTimeVale[0] || undefined
: undefined
this.listQuery.OnlineTimeEnd = this.OnlineTimeVale
? this.OnlineTimeVale[1] || undefined
: undefined
}
if (this.ReceiveTimeVale != []) {
this.listQuery.ReceiveTimeBegin = this.ReceiveTimeVale
? this.ReceiveTimeVale[0] || undefined
: undefined
this.listQuery.ReceiveTimeEnd = this.ReceiveTimeVale
? this.ReceiveTimeVale[1] || undefined
: undefined
}
console.log("M100上线信息导出条件:"+JSON.stringify(this.listQuery))
this.$axios
.posts("/api/newjit/bill-m100/export", this.listQuery)
.then((res) => {
let filename = res.item;
this.$axios
.BolbGets("/api/newjit/exclude-part-cfg/download/" + filename)
.then((response) => {
if (filename.indexOf("_") != -1) {
let downName =
filename.slice(0, filename.lastIndexOf("_")) +
filename.slice(filename.lastIndexOf("."));
downloadFile(response, downName);
this.$notify({
title: "成功",
message: "数据-导出成功!",
type: "success",
duration: 2000,
});
} else {
downloadFile(response, filename);
this.$notify({
title: "成功",
message: "数据-导出成功!",
type: "success",
duration: 2000,
});
}
this.listLoading = false;
});
});
},
/** 重置按钮操作 */
resetQuery(refName) {
this.OnlineTimeVale = [];
this.ReceiveTimeVale = [];
this.$refs[refName].resetFields();
this.handleQuery();
},
/** 搜索按钮操作 */
handleQuery() {
this.listQuery.SkipCount = 1;
this.getList();
},
selectValue(params) {
//
this.versionValue = params.value;
this.getList();
},
selectOptionsChange(item) {
this.getList();
},
importExcelData() {
//
this.showExcelImport = false;
//this.getList();
},
/** 刷新列表 */
handleHandle(data) {
if (data.type !== "edit") {
this.getList();
}
},
/** 格式化字段 */
fieldFormatter(row, column) {
if (column.property === "billStatus") {
return { 0: "未生效", 2: "已生效", 3: "已发布" }[row[column.property]];
}
if (column.property == "onlineTime" || column.property == "receiveTime") {
var date = row[column.property];
if (date == undefined) {
return "";
}
return moment(date).format("YYYY-MM-DD HH:mm:ss");
}
return row[column.property] || "--";
},
roleFilter(type) {
return projectTypeKeyValue[type];
},
getList() {
this.listLoading = true;
this.listQuery.SkipCount = (this.page - 1) * 15;
if (this.OnlineTimeVale != []) {
this.listQuery.OnlineTimeBegin = this.OnlineTimeVale
? this.OnlineTimeVale[0] || ""
: "";
this.listQuery.OnlineTimeEnd = this.OnlineTimeVale
? this.OnlineTimeVale[1] || ""
: "";
}
if (this.ReceiveTimeVale != []) {
this.listQuery.ReceiveTimeBegin = this.ReceiveTimeVale
? this.ReceiveTimeVale[0] || ""
: "";
this.listQuery.ReceiveTimeEnd = this.ReceiveTimeVale
? this.ReceiveTimeVale[1] || ""
: "";
}
console.log("billM100查询条件:" + JSON.stringify(this.listQuery));
this.$axios
.gets("/api/newjit/bill-m100/list", this.listQuery)
.then((response) => {
this.list = response.items;
this.totalCount = response.totalCount;
setTimeout(() => {
//
this.listLoading = false;
}, 500);
})
.catch(() => {
this.listLoading = false;
});
},
handleFilter() {
this.page = 1;
this.getList();
},
sortChange(data) {
const { prop, order } = data;
if (!prop || !order) {
this.handleFilter();
return;
}
this.listQuery.Sorting = prop + " " + order;
this.handleFilter();
},
handleSelectionChange(val) {
this.multipleSelection = val;
},
/** 通过回调控制style */
cellStyle({ row, column, rowIndex, columnIndex }) {
if (column.property === "qty") {
return { textAlign: "right" };
} else {
return { textAlign: "left" };
}
},
/** 通过回调控制表头style */
headerRowStyle({ row, column, rowIndex, columnIndex }) {
if (column.property === "qty") {
return { textAlign: "right", background: "#FAFAFA" };
} else {
return { textAlign: "left", background: "#FAFAFA" };
}
},
handleRowClick(row, column, event) {
this.$refs.multipleTable.clearSelection();
this.$refs.multipleTable.toggleRowSelection(row);
},
},
};
</script>
<style lang="scss" scoped>
@import "../../../ux/styles/crmtable.scss";
</style>

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

Loading…
Cancel
Save