From 5e7590b4742a593ae4bc52a2f863c7fb7b714225 Mon Sep 17 00:00:00 2001 From: monkey Date: Fri, 25 Jun 2021 18:38:53 +0800 Subject: [PATCH] v11.1.0 --- README.md | 2 +- package.json | 12 +- src/api/admin/crm.js | 5 +- src/api/admin/employeeDep.js | 49 +- src/api/common.js | 22 + src/api/crm/customer.js | 5 +- src/api/crm/invoice.js | 13 + src/api/crm/workbench.js | 35 +- src/api/oa/journal.js | 15 + src/api/pm/project.js | 16 + src/assets/iconfont copy1/iconfont.css | 345 + src/assets/iconfont copy1/iconfont.eot | Bin 0 -> 24368 bytes src/assets/iconfont copy1/iconfont.svg | 704 + src/assets/iconfont copy1/iconfont.ttf | Bin 0 -> 24208 bytes src/assets/iconfont copy1/iconfont.woff | Bin 0 -> 15468 bytes src/assets/iconfont copy1/iconfont.woff2 | Bin 0 -> 13044 bytes src/assets/img/crm/receivables_plan.png | Bin 0 -> 1698 bytes src/components/CRMImport/index.vue | 19 +- src/components/CreateCom/CrmRelativeTable.vue | 1 - src/components/NewCom/WkCheckbox/index.vue | 212 + src/components/NewCom/WkDescText/index.vue | 61 + src/components/NewCom/WkDetailTable/View.vue | 194 + .../NewCom/WkDetailTable/WkTableItems.vue | 160 + src/components/NewCom/WkDetailTable/index.vue | 168 + src/components/NewCom/WkDistpicker/index.vue | 149 + src/components/NewCom/WkForm/Mixin.js | 44 +- src/components/NewCom/WkForm/WkField.vue | 322 + src/components/NewCom/WkForm/WkFieldView.vue | 192 + src/components/NewCom/WkForm/WkFormItem.vue | 130 + src/components/NewCom/WkForm/WkFormItems.vue | 223 +- src/components/NewCom/WkForm/index.vue | 38 +- src/components/NewCom/WkForm/utils.js | 62 + src/components/NewCom/WkLocation/index.vue | 133 + .../NewCom/WkLocationPointDialog/index.vue | 210 + .../NewCom/WkPercentInput/index.vue | 281 + src/components/NewCom/WkPosition/index.vue | 139 + src/components/NewCom/WkSelect/index.vue | 205 + .../NewCom/WkSignaturePad/Image.vue | 97 + .../WkSignaturePad/VueSignaturePad/index.vue | 196 + .../VueSignaturePad/signature.png | Bin 0 -> 394 bytes .../NewCom/WkSignaturePad/index.vue | 167 + .../NewCom/WkSignaturePad/utils/index.js | 26 + .../NewCom/WkUserSelect/src/WkUser.vue | 2 + src/components/SlideView.vue | 7 +- src/components/VDistpicker/Distpicker.vue | 366 +- src/components/VDistpicker/districts.js | 16700 +++++++++++----- src/components/WkEmpty/index.vue | 68 + src/components/WkImport/ImportHistory.vue | 207 + src/components/WkImport/ImportMixins.js | 77 + src/components/WkImport/XrImport.vue | 91 + src/components/WkImport/index.vue | 868 + src/components/WkImport/main.js | 15 + src/components/XrMenu/XrMenuItem.vue | 1 + src/components/XrUpgradeDialog.vue | 24 +- src/config.js | 2 +- src/main.js | 3 + src/mixins/AdvancedFilter.js | 116 +- src/mixins/CheckStatusMixin.js | 2 +- src/mixins/CustomFields.js | 438 +- src/router/modules/admin.js | 12 +- src/styles/button.scss | 6 + src/styles/emoji-sprite.scss | 2 +- src/styles/iconfont/iconfont.css | 236 +- src/styles/iconfont/iconfont.eot | Bin 67716 -> 81088 bytes src/styles/iconfont/iconfont.svg | 170 +- src/styles/iconfont/iconfont.ttf | Bin 67572 -> 80944 bytes src/styles/iconfont/iconfont.woff | Bin 41796 -> 50364 bytes src/styles/iconfont/iconfont.woff2 | Bin 35364 -> 42172 bytes src/styles/index.scss | 12 +- src/styles/org-tree.scss | 30 + src/styles/side-detail.scss | 18 +- src/styles/table.scss | 2 +- src/views/admin/config/index.vue | 2 +- src/views/admin/crm/components/FieldInfo.vue | 4 +- src/views/admin/crm/customField/index.vue | 14 +- .../components/FieldItem/FieldBoolean.vue | 39 + .../components/FieldItem/FieldCheckbox.vue | 86 + .../FieldItem/FieldDateInterval.vue | 56 + .../components/FieldItem/FieldDescText.vue | 77 + .../components/FieldItem/FieldDetailTable.vue | 224 + .../fields/components/FieldItem/FieldFile.vue | 41 + .../components/FieldItem/FieldInput.vue | 47 + .../components/FieldItem/FieldLocation.vue | 45 + .../components/FieldItem/FieldPercent.vue | 52 + .../components/FieldItem/FieldPosition.vue | 79 + .../components/FieldItem/FieldSelect.vue | 79 + .../components/FieldItem/FieldTextarea.vue | 63 + .../components/FieldItem/FieldWrapper.vue | 216 + .../components/FieldItem/FieldWritingSign.vue | 38 + .../fields/components/FieldItem/index.js | 13 + .../fields/components/FieldItem/mixins.js | 132 + .../SettingField/SettingDefault.vue | 372 + .../SettingField/SettingDescText.vue | 88 + .../SettingField/SettingDetailTable.vue | 164 + .../SettingField/SettingLogicForm.vue | 321 + .../components/SettingField/SettingNumber.vue | 211 + .../SettingField/SettingOptions.vue | 395 + .../SettingField/SettingPrecisions.vue | 83 + .../fields/components/SettingField/index.vue | 325 + src/views/admin/fields/field.js | 39 + src/views/admin/fields/fieldTypeLib.js | 163 + src/views/admin/fields/index.vue | 940 + src/views/admin/fields/utils.js | 67 + .../components/RoleRangeSetDialog.vue | 203 + src/views/admin/roleAuth/index.vue | 50 +- src/views/crm/business/Create.vue | 191 +- src/views/crm/business/Detail.vue | 4 +- src/views/crm/business/index.vue | 26 +- src/views/crm/components/CRMAllDetail.vue | 2 + src/views/crm/components/CRMDetailHead.vue | 58 +- src/views/crm/components/CRMEditBaseInfo.vue | 733 +- src/views/crm/components/CRMListHead.vue | 2 +- src/views/crm/components/CRMTableHead.vue | 51 +- .../components/FilterForm/FilterContent.vue | 124 +- src/views/crm/components/FilterForm/index.vue | 452 +- src/views/crm/components/ImportInfo.vue | 194 +- src/views/crm/components/RelativeInvoice.vue | 16 +- src/views/crm/components/RelativeTeam.vue | 209 +- .../SelectionHandle/TeamsHandle.vue | 156 +- src/views/crm/contacts/Create.vue | 143 +- src/views/crm/contacts/Detail.vue | 10 +- src/views/crm/contacts/index.vue | 26 +- src/views/crm/contract/Create.vue | 350 +- src/views/crm/contract/Detail.vue | 4 +- src/views/crm/contract/index.vue | 31 +- src/views/crm/customer/Create.vue | 122 +- src/views/crm/customer/Detail.vue | 20 +- src/views/crm/customer/index.vue | 31 +- src/views/crm/invoice/Create.vue | 799 +- src/views/crm/invoice/Detail.vue | 201 +- src/views/crm/invoice/index.vue | 592 +- src/views/crm/leads/Create.vue | 103 +- src/views/crm/leads/Detail.vue | 5 +- src/views/crm/leads/index.vue | 26 +- .../crm/message/compenents/CRMMessage.vue | 28 +- src/views/crm/message/index.vue | 1 + src/views/crm/message/mixins/MessageTable.js | 10 +- src/views/crm/mixins/Detail.js | 52 +- src/views/crm/mixins/Table.js | 80 +- src/views/crm/product/Create.vue | 138 +- src/views/crm/product/Detail.vue | 6 +- src/views/crm/product/index.vue | 26 +- src/views/crm/receivables/Create.vue | 236 +- src/views/crm/receivables/Detail.vue | 11 +- src/views/crm/receivables/PlanCreate.vue | 148 +- src/views/crm/receivables/index.vue | 31 +- src/views/crm/seas/index.vue | 23 +- src/views/crm/visit/Create.vue | 223 +- src/views/crm/visit/Detail.vue | 13 +- src/views/crm/visit/index.vue | 26 +- .../workbench/components/ReportList/index.vue | 30 +- .../workbench/components/SaleStatistics.vue | 78 +- .../crm/workbench/components/SalesFunnel.vue | 6 +- src/views/crm/workbench/index.vue | 14 +- .../examine/components/ExamineCreateView.vue | 1021 +- .../oa/examine/components/ExamineDetail.vue | 44 +- src/views/pm/project/components/Members.vue | 56 +- .../pm/project/components/ProjectSettings.vue | 58 +- src/views/pm/project/index.vue | 33 +- src/views/taskExamine/task/Create.vue | 42 +- src/views/workLog/FollowIndex.vue | 20 +- src/views/workLog/components/FavList.vue | 190 + src/views/workLog/components/LogItem.vue | 36 +- 163 files changed, 28016 insertions(+), 8200 deletions(-) create mode 100644 src/assets/iconfont copy1/iconfont.css create mode 100644 src/assets/iconfont copy1/iconfont.eot create mode 100644 src/assets/iconfont copy1/iconfont.svg create mode 100644 src/assets/iconfont copy1/iconfont.ttf create mode 100644 src/assets/iconfont copy1/iconfont.woff create mode 100644 src/assets/iconfont copy1/iconfont.woff2 create mode 100644 src/assets/img/crm/receivables_plan.png create mode 100644 src/components/NewCom/WkCheckbox/index.vue create mode 100644 src/components/NewCom/WkDescText/index.vue create mode 100644 src/components/NewCom/WkDetailTable/View.vue create mode 100644 src/components/NewCom/WkDetailTable/WkTableItems.vue create mode 100644 src/components/NewCom/WkDetailTable/index.vue create mode 100644 src/components/NewCom/WkDistpicker/index.vue create mode 100644 src/components/NewCom/WkForm/WkField.vue create mode 100644 src/components/NewCom/WkForm/WkFieldView.vue create mode 100644 src/components/NewCom/WkForm/WkFormItem.vue create mode 100644 src/components/NewCom/WkForm/utils.js create mode 100644 src/components/NewCom/WkLocation/index.vue create mode 100644 src/components/NewCom/WkLocationPointDialog/index.vue create mode 100644 src/components/NewCom/WkPercentInput/index.vue create mode 100644 src/components/NewCom/WkPosition/index.vue create mode 100644 src/components/NewCom/WkSelect/index.vue create mode 100644 src/components/NewCom/WkSignaturePad/Image.vue create mode 100644 src/components/NewCom/WkSignaturePad/VueSignaturePad/index.vue create mode 100644 src/components/NewCom/WkSignaturePad/VueSignaturePad/signature.png create mode 100644 src/components/NewCom/WkSignaturePad/index.vue create mode 100644 src/components/NewCom/WkSignaturePad/utils/index.js create mode 100644 src/components/WkEmpty/index.vue create mode 100644 src/components/WkImport/ImportHistory.vue create mode 100644 src/components/WkImport/ImportMixins.js create mode 100644 src/components/WkImport/XrImport.vue create mode 100644 src/components/WkImport/index.vue create mode 100644 src/components/WkImport/main.js create mode 100644 src/styles/org-tree.scss create mode 100644 src/views/admin/fields/components/FieldItem/FieldBoolean.vue create mode 100644 src/views/admin/fields/components/FieldItem/FieldCheckbox.vue create mode 100644 src/views/admin/fields/components/FieldItem/FieldDateInterval.vue create mode 100644 src/views/admin/fields/components/FieldItem/FieldDescText.vue create mode 100644 src/views/admin/fields/components/FieldItem/FieldDetailTable.vue create mode 100644 src/views/admin/fields/components/FieldItem/FieldFile.vue create mode 100644 src/views/admin/fields/components/FieldItem/FieldInput.vue create mode 100644 src/views/admin/fields/components/FieldItem/FieldLocation.vue create mode 100644 src/views/admin/fields/components/FieldItem/FieldPercent.vue create mode 100644 src/views/admin/fields/components/FieldItem/FieldPosition.vue create mode 100644 src/views/admin/fields/components/FieldItem/FieldSelect.vue create mode 100644 src/views/admin/fields/components/FieldItem/FieldTextarea.vue create mode 100644 src/views/admin/fields/components/FieldItem/FieldWrapper.vue create mode 100644 src/views/admin/fields/components/FieldItem/FieldWritingSign.vue create mode 100644 src/views/admin/fields/components/FieldItem/index.js create mode 100644 src/views/admin/fields/components/FieldItem/mixins.js create mode 100644 src/views/admin/fields/components/SettingField/SettingDefault.vue create mode 100644 src/views/admin/fields/components/SettingField/SettingDescText.vue create mode 100644 src/views/admin/fields/components/SettingField/SettingDetailTable.vue create mode 100644 src/views/admin/fields/components/SettingField/SettingLogicForm.vue create mode 100644 src/views/admin/fields/components/SettingField/SettingNumber.vue create mode 100644 src/views/admin/fields/components/SettingField/SettingOptions.vue create mode 100644 src/views/admin/fields/components/SettingField/SettingPrecisions.vue create mode 100644 src/views/admin/fields/components/SettingField/index.vue create mode 100644 src/views/admin/fields/field.js create mode 100644 src/views/admin/fields/fieldTypeLib.js create mode 100644 src/views/admin/fields/index.vue create mode 100644 src/views/admin/fields/utils.js create mode 100644 src/views/admin/roleAuth/components/RoleRangeSetDialog.vue create mode 100644 src/views/workLog/components/FavList.vue diff --git a/README.md b/README.md index 745a2bc..218a397 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ 公司先后获得河南省高新技术企业、国家3A信用企业、IOS9001软件产品认证等20多项荣誉奖项。拥有50余项软件著作权。 获得20余家国内媒体报道。公司自成立以来,以高科技为起点,以技术为核心、 以完善的售后服务为后盾,秉承稳固与发展、求实与创新的精神,已为国内外上万家企业提供了服务。 在为实现企业价值最大化的过程中, 实现了自身的价值的提升,取得了最大程度的双赢合作,并获得了社会各界的广泛赞誉和认同。 -官网地址:[http://www.5kcrm.com](http://www.5kcrm.com/) +官网地址:[http://www.5kcrm.com](http://www.5kcrm.com/) 演示地址:(http://demo11.5kcrm.net/) 帐号:18688888888 密码:123456a diff --git a/package.json b/package.json index 220f2d1..83f9f00 100644 --- a/package.json +++ b/package.json @@ -24,20 +24,21 @@ "axios": "0.18.0", "babel-polyfill": "^6.26.0", "clipboard": "^2.0.4", - "echarts": "4.3.0", + "echarts": "^4.3.0", "el-bigdata-table": "^1.0.32", "element-ui": "^2.12.0", "file-saver": "^2.0.1", "id-validator": "^1.3.0", - "js-cookie": "2.2.0", - "js-md5": "^0.7.3", + "js-cookie": "2.2.1", "lockr": "^0.8.5", "normalize.css": "7.0.0", "nprogress": "0.2.0", + "number-precision": "^1.5.0", "numeral": "^2.0.6", "nzh": "^1.0.4", "pinyin-match": "1.0.9", "qrcodejs2": "0.0.2", + "signature_pad": "3.0.0-beta.4", "throttle-debounce": "^2.1.0", "vue": "2.5.17", "vue-bus": "^1.1.0", @@ -48,7 +49,8 @@ "vue-radial-progress": "^0.2.10", "vue-router": "3.0.1", "vue2-animate": "^2.1.2", - "vuedraggable": "^2.16.0", + "vue2-org-tree": "1.3.1", + "vuedraggable": "2.24.3", "vuex": "3.0.1", "xlsx": "^0.14.1", "xss": "^1.0.6" @@ -75,6 +77,8 @@ "file-loader": "1.1.11", "friendly-errors-webpack-plugin": "1.7.0", "html-webpack-plugin": "4.0.0-alpha", + "less": "3.0.0", + "less-loader": "4.1.0", "mini-css-extract-plugin": "0.4.1", "node-notifier": "5.2.1", "node-sass": "^4.7.2", diff --git a/src/api/admin/crm.js b/src/api/admin/crm.js index 50c8718..672971a 100644 --- a/src/api/admin/crm.js +++ b/src/api/admin/crm.js @@ -78,7 +78,10 @@ export function customFieldHandleAPI(data) { return request({ url: 'admin/field/update', method: 'post', - data: data + data: data, + headers: { + 'Content-Type': 'application/json;charset=UTF-8' + } }) } diff --git a/src/api/admin/employeeDep.js b/src/api/admin/employeeDep.js index ca9555a..2fa727f 100644 --- a/src/api/admin/employeeDep.js +++ b/src/api/admin/employeeDep.js @@ -52,10 +52,19 @@ export function userAddAPI(params) { }) } +// // 角色列表 +// export function roleListAPI(data) { +// return request({ +// url: 'admin/groups/index', +// method: 'post', +// data: data +// }) +// } + // 角色列表 export function roleListAPI(data) { return request({ - url: 'admin/groups/index', + url: 'admin/rules/getgroupauth', method: 'post', data: data }) @@ -195,3 +204,41 @@ export function adminUserSetUserDeptPI(data) { } }) } + +/** + * 查询配置的角色范围 + * @param {*} data + * @returns + */ +export function adminRoleQueryAuthRoleAPI(data) { + return request({ + url: `admin/rules/groupauthId`, + method: 'post', + data + }) +} + +/** + * 更新配置的角色范围 + * @param {*} data + * @returns + */ +export function adminRoleUpdateAuthRoleAPI(data) { + return request({ + url: `admin/rules/upgroupauth`, + method: 'post', + data: data, + headers: { + 'Content-Type': 'application/json;charset=UTF-8' + } + }) +} + +// 部分角色列表 +export function adminRoleGetRoleListAPI(data) { + return request({ + url: 'admin/rules/groupauth', + method: 'post', + data: data + }) +} diff --git a/src/api/common.js b/src/api/common.js index 73b980f..8b319be 100644 --- a/src/api/common.js +++ b/src/api/common.js @@ -361,3 +361,25 @@ export function readUpdateNoticeAPI(data) { data: data }) } + +/** + * 公共web文件上传 + * @param data + */ +export function crmFileSingleSaveAPI(data) { + var param = new FormData() + Object.keys(data).forEach(key => { + param.append(key, data[key]) + // param.append('isPublic', '1') + // param.append('module', 'print') + param.append('type', 'img') + }) + return request({ + url: 'admin/file/save', + method: 'post', + data: param, + headers: { + 'Content-Type': 'multipart/form-data' + } + }) +} diff --git a/src/api/crm/customer.js b/src/api/crm/customer.js index 3e894eb..5a147f0 100644 --- a/src/api/crm/customer.js +++ b/src/api/crm/customer.js @@ -9,7 +9,10 @@ export function crmCustomerSaveAPI(data) { return request({ url: 'crm/customer/' + url, method: 'post', - data: data + data: data, + headers: { + 'Content-Type': 'application/json;charset=UTF-8' + } }) } diff --git a/src/api/crm/invoice.js b/src/api/crm/invoice.js index f9a5a1d..f88242b 100644 --- a/src/api/crm/invoice.js +++ b/src/api/crm/invoice.js @@ -188,3 +188,16 @@ export function crmInvoiceDeleteInvoiceInfoAPI(data) { data: data }) } + +/** + * 发票全部导出 + * @param {*} data + */ +export function crmInvoiceExcelAllExportAPI(data) { + return request({ + url: 'crm/invoice/excelExport', + method: 'post', + data: data, + responseType: 'blob' + }) +} diff --git a/src/api/crm/workbench.js b/src/api/crm/workbench.js index 29f0815..d91a560 100644 --- a/src/api/crm/workbench.js +++ b/src/api/crm/workbench.js @@ -108,7 +108,7 @@ export function crmIndexFunnelAPI(data) { */ export function crmInstrumentSellFunnelBusinessListAPI(data) { return request({ - url: 'crmInstrument/sellFunnelBusinessList', + url: 'crm/index/businessList', method: 'post', data: data, headers: { @@ -251,44 +251,55 @@ export function crmIndexUnContactCustomerAPI(data) { //* ********************************** /** - * + * 跟进记录导出 * @param {*} data */ export function crmInstrumentExportRecordListAPI(data) { + var param = new FormData() + Object.keys(data).forEach(key => { + param.append(key, data[key]) + }) return request({ - url: '', + url: 'crm/activity/excelExport', method: 'post', - data: data, + data: param, + responseType: 'blob', headers: { - 'Content-Type': 'application/json;charset=UTF-8' - } + 'Content-Type': 'multipart/form-data' + }, + timeout: 60000 }) } /** - * + * 跟进记录导入 * @param {*} data */ export function crmInstrumentImportRecordListAPI(data) { + var param = new FormData() + Object.keys(data).forEach(key => { + param.append(key, data[key]) + }) return request({ - url: '', + url: 'crm/activity/excelImport', method: 'post', - data: data, + data: param, headers: { - 'Content-Type': 'application/json;charset=UTF-8' + 'Content-Type': 'multipart/form-data' } }) } /** - * + * 日志导入模板下载 * @param {*} data */ export function crmInstrumentDownloadRecordExcelAPI(data) { return request({ - url: '', + url: 'crm/activity/excelDownload', method: 'post', data: data, + responseType: 'blob', headers: { 'Content-Type': 'application/json;charset=UTF-8' } diff --git a/src/api/oa/journal.js b/src/api/oa/journal.js index b403f86..2c35067 100644 --- a/src/api/oa/journal.js +++ b/src/api/oa/journal.js @@ -200,3 +200,18 @@ export function journalQueryActivityCountAPI(data) { } }) } + +/** + * 日志点赞 + * @param {*} data + */ +export function oaLogFavourOrCancelAPI(data) { + return request({ + url: 'oa/log/favourUpdate', + method: 'post', + data: data, + headers: { + 'Content-Type': 'application/json;charset=UTF-8' + } + }) +} diff --git a/src/api/pm/project.js b/src/api/pm/project.js index 1dbf1a1..13f8b36 100644 --- a/src/api/pm/project.js +++ b/src/api/pm/project.js @@ -383,3 +383,19 @@ export function workWorkAddUserSetRoleGroupAPI(data) { data: data }) } + +// /** +// * 项目成员权限列表 +// * @param {*} data +// */ +// export function (data) { +// return request({ +// url: 'work/work/addUserGroup', +// method: 'post', +// headers: { +// 'Content-Type': 'application/json;charset=UTF-8' +// }, +// data: data +// }) +// } + diff --git a/src/assets/iconfont copy1/iconfont.css b/src/assets/iconfont copy1/iconfont.css new file mode 100644 index 0000000..bceb09e --- /dev/null +++ b/src/assets/iconfont copy1/iconfont.css @@ -0,0 +1,345 @@ +@font-face {font-family: "wukong"; + src: url('iconfont.eot?t=1586312422376'); /* IE9 */ + src: url('iconfont.eot?t=1586312422376#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAADL0AAsAAAAAXpAAADKhAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCNBgqBmiT4JwE2AiQDgkgLgSYABCAFhFUHiUgbI0xFpCG1l3yiKAmrEEU5FRqz/6/HjTGhAK/vL9mVEva1II0G77oqkEaXo4aEit7QddMHN9HAOszTNbBQoHptbJsFHTh45phF49LwFpVGLLCTj53zheQ3s+bzQ5KiyfP8j+Hun5liMjeWaZaWCkk8kTjERqgP0zE1kYBgXWevHmchgHXewPYwJoS6XEcU3fZvFiTSAvIkgxhveH5uvR/LBkaMgTBKRoUyNkblRir05jFAGMrAYgZhIYjB0NNpMy44MZqpd+d5DsXEQjkjT8TK+fRz62tta6trmLfKr38lcpTKcV3sCSoUtYNIMK2998Ybft631f1K6M4PJ7D+hXQogfEc4eH/3q13JrL03JkkUFWNrChloWqUn6T15DeZwdewtSo8MWvktybq8kEB26dEYZyKvBKM3fb+pev1vburdiXjgsCURJBwRVDG0wsMpPtmVrNqpVY6IAMdGIjr2P/nVrIv3V5K5ESkinsr2t1LmfTxJXFoR9YcmD014CzmM39eH7905p8u2dyPoaJoHEt3Obc3QjyEfELL7C7YRMD/r853ReaXmuD0tZdhKXOGqfQtGRbd9yTQk5DtB24Cc2LBb7J+4ck/OcikFexDWu0I+AWcIsH3iZVqUmo/e5Yxw7ImW9bw8HA5Pj5K/FlgKd0a/xa2KC0MACcqB+VkmEstwIbQT5Oqzuk/Y64enK2lRM78IhlnVLbWjXmMLcv5y/a3NxJaAY8y1k0BDT61xV45WQHqyHB1BZSbWXUJqIvFSdFeZEcQz1jVdt6lWla8mYV4K//48t9d6qCCVxpO6Oq1vBxsxTTrS7+255Vmv7l1g2pQCZagCiq+k5nyLZW+uWRldD/aqnJDsMK3tjPNotuISTMWnHm1XS9MDbU2WqxExYabnvX/0d3zkDHT5i0Fzr7w7fQapop/NLk/urp7+iefDv/8ozx2dfL9XLl04dyZUyeOHTl0YN+eHdu2bHp4enkLhCKxRCqTK5QqtUar0xuMJrOTs4ur1s2dx+WwqGwboUvlZTDJNIojI81jWrbjEogWUGrguQmo/MPv12SKi13ijk4kC2NIIZ6RIlyRYlySUlyQMpyTcpyRCpwSNU7ILBwTDY5IFQ5JDQ7IbOyTWuyROuwQLbZJPbbIHGwic/EUacAaosM60ogNpAnjyDxMIPMxiSzAFLIQ08gizCDNmEX0mEMWYx5ZggVkKRaRZVhCWrCMtGIFacMq0o5byHLcRlbgDrISd5FVuIesxn2kAw+QNXiIdOIR0lWWH2uBx0g3niDrMIqsxwiyAcPIRgwiPehBDBhCTqMachs1kIeohTxCHeQt6iHf0Id8Rz/yAwOIFV34DdCL3xC68RtGA/xGBjJQDBAYDPSCiE0jgoZNE8IJm2ZEGDYtiAgMEDHYtCGKsGlHqIEO/Kmvb0LjtXj5g/Ka0PeLyMgpf61Yy/RGjPV9lPhkM4U/xuW1H71CtRMtrTFJ8yx1sS30q9mMY5P13nrHQDyKI0pVYaQyXRQqNBpe6I6J2az6uQZIpe9a+EYkjjBMVxiO7AORcGXIB0Q6TMsBRGcFhn2rtVLA+VTSBoczUO/S3OQup1PbGuJRE3NkaLsmkAxsyKrNt8bmmLTI6v+ahFxfKExmkVSWt8q2Pc/LjsuActdyyaWMS4XS2u6FNbzV3daJ9pro9OT+9vY657P6itisRJz2B9MpM0ysyA5I6a/HkM3Ds/x6EvhssI8QTqicpi1DBPjDP+p5RLZDomzg6YuAt2efD9+mVQgKh3x7+5kgxjekFDVFi4MKaa93fL/nQyxNCc8K83K7VyMu4COOhM9WZZfbO7IosVTlB7lSWb7Yk8koFgoBIsJkxCvdDjsE6n97YvzZtfmSYXF7opjuW8Jk5qxIOkH2zNfavnrsfOJ+fdyH8pKsZIovD39AQ808fk+drNm+q3VDW6wGRHU3VjNTWtUh7nBe4e36t6yu/aA3p16vXxWm3rJSgrt++ELxGSdveG48krVOiDqtSRgZTzeheVVpa8AiSL5TO4Dn6Wssk9xPna0Cv93/fXKJvqJxstO7YcqZfvaIat7qkyvmUD6akauBR1sbhjRDNvxVy3P/ImTwRyXVfw+5ZWgojxIvhbJDSDEPrMnmTsTqLvLNLRONzaDuP2IMe4rziaAiLZ4Sk0xn4+CybNbhmp4aR1kxSVHPahUluovnY3TtmldTWA2RECBMOU3NkxHkuiTdsFo2JZiCNKicOIuc4wbnQeBJJZ2FJ26uR42FEUCAsxvgEEN8ECe6k4/9mb/Hh7blsq6PWCsmAMqNCR4V5hZziPoZ66PaQGPt3R3jvVx/vBtxQR5RpYWPDVGD1cyD/sN0rpLpEzIFmctePL0CZCYHCSmz2eDObe38LlXuXg2LBComkFmdx0Uob/h8PwBq9pvtgpDeqIXkQA5m4ZKMqFSJLF1q8LuPV5UKN6o8dTTPfeGStg9ayW5YFwmL9xjtuo3/NLIDg7bLBK53LEefE5VZRK6FvtL2obFB04c2xUhZlX2nkK0JMJ95xvwy9ygor5hJPFMZgSOnsHPXLJRoCCAsiJLmkm5aVzEqp98T5kEbxFgLCg9kHlXKJnVEozkxVvF6PiofJ9+R2Z8KsWcZkJVI9gLWS12A1W5Siekms8aKG+CrbAf6QhRFsZ5jSt3uG13r25tJFJhGRJUhniOTQVChCj21FmGwvOHQOCqgE1giywy5abP95y2Md5vTEhMU8hwJGEZhkI1q1liWMovlKHrTA1sWuLkbWBVlx5FagAGqRNGXuPk3rPZ/K6XGnxDxUllrF3XjqitfObjkqqCjoqLExVSVKUiBaFdIijM1Tg2JmjBqiYzi6JE+R1uMnLXUqOZ5UPtDdHQ3qobhKw2lYS09pflIVVzhNGuFyIQAREwv3fQNOXGd1GgjRgLmpR2GLM0RZWXLJBesZ0DyHbdxlZGKdOSEhR0Hwa9LSAwyg75KmY65oQRaUQV3rNOVpYKdkBLPB9Cr2baSNM/3pIqdt8lZoDiRs06igXdos70CR6WbmHBAei8BoA2tEkX6zSFNjFi5AZAOpAtWw0CcZLOgttDSTxQkkz3az50LqkPlBZA8YOpqLlCA5dr01sbI+rHjlcNuJEaxQP/gJs5o6+N6rACdbmak5Rqo67mkGXEMk/x7grba/6Yk/qHkj6MvDD8aX6unNwNAsDm2t3XBrK3mZT4op7NirLVAU/7zoY1fPq/tF4Z7V73VweP86ehR2GHZzM9UPDV28mJtvXhgCuWV/GFTzoLSiYsAsqotTUcoO7nZPUrsxbDFyRCAfrINlR7fPinQ6i3j1GyRoo5LqMssTBDFbM6GvHCEtWxZVt9WXKDEc/pZ76Iopu+CPjUnI5lFoRqa51s6Uj7VvGlBK1O2q6FaLOLz5LVzQwuwIgDORRdE7Mcc6YNrRkcQPvZvLKvTnrwlgDJKlNbZh+RNODbOxc0bXEv40wksCAiG1GQ3+qI03uOb6J0ztxNTcpvfFEoDiKMRsggTK+BJRmF/jce/RP8DhBnDcSycGIYazIiCqUEhYQFdEPvuP4l0nES6m4YGI+WENAMKtiF74yRFeqwzCUEV3buog/klO858Vcc0RJmwgo1KCxIHqaR4354GkaAB/2EoTQ/LK574ZVWIZHNPP66bNkEDcBkJs6zHdonqP5C9PEc+CZNIv/5CAgMwS3I//ABtAZ25ZPzbgcxn7fMoig7JS6iVOITAqq4+nZZm5uThTVnx3eSja4pcikZP//mVo/XfzcunV+hLfbXlIsjIKYeWQDp6MDLkH5ElZlDHdWhnbOLg+6QQ17iSDddAoQQHPnzI8gSRVNoKyJ0i+qAhihgpyf8S8H4UUSBmLcBtP4CUYmSvdUg82IEQ2NZMgmwEwY9VSQgCF6KT22VEmTwOl4sAkH5HaIX0t2CDwjIyo5pkDWpf64pRyvWUWlRvDuZLZ+8QZuqlBbe5UmiIkILIef92Qg+wslFqxKb4VdFKxjfSqhJqywUBBN6cQDTfeUmx+bcmRKY87QcpXYU4zs4t7jMwSlQmXZZrd4XMNmFeFsOaVGBH4jEfLxfOxb0Js2L72sDGqloS5Cc4woQAs5iyX/6g96u9+U53R8216r0HySDXv59Ri/LnVFbMDKtoPr6VTQfDa5yaF8vfBAF7OyNyJCPdRZecLFMCKrvStrzVq24MHE6OtiAQKl+dww/bvxx8WtaS367sWmELVNnHu71LK7PfvIW/Tl0QN0RFG0jHxcmmrCtGjkAHTsQT1yJwxZUZHwFxFVHy1ck9sitO0UmmntCh7kCvvs6tvnphaOX8DSgejAbhUNpOWZFEwzXTqurnE30LqKuDq03YmX50zyUYVNOmROR82qx4NDOtgVaZcezrbtAZAQf/MXYWd7L2Jb+Mec2uZaeSacIfFywWMfhPGdnY1is5/7kEA/XFvXVX4GoOHJN6tBWgDhpsWs/tVy6LWDRAJQdTM304WlKe+Pra/hbpKevySHxQb3iy73AeJp+HO69sHJsCw3UkZdys9CyI2Hk4TUxIiYaz2jKwWJ5l5QXrUtNtqiUFTKhosmlPYnPZoZ7gbriRnDhusKuCFqud9dhCfGNUL57vdA9cq8clisrDdafZwKC9VKPix6FujnwReGO+zRHT/TaZAEu+fKhiMqJR1zWEiufNiDW25S8MCOccqvOqeIJdpzTQdEP3h/W1mZ5KqqiM+ojZ6rlICVZ9MMIMh/Zc+pIm2lSbl9hay1RXBBUbF6I4M1KZvvFQRkbRaQXMjAT6cJlLR9uHj6DU7Dh061GlnYcNj8pHqDOTN9Bn6BH1O8was6z3VVZRlJussmgWYcqSVdacq4J5+d/lrfJZPc+mEFukv7EEKWGbXba/s1bNb/MrAAbxBcnheGgOEN1lttOHAqnkDmWhkLNUisplkCKBB5ubqPgWP9YzeLDvSPKadjcIxrmwVf5SAfQyDZ8Ivb7zidku+FtBjL3pW61MPrFyNhZy5m3rv+3RYzhW5uLtooXvcDtyRchzjQ7WJ0aZPb5+oa8q9eHHaQoT7QvxQlS0+lWFzYJhuFeyP+2Ltq4ZwRYsPcqT9RXgv+lhltnXMdNboh+ZNiU3UxQw5E2OE+ekJMElXsxWSvIKN4jVdniQYDrxSFxKANHq67I67q51xnKCBr+DHgAFnzYBigve7vSyYYIBIbUUYgHqwb2++uAKxFmpoXQjciDZSoJv6qYvbtfmTR1pEYQgaIoDmYFsenKxFb2NVAgSlTxgQkdBOSi1o+gQUN+R6X/qOhPTTwGi1gHNx1h93uqN049fv93Yzf3rkdV15GOhJvLOJS9yc2LlFBSAMdEEe+ejscVGM/8gY8dTvvxgaOh++XDYPJEt7eHIFlcTFya8IWLtDxZemXQ7Y9Z6rOHonVWpX2a++hq40UljbLXa3wBQPQJ8xG7fasTKgk1THm3mDPQDUqd3dW71DOUe08ZW6Dys3YQXqbcsicHGXIUG9sV6FdgScRcQABZ5BQ7T2NyOY+/Wz883wJQzuQJcCnFs0dbKBWZ1y5rU4Ilg4jjD4CKAMt7T0VFZvO4SAh7lXwoSwPwYPw/H2Ythr8XGlXyFLwBjwYDZJjwAG2/xqMROanC6aihT4qWAQo49KV5nSbyAmwSRVBsMQaTVyzDdJcKpEnqPScSMrAtcjrs9TEf3qYiunuc+xmiWtifPDBxoMQtXp1cRDARRLIUE/H7Dk2eRD09BODukpj416yULSMdcUCq8kRKtllWXoC8qnMi+9QGRERWyRgd/XEGCB4Wl382V5B3TO5GBxH9CnCyqYw4aIdyRFujnEQO3zPqc6HCg3w6vJH6u+LYEW+PiENYCpVLe2mIR5CuADsy2+HzafoQ2SSDmqL5sJIQZIcB+Dmgs8oVkJa2QQNLb/Eucc7fA6rPcxvxcpHztdmRiSWG6Ybmuw/1LG7skLd+mf1USe2olqxl4jInLe41UzsIORUKFhEMjLvVLK0i0Yufs338EUHGQsj0uylCwE7jDWBLM/wVWAjO4BA+0oybGNuHe0rZIUgGoQ1r1Pnd1et2qwCwKHM41mQyZPuJhHg2Q7PzAIgy5u8KQogjiMnf9LSQRhYoDaiaKkRNesP5Td1owMTAOIGBXueU8cfgZTKv8CK0YytraeUpVFxRMtVbSWEJCAmA3DXafKA6vc3A6NlR3kwzr7s8kXs5n3PUvknVO0RDCOhdpDnAURg9UjyACauborMfjiCBNhOJ+LBUCX349YTSKjBOjJJRr5DmG9EU93nvIpLHA3HmFrUhl+N+CHg3wnI1PesIHRAKOAROMSGgqJ90L5826cHW211jeAa4y9u2RXSdZtXw9BAEXQu7Yls0qhnDNw0F+GLgRrCvh35kB3UZQV8Lgfv64AvCJ/RYcEm3u3+ycYExNDwVtD8TooaIZrzMY5RjS8b1C5dswBYc14E5ZoeH/rGwMA91YsNmNkuIitpZuiMJS5OWVzBXr6696SmDwqXVp6NtVuVIwcrplfPto9IT70WL8IQdgzuliZo9uQBDMVNJV2ap6IWlZLLYhEo4YwQcM8uNATa38ct/eF26voUHk8Du9DuHOXBT8IPA/VYvmnl7YLROBVtwlw2LW9sE+DY+DeuUBiRUNPhv7vI/RGlXFbQsB9aSFL0v8OMpcU5146KIWcaYp09kqAG2tyHSjQtvj9nbvjr3GHDcCMCquZx7Dnss7QpxWcDvvMcyqsdch+NBDy1H2xgg4Kjj5b3nbRlUbRrGppbOxxlfRTswdNTDTpeLCgs85s0FmSe3+XM8Kn6Lk1gsKqewPVs2n+WP15J0WwXjYJcBEpB8DjTjvjWCQNLkgrNA+MAE2YCCDIyFoE1rJR7EcEIAvzstti/293f63sKdHcz72QVnYab+PG/srdypmnglZhVXDsTIqcwr/hcxPld0Wxds6GdCQHKNYEG/GrCCSgrp7TGIDWlfySUwy3YrvZMeblmodXJKm0GxgxAp8yXxstiqXLyj6pZBHS+IyewzeZb41lKh0VZzETBrv+eU1EqKGXuK22sukBff/P9X8fH947O4AbUYq3z/OWEppTwfg0EUOAv87rz/3THAHKTWOEfvRyUkUaX8DYL7WCMcatjkr68QJg52L7fKrV9en01D503I7oR2gN5uV4dlmoVkVXmHus9izsqP5QkJKSmcAn13hZy/k+6lY/AB/lcGhYcBkVpENZJWDyUHVU/zD50elmiDs++f+g79NNNz/unqqtz511v4r6Hpz1pSeUjSD5g3C/yvMoP7x34/fXAYcpvamGuN3JCW3aVfOVhC61D9lT7fnwdqsCH+da9Qg/O4Ffj8YfPR5kDKIsd67BiGTXVFYV7iwY21JjGLGRKf6lnPL3MoUYVXGO393lfu+SyiYaYlb+pYbDTl6y5fz2e8saaCxud2Gz/jDxtHmDwYf197uDRrp+/MJDP1uPYOQD0qddtcG4FpxAbVyKoZ/kGmUVjIg76ZMklspVgoHIQnerdkzuyUqf5snO/AT0v1ra33mfZALV+y3zWvfDv6e2RGep4x+Ra915aBoq4DKsGdQxTkp1sGGGdbx6Dh5YpTJuCfRK/F6vFLvAAFyQ6qEKsSxIu/pSbNemanUi/jTRUUVMy4FooZKPEmkuC5Sq2s2Mw5gB9c5oJqlSAjqVKOjYPlE3h3/o4/MCPON9+oV2bBmjcEmwMbQ1Hjun+nQvXsGGW3+guIVU4tzFxQDFN2ik+ur2Iu+1072wFKOckq/JBhqds5JGYrEMpqrkDOLMuXWHbUyqgT5UYvJhu/Nc4niAhXcEjaUtH9fPKczPZoXO68BhAIBqGNBKc2gVKMxX8N9nUP8JI+pwkyZJMtxPAfTNB/JJTmmmVeuHH4li5HKeBllXiUy2ZlogLCAFZvn5Jud+xbcfdnr7BA7xd21wF8RA8UbnZNgGV6pk9ooEtfCK9sLt2RPESgkbqUeypD+331cD3wRwXh6fDymwf5aRiLD5eLCZ7bn5hfy9dm4ucFx8YS3FMYIofzcgurAhRcX7W6pisM3EAOM40YZf+6+wNV9D0CE8HuB7oD/qe5duiTXtlK6svuuvMw3YXXqGSrdDlB+F82IlgxQvOqqsbi9Ka+S5CtKbal4XAbl5UEyIylB2VsefijneuueoWrBqdkHG0bVu8oj5icoSUZIlpfnMm28Yx03juOV+MIgVGusNT/VICbRqLeQ5ecCq+9d9O1b9CB8gRcJc0j1/E3IxYsI0qYGiPDKSJdeoqcy+IyR/Jycfa+rrlZ4qufk5I+kEmqmIMN7NspbDwTCI5lcn2eSwOKb37nS6usyYnL16UH0n1emaFI1mzfT4lMowXGDDcaGp3WEEWwMIBpj25febC5tvpl+LmvUXnqJDCfz8XlOytbIGNV7c+2QruR2XjsCNzW120C8xjUdHYl3TDEPemIaoJHdKbQBd7OV8pU0aTtJ+ooyJO4SCHVHgcREmbS1LoKZ5EmbSXIZwAaQVkZm21pn0WwDq+JWW3JlWxrwQ4Bg98jmXXAuGRTTyqYJBiHJuKQvflFwLtHdZSxO23MEx7Cc8WGnM04Wpwg3V/MpEw/DhAhCjoc/Q4DoBM6duabaTfRNtU4WwYDfjDc5pW9C/6Zjs6hI34xn4H+h9+PDl13X4V3q//PaM+Q7c8lNPwFBrdARaH7nZiwRM9uZcfxJKWA1QnFQI0u15NtdO2GgWu7cCemdg2eQEtVGpA6g6QUSNA6VFKSjwD9dDxzlBoVDdzU9xkk2mZDgaHK8zVqTkDguc4qh1XQ7ZGSIlrp0UwzjYMRA6T7YlXA7wbWLHki9Qw3MNO/QYgJpE8UpaQFHm08MLdxPOElfusTX5eFDkjbTbB46PiR7QZHlEmPAllsDEOeIsp5+PA2r/pUH+b9kNDDwjIZnxBrL+7Xvz6fF7i+afiosqbEH9iwXMxqYOEYDENNVDBxTJTVU53dEO7yr02FX1UUm3A/WBhQdyVBx3MFojNwzJz3B/2kJtFgPFUHFi5tLYPHuCyqGihbr//qH3gbj4Ta6qXQKmbR7+6i5zQE0LC63AVibb6ICAZrtNwWCSJhD2fHLIeTdOwTpUAdE+AeaeU2i51MVVC4rJP5CPGCcMvCdMxZfmuOZNcU2tkJuW0p/yG8C6PNX8/6w8aUJfOk0XxDaXPxy6sviL2ySRDgPGpWfhfLgs/JRme0ZzHn5bcwZ9I7cImNNoN/4eRQlQOSIXs1Os7xjG2yKldnDaqJhACSMYXah5RG11oeWopB9QIWxpAPJMKoCUx/mAK5wVPcaes9bOGNooDpw1q/FMrLgLP/sQqqBunCUP7pgBETW6pWTkihgT5NIJn13Epo9kEQdx549u94G2DywmcSZcJOHX1ureVinUyYlKWPS0uQtLdt3TNPaO2h1NEZGmrKlteJm3cB82zA3VMlH4uIXzU/z7lX25C8O9ez3NZGHCVmYidErqmkLJx7VeO/yhntFvbD3bo3P1bFht6NT7txN8dFUegv6RH0sL413VcrLMbdjU8Ymrmmm7vFm97kbEK9dVd4P951wOX5beHuiZmq1xkdsEBnE3nxqqg1u75hyRvlPc3IZa0WrJXFMZ/CCcwIqaGoqgEUFUNM8qOBEQZbH89CaiKqbxY32jU5dx8CC5Mi207cj0iKWvxCJEyX1IUvTBbq0pAB0qO1zbHNCdycG5UXkWe2w3XY59jmr1SCiVl8z3k6tOVZEVoMdUON6x/X2WophpCaxpmMkUtvHE+EIEpz1jDs3k5Z/vn5Hb8n09vGaO3fW8qSbd7pmbN5qHJTLFY7diSRB6t00gfehSxkZDneOOh+XDnmnCe4KUkmJ3Y6K5UpgjYIMSKOBMsxHTgAch2iGMjQahsPVL3wtzY5yqoLXrIFTquqAE4XyghMRvYiyBHC6kvUnisGgf4ov8CJhLjlLM4A+f4YMNPr8OVuCPHuODuD07NkOIsFC/IVoYQk77yWh2JUa4OiCnAAgQPQjVhDgDc64UH/F+431l9iuzwUoddasVAnqABw+UVNk/Bi+DMib002uKy4gfXR+BaPm7CC4WG8ZMBADD/aFlt7A3tAbfKaWrp6MUqMWSa/EgqqjJtX0+zNkkZyy/N0TXhOdnfewY7XfNVWD+1+KxnD34iYtKguQQHsa6R1mcwe9MbUxdbOZ3jE9Wf4ibhRWUbvXUasa/s3I+OVp/PKYnrj18fE9MatsB7/+nO6XjIx/G6hV3euqinPF4wzqgg9ZDQO9yqqKer2fHir/qApP5mTNx6cQU2pLN4G32aWkFFxK1vwkTrjqY6hcwLdu6SHdx8Po9TR8x/obMHcFa+h3MSCSxRZWVrsFa4IAptqxMmK8avtvdjLZtkcg9IHe/kiddZbW2GvlA23nWOBdu2y7u4FjndoHyteSKJKV+P6wm7AzuapSege3pIncXm9DemK6gcvavMbP1KnCtxJUnTUHQite5XGAa+AmonsKV90fr3haae9e7tMCtk2HXHkGHwMPkyKfAwLExePYsgqerh+Ur6I6Kp7AGGQVgoGf3FNLXVWh6q/gLQsIrfzAycBgElGEFTXw1OjPTs3IwJSvAkvXXlzixHoiIfg1gZPfS4Gl1u2xsU1L6+qan04gvRwSknSTz88CN27wk+KSyRZzrvk42VkmLLt2zo/Jw44Vv0ofw/bnGgm8YN51XhAPRA14LFLvTvEMnisF5WmU3UiyG7lj282l4bYBmWRSnKR9fQo8iYT5BKGz+FUseKSll1Iy5TLGdsH2oqD5Wx3VezE16qW8GWpjcji+7jKyvaNdHSmvYaiU4xh9NqbB2Vcx13Xa9S741wYdeEhe5AIrBHAGUgr+UGDWONADaPNSAlLIY7wxcgrOJqCgQsf+wWoo0RArVA1mZ+uKiwNJaApJRUg6/BGyuWP8/4B3zLefF5AycIeMHwF2LCe/6OkCIQUflBw+JeHrpy3mOPfbyV6rT6AqUVb8OvHPaAu0wHfuzJA00/pz92R3663C3llPj5TIZLkNRWgjcvq9OLok2jPF4V9BMlFA5vzbJM57j5VKapVy5d9g3gyBoVpq33w3ZBFSluvGzePT5Dd0D2ac3D/gHlmNkbzPEzf9wyMKiM7J/6Y4GlksixZb7CRiXEnxt9hPlopKwxv6y0ZdpNxEHauQi/k0WcvzHR92oFD82BvtA2mH5uBRiBvHyHWKkrOGVtqVAE/NYshGKrMtYhLwRwM2/e0/2y5Lautn9OX+leoUPJHNzIuDYqkj0uYlXBdxNMjNgaNtCWe2Zv00T+KbpWna+idPZjM73Y2Ttt1jJrzvmz1dyh7ckr/985I1q1K80lPn/SRbcwZvC0lzc6XQpQhdebrQG+oSCK7XM7PXP1qcOK1N4e2hmaueB3wr5lc2eHm3Z7bkZgundydMi2wk4FY/ftiM+NxumhbIcldsXYe/FfNr7pq8luSZxqpDtpUF7aG008ypMwV97ibWTF+ka0F8Z7JM7sQSYJPFYowNF3Dr6BdNRH6YcJOGO+B/+kxvRO/Rk8FvikdGj5w0fZo8c6ZiibyO04jWooPcMs5xtMxVc+3t9L8kJ0lcx27n1Lo+IJZxB9EqdL6kTpzEKWP/DwRXhMXq3y4neQfl/awJ1cCfw12kNSoEQgLyAhC6hI7oss5dzMZkA65KGLr7YMe6F6Op6MzBc93mq5Qx3FE3Vayx8kvws1aXPL1LpfDWQjLfzctFUxEqdY9dMnDYLIrbyDkXUXv6YDzi8TNuBgXxpxLzy8hxi8rT0YFSv79rdvxd/bf17JcdLG9Hfqt2ka4gh5WK4h6K+eI2jzY2n93GAb2M8VMcnYdOckrcxoZ6G1vV7DaPdraa0+ihA/taGG/vREQ8fBYReXE6+9DBzGPAAo65OCUZoiQ90T1Pny6XtEZF9aU6Ef8WTMRNxLonAJZ9wwHDPdbLvSAXMs8Ydp3f9V10hDTRtIFaTnt2aBKLyw17B1+tky0GAhWsh1WCa0ogttavI1ZxJN9LvXJicHYPC4ovKoqDnFadzWZY6KpjSobymIo+TM+eUIjzIZ0OKnDA/tVgUNFVExMVDAtDOaRiVGjklW29LlC5qQRiT0zTdZbKXcWamg1K2s7TjCxBAaRrgArIyYzIRDqIKSwEEjh5CK7buLEO0kL2UuG6H1BMfn4MJIMK8kHMLbZtHD9ROiWN9sKDdHL16cEGsBbOtnp/G5/kpQx+lfC+8cYumhm3Imle8mdTYLq4L0amYk2wVGPvSBauhfSqPVYuRubOeh7JNWDXzkvTjPNK5EvgWUh1OV0h/tfrhU3FJkyJyW3KYFlmeEZXLQ1q2Ti/h3lrpXeiG7kGbgLPwL3DNfASwp5S8a1AjZQtPVgKJEDfAazgAY9A0/O02rBaKy60IxRnrQ3Tanl6GoH3AEiifPs6QJLYZzCr+x6EPXjobk9Z9zDs4cNZ1lBb2GpTtja7zuTDHa3Nrpd31PcYr/csOHjUr1a9unhgZo//yga8/kdhYoex/b7iPB7aREA7YEJFXIPIzvEFkGHlod5DKyHDgli39BaQXppYmvzp7jLN0bptb9/8hkkKvsHwCMqors6ExJc7KOOgAqSntca6zYd6VxzatKcX9GoeNK11PncJLvF6VaY6S52p6nkEZVZXZUIZkH/P4cyfWJj7gVN5U+Qffz983fX+OkcOqYS2F+z4GQf26X1nFMwgHpFCXX67t3yib6vzLa7efFXm6OEaT/xl/dn9y/zUTYJTN4CfdHbMZnlfnu5I6QO9ejKhR/n8eHaOwNCk0kXbz1YxBM7RLmkyftF4lNQWjnOWU9ra6QwBg15LRS+1UEnHcqd8uusWQmuPOjFVHz3TiQGc39rgf/fValv0X1dx6bx/UI9E2QNnuTA821nKjPFIQP/h0rkrvykUf7VqtUJPGQbNQjG/CrTavzbEKPJvJEoM2LNAKiSIEjHnsK7KD64v1U56SLCox4IKuL0NqoBUxVTAKritzZMq+Ez8ZRmiWCnh5Gsbdu788LSt9VDXnAwkC8E9cyvqy49rnbFhL9GO72Zn531tg31rTG6RiXjLrLCvGCm+EgDeftq1cwBHCZ8bFtAwOZzyaMO6ne/fgnddFfYK86Pgwr68uKXs5o7s3Ph29n+VKjThR81K+/IR7ENjKe8/r93x9+eyS1k1C2RQbi4khWRFZA6EAJ4vKriiCRhTOY5JZMMxcuc3HAO9m27gBL+J6WhTClpsJq8rAXYWx35uxB35sLx/OGYYBN2/cLZCXC8e7a78AwTVnzrimjpcmihqE7Vq2kYsFBHFMtJmltnMr8ExwTLKbIv55wTO9Xaz6p6XlTlyGE5h7mz3kC248CF/ET/dxJIUJsiRs6LE+Uf7w7WR/pPYcNeIMY/3K4sbI4QxUx1m3C6XNzmuMSCRiMubIw0FczEFVP2FqzQUPDjrmsSbAuUI2eNcwDw//QTry2C3RhHvUKzlKbu9HhJ7Qmks8gk6yzeE3vPQS9mt5UGbblYfen8y71AxZPcf9ChIEcSlpMw/eB91Pd2Iq7E5OvW0y516zMtoIJIMxvock4gG4HyG01j8NavMkR3qRFayViJZ/gI68nDt+XH4VXd9GfkXsuSvijxfCXHPQn7wyRDu3RqSz554Yklw9YRHwwIHz/rA5pfPDB8ueM5Dk1DXB4d1yjnF1NqlX9vk2xWu8VU5YuZHEOZhGeY64wpiW05OrmFpWQq1ez6hGfcVR2mudH80rGX9xETTQmgCtXPTjXIuPKMVg+aSg7K6/4LzKmpdMpNB9ZjnZEYYiVBIDw5ahRVtQm/9mk+Jj+x9Bx9ZBEOIR5DH+szNoUm8zaQqzRHsknQpSVyGetdnpomE9foIW/R0NDswfxl16XSJ8j9uGi4zwcFvnjvnbTNMYv7S6aNckMcleAfQf+flwzmKdOcYZ65oVhYGXXA1Jzv9n3GhLQNnW0h3C5qPFfUit08kUuK99firTwKlZoTJeO0vbYZvuK/QXsgKQ/2y+7cleyQOkWSrlnw8jWwUURow9lNmwR6Iw+lsZWJRKpnd302RzIm/zXIGsXyUM0ZN9KaPxrnh0CJWerPDJOEX4ksy5beX0tT5hcwl+lD4+6YCSi1BKAsc+uSa7rj+KogQcpiVmXPKiMqhw2UF/su8fEpVpLQGltrQZehkadIaVaTLoGU+PmVqYoaOo06K3/DjwS/I4yfoL6KPH3tL0CePkV94d588sfHft2+25odoQvRqTccP9x/Xr79yf+UCAk8L0K13T+3i6njdB6H5ID1q7omLjJtFNSXxy8qTIqa9ABdPvN+N2Ff1s11xBZ9CXKsEP3/K+jQn8VOi1EOyjJhBzZxbm0nS4resROYCubQOXFj5jtvn08cteDNxLk5LZK+nf6Mlvl+vIpSU+GGuUA4Yv5ISgkrfr29whjdsf0OyGM/czFZ5hmQRZ5WWlMavPUOK8xXbX9zr7FLyNACarV7/QcVFIP7aNeFN2s8uno8F7EyRRkM+PvKcwVdrNnp4Kb2uNutNfaZmL3CNGxdH+qEEzco5CrwkEDX5Kr2UnorsEuA7y0sB5TXo8lKCnKeKwkv8CtmNvBJ/k6bzPFfrylFu4XysApeQUFc3l+BA6JKOczLnk1+QyAxbjMnOz24Xpo5BIt0FSTc7tm/fsoXcU67osoULfWnQI4tusDXU1uYzgO/5GLU9IxuA9wyVcDKIaYjy2AwGadkyElrq8VhClCQAlbACeK2DLHQR+I9+HsQDpbCC8cPby9x5VjziMBUkQeubGTmY1m1SMKu6iP4BREJ+QRmqj8Cyjp1Av31DUzrhgEiYgW4ZjR/hneLEFUgS9YBsmOUssXWnwZWdHVVwT7wrXR1QJc3tsx+qhP/1yocb50K5NOJz4YMsSNzjlwk9PBVuR4NzdXPz4eRMJaythRWwsjZTQtnQZpASUpTILpNB+blACqQ2JAMxIO+ML0kpBeDmiyiHg46gF41cdCAE8ORQWOsPoG/eoCkd7ADgmyEHkQM/ydTH2JHlalIgBdjRKewnZmAHAVDE37eZPfk/bzOlNvbi1q0XY2spm3kvXnE24zOFmzxjfIx+BtbWqd3NrqhMn7Vh2rEY+bRBUgm75fKFFkYCbrnT6JegWicnrXTrAqcVuHhG64VLLezt1EH/VasBJH0o/sD/fPqBvyqwY8M5s458jqwzy7xHPD3+HF5/ThS9OUPbG/lpDXRA+URm5yKtihT1nvQEwqAQ+wAYDgh1aWry58vsb9vr3EnI+AGNjYGxDwNCG0JVoepaMBQlkeiBBJibrjdHDfE/i1mvl5iBBACr+AOo+nskWSHuJczSxIRSVol7SBZ6hBn/fWe2M7L6O6sg8VUaroJ0rjom3Gk2dyLwOMKdTB0I1V5a392iOKpKQfQ8OgZjclQ6mhZ7xEHpsEmRlYRUV+3tLetactflhof3OiodjoaFJaVdjFBa0kV+h2Y5MPuNDb2NcZLRRpfpaJfjNVGd2ca0cVFaVk3WzGhI5zaWDjoJdAJu1lqkLgKXaGar49j3X75/LGtSfxG25x/8goAo2HLk8C9UWn9Y6LH/Xp8/fFg5EyehMnySjEYK5fQ0h6zGJ3jUEtAfxZzPcEuey1oozNjnk0kLIHnu4OZ1PlvIU3c7YPLs0i3aTIPVv5G5hOQ4bs+CZuuXe+8/fv46ZjUHAOs1/YiXdTiryhG99clWogBp6frTa0f0AFivOox4A2A10yMSAABAzEhx7RDjjIgAx9VSFQc2PGM2OvAJA+TmBreKAbCOGJBIJw5fwoZL4I/KQJHNT1iLSJPNaGLZm4+4iUSa+lYiehuVQMrUl490I1mGrNVVAYt2S+AI5qBhRBFXL1NhxhPSW7/PKzy30PJzDiEhOris5FRkKU8iyEIWxG6+z3VktrEIjUKWYPn/NsG3TAJSGy0oqkSyVDPypIzsUmQxAAAUhQ/A/NVJpCqenAm/V0X7dEVbyGTV2/2stzYasSJmZrZLRpaWEXya/FNW1Rj37ELsQU7eBpRYU8lUJJy3v0JyTaPHSCVPauD/TQ50InQbZiOQcVs24g/zPXICwdmu7UdmgQypZEQunM9I9D9jlAfKLgVaRIt8jyehYLjo1qDyEUN2gv0A/MtcNByAAPjXC4puUwQeRXph3p2Jdk4I0BirtQGsT+JniMslFErAaUiA2bFCdYpei/2yfke3KT627d26T9PVINX0un0qiZgLm+izDrKz0XOdcaVumQkBQBR+aQ6NAvBvHkcxwd2q7+T88luDADYm1LeGAQ7wCUJNFxIU00VbYwAJTCVYTA/bmgi8QNSzkwALVAIEQCgBAOAJFmJrCJDBnq1hQAWDBMH0UwTF9OGtMYALbhIspr/amgiywVeXJOATt/JbHDKsosyLIQ+OUhXPpIu3bkXJP8B30XJEENVewBIo5Tub24nlp0jgojWk97uqVV4xNfnJQiaGGClvmV7hdLNWbfe2tirKx6ajZrQgw8BSUMoVBrHnwCFJla8WdDqrmOE9AO69E1lMniTMfwFMhN6953Zs2lZyp0rSONmy7aLn7dKRVsldg5HGV0+s0SByk+RautIrcNSmuoDR2rPFxqp0lc21UptjPLzHncKwga4yplF0BjuTxe9Wfp8mFzcPryBKsqJqumFatuN6fhBGcZJmeVFWddN2/TBO8+l8ud7uj+fr/fma/Tfp75s5MsfmxJyaM3NuLsyluTLX5sbcmjtzbx7M4yh7USN5T8l/ILu0ycZBgvzdiya1ZAh0aZ2jLukykg8payyvoMG8/MK7bULChrMKTzxspNjYv4n7jOBr/efcP+rBGprchyfokY4MlyFZHo5whO3x83IkvNt3fVXowS+HOm5rRSfxyxH5Tz4eYqa3kPxfRwsx1k9hSMrl6BuRvX9aM+pRwiKS3ygRoch+GUYbh9lI+XKrrEZslxpa+XxwvryCLcEFWS6zY/a2qoLDn5/mj5s20gAsW3BF3NjkkJVW6mYd3zirtuE6UWrA6z0s2GTmiTr92IYKXdOkxZRBHeCwfpRBFA3ENBb8N7WyeoSKWg2iwcn0RP79Tg8J9SWgKFbXWLynr1WXEuLjqrI34lWB5Oo1K+O01kDEeswTlR4Xs4YShu9g5kSdlC+5J+4fus4uO4QGUI+cqPWTSH6qaX/pLMKWMmntsC6uRtlFLKg+jsDKQroC/QucCHSN4QYXse4oKVun63JCJ5A0JIsSrWVtkPSDA2uowgR2rEu2zLQgWq3ZsuQjGmnihlAG3RBP9MPY4ox8Kl8aNFAqFOSOz+VshuCf9EdHDRKx9k6dhj7oUL+I1q02oi0QM0ZEP9G2aSfgaRWoB6ZwreisXI4GaUkh+dEIAAAA') format('woff2'), + url('iconfont.woff?t=1586312422376') format('woff'), + url('iconfont.ttf?t=1586312422376') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('iconfont.svg?t=1586312422376#wukong') format('svg'); /* iOS 4.1- */ +} + +.wukong { + font-family: "wukong" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.wukong-chenggong:before { + content: "\e873"; +} + +.wukong-oa_analysis:before { + content: "\e705"; +} + +.wukong-icon_reset_account_login:before { + content: "\e703"; +} + +.wukong-marketing:before { + content: "\e704"; +} + +.wukong-examine-category-nine:before { + content: "\e6c2"; +} + +.wukong-examine-category-eight:before { + content: "\e6db"; +} + +.wukong-examine-category-overtime:before { + content: "\e6e4"; +} + +.wukong-examine-category-seven:before { + content: "\e6e5"; +} + +.wukong-examine-category-ordinary:before { + content: "\e6f3"; +} + +.wukong-examine-category-leave:before { + content: "\e702"; +} + +.wukong-examine-category-six:before { + content: "\e70a"; +} + +.wukong-examine-category-five:before { + content: "\e70f"; +} + +.wukong-examine-category-four:before { + content: "\e71f"; +} + +.wukong-examine-category-business:before { + content: "\e739"; +} + +.wukong-examine-category-borrowing:before { + content: "\e73b"; +} + +.wukong-examine-category-billing:before { + content: "\e744"; +} + +.wukong-examine-category-two:before { + content: "\e75f"; +} + +.wukong-examine-category-three:before { + content: "\e767"; +} + +.wukong-examine-category-one:before { + content: "\e627"; +} + +.wukong-log-delete:before { + content: "\e6ff"; +} + +.wukong-log-reply:before { + content: "\e701"; +} + +.wukong-check:before { + content: "\e698"; +} + +.wukong-help_tips:before { + content: "\e700"; +} + +.wukong-BI_Leaderboard:before { + content: "\e6fc"; +} + +.wukong-BI_Office:before { + content: "\e6fd"; +} + +.wukong-BI_Employee_performance:before { + content: "\e6fe"; +} + +.wukong-dashboard:before { + content: "\e697"; +} + +.wukong-business-customer:before { + content: "\e699"; +} + +.wukong-versions:before { + content: "\e696"; +} + +.wukong-goout:before { + content: "\e695"; +} + +.wukong-personcenter:before { + content: "\e694"; +} + +.wukong-reminder:before { + content: "\e653"; +} + +.wukong-systemconfig:before { + content: "\e679"; +} + +.wukong-taskSetstatistics:before { + content: "\e67a"; +} + +.wukong-task:before { + content: "\e67b"; +} + +.wukong-taskCompletestatistics:before { + content: "\e67c"; +} + +.wukong-examine:before { + content: "\e67d"; +} + +.wukong-funnelstatistics:before { + content: "\e67e"; +} + +.wukong-workbench:before { + content: "\e67f"; +} + +.wukong-project:before { + content: "\e680"; +} + +.wukong-message:before { + content: "\e681"; +} + +.wukong-notice:before { + content: "\e682"; +} + +.wukong-money:before { + content: "\e683"; +} + +.wukong-employeestatistics:before { + content: "\e684"; +} + +.wukong-moneystatistics:before { + content: "\e685"; +} + +.wukong-product:before { + content: "\e686"; +} + +.wukong-example:before { + content: "\e687"; +} + +.wukong-tag:before { + content: "\e688"; +} + +.wukong-log:before { + content: "\e689"; +} + +.wukong-over:before { + content: "\e68a"; +} + +.wukong-leads:before { + content: "\e68b"; +} + +.wukong-pay:before { + content: "\e68c"; +} + +.wukong-schedule:before { + content: "\e68d"; +} + +.wukong-statistics:before { + content: "\e68e"; +} + +.wukong-seas:before { + content: "\e68f"; +} + +.wukong-subproject:before { + content: "\e690"; +} + +.wukong-productstatistics:before { + content: "\e691"; +} + +.wukong-set:before { + content: "\e692"; +} + +.wukong-recycle:before { + content: "\e693"; +} + +.wukong-contract:before { + content: "\e675"; +} + +.wukong-customer:before { + content: "\e676"; +} + +.wukong-contacts:before { + content: "\e677"; +} + +.wukong-department:before { + content: "\e678"; +} + +.wukong-certificate:before { + content: "\e674"; +} + +.wukong-business:before { + content: "\e673"; +} + +.wukong-book:before { + content: "\e672"; +} + +.wukong-address:before { + content: "\e671"; +} + +.wukong-lock:before { + content: "\e625"; +} + +.wukong-edit-task:before { + content: "\e670"; +} + +.wukong-delete-task:before { + content: "\e66f"; +} + +.wukong-addition-task:before { + content: "\e66e"; +} + +.wukong-person-task:before { + content: "\e66c"; +} + +.wukong-time-task:before { + content: "\e66b"; +} + +.wukong-comment-task:before { + content: "\e668"; +} + +.wukong-activity-task:before { + content: "\e667"; +} + +.wukong-black-label:before { + content: "\e665"; +} + +.wukong-relevance:before { + content: "\e664"; +} + +.wukong-user:before { + content: "\e663"; +} + +.wukong-file:before { + content: "\e662"; +} + +.wukong-sub-task:before { + content: "\e660"; +} + +.wukong-label:before { + content: "\e65f"; +} + +.wukong-lightning:before { + content: "\e65e"; +} + diff --git a/src/assets/iconfont copy1/iconfont.eot b/src/assets/iconfont copy1/iconfont.eot new file mode 100644 index 0000000000000000000000000000000000000000..8d553f388d605e2d6db6787fc2558895d5b25bec GIT binary patch literal 24368 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 + + + + +Created by iconfont + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/iconfont copy1/iconfont.ttf b/src/assets/iconfont copy1/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..030cc4aaa0214fdefa72aa9d908132131733050b GIT binary patch literal 24208 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 PyWq#t_f3OdVHf;AI6ABE literal 0 HcmV?d00001 diff --git a/src/assets/iconfont copy1/iconfont.woff b/src/assets/iconfont copy1/iconfont.woff new file mode 100644 index 0000000000000000000000000000000000000000..3051fe809732b4e57c854d3be119ee9efb2deddb GIT binary patch literal 15468 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 X&LN4NkhE*7TKNIGaPqt0U#j{)COAR( literal 0 HcmV?d00001 diff --git a/src/assets/iconfont copy1/iconfont.woff2 b/src/assets/iconfont copy1/iconfont.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..9db08b3a2882f2fa4e708c1f9fd37a39ff06b4a7 GIT binary patch literal 13044 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 C$V#vP literal 0 HcmV?d00001 diff --git a/src/assets/img/crm/receivables_plan.png b/src/assets/img/crm/receivables_plan.png new file mode 100644 index 0000000000000000000000000000000000000000..5356e2ceea04b40b9535a7c07a9797e692134cc0 GIT binary patch literal 1698 zcmeAS@N?(olHy`uVBq!ia0vp^79h;Q1|(OsS<3+_$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWuD@%!-*I5hW46K32*3xq68pHF_1f1wh>l3^w)^1&PVosU-?Y zsp*+{wo31J?^jaDOtDo8H}y5}EpSfF$n>ZxN)4{^3rViZPPR-@vbR&PsjvbXkegbP zs8ErclUHn2VXFi-*9yo63F|8JrcYhY+)U}j}%t^fr}K--E^(yW49+@N*=dA3R!B_#z``ugSN z<$C4Ddih1^`i7R4Kr@W=jf`}GDs+o0^GXscbn}XpVJ5hw7AF^F7L;V>=P7_pOiaoz zEwNPsx)kDt+yY-;xWReF(0~F4nSMoLfxe-hfqrf-$X{U9#U(+h2xnkbT^v$bkg6Y) zTAW{6lnjiIG-a4(VA$ce2&53`8Y`Fl?$S+WEc2>{`&&*57FE7>vg)G#esYRJ(sVQzn`MC<Sn zvxSSJCCKTPj&9CQuC8Y0#!gN^Ct0{CLG`9!@itViB~HEiK*#8V;uR^LVM4&f17gBc zEsz6G_o;cn#9jnU)v*cn4#3PJ?&;zfQgQ3etkc=TjxxvVt!JlP&YA4-Ys1P*S-zRM z+KV_}dHV1B_#)O({~pW7C)`K&FX)JKu@$l5XiDH0>)xsP!-D1Lttjo1-CJ{=W}D^C zv;LR%Qgz|9l+C$jr)#Dgq&QFed*;ux?@2B5B1E?M@Al(5_%z+gTZ>~|6T{avYdl`= zSrc@%y3=Kf;KJW8k4P3Jlu0bHV%H9JTN1VAt<1rx)k)SCYAH!MF6Q2|y)t}RJ@3BX zdG?782TP6~-w8%b1@XYu=`G-Cc7Uq%Ye)DEgcyk&)5D z{z~8DN%1vin}@sy4)@g+a7x3RC&XhrqgyP}74 zmzXVQagJqwC=u11%JBPcufP#;WAB_$`Eou7mv7O`0a510%3Kz6ep$@*6~9|9%+xGf z`zu3IJ=vx9MMTXa=6gD44<_DZ_g%EQg6YHWo@wji9XPvZ?tZJd!_th{iKhp7%NvD3*O3WA~L^`f2He!imB6e z1T0?XH(uVC_L{j*@A$)gR)HV?-_tvL`1LyuE1CYSz9xAFk!k;o1D87AoF=-bA+KI! z@BQajmvW^=HUwwPbN4ypxSeOh((rz(-#f*hHiYpBYp!KTekmf7QJHwCb!&>g+PzC+ zCbxXqLpFTbY4LOGqifFMZSB*4^EEE-`jj2*^Tk%}tlKZG$umQLY?`&@pBzuJ>N}GQ z`w~hY)|D^*>bpgJbyN64gPJ2DYwy^e_;#-_pJCQD?V8iplGE~L&Mmrn#^tlB>#CVi zi(79oZ<2eKq?m4XhpTPYrL+)VhRd_qwoffIsFr2_@3*k@!YyW_UKQ~Nr$Tt@(yy(m zyOyKJynV|24>s#&7zH}{>v)}=RVpSEC8Jj$^(Ot<1*vBnQx>U3HLZ-BviHUvu`4Au zH=i}gOkgf@040zI^$eSpw(7?EEoqT`uuWTj?&MIX(D$Kb4Y$imP8_+x(W!CxO^H=# ojd70W+k|O7uJ(ofIsaKC7^K<%t}$@+>IT&sp00i_>zopr0IVvCdjJ3c literal 0 HcmV?d00001 diff --git a/src/components/CRMImport/index.vue b/src/components/CRMImport/index.vue index f379dc0..411c0c8 100644 --- a/src/components/CRMImport/index.vue +++ b/src/components/CRMImport/index.vue @@ -114,6 +114,7 @@ slot="footer" class="dialog-footer"> 0 ? this.user[0].id : '' + if (this.config.ownerSelectShow) { + params.owner_user_id = this.user.length > 0 ? this.user[0].id : '' + } if (this.config.poolSelectShow) { params.pool_id = this.pool_id } @@ -434,6 +439,12 @@ export default { product: crmProductExcelImportAPI }[this.crmType] this.loading = true + if (this.config.importParams) { + params = { + ...params, + ...this.config.importParams + } + } request(params) .then(res => { if (result) { @@ -524,7 +535,7 @@ export default { contacts: crmContactsDownloadExcelAPI, product: crmProductDownloadExcelAPI }[this.crmType] - request({ pool_id: this.config.poolSelectShow && this.pool_id }) + request(this.config.templateParams || { pool_id: this.config.poolSelectShow && this.pool_id }) .then(res => { downloadExcelWithResData(res) }) diff --git a/src/components/CreateCom/CrmRelativeTable.vue b/src/components/CreateCom/CrmRelativeTable.vue index e29381a..62ef349 100644 --- a/src/components/CreateCom/CrmRelativeTable.vue +++ b/src/components/CreateCom/CrmRelativeTable.vue @@ -376,7 +376,6 @@ export default { params[this.action.data.moduleType + '_id'] = this.action.data[ this.action.data.moduleType + 'Id'] || this.action.data[ this.action.data.moduleType + '_id'] - if (this.action.data.params) { for (const field in this.action.data.params) { params[field] = this.action.data.params[field] diff --git a/src/components/NewCom/WkCheckbox/index.vue b/src/components/NewCom/WkCheckbox/index.vue new file mode 100644 index 0000000..8e393ff --- /dev/null +++ b/src/components/NewCom/WkCheckbox/index.vue @@ -0,0 +1,212 @@ + + + + + diff --git a/src/components/NewCom/WkDescText/index.vue b/src/components/NewCom/WkDescText/index.vue new file mode 100644 index 0000000..de05006 --- /dev/null +++ b/src/components/NewCom/WkDescText/index.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/src/components/NewCom/WkDetailTable/View.vue b/src/components/NewCom/WkDetailTable/View.vue new file mode 100644 index 0000000..d6615a6 --- /dev/null +++ b/src/components/NewCom/WkDetailTable/View.vue @@ -0,0 +1,194 @@ + + + + + diff --git a/src/components/NewCom/WkDetailTable/WkTableItems.vue b/src/components/NewCom/WkDetailTable/WkTableItems.vue new file mode 100644 index 0000000..0aa6ea9 --- /dev/null +++ b/src/components/NewCom/WkDetailTable/WkTableItems.vue @@ -0,0 +1,160 @@ + + + + + + + diff --git a/src/components/NewCom/WkDetailTable/index.vue b/src/components/NewCom/WkDetailTable/index.vue new file mode 100644 index 0000000..259ecba --- /dev/null +++ b/src/components/NewCom/WkDetailTable/index.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/src/components/NewCom/WkDistpicker/index.vue b/src/components/NewCom/WkDistpicker/index.vue new file mode 100644 index 0000000..60f14c1 --- /dev/null +++ b/src/components/NewCom/WkDistpicker/index.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/src/components/NewCom/WkForm/Mixin.js b/src/components/NewCom/WkForm/Mixin.js index 233ee9b..f207ed6 100644 --- a/src/components/NewCom/WkForm/Mixin.js +++ b/src/components/NewCom/WkForm/Mixin.js @@ -2,13 +2,14 @@ export default { methods: { /** * 判断是否为普通 整句 文本框 - * @param formType 字段类型 + * @param form_type 字段类型 */ - isTrimInput(formType) { + isTrimInput(form_type) { return [ 'mobile', - 'email' - ].includes(formType) + 'email', + 'website' + ].includes(form_type) }, /** * 部门事件 @@ -37,7 +38,10 @@ export default { oldChange(dataValue, field, index) { this.$set(this.fieldFrom, field.field, dataValue.value) this.$emit('change', field, index, dataValue.value) - this.$refs.form.validateField(field.field) + // this.$refs.form.validateField(field.field) + if (this.$refs.form) { + this.$refs.form.validateField(field.field) + } }, /** @@ -68,6 +72,36 @@ export default { getTips(data) { const tips = data.tips || data.inputTips return tips ? `(${tips})` : '' + }, + /** + * 判断展示 + */ + getShowValue(item) { + if (item.hasOwnProperty('show')) { + return item.show + } + return true + }, + /** + * 获取类型图标 + * @param {*} formType + */ + getInputIcon(formType) { + return { + mobile: 'wk wk-icon-mobile', + email: 'wk wk-icon-email-outline', + website: 'wk wk-icon-link' + }[formType] + }, + /** + * 获取输入最大长度 + * @param {*} formType + */ + getInputMaxlength(formType) { + if (formType === 'website') { + return 800 + } + return 100 } } } diff --git a/src/components/NewCom/WkForm/WkField.vue b/src/components/NewCom/WkForm/WkField.vue new file mode 100644 index 0000000..8691d79 --- /dev/null +++ b/src/components/NewCom/WkForm/WkField.vue @@ -0,0 +1,322 @@ + + + + + diff --git a/src/components/NewCom/WkForm/WkFieldView.vue b/src/components/NewCom/WkForm/WkFieldView.vue new file mode 100644 index 0000000..ead3a94 --- /dev/null +++ b/src/components/NewCom/WkForm/WkFieldView.vue @@ -0,0 +1,192 @@ + + + + + diff --git a/src/components/NewCom/WkForm/WkFormItem.vue b/src/components/NewCom/WkForm/WkFormItem.vue new file mode 100644 index 0000000..070d9ff --- /dev/null +++ b/src/components/NewCom/WkForm/WkFormItem.vue @@ -0,0 +1,130 @@ + + + + + + + + diff --git a/src/components/NewCom/WkForm/WkFormItems.vue b/src/components/NewCom/WkForm/WkFormItems.vue index 3e3e32e..a56f492 100644 --- a/src/components/NewCom/WkForm/WkFormItems.vue +++ b/src/components/NewCom/WkForm/WkFormItems.vue @@ -1,188 +1,45 @@ diff --git a/src/components/NewCom/WkForm/index.vue b/src/components/NewCom/WkForm/index.vue index b77abc0..de110ad 100644 --- a/src/components/NewCom/WkForm/index.vue +++ b/src/components/NewCom/WkForm/index.vue @@ -16,7 +16,7 @@ v-for="(item, index) in fieldList" :key="index" :prop="item.field" - :class="[item.className || '', `is-${item.formType}`]"> + :class="[item.className || '', `is-${item.form_type}`]"> item.name).join() : placeholder + } else if (form_type === 'floatnumber') { + return isEmpty(value) ? '' : separator(value) + } else if (form_type === 'date') { + return getWkDateTime(value) + } else if (form_type === 'location') { + return isObject(value) ? value.address : placeholder + } else if (form_type === 'date_interval') { + return isArray(value) ? value.join('-') : placeholder + } else if (form_type === 'percent') { + return isEmpty(value) ? placeholder : `${value}%` + } else if (form_type === 'single_user') { + if (isObject(value)) { + return value.realname || placeholder + } + return value || placeholder + } else if (form_type === 'select') { + const newValue = CustomFieldsMixin.methods.getRealParams({ form_type }, value) + if (isEmpty(newValue)) { + return placeholder + } else { + return newValue + } + } else if (form_type === 'checkbox') { + const newValue = CustomFieldsMixin.methods.getRealParams({ form_type }, value) + if (isEmpty(newValue)) { + return placeholder + } else { + return newValue + } + } else if (form_type === 'structure') { + if (isArray(value)) { + return value.map(item => item.name).join() || placeholder + } + return value || placeholder + } else if (form_type === 'user') { + if (isArray(value)) { + return value.map(item => item.realname).join() || placeholder + } + return value || placeholder + } else if (form_type === 'check_status') { + return CheckStatusMixin.methods.getStatusName(value) + } + + return isEmpty(value) ? placeholder : value +} diff --git a/src/components/NewCom/WkLocation/index.vue b/src/components/NewCom/WkLocation/index.vue new file mode 100644 index 0000000..fe86eca --- /dev/null +++ b/src/components/NewCom/WkLocation/index.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/src/components/NewCom/WkLocationPointDialog/index.vue b/src/components/NewCom/WkLocationPointDialog/index.vue new file mode 100644 index 0000000..38ebff1 --- /dev/null +++ b/src/components/NewCom/WkLocationPointDialog/index.vue @@ -0,0 +1,210 @@ + + + diff --git a/src/components/NewCom/WkPercentInput/index.vue b/src/components/NewCom/WkPercentInput/index.vue new file mode 100644 index 0000000..03782ea --- /dev/null +++ b/src/components/NewCom/WkPercentInput/index.vue @@ -0,0 +1,281 @@ + + diff --git a/src/components/NewCom/WkPosition/index.vue b/src/components/NewCom/WkPosition/index.vue new file mode 100644 index 0000000..c473da6 --- /dev/null +++ b/src/components/NewCom/WkPosition/index.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/src/components/NewCom/WkSelect/index.vue b/src/components/NewCom/WkSelect/index.vue new file mode 100644 index 0000000..cfda989 --- /dev/null +++ b/src/components/NewCom/WkSelect/index.vue @@ -0,0 +1,205 @@ + + + + + diff --git a/src/components/NewCom/WkSignaturePad/Image.vue b/src/components/NewCom/WkSignaturePad/Image.vue new file mode 100644 index 0000000..96c059b --- /dev/null +++ b/src/components/NewCom/WkSignaturePad/Image.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/src/components/NewCom/WkSignaturePad/VueSignaturePad/index.vue b/src/components/NewCom/WkSignaturePad/VueSignaturePad/index.vue new file mode 100644 index 0000000..422af27 --- /dev/null +++ b/src/components/NewCom/WkSignaturePad/VueSignaturePad/index.vue @@ -0,0 +1,196 @@ + + diff --git a/src/components/NewCom/WkSignaturePad/VueSignaturePad/signature.png b/src/components/NewCom/WkSignaturePad/VueSignaturePad/signature.png new file mode 100644 index 0000000000000000000000000000000000000000..4459c999d894ec04e9e8100cd74a6898bdc10bf1 GIT binary patch literal 394 zcmV;50d@X~P)Px$L`g(JR5%fxlCe&NKoEu(w6L)SOzgBe=`2nQ3toakFR`-%V{2k*Wnw%DyusP< z0@q2Yckzq`zJi8#Q1F}R8qV|LdXr38hWS7K-B~M1k_V;Ki)C38Nyl-9VHmzsGYT8g zE1l;&pX$2qS5-C0^L)ujO_NQ^pS`AOwpkbC_&*Svm>{|YuolPh5qSl0WD2o6oz4*P zBcNx54KNi&QQs6|2SM=WdEP#d9S-zZ01~DU>$6=cIXG7p;o=m6h zg!dJCHuXK3>p+9rPQJujI6BO-Oh&%`CqO_&Q7o5bIbgYgxXZR`sdI0}MgVDUK}K@j o5uX8CH3qaG7p(WlTil#}0H5E|)&dmb-v9sr07*qoM6N<$f(8(* +
+ + +
+ + + + + + + diff --git a/src/components/NewCom/WkSignaturePad/utils/index.js b/src/components/NewCom/WkSignaturePad/utils/index.js new file mode 100644 index 0000000..0819f06 --- /dev/null +++ b/src/components/NewCom/WkSignaturePad/utils/index.js @@ -0,0 +1,26 @@ +export const IMAGE_TYPES = ['image/png', 'image/jpeg', 'image/svg+xml'] + +export const checkSaveType = type => IMAGE_TYPES.includes(type) + +export const DEFAULT_OPTIONS = { + dotSize: (0.5 + 2.5) / 2, + minWidth: 0.5, + maxWidth: 2.5, + throttle: 16, + minDistance: 5, + backgroundColor: 'rgba(0,0,0,0)', + penColor: 'black', + velocityFilterWeight: 0.7, + onBegin: () => {}, + onEnd: () => {} +} + +export const convert2NonReactive = observerValue => + JSON.parse(JSON.stringify(observerValue)) + +export const TRANSPARENT_PNG = { + src: + 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=', + x: 0, + y: 0 +} diff --git a/src/components/NewCom/WkUserSelect/src/WkUser.vue b/src/components/NewCom/WkUserSelect/src/WkUser.vue index 44c58fa..7643fa2 100644 --- a/src/components/NewCom/WkUserSelect/src/WkUser.vue +++ b/src/components/NewCom/WkUserSelect/src/WkUser.vue @@ -145,8 +145,10 @@ export default { } }) this.$emit('input', ids) + this.$emit('change', val) } else { this.$emit('input', []) + this.$emit('change', []) } }, diff --git a/src/components/SlideView.vue b/src/components/SlideView.vue index d1309c0..926841b 100644 --- a/src/components/SlideView.vue +++ b/src/components/SlideView.vue @@ -10,7 +10,7 @@ class="slide-detail-card-container"> @@ -218,8 +218,8 @@ export default { .close-btn { position: absolute; - top: 160px; - left: -40px; + top: 153px; + left: -46px; z-index: 1; border-top-right-radius: 0; border-bottom-right-radius: 0; @@ -227,6 +227,7 @@ export default { /deep/ i { font-size: 26px; + margin-left: 0; } } diff --git a/src/components/VDistpicker/Distpicker.vue b/src/components/VDistpicker/Distpicker.vue index 3bf7abf..03cb957 100644 --- a/src/components/VDistpicker/Distpicker.vue +++ b/src/components/VDistpicker/Distpicker.vue @@ -1,74 +1,27 @@ @@ -115,7 +111,7 @@ export default { handleCustomField(type, item, index) { if (type == 'edit') { this.$router.push({ - name: 'handlefield', + name: 'customField', params: { // type: { // 1: 'crm_leads', @@ -137,7 +133,9 @@ export default { 'crm_business': 5, 'crm_contract': 6, 'crm_receivables': 7, - 'crm_visit': 17 + 'crm_visit': 17, + 'crm_invoice': 18, + 'crm_receivables_plan': 19 }[item.types] } }) @@ -167,6 +165,10 @@ export default { return require('@/assets/img/crm/receivables.png') } else if (types === 'crm_visit') { return require('@/assets/img/crm/visit.png') + } else if (types === 'crm_invoice') { + return require('@/assets/img/crm/invoice.png') + } else if (types === 'crm_receivables_plan') { + return require('@/assets/img/crm/receivables_plan.png') } return require('@/assets/img/crm/product.png') } diff --git a/src/views/admin/fields/components/FieldItem/FieldBoolean.vue b/src/views/admin/fields/components/FieldItem/FieldBoolean.vue new file mode 100644 index 0000000..da185bb --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/FieldBoolean.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/admin/fields/components/FieldItem/FieldCheckbox.vue b/src/views/admin/fields/components/FieldItem/FieldCheckbox.vue new file mode 100644 index 0000000..89ee0c7 --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/FieldCheckbox.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/views/admin/fields/components/FieldItem/FieldDateInterval.vue b/src/views/admin/fields/components/FieldItem/FieldDateInterval.vue new file mode 100644 index 0000000..9cb9294 --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/FieldDateInterval.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/src/views/admin/fields/components/FieldItem/FieldDescText.vue b/src/views/admin/fields/components/FieldItem/FieldDescText.vue new file mode 100644 index 0000000..5aa02fe --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/FieldDescText.vue @@ -0,0 +1,77 @@ + + + + + + diff --git a/src/views/admin/fields/components/FieldItem/FieldDetailTable.vue b/src/views/admin/fields/components/FieldItem/FieldDetailTable.vue new file mode 100644 index 0000000..27a810f --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/FieldDetailTable.vue @@ -0,0 +1,224 @@ + + + + + diff --git a/src/views/admin/fields/components/FieldItem/FieldFile.vue b/src/views/admin/fields/components/FieldItem/FieldFile.vue new file mode 100644 index 0000000..62411fe --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/FieldFile.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/src/views/admin/fields/components/FieldItem/FieldInput.vue b/src/views/admin/fields/components/FieldItem/FieldInput.vue new file mode 100644 index 0000000..834e2f1 --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/FieldInput.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/src/views/admin/fields/components/FieldItem/FieldLocation.vue b/src/views/admin/fields/components/FieldItem/FieldLocation.vue new file mode 100644 index 0000000..22fa501 --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/FieldLocation.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/views/admin/fields/components/FieldItem/FieldPercent.vue b/src/views/admin/fields/components/FieldItem/FieldPercent.vue new file mode 100644 index 0000000..d36328f --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/FieldPercent.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/views/admin/fields/components/FieldItem/FieldPosition.vue b/src/views/admin/fields/components/FieldItem/FieldPosition.vue new file mode 100644 index 0000000..dec4373 --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/FieldPosition.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/views/admin/fields/components/FieldItem/FieldSelect.vue b/src/views/admin/fields/components/FieldItem/FieldSelect.vue new file mode 100644 index 0000000..c915f69 --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/FieldSelect.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/src/views/admin/fields/components/FieldItem/FieldTextarea.vue b/src/views/admin/fields/components/FieldItem/FieldTextarea.vue new file mode 100644 index 0000000..4a99c9d --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/FieldTextarea.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/src/views/admin/fields/components/FieldItem/FieldWrapper.vue b/src/views/admin/fields/components/FieldItem/FieldWrapper.vue new file mode 100644 index 0000000..f37c982 --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/FieldWrapper.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/src/views/admin/fields/components/FieldItem/FieldWritingSign.vue b/src/views/admin/fields/components/FieldItem/FieldWritingSign.vue new file mode 100644 index 0000000..6d0dc09 --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/FieldWritingSign.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/src/views/admin/fields/components/FieldItem/index.js b/src/views/admin/fields/components/FieldItem/index.js new file mode 100644 index 0000000..4fe0c3d --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/index.js @@ -0,0 +1,13 @@ +export { default as FieldInput } from './FieldInput' +export { default as FieldTextarea } from './FieldTextarea' +export { default as FieldSelect } from './FieldSelect' +export { default as FieldCheckbox } from './FieldCheckbox' +export { default as FieldFile } from './FieldFile' +export { default as FieldBoolean } from './FieldBoolean' +export { default as FieldPercent } from './FieldPercent' +export { default as FieldPosition } from './FieldPosition' +export { default as FieldLocation } from './FieldLocation' +export { default as FieldDetailTable } from './FieldDetailTable' +export { default as FieldWritingSign } from './FieldWritingSign' +export { default as FieldDateInterval } from './FieldDateInterval' +export { default as FieldDescText } from './FieldDescText' diff --git a/src/views/admin/fields/components/FieldItem/mixins.js b/src/views/admin/fields/components/FieldItem/mixins.js new file mode 100644 index 0000000..3217f37 --- /dev/null +++ b/src/views/admin/fields/components/FieldItem/mixins.js @@ -0,0 +1,132 @@ +import { getFieldAuth } from '../../utils' +import { isEmpty } from '@/utils/types' + +export default { + props: { + field: { // 当前字段信息 + type: Object, + required: true + }, + fieldArr: { // 全部字段数组,为空时则禁止点击改变位置 + type: Array, + default: () => [] + }, + point: { // 当前字段坐标 + type: Array + }, + activePoint: { // 选中的字段坐标 + type: Array, + default: () => [] + } + }, + data() { + return { + specialFormType: [ + // 'detail_table' // 明细表格 + ] + } + }, + computed: { + // 当前字段是否激活 + activate() { + return this.point[0] === this.activePoint[0] && + this.point[1] === this.activePoint[1] + }, + /** 只读 */ + disabled() { + return !this.fieldAuth.defaultEdit + }, + + fieldAuth() { + return getFieldAuth(this.field.operating) + }, + // 向上操作按钮 + topFlag() { + if (isEmpty(this.fieldArr)) return false + // 第一行、上一行有4个、上一行为特殊字段类型不显示 + const row = this.point[0] + if (row === 0) return false + const prevRow = this.fieldArr[row - 1] + if (prevRow.length === 4) return false + if (this.specialFormType.includes(prevRow[0].form_type)) return false + return true + }, + // 向下操作按钮 + bottomFlag() { + if (isEmpty(this.fieldArr)) return false + // 最后一行、当前行只有一个不显示 + const row = this.point[0] + if (row === this.fieldArr.length - 1) return false + // if (this.fieldArr[row].length <= 1) return false + return true + }, + // 左侧操作按钮 + leftFlag() { + if (isEmpty(this.fieldArr)) return false + // 第一列不显示 + const column = this.point[1] + if (column === 0) return false + return true + }, + // 右侧操作按钮 + rightFlag() { + if (isEmpty(this.fieldArr)) return false + // 最后一列不显示 + const column = this.point[1] + const row = this.point[0] + if (column === this.fieldArr[row].length - 1) return false + return true + }, + // 复制按钮 + copyFlag() { + if (isEmpty(this.fieldArr)) return false + return ![ + 'customer', + 'business', + 'contacts', + 'contract', + 'receivables_plan', + 'single_user' + ].includes(this.field.form_type) + }, + controlFlag() { + return { + top: this.topFlag, + bottom: this.bottomFlag, + left: this.leftFlag, + right: this.rightFlag, + delete: this.fieldAuth.deleteEdit, + copy: this.copyFlag + } + } + }, + // watch: { + // field: { + // handler() { + // this.$nextTick(() => { + // this.$forceUpdate() + // }) + // }, + // deep: true, + // immediate: true + // } + // }, + methods: { + /** + * click + * @param evt + */ + emitClick(evt) { + this.$emit('click', evt) + }, + + /** + * 点击删除 + * @param action + * @param evt + */ + handleAction(action, evt) { + this.$emit('action', action, this.point, evt) + } + } +} diff --git a/src/views/admin/fields/components/SettingField/SettingDefault.vue b/src/views/admin/fields/components/SettingField/SettingDefault.vue new file mode 100644 index 0000000..2d80f27 --- /dev/null +++ b/src/views/admin/fields/components/SettingField/SettingDefault.vue @@ -0,0 +1,372 @@ + + + + + diff --git a/src/views/admin/fields/components/SettingField/SettingDescText.vue b/src/views/admin/fields/components/SettingField/SettingDescText.vue new file mode 100644 index 0000000..062d13e --- /dev/null +++ b/src/views/admin/fields/components/SettingField/SettingDescText.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/views/admin/fields/components/SettingField/SettingDetailTable.vue b/src/views/admin/fields/components/SettingField/SettingDetailTable.vue new file mode 100644 index 0000000..6bfb81a --- /dev/null +++ b/src/views/admin/fields/components/SettingField/SettingDetailTable.vue @@ -0,0 +1,164 @@ + + + + + diff --git a/src/views/admin/fields/components/SettingField/SettingLogicForm.vue b/src/views/admin/fields/components/SettingField/SettingLogicForm.vue new file mode 100644 index 0000000..4ca26b5 --- /dev/null +++ b/src/views/admin/fields/components/SettingField/SettingLogicForm.vue @@ -0,0 +1,321 @@ + + + + + diff --git a/src/views/admin/fields/components/SettingField/SettingNumber.vue b/src/views/admin/fields/components/SettingField/SettingNumber.vue new file mode 100644 index 0000000..2007104 --- /dev/null +++ b/src/views/admin/fields/components/SettingField/SettingNumber.vue @@ -0,0 +1,211 @@ + + + + + + diff --git a/src/views/admin/fields/components/SettingField/SettingOptions.vue b/src/views/admin/fields/components/SettingField/SettingOptions.vue new file mode 100644 index 0000000..21a5ebf --- /dev/null +++ b/src/views/admin/fields/components/SettingField/SettingOptions.vue @@ -0,0 +1,395 @@ + + + + + diff --git a/src/views/admin/fields/components/SettingField/SettingPrecisions.vue b/src/views/admin/fields/components/SettingField/SettingPrecisions.vue new file mode 100644 index 0000000..f00e58d --- /dev/null +++ b/src/views/admin/fields/components/SettingField/SettingPrecisions.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/views/admin/fields/components/SettingField/index.vue b/src/views/admin/fields/components/SettingField/index.vue new file mode 100644 index 0000000..c24c4b1 --- /dev/null +++ b/src/views/admin/fields/components/SettingField/index.vue @@ -0,0 +1,325 @@ + + + + + diff --git a/src/views/admin/fields/field.js b/src/views/admin/fields/field.js new file mode 100644 index 0000000..6c0126d --- /dev/null +++ b/src/views/admin/fields/field.js @@ -0,0 +1,39 @@ +export default class Field { + constructor(obj) { + this.field_type = 0 // 新增字段默认加入0 1是系统字段 2 客户行业 级别 来源 等 3 特殊 + this.field_id = obj.field_id || '' // 字段id 1 + this.name = obj.name || '' // 标识名 1 + this.form_type = obj.form_type || '' // 字段类型 1 + this.is_unique = obj.is_unique || 0 // 是否唯一 + this.is_null = obj.is_null || 0 // 是否必填 + this.is_hidden = obj.is_hidden || 0 // 是否隐藏字段 + this.input_tips = obj.input_tips || '' // 输入提示 + if (this.form_type === 'textarea') { + this.max_length = obj.max_length || 800 // textarea 多行文本有最大数量 + } + + if (this.form_type === 'checkbox') { + this.default_value = obj.default_value || [] + } else { + this.default_value = obj.default_value || '' + } + + // 表格的特殊处理 + if (this.form_type === 'form') { + this.formValue = obj.formValue || [] // 内部布局 + } + + this.setting = obj.setting || [] // 单选选项 + // this.showSetting = obj.showSetting || [] // 单选选项 + // this.componentName = '' // 组件名字 + this.is_deleted = 0 // 是删除标示这个字段是无效的 1是无效的 + } + + // 校验数据 + check() { + if (this.name === '') { + return '字段名称不能为空' + } + return '' + } +} diff --git a/src/views/admin/fields/fieldTypeLib.js b/src/views/admin/fields/fieldTypeLib.js new file mode 100644 index 0000000..95b8957 --- /dev/null +++ b/src/views/admin/fields/fieldTypeLib.js @@ -0,0 +1,163 @@ +export default [{ + componentName: 'FieldInput', + form_type: 'text', + name: '单行文本', + type: 1, + icon: 'wk wk-icon-text' +}, +{ + componentName: 'FieldTextarea', + form_type: 'textarea', + name: '多行文本', + type: 2, + icon: 'wk wk-icon-textarea' +}, +{ + componentName: 'FieldInput', + form_type: 'website', + name: '网址', + type: 25, + icon: 'wk wk-icon-website' +}, + +{ + componentName: 'FieldBoolean', + form_type: 'boolean_value', + name: '布尔值', + type: 41, + icon: 'wk wk-icon-bool' +}, +{ + componentName: 'FieldSelect', + form_type: 'select', + name: '单选', + type: 3, + icon: 'wk wk-icon-select' +}, +{ + componentName: 'FieldCheckbox', + form_type: 'checkbox', + name: '多选', + type: 9, + icon: 'wk wk-icon-checkbox' +}, +{ + componentName: 'FieldInput', + form_type: 'number', + name: '数字', + type: 5, + icon: 'wk wk-icon-int' +}, +{ + componentName: 'FieldInput', + form_type: 'floatnumber', + name: '货币', + type: 6, + icon: 'wk wk-icon-coin' +}, +{ + componentName: 'FieldPercent', + form_type: 'percent', + name: '百分数', + type: 42, + icon: 'wk wk-icon-percent' +}, +{ + componentName: 'FieldInput', + form_type: 'mobile', + name: '手机', + type: 7, + icon: 'wk wk-icon-mobile' +}, +{ + componentName: 'FieldInput', + form_type: 'email', + name: '邮箱', + type: 14, + icon: 'wk wk-icon-email' +}, +{ + componentName: 'FieldInput', + form_type: 'date', + name: '日期', + type: 4, + icon: 'wk wk-icon-date' +}, +{ + componentName: 'FieldInput', + form_type: 'datetime', + name: '日期时间', + type: 13, + icon: 'wk wk-icon-datetime' +}, +{ + componentName: 'FieldDateInterval', + form_type: 'date_interval', + name: '日期区间', + type: 48, + icon: 'wk wk-icon-range' +}, +{ + componentName: 'FieldPosition', + form_type: 'position', + name: '地址', + type: 43, + icon: 'wk wk-icon-address' +}, +{ + componentName: 'FieldLocation', + form_type: 'location', + name: '定位', + type: 44, + icon: 'wk wk-icon-nav' +}, +{ + componentName: 'FieldInput', + form_type: 'user', + name: '人员', + type: 10, + icon: 'wk wk-icon-user-data' +}, +{ + componentName: 'FieldInput', + form_type: 'structure', + name: '部门', + type: 12, + icon: 'wk wk-icon-users' +}, +{ + componentName: 'FieldFile', + form_type: 'file', + name: '附件', + type: 8, + icon: 'wk wk-icon-file' +}, +{ + componentName: 'FieldWritingSign', + form_type: 'handwriting_sign', + name: '手写签名', + type: 46, + icon: 'wk wk-icon-signature' +}, +{ + componentName: 'FieldDescText', + form_type: 'desc_text', + name: '描述文字', + type: 50, + icon: 'wk wk-icon-des' +}, +{ + componentName: 'FieldDetailTable', + form_type: 'detail_table', + name: '明细表格', + type: 45, + icon: 'wk wk-icon-file' +} +] + +export const picField = { + componentName: 'FieldInput', + form_type: 'pic', + name: '图片', + icon: 'wk ' +} diff --git a/src/views/admin/fields/index.vue b/src/views/admin/fields/index.vue new file mode 100644 index 0000000..4e9ad40 --- /dev/null +++ b/src/views/admin/fields/index.vue @@ -0,0 +1,940 @@ + + + + + diff --git a/src/views/admin/fields/utils.js b/src/views/admin/fields/utils.js new file mode 100644 index 0000000..7c32e92 --- /dev/null +++ b/src/views/admin/fields/utils.js @@ -0,0 +1,67 @@ +export function getFieldAuth(operating) { + const binaryStr = operating.toString(2).padStart(8, '0') + // console.log('binaryStr: ', operating, binaryStr) + return { + nameEdit: Boolean(Number(binaryStr.charAt(0))), // 是否可编辑字段名 + deleteEdit: Boolean(Number(binaryStr.charAt(1))), // 是否可删除字段 + defaultEdit: Boolean(Number(binaryStr.charAt(2))), // 可编辑 + percentEdit: Boolean(Number(binaryStr.charAt(3))), // 是否允许修改字段占比 + nullEdit: Boolean(Number(binaryStr.charAt(4))), // 是否可设置为必填 + uniqueEdit: Boolean(Number(binaryStr.charAt(5))), // 是否可设置为唯一 + hiddenEdit: Boolean(Number(binaryStr.charAt(6))), // 是否可隐藏字段 + optionsEdit: Boolean(Number(binaryStr.charAt(7))) // 是否允许编辑选项 + } +} + +export function typeToComponent(item) { + if (item.type === 0) return 'FieldInput' + if ([ + 'text', + 'number', + 'floatnumber', + 'mobile', + 'email', + 'date', + 'datetime', + 'user', + 'structure', + 'contacts', + 'customer', + 'contract', + 'business', + 'single_user', + 'website' + ].includes(item.form_type)) { + return 'FieldInput' + } + switch (item.form_type) { + case 'textarea': // 多行文本 + return 'FieldTextarea' + case 'select': // 选项 + return 'FieldSelect' + case 'checkbox': // 多选 + return 'FieldCheckbox' + case 'file': // 附件 + return 'FieldFile' + case 'boolean_value': // 布尔 + return 'FieldBoolean' + case 'percent': // 百分数 + return 'FieldPercent' + case 'position': // 地区定位 + return 'FieldPosition' + case 'location': // 定位 + return 'FieldLocation' + case 'detail_table': // 明细表格 + return 'FieldDetailTable' + case 'handwriting_sign': // 手写签名 + return 'FieldWritingSign' + case 'date_interval': // 日期区间 + return 'FieldDateInterval' + case 'desc_text': // 描述文字 + return 'FieldDescText' + // case 'form': + // return 'FieldTextarea' + default: + return 'FieldInput' + } +} diff --git a/src/views/admin/roleAuth/components/RoleRangeSetDialog.vue b/src/views/admin/roleAuth/components/RoleRangeSetDialog.vue new file mode 100644 index 0000000..306d018 --- /dev/null +++ b/src/views/admin/roleAuth/components/RoleRangeSetDialog.vue @@ -0,0 +1,203 @@ + + + + + diff --git a/src/views/admin/roleAuth/index.vue b/src/views/admin/roleAuth/index.vue index fe473e9..514bd14 100644 --- a/src/views/admin/roleAuth/index.vue +++ b/src/views/admin/roleAuth/index.vue @@ -173,11 +173,18 @@ default-expand-all> {{ node.label }}{{ node.label }}字段授权 + @click="fieldSetClick(node)" >字段授权 + + 配置查看范围 + @@ -221,6 +228,13 @@ :visible.sync="editRoleDialogShow" @change="getUserList" /> + + + @@ -242,6 +256,8 @@ import FieldSetDialog from './components/FieldSetDialog' import Reminder from '@/components/Reminder' import XrHeader from '@/components/XrHeader' import EditRoleDialog from '../employeeDep/components/EditRoleDialog' +import RoleRangeSetDialog from './components/RoleRangeSetDialog' +import { mapGetters } from 'vuex' import crmTypeModel from '@/views/crm/model/crmTypeModel' @@ -251,7 +267,8 @@ export default { FieldSetDialog, Reminder, XrHeader, - EditRoleDialog + EditRoleDialog, + RoleRangeSetDialog }, data() { @@ -306,11 +323,17 @@ export default { // 角色操作 selectionList: [], editRoleType: '', - editRoleDialogShow: false + editRoleDialogShow: false, + + // 角色范围设置 + setRoleRangeShow: false } }, computed: { + ...mapGetters([ + 'userInfo' + ]), id() { if (this.roleActive) { return this.roleActive.id @@ -859,7 +882,7 @@ export default { */ canSetField(type, data) { if (this.pid == 10) return false - return ['leads', 'customer', 'contacts', 'business', 'contract', 'receivables', 'product', 'visit'].includes(type) && + return ['leads', 'customer', 'contacts', 'business', 'contract', 'receivables', 'product', 'visit', 'invoice'].includes(type) && this.ruleMenuIndex === 'data' }, @@ -869,6 +892,12 @@ export default { fieldSetClick(node) { this.setFieldLabel = crmTypeModel.keyToTypeData[node.data.name] this.setFieldShow = true + }, + /** + * 权限设置 + */ + checkRangeSetClick(node) { + this.setRoleRangeShow = true } } } @@ -1115,6 +1144,17 @@ export default { } } } +.common-node-label { + position: relative; + .el-button { + position: absolute; + top: -8px; + right: -105px; + /deep/ span { + margin-left: 3px; + } + } +} @import '../styles/table.scss'; diff --git a/src/views/crm/business/Create.vue b/src/views/crm/business/Create.vue index 2afb0fa..1a602e9 100644 --- a/src/views/crm/business/Create.vue +++ b/src/views/crm/business/Create.vue @@ -5,47 +5,54 @@ @close="close" @save="saveClick"> - - - + + + + @@ -56,7 +63,8 @@ import { crmBusinessSaveAPI } from '@/api/crm/business' import XrCreate from '@/components/XrCreate' import CreateSections from '@/components/CreateSections' -import WkForm from '@/components/NewCom/WkForm' +import WkFormItems from '@/components/NewCom/WkForm/WkFormItems' + import { XhBusinessStatus, XhProduct, @@ -76,7 +84,7 @@ export default { CrmRelativeCell, XhBusinessStatus, XhProduct, - WkForm + WkFormItems }, mixins: [CustomFieldsMixin], @@ -131,7 +139,8 @@ export default { types: 'crm_business', module: 'crm', controller: 'business', - action: this.action.type + action: this.action.type, + format: 2 } if (this.action.type == 'update') { @@ -141,64 +150,70 @@ export default { filedGetFieldAPI(params) .then(res => { const list = res.data || [] + const assistIds = this.getFormAssistIds(list) + const baseFields = [] const fieldList = [] const fieldRules = {} const fieldForm = {} - list.forEach(item => { - const temp = {} - temp.field = item.field - temp.formType = item.form_type - temp.fieldId = item.fieldId - temp.inputTips = item.input_tips - temp.name = item.name - temp.setting = item.setting - temp.value = item.value - const canEdit = this.getItemIsCanEdit(item, this.action.type) - // 是否能编辑权限 - if (canEdit) { - fieldRules[temp.field] = this.getRules(item) - } + list.forEach(children => { + const fields = [] + children.forEach(item => { + const temp = this.getFormItemDefaultProperty(item) + temp.show = !assistIds.includes(item.formAssistId) + + const canEdit = this.getItemIsCanEdit(item, this.action.type) + // 是否能编辑权限 + if (temp.show && canEdit) { + fieldRules[temp.field] = this.getRules(item) + } - // 是否可编辑 - temp.disabled = !canEdit + // 是否可编辑 + temp.disabled = !canEdit - // 禁止某些业务组件选择 - if (temp.formType == 'customer') { - if (this.action.type == 'relative') { - const relativeDisInfos = { - customer: { customer: true }, - contacts: { customer: true } - } + // 禁止某些业务组件选择 + if (temp.form_type == 'customer') { + if (this.action.type == 'relative') { + const relativeDisInfos = { + customer: { customer: true }, + contacts: { customer: true } + } - // 在哪个类型下添加 - const relativeTypeDisInfos = relativeDisInfos[this.action.crmType] - if (relativeTypeDisInfos) { + // 在哪个类型下添加 + const relativeTypeDisInfos = relativeDisInfos[this.action.crmType] + if (relativeTypeDisInfos) { // 包含的字段值 - temp.disabled = relativeTypeDisInfos[item.form_type] || false + temp.disabled = relativeTypeDisInfos[item.form_type] || false + } } } - } - if (this.action.type == 'update' && temp.formType == 'business_status') { - temp.disabled = true - } - // 特殊字段允许多选 - this.getItemRadio(item, temp) - // 获取默认值 - fieldForm[temp.field] = this.getItemValue(item, this.action.data, this.action.type) - fieldList.push(temp) + // 特殊字段允许多选 + this.getItemRadio(item, temp) + + if (item.form_type === 'business_status') { + temp.disabled = this.action.type === 'update' + } + + // 获取默认值 + if (temp.show) { + fieldForm[temp.field] = this.getItemValue(item, this.action.data, this.action.type) + } + fields.push(temp) + baseFields.push(item) + }) + fieldList.push(fields) }) - this.baseFields = list + this.baseFields = baseFields this.fieldList = fieldList this.fieldForm = fieldForm this.fieldRules = fieldRules - this.loading = false }) - .catch(() => { + .catch((e) => { + console.log(e) this.loading = false }) }, @@ -208,7 +223,7 @@ export default { */ saveClick() { this.loading = true - const crmForm = this.$refs.crmForm.instance + const crmForm = this.$refs.crmForm crmForm.validate(valid => { if (valid) { @@ -275,6 +290,16 @@ export default { * change */ formChange(field, index, value, valueList) { + if ([ + 'select', + 'checkbox' + ].includes(field.form_type) && + field.remark === 'options_type' && + field.optionsData) { + const { fieldForm, fieldRules } = this.getFormContentByOptionsChange(this.fieldList, this.fieldForm) + this.fieldForm = fieldForm + this.fieldRules = fieldRules + } }, /** @@ -282,8 +307,8 @@ export default { */ otherChange(data, field) { console.log(data, field) - if (field.formType === 'business_type') { - const statusItem = this.fieldList.find(item => item.formType === 'business_status') + if (field.form_type === 'business_type') { + const statusItem = this.getItemWithFromType(this.fieldList, 'business_status') if (statusItem) { if (isEmpty(data.value)) { this.fieldForm[field.field] = '' @@ -298,11 +323,11 @@ export default { this.$set(this.fieldForm, statusItem.field, statusItem.setting.length > 0 ? statusItem.setting[0].status_id : '') } } - } else if (field.formType === 'product') { + } else if (field.form_type === 'product') { this.fieldForm.money = data.value.total_price || '' } this.$set(this.fieldForm, field.field, data.value) - this.$refs.crmForm.instance.validateField(field.field) + this.$refs.crmForm.validateField(field.field) }, /** diff --git a/src/views/crm/business/Detail.vue b/src/views/crm/business/Detail.vue index 64f8a33..7e15a0c 100644 --- a/src/views/crm/business/Detail.vue +++ b/src/views/crm/business/Detail.vue @@ -23,6 +23,8 @@ :head-details="headDetails" :id="id" :crm-type="crmType" + :page-list="pageList" + @pageChange="pageChange" @handle="detailHeadHandle" @close="hideView"> +
diff --git a/src/views/crm/components/CRMAllDetail.vue b/src/views/crm/components/CRMAllDetail.vue index b280e34..9712572 100644 --- a/src/views/crm/components/CRMAllDetail.vue +++ b/src/views/crm/components/CRMAllDetail.vue @@ -4,10 +4,12 @@ :is="tabName" :crm-type="crmType" :id="id" + v-bind="$attrs" :listener-ids="listenerIDs" :no-listener-ids="noListenerIDs" :no-listener-class="noListenerClass" class="d-view" + v-on="$listeners" @handle="detailHandle" @hide-view="hiddenView"/> diff --git a/src/views/crm/components/CRMDetailHead.vue b/src/views/crm/components/CRMDetailHead.vue index 24ae370..25bb2f9 100644 --- a/src/views/crm/components/CRMDetailHead.vue +++ b/src/views/crm/components/CRMDetailHead.vue @@ -8,13 +8,18 @@ class="t-section__hd">
{{ typeName }}
-

- {{ name }} -

+
{{ name }}
+ + + + + +
{ return [] } - } + }, + pageList: Array }, data() { return { @@ -667,6 +673,29 @@ export default { } } + + + diff --git a/src/views/crm/components/SelectionHandle/TeamsHandle.vue b/src/views/crm/components/SelectionHandle/TeamsHandle.vue index ab33f16..51d9826 100644 --- a/src/views/crm/components/SelectionHandle/TeamsHandle.vue +++ b/src/views/crm/components/SelectionHandle/TeamsHandle.vue @@ -9,6 +9,7 @@ @close="handleCancel">
权限:
- 只读 - 读写 + 只读 + + + 读写 + + -
同时添加至:
+
{{ isCreate ? '同时添加至' : '同时移除' }}:
- + 联系人 商机 合同
+ +
有效时间:
+ + + + + +
import { XhUserCell } from '@/components/CreateCom' import { - crmCustomerSettingTeamSaveAPI, - crmCustomerSettingTeamDeleteAPI + crmCustomerSettingTeamSaveAPI + // crmCustomerSettingTeamDeleteAPI } from '@/api/crm/customer' -import { - crmContractSettingTeamSaveAPI, - crmContractSettingTeamDeleteAPI -} from '@/api/crm/contract' +// import { +// crmContractSettingTeamSaveAPI, +// crmContractSettingTeamDeleteAPI +// } from '@/api/crm/contract' -import { - crmBusinessSettingTeamSaveAPI, - crmBusinessSettingTeamDeleteAPI -} from '@/api/crm/business' +// import { +// crmBusinessSettingTeamSaveAPI, +// crmBusinessSettingTeamDeleteAPI +// } from '@/api/crm/business' export default { /** 客户管理 的 勾选后的 团队成员 操作 移除操作不可移除客户负责人*/ @@ -84,10 +115,10 @@ export default { required: true, default: false }, - title: { - type: String, - default: '' - }, + // title: { + // type: String, + // default: '' + // }, /** 没有值就是全部类型 有值就是当个类型 */ crmType: { type: String, @@ -99,19 +130,48 @@ export default { default: () => { return [] } - } + }, + // add 添加 delete 移除 + type: { + type: String, + default: '' + }, + // 选择的成员,该字段存在,将不展示员工选择 + members: Array }, data() { return { loading: false, // 加载动画 visible: false, - + pickerOptions: { + disabledDate(time) { + // 当前0点时间戳 + return time.getTime() < new Date(new Date().toLocaleDateString()).getTime() + } + }, usersList: [], // 变更负责人 handleType: 1, // 操作类型 - addsTypes: [] // 添加至 + addsTypes: [], // 添加至 + validType: '', // 有效类型 + target_time: '' // 有效时间 + } + }, + computed: { + // 客户允许同时添加至联系人 + addsTypesShow() { + return this.crmType === 'customer' + }, + // 是新建 + isCreate() { + return this.type === 'add' + }, + title() { + return { + add: '添加团队成员', + delete: '移除团队成员' + }[this.type] } }, - computed: {}, watch: { dialogVisible: { handler(val) { @@ -150,39 +210,57 @@ export default { }, handleConfirm() { // 移除操作不可移除客户负责人 - if (this.usersList.length === 0) { + if (!this.members && this.usersList.length === 0) { this.$message.error('请选择团队成员') + } else if (this.validType === 'end' && !this.target_time) { + this.$message.error('请选择截止日期') } else { const params = { types_id: this.selectionList.map(item => item[this.crmType + '_id']), user_id: this.usersList.map(item => item.id) } - if (this.crmType === 'customer' && this.title == '添加团队成员') { + // 如果有传入成员,替换选择成员 + if (this.members) { + params.user_id = this.members.map(item => item.id) + } + // if (this.addsTypesShow) { + // // 只有客户下面同时添加到 + // params.changeType = this.addsTypes.map(function(i) { + // return parseInt(i) + // }) + // } + // if (this.crmType === 'customer' && this.title == '添加团队成员') { + // // 只有客户下面同时添加到 + // params.module = this.addsTypes + // } + if (this.addsTypesShow) { // 只有客户下面同时添加到 params.module = this.addsTypes } - let request - if (this.title == '添加团队成员') { + params.target_time = this.validType === 'end' ? this.target_time : '' + + // let request + if (this.isCreate) { // 1只读,2读写 params.type = this.handleType - request = { - customer: crmCustomerSettingTeamSaveAPI, - contract: crmContractSettingTeamSaveAPI, - business: crmBusinessSettingTeamSaveAPI - }[this.crmType] + // request = { + // customer: crmCustomerSettingTeamSaveAPI, + // contract: crmContractSettingTeamSaveAPI, + // business: crmBusinessSettingTeamSaveAPI + // }[this.crmType] } else { - request = { - customer: crmCustomerSettingTeamDeleteAPI, - contract: crmContractSettingTeamDeleteAPI, - business: crmBusinessSettingTeamDeleteAPI - }[this.crmType] + // request = { + // customer: crmCustomerSettingTeamDeleteAPI, + // contract: crmContractSettingTeamDeleteAPI, + // business: crmBusinessSettingTeamDeleteAPI + // }[this.crmType] params.is_del = 1 } this.loading = true params.types = 'crm_' + this.crmType - request(params) + crmCustomerSettingTeamSaveAPI(params) .then(res => { this.$message({ type: 'success', @@ -191,7 +269,7 @@ export default { this.loading = false this.handleCancel() this.$emit('handle', { - type: this.title == '添加团队成员' ? 'add_user' : 'delete_user' + type: this.isCreate ? 'add_user' : 'delete_user' }) }) .catch(() => { diff --git a/src/views/crm/contacts/Create.vue b/src/views/crm/contacts/Create.vue index 4601923..b1adfca 100644 --- a/src/views/crm/contacts/Create.vue +++ b/src/views/crm/contacts/Create.vue @@ -5,25 +5,32 @@ @close="close" @save="saveClick"> - - - + + + + @@ -34,7 +41,8 @@ import { crmContactsSaveAPI } from '@/api/crm/contacts' import XrCreate from '@/components/XrCreate' import CreateSections from '@/components/CreateSections' -import WkForm from '@/components/NewCom/WkForm' +import WkFormItems from '@/components/NewCom/WkForm/WkFormItems' + import { CrmRelativeCell } from '@/components/CreateCom' @@ -50,7 +58,7 @@ export default { XrCreate, CreateSections, CrmRelativeCell, - WkForm + WkFormItems }, mixins: [CustomFieldsMixin], @@ -106,7 +114,8 @@ export default { types: 'crm_contacts', module: 'crm', controller: 'contacts', - action: this.action.type + action: this.action.type, + format: 2 } if (this.action.type == 'update') { @@ -118,57 +127,64 @@ export default { const list = res.data || [] if (!isEmpty(this.phone)) { list.forEach(item => { - if (item.formType === 'mobile') { - item.defaultValue = this.phone + if (item.form_type === 'mobile') { + item.default_value = this.phone } }) } + const assistIds = this.getFormAssistIds(list) + const baseFields = [] + const fieldList = [] const fieldRules = {} const fieldForm = {} - list.forEach(item => { - const temp = {} - temp.field = item.field - temp.formType = item.form_type - temp.fieldId = item.fieldId - temp.inputTips = item.input_Tips - temp.name = item.name - temp.setting = item.setting - // temp.value = item.value - const canEdit = this.getItemIsCanEdit(item, this.action.type) - // 是否能编辑权限 - if (canEdit) { - fieldRules[temp.field] = this.getRules(item) - } - - // 是否可编辑 - temp.disabled = !canEdit - - // 禁止某些业务组件选择 - if (temp.formType == 'customer') { - if (this.action.type == 'relative') { - const relativeDisInfos = { - customer: { customer: true }, - business: { customer: true } - } - // 在哪个类型下添加 - const relativeTypeDisInfos = relativeDisInfos[this.action.crmType] - if (relativeTypeDisInfos) { + list.forEach(children => { + const fields = [] + children.forEach(item => { + const temp = this.getFormItemDefaultProperty(item) + temp.show = !assistIds.includes(item.formAssistId) + + const canEdit = this.getItemIsCanEdit(item, this.action.type) + // 是否能编辑权限 + if (temp.show && canEdit) { + fieldRules[temp.field] = this.getRules(item) + } + + // 是否可编辑 + temp.disabled = !canEdit + + // 禁止某些业务组件选择 + if (temp.form_type == 'customer') { + if (this.action.type == 'relative') { + const relativeDisInfos = { + customer: { customer: true }, + business: { customer: true } + } + + // 在哪个类型下添加 + const relativeTypeDisInfos = relativeDisInfos[this.action.crmType] + if (relativeTypeDisInfos) { // 包含的字段值 - temp.disabled = relativeTypeDisInfos[item.form_type] || false + temp.disabled = relativeTypeDisInfos[item.form_type] || false + } } } - } - // 特殊字段允许多选 - this.getItemRadio(item, temp) - // 获取默认值 - fieldForm[temp.field] = this.getItemValue(item, this.action.data, this.action.type) - fieldList.push(temp) + // 特殊字段允许多选 + this.getItemRadio(item, temp) + + // 获取默认值 + if (temp.show) { + fieldForm[temp.field] = this.getItemValue(item, this.action.data, this.action.type) + } + fields.push(temp) + baseFields.push(item) + }) + fieldList.push(fields) }) - this.baseFields = list + this.baseFields = baseFields this.fieldList = fieldList this.fieldForm = fieldForm this.fieldRules = fieldRules @@ -186,7 +202,7 @@ export default { */ saveClick() { this.loading = true - const crmForm = this.$refs.crmForm.instance + const crmForm = this.$refs.crmForm crmForm.validate(valid => { if (valid) { const params = this.getSubmiteParams(this.baseFields, this.fieldForm) @@ -248,14 +264,25 @@ export default { /** * change */ - formChange(item, index, value, valueList) {}, + formChange(field, index, value, valueList) { + if ([ + 'select', + 'checkbox' + ].includes(field.formType) && + field.remark === 'options_type' && + field.optionsData) { + const { fieldForm, fieldRules } = this.getFormContentByOptionsChange(this.fieldList, this.fieldForm) + this.fieldForm = fieldForm + this.fieldRules = fieldRules + } + }, /** * 地址change */ otherChange(data, field) { this.$set(this.fieldForm, field.field, data.value) - this.$refs.crmForm.instance.validateField(field.field) + this.$refs.crmForm.validateField(field.field) }, /** diff --git a/src/views/crm/contacts/Detail.vue b/src/views/crm/contacts/Detail.vue index 9470cb3..ed6ed15 100644 --- a/src/views/crm/contacts/Detail.vue +++ b/src/views/crm/contacts/Detail.vue @@ -22,7 +22,9 @@ :detail="detailData" :head-details="headDetails" :id="id" + :page-list="pageList" :crm-type="crmType" + @pageChange="pageChange" @handle="detailHeadHandle" @close="hideView"> +
diff --git a/src/views/crm/contract/Create.vue b/src/views/crm/contract/Create.vue index d96cf09..99bca68 100644 --- a/src/views/crm/contract/Create.vue +++ b/src/views/crm/contract/Create.vue @@ -6,38 +6,45 @@ @close="close" @save="saveClick"> - - - + + + + { const list = res.data || [] + const assistIds = this.getFormAssistIds(list) + const baseFields = [] const fieldList = [] const fieldRules = {} const fieldForm = {} - list.forEach(item => { - const temp = {} - temp.field = item.field - temp.formType = item.form_type - temp.fieldId = item.fieldId - temp.inputTips = item.input_tips - temp.name = item.name - temp.setting = item.setting - temp.value = item.value - const canEdit = this.getItemIsCanEdit(item, this.action.type) - // 是否能编辑权限 - if (canEdit) { + list.forEach(children => { + const fields = [] + children.forEach(item => { + const temp = this.getFormItemDefaultProperty(item) + temp.show = !assistIds.includes(item.formAssistId) + + const canEdit = this.getItemIsCanEdit(item, this.action.type) + // 是否能编辑权限 + if (canEdit) { // 自动生成编号 - if (item.autoGeneNumber == 1) { - temp.placeholder = '根据编号规则自动生成,支持手动输入' - const copyItem = objDeepCopy(item) - copyItem.isNull = 0 - fieldRules[temp.field] = this.getRules(copyItem) - } else { - fieldRules[temp.field] = this.getRules(item) + if (item.autoGeneNumber == 1) { + temp.placeholder = '根据编号规则自动生成,支持手动输入' + const copyItem = objDeepCopy(item) + copyItem.isNull = 0 + fieldRules[temp.field] = this.getRules(copyItem) + } else { + fieldRules[temp.field] = this.getRules(item) + } } - } - // 是否可编辑 - temp.disabled = !canEdit - - // 禁止某些业务组件选择 - if (temp.formType == 'contacts' || - temp.formType == 'customer' || - temp.formType == 'business' - ) { - if (this.action.type == 'relative') { - const relativeDisInfos = { - contacts: { customer: true }, - customer: { customer: true }, - business: { customer: true, business: true } - } + // 是否可编辑 + temp.disabled = !canEdit + + // 禁止某些业务组件选择 + if (temp.form_type == 'contacts' || + temp.form_type == 'customer' || + temp.form_type == 'business' + ) { + if (this.action.type == 'relative') { + const relativeDisInfos = { + contacts: { customer: true }, + customer: { customer: true }, + business: { customer: true, business: true } + } - // 在哪个类型下添加 - const relativeTypeDisInfos = relativeDisInfos[this.action.crmType] - if (relativeTypeDisInfos) { + // 在哪个类型下添加 + const relativeTypeDisInfos = relativeDisInfos[this.action.crmType] + if (relativeTypeDisInfos) { // 包含的字段值 - temp.disabled = relativeTypeDisInfos[item.form_type] || false + temp.disabled = relativeTypeDisInfos[item.form_type] || false + } + } else if (this.action.type != 'update') { + temp.disabled = item.form_type === 'business' || item.form_type === 'contacts' } - } else if (this.action.type != 'update') { - temp.disabled = item.form_type === 'business' || item.form_type === 'contacts' } - } - // 处理关联 - if ((this.action.type == 'relative' || this.action.type == 'update') && (item.form_type == 'business' || item.form_type == 'contacts' || item.form_type == 'contract' - )) { - const customerItem = this.getItemRelatveInfo(list, 'customer') - if (customerItem) { - if (item.form_type == 'business' || item.form_type == 'contacts') { - customerItem['moduleType'] = 'customer' - temp['relation'] = customerItem - } else if (item.formType == 'contract') { - customerItem['moduleType'] = 'customer' - customerItem['params'] = { checkStatus: 2 } - temp['relation'] = customerItem + // 处理关联 + if ((this.action.type == 'relative' || this.action.type == 'update') && (item.form_type == 'business' || item.form_type == 'contacts' || item.form_type == 'contract' + )) { + const customerItem = this.getItemRelatveInfo(list, 'customer') + if (customerItem) { + if (item.form_type == 'business' || item.form_type == 'contacts') { + customerItem['moduleType'] = 'customer' + temp['relation'] = customerItem + } else if (item.form_type == 'contract') { + customerItem['moduleType'] = 'customer' + customerItem['params'] = { checkStatus: 2 } + temp['relation'] = customerItem + } } } - } - // 特殊字段允许多选 - this.getItemRadio(item, temp) + // 特殊字段允许多选 + this.getItemRadio(item, temp) - // 获取默认值 - // 非编辑情况下 填充默认值 - if (this.action.type != 'update' && item.field === 'order_date') { - fieldForm[temp.field] = this.$moment().format('YYYY-MM-DD') - } else { - fieldForm[temp.field] = this.getItemValue(item, this.action.data, this.action.type) - } - fieldList.push(temp) + // 获取默认值 + // 非编辑情况下 填充默认值 + if (this.action.type != 'update' && item.field === 'order_date') { + fieldForm[temp.field] = this.$moment().format('YYYY-MM-DD') + } else { + fieldForm[temp.field] = this.getItemValue(item, this.action.data, this.action.type) + } + fields.push(temp) + baseFields.push(item) + }) + fieldList.push(fields) }) @@ -286,7 +294,7 @@ export default { } } - this.baseFields = list + this.baseFields = baseFields this.fieldList = fieldList this.fieldForm = fieldForm this.fieldRules = fieldRules @@ -304,7 +312,7 @@ export default { */ saveClick(isDraft = false) { this.loading = true - const crmForm = this.$refs.crmForm.instance + const crmForm = this.$refs.crmForm crmForm.validate(valid => { if (valid) { if (this.isOpenExamine) { @@ -410,86 +418,102 @@ export default { * change */ formChange(field, index, value, valueList) { + // 审批流逻辑 + // this.debouncedGetWkFlowList(field.field, this.fieldForm) + + if ([ + 'select', + 'checkbox' + ].includes(field.form_type) && + field.remark === 'options_type' && + field.optionsData) { + const { fieldForm, fieldRules } = this.getFormContentByOptionsChange(this.fieldList, this.fieldForm) + this.fieldForm = fieldForm + this.fieldRules = fieldRules + } }, /** * 地址change */ otherChange(data, field) { - if (field.formType === 'customer') { + if (field.form_type === 'customer') { let contractForCount = 0 - for (let index = 0; index < this.fieldList.length; index++) { - const element = this.fieldList[index] - // 需要处理 需关联客户信息或客户下信息 - const handleFields = [ - 'business_id', - 'contacts_id', - 'order_user_id' - ] - - // 添加请求关联 - const addRelation = ['business_id', 'contacts_id'] - - // 需要disabled - const addDisabled = ['business_id', 'contacts_id'] - - // 复制 - const getValueObj = { - contacts_id: data => { - if (!data.contacts_id) { - return [] - } - return [ - { - name: data.contactsName || '', - contacts_id: data.contacts_id + for (let mainIndex = 0; mainIndex < this.fieldList.length; mainIndex++) { + const children = this.fieldList[mainIndex] + for (let index = 0; index < children.length; index++) { + const element = children[index] + // 需要处理 需关联客户信息或客户下信息 + const handleFields = [ + 'business_id', + 'contacts_id', + 'order_user_id' + ] + + // 添加请求关联 + const addRelation = ['business_id', 'contacts_id'] + + // 需要disabled + const addDisabled = ['business_id', 'contacts_id'] + + // 复制 + const getValueObj = { + contacts_id: data => { + if (!data.contacts_id) { + return [] } - ] - }, - order_user_id: data => { - if (!data.ownerUserId) { - return [] - } - return [ - { - realname: data.owner_user_name || '', - id: data.owner_user_id + return [ + { + name: data.contactsName || '', + contacts_id: data.contacts_id + } + ] + }, + order_user_id: data => { + if (!data.ownerUserId) { + return [] } - ] + return [ + { + realname: data.owner_user_name || '', + id: data.owner_user_id + } + ] + } } - } - if (handleFields.includes(element.field)) { - if (data.value.length > 0) { - element.disabled = false + if (handleFields.includes(element.field)) { + if (data.value.length > 0) { + element.disabled = false - // 增加关联信息 - const customerItem = data.value[0] - if (addRelation.includes(element.field)) { - customerItem['moduleType'] = 'customer' - element['relation'] = customerItem - } + // 增加关联信息 + const customerItem = data.value[0] + if (addRelation.includes(element.field)) { + customerItem['moduleType'] = 'customer' + element['relation'] = customerItem + } - // 填充值 - if (getValueObj[element.field]) { - this.fieldForm[element.field] = getValueObj[element.field](customerItem) + // 填充值 + if (getValueObj[element.field]) { + this.fieldForm[element.field] = getValueObj[element.field](customerItem) + } else { + this.fieldForm[element.field] = [] + } } else { - this.fieldForm[element.field] = [] - } - } else { // 禁用 - element.disabled = !!addDisabled.includes(element.field) + element.disabled = !!addDisabled.includes(element.field) - if (addRelation.includes(element.field)) { - element['relation'] = {} - } + if (addRelation.includes(element.field)) { + element['relation'] = {} + } - this.fieldForm[element.field] = [] - } + this.fieldForm[element.field] = [] + } - contractForCount++ - if (contractForCount == handleFields.length) { - break + contractForCount++ + if (contractForCount == handleFields.length) { + break + } } } } @@ -501,7 +525,7 @@ export default { discount_rate: '' } this.fieldForm.money = '' - } else if (field.formType === 'business') { + } else if (field.form_type === 'business') { if (data.value.length > 0) { this.getBusinessProduct(data.value[0].business_id).then(resData => { const businessData = resData || {} @@ -513,11 +537,11 @@ export default { this.fieldForm.money = businessData.total_price || '' }).catch(() => {}) } - } else if (field.formType === 'product') { + } else if (field.form_type === 'product') { this.fieldForm.money = data.value.total_price || '' } this.$set(this.fieldForm, field.field, data.value) - this.$refs.crmForm.instance.validateField(field.field) + this.$refs.crmForm.validateField(field.field) }, /** diff --git a/src/views/crm/contract/Detail.vue b/src/views/crm/contract/Detail.vue index 0ec5880..2d59280 100644 --- a/src/views/crm/contract/Detail.vue +++ b/src/views/crm/contract/Detail.vue @@ -23,6 +23,8 @@ :head-details="headDetails" :id="id" :crm-type="crmType" + :page-list="pageList" + @pageChange="pageChange" @handle-click="deadHandleClick" @handle="detailHeadHandle" @close="hideView"> @@ -58,7 +60,7 @@ :id="id" :handle="activityHandle" :crm-type="crmType" - @on-handle="detailHeadHandle" /> + @handle="detailHeadHandle" />
diff --git a/src/views/crm/contract/index.vue b/src/views/crm/contract/index.vue index 9cfc754..e41c3ce 100644 --- a/src/views/crm/contract/index.vue +++ b/src/views/crm/contract/index.vue @@ -54,14 +54,21 @@ :width="item.width" sortable="custom" show-overflow-tooltip> - +
diff --git a/src/views/crm/customer/Create.vue b/src/views/crm/customer/Create.vue index 360e756..5456e84 100644 --- a/src/views/crm/customer/Create.vue +++ b/src/views/crm/customer/Create.vue @@ -5,27 +5,35 @@ @close="close" @save="saveClick"> - - - + + + + { - if (item.formType === 'mobile') { - item.defaultValue = this.phone + if (item.form_type === 'mobile') { + item.default_value = this.phone } }) } + const assistIds = this.getFormAssistIds(list) + const baseFields = [] const fieldList = [] const fieldRules = {} const fieldForm = {} - list.forEach(item => { - const temp = {} - temp.field = item.field - temp.formType = item.form_type - temp.fieldId = item.fieldId - temp.inputTips = item.input_tips - temp.name = item.name - temp.setting = item.setting - temp.value = item.value - const canEdit = this.getItemIsCanEdit(item, this.action.type) - // 是否能编辑权限 - if (canEdit) { - fieldRules[temp.field] = this.getRules(item) - } + list.forEach(children => { + const fields = [] + children.forEach(item => { + const temp = this.getFormItemDefaultProperty(item) + temp.show = !assistIds.includes(item.formAssistId) + + + const canEdit = this.getItemIsCanEdit(item, this.action.type) + // 是否能编辑权限 + if (temp.show && canEdit) { + fieldRules[temp.field] = this.getRules(item) + } - // 是否可编辑 - temp.disabled = !canEdit + // 是否可编辑 + temp.disabled = !canEdit - // 特殊字段允许多选 - this.getItemRadio(item, temp) + // 特殊字段允许多选 + this.getItemRadio(item, temp) - // 获取默认值 - fieldForm[temp.field] = this.getItemValue(item, this.action.data, this.action.type) - fieldList.push(temp) + // 获取默认值 + if (temp.show) { + fieldForm[temp.field] = this.getItemValue(item, this.action.data, this.action.type) + } + fields.push(temp) + baseFields.push(item) + }) + fieldList.push(fields) }) - this.baseFields = list + this.baseFields = baseFields this.fieldList = fieldList this.fieldForm = fieldForm this.fieldRules = fieldRules - this.loading = false }) - .catch(() => { + .catch((e) => { this.loading = false }) }, @@ -196,7 +215,7 @@ export default { */ saveClick(createContacts = false) { this.loading = true - const crmForm = this.$refs.crmForm.instance + const crmForm = this.$refs.crmForm crmForm.validate(valid => { if (valid) { const params = this.getSubmiteParams(this.baseFields, this.fieldForm) @@ -220,7 +239,7 @@ export default { if (this.action.type == 'update') { // params.entity.customerId = this.action.id // params.entity.batchId = this.action.batchId - params.action_id = this.action.id + params.id = this.action.id } // 相关添加时候的多余提交信息 @@ -272,14 +291,25 @@ export default { /** * change */ - formChange(item, index, value, valueList) {}, + formChange(field, index, value, valueList) { + if ([ + 'select', + 'checkbox' + ].includes(field.form_type) && + field.remark === 'options_type' && + field.optionsData) { + const { fieldForm, fieldRules } = this.getFormContentByOptionsChange(this.fieldList, this.fieldForm) + this.fieldForm = fieldForm + this.fieldRules = fieldRules + } + }, /** * 地址change */ otherChange(data, field) { this.$set(this.fieldForm, field.field, data.value) - this.$refs.crmForm.instance.validateField(field.field) + this.$refs.crmForm.validateField(field.field) }, /** diff --git a/src/views/crm/customer/Detail.vue b/src/views/crm/customer/Detail.vue index 3641563..1f694eb 100644 --- a/src/views/crm/customer/Detail.vue +++ b/src/views/crm/customer/Detail.vue @@ -26,6 +26,8 @@ :pool_id="seasPoolId" :pool-auth="poolAuth" :crm-type="crmType" + :page-list="pageList" + @pageChange="pageChange" @handle="detailHeadHandle" @close="hideView"> diff --git a/src/views/workLog/components/LogItem.vue b/src/views/workLog/components/LogItem.vue index 5a6629d..d93300e 100644 --- a/src/views/workLog/components/LogItem.vue +++ b/src/views/workLog/components/LogItem.vue @@ -95,6 +95,13 @@