edit.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  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 :gutter="24">
  6. <a-col :span="8">
  7. <a-form-item label="姓名" :label-col="{ span: 6 }"
  8. name="signinerName" :rules="[{ required: true, message: '请输入姓名!' }]">
  9. <a-input v-model:value="dataModel.signinerName" placeholder="" :disabled="true"/>
  10. </a-form-item>
  11. </a-col>
  12. <a-col :span="8">
  13. <a-form-item label="所属驿站" :label-col="{span:6}" name="siteID"
  14. :rules="[{ required: true, message: '请选择所属驿站!' }]">
  15. <a-select
  16. ref="select"
  17. v-model:value="dataModel.siteID"
  18. :options="siteList"
  19. :field-names="{ label: 'siteName', value: 'siteID' }"
  20. :allow-clear="true"
  21. @change="siteChange"
  22. >
  23. </a-select>
  24. </a-form-item>
  25. </a-col>
  26. <a-col :span="8">
  27. <a-form-item label="所属县区" :label-col="{span:6}"
  28. name="regionCode" :rules="[{ required: true, message: '请选择所属县区!' }]">
  29. <a-select
  30. ref="select" :disabled="true"
  31. v-model:value="dataModel.regionCode"
  32. :options="regionList"
  33. :field-names="{ label: 'name', value: 'code' }"
  34. :allow-clear="true"
  35. @change="loadData"
  36. >
  37. </a-select>
  38. </a-form-item>
  39. </a-col>
  40. <a-col :span="8">
  41. <a-form-item label="外出类型" :label-col="{ span: 6 }"
  42. name="signinType" :rules="[{ required: true, message: '请选择外出类型!' }]">
  43. <a-select
  44. ref="select"
  45. v-model:value="dataModel.signinType"
  46. :options="signinTypeList"
  47. :field-names="{ label: 'name', value: 'value' }"
  48. :allow-clear="true"
  49. >
  50. </a-select>
  51. </a-form-item>
  52. </a-col>
  53. <a-col :span="8">
  54. <a-form-item label="外出时间" :label-col="{ span: 6 }" name="signinTime"
  55. :rules="[{ required: true, message: '请选择外出时间!' }]">
  56. <a-date-picker
  57. v-model:value="dataModel.signinTime"
  58. picker="date"
  59. value-format="YYYY-MM-DD"/>
  60. </a-form-item>
  61. </a-col>
  62. <a-col :span="8" v-if="dataModel.signinType==1">
  63. <a-form-item label="走访企业" :label-col="{span:6}" name="companyName"
  64. :rules="[{ required: true, message: '请选择走访企业!' }]">
  65. <a-auto-complete
  66. v-model:value="dataModel.companyName"
  67. :options="companyList"
  68. @search="selectCompanyList"
  69. @change="companyChange"
  70. :field-names="{
  71. value:'companyName',
  72. }"
  73. >
  74. <template #option="item">
  75. <span v-html="formatStr1(item.companyName,false)"></span>
  76. </template>
  77. </a-auto-complete>
  78. </a-form-item>
  79. </a-col>
  80. <a-col :span="8" v-if="dataModel.signinType==2">
  81. <a-form-item label="走访人员" :label-col="{span:6}" name="jobUserName"
  82. :rules="[{ required: true, message: '请选择走访人员!' }]">
  83. <a-auto-complete
  84. v-model:value="dataModel.jobUserName"
  85. :options="jobUserList"
  86. @search="selectJobUserList"
  87. @change="jobUserChange"
  88. :field-names="{
  89. value:'name',
  90. }"
  91. >
  92. <template #option="item">
  93. <span v-html="formatStr2(item.name,false)"></span>
  94. </template>
  95. </a-auto-complete>
  96. </a-form-item>
  97. </a-col>
  98. </a-row>
  99. <a-row :gutter="24">
  100. <a-divider orientation="left">走访内容</a-divider>
  101. <a-col :span="24">
  102. <a-textarea :auto-size="{ minRows: 4, maxRows: 10 }" v-model:value="dataModel.content" placeholder="走访内容" :rows="4"/>
  103. </a-col>
  104. <a-col :span="8">
  105. </a-col>
  106. </a-row>
  107. <a-form-item class="buttom-btns">
  108. <a-button @click="onClose">取消</a-button>
  109. <a-button type="primary" html-type="submit">提交</a-button>
  110. </a-form-item>
  111. </a-form>
  112. </div>
  113. </template>
  114. <script lang="ts">
  115. import {defineComponent, reactive, ref, toRefs} from 'vue';
  116. import type {SelectProps} from 'ant-design-vue';
  117. import {useTabsViewStore} from '@/store/modules/tabsView';
  118. import BUploadFile from '@/components/file/uploadFile.vue';
  119. import {get} from "@/api/common";
  120. import {getSysDictionaryList} from '@/api/system/dictionary';
  121. import {getDataById,save} from '@/api/jobUserManager/signinMgt';
  122. import {getSiteByID, getSiteList} from "@/api/baseSettings/siteInfo";
  123. import SelectLabel from "@/views/baseSettings/label/selectLabel.vue";
  124. import {getAddressLonLat} from "@/utils/position";
  125. import {getList} from "@/api/companyService/company";
  126. import {getJobUserDataList} from "@/api/jobUserManager/jobuser";
  127. interface FormState {
  128. dataModel: any;
  129. }
  130. export default defineComponent(
  131. {
  132. components: {BUploadFile,SelectLabel},
  133. setup() {
  134. const refSelectModel = ref();
  135. const formState = reactive<FormState>({dataModel: {}});
  136. const formTableState = reactive({loading: false});
  137. const siteList = ref<any>([]);
  138. const regionList = ref<SelectProps['options']>();
  139. const signinTypeList = ref<SelectProps['options']>();
  140. const companyList = ref<Array<any>>([]);
  141. const jobUserList = ref<Array<any>>([]);
  142. const selectCompanyList = (companyName: string) => {
  143. if (companyName) {
  144. getList({
  145. pageIndex: 1,
  146. pageSize: 30,
  147. companyName,
  148. }).then((result: any) => {
  149. companyList.value = result.list;
  150. setCompanyId(companyName);
  151. })
  152. }
  153. }
  154. const selectJobUserList = (jobUserName: string) => {
  155. if (jobUserName) {
  156. getJobUserDataList({
  157. pageIndex: 1,
  158. pageSize: 30,
  159. jobUserName,
  160. }).then(data => {
  161. jobUserList.value = data.list;
  162. setJobUserId(jobUserName);
  163. console.log("jobUserList",jobUserList.value);
  164. })
  165. }
  166. }
  167. const formatStr1 = (str: any, isPostName) => {
  168. if (!str) {
  169. return "";
  170. }
  171. if (isPostName) {
  172. return str.replace(formState.dataModel.professionName, '<span style="color: coral">' + formState.dataModel.professionName + '</span>');
  173. }
  174. return str.replace(formState.dataModel.companyName, '<span style="color: coral">' + formState.dataModel.companyName + '</span>');
  175. }
  176. const formatStr2 = (str: any,isProfessionName:boolean) => {
  177. if (!str) {
  178. return "";
  179. }
  180. if(!isProfessionName){
  181. return str.replace(formState.dataModel.jobUserName, '<span style="color: coral">' + formState.dataModel.jobUserName + '</span>');
  182. }
  183. return str.replace(formState.dataModel.professionName, '<span style="color: coral">' + formState.dataModel.professionName + '</span>');
  184. }
  185. function companyChange(value: any) {
  186. formState.dataModel.companyName = value;
  187. setCompanyId(value);
  188. }
  189. function jobUserChange(value: any) {
  190. formState.dataModel.name = value;
  191. setJobUserId(value);
  192. }
  193. function setCompanyId(value: any) {
  194. const company = companyList.value.find(x => x.companyName === value);
  195. if (company) {
  196. formState.dataModel.companyID = company.companyID;
  197. } else {
  198. formState.dataModel.companyID = null;
  199. }
  200. }
  201. function setJobUserId(value:any){
  202. const curJobUser = jobUserList.value.find(x => x.name === value);
  203. if (curJobUser) {
  204. formState.dataModel.jobUserID = curJobUser.jobUserID;
  205. } else {
  206. formState.dataModel.jobUserID = null;
  207. }
  208. }
  209. const educationData = ref([]);
  210. const tabsViewStore = useTabsViewStore();
  211. const getSigninTypeList = () => {
  212. getSysDictionaryList('SigninType').then((data) => {
  213. signinTypeList.value = data;
  214. });
  215. };
  216. const getAllSites = () => {
  217. getSiteList({pageIndex:1,pageSize:9999}).then((result :any) => {
  218. siteList.value = result.list;
  219. })
  220. }
  221. get('system/area/getCityList', {}).then(data => {
  222. regionList.value = data;
  223. });
  224. const onClose = (reload: any) => {
  225. tabsViewStore.closeCurrentTabByPath('/jobusermgr/signinMgt/edit');
  226. tabsViewStore.openTab('/jobusermgr/signinMgt/index', {reload: reload});
  227. };
  228. const onFinish = () => {
  229. console.log("sfs",formState.dataModel);
  230. save(formState.dataModel).then((result) => {
  231. if (result) {
  232. onClose(1)
  233. }
  234. },() => {
  235. });
  236. }
  237. const loadData = (id: any) => {
  238. getAllSites();
  239. getSigninTypeList();
  240. getDataById(id).then(data => {
  241. formState.dataModel = data;
  242. console.log("sfs",formState.dataModel);
  243. });
  244. };
  245. // 所属驿站变更关联区县
  246. const siteChange = async function () {
  247. const curSiteData: any = await getSiteByID(formState.dataModel.siteID);
  248. formState.dataModel.regionCode = curSiteData.regionCode;
  249. }
  250. // 根据地址获取经纬度
  251. function addressChange() {
  252. if (formState.dataModel.address) {
  253. getAddressLonLat(formState.dataModel.address).then((result: any) => {
  254. if (result.lon && result.lat) {
  255. formState.dataModel.longitude = result.lon;
  256. formState.dataModel.latitude = result.lat;
  257. }
  258. });
  259. }
  260. }
  261. return {
  262. ...toRefs(formState),
  263. loadData,
  264. onClose,
  265. onFinish,
  266. siteChange,
  267. refSelectModel,
  268. siteList,
  269. regionList,
  270. companyList,
  271. jobUserList,
  272. formState,
  273. educationData,
  274. formTableState,
  275. signinTypeList,
  276. formatStr1,
  277. formatStr2,
  278. getSigninTypeList,
  279. selectCompanyList,
  280. selectJobUserList,
  281. companyChange,
  282. jobUserChange,
  283. addressChange,
  284. }
  285. },
  286. created() {
  287. const id = history.state.params?.id;
  288. this.loadData(id);
  289. }
  290. })
  291. </script>