edit.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. <template>
  2. <div class="card-edit">
  3. <a-form :model="dataModel" autocomplete="off" @finish="onFinish">
  4. <a-divider orientation="left">驿站站点信息</a-divider>
  5. <a-row type="flex">
  6. <a-col :span="7">
  7. <a-form-item label="驿站编号" name="siteCode" :label-col="{span:7}" :rules="[{ required: true, message: '请输入驿站编号!' }]">
  8. <label v-if="opCategory==3">{{dataModel.siteCode}}</label>
  9. <a-input v-model:value="dataModel.siteCode" placeholder=""/>
  10. </a-form-item>
  11. </a-col>
  12. <a-col :span="8">
  13. <a-form-item label="站点名称" name="siteName" :label-col="{span:7}" :rules="[{ required: true, message: '请输入站点名称!' }]">
  14. <label v-if="opCategory==3">{{dataModel.siteName }}</label>
  15. <a-input v-model:value="dataModel.siteName" placeholder=""/>
  16. </a-form-item>
  17. </a-col>
  18. <a-col :span="8">
  19. <a-form-item label="所属机构" name="institutionID" :label-col="{span:7}" :rules="[{ required: true, message: '请选择所属机构!' }]">
  20. <label v-if="opCategory==3">{{dataModel.institutionID}}</label>
  21. <a-select ref="select" v-model:value="dataModel.institutionID" :options="institutionList"
  22. :field-names="{ label: 'text', value: 'value' }" :allow-clear="true" > </a-select>
  23. </a-form-item>
  24. </a-col>
  25. </a-row>
  26. <a-row type="flex">
  27. <a-col :span="7">
  28. <a-form-item label="所属县区" name="regionCode" :label-col="{span:7}" :rules="[{ required: true, message: '请选择所属县区!' }]">
  29. <label v-if="opCategory==3">{{dataModel.regionCode}}</label>
  30. <a-select ref="select" v-model:value="dataModel.regionCode" :options="regionList"
  31. :field-names="{ label: 'name', value: 'code' }" :allow-clear="true" @change="regionChange" > </a-select>
  32. </a-form-item>
  33. </a-col>
  34. <a-col :span="8">
  35. <a-form-item label="所属街道" name="streetCode" :label-col="{span:7}" :rules="[{ required: true, message: '请选择所属街道!' }]">
  36. <label v-if="opCategory==3">{{dataModel.streetCode }}</label>
  37. <a-select ref="select" v-model:value="dataModel.streetCode" :options="streetList"
  38. :field-names="{ label: 'name', value: 'code' }" :allow-clear="true" > </a-select>
  39. </a-form-item>
  40. </a-col>
  41. <a-col :span="8">
  42. <a-form-item label="详细地址" name="detailAddress" :label-col="{span:7}" :rules="[{ required: true, message: '请输入详细地址!' }]">
  43. <label v-if="opCategory==3">{{dataModel.detailAddress }}</label>
  44. <a-input v-model:value="dataModel.detailAddress" placeholder=""/>
  45. </a-form-item>
  46. </a-col>
  47. </a-row>
  48. <a-row type="flex">
  49. <a-col :span="7">
  50. <a-form-item label="站点负责人" name="fzrName" :label-col="{span:7}" :rules="[{ required: true, message: '请输入站点负责人!' }]">
  51. <label v-if="opCategory==3">{{dataModel.fzrName }}</label>
  52. <a-input v-model:value="dataModel.fzrName" placeholder=""/>
  53. </a-form-item>
  54. </a-col>
  55. <a-col :span="8">
  56. <a-form-item label="联系电话" name="fzrMobile" :label-col="{span:7}" :rules="[{ required: true, message: '请输入联系电话!' }]">
  57. <label v-if="opCategory==3">{{dataModel.fzrMobile }}</label>
  58. <a-input v-model:value="dataModel.fzrMobile" placeholder=""/>
  59. </a-form-item>
  60. </a-col>
  61. <a-col :span="8">
  62. <a-form-item label="经度" name="siteLongitude" :label-col="{span:7}" :rules="[{ required: true, message: '请输入经度!' }]">
  63. <label v-if="opCategory==3">{{dataModel.siteLongitude }}</label>
  64. <a-input-number style="width: 100%" :controls="false" v-model:value="dataModel.siteLongitude" placeholder=""/>
  65. </a-form-item>
  66. </a-col>
  67. <!-- <a-col :span="8">-->
  68. <!-- <a-form-item label="驿站坐标" name="sitePosition" :label-col="{span:7}" :rules="[{ required: true, message: '请选择驿站坐标!' }]">-->
  69. <!-- <label v-if="opCategory==3">{{dataModel.sitePosition}}</label>-->
  70. <!-- <a-input v-model:value="dataModel.sitePosition" placeholder=""/>-->
  71. <!-- </a-form-item>-->
  72. <!-- </a-col>-->
  73. <!-- <a-col :span="1">-->
  74. <!-- <a-button type="primary" @click='' >选择</a-button>-->
  75. <!-- </a-col>-->
  76. </a-row>
  77. <a-row type="flex">
  78. <a-col :span="7">
  79. <a-form-item label="纬度" name="siteLatitude" :label-col="{span:7}" :rules="[{ required: true, message: '请输入站点负责人!' }]">
  80. <label v-if="opCategory==3">{{dataModel.siteLatitude }}</label>
  81. <a-input-number style="width: 100%" :controls="false" v-model:value="dataModel.siteLatitude" placeholder=""/>
  82. </a-form-item>
  83. </a-col>
  84. </a-row>
  85. <!-- <a-divider orientation="left">管理人员 共计:{{manageUsers.length}}</a-divider>
  86. <a-row>
  87. <a-col :span="24" style="text-align: right; margin-top: 20px; margin-right: 20px">
  88. <Space>
  89. <a-button @click="addSiteUser">
  90. <template #icon>
  91. <plus-circle-outlined/>
  92. </template>
  93. 新增
  94. </a-button>
  95. </Space>
  96. </a-col>
  97. </a-row>
  98. <a-row>
  99. <a-col style="margin-bottom: 20px;">
  100. <a-table :columns="columns" :data-source="manageUsers" :pagination="pagination"
  101. :loading="formState.loading"
  102. @change="handleTableChange"
  103. :row-selection="{ selectedRowKeys: formState.selectedRowKeys, onChange: onSelectChange}"
  104. :row-key="record=>record.siteId"
  105. bordered>
  106. <template #bodyCell="{ column ,index}">
  107. <template v-if="column.key === 'siteUserName'">
  108. <div>
  109. <a-select
  110. ref="select"
  111. v-model:value="manageUsers[index][column.key]"
  112. :options="allUsers"
  113. @change="manageUsersChange(index,manageUsers[index][column.key])"
  114. :field-names="{ label: 'siteUserName', value: 'siteUserID' }" style="width: 200px" >
  115. </a-select>
  116. </div>
  117. </template>
  118. <template v-if="column.key === 'genderName'">
  119. {{manageUsers[index][column.key]}}
  120. </template>
  121. <template v-if="column.key === 'roleName'">
  122. {{manageUsers[index][column.key]}}
  123. </template>
  124. <template v-if="column.key === 'operation'">
  125. <a-button type="link" size="small" @click="delSiteUser(index)">删除</a-button>
  126. </template>
  127. </template>
  128. </a-table>
  129. </a-col>
  130. </a-row>-->
  131. <a-divider orientation="left">其他信息</a-divider>
  132. <a-row>
  133. <a-textarea :auto-size="{ minRows: 4, maxRows: 10 }" v-model:value="dataModel.remark" :disabled="opCategory==3"
  134. placeholder="备注" />
  135. </a-row>
  136. <a-form-item class="buttom-btns">
  137. <a-button @click="onClose">取消</a-button>
  138. <a-button type="primary" html-type="submit">提交</a-button>
  139. </a-form-item>
  140. </a-form>
  141. </div>
  142. </template>
  143. <script lang="ts">
  144. import {computed, defineComponent, reactive, ref, toRefs} from "vue";
  145. import {useTabsViewStore} from "@/store/modules/tabsView";
  146. import {getSiteByID, saveSite} from "@/api/baseSettings/siteInfo";
  147. import BUploadFile from "@/components/file/uploadFile.vue";
  148. import {message, SelectProps, TableColumnsType, TableProps} from "ant-design-vue";
  149. import {getRegionCodeList, getStreetCodeList} from "@/api/system/area/index";
  150. import {getSiteUserList,getSiteUserDataList,getListBySiteID} from "@/api/baseSettings/userInfo";
  151. import {getInstitutionDataList} from "@/api/baseSettings/institution";
  152. import {getPaginationTotalTitle} from "@/utils/common";
  153. interface siteModel {
  154. dataModel: any;
  155. }
  156. export default defineComponent({
  157. name:'SiteInfoEditForm',
  158. components: {BUploadFile},
  159. props: {
  160. loadData: {
  161. type: Function,
  162. default: null
  163. }
  164. },
  165. setup() {
  166. const title = ref();
  167. const opCategory = ref<any>();
  168. const tabsViewStore = useTabsViewStore();
  169. const isAllowCommit = ref<boolean>(false);
  170. const formState = reactive({
  171. total: 0,
  172. selectedRowKeys: [],
  173. loading: false
  174. });
  175. const formData = reactive<siteModel>({ dataModel:{}});
  176. const pageParams = reactive({
  177. pageIndex: 1,
  178. pageSize: 10,
  179. siteID:''
  180. });
  181. const columns: TableColumnsType = [
  182. {title: '序号', align: "center",key: 'siteUserID',customRender: item => `${pageParams.pageSize * (pageParams.pageIndex - 1) + item.index + 1}`},
  183. {title: '姓名', dataIndex: 'siteUserName', key: 'siteUserName', align: "center"},
  184. {title: '性别', dataIndex: 'genderName', key: 'genderName', align: "center"},
  185. {title: '角色', dataIndex: 'roleName', key: 'roleName', align: "center"},
  186. {title: '操作', key: 'operation', fixed: 'right',width:170, align: "center"},
  187. ];
  188. const pagination = computed(() => ({
  189. total: formState.total,
  190. current: pageParams.pageIndex,
  191. pageSize: pageParams.pageSize,
  192. showSizeChanger: true,
  193. showTotal: total => getPaginationTotalTitle(total)
  194. }));
  195. const onSelectChange = (selectedRowKeys: any) => {
  196. formState.selectedRowKeys = selectedRowKeys;
  197. };
  198. const handleTableChange: TableProps['onChange'] = (pag: { pageSize: number; current: number },) => {
  199. pageParams.pageIndex = pag.current;
  200. pageParams.pageSize = pag.pageSize;
  201. };
  202. const regionList = ref<SelectProps['options']>();
  203. const streetList = ref<SelectProps['options']>();
  204. const siteUserList = ref<SelectProps['options']>();
  205. const institutionList = ref<SelectProps["options"]>();
  206. const manageUsers = ref<any>([]);
  207. const allUsers = ref<any>([]);
  208. const getRegionList = async function(){
  209. const regionResult: any = await getRegionCodeList();
  210. regionList.value = regionResult;
  211. }
  212. const getStreetList = async function(){
  213. const streetResult: any = await getStreetCodeList(formData.dataModel.regionCode);
  214. streetList.value = streetResult;
  215. }
  216. const regionChange = async function(){
  217. formData.dataModel.streetCode = null;
  218. await getStreetList();
  219. }
  220. const getUserDataList = async function(){
  221. const siteUserResult :any = await getSiteUserDataList();
  222. // console.log('siteUserResult',siteUserResult);
  223. siteUserList.value = siteUserResult;
  224. }
  225. const getInstitutionList = async function(){
  226. const institutionResult :any = await getInstitutionDataList();
  227. // console.log('institutionResult',institutionResult);
  228. institutionList.value = institutionResult;
  229. }
  230. const loadData = (siteID: any) => {
  231. getAllUsers();
  232. getRegionList();
  233. getInstitutionList();
  234. getUserDataList();
  235. getSiteByID(siteID).then((result: any) => {
  236. formData.dataModel = result;
  237. //console.log("dataModel",formData.dataModel);
  238. getManageUsers(formData.dataModel.siteID);
  239. // console.log("manageUsers",manageUsers.value);
  240. if (formData.dataModel.regionCode != null){
  241. getStreetList();
  242. }
  243. if (formData.dataModel.siteX !=null && formData.dataModel.siteY != null){
  244. formData.dataModel.sitePosition = "X:"+formData.dataModel.siteX+" Y:"+formData.dataModel.siteX;
  245. }
  246. });
  247. }
  248. const getAllUsers = () => {
  249. pageParams.siteID = '';
  250. getSiteUserList(pageParams).then((result :any) => {
  251. allUsers.value = result.list;
  252. // console.log('allUsers',allUsers);
  253. })
  254. }
  255. const getManageUsers = (id: string) => {
  256. pageParams.siteID = id;
  257. getListBySiteID(pageParams).then((result :any)=> {
  258. manageUsers.value = result.list;
  259. });
  260. }
  261. /*const addSiteUser = () => {
  262. if(allUsers.value.length >0){
  263. const newUser = allUsers.value[0];
  264. // console.log(newUser);
  265. (manageUsers.value as any[]).push({siteUserID:newUser.siteUserID,siteID:formData.dataModel.siteID,siteUserName:newUser.siteUserName,genderName:newUser.genderName,roleName:newUser.roleName});
  266. validateSameUser();
  267. }else{
  268. message.error("未查询到站点信息!");
  269. }
  270. }
  271. const delSiteUser = (site) =>{
  272. (manageUsers.value as any[]).splice(site, 1);
  273. validateSameUser();
  274. }*/
  275. /*const manageUsersChange = (index:any,siteUserID:any) =>{
  276. // console.log('siteUserID',siteUserID);
  277. getSiteUserByID(siteUserID).then((result :any)=> {
  278. result.siteID = formData.dataModel.siteID;
  279. manageUsers.value[index]= result;
  280. // console.log('manageUsers',manageUsers.value);
  281. validateSameUser();
  282. });
  283. }*/
  284. /* const validateSameUser = ()=>{
  285. isAllowCommit.value = true;
  286. if (manageUsers.value.length>1){
  287. manageUsers.value.forEach(item=>{
  288. const sameData = manageUsers.value.filter(x => x.siteUserID == item.siteUserID);
  289. // console.log("sameData",sameData);
  290. if (sameData.length >1){
  291. isAllowCommit.value = false;
  292. }
  293. });
  294. }
  295. if (!isAllowCommit.value)message.error("不允许添加相同的人员!");
  296. }*/
  297. const mobileValidate = ()=>{
  298. isAllowCommit.value = true;
  299. const mobileReg = /^1[3|4|5|6|7|8|9]\d{9}$/;
  300. const landlineReg = /[0-9-()()]{7,18}/;
  301. if (!mobileReg.test(formData.dataModel.fzrMobile) && !landlineReg.test(formData.dataModel.fzrMobile)) {
  302. message.error("输入的联系电话有误!");
  303. isAllowCommit.value = false;
  304. }
  305. }
  306. const onClose = (reload: any) => {
  307. tabsViewStore.closeCurrentTabByPath('/baseSettings/site/add');
  308. tabsViewStore.closeCurrentTabByPath('/baseSettings/site/edit');
  309. tabsViewStore.openTab('/baseSettings/site/index',{reload:reload});
  310. };
  311. const onFinish = () => {
  312. mobileValidate();
  313. /*validateSameUser();*/
  314. if (isAllowCommit.value){
  315. formData.dataModel.manageUsers = manageUsers.value;
  316. saveSite(formData.dataModel).then(result => {
  317. if (result) {
  318. onClose(1);
  319. }
  320. });
  321. }
  322. };
  323. return {
  324. ...toRefs(formData),
  325. loadData,
  326. onClose,
  327. onFinish,
  328. title,
  329. opCategory,
  330. formState,
  331. isAllowCommit,
  332. columns,
  333. pageParams,
  334. pagination,
  335. regionList,
  336. streetList,
  337. siteUserList,
  338. institutionList,
  339. allUsers,
  340. manageUsers,
  341. onSelectChange,
  342. handleTableChange,
  343. regionChange,
  344. getRegionList,
  345. getStreetList,
  346. getUserDataList,
  347. getInstitutionList,
  348. getAllUsers,
  349. /*addSiteUser,
  350. delSiteUser,
  351. manageUsersChange,*/
  352. };
  353. },
  354. created() {
  355. const id = history.state.params?.id;
  356. this.loadData(id);
  357. },
  358. })
  359. </script>