You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934
  1. <template>
  2. <div>
  3. <crud-template ref="crudRef" class="as-weight" :submit-state="false" :home-data="field" :tableData="tableData"
  4. @btnSearch="btnSearch" @CurrentChange="handleCurrentChange" @importData="importData" @refreshLeft="refreshLeft"
  5. @add="handleAdd" @cancel="cancel">
  6. <template #search>
  7. <el-input maxlength="60" v-trim clearable v-model="searchForm.name" style="width: 200px"
  8. placeholder="请输入网点名称" />
  9. <el-input maxlength="60" v-trim clearable v-model="searchForm.serviceHallId" style="width: 200px"
  10. placeholder="请输入网点编号" />
  11. <el-input maxlength="60" v-trim clearable v-model="searchForm.agencyId" style="width: 200px"
  12. placeholder="请输入渠道编号" />
  13. </template>
  14. <template #CustomButton>
  15. <!-- <el-button v-if="IsPermission(route, 'ADD_FIRST_DOT')" type="primary" @click="handleFirstDot" icon="Plus">
  16. 添加一级网点
  17. </el-button> -->
  18. <el-button type="success" @click="getItmeLiet()">
  19. 报备部中心网点管理
  20. </el-button>
  21. </template>
  22. <template #operation="{ scope }">
  23. <el-button v-if="IsPermission(route, 'EDIT_LIST')" type="primary" @click="handleEdit(scope.row)" size="small">
  24. 编辑
  25. </el-button>
  26. <!-- <el-button v-if="IsPermission(route, 'EDIT_LIST')" type="primary" @click="handleImport(scope.row)" size="small">
  27. 导入
  28. </el-button> -->
  29. <el-upload style="display: inline-block; margin: 0 10px;vertical-align: middle;" ref="upload" :data="data"
  30. :action="uploadUrl" :on-success="handleAvatarSuccess" accept=".xls, .xlsx" :limit="1"
  31. :on-exceed="handleExceed" :show-file-list="false" :multiple="false">
  32. <el-button type="primary" class="btn" icon="Upload" @click="handleImport(scope.row)" size="small">
  33. 导入
  34. </el-button>
  35. </el-upload>
  36. <el-button v-if="IsPermission(route, 'EDIT_LIST')" type="primary" @click="handleFileName()" size="small">
  37. 下载模板
  38. </el-button>
  39. <el-button v-if="IsPermission(route, 'DEL_LIST')" :type="scope.row.state === 'ENABLE' ? 'danger' : 'success'"
  40. @click="handleDetele(scope.row)" size="small">
  41. {{ scope.row.state === 'ENABLE' ? '禁用' : '启用' }}
  42. </el-button>
  43. </template>
  44. <template #dialog>
  45. <el-form label-position="right" label-width="150px" :model="addForm" :rules="rules"
  46. :ref="(el) => (dataFormRef = el)" :hide-required-asterisk="typeOption === 'view'"
  47. v-loading="formLoding">
  48. <el-row>
  49. <el-col :span="12">
  50. <el-form-item label="所属渠道:" prop="agencyId">
  51. <el-select clearable filterable v-model="addForm.agencyId" style="width: 100%"
  52. @change="agencyIdChange" :disabled="typeOption === 'edit'"
  53. placeholder="请选择所属渠道">
  54. <el-option v-for="item in agencyList" :key="item.value" :label="item.label" :value="item.value"/>
  55. </el-select>
  56. </el-form-item>
  57. </el-col>
  58. <el-col :span="12">
  59. <el-form-item label="渠道编号:" prop="agencyId">
  60. <el-select clearable filterable v-model="addForm.agencyId" style="width: 100%" placeholder="请选择所属渠道"
  61. :disabled="true">
  62. <el-option v-for="item in agencyList" :key="item.value" :label="item.value" :value="item.value"/>
  63. </el-select>
  64. </el-form-item>
  65. </el-col>
  66. <el-col :span="12" v-if="!isFirstDot">
  67. <el-form-item v-if="!isFirstDot" label="上级网点:" prop="superServiceHallId">
  68. <el-tree-select :load="load" lazy filterable style="width: 100%" placeholder="请选择上级网点编号"
  69. v-model="addForm.superServiceHallId" :props="{
  70. label: 'servicehallName',
  71. children: 'childrens',
  72. value: 'servicehallId',
  73. isLeaf: 'isLeaf',
  74. }" value-key="servicehallId" :check-strictly="true" :render-after-expand="false"
  75. node-key="servicehallId" show-checkbox/>
  76. </el-form-item>
  77. </el-col>
  78. <el-col :span="12">
  79. <el-form-item label="网点编号:" prop="serviceHallId">
  80. <el-input maxlength="60" v-trim clearable v-model="addForm.serviceHallId" placeholder="请输入网点编号"/>
  81. </el-form-item>
  82. </el-col>
  83. <el-col :span="12">
  84. <el-form-item label="网点名称:" prop="name">
  85. <el-input maxlength="60" v-trim clearable v-model="addForm.name" placeholder="请输入网点名称"/>
  86. </el-form-item>
  87. </el-col>
  88. <el-col :span="12">
  89. <el-form-item label="中心网点编号:" prop="mapChannelId">
  90. <el-select clearable filterable v-model="addForm.mapChannelId" style="width: 100%"
  91. @change="centerServiceHallIdChange" placeholder="请选择中心网点编号">
  92. <el-option v-for="item in centerServiceHallIdList" :key="item.centerServiceHallId"
  93. :label="item.centerServicehallName" :value="item.centerServiceHallId"/>
  94. </el-select>
  95. </el-form-item>
  96. </el-col>
  97. <el-col :span="12">
  98. <el-form-item label="地址:" prop="address">
  99. <el-input maxlength="60" v-trim clearable v-model="addForm.address" placeholder="请输入地址"/>
  100. </el-form-item>
  101. </el-col>
  102. <el-col :span="12">
  103. <el-form-item label="联系人电话:" prop="tel">
  104. <el-input maxlength="60" v-trim clearable v-model="addForm.tel" placeholder="请输入联系人电话"/>
  105. </el-form-item>
  106. </el-col>
  107. <el-col :span="12">
  108. <el-form-item label="联系人:" prop="contact">
  109. <el-input maxlength="60" v-trim clearable v-model="addForm.contact" placeholder="请输入联系人"/>
  110. </el-form-item>
  111. </el-col>
  112. <el-col :span="12">
  113. <el-form-item label="半径距离(单位:米):" prop="radial">
  114. <el-input maxlength="60" v-trim clearable v-model="addForm.radial" placeholder="请输入半径距离(单位:米)"/>
  115. </el-form-item>
  116. </el-col>
  117. <el-col :span="12">
  118. <el-form-item label="经度:" prop="longitude">
  119. <el-input maxlength="60" v-trim clearable v-model="addForm.longitude" placeholder="请输入经度"/>
  120. </el-form-item>
  121. </el-col>
  122. <el-col :span="12">
  123. <el-form-item label="纬度:" prop="latitude">
  124. <el-input maxlength="60" v-trim clearable v-model="addForm.latitude" placeholder="请输入纬度"/>
  125. </el-form-item>
  126. </el-col>
  127. </el-row>
  128. </el-form>
  129. <div style="text-align: left">
  130. <div class="as-bold">办理点信息</div>
  131. <el-button type="success" icon="Plus" @click="addBtn" style="margin-bottom: 10px;">添加办理点信息</el-button>
  132. <div style="padding: 10px 50px;text-align: left;font-weight: 700;" v-if="addForm.locationModels.length > 0"></div>
  133. <el-form style="width: 45%;display: inline-block;margin: 0 0 30px 20px" v-for="(item, index) in addForm.locationModels" :key="index" label-width="150" :rules="rules" :model="item">
  134. <el-form-item label="名称:" prop="name">
  135. <el-input maxlength="60" v-trim clearable v-model="item.name" placeholder="请输入办理点名称"/>
  136. </el-form-item>
  137. <el-form-item label="地址:" prop="address">
  138. <el-input maxlength="60" v-trim clearable v-model="item.address" placeholder="请输入地址"/>
  139. </el-form-item>
  140. <el-form-item label="经度:" prop="longitude">
  141. <el-input maxlength="60" v-trim clearable v-model="item.longitude" placeholder="请输入经度"/>
  142. </el-form-item>
  143. <el-form-item label="纬度:" prop="latitude">
  144. <el-input maxlength="60" v-trim clearable v-model="item.latitude" placeholder="请输入纬度"/>
  145. </el-form-item>
  146. <el-form-item label="半径距离(单位:米):" prop="radial">
  147. <el-input maxlength="60" v-trim clearable v-model="item.radial" placeholder="请输入半径距离(单位:米)"/>
  148. </el-form-item>
  149. <el-button class="op-btn" type="danger" @click="deleteHandle(index)">删除</el-button>
  150. </el-form>
  151. </div>
  152. </template>
  153. <template #footer>
  154. <el-button type="default" @click="cancel" v-if="typeOption !== 'view'">取消</el-button>
  155. <el-button type="primary" @click="submitHandle()" v-if="typeOption !== 'view'">确定</el-button>
  156. </template>
  157. </crud-template>
  158. <el-dialog title="报备部中心网点管理" v-model="vShowDoalog">
  159. <crud-template ref="crudRefTwo" :home-data="zxqdFind" @submit="itemAdd" @handleEdit="itemEdit" @add="Adds"
  160. :searchForm="searchForm2" @btnSearch="btnSearch2" @CurrentChange="handleCurrentChangeTwo" @handleDelete="itemDelete"
  161. :tableData="tableItemData" @refreshLeft="refreshLeft2">
  162. <template #search>
  163. <el-input maxlength="60" v-trim clearable v-model="searchForm2.id" style="width: 200px"
  164. placeholder="请输入中心网点编号" />
  165. <el-input maxlength="60" v-trim clearable v-model="searchForm2.name" style="width: 200px"
  166. placeholder="请输入中心网点名称" />
  167. </template>
  168. </crud-template>
  169. </el-dialog>
  170. </div>
  171. </template>
  172. <script setup lang="ts">
  173. import { ref, reactive, toRaw, onMounted, computed } from 'vue'
  174. // @ts-ignore crudFrom模板
  175. import CrudTemplate from '@/crud/index.vue'
  176. import BaseService from '@/utils/baseService' //引入接口请求
  177. import {
  178. ElMessage, ElMessageBox, UploadInstance, UploadProps,
  179. UploadRawFile,
  180. genFileId,
  181. } from 'element-plus' //提示
  182. import { getCache } from '@/utils/cache'
  183. import { IObject } from '@/types/interface'
  184. import { useDebounce } from '@/utils/utils'
  185. import { useRoute } from 'vue-router'
  186. import { IsPermission } from '@/router/routerUtil'
  187. import { getZxqdFindConfig } from "./data.js";
  188. const crudRef = ref()
  189. const agencyIdC = ref()
  190. const dataFormRef = ref()
  191. const url = ref()
  192. const serviceHallId = ref()
  193. const data = { bucket: '' }
  194. const parentSelectList = ref([] as IObject[])
  195. const upload = ref<UploadInstance>()
  196. //或取路由传入过来的对象数据
  197. const route = useRoute()
  198. const zxqdFind = ref(getZxqdFindConfig(route));;
  199. const vShowDoalog = ref(false);
  200. const crudRefTwo = ref();
  201. const searchForm2 = ref({});
  202. const tableItemData = ref([]);
  203. // 导入
  204. const uploadUrl = '/minIo/upload'
  205. let orderStep = ref('')
  206. const itemStartValue = ref("1")
  207. //查询参数
  208. const searchForm = ref({
  209. name: '', //网点名称
  210. serviceHallId: '', //网点编号
  211. agencyId: '', //渠道编号
  212. agencyName: '', //机构
  213. orderSource: 'WEB',
  214. })
  215. let tableData: any = ref([])
  216. const initItem = {
  217. name: '',
  218. superServiceHallId: '',
  219. serviceHallId: '',
  220. address: '',
  221. contact: '',
  222. mapChannelId: '',
  223. tel: '',
  224. orderSource: 'WEB',
  225. agencyId: '',
  226. locationModels: [
  227. ]
  228. }
  229. const addForm: any = ref(initItem)
  230. const formLoding = ref(false)
  231. const rules = reactive({
  232. // superServiceHallId: [{ required: true, message: '请输入', trigger: 'blur' }],
  233. serviceHallId: [{ required: true, message: '请输入', trigger: 'blur' }],
  234. name: [{ required: true, message: '请输入', trigger: 'blur' }],
  235. address: [{ required: true, message: '请输入', trigger: 'blur' }],
  236. tel: [{ required: true, message: '请输入', trigger: 'blur' }],
  237. contact: [{ required: true, message: '请输入', trigger: 'blur' }],
  238. longitude: [{ required: false, message: '请输入', trigger: 'blur' }],
  239. latitude: [{ required: false, message: '请输入', trigger: 'blur' }],
  240. radial: [{ required: false, message: '请输入', trigger: 'blur' }],
  241. agencyId: [{ required: true, message: '请选择', trigger: 'blur' }],
  242. mapChannelId: [{ required: true, message: '请输入', trigger: 'blur' }],
  243. })
  244. const typeOption = ref('')
  245. const agencyId = computed(() => {
  246. let cacheAccessToken = getCache(
  247. 'cacheAccessToken',
  248. { isSessionStorage: false },
  249. {}
  250. )
  251. return cacheAccessToken['agencyId']
  252. })
  253. onMounted(() => {
  254. getList()
  255. getAgencyList()
  256. })
  257. //新增
  258. const itemAdd = (data: any) => {
  259. request(data, itemStartValue.value)
  260. }
  261. const Adds = () => {
  262. // console.log(zxqdFind.value.field[0].form);
  263. zxqdFind.value.field[0].form.hideEdit = false;
  264. itemStartValue.value = 1
  265. }
  266. //表单编辑按钮
  267. function itemEdit(idx: any, row: any) {
  268. // console.log("我是编辑事件", idx, row);
  269. // request(row, 2)
  270. zxqdFind.value.field[0].form.hideEdit = true;
  271. itemStartValue.value = 2
  272. }
  273. //表单删除按钮
  274. function itemDelete(idx: any, row: any) {
  275. // console.log("删除事件", idx, row);
  276. BaseService.postN('/userw/centerServiceHall/delete', row).then((res: any) => {
  277. if (res && res.code === 0) {
  278. getItmeLiet()
  279. crudRefTwo.value.reset();
  280. crudRefTwo.value.dialogFormVisible = false;
  281. } else {
  282. ElMessage.error(res.message)
  283. }
  284. })
  285. }
  286. const request = (data: any, type: any) => {
  287. data.optType = type //操作类型 1新增 2修改
  288. BaseService.postN('/userw/centerServiceHall/addOrUpDate', data).then((res: any) => {
  289. if (res && res.code === 0) {
  290. getItmeLiet()
  291. crudRefTwo.value.reset();
  292. crudRefTwo.value.dialogFormVisible = false;
  293. } else {
  294. ElMessage.error(res.message)
  295. }
  296. })
  297. }
  298. function handleCurrentChangeTwo(val: number) {
  299. // console.log(val + '===');
  300. zxqdFind.value.paging.currentPage = val;
  301. getItmeLiet();
  302. }
  303. const getItmeLiet = () => {
  304. vShowDoalog.value = true
  305. if (crudRefTwo.value) {
  306. crudRefTwo.value.tableLoding = true;
  307. }
  308. let params: any = {
  309. methods: "page",
  310. pageNo: zxqdFind.value.paging.currentPage,
  311. pageSize: zxqdFind.value.paging.pageSize,
  312. }
  313. // console.log(searchForm2.value + '---------0');
  314. let searchFormList = { ...searchForm2.value }
  315. for (let key in searchFormList) {
  316. if (searchFormList[key]) {
  317. params[key] = searchFormList[key]
  318. }
  319. }
  320. BaseService.postN('/userw/centerServiceHall/page', params).then((res: any) => {
  321. // console.log(res, 'res')
  322. if (res && res.code === 0) {
  323. let bizContent = res.data
  324. let data = bizContent.result || [];
  325. data.forEach((item) => {
  326. if (item.models) item.models.forEach((i) => {
  327. if (i.agreementAnnex) i.fileList = [{ name: i.agreementAnnex }]
  328. })
  329. })
  330. // console.log("bizContent12222", data)
  331. tableItemData.value = data;
  332. crudRefTwo.value.tableLoding = false;
  333. zxqdFind.value.paging.total = bizContent.totalCount;
  334. } else {
  335. crudRefTwo.value.tableLoding = false;
  336. ElMessage.error(res.message)
  337. }
  338. })
  339. }
  340. // 添加
  341. const addBtn = () => {
  342. addForm.value.locationModels.push({
  343. address: '',
  344. latitude: '',
  345. longitude: '',
  346. name: '',
  347. radial: '',
  348. })
  349. }
  350. // 删除
  351. const deleteHandle = (index) => {
  352. addForm.value.locationModels.splice(index, 1)
  353. }
  354. // 搜索按钮
  355. function btnSearch() {
  356. field.value.paging.currentPage = 1
  357. getList()
  358. }
  359. // 搜索按钮
  360. function btnSearch2() {
  361. zxqdFind.value.paging.currentPage = 1
  362. getItmeLiet()
  363. }
  364. //标签分页
  365. function handleClick(tab, event) {
  366. orderStep.value = tab.props.name
  367. getItmeLiet();
  368. }
  369. //分页
  370. function handleCurrentChange(val: number) {
  371. field.value.paging.currentPage = val
  372. getList()
  373. }
  374. function handleAvatarSuccess(response: any, row) {
  375. // console.log(22222222222);
  376. // console.log(response, row, 22222222222);
  377. const { ossFilePath, originalFileName } = response.data
  378. url.value = ossFilePath
  379. // console.log(url.value, originalFileName)
  380. BaseService.postN('/userw/serviceHall/registerLocationBath', { excelFileUrl: url.value, serviceHallId: serviceHallId.value }).then((res: any) => {
  381. if (res && res.code === 0) {
  382. // console.log(res)
  383. const errUrl = res.data?.path ?? ''
  384. if (errUrl) {
  385. ElMessage.error("导入失败,请查看下载到本地文件的具体错误信息");
  386. BaseService.getDownload(
  387. import.meta.env.VITE_APP_EXPORT_URL_NEW + errUrl,
  388. '错误信息文件'
  389. )
  390. } else {
  391. ElMessage.success("导入成功");
  392. url.value = ''
  393. }
  394. }
  395. })
  396. }
  397. const handleExceed: UploadProps['onExceed'] = (files) => {
  398. upload.value!.clearFiles()
  399. const file = files[0] as UploadRawFile
  400. file.uid = genFileId()
  401. upload.value!.handleStart(file)
  402. upload.value!.submit()
  403. }
  404. // 搜索重置
  405. function refreshLeft() {
  406. searchForm.value = {
  407. name: '', //网点名称
  408. serviceHallId: '', //网点编号
  409. agencyId: '', //渠道编号
  410. agencyName: '', //机构
  411. orderSource: 'WEB',
  412. }
  413. field.value.paging.currentPage = 1
  414. getList()
  415. }
  416. // 搜索重置
  417. function refreshLeft2() {
  418. searchForm2.value = {
  419. name: '', //网点名称
  420. id:'',
  421. }
  422. zxqdFind.value.paging.currentPage = 1
  423. getItmeLiet()
  424. }
  425. //获取列表
  426. function getList() {
  427. crudRef.value.tableLoding = true
  428. let params: any = {
  429. pageNo: field.value.paging.currentPage,
  430. pageSize: field.value.paging.pageSize,
  431. }
  432. //赋值查询参数
  433. let searchFormList = { ...searchForm.value }
  434. for (let key in searchFormList) {
  435. if (searchFormList[key]) {
  436. params[key] = searchFormList[key]
  437. }
  438. }
  439. BaseService.postN('/userw/serviceHall/serviceHallSelect', params).then((res: any) => {
  440. if (res && res.code === 0) {
  441. //数据转换
  442. let bizContent = res.data
  443. let data = bizContent.result || []
  444. //数据渲染
  445. tableData.value = data
  446. crudRef.value.tableLoding = false
  447. //分页总数
  448. field.value.paging.total = bizContent.totalCount
  449. } else {
  450. crudRef.value.tableLoding = false
  451. ElMessage.error(res.message)
  452. }
  453. })
  454. }
  455. let formLabelWidth = '130px'
  456. let contentWidth = '100%'
  457. //表单数据配置
  458. let field = ref({
  459. tabSize: 'small', //Table 的尺寸 large / default /small (默认default)
  460. searchShow: IsPermission(route, 'QUERY_BASE'), //是否显示搜索模块(默认false)
  461. border: true, //是否添加边框(默认false)
  462. dialogCustom: true, //自定义Dialog (默认false)
  463. dialogFooter: true, //隐藏弹窗页脚显示 (默认false)
  464. dialogWidth: '60%', //dialog宽度 (默认40%)
  465. crudShow: true, //是否显示CURD操作栏 (默认true)
  466. crudChildShow: true, //是否显示CURD子操作栏 (默认true)
  467. paginStart: true, //是否显示分页查询 (默认false)
  468. titleDialog: '', //table 标题
  469. dataListLoading: false,
  470. operateTitle: '操作', //操作栏标题(默认为"")
  471. operateWidth: "300px", //操作栏宽度
  472. operateFixed: true, //操作栏是否固定(默认false)
  473. crud: {
  474. add: IsPermission(route, 'ADD_BASE'),
  475. },
  476. operate: {
  477. edit: false, //是否编辑(默认true)
  478. delete: false, //是否删除(默认true)
  479. remark: false, // 详情
  480. announcement: false, // 公告
  481. forbidden: false, // 禁用
  482. enable: false, // 启用
  483. authorization: false, // 授权
  484. cancel: false, // 取消订单
  485. },
  486. searchOperation: {
  487. isDownload: false,
  488. isAdd: false,
  489. isTransferMachine: false,
  490. isToLead: true, // 导入
  491. isTemplate: true,
  492. templateUrl:
  493. import.meta.env.VITE_APP_EXPORT_URL_NEW +
  494. 'zhywpt-issuer/template/userw/网点信息导入模板.xlsx',
  495. templateFileName: '网点信息导入模板',
  496. },
  497. tableSize: -1,
  498. paging: {
  499. pageSize: 10,
  500. currentPage: 1,
  501. total: 0,
  502. },
  503. extend: [
  504. {
  505. label: '序号',
  506. type: 'index',
  507. width: '50px',
  508. },
  509. ],
  510. field: [
  511. {
  512. prop: 'agencyId',
  513. label: '渠道编号',
  514. width: '100px',
  515. },
  516. {
  517. prop: 'agencyName',
  518. label: '渠道名称',
  519. width: '150px',
  520. },
  521. {
  522. prop: 'superServiceHallId',
  523. label: '上级网点编号',
  524. width: '160px',
  525. },
  526. {
  527. prop: 'superServiceHallName',
  528. label: '上级网点名称',
  529. width: '160px',
  530. }, {
  531. prop: 'mapChannelId', //centerServiceHallId
  532. label: '中心网点编号',
  533. width: '160px',
  534. },
  535. {
  536. prop: 'serviceHallId',
  537. label: '网点编号',
  538. width: '160px',
  539. },
  540. {
  541. prop: 'name',
  542. label: '网点名称',
  543. width: '150px',
  544. },
  545. {
  546. prop: 'address',
  547. label: '网点地址',
  548. width: '150px',
  549. },
  550. {
  551. prop: 'tel',
  552. label: '联系人电话',
  553. width: '100px',
  554. },
  555. {
  556. prop: 'contact',
  557. label: '联系人',
  558. width: '100px',
  559. },
  560. ],
  561. })
  562. const isFirstDot = ref(false)
  563. function getServiceHallId(e) {
  564. //获取网点编号
  565. BaseService.postN('/userw/serviceHall/getServiceHallId', {
  566. agencyId: e,
  567. }).then((res: any) => {
  568. // console.log(res, 'resresres');
  569. addForm.value.serviceHallId = res.data
  570. // load({isLeaf: false,key: res.data},()=>{})
  571. })
  572. }
  573. function getCenterServiceHall() {
  574. //获取中心网点编号信息 /userw/centerServiceHall/getCenterServiceHall
  575. BaseService.postN('/userw/centerServiceHall/getCenterServiceHall', {
  576. }).then((res: any) => {
  577. // console.log(res, 'resresres');
  578. centerServiceHallIdList.value = res.data
  579. })
  580. }
  581. //添加中心网点编号
  582. const centerServiceHallIdChange = (value) => {
  583. // console.log(value, 'eeee');
  584. addForm.value.mapChannelId = value
  585. // getServiceHallId(value)
  586. }
  587. function handleFirstDot() {
  588. //获取网点编号
  589. getCenterServiceHall()
  590. getServiceHallId(agencyId.value)
  591. isFirstDot.value = true
  592. crudRef.value.dialogFormVisible = true
  593. addForm.value.agencyId = agencyId.value
  594. }
  595. //添加一级网点切换所属渠道
  596. const agencyIdChange = (value) => {
  597. if (value === '' || value === null || value === undefined) {
  598. ElMessage.error("渠道不能为空!")
  599. return;
  600. }
  601. agencyIdC.value = value
  602. addForm.value.agencyId = value
  603. getServiceHallId(value)
  604. }
  605. const agencyList = ref<any>([])
  606. const centerServiceHallIdList = ref<any>([])
  607. // 获取所有渠道
  608. function getAgencyList() {
  609. BaseService.postN('/userw/agency/agencyqueryall').then((res: any) => {
  610. if (res && res.code === 0) {
  611. let bizContent = res.data
  612. // console.log(bizContent, '------');
  613. let data = bizContent || []
  614. let list = [] as IObject[]
  615. data.map((item) => {
  616. list.push({
  617. label: item.name,
  618. value: item.agencyId,
  619. })
  620. })
  621. agencyList.value = list
  622. } else {
  623. ElMessage.error(res.message)
  624. }
  625. })
  626. }
  627. function importData(url) {
  628. //判断url是否以/开头,剔除/
  629. url = url.startsWith('/') ? url.substring(1) : url
  630. // importFn('a8f9dac698cb4793bb15f26fd608d2b3', getList(), { excelFileUrl: url })
  631. BaseService.postN('/userw/serviceHall/registerFullBath', { excelFileUrl: url }).then((res: any) => {
  632. if (res && res.code === 0) {
  633. // console.log(res)
  634. const errUrl = res.data?.path ?? ''
  635. if (errUrl) {
  636. ElMessage.error("导入失败,请查看下载到本地文件的具体错误信息");
  637. BaseService.getDownload(
  638. import.meta.env.VITE_APP_EXPORT_URL_NEW + errUrl,
  639. '错误信息文件'
  640. )
  641. } else {
  642. ElMessage.success("导入成功");
  643. }
  644. // //处理导入失败问题
  645. // if (res && res.code === 0) {
  646. // let bizContent = res.data
  647. // let url = bizContent.url || "";
  648. // let fileName = bizContent.fileName ? `${bizContent.fileName}` : ''
  649. // if (url) {
  650. // //window.open(url)
  651. // //处理下载有文件名
  652. // BaseService.getDownloadFileName(import.meta.env.VITE_APP_UPLOAD_URL + url, fileName)
  653. // // btnLoding.value = false;
  654. // // clearData();
  655. // // emit("refreshDataList");
  656. // // emit("closeHandle");
  657. // ElMessage.success("导入成功");
  658. // } else {
  659. // ElMessage.error("导入失败");
  660. // }
  661. // } else {
  662. // // btnLoding.value = false;
  663. // ElMessage.error(res.message);
  664. // }
  665. }
  666. });
  667. }
  668. function submitClick() {
  669. getCenterServiceHall()
  670. dataFormRef.value.validate((valid: boolean) => {
  671. if (!valid) {
  672. return false
  673. }
  674. let api = ''
  675. let params = {
  676. ...addForm.value,
  677. }
  678. if (typeOption.value === 'edit') {
  679. api = '/userw/serviceHall/serviceHallUpdate'
  680. } else {
  681. if (isFirstDot.value === false) {
  682. api = '/userw/serviceHall/serviceHallInsert'
  683. } else {
  684. delete params.superServiceHallId
  685. api = '/userw/serviceHall/serviceHallInsertnelevel'
  686. }
  687. }
  688. // if (!isFirstDot.value) {
  689. // params.agencyId = agencyId.value
  690. // }
  691. // agencyList.value.forEach(item => {
  692. // if (item.value === params.agencyId) {
  693. // params.agencyName = item.label
  694. // }
  695. // });
  696. if (!params.superServiceHallId) {
  697. params.superServiceHallId = null
  698. }
  699. params.latitude =Number(params.latitude)
  700. params.longitude = Number(params.longitude)
  701. params.radial = Number(params.radial)
  702. if(!(params.locationModels === '' || params.locationModels === undefined || params.locationModels === null)){
  703. let locationModels = params.locationModels
  704. locationModels.forEach( item => {
  705. item.latitude = Number(item.latitude)
  706. item.longitude = Number(item.longitude)
  707. item.radial = Number(item.radial)
  708. })
  709. }
  710. BaseService.postN(api, params).then((res: any) => {
  711. if (res && res.code === 0) {
  712. ElMessage.success('操作成功')
  713. getList()
  714. cancel()
  715. } else {
  716. ElMessage.error(res.message)
  717. }
  718. })
  719. })
  720. }
  721. function removeNullValues(obj) {
  722. Object.keys(obj).forEach(key => {
  723. if (obj[key] === null) {
  724. delete obj[key];
  725. }
  726. });
  727. return obj;
  728. }
  729. const submitHandle = useDebounce(submitClick)
  730. function handleAdd() {
  731. // console.log(1111);
  732. getServiceHallId(agencyId.value)
  733. getCenterServiceHall()
  734. isFirstDot.value = false
  735. addForm.value.agencyId = agencyId.value
  736. }
  737. const load = (node, resolve) => {
  738. // formLoding.value = true
  739. if (node.isLeaf) return resolve([])
  740. let serviceHallId = node.data.servicehallId
  741. // console.log(node);
  742. if (!serviceHallId) { // 第一次获取数据
  743. let cacheAccessToken = getCache(
  744. 'cacheAccessToken',
  745. { isSessionStorage: false },
  746. {}
  747. )
  748. serviceHallId = cacheAccessToken['serviceHallId']
  749. BaseService.postN('/userw/serviceHall/serviceHallSonSelect', { serviceHallId })
  750. .then((res: any) => {
  751. if (res && res.code === 0) {
  752. let data = res.data || {}
  753. data.forEach(item => {
  754. if (item.childrens && item.childrens.length === 0) {
  755. item.isLeaf = true
  756. }
  757. })
  758. setTimeout(() => {
  759. resolve(data)
  760. }, 400)
  761. } else {
  762. ElMessage.error(res.message)
  763. }
  764. })
  765. .finally(() => {
  766. formLoding.value = false
  767. })
  768. } else {
  769. formLoding.value = false
  770. const children = node.data?.childrens ?? []
  771. children.forEach(item => {
  772. if (item.childrens && item.childrens.length === 0) {
  773. item.isLeaf = true
  774. }
  775. })
  776. setTimeout(() => {
  777. resolve(children)
  778. }, 400)
  779. }
  780. }
  781. // 树形数据处理
  782. function selectDataHandle(data: IObject[]): IObject[] {
  783. if (data === null || typeof data === 'undefined') return []
  784. let newData = [] as IObject[]
  785. data.map((item) => {
  786. let children = [] as IObject[]
  787. if (
  788. !(item.childrens === null || typeof item.childrens === 'undefined') &&
  789. item.childrens.length > 0
  790. ) {
  791. children = selectDataHandle(item.children)
  792. }
  793. newData.push({
  794. label: item.servicehallName,
  795. value: item.serviceHallId,
  796. children: children,
  797. })
  798. })
  799. return newData
  800. }
  801. //导入
  802. function handleImport(row) {
  803. serviceHallId.value = row.serviceHallId
  804. }
  805. //模板下载
  806. function handleFileName() {
  807. BaseService.getDownload(
  808. import.meta.env.VITE_APP_EXPORT_URL_NEW + 'zhywpt-issuer/template/userw/办理地址信息导入模板.xlsx',
  809. '办理地址信息导入模板'
  810. )
  811. }
  812. //编辑
  813. function handleEdit(row: IObject) {
  814. getCenterServiceHall()
  815. // console.log('每项数据', row)
  816. let params = {
  817. orderSource: 'WEB',
  818. serviceHallId: row.serviceHallId
  819. }
  820. BaseService.postN('/userw/serviceHall/queryLocations', params).then((res: any) => {
  821. if (res && res.code === 0) {
  822. // ElMessage.success('操作成功')
  823. // getList()
  824. // cancel()
  825. addForm.value.locationModels = res.data
  826. } else {
  827. ElMessage.error(res.message)
  828. }
  829. })
  830. if (row.superServiceHallId) {
  831. isFirstDot.value = false
  832. } else {
  833. isFirstDot.value = true
  834. }
  835. const data = toRaw(row)
  836. typeOption.value = 'edit'
  837. addForm.value = {
  838. ...addForm.value,
  839. ...data,
  840. serviceHallId: row.serviceHallId,
  841. }
  842. crudRef.value.title = '编辑'
  843. crudRef.value.dialogFormVisible = true
  844. }
  845. // 删除
  846. function handleDetele(row: IObject) {
  847. if (row.superServiceHallId) {
  848. isFirstDot.value = false
  849. } else {
  850. isFirstDot.value = true
  851. }
  852. ElMessageBox.confirm('确定要操作么?', '', {
  853. confirmButtonText: '确定',
  854. cancelButtonText: '取消',
  855. type: 'error',
  856. })
  857. .then(() => {
  858. BaseService.postN('/userw/serviceHall/serviceHallDelete', {
  859. status: row.state === 'ENABLE' ? 'DISABLE' : 'ENABLE',
  860. serviceHallId: row.serviceHallId,
  861. orderSource: 'WEB',
  862. id: row.id,
  863. }).then((res: any) => {
  864. if (res && res.code === 0) {
  865. getList()
  866. ElMessage.success(row.state === 'ENABLE' ? '禁用成功' : '启用成功')
  867. } else {
  868. ElMessage.error(res.message)
  869. }
  870. })
  871. })
  872. .catch(() => {
  873. // console.log('====取消')
  874. })
  875. }
  876. // 取消
  877. function cancel() {
  878. addForm.value = JSON.parse(JSON.stringify(initItem)) //清空数据
  879. dataFormRef.value.resetFields()
  880. crudRef.value.reset()
  881. crudRef.value.dialogFormVisible = false
  882. typeOption.value = ''
  883. crudRef.value.title = ''
  884. parentSelectList.value = []
  885. }
  886. </script>
  887. <style lang="scss" scoped>
  888. .as-bold{
  889. text-align: center;
  890. font-weight: bold;
  891. line-height: 25px;
  892. border-bottom: 1px solid rgb(153, 153, 153);
  893. border-top: 1px solid rgb(153, 153, 153);
  894. margin-bottom: 10px;
  895. }
  896. </style>