|
@@ -0,0 +1,183 @@
|
|
|
+<template>
|
|
|
+ <div class="index">
|
|
|
+ <div class="text-center leading-80px">设备申购</div>
|
|
|
+ <van-cell style="padding-top: 0 !important;">
|
|
|
+ <van-button type="primary" size="small" @click="handleAdd">添加设备</van-button>
|
|
|
+ </van-cell>
|
|
|
+ <van-form @submit="onSubmit">
|
|
|
+ <van-cell-group inset>
|
|
|
+ <van-cell v-for="(item, index) in addFormData" :key="index">
|
|
|
+ <van-field v-model="item.xhs_zcmc" name="资产名称" label="资产名称" placeholder="资产名称" :rules="[{ required: true, message: '请填写资产名称' }]" />
|
|
|
+ <van-field v-model="item.xhs_ggxh" name="规格型号" label="规格型号" placeholder="规格型号" />
|
|
|
+ <van-field v-model="item.xhs_zcfl" is-link readonly label="资产分类" placeholder="资产分类" :rules="[{ required: true, message: '请选择资产分类' }]" @click="show = true" />
|
|
|
+ <van-popup v-model:show="show" round position="bottom">
|
|
|
+ <van-cascader v-model="cascaderValue" title="请选择资产分类" :field-names="fieldNames" :options="options" @close="show = false" @finish="onFinish($event, item)" />
|
|
|
+ </van-popup>
|
|
|
+ <van-field v-model="item.xhs_zcpc" name="资产批次" label="资产批次" placeholder="资产批次" />
|
|
|
+ <van-field v-model="item.xhs_zcdj" name="单价" label="单价" placeholder="单价" type="number" @blur="handleZjChange(item)" :rules="[{ required: true, message: '请填写单价' }]" />
|
|
|
+ <van-field v-model="item.xhs_sl" name="数量" label="数量" placeholder="数量" type="number" @blur="handleZjChange(item)" :rules="[{ required: true, message: '请填写数量' }]" />
|
|
|
+ <van-field v-model="item.xhs_dw" name="数量单位" label="数量单位" placeholder="数量单位" :rules="[{ required: true, message: '请填写数量单位' }]" />
|
|
|
+ <van-field v-model="item.xhs_ssbm" name="所属部门" label="所属部门" placeholder="所属部门" />
|
|
|
+ <van-field v-model="item.xhs_zj" name="总价" label="总价" disabled />
|
|
|
+ <van-field v-model="item.xhs_gmsj" is-link readonly name="购买时间" label='购买时间' placeholder="购买时间" @click="showDatePicker=true" />
|
|
|
+ <van-popup v-model:show="showDatePicker" position="bottom">
|
|
|
+ <van-date-picker v-model="currentDate" :min-date="minDate" @confirm="onDateConfirm($event, item)" @cancel="showDatePicker=false" />
|
|
|
+ </van-popup>
|
|
|
+ <div class="text-right">
|
|
|
+ <van-button v-if="addFormData.length>1" type="danger" size="small" @click="handleRemove(index)">删除设备</van-button>
|
|
|
+ </div>
|
|
|
+ </van-cell>
|
|
|
+ <van-cell>
|
|
|
+ <van-field v-model="totalMoney" name="合计" label="合计" disabled />
|
|
|
+ <template v-if="splc_info === null">
|
|
|
+ <div class="text-red-400 text-lg text-center py-2">暂未设置审批流程!</div>
|
|
|
+ </template>
|
|
|
+ <template v-else>
|
|
|
+ <div v-if="!dialogForm_Data_add_extend.xhs_spr" class="text-red-400 text-lg text-center py-2">无符合的流程!</div>
|
|
|
+ <template v-else>
|
|
|
+ <van-field v-model="dialogForm_Data_add_extend.xhs_spr" name="input" label="审批人" disabled />
|
|
|
+ <van-field name="radio" label="校务会讨论" disabled>
|
|
|
+ <template #input>
|
|
|
+ <van-radio-group disabled v-model="dialogForm_Data_add_extend.xhs_xwhtl" direction="horizontal">
|
|
|
+ <van-radio name="1">是</van-radio>
|
|
|
+ <van-radio name="2">否</van-radio>
|
|
|
+ </van-radio-group>
|
|
|
+ </template>
|
|
|
+ </van-field>
|
|
|
+ </template>
|
|
|
+ </template>
|
|
|
+ </van-cell>
|
|
|
+ </van-cell-group>
|
|
|
+ <div style="margin: 16px;">
|
|
|
+ <van-button round block type="primary" native-type="submit">
|
|
|
+ 提交
|
|
|
+ </van-button>
|
|
|
+ </div>
|
|
|
+ </van-form>
|
|
|
+ </div>
|
|
|
+</template>
|
|
|
+
|
|
|
+<script setup>
|
|
|
+import { computed } from "vue";
|
|
|
+import { closeToast, showConfirmDialog, showFailToast, showSuccessToast } from 'vant'
|
|
|
+const router = useRouter();
|
|
|
+const route = router.currentRoute.value
|
|
|
+const xsxk_id = route.query.xsxk_id
|
|
|
+
|
|
|
+initSplcInfo();
|
|
|
+
|
|
|
+let splc_info = $ref(null);
|
|
|
+async function initSplcInfo() {
|
|
|
+ let { code, data } = await request({ url: '/xdhq/hqgl_splcsz/index' });
|
|
|
+ if (code == 1) {
|
|
|
+ if (data.page_data[0]) {
|
|
|
+ splc_info = data.page_data[0];
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+const totalMoney = computed(() => addFormData.reduce((t, { xhs_zj }) => t += parseFloat(xhs_zj ?? '0'), 0))
|
|
|
+
|
|
|
+const dialogForm_Data_add_extend = computed(() => {
|
|
|
+ if (splc_info === null) {
|
|
|
+ return {}
|
|
|
+ } else {
|
|
|
+ const arr = JSON.parse(splc_info.xhsl_sz);
|
|
|
+ for (const iterator of arr) {
|
|
|
+ const { sign, val_1, val_2, spr, jwhtl } = iterator;
|
|
|
+ if (
|
|
|
+ (sign === '1' && totalMoney.value < val_1) ||
|
|
|
+ (sign === '2' && totalMoney.value >= val_1 && totalMoney.value < val_2) ||
|
|
|
+ (sign === '3' && totalMoney.value >= val_2)
|
|
|
+ ) {
|
|
|
+ return {
|
|
|
+ xhs_spr: spr,
|
|
|
+ xhs_xwhtl: jwhtl
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return {}
|
|
|
+ }
|
|
|
+})
|
|
|
+
|
|
|
+const addFormData = $ref([]);
|
|
|
+
|
|
|
+handleAdd();
|
|
|
+function handleAdd() {
|
|
|
+ let obj = {
|
|
|
+ xhs_zcmc: "",
|
|
|
+ xhs_ggxh: "",
|
|
|
+ xhs_zcfl: "",
|
|
|
+ xhs_zcfl_bh: "",
|
|
|
+ xhs_zcpc: "",
|
|
|
+ xhs_zcdj: "",
|
|
|
+ xhs_sl: "",
|
|
|
+ xhs_dw: "",
|
|
|
+ xhs_ssbm: "",
|
|
|
+ xhs_zj: 0,
|
|
|
+ xhs_gmsj: "",
|
|
|
+ }
|
|
|
+ if (addFormData[0]) {
|
|
|
+ obj.xhs_zcfl = addFormData[0].xhs_zcfl;
|
|
|
+ obj.xhs_zcfl_bh = addFormData[0].xhs_zcfl_bh;
|
|
|
+ }
|
|
|
+ addFormData.unshift(obj);
|
|
|
+}
|
|
|
+
|
|
|
+function handleRemove(index) {
|
|
|
+ addFormData.splice(index, 1);
|
|
|
+}
|
|
|
+
|
|
|
+function handleZjChange(obj) {
|
|
|
+ if (obj.xhs_zcdj && obj.xhs_sl) {
|
|
|
+ obj.xhs_zj = (parseFloat(obj.xhs_zcdj) * parseFloat(obj.xhs_sl)).toFixed(2);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+let showDatePicker = $ref(false);
|
|
|
+const minDate = new Date(2010, 0, 1);
|
|
|
+const currentDate = $ref([new Date().getFullYear(), new Date().getMonth() + 1, new Date().getDate()]);
|
|
|
+function onDateConfirm({ selectedValues }, data) {
|
|
|
+ data.xhs_gmsj = selectedValues.join('-');
|
|
|
+ showDatePicker = false;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+let options = $ref([]);
|
|
|
+const fieldNames = {
|
|
|
+ text: 'label',
|
|
|
+ value: 'value',
|
|
|
+ children: 'children',
|
|
|
+};
|
|
|
+let show = $ref(false);
|
|
|
+const cascaderValue = $ref('');
|
|
|
+async function initClassData() {
|
|
|
+ let { code, data } = await request({ url: '/xdhq/hqgl_xcgllb/tree' });
|
|
|
+ options = data.tree_data;
|
|
|
+}
|
|
|
+initClassData();
|
|
|
+
|
|
|
+function onFinish({ selectedOptions, value }, data) {
|
|
|
+ data.xhs_zcfl = selectedOptions.map((option) => option.label).join('/');
|
|
|
+ data.xhs_zcfl_bh = value;
|
|
|
+ show = false;
|
|
|
+}
|
|
|
+
|
|
|
+const onSubmit = async () => {
|
|
|
+ let arr = [];
|
|
|
+ addFormData.map((item) => {
|
|
|
+ arr.push(Object.assign(item, dialogForm_Data_add_extend.value, { xhs_spzt: '1' }));
|
|
|
+ })
|
|
|
+ let obj = {
|
|
|
+ xdhq_hqgl_sbsg: arr,
|
|
|
+ }
|
|
|
+ let { code } = await request({ url: '/xdhq/hqgl_sbsg/add', data: obj });
|
|
|
+ if (code == 1) {
|
|
|
+ router.back();
|
|
|
+ showSuccessToast('保存成功');
|
|
|
+ }
|
|
|
+};
|
|
|
+</script>
|
|
|
+
|
|
|
+<style>
|
|
|
+</style>
|