Commit 2201a66b45ad562972db28c54fc80adea036a2fc

Authored by monkeyhouyi
1 parent 9913f656

专项性行动-首页联动

src/views/Login.vue
@@ -33,9 +33,10 @@ @@ -33,9 +33,10 @@
33 <!-- 忘记密码? --> 33 <!-- 忘记密码? -->
34 </div> 34 </div>
35 </div> 35 </div>
36 - <div class="login-button" @click="toHome"> 36 + <el-button class="login-button" @click="toHome" :loading="loading">登录</el-button>
  37 + <!-- <div class="login-button" @click="toHome">
37 {{ loading ? "登录中。。。" : "登录" }} 38 {{ loading ? "登录中。。。" : "登录" }}
38 - </div> 39 + </div> -->
39 </el-form> 40 </el-form>
40 </div> 41 </div>
41 </div> 42 </div>
@@ -83,9 +84,11 @@ export default { @@ -83,9 +84,11 @@ export default {
83 this.$store 84 this.$store
84 .dispatch("Login", this.form) 85 .dispatch("Login", this.form)
85 .then(() => { 86 .then(() => {
  87 + console.log(222);
86 this.$router.push({ path: "/homePage" }); 88 this.$router.push({ path: "/homePage" });
87 }) 89 })
88 .catch(() => { 90 .catch(() => {
  91 + this.loading = false;
89 this.$store.commit("SET_LOGIN_LOADING", false); 92 this.$store.commit("SET_LOGIN_LOADING", false);
90 }); 93 });
91 } 94 }
@@ -173,12 +176,14 @@ export default { @@ -173,12 +176,14 @@ export default {
173 .login-button { 176 .login-button {
174 width: 100%; 177 width: 100%;
175 height: 46px; 178 height: 46px;
176 - line-height: 46px;  
177 - text-align: center; 179 + // line-height: 46px;
  180 + // text-align: center;
178 background-image: url("@/assets/images/login-btn.png"); 181 background-image: url("@/assets/images/login-btn.png");
179 background-size: 100%; 182 background-size: 100%;
180 background-repeat: no-repeat; 183 background-repeat: no-repeat;
181 - cursor: pointer; 184 + border-radius: 25px;
  185 + border: unset;
  186 + // cursor: pointer;
182 color: #5ed0fa; 187 color: #5ed0fa;
183 font-size: 18px; 188 font-size: 18px;
184 } 189 }
src/views/baseComapnyInfo/Form.vue
@@ -44,6 +44,13 @@ @@ -44,6 +44,13 @@
44 </el-form-item> 44 </el-form-item>
45 </el-col> 45 </el-col>
46 <el-col :span="24"> 46 <el-col :span="24">
  47 + <el-form-item label="所属区县" prop="areaId">
  48 + <el-radio-group v-model="dataForm.areaId" placeholder="请选择所属区县" style="line-height: 22px">
  49 + <el-radio v-for="v in areaOptions" :key="v.id" :label="v.id">{{ v.fullName }}</el-radio>
  50 + </el-radio-group>
  51 + </el-form-item>
  52 + </el-col>
  53 + <el-col :span="24">
47 <el-form-item label="其他信息" prop="otherInfo"> 54 <el-form-item label="其他信息" prop="otherInfo">
48 <NCC-Quill v-model="dataForm.otherInfo" placeholder="请输入内容..."> 55 <NCC-Quill v-model="dataForm.otherInfo" placeholder="请输入内容...">
49 </NCC-Quill> 56 </NCC-Quill>
@@ -61,14 +68,18 @@ @@ -61,14 +68,18 @@
61 import request from '@/utils/request' 68 import request from '@/utils/request'
62 import { getDictionaryDataSelector } from '@/api/systemData/dictionary' 69 import { getDictionaryDataSelector } from '@/api/systemData/dictionary'
63 import { previewDataInterface } from '@/api/systemData/dataInterface' 70 import { previewDataInterface } from '@/api/systemData/dataInterface'
  71 +import infoMixin from "@/mixins/info";
  72 +
64 export default { 73 export default {
65 components: {}, 74 components: {},
66 props: [], 75 props: [],
  76 + mixins: [infoMixin],
67 data() { 77 data() {
68 return { 78 return {
69 loading: false, 79 loading: false,
70 visible: false, 80 visible: false,
71 isDetail: false, 81 isDetail: false,
  82 + areaOptions: [],
72 dataForm: { 83 dataForm: {
73 id: '', 84 id: '',
74 id: undefined, 85 id: undefined,
@@ -79,6 +90,7 @@ export default { @@ -79,6 +90,7 @@ export default {
79 contactInformation: undefined, 90 contactInformation: undefined,
80 qualificationCertificate: [], 91 qualificationCertificate: [],
81 otherInfo: undefined, 92 otherInfo: undefined,
  93 + areaId: undefined,
82 }, 94 },
83 rules: { 95 rules: {
84 companyName: [ 96 companyName: [
@@ -101,6 +113,7 @@ export default { @@ -101,6 +113,7 @@ export default {
101 computed: {}, 113 computed: {},
102 watch: {}, 114 watch: {},
103 created() { 115 created() {
  116 + this.initAreaTypeList();
104 }, 117 },
105 mounted() { 118 mounted() {
106 }, 119 },
src/views/baseSpecialAction/Form.vue
@@ -113,9 +113,7 @@ @@ -113,9 +113,7 @@
113 </el-row> 113 </el-row>
114 <span slot="footer" class="dialog-footer"> 114 <span slot="footer" class="dialog-footer">
115 <el-button @click="visible = false">取 消</el-button> 115 <el-button @click="visible = false">取 消</el-button>
116 - <el-button type="primary" @click="dataFormSubmit()" v-if="!isDetail"  
117 - >确 定</el-button  
118 - > 116 + <el-button type="primary" @click="dataFormSubmit()" v-if="!isDetail" :loading="btnLoading">确 定</el-button>
119 </span> 117 </span>
120 <el-dialog class="zxDialog" title="专项行动表单设计" :visible.sync="dialogVisible" fullscreen @close="handleClose" :modal="false"> 118 <el-dialog class="zxDialog" title="专项行动表单设计" :visible.sync="dialogVisible" fullscreen @close="handleClose" :modal="false">
121 <iframe 119 <iframe
@@ -156,7 +154,7 @@ export default { @@ -156,7 +154,7 @@ export default {
156 lastModifyUserId: undefined, 154 lastModifyUserId: undefined,
157 lastModifyTime: undefined, 155 lastModifyTime: undefined,
158 deadline: undefined, 156 deadline: undefined,
159 - relationId: undefined 157 + relationId: undefined,
160 }, 158 },
161 rules: { 159 rules: {
162 specialActionType: [ 160 specialActionType: [
@@ -179,6 +177,13 @@ export default { @@ -179,6 +177,13 @@ export default {
179 message: "请输入截止日期", 177 message: "请输入截止日期",
180 trigger: "change", 178 trigger: "change",
181 } 179 }
  180 + ],
  181 + relationId: [
  182 + {
  183 + required: true,
  184 + message: "请选择关联表单",
  185 + trigger: "change",
  186 + }
182 ] 187 ]
183 }, 188 },
184 areaOptions: [], 189 areaOptions: [],
@@ -187,6 +192,7 @@ export default { @@ -187,6 +192,7 @@ export default {
187 viewportHeight: 0, 192 viewportHeight: 0,
188 nestedPageUrl:"http://8.130.38.56:8043/old/#/onlineDev/webDesign/indexNew", 193 nestedPageUrl:"http://8.130.38.56:8043/old/#/onlineDev/webDesign/indexNew",
189 dialogVisible: false, 194 dialogVisible: false,
  195 + btnLoading: false
190 }; 196 };
191 }, 197 },
192 computed: {}, 198 computed: {},
@@ -277,6 +283,7 @@ export default { @@ -277,6 +283,7 @@ export default {
277 dataFormSubmit() { 283 dataFormSubmit() {
278 this.$refs["elForm"].validate((valid) => { 284 this.$refs["elForm"].validate((valid) => {
279 if (valid) { 285 if (valid) {
  286 + this.btnLoading = true;
280 if (!this.dataForm.id) { 287 if (!this.dataForm.id) {
281 let {title, content} = this.dataForm; 288 let {title, content} = this.dataForm;
282 // 新增 289 // 新增
@@ -290,10 +297,11 @@ export default { @@ -290,10 +297,11 @@ export default {
290 type: "success", 297 type: "success",
291 duration: 1000, 298 duration: 1000,
292 onClose: () => { 299 onClose: () => {
  300 + this.btnLoading = false;
293 (this.visible = false), this.$emit("refresh", true); 301 (this.visible = false), this.$emit("refresh", true);
294 }, 302 },
295 }); 303 });
296 - }); 304 + }).catch(() => this.btnLoading = false);
297 } else { 305 } else {
298 // 发布任务 306 // 发布任务
299 request({ 307 request({
@@ -306,11 +314,12 @@ export default { @@ -306,11 +314,12 @@ export default {
306 type: "success", 314 type: "success",
307 duration: 1000, 315 duration: 1000,
308 onClose: () => { 316 onClose: () => {
  317 + this.btnLoading = false;
309 this.visible = false; 318 this.visible = false;
310 this.$emit("refresh", true); 319 this.$emit("refresh", true);
311 }, 320 },
312 }); 321 });
313 - }); 322 + }).catch(() => this.btnLoading = false);
314 } 323 }
315 } 324 }
316 }); 325 });
src/views/baseSpecialhandle/index.vue
@@ -149,7 +149,6 @@ export default { @@ -149,7 +149,6 @@ export default {
149 params:null 149 params:null
150 }).then(res => { 150 }).then(res => {
151 formData = res.data.formData; 151 formData = res.data.formData;
152 - console.log(res, formData, modelId, Itemid, isPreview, useFormPermission);  
153 this.$refs.NCCForm.init(formData, modelId, Itemid, isPreview, useFormPermission, taskId) 152 this.$refs.NCCForm.init(formData, modelId, Itemid, isPreview, useFormPermission, taskId)
154 }); 153 });
155 154
src/views/baseSystemInfo/HandleInspectForm.vue 0 → 100644
  1 +<template>
  2 + <!-- 归属地变更申请结果处理 -->
  3 + <el-dialog
  4 + title="归属地变更申请结果处理"
  5 + :close-on-click-modal="false"
  6 + :visible.sync="visible"
  7 + class="NCC-dialog NCC-dialog_center"
  8 + lock-scroll
  9 + width="70%"
  10 + >
  11 + <el-form
  12 + :model="dataForm"
  13 + :rules="rules"
  14 + ref="elForm"
  15 + size="small"
  16 + label-width="100px"
  17 + v-loading="loading"
  18 + >
  19 + <!-- <el-form-item label="市属" prop="city">
  20 + <el-input
  21 + v-model="dataForm.city"
  22 + placeholder="请输入市属"
  23 + maxlength="20"
  24 + ></el-input>
  25 + </el-form-item> -->
  26 + <el-form-item label="转入归属地" prop="toChangeIntoId">
  27 + <el-radio-group
  28 + v-model="dataForm.toChangeIntoId"
  29 + placeholder="请选择所属区县"
  30 + style="line-height: 22px"
  31 + >
  32 + <el-radio v-for="v in areaOptions" :key="v.id" :label="v.id">{{ v.fullName }}</el-radio>
  33 + </el-radio-group>
  34 + </el-form-item>
  35 + <el-form-item label="内容描述" prop="applnycontent">
  36 + <el-input
  37 + type="textarea"
  38 + v-model="dataForm.applnycontent"
  39 + placeholder="请输入内容描述"
  40 + maxlength="300"
  41 + ></el-input>
  42 + </el-form-item>
  43 + <el-form-item label="处理意见" prop="processingresults">
  44 + <el-radio-group v-model="dataForm.processingresults">
  45 + <el-radio label="同意">同意</el-radio>
  46 + <el-radio label="不同意">不同意</el-radio>
  47 + </el-radio-group>
  48 + </el-form-item>
  49 + <el-form-item label="处理意见" prop="opinion">
  50 + <el-input
  51 + type="textarea"
  52 + v-model="dataForm.opinion"
  53 + placeholder="请输入处理意见"
  54 + maxlength="300"
  55 + ></el-input>
  56 + </el-form-item>
  57 + </el-form>
  58 + <span slot="footer" class="dialog-footer">
  59 + <el-button @click="visible = false">取 消</el-button>
  60 + <el-button type="primary" @click="dataFormSubmit" :loading="btnLoading">确 定</el-button>
  61 + </span>
  62 + </el-dialog>
  63 + </template>
  64 + <script>
  65 + import request from "@/utils/request";
  66 + export default {
  67 + components: {},
  68 + props: [],
  69 + data() {
  70 + return {
  71 + loading: false,
  72 + visible: false,
  73 + isDetail: false,
  74 + dataForm: {
  75 + id: "",
  76 + applnycontent: '',
  77 + toChangeIntoId: '',
  78 + processingresults: '',
  79 + opinion: '',
  80 + },
  81 + rules: {
  82 + areaId: [
  83 + { required: true, message: '请选择转入归属地', trigger: 'change' },
  84 + ],
  85 + processingresults: [
  86 + { required: true, message: '请选择处理意见', trigger: 'change' },
  87 + ],
  88 + },
  89 + areaOptions: [],
  90 + btnLoading: false,
  91 + };
  92 + },
  93 + computed: {},
  94 + watch: {},
  95 + created() {
  96 + this.initAreaTypeList();
  97 + },
  98 + mounted() {},
  99 + methods: {
  100 + async initAreaTypeList() {
  101 + let list = this.$store.state.meta.area;
  102 + !list && (list = await this.$store.dispatch('getTypeListByCode', 'area'));
  103 + this.areaOptions = list;
  104 + },
  105 +
  106 + goBack() {
  107 + this.$emit("refresh");
  108 + },
  109 + init(id, isDetail) {
  110 + this.dataForm.id = id || '';
  111 + this.visible = true;
  112 + this.isDetail = isDetail || false;
  113 + this.$nextTick(async () => {
  114 + this.$refs["elForm"].resetFields();
  115 + if(!this.dataForm.id) return
  116 + this.loading = true;
  117 + request({
  118 + url: `/Extend/BaseChangeTerritory/${this.dataForm.id}`,
  119 + method: "GET",
  120 + }).then((res) => {
  121 + this.dataForm.toChangeIntoId = res.data.toChangeIntoId;
  122 + this.dataForm.id = res.data.id;
  123 + this.dataForm.applnycontent = res.data.applnycontent;
  124 + this.loading = false;
  125 + })
  126 + });
  127 + },
  128 + dataFormSubmit() {
  129 + this.$refs["elForm"].validate(async (valid) => {
  130 + if (valid) {
  131 + this.btnLoading = true;
  132 + request({
  133 + url: `/Extend/BaseChangeTerritory/DisposeOf`,
  134 + method: "POST",
  135 + data: this.dataForm,
  136 + }).then((res) => {
  137 + this.btnLoading = false;
  138 + this.visible = false;
  139 + this.$message({
  140 + message: res.msg,
  141 + type: 'success'
  142 + });
  143 + this.$emit("refresh", true);
  144 + }).catch(() => {
  145 + this.btnLoading = false;
  146 + });
  147 +
  148 + }
  149 + });
  150 + },
  151 + },
  152 + };
  153 + </script>
  154 +
0 \ No newline at end of file 155 \ No newline at end of file
src/views/baseSystemInfo/index.vue
@@ -208,7 +208,7 @@ @@ -208,7 +208,7 @@
208 208
209 <span slot="footer" class="dialog-footer"> 209 <span slot="footer" class="dialog-footer">
210 <el-button @click="areaChangeVisible = false">取 消</el-button> 210 <el-button @click="areaChangeVisible = false">取 消</el-button>
211 - <el-button type="primary" @click="areaSubmit">确 定</el-button> 211 + <el-button type="primary" @click="areaSubmit" :loading="btnLoading">确 定</el-button>
212 </span> 212 </span>
213 </el-dialog> 213 </el-dialog>
214 <InspectionForm 214 <InspectionForm
@@ -274,7 +274,8 @@ export default { @@ -274,7 +274,8 @@ export default {
274 274
275 // 上报 275 // 上报
276 InspectionFormVisible: false, 276 InspectionFormVisible: false,
277 - ChangeRecordVisible: false 277 + ChangeRecordVisible: false,
  278 + btnLoading: false,
278 }; 279 };
279 }, 280 },
280 created() { 281 created() {
@@ -375,12 +376,18 @@ export default { @@ -375,12 +376,18 @@ export default {
375 }, 376 },
376 areaSubmit() { 377 areaSubmit() {
377 if (this.activeAreaId == this.areaForm.areaId) return; 378 if (this.activeAreaId == this.areaForm.areaId) return;
  379 + this.btnLoading = true;
378 applnyChageArea({ 380 applnyChageArea({
379 id: this.activeSystemId, 381 id: this.activeSystemId,
380 toChangeIntoId: this.areaForm.areaId, 382 toChangeIntoId: this.areaForm.areaId,
381 applnycontent: this.areaForm.applnycontent, 383 applnycontent: this.areaForm.applnycontent,
382 }).then((res) => { 384 }).then((res) => {
  385 + this.btnLoading = false;
383 this.areaChangeVisible = false; 386 this.areaChangeVisible = false;
  387 + this.$message({
  388 + message: res.msg,
  389 + type: 'success'
  390 + });
384 this.initList(); 391 this.initList();
385 }); 392 });
386 }, 393 },
src/views/overView/Overview.vue
@@ -15,40 +15,15 @@ @@ -15,40 +15,15 @@
15 <div class="item-body"> 15 <div class="item-body">
16 <template> 16 <template>
17 <el-table :data="taskList" style="width: 100%" stripe v-loading="taskLoading"> 17 <el-table :data="taskList" style="width: 100%" stripe v-loading="taskLoading">
18 - <el-table-column type="index" width="50"> </el-table-column>  
19 - <el-table-column  
20 - prop="teskName"  
21 - label="任务名称"  
22 - show-overflow-tooltip  
23 - >  
24 - </el-table-column>  
25 - <el-table-column  
26 - prop="teskCode"  
27 - label="任务编号"  
28 - show-overflow-tooltip  
29 - >  
30 - </el-table-column>  
31 - <el-table-column  
32 - prop="teskStatus"  
33 - label="状态"  
34 - show-overflow-tooltip  
35 - >  
36 - </el-table-column>  
37 - <el-table-column  
38 - prop="teskUser"  
39 - label="分配者"  
40 - show-overflow-tooltip  
41 - >  
42 - </el-table-column>  
43 - <el-table-column  
44 - prop="teskTime"  
45 - label="任务期限"  
46 - show-overflow-tooltip  
47 - >  
48 - </el-table-column>  
49 - <el-table-column label="操作">  
50 - <template>  
51 - <el-button type="primary" size="small">处理</el-button> 18 + <el-table-column type="index" width="40"> </el-table-column>
  19 + <el-table-column prop="taskTitle" label="任务名称" show-overflow-tooltip/>
  20 + <el-table-column prop="taskType" label="任务类型" show-overflow-tooltip width="100"/>
  21 + <el-table-column prop="taskState" label="状态" show-overflow-tooltip width="80"/>
  22 + <el-table-column prop="taskContent" label="任务内容" show-overflow-tooltip />
  23 + <el-table-column prop="deadLine" label="任务期限" show-overflow-tooltip :formatter="ncc.tableDateFormat" width="130"/>
  24 + <el-table-column label="操作" width="100">
  25 + <template slot-scope="scope">
  26 + <el-button type="primary" size="small" @click="handleTask(scope.row)">处理</el-button>
52 </template> 27 </template>
53 </el-table-column> 28 </el-table-column>
54 </el-table> 29 </el-table>
@@ -145,15 +120,20 @@ @@ -145,15 +120,20 @@
145 </el-col> 120 </el-col>
146 </el-row> 121 </el-row>
147 <MsgForm v-if="MsgFormVisible" ref="MsgForm" @refreshDataList="msgRefresh"/> 122 <MsgForm v-if="MsgFormVisible" ref="MsgForm" @refreshDataList="msgRefresh"/>
  123 + <HandleInspectForm v-if="HandleInspectFormVisible" ref="HandleInspectForm" @refresh="(val) => {taskRefresh('HandleInspectFormVisible', val)}"/>
  124 + <NCC-Form v-if="formVisible" ref="NCCForm" @refresh="(val) => {taskRefresh('formVisible', val)}" />
148 </div> 125 </div>
149 </template> 126 </template>
150 127
151 <script> 128 <script>
152 import request from "@/utils/request"; 129 import request from "@/utils/request";
153 import MsgForm from "./msgForm.vue" 130 import MsgForm from "./msgForm.vue"
  131 +import HandleInspectForm from "@/views/baseSystemInfo/HandleInspectForm.vue"
  132 +import NCCForm from '@/views/baseSpecialAction/dynamicModel/list/Form'
  133 +
154 export default { 134 export default {
155 name: "Overview", 135 name: "Overview",
156 - components: { MsgForm }, 136 + components: { MsgForm, HandleInspectForm, NCCForm },
157 data() { 137 data() {
158 return { 138 return {
159 todoTableData: [], 139 todoTableData: [],
@@ -182,7 +162,8 @@ export default { @@ -182,7 +162,8 @@ export default {
182 }, 162 },
183 taskList: [], 163 taskList: [],
184 taskTotal: 0, 164 taskTotal: 0,
185 - TaskFormVisible: false 165 + HandleInspectFormVisible: false,
  166 + formVisible: false
186 }; 167 };
187 }, 168 },
188 created() { 169 created() {
@@ -281,6 +262,43 @@ export default { @@ -281,6 +262,43 @@ export default {
281 }; 262 };
282 this.getAllTaskList(); 263 this.getAllTaskList();
283 }, 264 },
  265 + async handleTask(row) {
  266 + if(row.taskType == '归属地变更') {
  267 + this.HandleInspectFormVisible = true;
  268 + this.$nextTick(() => {
  269 + this.$refs.HandleInspectForm.init(row.taskCorrelationId, true);
  270 + })
  271 + } else if(row.taskType == '专项行动') {
  272 + this.formVisible = true;
  273 + let data = await this.getBaseSpecialActionInfo('588008032122701061');
  274 + // let row = await this.getBaseSpecialActionInfo(row.taskCorrelationId);
  275 + var Itemid = data.itemId || '';//数据id,没有的话就是新增 ,有的话就是修改
  276 + var modelId = data.formId;//关联的表单id
  277 + var taskId = data.id; // 当前专项行动id
  278 + var isPreview = false;//固定死,值不变
  279 + var useFormPermission = false;//固定死,值不变
  280 + var formData = [];
  281 + request({
  282 + url: '/visualdev/OnlineDev/'+modelId+'/Config',
  283 + method: "GET",
  284 + params:null
  285 + }).then(res => {
  286 + formData = res.data.formData;
  287 + this.$refs.NCCForm.init(formData, modelId, Itemid, isPreview, useFormPermission, taskId)
  288 + });
  289 + }
  290 + },
  291 + async getBaseSpecialActionInfo(id) {
  292 + let {data} = await request({
  293 + url: `/Extend/BaseSpecialActionInfo/${id}`,
  294 + method: "GET",
  295 + })
  296 + return data;
  297 + },
  298 + taskRefresh(key, val) {
  299 + this[key] = false;
  300 + val && this.getAllTaskList();
  301 + }
284 }, 302 },
285 }; 303 };
286 </script> 304 </script>
vue.config.js
@@ -17,8 +17,8 @@ module.exports = defineConfig({ @@ -17,8 +17,8 @@ module.exports = defineConfig({
17 proxy: { 17 proxy: {
18 '/api': { 18 '/api': {
19 // 跨域请求的地址 19 // 跨域请求的地址
20 - //target: 'http://8.130.38.56:8043/api',  
21 - target: 'http://localhost:2015/api', 20 + target: 'http://8.130.38.56:8043/api',
  21 + // target: 'http://localhost:2015/api',
22 changeOrigin: true, // 是否允许跨域请求,在本地会创建一个虚拟服务端,发送接收请求数据,这样服务端和服务端进行数据的交互就不会有跨域问题 22 changeOrigin: true, // 是否允许跨域请求,在本地会创建一个虚拟服务端,发送接收请求数据,这样服务端和服务端进行数据的交互就不会有跨域问题
23 // 路径重写,替换请求地址 23 // 路径重写,替换请求地址
24 pathRewrite: { 24 pathRewrite: {
@@ -26,10 +26,10 @@ module.exports = defineConfig({ @@ -26,10 +26,10 @@ module.exports = defineConfig({
26 } 26 }
27 } 27 }
28 }, 28 },
29 - // client: {  
30 - // webSocketURL: "http://localhost:8080"  
31 - // // overlay: false  
32 - // }, 29 + client: {
  30 + // webSocketURL: "http://localhost:8080"
  31 + overlay: false
  32 + },
33 }, 33 },
34 configureWebpack: { 34 configureWebpack: {
35 name: '属地', 35 name: '属地',